diff --git a/.changeset/README.md b/.changeset/README.md deleted file mode 100644 index e5b6d8d6a..000000000 --- a/.changeset/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Changesets - -Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works -with multi-package repos, or single-package repos to help you version and publish your code. You can -find the full documentation for it [in our repository](https://github.com/changesets/changesets) - -We have a quick list of common questions to get you started engaging with this project in -[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) diff --git a/.changeset/config.json b/.changeset/config.json deleted file mode 100644 index ab848d1a1..000000000 --- a/.changeset/config.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json", - "changelog": "@changesets/cli/changelog", - "commit": false, - "fixed": [], - "linked": [], - "access": "restricted", - "baseBranch": "main", - "updateInternalDependencies": "patch", - "ignore": [] -} diff --git a/.env.sample b/.env.sample index f68cff658..bb1abd64c 100644 --- a/.env.sample +++ b/.env.sample @@ -7,8 +7,8 @@ DATABASE_URL=postgresql://USER:PASSWORD@HOST:PORT/DATABASE # Next-Auth variables NEXTAUTH_URL=https://localhost:3000 NEXTAUTH_SECRET= -GOOGLE_CLIENT_ID= -GOOGLE_CLIENT_SECRET= +AUTH_GOOGLE_ID= +AUTH_GOOGLE_SECRET= # Tests user TEST_EMAIL= @@ -19,14 +19,13 @@ NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY= STRIPE_SECRET_KEY= STRIPE_WEBHOOK_SECRET= -# Sentry auth -SENTRY_AUTH_TOKEN= -SENTRY_IGNORE_API_RESOLUTION_ERROR=1 - -# Google Cloud Storage -PROJECT_ID= -CLIENT_EMAIL= -PRIVATE_KEY= # Resend key -RESEND_API_KEY= \ No newline at end of file +RESEND_API_KEY= + +# AWS variables +AWS_S3_BUCKET= +AWS_S3_REGION= +AWS_S3_ACCESS_KEY_ID= +AWS_S3_SECRET_ACCESS_KEY= +NEXT_PUBLIC_AWS_CLOUDFRONT_URL= \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 9a6294b8b..000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "plugins": ["import", "unused-imports"], - "extends": ["next/core-web-vitals", "prettier"], - "rules": { - "unused-imports/no-unused-imports-ts": 2, - "import/extensions": [ - "error", - "ignorePackages", - { - "ts": "never", - "tsx": "never", - "js": "never", - "jsx": "never" - } - ], - "import/order": [ - "error", - { - "groups": [ - "builtin", - "external", - "internal", - ["parent", "sibling"], - "object", - "type", - "index" - ], - "pathGroups": [ - { - "pattern": "{react,react-dom/**}", - "group": "external", - "position": "before" - } - ], - "pathGroupsExcludedImportTypes": ["react"], - "newlines-between": "always", - "alphabetize": { - "order": "asc", - "caseInsensitive": true - } - } - ] - } -} diff --git a/.github/actions/build/action.yml b/.github/actions/build/action.yml new file mode 100644 index 000000000..711e6d0d9 --- /dev/null +++ b/.github/actions/build/action.yml @@ -0,0 +1,19 @@ +name: 'Build' +description: 'Sets up the repository' +runs: + using: 'composite' + steps: + - name: Checkout repo + uses: pnpm/action-setup@v3 + with: + version: 8 + + - name: Set up Node + uses: actions/setup-node@v4 + with: + node-version: lts/* + cache: 'pnpm' + + - name: Install dependencies + shell: bash + run: pnpm install \ No newline at end of file diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml deleted file mode 100644 index 8042cadae..000000000 --- a/.github/workflows/deploy.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: Deploy - -on: - push: - branches: main - -jobs: - deploy: - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v3 - with: - version: 8 - - - name: Set up Node - uses: actions/setup-node@v4 - with: - node-version: lts/* - cache: 'pnpm' - - - name: Install dependencies - run: pnpm install - - - name: Apply database changes - run: pnpm build - env: - DATABASE_URL: ${{ secrets.DATABASE_URL }} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a79c64f70..c0227323a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,34 +1,106 @@ -name: Run Type Check & Linters +name: Linting and testing -on: [pull_request] +on: + push: + branches: + - main + - dev + pull_request: {} -jobs: - run-ci: - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} +env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + DATABASE_URL: postgresql://postgres:postgres@postgres:5432/db +jobs: + lint: + name: ESLint runs-on: ubuntu-latest - steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v3 - with: - version: 8 - - name: Set up Node - uses: actions/setup-node@v4 - with: - node-version: lts/* - cache: 'pnpm' + - name: Set up repo + uses: ./.github/actions/build + + - name: Lint + run: pnpm lint + + typecheck: + name: TypeScript + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 - - name: Install dependencies - run: pnpm install + - name: Set up repo + uses: ./.github/actions/build - - name: Check types + - name: Type check run: pnpm type - - name: Check linting - run: pnpm lint + prettier: + name: Prettier + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up repo + uses: ./.github/actions/build - - name: Check prettier + - name: Format code run: pnpm prettier + + # playwright: + # name: Playwright + # runs-on: ubuntu-latest + # services: + # postgres: + # image: postgres + # env: + # POSTGRES_DB: db + # POSTGRES_USER: postgres + # POSTGRES_PASSWORD: postgres + # options: >- + # --health-cmd pg_isready + # --health-interval 10s + # --health-timeout 5s + # --health-retries 5 + # ports: + # - 5432:5432 + + # container: + # image: mcr.microsoft.com/playwright:v1.41.0-jammy + + # steps: + # - uses: actions/checkout@v4 + + # - name: Set up repo + # uses: ./.github/actions/build + + # - name: Install Playwright + # run: pnpm install:playwright:deps + + # - name: Build application + # run: pnpm build + + # - name: Start application + # run: pnpm start & + + # - name: Push database + # run: pnpm push + + # - name: Run Playwright tests + # run: pnpm test + # env: + # HOME: /root + # TEST_EMAIL: ${{secrets.TEST_EMAIL}} + # TEST_PASSWORD: ${{secrets.TEST_PASSWORD}} + # AUTH_GOOGLE_SECRET: ${{secrets.AUTH_GOOGLE_SECRET}} + # AUTH_GOOGLE_ID: ${{secrets.AUTH_GOOGLE_ID}} + # NEXTAUTH_URL: ${{secrets.NEXTAUTH_URL}} + # NEXTAUTH_SECRET: ${{secrets.NEXTAUTH_SECRET}} + + # - uses: actions/upload-artifact@v4 + # if: always() + # with: + # name: playwright-report + # path: playwright-report/ + # retention-days: 30 diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml deleted file mode 100644 index 10f6656bd..000000000 --- a/.github/workflows/playwright.yml +++ /dev/null @@ -1,74 +0,0 @@ -name: Playwright Tests - -on: - push: - branches: main - pull_request: - branches: main - -jobs: - test: - env: - DATABASE_URL: postgresql://postgres:postgres@postgres:5432/db - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - runs-on: ubuntu-22.04 - services: - postgres: - image: postgres - env: - POSTGRES_DB: db - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - ports: - - 5432:5432 - - container: - image: mcr.microsoft.com/playwright:v1.41.0-jammy - - steps: - - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v3 - with: - version: 8 - - - name: Set up Node - uses: actions/setup-node@v4 - with: - node-version: lts/* - cache: 'pnpm' - - - name: Install dependencies - run: pnpm install && pnpm install:playwright:deps - - - name: Build application - run: pnpm build:ci - - - name: Start application - run: pnpm start & - - - name: Push database - run: pnpm push - - - name: Run Playwright tests - run: pnpm test - env: - HOME: /root - TEST_EMAIL: ${{secrets.TEST_EMAIL}} - TEST_PASSWORD: ${{secrets.TEST_PASSWORD}} - GOOGLE_CLIENT_SECRET: ${{secrets.GOOGLE_CLIENT_SECRET}} - GOOGLE_CLIENT_ID: ${{secrets.GOOGLE_CLIENT_ID}} - NEXTAUTH_URL: ${{secrets.NEXTAUTH_URL}} - NEXTAUTH_SECRET: ${{secrets.NEXTAUTH_SECRET}} - - - uses: actions/upload-artifact@v4 - if: always() - with: - name: playwright-report - path: playwright-report/ - retention-days: 30 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 000000000..e40698c36 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,74 @@ +# name: Playwright Tests + +# on: +# push: +# branches: main +# pull_request: +# branches: main + +# jobs: +# test: +# env: +# DATABASE_URL: postgresql://postgres:postgres@postgres:5432/db +# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + +# runs-on: ubuntu-latest +# services: +# postgres: +# image: postgres +# env: +# POSTGRES_DB: db +# POSTGRES_USER: postgres +# POSTGRES_PASSWORD: postgres +# options: >- +# --health-cmd pg_isready +# --health-interval 10s +# --health-timeout 5s +# --health-retries 5 +# ports: +# - 5432:5432 + +# container: +# image: mcr.microsoft.com/playwright:v1.45.1-jammy + +# steps: +# - uses: actions/checkout@v4 +# - uses: pnpm/action-setup@v3 +# with: +# version: 8 + +# - name: Set up Node +# uses: actions/setup-node@v4 +# with: +# node-version: lts/* +# cache: 'pnpm' + +# - name: Install dependencies +# run: pnpm install && pnpm install:playwright:deps + +# - name: Build application +# run: pnpm build:ci + +# - name: Start application +# run: pnpm start & + +# - name: Push database +# run: pnpm push + +# - name: Run Playwright tests +# run: pnpm test +# env: +# HOME: /root +# TEST_EMAIL: ${{secrets.TEST_EMAIL}} +# TEST_PASSWORD: ${{secrets.TEST_PASSWORD}} +# AUTH_GOOGLE_SECRET: ${{secrets.AUTH_GOOGLE_SECRET}} +# AUTH_GOOGLE_ID: ${{secrets.AUTH_GOOGLE_ID}} +# NEXTAUTH_URL: ${{secrets.NEXTAUTH_URL}} +# NEXTAUTH_SECRET: ${{secrets.NEXTAUTH_SECRET}} + +# - uses: actions/upload-artifact@v4 +# if: always() +# with: +# name: playwright-report +# path: playwright-report/ +# retention-days: 30 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 187c1b60d..f03d58530 100644 --- a/.gitignore +++ b/.gitignore @@ -24,11 +24,5 @@ out/ /playwright-report/ /playwright -# Sentry Config File -.sentryclirc - -# Google Cloud Storage key -**/gcpKeyFile.json - # VSCode .vscode \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit index f1e568560..8b3e5b645 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" - pnpm dlx lint-staged diff --git a/README.md b/README.md index 415a98b0a..5d7a20609 100644 --- a/README.md +++ b/README.md @@ -21,14 +21,7 @@ Explore the exciting features and functionalities available in FAQMaker. FAQMaker is built using a stack of cutting-edge technologies. -- React -- Next.js -- Typescript -- Tailwind CSS -- Prisma -- Railway -- Stripe -- Github Actions +![My Skills](https://skillicons.dev/icons?i=react,next,ts,tailwind,prisma,githubactions) ## License diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 000000000..56fdddac8 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,85 @@ +/** @type {import('eslint').Linter.FlatConfig[]} */ + +import eslint from '@eslint/js'; +import tseslint from 'typescript-eslint'; +import eslintConfigPrettier from 'eslint-config-prettier'; +import unusedImports from "eslint-plugin-unused-imports"; +import eslintPluginImportX from 'eslint-plugin-import-x'; +import reactPlugin from 'eslint-plugin-react'; +import hooksPlugin from 'eslint-plugin-react-hooks'; +import { fixupConfigRules } from "@eslint/compat"; +import { FlatCompat } from "@eslint/eslintrc"; +import { fixupPluginRules } from '@eslint/compat'; + +const compat = new FlatCompat(); + +export default [ + eslint.configs.recommended, + ...tseslint.configs.recommended, + eslintConfigPrettier, + eslintPluginImportX.flatConfigs.recommended, + eslintPluginImportX.flatConfigs.typescript, + { + files: ['**/*.ts', '**/*.tsx'], + ignores: ['**/*.config.*', '**/*.test.ts', 'node_modules', '.next'], + languageOptions: { + parser: tseslint.parser, + sourceType: 'module', + ecmaVersion: 'latest', + parserOptions: { + project: './tsconfig.json', + extraFileExtensions: ['.tsx'], + }, + }, + plugins: { + '@typescript-eslint': tseslint.plugin, + react: reactPlugin, + 'react-hooks': fixupPluginRules(hooksPlugin), + "unused-imports": unusedImports, + }, + settings: { + 'import-x/extensions': ['.ts', '.tsx'] + }, + rules: { + ...reactPlugin.configs['jsx-runtime'].rules, + ...hooksPlugin.configs.recommended.rules, + // ...fixupConfigRules(compat.extends("next/core-web-vitals")), + "unused-imports/no-unused-imports": "error", + "unused-imports/no-unused-vars": [ + "error", + { "argsIgnorePattern": "^_" } + ], + "@typescript-eslint/no-unused-vars": "off", + "import-x/extensions": "off", + "import-x/no-unresolved": "off", + "import-x/prefer-default-export": "off", + "import-x/order": [ + "error", + { + "groups": [ + "builtin", + "external", + "internal", + ["parent", "sibling"], + "object", + "type", + "index" + ], + "pathGroups": [ + { + "pattern": "{react,react-dom/**}", + "group": "external", + "position": "before" + } + ], + "pathGroupsExcludedImportTypes": ["react"], + "newlines-between": "always", + "alphabetize": { + "order": "asc", + "caseInsensitive": true + } + } + ], + } + } +] \ No newline at end of file diff --git a/lib/prisma.ts b/lib/prisma.ts index 580e54a01..6d1f46c61 100644 --- a/lib/prisma.ts +++ b/lib/prisma.ts @@ -1,16 +1,15 @@ import { PrismaClient } from '@prisma/client'; -let prisma: PrismaClient; +const prismaClientSingleton = () => { + return new PrismaClient(); +}; -if (typeof window === 'undefined') { - if (process.env.NODE_ENV === 'production') { - prisma = new PrismaClient(); - } else { - if (!global.prisma) { - global.prisma = new PrismaClient(); - } - prisma = global.prisma; - } -} +declare const globalThis: { + prismaGlobal: ReturnType; +} & typeof global; + +const prisma = globalThis.prismaGlobal ?? prismaClientSingleton(); export default prisma; + +if (process.env.NODE_ENV !== 'production') globalThis.prismaGlobal = prisma; diff --git a/next-env.d.ts b/next-env.d.ts index 4f11a03dc..40c3d6809 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -2,4 +2,4 @@ /// // NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. +// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information. diff --git a/next.config.js b/next.config.js index c32ea527e..7c1383946 100644 --- a/next.config.js +++ b/next.config.js @@ -1,41 +1,27 @@ /** @type {import('next').NextConfig} */ const removeImports = require('next-remove-imports')(); -const { withSentryConfig } = require('@sentry/nextjs'); const nextConfig = removeImports({ transpilePackages: ['@mdxeditor/editor', 'react-diff-view'], - swcMinify: true, images: { - domains: [ - 'lh3.googleusercontent.com', - 'api.dicebear.com', - 'storage.googleapis.com', - ], + remotePatterns: [ + { + protocol: 'https', + hostname: 'lh3.googleusercontent.com' + }, + { + protocol: 'https', + hostname: '**.cloudfront.net' + } + ] }, - experimental: { - swcPlugins: [['@swc-jotai/react-refresh', {}]], - }, - webpack: (config) => { - config.experiments = { ...config.experiments, topLevelAwait: true }; - return config; + typescript: { + // !! WARN !! + // Dangerously allow production builds to successfully complete even if + // your project has type errors. + // !! WARN !! + ignoreBuildErrors: true, }, }); -const sentryConfig = withSentryConfig( - nextConfig, - { - authToken: process.env.SENTRY_AUTH_TOKEN, - silent: true, - org: 'thibaud-brault', - project: 'faqmaker', - }, - { - widenClientFileUpload: true, - transpileClientSDK: true, - tunnelRoute: '/monitoring', - hideSourceMaps: true, - disableLogger: true, - }, -); - -module.exports = sentryConfig; +module.exports = nextConfig; diff --git a/package.json b/package.json index 1cf7eac5a..65645145b 100644 --- a/package.json +++ b/package.json @@ -2,13 +2,14 @@ "name": "faqmaker", "version": "0.1.0", "private": true, + "packageManager": "pnpm@9.6.0", "scripts": { - "dev": "next dev", + "dev": "next dev --turbopack", "docker:up": "docker compose up -d", "docker:down": "docker compose down", - "build": "pnpm migrate:deploy && next build", - "build:ci": "next build", + "build": "next build", "start": "next start --port ${PORT-3000}", + "email": "email dev --dir src/components/emails --port 3001", "test": "pnpm exec playwright test", "test:headed": "pnpm exec playwright test --headed", "test:ui": "pnpm exec playwright test --ui", @@ -32,78 +33,91 @@ "postinstall": "prisma generate" }, "dependencies": { - "@google-cloud/storage": "^7.7.0", - "@hookform/resolvers": "^3.3.2", - "@next-auth/prisma-adapter": "^1.0.7", - "@prisma/client": "5.10.2", + "@auth/prisma-adapter": "^2.5.3", + "@aws-sdk/client-s3": "^3.663.0", + "@hookform/resolvers": "^3.3.4", + "@prisma/client": "5.16.1", "@radix-ui/colors": "^3.0.0", + "@radix-ui/react-alert-dialog": "^1.1.1", "@radix-ui/react-avatar": "^1.0.4", "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-label": "^2.0.2", + "@radix-ui/react-popover": "^1.1.1", "@radix-ui/react-select": "^2.0.0", "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-tabs": "^1.0.4", "@radix-ui/react-tooltip": "^1.0.7", - "@sentry/nextjs": "^7.102.1", + "@react-email/components": "^0.0.25", "@slack/webhook": "^7.0.1", - "@stripe/stripe-js": "^2.4.0", - "@tanstack/react-query": "^5.20.1", - "@uiw/react-color-sketch": "^2.0.8", + "@stripe/stripe-js": "^4.9.0", "@uiw/react-markdown-preview": "^5.0.6", "@uiw/react-md-editor": "^4.0.3", - "axios": "^1.5.0", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", "formidable": "^3.5.1", "jotai": "^2.6.4", - "lucide-react": "^0.321.0", - "next": "14.1.0", - "next-auth": "^4.24.5", - "next-connect": "^0.13.0", + "lucide-react": "^0.438.0", + "next": "15.0.1", + "next-auth": "5.0.0-beta.25", "next-remove-imports": "^1.0.12", - "next-themes": "^0.2.1", - "react": "18.2.0", - "react-dom": "18.2.0", + "next-safe-action": "^7.0.2", + "next-themes": "^0.3.0", + "react": "19.0.0-rc-69d4b800-20241021", + "react-dom": "19.0.0-rc-69d4b800-20241021", "react-dropzone": "^14.2.3", + "react-email": "^3.0.1", "react-error-boundary": "^4.0.12", "react-hook-form": "^7.45.4", "react-paginate": "^8.2.0", "react-papaparse": "^4.4.0", "rehype-sanitize": "^6.0.0", - "resend": "^3.2.0", + "resend": "^4.0.0", "slugify": "^1.6.6", "sonner": "^1.4.0", - "stripe": "^14.16.0", + "stripe": "^17.2.1", "tailwind-merge": "^2.2.0", "tailwindcss-animate": "^1.0.6", - "uuid": "^9.0.1", - "vaul": "^0.9.0", - "wcag-contrast": "^3.0.0", + "use-debounce": "^10.0.0", + "vaul": "^1.1.1", "zod": "^3.22.4" }, "devDependencies": { - "@changesets/cli": "^2.27.1", - "@playwright/test": "^1.41.1", - "@swc-jotai/react-refresh": "^0.1.0", + "@eslint/compat": "^1.1.1", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "^9.9.1", + "@next/eslint-plugin-next": "15.0.1", + "@playwright/test": "^1.45.0", + "@swc-jotai/react-refresh": "^0.2.0", "@types/formidable": "^3.4.5", - "@types/node": "^20.5.6", - "@types/react": "^18.0.27", + "@types/node": "^22.5.4", + "@types/react": "npm:types-react@19.0.0-rc.1", "autoprefixer": "^10.4.16", - "dotenv": "^16.3.1", - "eslint": "8.56.0", - "eslint-config-next": "14.1.0", + "dotenv": "^16.4.5", + "eslint": "9.9.1", + "eslint-config-next": "15.0.1", "eslint-config-prettier": "^9.0.0", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-unused-imports": "^3.0.0", + "eslint-import-resolver-typescript": "^3.6.3", + "eslint-plugin-import-x": "^4.2.0", + "eslint-plugin-playwright": "^1.6.2", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-react": "^7.37.2", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-unused-imports": "^4.1.3", "husky": "^9.0.11", "lint-staged": "^15.0.2", "postcss": "^8.4.28", "prettier": "^3.2.5", - "prettier-plugin-tailwindcss": "^0.5.11", - "prisma": "5.10.2", + "prettier-plugin-tailwindcss": "^0.6.6", + "prisma": "5.16.1", "tailwindcss": "^3.4.1", "ts-node": "^10.9.1", - "typescript": "^5.3.3" + "typescript": "^5.5.4", + "typescript-eslint": "^8.4.0" + }, + "pnpm": { + "overrides": { + "@types/react": "npm:types-react@19.0.0-rc.1" + } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a4589db98..13c83464b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,3039 +1,7382 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@google-cloud/storage': - specifier: ^7.7.0 - version: 7.7.0 - '@hookform/resolvers': - specifier: ^3.3.2 - version: 3.3.2(react-hook-form@7.45.4) - '@next-auth/prisma-adapter': - specifier: ^1.0.7 - version: 1.0.7(@prisma/client@5.10.2)(next-auth@4.24.5) - '@prisma/client': - specifier: 5.10.2 - version: 5.10.2(prisma@5.10.2) - '@radix-ui/colors': - specifier: ^3.0.0 - version: 3.0.0 - '@radix-ui/react-avatar': - specifier: ^1.0.4 - version: 1.0.4(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-dialog': - specifier: ^1.0.5 - version: 1.0.5(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-dropdown-menu': - specifier: ^2.0.6 - version: 2.0.6(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-label': - specifier: ^2.0.2 - version: 2.0.2(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-select': - specifier: ^2.0.0 - version: 2.0.0(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': - specifier: ^1.0.2 - version: 1.0.2(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-tabs': - specifier: ^1.0.4 - version: 1.0.4(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-tooltip': - specifier: ^1.0.7 - version: 1.0.7(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@sentry/nextjs': - specifier: ^7.102.1 - version: 7.102.1(next@14.1.0)(react@18.2.0)(webpack@5.89.0) - '@slack/webhook': - specifier: ^7.0.1 - version: 7.0.1 - '@stripe/stripe-js': - specifier: ^2.4.0 - version: 2.4.0 - '@tanstack/react-query': - specifier: ^5.20.1 - version: 5.20.1(react@18.2.0) - '@uiw/react-color-sketch': - specifier: ^2.0.8 - version: 2.0.8(@babel/runtime@7.23.7)(react-dom@18.2.0)(react@18.2.0) - '@uiw/react-markdown-preview': - specifier: ^5.0.6 - version: 5.0.6(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@uiw/react-md-editor': - specifier: ^4.0.3 - version: 4.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - axios: - specifier: ^1.5.0 - version: 1.5.0 - class-variance-authority: - specifier: ^0.7.0 - version: 0.7.0 - clsx: - specifier: ^2.1.0 - version: 2.1.0 - formidable: - specifier: ^3.5.1 - version: 3.5.1 - jotai: - specifier: ^2.6.4 - version: 2.6.4(@types/react@18.0.27)(react@18.2.0) - lucide-react: - specifier: ^0.321.0 - version: 0.321.0(react@18.2.0) - next: - specifier: 14.1.0 - version: 14.1.0(@babel/core@7.22.17)(react-dom@18.2.0)(react@18.2.0) - next-auth: - specifier: ^4.24.5 - version: 4.24.5(next@14.1.0)(react-dom@18.2.0)(react@18.2.0) - next-connect: - specifier: ^0.13.0 - version: 0.13.0 - next-remove-imports: - specifier: ^1.0.12 - version: 1.0.12(webpack@5.89.0) - next-themes: - specifier: ^0.2.1 - version: 0.2.1(next@14.1.0)(react-dom@18.2.0)(react@18.2.0) - react: - specifier: 18.2.0 - version: 18.2.0 - react-dom: - specifier: 18.2.0 - version: 18.2.0(react@18.2.0) - react-dropzone: - specifier: ^14.2.3 - version: 14.2.3(react@18.2.0) - react-error-boundary: - specifier: ^4.0.12 - version: 4.0.12(react@18.2.0) - react-hook-form: - specifier: ^7.45.4 - version: 7.45.4(react@18.2.0) - react-paginate: - specifier: ^8.2.0 - version: 8.2.0(react@18.2.0) - react-papaparse: - specifier: ^4.4.0 - version: 4.4.0 - rehype-sanitize: - specifier: ^6.0.0 - version: 6.0.0 - resend: - specifier: ^3.2.0 - version: 3.2.0 - slugify: - specifier: ^1.6.6 - version: 1.6.6 - sonner: - specifier: ^1.4.0 - version: 1.4.0(react-dom@18.2.0)(react@18.2.0) - stripe: - specifier: ^14.16.0 - version: 14.16.0 - tailwind-merge: - specifier: ^2.2.0 - version: 2.2.0 - tailwindcss-animate: - specifier: ^1.0.6 - version: 1.0.6(tailwindcss@3.4.1) - uuid: - specifier: ^9.0.1 - version: 9.0.1 - vaul: - specifier: ^0.9.0 - version: 0.9.0(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - wcag-contrast: - specifier: ^3.0.0 - version: 3.0.0 - zod: - specifier: ^3.22.4 - version: 3.22.4 - -devDependencies: - '@changesets/cli': - specifier: ^2.27.1 - version: 2.27.1 - '@playwright/test': - specifier: ^1.41.1 - version: 1.41.1 - '@swc-jotai/react-refresh': - specifier: ^0.1.0 - version: 0.1.0 - '@types/formidable': - specifier: ^3.4.5 - version: 3.4.5 - '@types/node': - specifier: ^20.5.6 - version: 20.5.6 - '@types/react': - specifier: ^18.0.27 - version: 18.0.27 - autoprefixer: - specifier: ^10.4.16 - version: 10.4.16(postcss@8.4.28) - dotenv: - specifier: ^16.3.1 - version: 16.3.1 - eslint: - specifier: 8.56.0 - version: 8.56.0 - eslint-config-next: - specifier: 14.1.0 - version: 14.1.0(eslint@8.56.0)(typescript@5.3.3) - eslint-config-prettier: - specifier: ^9.0.0 - version: 9.0.0(eslint@8.56.0) - eslint-plugin-import: - specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-unused-imports: - specifier: ^3.0.0 - version: 3.0.0(eslint@8.56.0) - husky: - specifier: ^9.0.11 - version: 9.0.11 - lint-staged: - specifier: ^15.0.2 - version: 15.0.2 - postcss: - specifier: ^8.4.28 - version: 8.4.28 - prettier: - specifier: ^3.2.5 - version: 3.2.5 - prettier-plugin-tailwindcss: - specifier: ^0.5.11 - version: 0.5.11(prettier@3.2.5) - prisma: - specifier: 5.10.2 - version: 5.10.2 - tailwindcss: - specifier: ^3.4.1 - version: 3.4.1(ts-node@10.9.1) - ts-node: - specifier: ^10.9.1 - version: 10.9.1(@types/node@20.5.6)(typescript@5.3.3) - typescript: - specifier: ^5.3.3 - version: 5.3.3 +overrides: + '@types/react': npm:types-react@19.0.0-rc.1 + +importers: + + .: + dependencies: + '@auth/prisma-adapter': + specifier: ^2.5.3 + version: 2.5.3(@prisma/client@5.16.1(prisma@5.16.1)) + '@aws-sdk/client-s3': + specifier: ^3.663.0 + version: 3.663.0 + '@hookform/resolvers': + specifier: ^3.3.4 + version: 3.9.0(react-hook-form@7.53.0(react@19.0.0-rc-69d4b800-20241021)) + '@prisma/client': + specifier: 5.16.1 + version: 5.16.1(prisma@5.16.1) + '@radix-ui/colors': + specifier: ^3.0.0 + version: 3.0.0 + '@radix-ui/react-alert-dialog': + specifier: ^1.1.1 + version: 1.1.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-avatar': + specifier: ^1.0.4 + version: 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-dialog': + specifier: ^1.0.5 + version: 1.1.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-dropdown-menu': + specifier: ^2.0.6 + version: 2.1.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-label': + specifier: ^2.0.2 + version: 2.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-popover': + specifier: ^1.1.1 + version: 1.1.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-select': + specifier: ^2.0.0 + version: 2.1.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-slot': + specifier: ^1.0.2 + version: 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-tabs': + specifier: ^1.0.4 + version: 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-tooltip': + specifier: ^1.0.7 + version: 1.1.2(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@react-email/components': + specifier: ^0.0.25 + version: 0.0.25(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021) + '@slack/webhook': + specifier: ^7.0.1 + version: 7.0.3 + '@stripe/stripe-js': + specifier: ^4.9.0 + version: 4.9.0 + '@uiw/react-markdown-preview': + specifier: ^5.0.6 + version: 5.1.3(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@uiw/react-md-editor': + specifier: ^4.0.3 + version: 4.0.4(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + class-variance-authority: + specifier: ^0.7.0 + version: 0.7.0 + clsx: + specifier: ^2.1.0 + version: 2.1.1 + formidable: + specifier: ^3.5.1 + version: 3.5.1 + jotai: + specifier: ^2.6.4 + version: 2.10.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + lucide-react: + specifier: ^0.438.0 + version: 0.438.0(react@19.0.0-rc-69d4b800-20241021) + next: + specifier: 15.0.1 + version: 15.0.1(@babel/core@7.24.5)(@playwright/test@1.47.2)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021) + next-auth: + specifier: 5.0.0-beta.25 + version: 5.0.0-beta.25(next@15.0.1(@babel/core@7.24.5)(@playwright/test@1.47.2)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021) + next-remove-imports: + specifier: ^1.0.12 + version: 1.0.12(webpack@5.94.0) + next-safe-action: + specifier: ^7.0.2 + version: 7.9.3(next@15.0.1(@babel/core@7.24.5)(@playwright/test@1.47.2)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021))(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(zod@3.23.8) + next-themes: + specifier: ^0.3.0 + version: 0.3.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021) + react: + specifier: 19.0.0-rc-69d4b800-20241021 + version: 19.0.0-rc-69d4b800-20241021 + react-dom: + specifier: 19.0.0-rc-69d4b800-20241021 + version: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + react-dropzone: + specifier: ^14.2.3 + version: 14.2.3(react@19.0.0-rc-69d4b800-20241021) + react-email: + specifier: ^3.0.1 + version: 3.0.1(@playwright/test@1.47.2)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021) + react-error-boundary: + specifier: ^4.0.12 + version: 4.0.13(react@19.0.0-rc-69d4b800-20241021) + react-hook-form: + specifier: ^7.45.4 + version: 7.53.0(react@19.0.0-rc-69d4b800-20241021) + react-paginate: + specifier: ^8.2.0 + version: 8.2.0(react@19.0.0-rc-69d4b800-20241021) + react-papaparse: + specifier: ^4.4.0 + version: 4.4.0 + rehype-sanitize: + specifier: ^6.0.0 + version: 6.0.0 + resend: + specifier: ^4.0.0 + version: 4.0.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021) + slugify: + specifier: ^1.6.6 + version: 1.6.6 + sonner: + specifier: ^1.4.0 + version: 1.5.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021) + stripe: + specifier: ^17.2.1 + version: 17.2.1 + tailwind-merge: + specifier: ^2.2.0 + version: 2.5.2 + tailwindcss-animate: + specifier: ^1.0.6 + version: 1.0.7(tailwindcss@3.4.12(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.6.2))) + use-debounce: + specifier: ^10.0.0 + version: 10.0.3(react@19.0.0-rc-69d4b800-20241021) + vaul: + specifier: ^1.1.1 + version: 1.1.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + zod: + specifier: ^3.22.4 + version: 3.23.8 + devDependencies: + '@eslint/compat': + specifier: ^1.1.1 + version: 1.1.1 + '@eslint/eslintrc': + specifier: ^3.1.0 + version: 3.1.0 + '@eslint/js': + specifier: ^9.9.1 + version: 9.11.0 + '@next/eslint-plugin-next': + specifier: 15.0.1 + version: 15.0.1 + '@playwright/test': + specifier: ^1.45.0 + version: 1.47.2 + '@swc-jotai/react-refresh': + specifier: ^0.2.0 + version: 0.2.0 + '@types/formidable': + specifier: ^3.4.5 + version: 3.4.5 + '@types/node': + specifier: ^22.5.4 + version: 22.5.5 + '@types/react': + specifier: npm:types-react@19.0.0-rc.1 + version: types-react@19.0.0-rc.1 + autoprefixer: + specifier: ^10.4.16 + version: 10.4.20(postcss@8.4.47) + dotenv: + specifier: ^16.4.5 + version: 16.4.5 + eslint: + specifier: 9.9.1 + version: 9.9.1(jiti@1.21.6) + eslint-config-next: + specifier: 15.0.1 + version: 15.0.1(eslint-plugin-import-x@4.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + eslint-config-prettier: + specifier: ^9.0.0 + version: 9.1.0(eslint@9.9.1(jiti@1.21.6)) + eslint-import-resolver-typescript: + specifier: ^3.6.3 + version: 3.6.3(@typescript-eslint/parser@8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint-plugin-import@2.31.0)(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-import-x: + specifier: ^4.2.0 + version: 4.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + eslint-plugin-playwright: + specifier: ^1.6.2 + version: 1.6.2(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-prettier: + specifier: ^5.1.3 + version: 5.2.1(eslint-config-prettier@9.1.0(eslint@9.9.1(jiti@1.21.6)))(eslint@9.9.1(jiti@1.21.6))(prettier@3.3.3) + eslint-plugin-react: + specifier: ^7.37.2 + version: 7.37.2(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-react-hooks: + specifier: ^5.0.0 + version: 5.0.0(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-unused-imports: + specifier: ^4.1.3 + version: 4.1.4(@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6)) + husky: + specifier: ^9.0.11 + version: 9.1.6 + lint-staged: + specifier: ^15.0.2 + version: 15.2.10 + postcss: + specifier: ^8.4.28 + version: 8.4.47 + prettier: + specifier: ^3.2.5 + version: 3.3.3 + prettier-plugin-tailwindcss: + specifier: ^0.6.6 + version: 0.6.6(prettier@3.3.3) + prisma: + specifier: 5.16.1 + version: 5.16.1 + tailwindcss: + specifier: ^3.4.1 + version: 3.4.12(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.6.2)) + ts-node: + specifier: ^10.9.1 + version: 10.9.2(@types/node@22.5.5)(typescript@5.6.2) + typescript: + specifier: ^5.5.4 + version: 5.6.2 + typescript-eslint: + specifier: ^8.4.0 + version: 8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + +packages: + + '@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'} + + '@auth/core@0.35.3': + resolution: {integrity: sha512-g6qfiqU4OtyvIEZ8J7UoIwAxEnNnLJV0/f/DW41U+4G5nhBlaCrnKhawJIJpU0D3uavXLeDT3B0BkjtiimvMDA==} + peerDependencies: + '@simplewebauthn/browser': ^9.0.1 + '@simplewebauthn/server': ^9.0.2 + nodemailer: ^6.8.0 + peerDependenciesMeta: + '@simplewebauthn/browser': + optional: true + '@simplewebauthn/server': + optional: true + nodemailer: + optional: true + + '@auth/core@0.37.2': + resolution: {integrity: sha512-kUvzyvkcd6h1vpeMAojK2y7+PAV5H+0Cc9+ZlKYDFhDY31AlvsB+GW5vNO4qE3Y07KeQgvNO9U0QUx/fN62kBw==} + peerDependencies: + '@simplewebauthn/browser': ^9.0.1 + '@simplewebauthn/server': ^9.0.2 + nodemailer: ^6.8.0 + peerDependenciesMeta: + '@simplewebauthn/browser': + optional: true + '@simplewebauthn/server': + optional: true + nodemailer: + optional: true + + '@auth/prisma-adapter@2.5.3': + resolution: {integrity: sha512-hUQ7KT4Ufbg4RqmfvRUNwQjuNsTdxWXTIid8IbmAcT5b6DMWQEvDEJUZL14rgrBHk5xZQbagfM28VxF75NgnNw==} + peerDependencies: + '@prisma/client': '>=2.26.0 || >=3 || >=4 || >=5' + + '@aws-crypto/crc32@5.2.0': + resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/crc32c@5.2.0': + resolution: {integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==} + + '@aws-crypto/sha1-browser@5.2.0': + resolution: {integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==} + + '@aws-crypto/sha256-browser@5.2.0': + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} + + '@aws-crypto/sha256-js@5.2.0': + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/supports-web-crypto@5.2.0': + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} + + '@aws-crypto/util@5.2.0': + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} + + '@aws-sdk/client-s3@3.663.0': + resolution: {integrity: sha512-XWoy6wglrxFngdswGbccR7cwmafe3ycx2/vIRDuVnIeSYdj/PgYACBt5JEM5NEzW26kFtlJpeN9hUH1i6tyfuQ==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/client-sso-oidc@3.662.0': + resolution: {integrity: sha512-YZrH0sftdmjvEIY8u0LCrfEhyaMVpN0+K0K9WsUrFRMZ7DK6nB9YD1f5EaKUN5UjNw5S7gbjSdI8neSCoELjhw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.662.0 + + '@aws-sdk/client-sso@3.662.0': + resolution: {integrity: sha512-4j3+eNSnNblcIYCJrsRRdyXFjAWGpGa7s7pdIyDMLwtYA7AKNlnlyQV14jtezhMrN2j6qZ7zZmnwEyFGipgfWA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/client-sts@3.662.0': + resolution: {integrity: sha512-RjiXvfW3a36ybHuzYuZ6ZgddYiENiXLDGC3tlZMsKWuoVQNeoh2grx1wxUA6e4ajAIqJLXs5dAYTSXzGaAqHTA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/core@3.662.0': + resolution: {integrity: sha512-w64Fa4dsgM8vN7Z+QPR3n+aAl5GXThQRH8deT/iF1rLrzfq7V8xxACJ/CLVaxrZMZUPUUgG7DUAo95nXFWmGjA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-env@3.662.0': + resolution: {integrity: sha512-Dgwb0c/FH4xT5QZZFdLTFmCkdG3woXIAgLx5HCoH9Ty5G7T8keHOU9Jm4Vpe2ZJXL7JJHlLakGS65+bgXTuLSQ==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-http@3.662.0': + resolution: {integrity: sha512-Wnle/uJI4Ku9ABJHof9sio28VlaSbF3jVQKTSVCJftvbKELlFOlY5aXSjtu0wwcJqDS5r78N5KM7aARUJES+DA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-ini@3.662.0': + resolution: {integrity: sha512-jk+A5B0NRYG4KrjJ8ef1+r9bFjhpwUm/A9grJmp3JOwcHKXvI2Gy9BXNqfqqVgrK0Gns+WyhJZy6rsRaC+v1oQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.662.0 + + '@aws-sdk/credential-provider-node@3.662.0': + resolution: {integrity: sha512-2O9wjxdLcU1b+bWVkp3YYbPHo15SU3pW4KfWTca5bB/C01i1eqiHnwsOFz/WKPYYKNj0FhXtJJjeDQLtNFYI8A==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-process@3.662.0': + resolution: {integrity: sha512-1QUdtr/JiuvRjVgA8enpgCwjq7Eud8eVUT0i/vpWuFp5TV2FFq/8BD3GBkesTdy4Ylms6QVGf7J6INdfUWQEmw==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-sso@3.662.0': + resolution: {integrity: sha512-zxze6pDPgwBwl7S3h4JDALCCz93pTAfulbCY8FqMEd7GvnAiofHpL9svyt4+gytXwwUSsQ6KxCMVLbi+8k8YIg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.662.0': + resolution: {integrity: sha512-GhPwxmHSFtwCckuT+34JG+U99qKfDWVYPLJOPI6b35+aLhfVqW5CHPmVjtM4WZqbxzsA0a3KAYA/U1ZaluI4SA==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.662.0 + + '@aws-sdk/middleware-bucket-endpoint@3.662.0': + resolution: {integrity: sha512-qBdQ7zqdanCPep7puYw1s6lH8lQ2uWP6+klp35cAYjCMbGiItclteXRQOuldkd9Oc7dtoYlTJBDKeAybJZShlw==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-expect-continue@3.662.0': + resolution: {integrity: sha512-kSSeblAz0bdE8golejbEp9tLoP1EcYGWqrAjv5kDwbo56J9vbBh12shxDULpDBNXXLBoK4DktHgJl3RqwXlK5g==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-flexible-checksums@3.662.0': + resolution: {integrity: sha512-aZEA0a0hYfOL2ah+ZlFAVr2HMWetNooyrDFq+iP04CmE674WCJBp71DdQrRvNQsW+PBkq7iHsgfYEQumYMqz9Q==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-host-header@3.662.0': + resolution: {integrity: sha512-Gkb0J1LTvD8LOS8uwoRI5weFXvvJwP1jfnYwzQrFgLymRFHJm5JtORQZtmw34dtdou+IBTUsH1mgI8b3QVVH3w==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-location-constraint@3.662.0': + resolution: {integrity: sha512-+OAm1hKXGy+F/KJFAc8RKX/z74ZOPEqVzg70kzy/mdSNGzJwvEOfT+KwDVncZ01jk9jso1Q8DXGmxfWzZ/n4aw==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-logger@3.662.0': + resolution: {integrity: sha512-aSpwVHtfMlqzpmnmmUgRNCaIcxXdRrGqGWG+VWXuYR1F6jJARDDCxGkSuKiPEOLX0h0BroUo4gqbM8ILXQ8rVw==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-recursion-detection@3.662.0': + resolution: {integrity: sha512-V/MYE+LOFIQDLnpWMHLxnKu+ELhD3pLOrWXVhKpVit6YcHxaOz6nvB40CPamSPDXenA11FGXKAGNHZ0loTpDQg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-sdk-s3@3.662.0': + resolution: {integrity: sha512-Ur5UGuS/bP5ftBxepOYJmTYES4Crh9TwIbBMUqsaal/XcdvQ7uYXK/PvlYg9P/bLpStmDBb1bxmnmjdsQBwSgw==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-ssec@3.662.0': + resolution: {integrity: sha512-7dxSUCeSLYFlMEr6BwNoYiF+4X7/JyIAyjOOI/hh9hyK8D8f3/xenACb67rPb59wUs6WgWZVg+hvWBC55a5KGg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-user-agent@3.662.0': + resolution: {integrity: sha512-NT940BLSSys/A8W3zO3g2Kj+zpeydqGbSQgN6qz84jTskQjnrlamoq+Zl9Rrp8Cn8sC10UQ09kGg97lvjVOlmg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/region-config-resolver@3.662.0': + resolution: {integrity: sha512-MDiWl4wZSVnnTELLb+jFSe0nj9HwxJPX2JnghXKkOXmbKEiE2/21DCQwU9mr9VUq2ZOQqaSnMFPr94iRu0AVTQ==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/signature-v4-multi-region@3.662.0': + resolution: {integrity: sha512-nXjFNs/VCT4jh8JyfCDTzUKfnhQU4JTwc0fi6mpQIig88fScKSBNxN4zm1zyg196xf6CBKlQc9UVnMsJYtWYDA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/token-providers@3.662.0': + resolution: {integrity: sha512-OqtBPutNC9Am10P1W5IwqRvzCVQAHRxWxZnfDBh1FQjNmoboGWYSriKxbrCRYLFffusNuzo8KnOFOmg1sRlhJQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sso-oidc': ^3.662.0 + + '@aws-sdk/types@3.662.0': + resolution: {integrity: sha512-Ff9/KRmIm8iEzodxzISLj4/pB/0hX2nVw1RFeOBC65OuM6nHrAdWHHog/CVx25hS5JPU0uE3h6NlWRaBJ7AV5w==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/util-arn-parser@3.568.0': + resolution: {integrity: sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/util-endpoints@3.662.0': + resolution: {integrity: sha512-RQ/78yNUxZZZULFg7VxT7oObGOR/FBc0ojiFoCAKC20ycY8VvVX5Eof4gyxoVpwOP7EoZO3UlWSIqtaEV/X70w==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/util-locate-window@3.568.0': + resolution: {integrity: sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/util-user-agent-browser@3.662.0': + resolution: {integrity: sha512-5wQd+HbNTY1r1Gndxf93dAEFtKz1DqcalI4Ym40To+RIonSsYQNRomFoizYNgJ1P+Mkfsr4P1dy/MNTlkqTZuQ==} + + '@aws-sdk/util-user-agent-node@3.662.0': + resolution: {integrity: sha512-vBRbZ9Hr1OGmdJPWj36X0fR8/VdI2JiwK6+oJRa6qfJ6AnhqCYZbCyeA6JIDeEu3M9iu1OLjenU8NdXhTz8c2w==} + engines: {node: '>=16.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + + '@aws-sdk/xml-builder@3.662.0': + resolution: {integrity: sha512-ikLkXn0igUpnJu2mCZjklvmcDGWT9OaLRv3JyC/cRkTaaSrblPjPM7KKsltxdMTLQ+v7fjCN0TsJpxphMfaOPA==} + engines: {node: '>=16.0.0'} + + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.25.4': + resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.24.5': + resolution: {integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.25.2': + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.25.6': + resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.25.2': + resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.24.7': + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.25.2': + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-simple-access@7.24.7': + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} + engines: {node: '>=6.9.0'} + + '@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.25.6': + resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.24.5': + resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/parser@7.25.6': + resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/runtime@7.25.6': + resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.25.0': + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.25.6': + resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.25.6': + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} + engines: {node: '>=6.9.0'} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@emnapi/runtime@1.3.1': + resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + + '@esbuild/aix-ppc64@0.19.11': + resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.19.11': + resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.19.11': + resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.19.11': + resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.19.11': + resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.19.11': + resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.19.11': + resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.19.11': + resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.19.11': + resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.19.11': + resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.19.11': + resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.19.11': + resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.19.11': + resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.19.11': + resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.19.11': + resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.19.11': + resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.19.11': + resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.19.11': + resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.19.11': + resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.19.11': + resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.19.11': + resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.19.11': + resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.19.11': + resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.11.1': + resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/compat@1.1.1': + resolution: {integrity: sha512-lpHyRyplhGPL5mGEh6M9O5nnKk0Gz4bFI+Zu6tKlPpDUN7XshWvH9C/px4UVm87IAANE0W81CEsNGbS1KlzXpA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-array@0.18.0': + resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.1.0': + resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.11.0': + resolution: {integrity: sha512-LPkkenkDqyzTFauZLLAPhIb48fj6drrfMvRGSL9tS3AcZBSVTllemLSNyCvHNNL2t797S/6DJNSIwRwXgMO/eQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.9.1': + resolution: {integrity: sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.4': + resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@floating-ui/core@1.6.8': + resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} + + '@floating-ui/dom@1.6.11': + resolution: {integrity: sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==} + + '@floating-ui/react-dom@2.1.2': + resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.8': + resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} + + '@hookform/resolvers@3.9.0': + resolution: {integrity: sha512-bU0Gr4EepJ/EQsH/IwEzYLsT/PEj5C0ynLQ4m+GSHS+xKH4TfSelhluTgOaoc4kA5s7eCsQbM4wvZLzELmWzUg==} + peerDependencies: + react-hook-form: ^7.0.0 + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.0': + resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} + engines: {node: '>=18.18'} + + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.33.5': + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.0.4': + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.0.4': + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.33.5': + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-s390x@0.33.5': + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.33.5': + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.33.5': + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.33.5': + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.33.5': + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-ia32@0.33.5': + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.33.5': + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@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/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@next/env@14.2.3': + resolution: {integrity: sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA==} + + '@next/env@15.0.1': + resolution: {integrity: sha512-lc4HeDUKO9gxxlM5G2knTRifqhsY6yYpwuHspBZdboZe0Gp+rZHBNNSIjmQKDJIdRXiXGyVnSD6gafrbQPvILQ==} + + '@next/eslint-plugin-next@15.0.1': + resolution: {integrity: sha512-bKWsMaGPbiFAaGqrDJvbE8b4Z0uKicGVcgOI77YM2ui3UfjHMr4emFPrZTLeZVchi7fT1mooG2LxREfUUClIKw==} + + '@next/swc-darwin-arm64@14.2.3': + resolution: {integrity: sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-arm64@15.0.1': + resolution: {integrity: sha512-C9k/Xv4sxkQRTA37Z6MzNq3Yb1BJMmSqjmwowoWEpbXTkAdfOwnoKOpAb71ItSzoA26yUTIo6ZhN8rKGu4ExQw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@14.2.3': + resolution: {integrity: sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-darwin-x64@15.0.1': + resolution: {integrity: sha512-uHl13HXOuq1G7ovWFxCACDJHTSDVbn/sbLv8V1p+7KIvTrYQ5HNoSmKBdYeEKRRCbEmd+OohOgg9YOp8Ux3MBg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@14.2.3': + resolution: {integrity: sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-arm64-gnu@15.0.1': + resolution: {integrity: sha512-LvyhvxHOihFTEIbb35KxOc3q8w8G4xAAAH/AQnsYDEnOvwawjL2eawsB59AX02ki6LJdgDaHoTEnC54Gw+82xw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-arm64-musl@14.2.3': + resolution: {integrity: sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-arm64-musl@15.0.1': + resolution: {integrity: sha512-vFmCGUFNyk/A5/BYcQNhAQqPIw01RJaK6dRO+ZEhz0DncoW+hJW1kZ8aH2UvTX27zPq3m85zN5waMSbZEmANcQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-x64-gnu@14.2.3': + resolution: {integrity: sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-linux-x64-gnu@15.0.1': + resolution: {integrity: sha512-5by7IYq0NCF8rouz6Qg9T97jYU68kaClHPfGpQG2lCZpSYHtSPQF1kjnqBTd34RIqPKMbCa4DqCufirgr8HM5w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-linux-x64-musl@14.2.3': + resolution: {integrity: sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-linux-x64-musl@15.0.1': + resolution: {integrity: sha512-lmYr6H3JyDNBJLzklGXLfbehU3ay78a+b6UmBGlHls4xhDXBNZfgb0aI67sflrX+cGBnv1LgmWzFlYrAYxS1Qw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-win32-arm64-msvc@14.2.3': + resolution: {integrity: sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-arm64-msvc@15.0.1': + resolution: {integrity: sha512-DS8wQtl6diAj0eZTdH0sefykm4iXMbHT4MOvLwqZiIkeezKpkgPFcEdFlz3vKvXa2R/2UEgMh48z1nEpNhjeOQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-ia32-msvc@14.2.3': + resolution: {integrity: sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@next/swc-win32-x64-msvc@14.2.3': + resolution: {integrity: sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@next/swc-win32-x64-msvc@15.0.1': + resolution: {integrity: sha512-4Ho2ggvDdMKlZ/0e9HNdZ9ngeaBwtc+2VS5oCeqrbXqOgutX6I4U2X/42VBw0o+M5evn4/7v3zKgGHo+9v/VjA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@nolyfill/is-core-module@1.0.39': + resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} + engines: {node: '>=12.4.0'} + + '@one-ini/wasm@0.1.1': + resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} + + '@panva/hkdf@1.2.1': + resolution: {integrity: sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@playwright/test@1.47.2': + resolution: {integrity: sha512-jTXRsoSPONAs8Za9QEQdyjFn+0ZQFjCiIztAIF6bi1HqhBzG9Ma7g1WotyiGqFSBRZjIEqMdT8RUlbk1QVhzCQ==} + engines: {node: '>=18'} + hasBin: true + + '@prisma/client@5.16.1': + resolution: {integrity: sha512-wM9SKQjF0qLxdnOZIVAIMKiz6Hu7vDt4FFAih85K1dk/Rr2mdahy6d3QP41K62N9O0DJJA//gUDA3Mp49xsKIg==} + engines: {node: '>=16.13'} + peerDependencies: + prisma: '*' + peerDependenciesMeta: + prisma: + optional: true + + '@prisma/debug@5.16.1': + resolution: {integrity: sha512-JsNgZAg6BD9RInLSrg7ZYzo11N7cVvYArq3fHGSD89HSgtN0VDdjV6bib7YddbcO6snzjchTiLfjeTqBjtArVQ==} + + '@prisma/engines-version@5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303': + resolution: {integrity: sha512-HkT2WbfmFZ9WUPyuJHhkiADxazHg8Y4gByrTSVeb3OikP6tjQ7txtSUGu9OBOBH0C13dPKN2qqH12xKtHu/Hiw==} + + '@prisma/engines@5.16.1': + resolution: {integrity: sha512-KkyF3eIUtBIyp5A/rJHCtwQO18OjpGgx18PzjyGcJDY/+vNgaVyuVd+TgwBgeq6NLdd1XMwRCI+58vinHsAdfA==} + + '@prisma/fetch-engine@5.16.1': + resolution: {integrity: sha512-oOkjaPU1lhcA/Rvr4GVfd1NLJBwExgNBE36Ueq7dr71kTMwy++a3U3oLd2ZwrV9dj9xoP6LjCcky799D9nEt4w==} + + '@prisma/get-platform@5.16.1': + resolution: {integrity: sha512-R4IKnWnMkR2nUAbU5gjrPehdQYUUd7RENFD2/D+xXTNhcqczp0N+WEGQ3ViyI3+6mtVcjjNIMdnUTNyu3GxIgA==} + + '@radix-ui/colors@3.0.0': + resolution: {integrity: sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==} + + '@radix-ui/number@1.1.0': + resolution: {integrity: sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==} + + '@radix-ui/primitive@1.1.0': + resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==} + + '@radix-ui/react-alert-dialog@1.1.1': + resolution: {integrity: sha512-wmCoJwj7byuVuiLKqDLlX7ClSUU0vd9sdCeM+2Ls+uf13+cpSJoMgwysHq1SGVVkJj5Xn0XWi1NoRCdkMpr6Mw==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + '@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 + + '@radix-ui/react-arrow@1.1.0': + resolution: {integrity: sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + '@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 + + '@radix-ui/react-avatar@1.1.0': + resolution: {integrity: sha512-Q/PbuSMk/vyAd/UoIShVGZ7StHHeRFYU7wXmi5GV+8cLXflZAEpHL/F697H1klrzxKXNtZ97vWiC0q3RKUH8UA==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + '@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 + + '@radix-ui/react-collection@1.1.0': + resolution: {integrity: sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + '@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 + + '@radix-ui/react-compose-refs@1.1.0': + resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-context@1.1.0': + resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dialog@1.1.1': + resolution: {integrity: sha512-zysS+iU4YP3STKNS6USvFVqI4qqx8EpiwmT5TuCApVEBca+eRCbONi4EgzfNSuVnOXvC5UPHHMjs8RXO6DH9Bg==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + '@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 + + '@radix-ui/react-direction@1.1.0': + resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dismissable-layer@1.1.0': + resolution: {integrity: sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + '@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 + + '@radix-ui/react-dropdown-menu@2.1.1': + resolution: {integrity: sha512-y8E+x9fBq9qvteD2Zwa4397pUVhYsh9iq44b5RD5qu1GMJWBCBuVg1hMyItbc6+zH00TxGRqd9Iot4wzf3OoBQ==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + '@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 + + '@radix-ui/react-focus-guards@1.1.0': + resolution: {integrity: sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-focus-scope@1.1.0': + resolution: {integrity: sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + '@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 + + '@radix-ui/react-id@1.1.0': + resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-label@2.1.0': + resolution: {integrity: sha512-peLblDlFw/ngk3UWq0VnYaOLy6agTZZ+MUO/WhVfm14vJGML+xH4FAl2XQGLqdefjNb7ApRg6Yn7U42ZhmYXdw==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + '@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 + + '@radix-ui/react-menu@2.1.1': + resolution: {integrity: sha512-oa3mXRRVjHi6DZu/ghuzdylyjaMXLymx83irM7hTxutQbD+7IhPKdMdRHD26Rm+kHRrWcrUkkRPv5pd47a2xFQ==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + '@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 + + '@radix-ui/react-popover@1.1.1': + resolution: {integrity: sha512-3y1A3isulwnWhvTTwmIreiB8CF4L+qRjZnK1wYLO7pplddzXKby/GnZ2M7OZY3qgnl6p9AodUIHRYGXNah8Y7g==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + '@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 + + '@radix-ui/react-popper@1.2.0': + resolution: {integrity: sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + '@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 + + '@radix-ui/react-portal@1.1.1': + resolution: {integrity: sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + '@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 + + '@radix-ui/react-presence@1.1.0': + resolution: {integrity: sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + '@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 + + '@radix-ui/react-primitive@2.0.0': + resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + '@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 + + '@radix-ui/react-roving-focus@1.1.0': + resolution: {integrity: sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + '@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 + + '@radix-ui/react-select@2.1.1': + resolution: {integrity: sha512-8iRDfyLtzxlprOo9IicnzvpsO1wNCkuwzzCM+Z5Rb5tNOpCdMvcc2AkzX0Fz+Tz9v6NJ5B/7EEgyZveo4FBRfQ==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + '@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 + + '@radix-ui/react-slot@1.1.0': + resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-tabs@1.1.0': + resolution: {integrity: sha512-bZgOKB/LtZIij75FSuPzyEti/XBhJH52ExgtdVqjCIh+Nx/FW+LhnbXtbCzIi34ccyMsyOja8T0thCzoHFXNKA==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + '@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 + + '@radix-ui/react-tooltip@1.1.2': + resolution: {integrity: sha512-9XRsLwe6Yb9B/tlnYCPVUd/TFS4J7HuOZW345DCeC6vKIxQGMZdx21RK4VoZauPD5frgkXTYVS5y90L+3YBn4w==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + '@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 + + '@radix-ui/react-use-callback-ref@1.1.0': + resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-controllable-state@1.1.0': + resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-escape-keydown@1.1.0': + resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-layout-effect@1.1.0': + resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-previous@1.1.0': + resolution: {integrity: sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-rect@1.1.0': + resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-size@1.1.0': + resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-visually-hidden@1.1.0': + resolution: {integrity: sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + '@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 + + '@radix-ui/rect@1.1.0': + resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} + + '@react-email/body@0.0.10': + resolution: {integrity: sha512-dMJyL9aU25ieatdPtVjCyQ/WHZYHwNc+Hy/XpF8Cc18gu21cUynVEeYQzFSeigDRMeBQ3PGAyjVDPIob7YlGwA==} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/button@0.0.17': + resolution: {integrity: sha512-ioHdsk+BpGS/PqjU6JS7tUrVy9yvbUx92Z+Cem2+MbYp55oEwQ9VHf7u4f5NoM0gdhfKSehBwRdYlHt/frEMcg==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/code-block@0.0.9': + resolution: {integrity: sha512-Zrhc71VYrSC1fVXJuaViKoB/dBjxLw6nbE53Bm/eUuZPdnnZ1+ZUIh8jfaRKC5MzMjgnLGQTweGXVnfIrhyxtQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/code-inline@0.0.4': + resolution: {integrity: sha512-zj3oMQiiUCZbddSNt3k0zNfIBFK0ZNDIzzDyBaJKy6ZASTtWfB+1WFX0cpTX8q0gUiYK+A94rk5Qp68L6YXjXQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/column@0.0.12': + resolution: {integrity: sha512-Rsl7iSdDaeHZO938xb+0wR5ud0Z3MVfdtPbNKJNojZi2hApwLAQXmDrnn/AcPDM5Lpl331ZljJS8vHTWxxkvKw==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/components@0.0.25': + resolution: {integrity: sha512-lnfVVrThEcET5NPoeaXvrz9UxtWpGRcut2a07dLbyKgNbP7vj/cXTI5TuHtanCvhCddFpMDnElNRghDOfPzwUg==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/container@0.0.14': + resolution: {integrity: sha512-NgoaJJd9tTtsrveL86Ocr/AYLkGyN3prdXKd/zm5fQpfDhy/NXezyT3iF6VlwAOEUIu64ErHpAJd+P6ygR+vjg==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/font@0.0.8': + resolution: {integrity: sha512-fSBEqYyVPAyyACBBHcs3wEYzNknpHMuwcSAAKE8fOoDfGqURr/vSxKPdh4tOa9z7G4hlcEfgGrCYEa2iPT22cw==} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/head@0.0.11': + resolution: {integrity: sha512-skw5FUgyamIMK+LN+fZQ5WIKQYf0dPiRAvsUAUR2eYoZp9oRsfkIpFHr0GWPkKAYjFEj+uJjaxQ/0VzQH7svVg==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/heading@0.0.14': + resolution: {integrity: sha512-jZM7IVuZOXa0G110ES8OkxajPTypIKlzlO1K1RIe1auk76ukQRiCg1IRV4HZlWk1GGUbec5hNxsvZa2kU8cb9w==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/hr@0.0.10': + resolution: {integrity: sha512-3AA4Yjgl3zEid/KVx6uf6TuLJHVZvUc2cG9Wm9ZpWeAX4ODA+8g9HyuC0tfnjbRsVMhMcCGiECuWWXINi+60vA==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/html@0.0.10': + resolution: {integrity: sha512-06uiuSKJBWQJfhCKv4MPupELei4Lepyz9Sth7Yq7Fq29CAeB1ejLgKkGqn1I+FZ72hQxPLdYF4iq4yloKv3JCg==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/img@0.0.10': + resolution: {integrity: sha512-pJ8glJjDNaJ53qoM95pvX9SK05yh0bNQY/oyBKmxlBDdUII6ixuMc3SCwYXPMl+tgkQUyDgwEBpSTrLAnjL3hA==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/link@0.0.10': + resolution: {integrity: sha512-tva3wvAWSR10lMJa9fVA09yRn7pbEki0ZZpHE6GD1jKbFhmzt38VgLO9B797/prqoDZdAr4rVK7LJFcdPx3GwA==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/markdown@0.0.12': + resolution: {integrity: sha512-wsuvj1XAb6O63aizCLNEeqVgKR3oFjAwt9vjfg2y2oh4G1dZeo8zonZM2x1fmkEkBZhzwSHraNi70jSXhA3A9w==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/preview@0.0.11': + resolution: {integrity: sha512-7O/CT4b16YlSGrj18htTPx3Vbhu2suCGv/cSe5c+fuSrIM/nMiBSZ3Js16Vj0XJbAmmmlVmYFZw9L20wXJ+LjQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/render@0.0.17': + resolution: {integrity: sha512-xBQ+/73+WsGuXKY7r1U73zMBNV28xdV0cp9cFjhNYipBReDHhV97IpA6v7Hl0dDtDzt+yS/72dY5vYXrF1v8NA==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.2.0 + react-dom: ^18.2.0 + + '@react-email/render@1.0.1': + resolution: {integrity: sha512-W3gTrcmLOVYnG80QuUp22ReIT/xfLsVJ+n7ghSlG2BITB8evNABn1AO2rGQoXuK84zKtDAlxCdm3hRyIpZdGSA==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/row@0.0.10': + resolution: {integrity: sha512-jPyEhG3gsLX+Eb9U+A30fh0gK6hXJwF4ghJ+ZtFQtlKAKqHX+eCpWlqB3Xschd/ARJLod8WAswg0FB+JD9d0/A==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/section@0.0.14': + resolution: {integrity: sha512-+fYWLb4tPU1A/+GE5J1+SEMA7/wR3V30lQ+OR9t2kAJqNrARDbMx0bLnYnR1QL5TiFRz0pCF05SQUobk6gHEDQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/tailwind@0.1.0': + resolution: {integrity: sha512-qysVUEY+M3SKUvu35XDpzn7yokhqFOT3tPU6Mj/pgc62TL5tQFj6msEbBtwoKs2qO3WZvai0DIHdLhaOxBQSow==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/text@0.0.10': + resolution: {integrity: sha512-wNAnxeEAiFs6N+SxS0y6wTJWfewEzUETuyS2aZmT00xk50VijwyFRuhm4sYSjusMyshevomFwz5jNISCxRsGWw==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@rushstack/eslint-patch@1.10.4': + resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} + + '@selderee/plugin-htmlparser2@0.11.0': + resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} + + '@slack/types@2.14.0': + resolution: {integrity: sha512-n0EGm7ENQRxlXbgKSrQZL69grzg1gHLAVd+GlRVQJ1NSORo0FrApR7wql/gaKdu2n4TO83Sq/AmeUOqD60aXUA==} + engines: {node: '>= 12.13.0', npm: '>= 6.12.0'} + + '@slack/webhook@7.0.3': + resolution: {integrity: sha512-qRPMq3In5znBpRLw4IQvYy8M3+CRd8/FKfZjA0BoNx/Q1qm4+kom8BTaOz+HMoRpnywMbr+4B/Tc5JR3nUJ+ew==} + engines: {node: '>= 18', npm: '>= 8.6.0'} + + '@smithy/abort-controller@3.1.5': + resolution: {integrity: sha512-DhNPnqTqPoG8aZ5dWkFOgsuY+i0GQ3CI6hMmvCoduNsnU9gUZWZBwGfDQsTTB7NvFPkom1df7jMIJWU90kuXXg==} + engines: {node: '>=16.0.0'} + + '@smithy/chunked-blob-reader-native@3.0.0': + resolution: {integrity: sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg==} + + '@smithy/chunked-blob-reader@3.0.0': + resolution: {integrity: sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA==} + + '@smithy/config-resolver@3.0.9': + resolution: {integrity: sha512-5d9oBf40qC7n2xUoHmntKLdqsyTMMo/r49+eqSIjJ73eDfEtljAxEhzIQ3bkgXJtR3xiv7YzMT/3FF3ORkjWdg==} + engines: {node: '>=16.0.0'} + + '@smithy/core@2.4.7': + resolution: {integrity: sha512-goqMjX+IoVEnHZjYuzu8xwoZjoteMiLXsPHuXPBkWsGwu0o9c3nTjqkUlP1Ez/V8E501aOU7CJ3INk8mQcW2gw==} + engines: {node: '>=16.0.0'} + + '@smithy/credential-provider-imds@3.2.4': + resolution: {integrity: sha512-S9bb0EIokfYEuar4kEbLta+ivlKCWOCFsLZuilkNy9i0uEUEHSi47IFLPaxqqCl+0ftKmcOTHayY5nQhAuq7+w==} + engines: {node: '>=16.0.0'} + + '@smithy/eventstream-codec@3.1.6': + resolution: {integrity: sha512-SBiOYPBH+5wOyPS7lfI150ePfGLhnp/eTu5RnV9xvhGvRiKfnl6HzRK9wehBph+il8FxS9KTeadx7Rcmf1GLPQ==} + + '@smithy/eventstream-serde-browser@3.0.10': + resolution: {integrity: sha512-1i9aMY6Pl/SmA6NjvidxnfBLHMPzhKu2BP148pEt5VwhMdmXn36PE2kWKGa9Hj8b0XGtCTRucpCncylevCtI7g==} + engines: {node: '>=16.0.0'} + + '@smithy/eventstream-serde-config-resolver@3.0.7': + resolution: {integrity: sha512-eVzhGQBPEqXXYHvIUku0jMTxd4gDvenRzUQPTmKVWdRvp9JUCKrbAXGQRYiGxUYq9+cqQckRm0wq3kTWnNtDhw==} + engines: {node: '>=16.0.0'} + + '@smithy/eventstream-serde-node@3.0.9': + resolution: {integrity: sha512-JE0Guqvt0xsmfQ5y1EI342/qtJqznBv8cJqkHZV10PwC8GWGU5KNgFbQnsVCcX+xF+qIqwwfRmeWoJCjuOLmng==} + engines: {node: '>=16.0.0'} + + '@smithy/eventstream-serde-universal@3.0.9': + resolution: {integrity: sha512-bydfgSisfepCufw9kCEnWRxqxJFzX/o8ysXWv+W9F2FIyiaEwZ/D8bBKINbh4ONz3i05QJ1xE7A5OKYvgJsXaw==} + engines: {node: '>=16.0.0'} + + '@smithy/fetch-http-handler@3.2.9': + resolution: {integrity: sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A==} + + '@smithy/hash-blob-browser@3.1.6': + resolution: {integrity: sha512-BKNcMIaeZ9lB67sgo88iCF4YB35KT8X2dNJ8DqrtZNTgN6tUDYBKThzfGtos/mnZkGkW91AYHisESHmSiYQmKw==} + + '@smithy/hash-node@3.0.7': + resolution: {integrity: sha512-SAGHN+QkrwcHFjfWzs/czX94ZEjPJ0CrWJS3M43WswDXVEuP4AVy9gJ3+AF6JQHZD13bojmuf/Ap/ItDeZ+Qfw==} + engines: {node: '>=16.0.0'} + + '@smithy/hash-stream-node@3.1.6': + resolution: {integrity: sha512-sFSSt7cmCpFWZPfVx7k80Bgb1K2VJ27VmMxH8X+dDhp7Wv8IBgID4K2VK5ehMJROF8hQgcj4WywnkHIwX/xlwQ==} + engines: {node: '>=16.0.0'} + + '@smithy/invalid-dependency@3.0.7': + resolution: {integrity: sha512-Bq00GsAhHeYSuZX8Kpu4sbI9agH2BNYnqUmmbTGWOhki9NVsWn2jFr896vvoTMH8KAjNX/ErC/8t5QHuEXG+IA==} + + '@smithy/is-array-buffer@2.2.0': + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} + engines: {node: '>=14.0.0'} + + '@smithy/is-array-buffer@3.0.0': + resolution: {integrity: sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==} + engines: {node: '>=16.0.0'} + + '@smithy/md5-js@3.0.7': + resolution: {integrity: sha512-+wco9IN9uOW4tNGkZIqTR6IXyfO7Z8A+IOq82QCRn/f/xcmt7H1fXwmQVbfDSvbeFwfNnhv7s+u0G9PzPG6o2w==} + + '@smithy/middleware-content-length@3.0.9': + resolution: {integrity: sha512-t97PidoGElF9hTtLCrof32wfWMqC5g2SEJNxaVH3NjlatuNGsdxXRYO/t+RPnxA15RpYiS0f+zG7FuE2DeGgjA==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-endpoint@3.1.4': + resolution: {integrity: sha512-/ChcVHekAyzUbyPRI8CzPPLj6y8QRAfJngWcLMgsWxKVzw/RzBV69mSOzJYDD3pRwushA1+5tHtPF8fjmzBnrQ==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-retry@3.0.22': + resolution: {integrity: sha512-svEN7O2Tf7BoaBkPzX/8AE2Bv7p16d9/ulFAD1Gmn5g19iMqNk1WIkMxAY7SpB9/tVtUwKx0NaIsBRl88gumZA==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-serde@3.0.7': + resolution: {integrity: sha512-VytaagsQqtH2OugzVTq4qvjkLNbWehHfGcGr0JLJmlDRrNCeZoWkWsSOw1nhS/4hyUUWF/TLGGml4X/OnEep5g==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-stack@3.0.7': + resolution: {integrity: sha512-EyTbMCdqS1DoeQsO4gI7z2Gzq1MoRFAeS8GkFYIwbedB7Lp5zlLHJdg+56tllIIG5Hnf9ZWX48YKSHlsKvugGA==} + engines: {node: '>=16.0.0'} + + '@smithy/node-config-provider@3.1.8': + resolution: {integrity: sha512-E0rU0DglpeJn5ge64mk8wTGEXcQwmpUTY5Zr7IzTpDLmHKiIamINERNZYrPQjg58Ck236sEKSwRSHA4CwshU6Q==} + engines: {node: '>=16.0.0'} + + '@smithy/node-http-handler@3.2.4': + resolution: {integrity: sha512-49reY3+JgLMFNm7uTAKBWiKCA6XSvkNp9FqhVmusm2jpVnHORYFeFZ704LShtqWfjZW/nhX+7Iexyb6zQfXYIQ==} + engines: {node: '>=16.0.0'} + + '@smithy/property-provider@3.1.7': + resolution: {integrity: sha512-QfzLi1GPMisY7bAM5hOUqBdGYnY5S2JAlr201pghksrQv139f8iiiMalXtjczIP5f6owxFn3MINLNUNvUkgtPw==} + engines: {node: '>=16.0.0'} + + '@smithy/protocol-http@4.1.4': + resolution: {integrity: sha512-MlWK8eqj0JlpZBnWmjQLqmFp71Ug00P+m72/1xQB3YByXD4zZ+y9N4hYrR0EDmrUCZIkyATWHOXFgtavwGDTzQ==} + engines: {node: '>=16.0.0'} + + '@smithy/querystring-builder@3.0.7': + resolution: {integrity: sha512-65RXGZZ20rzqqxTsChdqSpbhA6tdt5IFNgG6o7e1lnPVLCe6TNWQq4rTl4N87hTDD8mV4IxJJnvyE7brbnRkQw==} + engines: {node: '>=16.0.0'} + + '@smithy/querystring-parser@3.0.7': + resolution: {integrity: sha512-Fouw4KJVWqqUVIu1gZW8BH2HakwLz6dvdrAhXeXfeymOBrZw+hcqaWs+cS1AZPVp4nlbeIujYrKA921ZW2WMPA==} + engines: {node: '>=16.0.0'} + + '@smithy/service-error-classification@3.0.7': + resolution: {integrity: sha512-91PRkTfiBf9hxkIchhRKJfl1rsplRDyBnmyFca3y0Z3x/q0JJN480S83LBd8R6sBCkm2bBbqw2FHp0Mbh+ecSA==} + engines: {node: '>=16.0.0'} + + '@smithy/shared-ini-file-loader@3.1.8': + resolution: {integrity: sha512-0NHdQiSkeGl0ICQKcJQ2lCOKH23Nb0EaAa7RDRId6ZqwXkw4LJyIyZ0t3iusD4bnKYDPLGy2/5e2rfUhrt0Acw==} + engines: {node: '>=16.0.0'} + + '@smithy/signature-v4@4.2.0': + resolution: {integrity: sha512-LafbclHNKnsorMgUkKm7Tk7oJ7xizsZ1VwqhGKqoCIrXh4fqDDp73fK99HOEEgcsQbtemmeY/BPv0vTVYYUNEQ==} + engines: {node: '>=16.0.0'} + + '@smithy/smithy-client@3.3.6': + resolution: {integrity: sha512-qdH+mvDHgq1ss6mocyIl2/VjlWXew7pGwZQydwYJczEc22HZyX3k8yVPV9aZsbYbssHPvMDRA5rfBDrjQUbIIw==} + engines: {node: '>=16.0.0'} + + '@smithy/types@3.5.0': + resolution: {integrity: sha512-QN0twHNfe8mNJdH9unwsCK13GURU7oEAZqkBI+rsvpv1jrmserO+WnLE7jidR9W/1dxwZ0u/CB01mV2Gms/K2Q==} + engines: {node: '>=16.0.0'} + + '@smithy/url-parser@3.0.7': + resolution: {integrity: sha512-70UbSSR8J97c1rHZOWhl+VKiZDqHWxs/iW8ZHrHp5fCCPLSBE7GcUlUvKSle3Ca+J9LLbYCj/A79BxztBvAfpA==} + + '@smithy/util-base64@3.0.0': + resolution: {integrity: sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-body-length-browser@3.0.0': + resolution: {integrity: sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==} + + '@smithy/util-body-length-node@3.0.0': + resolution: {integrity: sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==} + engines: {node: '>=16.0.0'} + + '@smithy/util-buffer-from@2.2.0': + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} + engines: {node: '>=14.0.0'} + + '@smithy/util-buffer-from@3.0.0': + resolution: {integrity: sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==} + engines: {node: '>=16.0.0'} + + '@smithy/util-config-provider@3.0.0': + resolution: {integrity: sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-defaults-mode-browser@3.0.22': + resolution: {integrity: sha512-WKzUxNsOun5ETwEOrvooXeI1mZ8tjDTOcN4oruELWHhEYDgQYWwxZupURVyovcv+h5DyQT/DzK5nm4ZoR/Tw5Q==} + engines: {node: '>= 10.0.0'} + + '@smithy/util-defaults-mode-node@3.0.22': + resolution: {integrity: sha512-hUsciOmAq8fsGwqg4+pJfNRmrhfqMH4Y9UeGcgeUl88kPAoYANFATJqCND+O4nUvwp5TzsYwGpqpcBKyA8LUUg==} + engines: {node: '>= 10.0.0'} + + '@smithy/util-endpoints@2.1.3': + resolution: {integrity: sha512-34eACeKov6jZdHqS5hxBMJ4KyWKztTMulhuQ2UdOoP6vVxMLrOKUqIXAwJe/wiWMhXhydLW664B02CNpQBQ4Aw==} + engines: {node: '>=16.0.0'} + + '@smithy/util-hex-encoding@3.0.0': + resolution: {integrity: sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-middleware@3.0.7': + resolution: {integrity: sha512-OVA6fv/3o7TMJTpTgOi1H5OTwnuUa8hzRzhSFDtZyNxi6OZ70L/FHattSmhE212I7b6WSOJAAmbYnvcjTHOJCA==} + engines: {node: '>=16.0.0'} + + '@smithy/util-retry@3.0.7': + resolution: {integrity: sha512-nh1ZO1vTeo2YX1plFPSe/OXaHkLAHza5jpokNiiKX2M5YpNUv6RxGJZhpfmiR4jSvVHCjIDmILjrxKmP+/Ghug==} + engines: {node: '>=16.0.0'} + + '@smithy/util-stream@3.1.9': + resolution: {integrity: sha512-7YAR0Ub3MwTMjDfjnup4qa6W8gygZMxikBhFMPESi6ASsl/rZJhwLpF/0k9TuezScCojsM0FryGdz4LZtjKPPQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-uri-escape@3.0.0': + resolution: {integrity: sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==} + engines: {node: '>=16.0.0'} + + '@smithy/util-utf8@2.3.0': + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} + engines: {node: '>=14.0.0'} + + '@smithy/util-utf8@3.0.0': + resolution: {integrity: sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==} + engines: {node: '>=16.0.0'} + + '@smithy/util-waiter@3.1.6': + resolution: {integrity: sha512-xs/KAwWOeCklq8aMlnpk25LgxEYHKOEodfjfKclDMLcBJEVEKzDLxZxBQyztcuPJ7F54213NJS8PxoiHNMdItQ==} + engines: {node: '>=16.0.0'} + + '@socket.io/component-emitter@3.1.2': + resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + + '@stripe/stripe-js@4.9.0': + resolution: {integrity: sha512-tMPZQZZXGWyNX7hbgenq+1xEj2oigJ54XddbtSX36VedoKsPBq7dxwRXu4Xd5FdpT3JDyyDtnmvYkaSnH1yHTQ==} + engines: {node: '>=12.16'} + + '@swc-jotai/react-refresh@0.2.0': + resolution: {integrity: sha512-LDkIeVcaL8sop/MHLP3RsUHj73fQ0kU7eYhJj7SuU4eAbx7xE3eeEgCjhTyPB3aYimSHwOk8/c71buLMV9SvPA==} + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/helpers@0.5.13': + resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} + + '@swc/helpers@0.5.5': + resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/cookie@0.4.1': + resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} + + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + + '@types/cors@2.8.17': + resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/formidable@3.4.5': + resolution: {integrity: sha512-s7YPsNVfnsng5L8sKnG/Gbb2tiwwJTY1conOkJzTMRvJAlLFW1nEua+ADsJQu8N1c0oTHx9+d5nqg10WuT9gHQ==} + + '@types/hast@2.3.10': + resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/ms@0.7.34': + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + + '@types/node@22.5.5': + resolution: {integrity: sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==} + + '@types/papaparse@5.3.14': + resolution: {integrity: sha512-LxJ4iEFcpqc6METwp9f6BV6VVc43m6MfH0VqFosHvrUgfXiFe6ww7R3itkOQ+TCK6Y+Iv/+RnnvtRZnkc5Kc9g==} + + '@types/prismjs@1.26.4': + resolution: {integrity: sha512-rlAnzkW2sZOjbqZ743IHUhFcvzaGbqijwOu8QZnZCjfQzBqFE3s4lOTJEsxikImav9uzz/42I+O7YUs1mWgMlg==} + + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@typescript-eslint/eslint-plugin@8.6.0': + resolution: {integrity: sha512-UOaz/wFowmoh2G6Mr9gw60B1mm0MzUtm6Ic8G2yM1Le6gyj5Loi/N+O5mocugRGY+8OeeKmkMmbxNqUCq3B4Sg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@8.6.0': + resolution: {integrity: sha512-eQcbCuA2Vmw45iGfcyG4y6rS7BhWfz9MQuk409WD47qMM+bKCGQWXxvoOs1DUp+T7UBMTtRTVT+kXr7Sh4O9Ow==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@8.6.0': + resolution: {integrity: sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.6.0': + resolution: {integrity: sha512-dtePl4gsuenXVwC7dVNlb4mGDcKjDT/Ropsk4za/ouMBPplCLyznIaR+W65mvCvsyS97dymoBRrioEXI7k0XIg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@8.6.0': + resolution: {integrity: sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.6.0': + resolution: {integrity: sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@8.6.0': + resolution: {integrity: sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + + '@typescript-eslint/visitor-keys@8.6.0': + resolution: {integrity: sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@uiw/copy-to-clipboard@1.0.17': + resolution: {integrity: sha512-O2GUHV90Iw2VrSLVLK0OmNIMdZ5fgEg4NhvtwINsX+eZ/Wf6DWD0TdsK9xwV7dNRnK/UI2mQtl0a2/kRgm1m1A==} + + '@uiw/react-markdown-preview@5.1.3': + resolution: {integrity: sha512-jV02wO4XHWFk54kz7sLqOkdPgJLttSfKLyen47XgjcyGgQXU2I4WJBygmdpV2AT9m/MiQ8qrN1Y+E5Syv9ZDpw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@uiw/react-md-editor@4.0.4': + resolution: {integrity: sha512-JH9nDXXRhJtWPP4yE61VE+9ryFo9tg9v7KMwGfJCnaOOKuLF1MR3l/MNsiJCGkRjUwyto5WrU7kBSq8ODJEtYw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + '@webassemblyjs/ast@1.12.1': + resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} + + '@webassemblyjs/floating-point-hex-parser@1.11.6': + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + + '@webassemblyjs/helper-api-error@1.11.6': + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + + '@webassemblyjs/helper-buffer@1.12.1': + resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} + + '@webassemblyjs/helper-numbers@1.11.6': + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + + '@webassemblyjs/helper-wasm-bytecode@1.11.6': + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + + '@webassemblyjs/helper-wasm-section@1.12.1': + resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} + + '@webassemblyjs/ieee754@1.11.6': + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + + '@webassemblyjs/leb128@1.11.6': + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + + '@webassemblyjs/utf8@1.11.6': + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + + '@webassemblyjs/wasm-edit@1.12.1': + resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} + + '@webassemblyjs/wasm-gen@1.12.1': + resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} + + '@webassemblyjs/wasm-opt@1.12.1': + resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} + + '@webassemblyjs/wasm-parser@1.12.1': + resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} + + '@webassemblyjs/wast-printer@1.12.1': + resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + abbrev@2.0.0: + resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + + ajv-keywords@5.1.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-escapes@7.0.0: + resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + engines: {node: '>=18'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + 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'} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-hidden@1.2.4: + resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} + engines: {node: '>=10'} + + aria-query@5.1.3: + resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + + ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + attr-accept@2.2.2: + resolution: {integrity: sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==} + engines: {node: '>=4'} + + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axe-core@4.10.0: + resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==} + engines: {node: '>=4'} + + axios@1.7.7: + resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + babel-loader@9.2.1: + resolution: {integrity: sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==} + engines: {node: '>= 14.15.0'} + peerDependencies: + '@babel/core': ^7.12.0 + webpack: '>=5' + + babel-plugin-transform-remove-imports@1.8.0: + resolution: {integrity: sha512-QdE5ZnIjON1pSgTPU8KzLnl/LEzdq9PLmZNuHgGKTx0LOI9PBrHBj0fz9uCg2CdssiTw7v/zVRYs8GJxbvhKnQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + base64id@2.0.0: + resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} + engines: {node: ^4.5.0 || >= 5.9} + + bcp-47-match@2.0.3: + resolution: {integrity: sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + caniuse-lite@1.0.30001663: + resolution: {integrity: sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + + class-variance-authority@0.7.0: + resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + clsx@2.0.0: + resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} + engines: {node: '>=6'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + + commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie@0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + + cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} + + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + css-selector-parser@3.0.5: + resolution: {integrity: sha512-3itoDFbKUNx1eKmVpYMFyqKX04Ww9osZ+dLgrk6GEv6KMVeXUhUnp4I5X+evw+u3ZxVU6RFXSSRxlTeMh8bA+g==} + + 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==} + + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + + debounce@2.0.0: + resolution: {integrity: sha512-xRetU6gL1VJbs85Mc4FoEGSjQxzpdxRyFhe3lmWFyy2EzydIcD4xzUvRJMD+NPDfMwKNhxa3PvsIOU32luIWeA==} + engines: {node: '>=18'} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decode-named-character-reference@1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + + deep-equal@2.2.3: + resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} + engines: {node: '>= 0.4'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + dezalgo@1.0.4: + resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + direction@2.0.1: + resolution: {integrity: sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==} + hasBin: true + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + + dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + editorconfig@1.0.4: + resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==} + engines: {node: '>=14'} + hasBin: true + + electron-to-chromium@1.5.27: + resolution: {integrity: sha512-o37j1vZqCoEgBuWWXLHQgTN/KDKe7zwpiY5CPeq2RvUqOyJw9xnrULzZAEVQ5p4h+zjMk7hgtOoPdnLxr7m/jw==} + + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + engine.io-parser@5.2.3: + resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} + engines: {node: '>=10.0.0'} + + engine.io@6.5.5: + resolution: {integrity: sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==} + engines: {node: '>=10.2.0'} + + enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} + engines: {node: '>=10.13.0'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-get-iterator@1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + + es-iterator-helpers@1.0.19: + resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} + engines: {node: '>= 0.4'} + + es-iterator-helpers@1.1.0: + resolution: {integrity: sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + esbuild@0.19.11: + resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + 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'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + eslint-config-next@15.0.1: + resolution: {integrity: sha512-3cYCrgbH6GS/ufApza7XCKz92vtq4dAdYhx++rMFNlH2cAV+/GsAKkrr4+bohYOACmzG2nAOR+uWprKC1Uld6A==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + + eslint-config-prettier@9.1.0: + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-import-resolver-typescript@3.6.3: + resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + + eslint-module-utils@2.11.0: + resolution: {integrity: sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-module-utils@2.12.0: + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-import-x@4.3.0: + resolution: {integrity: sha512-PxGzP7gAjF2DLeRnQtbYkkgZDg1intFyYr/XS1LgTYXUDrSXMHGkXx8++6i2eDv2jMs0jfeO6G6ykyeWxiFX7w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + + eslint-plugin-import@2.31.0: + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-jsx-a11y@6.10.0: + resolution: {integrity: sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + + eslint-plugin-playwright@1.6.2: + resolution: {integrity: sha512-mraN4Em3b5jLt01q7qWPyLg0Q5v3KAWfJSlEWwldyUXoa7DSPrBR4k6B6LROLqipsG8ndkwWMdjl1Ffdh15tag==} + engines: {node: '>=16.6.0'} + peerDependencies: + eslint: '>=8.40.0' + eslint-plugin-jest: '>=25' + peerDependenciesMeta: + eslint-plugin-jest: + optional: true + + eslint-plugin-prettier@5.2.1: + resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + + eslint-plugin-react-hooks@5.0.0: + resolution: {integrity: sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + + eslint-plugin-react@7.37.2: + resolution: {integrity: sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + + eslint-plugin-unused-imports@4.1.4: + resolution: {integrity: sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 + eslint: ^9.0.0 || ^8.0.0 + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@8.0.2: + resolution: {integrity: sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + 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} + + eslint-visitor-keys@4.0.0: + resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.9.1: + resolution: {integrity: sha512-dHvhrbfr4xFQ9/dq+jcVneZMyRYLjggWjk6RVsIiHsP8Rz6yZ8LvZ//iU4TrZF+SXWG+JkNF2OyiZRvzgRDqMg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.1.0: + resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + fast-deep-equal@2.0.1: + resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-uri@3.0.1: + resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + + fast-xml-parser@4.4.1: + resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} + hasBin: true + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + file-selector@0.6.0: + resolution: {integrity: sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw==} + engines: {node: '>= 12'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-cache-dir@4.0.0: + resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} + engines: {node: '>=14.16'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + find-up@6.3.0: + resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + formidable@3.5.1: + resolution: {integrity: sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + 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'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-east-asian-width@1.2.0: + resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + engines: {node: '>=18'} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + + github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@10.3.4: + resolution: {integrity: sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: 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'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + 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'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hast-util-from-html@2.0.3: + resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} + + hast-util-from-parse5@8.0.1: + resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} + + hast-util-has-property@3.0.0: + resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==} + + hast-util-heading-rank@3.0.0: + resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==} + + hast-util-is-element@3.0.0: + resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + + hast-util-parse-selector@3.1.1: + resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} + + hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + + hast-util-raw@9.0.4: + resolution: {integrity: sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==} + + hast-util-sanitize@5.0.1: + resolution: {integrity: sha512-IGrgWLuip4O2nq5CugXy4GI2V8kx4sFVy5Hd4vF7AR2gxS0N9s7nEAVUyeMtZKZvzrxVsHt73XdTsno1tClIkQ==} + + hast-util-select@6.0.2: + resolution: {integrity: sha512-hT/SD/d/Meu+iobvgkffo1QecV8WeKWxwsNMzcTJsKw1cKTQKSR/7ArJeURLNJF9HDjp9nVoORyNNJxrvBye8Q==} + + hast-util-to-html@9.0.3: + resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==} + + hast-util-to-jsx-runtime@2.3.0: + resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==} + + hast-util-to-parse5@8.0.0: + resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} + + hast-util-to-string@3.0.0: + resolution: {integrity: sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hastscript@7.2.0: + resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} + + hastscript@8.0.0: + resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} + + hexoid@1.0.0: + resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} + engines: {node: '>=8'} + + html-to-text@9.0.5: + resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==} + engines: {node: '>=14'} + + html-url-attributes@3.0.0: + resolution: {integrity: sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow==} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + husky@9.1.6: + resolution: {integrity: sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==} + engines: {node: '>=18'} + hasBin: true + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + inline-style-parser@0.2.4: + resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} + + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + + invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-bun-module@1.2.1: + resolution: {integrity: sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + + 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==} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-weakset@2.0.3: + resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + engines: {node: '>= 0.4'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + + iterator.prototype@1.1.3: + resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==} + engines: {node: '>= 0.4'} + + jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + hasBin: true + + jose@5.9.3: + resolution: {integrity: sha512-egLIoYSpcd+QUF+UHgobt5YzI2Pkw/H39ou9suW687MY6PmCwPmkNV/4TNjn1p2tX5xO3j0d0sq5hiYE24bSlg==} + + jotai@2.10.0: + resolution: {integrity: sha512-8W4u0aRlOIwGlLQ0sqfl/c6+eExl5D8lZgAUolirZLktyaj4WnxO/8a0HEPmtriQAB6X5LMhXzZVmw02X0P0qQ==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + react: '>=17.0.0' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + + js-beautify@1.15.1: + resolution: {integrity: sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==} + engines: {node: '>=14'} + hasBin: true + + js-cookie@3.0.5: + resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} + engines: {node: '>=14'} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: 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==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + 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'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + + language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + + leac@0.6.0: + resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + 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==} + + lint-staged@15.2.10: + resolution: {integrity: sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==} + engines: {node: '>=18.12.0'} + hasBin: true + + listr2@8.2.4: + resolution: {integrity: sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==} + engines: {node: '>=18.0.0'} + + loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} + + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lucide-react@0.438.0: + resolution: {integrity: sha512-uq6yCB+IzVfgIPMK8ibkecXSWTTSOMs9UjUgZigfrDCVqgdwkpIgYg1fSYnf0XXF2AoSyCJZhoZXQwzoai7VGw==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + markdown-table@3.0.3: + resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} + + marked@7.0.4: + resolution: {integrity: sha512-t8eP0dXRJMtMvBojtkcsA7n48BkauktUKzfkPSCq85ZMTJ0v76Rke4DYz01omYpPTUh4p/f7HePgRo3ebG8+QQ==} + engines: {node: '>= 16'} + hasBin: true + + md-to-react-email@5.0.2: + resolution: {integrity: sha512-x6kkpdzIzUhecda/yahltfEl53mH26QdWu4abUF9+S0Jgam8P//Ciro8cdhyMHnT5MQUJYrIbO6ORM2UxPiNNA==} + peerDependencies: + react: 18.x + + mdast-util-find-and-replace@3.0.1: + resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} + + mdast-util-from-markdown@2.0.1: + resolution: {integrity: sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.0.0: + resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.0.0: + resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==} + + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} + + mdast-util-mdx-jsx@3.1.3: + resolution: {integrity: sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==} + + mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + + mdast-util-to-markdown@2.1.0: + resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromark-core-commonmark@2.0.1: + resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.0: + resolution: {integrity: sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + + micromark-factory-destination@2.0.0: + resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} + + micromark-factory-label@2.0.0: + resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} + + micromark-factory-space@2.0.0: + resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} + + micromark-factory-title@2.0.0: + resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} + + micromark-factory-whitespace@2.0.0: + resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} + + micromark-util-character@2.1.0: + resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} + + micromark-util-chunked@2.0.0: + resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} + + micromark-util-classify-character@2.0.0: + resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} + + micromark-util-combine-extensions@2.0.0: + resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} + + micromark-util-decode-numeric-character-reference@2.0.1: + resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} + + micromark-util-decode-string@2.0.0: + resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} + + micromark-util-encode@2.0.0: + resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + + micromark-util-html-tag-name@2.0.0: + resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} + + micromark-util-normalize-identifier@2.0.0: + resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} + + micromark-util-resolve-all@2.0.0: + resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} + + micromark-util-sanitize-uri@2.0.0: + resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + + micromark-util-subtokenize@2.0.1: + resolution: {integrity: sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==} + + micromark-util-symbol@2.0.0: + resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + + micromark-util-types@2.0.0: + resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + + micromark@4.0.0: + resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.1: + resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} + engines: {node: '>=16 || 14 >=14.17'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.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==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + next-auth@5.0.0-beta.25: + resolution: {integrity: sha512-2dJJw1sHQl2qxCrRk+KTQbeH+izFbGFPuJj5eGgBZFYyiYYtvlrBeUw1E/OJJxTRjuxbSYGnCTkUIRsIIW0bog==} + peerDependencies: + '@simplewebauthn/browser': ^9.0.1 + '@simplewebauthn/server': ^9.0.2 + next: ^14.0.0-0 || ^15.0.0-0 + nodemailer: ^6.6.5 + react: ^18.2.0 || ^19.0.0-0 + peerDependenciesMeta: + '@simplewebauthn/browser': + optional: true + '@simplewebauthn/server': + optional: true + nodemailer: + optional: true + + next-remove-imports@1.0.12: + resolution: {integrity: sha512-3tdL6VuSykJ/mcUwxfjQ+Fd4OpEmrwWVHtLZ/fhNcSaToWCutUp7nrfIww7/4CURe9I7BDCQE9AWl4fkY3YZOQ==} + + next-safe-action@7.9.3: + resolution: {integrity: sha512-2GH7/iRiM5R/y6sIQZsNHGeRr/iKQJsg8ejP63WhTS7fXS9KzxVbEKrWwLNNhL33V9cn0448cPSI/aiSK/PUbA==} + engines: {node: '>=18.17'} + peerDependencies: + '@sinclair/typebox': '>= 0.33.3' + next: '>= 14.0.0' + react: '>= 18.2.0' + react-dom: '>= 18.2.0' + valibot: '>= 0.36.0' + yup: '>= 1.0.0' + zod: '>= 3.0.0' + peerDependenciesMeta: + '@sinclair/typebox': + optional: true + valibot: + optional: true + yup: + optional: true + zod: + optional: true + + next-themes@0.3.0: + resolution: {integrity: sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==} + peerDependencies: + react: ^16.8 || ^17 || ^18 + react-dom: ^16.8 || ^17 || ^18 + + next@14.2.3: + resolution: {integrity: sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==} + 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 + + next@15.0.1: + resolution: {integrity: sha512-PSkFkr/w7UnFWm+EP8y/QpHrJXMqpZzAXpergB/EqLPOh4SGPJXv1wj4mslr2hUZBAS9pX7/9YLIdxTv6fwytw==} + engines: {node: '>=18.18.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-69d4b800-20241021 + react-dom: ^18.2.0 || 19.0.0-rc-69d4b800-20241021 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + nopt@7.2.1: + resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + not@0.1.0: + resolution: {integrity: sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA==} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + oauth4webapi@2.17.0: + resolution: {integrity: sha512-lbC0Z7uzAFNFyzEYRIC+pkSVvDHJTbEW+dYlSBAlCYDe6RxUkJ26bClhk8ocBZip1wfI9uKTe0fm4Ib4RHn6uQ==} + + oauth4webapi@3.1.2: + resolution: {integrity: sha512-KQZkNU+xn02lWrFu5Vjqg9E81yPtDSxUZorRHlLWVoojD+H/0GFbH59kcnz5Thdjj7c4/mYMBPj/mhvGe/kKXA==} + + 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'} + + object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + + papaparse@5.4.1: + resolution: {integrity: sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-entities@4.0.1: + resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} + + parse-numeric-range@1.3.0: + resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} + + parse5@7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + + parseley@0.12.1: + resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + 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'} + + peberminta@0.9.0: + resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} + + picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + 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'} + + pkg-dir@7.0.0: + resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} + engines: {node: '>=14.16'} + + playwright-core@1.47.2: + resolution: {integrity: sha512-3JvMfF+9LJfe16l7AbSmU555PaTl2tPyQsVInqm3id16pdDfvZ8TTZ/pyzmkbDrZTQefyzU7AIHlZqQnxpqHVQ==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.47.2: + resolution: {integrity: sha512-nx1cLMmQWqmA3UsnjaaokyoUpdVaaDhJhMoxX2qj3McpjnsqFHs516QAKYhqHAgOP+oCFTEOCOAaD1RgD/RQfA==} + engines: {node: '>=18'} + hasBin: true + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + 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 + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + 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} + + postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} + engines: {node: ^10 || ^12 || >=14} + + preact-render-to-string@5.2.3: + resolution: {integrity: sha512-aPDxUn5o3GhWdtJtW0svRC2SS/l8D9MAgo2+AWml+BhDImb27ALf04Q2d+AHqUUOc6RdSXFIBVa2gxzgMKgtZA==} + peerDependencies: + preact: '>=10' + + preact@10.11.3: + resolution: {integrity: sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + + prettier-plugin-tailwindcss@0.6.6: + resolution: {integrity: sha512-OPva5S7WAsPLEsOuOWXATi13QrCKACCiIonFgIR6V4lYv4QLp++UXVhZSzRbZxXGimkQtQT86CC6fQqTOybGng==} + 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-multiline-arrays: '*' + 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-multiline-arrays: + 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 + + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + + pretty-format@3.8.0: + resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==} + + prisma@5.16.1: + resolution: {integrity: sha512-Z1Uqodk44diztImxALgJJfNl2Uisl9xDRvqybMKEBYJLNKNhDfAHf+ZIJbZyYiBhLMbKU9cYGdDVG5IIXEnL2Q==} + engines: {node: '>=16.13'} + hasBin: true + + prismjs@1.29.0: + resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} + engines: {node: '>=6'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + + proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + react-dom@19.0.0-rc-69d4b800-20241021: + resolution: {integrity: sha512-ZXBsP/kTDLI9QopUaUgYJhmmAhO8aKz7DCv2Ui2rA9boCfJ/dRRh6BlVidsyb2dPzG01rItdRFQqwbP+x9s5Rg==} + peerDependencies: + react: 19.0.0-rc-69d4b800-20241021 + + react-dropzone@14.2.3: + resolution: {integrity: sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug==} + engines: {node: '>= 10.13'} + peerDependencies: + react: '>= 16.8 || 18.0.0' + + react-email@3.0.1: + resolution: {integrity: sha512-G4Bkx2ULIScy/0Z8nnWywHt0W1iTkaYCdh9rWNuQ3eVZ6B3ttTUDE9uUy3VNQ8dtQbmG0cpt8+XmImw7mMBW6Q==} + engines: {node: '>=18.0.0'} + hasBin: true + + react-error-boundary@4.0.13: + resolution: {integrity: sha512-b6PwbdSv8XeOSYvjt8LpgpKrZ0yGdtZokYwkwV2wlcZbxgopHX/hgPl5VgpnoVOWd868n1hktM8Qm4b+02MiLQ==} + peerDependencies: + react: '>=16.13.1' + + react-hook-form@7.53.0: + resolution: {integrity: sha512-M1n3HhqCww6S2hxLxciEXy2oISPnAzxY7gvwVPrtlczTM/1dDadXgUxDpHMrMTblDOcm/AXtXxHwZ3jpg1mqKQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^16.8.0 || ^17 || ^18 || ^19 + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-markdown@9.0.1: + resolution: {integrity: sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + react: '>=18' + + react-paginate@8.2.0: + resolution: {integrity: sha512-sJCz1PW+9PNIjUSn919nlcRVuleN2YPoFBOvL+6TPgrH/3lwphqiSOgdrLafLdyLDxsgK+oSgviqacF4hxsDIw==} + peerDependencies: + react: ^16 || ^17 || ^18 + + react-papaparse@4.4.0: + resolution: {integrity: sha512-xTEwHZYJ+1dh9mQDQjjwJXmWyX20DdZ52u+ddw75V+Xm5qsjXSvWmC7c8K82vRwMjKAOH2S9uFyGpHEyEztkUQ==} + engines: {node: '>=8', npm: '>=5'} + + react-promise-suspense@0.3.4: + resolution: {integrity: sha512-I42jl7L3Ze6kZaq+7zXWSunBa3b1on5yfvUW6Eo/3fFOj6dZ5Bqmcd264nJbTK/gn1HjjILAjSwnZbV4RpSaNQ==} + + react-remove-scroll-bar@2.3.6: + resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.5.7: + resolution: {integrity: sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-style-singleton@2.2.1: + resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react@19.0.0-rc-69d4b800-20241021: + resolution: {integrity: sha512-dXki4tN+rP+4xhsm65q/QI/19VCZdu5vPcy4h6zaJt20XP8/1r/LCwrLFYuj8hElbNz5AmxW6JtRa7ej0BzZdg==} + engines: {node: '>=0.10.0'} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + reflect.getprototypeof@1.0.6: + resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} + engines: {node: '>= 0.4'} + + refractor@4.8.1: + resolution: {integrity: sha512-/fk5sI0iTgFYlmVGYVew90AoYnNMP6pooClx/XKqyeeCQXrL0Kvgn8V0VEht5ccdljbzzF1i3Q213gcntkRExg==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + + rehype-attr@3.0.3: + resolution: {integrity: sha512-Up50Xfra8tyxnkJdCzLBIBtxOcB2M1xdeKe1324U06RAvSjYm7ULSeoM+b/nYPQPVd7jsXJ9+39IG1WAJPXONw==} + engines: {node: '>=16'} + + rehype-autolink-headings@7.1.0: + resolution: {integrity: sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==} + + rehype-ignore@2.0.2: + resolution: {integrity: sha512-BpAT/3lU9DMJ2siYVD/dSR0A/zQgD6Fb+fxkJd4j+wDVy6TYbYpK+FZqu8eM9EuNKGvi4BJR7XTZ/+zF02Dq8w==} + engines: {node: '>=16'} + + rehype-parse@9.0.0: + resolution: {integrity: sha512-WG7nfvmWWkCR++KEkZevZb/uw41E8TsH4DsY9UxsTbIXCVGbAs4S+r8FrQ+OtH5EEQAs+5UxKC42VinkmpA1Yw==} + + rehype-prism-plus@2.0.0: + resolution: {integrity: sha512-FeM/9V2N7EvDZVdR2dqhAzlw5YI49m9Tgn7ZrYJeYHIahM6gcXpH0K1y2gNnKanZCydOMluJvX2cB9z3lhY8XQ==} + + rehype-raw@7.0.0: + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + + rehype-rewrite@4.0.2: + resolution: {integrity: sha512-rjLJ3z6fIV11phwCqHp/KRo8xuUCO8o9bFJCNw5o6O2wlLk6g8r323aRswdGBQwfXPFYeSuZdAjp4tzo6RGqEg==} + engines: {node: '>=16.0.0'} + + rehype-sanitize@6.0.0: + resolution: {integrity: sha512-CsnhKNsyI8Tub6L4sm5ZFsme4puGfc6pYylvXo1AeqaGbjOYyzNv3qZPwvs0oMJ39eryyeOdmxwUIo94IpEhqg==} + + rehype-slug@6.0.0: + resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==} + + rehype-stringify@10.0.0: + resolution: {integrity: sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==} + + rehype@13.0.1: + resolution: {integrity: sha512-AcSLS2mItY+0fYu9xKxOu1LhUZeBZZBx8//5HKzF+0XP+eP8+6a5MXn2+DW2kfXR6Dtp1FEXMVrjyKAcvcU8vg==} + + remark-gfm@4.0.0: + resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==} + + remark-github-blockquote-alert@1.2.1: + resolution: {integrity: sha512-qNf2mSAoZgh3Cl23/9Y1L7S4Kbf9NsdHvYK398ab/52yEsDPDU5I4cuTcgDRrdIX7Ltc6RK+KCLRtWkbFnL6Dg==} + engines: {node: '>=16'} + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + + remark-rehype@11.1.1: + resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==} + + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resend@4.0.0: + resolution: {integrity: sha512-rDX0rspl/XcmC2JV2V5obQvRX2arzxXUvNFUDMOv5ObBLR68+7kigCOysb7+dlkb0JE3erhQG0nHrbBt/ZCWIg==} + engines: {node: '>=18'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + + scheduler@0.25.0-rc-69d4b800-20241021: + resolution: {integrity: sha512-S5AYX/YhMAN6u9AXgKYbZP4U4ZklC6R9Q7HmFSBk7d4DLiHVNxvAvlSvuM4nxFkwOk50MnpfTKQ7UWHXDOc9Eg==} + + schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + + schema-utils@4.2.0: + resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} + engines: {node: '>= 12.13.0'} + + selderee@0.11.0: + resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} + + slugify@1.6.6: + resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==} + engines: {node: '>=8.0.0'} + + socket.io-adapter@2.5.5: + resolution: {integrity: sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==} + + socket.io-parser@4.2.4: + resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} + engines: {node: '>=10.0.0'} + + socket.io@4.7.5: + resolution: {integrity: sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==} + engines: {node: '>=10.2.0'} + + sonner@1.5.0: + resolution: {integrity: sha512-FBjhG/gnnbN6FY0jaNnqZOMmB73R+5IiyYAw8yBj7L54ER7HB3fOSE5OFiQiE2iXWxeXKvg6fIP4LtVppHEdJA==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + stable-hash@0.0.4: + resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} + + stop-iteration-iterator@1.0.0: + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} + + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string.prototype.includes@2.0.0: + resolution: {integrity: sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==} + + string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} + + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + stripe@17.2.1: + resolution: {integrity: sha512-Mwb0SitV/UjxTLSUiTlUQ0VDE/gfyQ7OHDGdvDdvKIH4CNNqobPKlzlWhoZHFFU0OA/YsZyBtPULK4JG86BAAg==} + engines: {node: '>=12.*'} + + strnum@1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + + style-to-object@1.0.8: + resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} + + styled-jsx@5.1.1: + resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + synckit@0.9.1: + resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} + engines: {node: ^14.18.0 || >=16.0.0} + + tailwind-merge@2.5.2: + resolution: {integrity: sha512-kjEBm+pvD+6eAwzJL2Bi+02/9LFLal1Gs61+QB7HvTfQQ0aXwC5LGT8PEt1gS0CWKktKe6ysPTAy3cBC5MeiIg==} + + tailwindcss-animate@1.0.7: + resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + + tailwindcss@3.4.12: + resolution: {integrity: sha512-Htf/gHj2+soPb9UayUNci/Ja3d8pTmu9ONTfh4QY8r3MATTZOzmv6UYWF7ZwikEIC8okpfqmGqrmDehua8mF8w==} + engines: {node: '>=14.0.0'} + hasBin: true + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + terser-webpack-plugin@5.3.10: + resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@5.33.0: + resolution: {integrity: sha512-JuPVaB7s1gdFKPKTelwUyRq5Sid2A3Gko2S0PncwdBq7kN9Ti9HPWDQ06MPsEDGsZeVESjKEnyGy68quBk1w6g==} + engines: {node: '>=10'} + hasBin: true + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + 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'} + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + + types-react@19.0.0-rc.1: + resolution: {integrity: sha512-RshndUfqTW6K3STLPis8BtAYCGOkMbtvYsi90gmVNDZBXUyUc5juf2PE9LfS/JmOlUIRO8cWTS/1MTnmhjDqyQ==} + + typescript-eslint@8.6.0: + resolution: {integrity: sha512-eEhhlxCEpCd4helh3AO1hk0UP2MvbRi9CtIAJTVPQjuSXOOO2jsEacNi4UdcJzZJbeuVg1gMhtZ8UYb+NFYPrA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + typescript@5.6.2: + resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} + engines: {node: '>=14.17'} + hasBin: true + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unist-util-filter@5.0.1: + resolution: {integrity: sha512-pHx7D4Zt6+TsfwylH9+lYhBhzyhEnCXs/lbq/Hstxno5z4gVdyc2WEW0asfjGKPyG4pEKrnBv5hdkO6+aRnQJw==} + + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + + update-browserslist-db@1.1.0: + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + use-callback-ref@1.3.2: + resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + use-debounce@10.0.3: + resolution: {integrity: sha512-DxQSI9ZKso689WM1mjgGU3ozcxU1TJElBJ3X6S4SMzMNcm2lVH0AHmyXB+K7ewjz2BSUKJTDqTcwtSMRfB89dg==} + engines: {node: '>= 16.0.0'} + peerDependencies: + react: '*' + + use-sidecar@1.1.2: + resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': npm:types-react@19.0.0-rc.1 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vaul@1.1.1: + resolution: {integrity: sha512-+ejzF6ffQKPcfgS7uOrGn017g39F8SO4yLPXbBhpC7a0H+oPqPna8f1BUfXaz8eU4+pxbQcmjxW+jWBSbxjaFg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 + + vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + + vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} + engines: {node: '>=10.13.0'} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack@5.94.0: + resolution: {integrity: sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-builtin-type@1.1.4: + resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} -packages: + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - dev: true - /@alloc/quick-lru@5.2.0: - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yaml@2.5.1: + resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} + engines: {node: '>= 14'} + hasBin: true + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yocto-queue@1.1.1: + resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} + engines: {node: '>=12.20'} + + zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@alloc/quick-lru@5.2.0': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@auth/core@0.35.3': + dependencies: + '@panva/hkdf': 1.2.1 + '@types/cookie': 0.6.0 + cookie: 0.6.0 + jose: 5.9.3 + oauth4webapi: 2.17.0 + preact: 10.11.3 + preact-render-to-string: 5.2.3(preact@10.11.3) + + '@auth/core@0.37.2': + dependencies: + '@panva/hkdf': 1.2.1 + '@types/cookie': 0.6.0 + cookie: 0.7.1 + jose: 5.9.3 + oauth4webapi: 3.1.2 + preact: 10.11.3 + preact-render-to-string: 5.2.3(preact@10.11.3) + + '@auth/prisma-adapter@2.5.3(@prisma/client@5.16.1(prisma@5.16.1))': + dependencies: + '@auth/core': 0.35.3 + '@prisma/client': 5.16.1(prisma@5.16.1) + transitivePeerDependencies: + - '@simplewebauthn/browser' + - '@simplewebauthn/server' + - nodemailer + + '@aws-crypto/crc32@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.662.0 + tslib: 2.7.0 + + '@aws-crypto/crc32c@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.662.0 + tslib: 2.7.0 + + '@aws-crypto/sha1-browser@5.2.0': + dependencies: + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.662.0 + '@aws-sdk/util-locate-window': 3.568.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.7.0 + + '@aws-crypto/sha256-browser@5.2.0': + dependencies: + '@aws-crypto/sha256-js': 5.2.0 + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.662.0 + '@aws-sdk/util-locate-window': 3.568.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.7.0 + + '@aws-crypto/sha256-js@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.662.0 + tslib: 2.7.0 + + '@aws-crypto/supports-web-crypto@5.2.0': + dependencies: + tslib: 2.7.0 + + '@aws-crypto/util@5.2.0': + dependencies: + '@aws-sdk/types': 3.662.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.7.0 + + '@aws-sdk/client-s3@3.663.0': + dependencies: + '@aws-crypto/sha1-browser': 5.2.0 + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.662.0(@aws-sdk/client-sts@3.662.0) + '@aws-sdk/client-sts': 3.662.0 + '@aws-sdk/core': 3.662.0 + '@aws-sdk/credential-provider-node': 3.662.0(@aws-sdk/client-sso-oidc@3.662.0(@aws-sdk/client-sts@3.662.0))(@aws-sdk/client-sts@3.662.0) + '@aws-sdk/middleware-bucket-endpoint': 3.662.0 + '@aws-sdk/middleware-expect-continue': 3.662.0 + '@aws-sdk/middleware-flexible-checksums': 3.662.0 + '@aws-sdk/middleware-host-header': 3.662.0 + '@aws-sdk/middleware-location-constraint': 3.662.0 + '@aws-sdk/middleware-logger': 3.662.0 + '@aws-sdk/middleware-recursion-detection': 3.662.0 + '@aws-sdk/middleware-sdk-s3': 3.662.0 + '@aws-sdk/middleware-ssec': 3.662.0 + '@aws-sdk/middleware-user-agent': 3.662.0 + '@aws-sdk/region-config-resolver': 3.662.0 + '@aws-sdk/signature-v4-multi-region': 3.662.0 + '@aws-sdk/types': 3.662.0 + '@aws-sdk/util-endpoints': 3.662.0 + '@aws-sdk/util-user-agent-browser': 3.662.0 + '@aws-sdk/util-user-agent-node': 3.662.0 + '@aws-sdk/xml-builder': 3.662.0 + '@smithy/config-resolver': 3.0.9 + '@smithy/core': 2.4.7 + '@smithy/eventstream-serde-browser': 3.0.10 + '@smithy/eventstream-serde-config-resolver': 3.0.7 + '@smithy/eventstream-serde-node': 3.0.9 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-blob-browser': 3.1.6 + '@smithy/hash-node': 3.0.7 + '@smithy/hash-stream-node': 3.1.6 + '@smithy/invalid-dependency': 3.0.7 + '@smithy/md5-js': 3.0.7 + '@smithy/middleware-content-length': 3.0.9 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.22 + '@smithy/middleware-serde': 3.0.7 + '@smithy/middleware-stack': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/node-http-handler': 3.2.4 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.3.6 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.22 + '@smithy/util-defaults-mode-node': 3.0.22 + '@smithy/util-endpoints': 2.1.3 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 + '@smithy/util-stream': 3.1.9 + '@smithy/util-utf8': 3.0.0 + '@smithy/util-waiter': 3.1.6 + tslib: 2.7.0 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso-oidc@3.662.0(@aws-sdk/client-sts@3.662.0)': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sts': 3.662.0 + '@aws-sdk/core': 3.662.0 + '@aws-sdk/credential-provider-node': 3.662.0(@aws-sdk/client-sso-oidc@3.662.0(@aws-sdk/client-sts@3.662.0))(@aws-sdk/client-sts@3.662.0) + '@aws-sdk/middleware-host-header': 3.662.0 + '@aws-sdk/middleware-logger': 3.662.0 + '@aws-sdk/middleware-recursion-detection': 3.662.0 + '@aws-sdk/middleware-user-agent': 3.662.0 + '@aws-sdk/region-config-resolver': 3.662.0 + '@aws-sdk/types': 3.662.0 + '@aws-sdk/util-endpoints': 3.662.0 + '@aws-sdk/util-user-agent-browser': 3.662.0 + '@aws-sdk/util-user-agent-node': 3.662.0 + '@smithy/config-resolver': 3.0.9 + '@smithy/core': 2.4.7 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-node': 3.0.7 + '@smithy/invalid-dependency': 3.0.7 + '@smithy/middleware-content-length': 3.0.9 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.22 + '@smithy/middleware-serde': 3.0.7 + '@smithy/middleware-stack': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/node-http-handler': 3.2.4 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.3.6 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.22 + '@smithy/util-defaults-mode-node': 3.0.22 + '@smithy/util-endpoints': 2.1.3 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso@3.662.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.662.0 + '@aws-sdk/middleware-host-header': 3.662.0 + '@aws-sdk/middleware-logger': 3.662.0 + '@aws-sdk/middleware-recursion-detection': 3.662.0 + '@aws-sdk/middleware-user-agent': 3.662.0 + '@aws-sdk/region-config-resolver': 3.662.0 + '@aws-sdk/types': 3.662.0 + '@aws-sdk/util-endpoints': 3.662.0 + '@aws-sdk/util-user-agent-browser': 3.662.0 + '@aws-sdk/util-user-agent-node': 3.662.0 + '@smithy/config-resolver': 3.0.9 + '@smithy/core': 2.4.7 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-node': 3.0.7 + '@smithy/invalid-dependency': 3.0.7 + '@smithy/middleware-content-length': 3.0.9 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.22 + '@smithy/middleware-serde': 3.0.7 + '@smithy/middleware-stack': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/node-http-handler': 3.2.4 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.3.6 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.22 + '@smithy/util-defaults-mode-node': 3.0.22 + '@smithy/util-endpoints': 2.1.3 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sts@3.662.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.662.0(@aws-sdk/client-sts@3.662.0) + '@aws-sdk/core': 3.662.0 + '@aws-sdk/credential-provider-node': 3.662.0(@aws-sdk/client-sso-oidc@3.662.0(@aws-sdk/client-sts@3.662.0))(@aws-sdk/client-sts@3.662.0) + '@aws-sdk/middleware-host-header': 3.662.0 + '@aws-sdk/middleware-logger': 3.662.0 + '@aws-sdk/middleware-recursion-detection': 3.662.0 + '@aws-sdk/middleware-user-agent': 3.662.0 + '@aws-sdk/region-config-resolver': 3.662.0 + '@aws-sdk/types': 3.662.0 + '@aws-sdk/util-endpoints': 3.662.0 + '@aws-sdk/util-user-agent-browser': 3.662.0 + '@aws-sdk/util-user-agent-node': 3.662.0 + '@smithy/config-resolver': 3.0.9 + '@smithy/core': 2.4.7 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-node': 3.0.7 + '@smithy/invalid-dependency': 3.0.7 + '@smithy/middleware-content-length': 3.0.9 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.22 + '@smithy/middleware-serde': 3.0.7 + '@smithy/middleware-stack': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/node-http-handler': 3.2.4 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.3.6 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.22 + '@smithy/util-defaults-mode-node': 3.0.22 + '@smithy/util-endpoints': 2.1.3 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/core@3.662.0': + dependencies: + '@smithy/core': 2.4.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/property-provider': 3.1.7 + '@smithy/protocol-http': 4.1.4 + '@smithy/signature-v4': 4.2.0 + '@smithy/smithy-client': 3.3.6 + '@smithy/types': 3.5.0 + '@smithy/util-middleware': 3.0.7 + fast-xml-parser: 4.4.1 + tslib: 2.7.0 + + '@aws-sdk/credential-provider-env@3.662.0': + dependencies: + '@aws-sdk/types': 3.662.0 + '@smithy/property-provider': 3.1.7 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/credential-provider-http@3.662.0': + dependencies: + '@aws-sdk/types': 3.662.0 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/node-http-handler': 3.2.4 + '@smithy/property-provider': 3.1.7 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.3.6 + '@smithy/types': 3.5.0 + '@smithy/util-stream': 3.1.9 + tslib: 2.7.0 + + '@aws-sdk/credential-provider-ini@3.662.0(@aws-sdk/client-sso-oidc@3.662.0(@aws-sdk/client-sts@3.662.0))(@aws-sdk/client-sts@3.662.0)': + dependencies: + '@aws-sdk/client-sts': 3.662.0 + '@aws-sdk/credential-provider-env': 3.662.0 + '@aws-sdk/credential-provider-http': 3.662.0 + '@aws-sdk/credential-provider-process': 3.662.0 + '@aws-sdk/credential-provider-sso': 3.662.0(@aws-sdk/client-sso-oidc@3.662.0(@aws-sdk/client-sts@3.662.0)) + '@aws-sdk/credential-provider-web-identity': 3.662.0(@aws-sdk/client-sts@3.662.0) + '@aws-sdk/types': 3.662.0 + '@smithy/credential-provider-imds': 3.2.4 + '@smithy/property-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-node@3.662.0(@aws-sdk/client-sso-oidc@3.662.0(@aws-sdk/client-sts@3.662.0))(@aws-sdk/client-sts@3.662.0)': + dependencies: + '@aws-sdk/credential-provider-env': 3.662.0 + '@aws-sdk/credential-provider-http': 3.662.0 + '@aws-sdk/credential-provider-ini': 3.662.0(@aws-sdk/client-sso-oidc@3.662.0(@aws-sdk/client-sts@3.662.0))(@aws-sdk/client-sts@3.662.0) + '@aws-sdk/credential-provider-process': 3.662.0 + '@aws-sdk/credential-provider-sso': 3.662.0(@aws-sdk/client-sso-oidc@3.662.0(@aws-sdk/client-sts@3.662.0)) + '@aws-sdk/credential-provider-web-identity': 3.662.0(@aws-sdk/client-sts@3.662.0) + '@aws-sdk/types': 3.662.0 + '@smithy/credential-provider-imds': 3.2.4 + '@smithy/property-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' + - aws-crt + + '@aws-sdk/credential-provider-process@3.662.0': + dependencies: + '@aws-sdk/types': 3.662.0 + '@smithy/property-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/credential-provider-sso@3.662.0(@aws-sdk/client-sso-oidc@3.662.0(@aws-sdk/client-sts@3.662.0))': + dependencies: + '@aws-sdk/client-sso': 3.662.0 + '@aws-sdk/token-providers': 3.662.0(@aws-sdk/client-sso-oidc@3.662.0(@aws-sdk/client-sts@3.662.0)) + '@aws-sdk/types': 3.662.0 + '@smithy/property-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-web-identity@3.662.0(@aws-sdk/client-sts@3.662.0)': + dependencies: + '@aws-sdk/client-sts': 3.662.0 + '@aws-sdk/types': 3.662.0 + '@smithy/property-provider': 3.1.7 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/middleware-bucket-endpoint@3.662.0': + dependencies: + '@aws-sdk/types': 3.662.0 + '@aws-sdk/util-arn-parser': 3.568.0 + '@smithy/node-config-provider': 3.1.8 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + '@smithy/util-config-provider': 3.0.0 + tslib: 2.7.0 + + '@aws-sdk/middleware-expect-continue@3.662.0': + dependencies: + '@aws-sdk/types': 3.662.0 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/middleware-flexible-checksums@3.662.0': + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@aws-crypto/crc32c': 5.2.0 + '@aws-sdk/types': 3.662.0 + '@smithy/is-array-buffer': 3.0.0 + '@smithy/node-config-provider': 3.1.8 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + + '@aws-sdk/middleware-host-header@3.662.0': + dependencies: + '@aws-sdk/types': 3.662.0 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/middleware-location-constraint@3.662.0': + dependencies: + '@aws-sdk/types': 3.662.0 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/middleware-logger@3.662.0': + dependencies: + '@aws-sdk/types': 3.662.0 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/middleware-recursion-detection@3.662.0': + dependencies: + '@aws-sdk/types': 3.662.0 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/middleware-sdk-s3@3.662.0': + dependencies: + '@aws-sdk/core': 3.662.0 + '@aws-sdk/types': 3.662.0 + '@aws-sdk/util-arn-parser': 3.568.0 + '@smithy/core': 2.4.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/protocol-http': 4.1.4 + '@smithy/signature-v4': 4.2.0 + '@smithy/smithy-client': 3.3.6 + '@smithy/types': 3.5.0 + '@smithy/util-config-provider': 3.0.0 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-stream': 3.1.9 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + + '@aws-sdk/middleware-ssec@3.662.0': + dependencies: + '@aws-sdk/types': 3.662.0 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/middleware-user-agent@3.662.0': + dependencies: + '@aws-sdk/types': 3.662.0 + '@aws-sdk/util-endpoints': 3.662.0 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/region-config-resolver@3.662.0': + dependencies: + '@aws-sdk/types': 3.662.0 + '@smithy/node-config-provider': 3.1.8 + '@smithy/types': 3.5.0 + '@smithy/util-config-provider': 3.0.0 + '@smithy/util-middleware': 3.0.7 + tslib: 2.7.0 + + '@aws-sdk/signature-v4-multi-region@3.662.0': + dependencies: + '@aws-sdk/middleware-sdk-s3': 3.662.0 + '@aws-sdk/types': 3.662.0 + '@smithy/protocol-http': 4.1.4 + '@smithy/signature-v4': 4.2.0 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/token-providers@3.662.0(@aws-sdk/client-sso-oidc@3.662.0(@aws-sdk/client-sts@3.662.0))': + dependencies: + '@aws-sdk/client-sso-oidc': 3.662.0(@aws-sdk/client-sts@3.662.0) + '@aws-sdk/types': 3.662.0 + '@smithy/property-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/types@3.662.0': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/util-arn-parser@3.568.0': + dependencies: + tslib: 2.7.0 + + '@aws-sdk/util-endpoints@3.662.0': + dependencies: + '@aws-sdk/types': 3.662.0 + '@smithy/types': 3.5.0 + '@smithy/util-endpoints': 2.1.3 + tslib: 2.7.0 + + '@aws-sdk/util-locate-window@3.568.0': + dependencies: + tslib: 2.7.0 + + '@aws-sdk/util-user-agent-browser@3.662.0': + dependencies: + '@aws-sdk/types': 3.662.0 + '@smithy/types': 3.5.0 + bowser: 2.11.0 + tslib: 2.7.0 + + '@aws-sdk/util-user-agent-node@3.662.0': + dependencies: + '@aws-sdk/types': 3.662.0 + '@smithy/node-config-provider': 3.1.8 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/xml-builder@3.662.0': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@babel/code-frame@7.24.7': + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.1.0 + + '@babel/compat-data@7.25.4': {} + + '@babel/core@7.24.5': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.24.5) + '@babel/helpers': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + convert-source-map: 2.0.0 + debug: 4.3.7 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/core@7.25.2': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helpers': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + convert-source-map: 2.0.0 + debug: 4.3.7 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.25.6': + dependencies: + '@babel/types': 7.25.6 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + '@babel/helper-compilation-targets@7.25.2': + dependencies: + '@babel/compat-data': 7.25.4 + '@babel/helper-validator-option': 7.24.8 + browserslist: 4.23.3 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.24.7': + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.25.2(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-simple-access@7.24.7': + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.24.8': {} + + '@babel/helper-validator-identifier@7.24.7': {} + + '@babel/helper-validator-option@7.24.8': {} + + '@babel/helpers@7.25.6': + dependencies: + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + + '@babel/highlight@7.24.7': + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.0 + + '@babel/parser@7.24.5': + dependencies: + '@babel/types': 7.25.6 + + '@babel/parser@7.25.6': + dependencies: + '@babel/types': 7.25.6 + + '@babel/runtime@7.25.6': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.25.0': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 + + '@babel/traverse@7.25.6': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + debug: 4.3.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.25.6': + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@emnapi/runtime@1.3.1': + dependencies: + tslib: 2.7.0 + optional: true + + '@esbuild/aix-ppc64@0.19.11': + optional: true + + '@esbuild/android-arm64@0.19.11': + optional: true + + '@esbuild/android-arm@0.19.11': + optional: true + + '@esbuild/android-x64@0.19.11': + optional: true + + '@esbuild/darwin-arm64@0.19.11': + optional: true + + '@esbuild/darwin-x64@0.19.11': + optional: true + + '@esbuild/freebsd-arm64@0.19.11': + optional: true + + '@esbuild/freebsd-x64@0.19.11': + optional: true + + '@esbuild/linux-arm64@0.19.11': + optional: true + + '@esbuild/linux-arm@0.19.11': + optional: true + + '@esbuild/linux-ia32@0.19.11': + optional: true + + '@esbuild/linux-loong64@0.19.11': + optional: true + + '@esbuild/linux-mips64el@0.19.11': + optional: true + + '@esbuild/linux-ppc64@0.19.11': + optional: true + + '@esbuild/linux-riscv64@0.19.11': + optional: true + + '@esbuild/linux-s390x@0.19.11': + optional: true + + '@esbuild/linux-x64@0.19.11': + optional: true + + '@esbuild/netbsd-x64@0.19.11': + optional: true + + '@esbuild/openbsd-x64@0.19.11': + optional: true + + '@esbuild/sunos-x64@0.19.11': + optional: true + + '@esbuild/win32-arm64@0.19.11': + optional: true + + '@esbuild/win32-ia32@0.19.11': + optional: true + + '@esbuild/win32-x64@0.19.11': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@9.9.1(jiti@1.21.6))': + dependencies: + eslint: 9.9.1(jiti@1.21.6) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.11.1': {} + + '@eslint/compat@1.1.1': {} + + '@eslint/config-array@0.18.0': + dependencies: + '@eslint/object-schema': 2.1.4 + debug: 4.3.7 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/eslintrc@3.1.0': + dependencies: + ajv: 6.12.6 + debug: 4.3.7 + espree: 10.1.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.11.0': {} + + '@eslint/js@9.9.1': {} + + '@eslint/object-schema@2.1.4': {} + + '@floating-ui/core@1.6.8': + dependencies: + '@floating-ui/utils': 0.2.8 + + '@floating-ui/dom@1.6.11': + dependencies: + '@floating-ui/core': 1.6.8 + '@floating-ui/utils': 0.2.8 + + '@floating-ui/react-dom@2.1.2(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)': + dependencies: + '@floating-ui/dom': 1.6.11 + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + + '@floating-ui/utils@0.2.8': {} + + '@hookform/resolvers@3.9.0(react-hook-form@7.53.0(react@19.0.0-rc-69d4b800-20241021))': + dependencies: + react-hook-form: 7.53.0(react@19.0.0-rc-69d4b800-20241021) + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.0': {} + + '@img/sharp-darwin-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.4 + optional: true + + '@img/sharp-darwin-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.0.5': + optional: true + + '@img/sharp-libvips-linux-s390x@1.0.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + optional: true - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 - dev: false + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + optional: true - /@babel/code-frame@7.22.13: - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.22.13 - chalk: 2.4.2 + '@img/sharp-linux-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.4 + optional: true - /@babel/compat-data@7.22.9: - resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} - engines: {node: '>=6.9.0'} - dev: false + '@img/sharp-linux-arm@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.5 + optional: true - /@babel/core@7.22.17: - resolution: {integrity: sha512-2EENLmhpwplDux5PSsZnSbnSkB3tZ6QTksgO25xwEL7pIDcNOMhF5v/s6RzwjMZzZzw9Ofc30gHv5ChCC8pifQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.22.15 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-module-transforms': 7.22.17(@babel/core@7.22.17) - '@babel/helpers': 7.22.15 - '@babel/parser': 7.22.16 - '@babel/template': 7.22.15 - '@babel/traverse': 7.22.17 - '@babel/types': 7.22.17 - convert-source-map: 1.9.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: false + '@img/sharp-linux-s390x@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.0.4 + optional: true - /@babel/generator@7.22.15: - resolution: {integrity: sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.17 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 - jsesc: 2.5.2 - dev: false + '@img/sharp-linux-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.4 + optional: true - /@babel/helper-compilation-targets@7.22.15: - resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.22.9 - '@babel/helper-validator-option': 7.22.15 - browserslist: 4.21.10 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: false + '@img/sharp-linuxmusl-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + optional: true - /@babel/helper-environment-visitor@7.22.5: - resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} - engines: {node: '>=6.9.0'} - dev: false + '@img/sharp-linuxmusl-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + optional: true - /@babel/helper-function-name@7.22.5: - resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} - engines: {node: '>=6.9.0'} + '@img/sharp-wasm32@0.33.5': dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.22.17 - dev: false + '@emnapi/runtime': 1.3.1 + optional: true - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.17 - dev: false + '@img/sharp-win32-ia32@0.33.5': + optional: true - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.17 - dev: false + '@img/sharp-win32-x64@0.33.5': + optional: true - /@babel/helper-module-transforms@7.22.17(@babel/core@7.22.17): - resolution: {integrity: sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@isaacs/cliui@8.0.2': dependencies: - '@babel/core': 7.22.17 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.15 - dev: false + 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 - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} + '@jridgewell/gen-mapping@0.3.5': dependencies: - '@babel/types': 7.22.17 - dev: false + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.17 - dev: false + '@jridgewell/resolve-uri@3.1.2': {} - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} - engines: {node: '>=6.9.0'} - dev: false + '@jridgewell/set-array@1.2.1': {} - /@babel/helper-validator-identifier@7.22.15: - resolution: {integrity: sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==} - engines: {node: '>=6.9.0'} + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 - /@babel/helper-validator-option@7.22.15: - resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} - engines: {node: '>=6.9.0'} - dev: false + '@jridgewell/sourcemap-codec@1.5.0': {} - /@babel/helpers@7.22.15: - resolution: {integrity: sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==} - engines: {node: '>=6.9.0'} + '@jridgewell/trace-mapping@0.3.25': dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.22.17 - '@babel/types': 7.22.17 - transitivePeerDependencies: - - supports-color - dev: false + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 - /@babel/highlight@7.22.13: - resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==} - engines: {node: '>=6.9.0'} + '@jridgewell/trace-mapping@0.3.9': dependencies: - '@babel/helper-validator-identifier': 7.22.15 - chalk: 2.4.2 - js-tokens: 4.0.0 + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 - /@babel/parser@7.22.16: - resolution: {integrity: sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.22.17 - dev: false + '@next/env@14.2.3': {} - /@babel/runtime@7.22.11: - resolution: {integrity: sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==} - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 - dev: false + '@next/env@15.0.1': {} - /@babel/runtime@7.23.6: - resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} - engines: {node: '>=6.9.0'} + '@next/eslint-plugin-next@15.0.1': dependencies: - regenerator-runtime: 0.14.1 - dev: false + fast-glob: 3.3.1 - /@babel/runtime@7.23.7: - resolution: {integrity: sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA==} - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 + '@next/swc-darwin-arm64@14.2.3': + optional: true - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.22.13 - '@babel/parser': 7.22.16 - '@babel/types': 7.22.17 - dev: false + '@next/swc-darwin-arm64@15.0.1': + optional: true - /@babel/traverse@7.22.17: - resolution: {integrity: sha512-xK4Uwm0JnAMvxYZxOVecss85WxTEIbTa7bnGyf/+EgCL5Zt3U7htUpEOWv9detPlamGKuRzCqw74xVglDWpPdg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.22.15 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.22.16 - '@babel/types': 7.22.17 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: false + '@next/swc-darwin-x64@14.2.3': + optional: true - /@babel/types@7.22.17: - resolution: {integrity: sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.15 - to-fast-properties: 2.0.0 - dev: false - - /@changesets/apply-release-plan@7.0.0: - resolution: {integrity: sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ==} - dependencies: - '@babel/runtime': 7.23.7 - '@changesets/config': 3.0.0 - '@changesets/get-version-range-type': 0.4.0 - '@changesets/git': 3.0.0 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - detect-indent: 6.1.0 - fs-extra: 7.0.1 - lodash.startcase: 4.4.0 - outdent: 0.5.0 - prettier: 2.8.8 - resolve-from: 5.0.0 - semver: 7.5.4 - dev: true - - /@changesets/assemble-release-plan@6.0.0: - resolution: {integrity: sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw==} - dependencies: - '@babel/runtime': 7.23.7 - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.0.0 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - semver: 7.5.4 - dev: true - - /@changesets/changelog-git@0.2.0: - resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} - dependencies: - '@changesets/types': 6.0.0 - dev: true - - /@changesets/cli@2.27.1: - resolution: {integrity: sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ==} - hasBin: true - dependencies: - '@babel/runtime': 7.23.7 - '@changesets/apply-release-plan': 7.0.0 - '@changesets/assemble-release-plan': 6.0.0 - '@changesets/changelog-git': 0.2.0 - '@changesets/config': 3.0.0 - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.0.0 - '@changesets/get-release-plan': 4.0.0 - '@changesets/git': 3.0.0 - '@changesets/logger': 0.1.0 - '@changesets/pre': 2.0.0 - '@changesets/read': 0.6.0 - '@changesets/types': 6.0.0 - '@changesets/write': 0.3.0 - '@manypkg/get-packages': 1.1.3 - '@types/semver': 7.5.1 - ansi-colors: 4.1.3 - chalk: 2.4.2 - ci-info: 3.8.0 - enquirer: 2.4.1 - external-editor: 3.1.0 - fs-extra: 7.0.1 - human-id: 1.0.2 - meow: 6.1.1 - outdent: 0.5.0 - p-limit: 2.3.0 - preferred-pm: 3.0.3 - resolve-from: 5.0.0 - semver: 7.5.4 - spawndamnit: 2.0.0 - term-size: 2.2.1 - tty-table: 4.2.1 - dev: true - - /@changesets/config@3.0.0: - resolution: {integrity: sha512-o/rwLNnAo/+j9Yvw9mkBQOZySDYyOr/q+wptRLcAVGlU6djOeP9v1nlalbL9MFsobuBVQbZCTp+dIzdq+CLQUA==} - dependencies: - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.0.0 - '@changesets/logger': 0.1.0 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - fs-extra: 7.0.1 - micromatch: 4.0.5 - dev: true - - /@changesets/errors@0.2.0: - resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} - dependencies: - extendable-error: 0.1.7 - dev: true - - /@changesets/get-dependents-graph@2.0.0: - resolution: {integrity: sha512-cafUXponivK4vBgZ3yLu944mTvam06XEn2IZGjjKc0antpenkYANXiiE6GExV/yKdsCnE8dXVZ25yGqLYZmScA==} - dependencies: - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - chalk: 2.4.2 - fs-extra: 7.0.1 - semver: 7.5.4 - dev: true - - /@changesets/get-release-plan@4.0.0: - resolution: {integrity: sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w==} - dependencies: - '@babel/runtime': 7.23.7 - '@changesets/assemble-release-plan': 6.0.0 - '@changesets/config': 3.0.0 - '@changesets/pre': 2.0.0 - '@changesets/read': 0.6.0 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - dev: true - - /@changesets/get-version-range-type@0.4.0: - resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} - dev: true - - /@changesets/git@3.0.0: - resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} - dependencies: - '@babel/runtime': 7.23.7 - '@changesets/errors': 0.2.0 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - is-subdir: 1.2.0 - micromatch: 4.0.5 - spawndamnit: 2.0.0 - dev: true - - /@changesets/logger@0.1.0: - resolution: {integrity: sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==} - dependencies: - chalk: 2.4.2 - dev: true + '@next/swc-darwin-x64@15.0.1': + optional: true - /@changesets/parse@0.4.0: - resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} - dependencies: - '@changesets/types': 6.0.0 - js-yaml: 3.14.1 - dev: true + '@next/swc-linux-arm64-gnu@14.2.3': + optional: true - /@changesets/pre@2.0.0: - resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} - dependencies: - '@babel/runtime': 7.23.7 - '@changesets/errors': 0.2.0 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - fs-extra: 7.0.1 - dev: true + '@next/swc-linux-arm64-gnu@15.0.1': + optional: true - /@changesets/read@0.6.0: - resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} - dependencies: - '@babel/runtime': 7.23.7 - '@changesets/git': 3.0.0 - '@changesets/logger': 0.1.0 - '@changesets/parse': 0.4.0 - '@changesets/types': 6.0.0 - chalk: 2.4.2 - fs-extra: 7.0.1 - p-filter: 2.1.0 - dev: true + '@next/swc-linux-arm64-musl@14.2.3': + optional: true - /@changesets/types@4.1.0: - resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} - dev: true + '@next/swc-linux-arm64-musl@15.0.1': + optional: true - /@changesets/types@6.0.0: - resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} - dev: true + '@next/swc-linux-x64-gnu@14.2.3': + optional: true - /@changesets/write@0.3.0: - resolution: {integrity: sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw==} - dependencies: - '@babel/runtime': 7.23.7 - '@changesets/types': 6.0.0 - fs-extra: 7.0.1 - human-id: 1.0.2 - prettier: 2.8.8 - dev: true + '@next/swc-linux-x64-gnu@15.0.1': + optional: true - /@cspotcode/source-map-support@0.8.1: - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 + '@next/swc-linux-x64-musl@14.2.3': + optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.56.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.56.0 - eslint-visitor-keys: 3.4.3 - dev: true + '@next/swc-linux-x64-musl@15.0.1': + optional: true - /@eslint-community/regexpp@4.8.0: - resolution: {integrity: sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true + '@next/swc-win32-arm64-msvc@14.2.3': + optional: 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.21.0 - ignore: 5.2.4 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true + '@next/swc-win32-arm64-msvc@15.0.1': + optional: true - /@eslint/js@8.56.0: - resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + '@next/swc-win32-ia32-msvc@14.2.3': + optional: true - /@floating-ui/core@1.4.1: - resolution: {integrity: sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ==} - dependencies: - '@floating-ui/utils': 0.1.1 - dev: false + '@next/swc-win32-x64-msvc@14.2.3': + optional: true - /@floating-ui/dom@1.5.1: - resolution: {integrity: sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw==} - dependencies: - '@floating-ui/core': 1.4.1 - '@floating-ui/utils': 0.1.1 - dev: false + '@next/swc-win32-x64-msvc@15.0.1': + optional: true - /@floating-ui/react-dom@2.0.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' + '@nodelib/fs.scandir@2.1.5': dependencies: - '@floating-ui/dom': 1.5.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 - /@floating-ui/utils@0.1.1: - resolution: {integrity: sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw==} - dev: false + '@nodelib/fs.stat@2.0.5': {} - /@google-cloud/paginator@5.0.0: - resolution: {integrity: sha512-87aeg6QQcEPxGCOthnpUjvw4xAZ57G7pL8FS0C4e/81fr3FjkpUpibf1s2v5XGyGhUVGF4Jfg7yEcxqn2iUw1w==} - engines: {node: '>=14.0.0'} + '@nodelib/fs.walk@1.2.8': dependencies: - arrify: 2.0.1 - extend: 3.0.2 - dev: false + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 - /@google-cloud/projectify@4.0.0: - resolution: {integrity: sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==} - engines: {node: '>=14.0.0'} - dev: false + '@nolyfill/is-core-module@1.0.39': {} - /@google-cloud/promisify@4.0.0: - resolution: {integrity: sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==} - engines: {node: '>=14'} - dev: false + '@one-ini/wasm@0.1.1': {} - /@google-cloud/storage@7.7.0: - resolution: {integrity: sha512-EMCEY+6JiIkx7Dt8NXVGGjy1vRdSGdHkoqZoqjJw7cEBkT7ZkX0c7puedfn1MamnzW5SX4xoa2jVq5u7OWBmkQ==} - engines: {node: '>=14'} - dependencies: - '@google-cloud/paginator': 5.0.0 - '@google-cloud/projectify': 4.0.0 - '@google-cloud/promisify': 4.0.0 - abort-controller: 3.0.0 - async-retry: 1.3.3 - compressible: 2.0.18 - duplexify: 4.1.2 - ent: 2.2.0 - fast-xml-parser: 4.3.4 - gaxios: 6.2.0 - google-auth-library: 9.6.3 - mime: 3.0.0 - mime-types: 2.1.35 - p-limit: 3.1.0 - retry-request: 7.0.2 - teeny-request: 9.0.0 - uuid: 8.3.2 - transitivePeerDependencies: - - encoding - - supports-color - dev: false + '@panva/hkdf@1.2.1': {} - /@hookform/resolvers@3.3.2(react-hook-form@7.45.4): - resolution: {integrity: sha512-Tw+GGPnBp+5DOsSg4ek3LCPgkBOuOgS5DsDV7qsWNH9LZc433kgsWICjlsh2J9p04H2K66hsXPPb9qn9ILdUtA==} - peerDependencies: - react-hook-form: ^7.0.0 - dependencies: - react-hook-form: 7.45.4(react@18.2.0) - dev: false + '@pkgjs/parseargs@0.11.0': + optional: true - /@humanwhocodes/config-array@0.11.14: - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} + '@pkgr/core@0.1.1': {} + + '@playwright/test@1.47.2': dependencies: - '@humanwhocodes/object-schema': 2.0.2 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true + playwright: 1.47.2 - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: true + '@prisma/client@5.16.1(prisma@5.16.1)': + optionalDependencies: + prisma: 5.16.1 - /@humanwhocodes/object-schema@2.0.2: - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} - dev: true + '@prisma/debug@5.16.1': {} - /@isaacs/cliui@8.0.2: - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} + '@prisma/engines-version@5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303': {} + + '@prisma/engines@5.16.1': 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 + '@prisma/debug': 5.16.1 + '@prisma/engines-version': 5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303 + '@prisma/fetch-engine': 5.16.1 + '@prisma/get-platform': 5.16.1 - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} + '@prisma/fetch-engine@5.16.1': dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 + '@prisma/debug': 5.16.1 + '@prisma/engines-version': 5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303 + '@prisma/get-platform': 5.16.1 - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} + '@prisma/get-platform@5.16.1': + dependencies: + '@prisma/debug': 5.16.1 - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} + '@radix-ui/colors@3.0.0': {} - /@jridgewell/source-map@0.3.5: - resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 - dev: false + '@radix-ui/number@1.1.0': {} - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@radix-ui/primitive@1.1.0': {} - /@jridgewell/trace-mapping@0.3.20: - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + '@radix-ui/react-alert-dialog@1.1.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-context': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-dialog': 1.1.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-slot': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /@jridgewell/trace-mapping@0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@radix-ui/react-arrow@1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /@manypkg/find-root@1.1.0: - resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + '@radix-ui/react-avatar@1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': dependencies: - '@babel/runtime': 7.23.7 - '@types/node': 12.20.55 - find-up: 4.1.0 - fs-extra: 8.1.0 - dev: true + '@radix-ui/react-context': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-callback-ref': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /@manypkg/get-packages@1.1.3: - resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + '@radix-ui/react-collection@1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': dependencies: - '@babel/runtime': 7.23.7 - '@changesets/types': 4.1.0 - '@manypkg/find-root': 1.1.0 - fs-extra: 8.1.0 - globby: 11.1.0 - read-yaml-file: 1.1.0 - dev: true + '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-context': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-slot': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /@next-auth/prisma-adapter@1.0.7(@prisma/client@5.10.2)(next-auth@4.24.5): - resolution: {integrity: sha512-Cdko4KfcmKjsyHFrWwZ//lfLUbcLqlyFqjd/nYE2m3aZ7tjMNUjpks47iw7NTCnXf+5UWz5Ypyt1dSs1EP5QJw==} - peerDependencies: - '@prisma/client': '>=2.26.0 || >=3' - next-auth: ^4 + '@radix-ui/react-compose-refs@1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': dependencies: - '@prisma/client': 5.10.2(prisma@5.10.2) - next-auth: 4.24.5(next@14.1.0)(react-dom@18.2.0)(react@18.2.0) - dev: false + react: 19.0.0-rc-69d4b800-20241021 + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /@next/env@14.1.0: - resolution: {integrity: sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw==} - dev: false + '@radix-ui/react-context@1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': + dependencies: + react: 19.0.0-rc-69d4b800-20241021 + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 + + '@radix-ui/react-dialog@1.1.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-context': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-dismissable-layer': 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-focus-guards': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-focus-scope': 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-id': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-portal': 1.1.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-presence': 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-slot': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-controllable-state': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + aria-hidden: 1.2.4 + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + react-remove-scroll: 2.5.7(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /@next/eslint-plugin-next@14.1.0: - resolution: {integrity: sha512-x4FavbNEeXx/baD/zC/SdrvkjSby8nBn8KcCREqk6UuwvwoAPZmaV8TFCAuo/cpovBRTIY67mHhe86MQQm/68Q==} + '@radix-ui/react-direction@1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': dependencies: - glob: 10.3.10 - dev: true + react: 19.0.0-rc-69d4b800-20241021 + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /@next/swc-darwin-arm64@14.1.0: - resolution: {integrity: sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false - optional: true + '@radix-ui/react-dismissable-layer@1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-callback-ref': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-escape-keydown': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 + + '@radix-ui/react-dropdown-menu@2.1.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-context': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-id': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-menu': 2.1.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-controllable-state': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /@next/swc-darwin-x64@14.1.0: - resolution: {integrity: sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false - optional: true + '@radix-ui/react-focus-guards@1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': + dependencies: + react: 19.0.0-rc-69d4b800-20241021 + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /@next/swc-linux-arm64-gnu@14.1.0: - resolution: {integrity: sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true + '@radix-ui/react-focus-scope@1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-callback-ref': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /@next/swc-linux-arm64-musl@14.1.0: - resolution: {integrity: sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true + '@radix-ui/react-id@1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-69d4b800-20241021 + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /@next/swc-linux-x64-gnu@14.1.0: - resolution: {integrity: sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true + '@radix-ui/react-label@2.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': + dependencies: + '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 + + '@radix-ui/react-menu@2.1.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-context': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-direction': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-dismissable-layer': 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-focus-guards': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-focus-scope': 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-id': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-popper': 1.2.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-portal': 1.1.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-presence': 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-roving-focus': 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-slot': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-callback-ref': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + aria-hidden: 1.2.4 + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + react-remove-scroll: 2.5.7(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 + + '@radix-ui/react-popover@1.1.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-context': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-dismissable-layer': 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-focus-guards': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-focus-scope': 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-id': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-popper': 1.2.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-portal': 1.1.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-presence': 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-slot': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-controllable-state': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + aria-hidden: 1.2.4 + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + react-remove-scroll: 2.5.7(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 + + '@radix-ui/react-popper@1.2.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': + dependencies: + '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021) + '@radix-ui/react-arrow': 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-context': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-callback-ref': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-rect': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-size': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/rect': 1.1.0 + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /@next/swc-linux-x64-musl@14.1.0: - resolution: {integrity: sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true + '@radix-ui/react-portal@1.1.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': + dependencies: + '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /@next/swc-win32-arm64-msvc@14.1.0: - resolution: {integrity: sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false - optional: true + '@radix-ui/react-presence@1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /@next/swc-win32-ia32-msvc@14.1.0: - resolution: {integrity: sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: false - optional: true + '@radix-ui/react-primitive@2.0.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': + dependencies: + '@radix-ui/react-slot': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 + + '@radix-ui/react-roving-focus@1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-context': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-direction': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-id': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-callback-ref': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-controllable-state': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 + + '@radix-ui/react-select@2.1.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': + dependencies: + '@radix-ui/number': 1.1.0 + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-context': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-direction': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-dismissable-layer': 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-focus-guards': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-focus-scope': 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-id': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-popper': 1.2.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-portal': 1.1.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-slot': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-callback-ref': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-controllable-state': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-previous': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-visually-hidden': 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + aria-hidden: 1.2.4 + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + react-remove-scroll: 2.5.7(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /@next/swc-win32-x64-msvc@14.1.0: - resolution: {integrity: sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false - optional: true + '@radix-ui/react-slot@1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-69d4b800-20241021 + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 + + '@radix-ui/react-tabs@1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-context': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-direction': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-id': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-presence': 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-roving-focus': 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-controllable-state': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 + + '@radix-ui/react-tooltip@1.1.2(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-context': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-dismissable-layer': 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-id': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-popper': 1.2.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-portal': 1.1.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-presence': 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-slot': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-use-controllable-state': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + '@radix-ui/react-visually-hidden': 1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@radix-ui/react-use-callback-ref@1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + react: 19.0.0-rc-69d4b800-20241021 + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} + '@radix-ui/react-use-controllable-state@1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-69d4b800-20241021 + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@radix-ui/react-use-escape-keydown@1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 + '@radix-ui/react-use-callback-ref': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-69d4b800-20241021 + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /@one-ini/wasm@0.1.1: - resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} - dev: false + '@radix-ui/react-use-layout-effect@1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': + dependencies: + react: 19.0.0-rc-69d4b800-20241021 + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /@panva/hkdf@1.1.1: - resolution: {integrity: sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA==} - dev: false + '@radix-ui/react-use-previous@1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': + dependencies: + react: 19.0.0-rc-69d4b800-20241021 + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /@pkgjs/parseargs@0.11.0: - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - requiresBuild: true - optional: true + '@radix-ui/react-use-rect@1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': + dependencies: + '@radix-ui/rect': 1.1.0 + react: 19.0.0-rc-69d4b800-20241021 + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /@playwright/test@1.41.1: - resolution: {integrity: sha512-9g8EWTjiQ9yFBXc6HjCWe41msLpxEX0KhmfmPl9RPLJdfzL4F0lg2BdJ91O9azFdl11y1pmpwdjBiSxvqc+btw==} - engines: {node: '>=16'} - hasBin: true + '@radix-ui/react-use-size@1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': dependencies: - playwright: 1.41.1 - dev: true + '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-69d4b800-20241021 + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /@prisma/client@5.10.2(prisma@5.10.2): - resolution: {integrity: sha512-ef49hzB2yJZCvM5gFHMxSFL9KYrIP9udpT5rYo0CsHD4P9IKj473MbhU1gjKKftiwWBTIyrt9jukprzZXazyag==} - engines: {node: '>=16.13'} - requiresBuild: true - peerDependencies: - prisma: '*' - peerDependenciesMeta: - prisma: - optional: true + '@radix-ui/react-visually-hidden@1.1.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': dependencies: - prisma: 5.10.2 - dev: false + '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /@prisma/debug@5.10.2: - resolution: {integrity: sha512-bkBOmH9dpEBbMKFJj8V+Zp8IZHIBjy3fSyhLhxj4FmKGb/UBSt9doyfA6k1UeUREsMJft7xgPYBbHSOYBr8XCA==} + '@radix-ui/rect@1.1.0': {} - /@prisma/engines-version@5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9: - resolution: {integrity: sha512-uCy/++3Jx/O3ufM+qv2H1L4tOemTNqcP/gyEVOlZqTpBvYJUe0tWtW0y3o2Ueq04mll4aM5X3f6ugQftOSLdFQ==} + '@react-email/body@0.0.10(react@19.0.0-rc-69d4b800-20241021)': + dependencies: + react: 19.0.0-rc-69d4b800-20241021 - /@prisma/engines@5.10.2: - resolution: {integrity: sha512-HkSJvix6PW8YqEEt3zHfCYYJY69CXsNdhU+wna+4Y7EZ+AwzeupMnUThmvaDA7uqswiHkgm5/SZ6/4CStjaGmw==} - requiresBuild: true + '@react-email/button@0.0.17(react@19.0.0-rc-69d4b800-20241021)': dependencies: - '@prisma/debug': 5.10.2 - '@prisma/engines-version': 5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9 - '@prisma/fetch-engine': 5.10.2 - '@prisma/get-platform': 5.10.2 + react: 19.0.0-rc-69d4b800-20241021 - /@prisma/fetch-engine@5.10.2: - resolution: {integrity: sha512-dSmXcqSt6DpTmMaLQ9K8ZKzVAMH3qwGCmYEZr/uVnzVhxRJ1EbT/w2MMwIdBNq1zT69Rvh0h75WMIi0mrIw7Hg==} + '@react-email/code-block@0.0.9(react@19.0.0-rc-69d4b800-20241021)': dependencies: - '@prisma/debug': 5.10.2 - '@prisma/engines-version': 5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9 - '@prisma/get-platform': 5.10.2 + prismjs: 1.29.0 + react: 19.0.0-rc-69d4b800-20241021 - /@prisma/get-platform@5.10.2: - resolution: {integrity: sha512-nqXP6vHiY2PIsebBAuDeWiUYg8h8mfjBckHh6Jezuwej0QJNnjDiOq30uesmg+JXxGk99nqyG3B7wpcOODzXvg==} + '@react-email/code-inline@0.0.4(react@19.0.0-rc-69d4b800-20241021)': dependencies: - '@prisma/debug': 5.10.2 + react: 19.0.0-rc-69d4b800-20241021 - /@radix-ui/colors@3.0.0: - resolution: {integrity: sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==} - dev: false + '@react-email/column@0.0.12(react@19.0.0-rc-69d4b800-20241021)': + dependencies: + react: 19.0.0-rc-69d4b800-20241021 - /@radix-ui/number@1.0.1: - resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} + '@react-email/components@0.0.25(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)': dependencies: - '@babel/runtime': 7.23.7 - dev: false + '@react-email/body': 0.0.10(react@19.0.0-rc-69d4b800-20241021) + '@react-email/button': 0.0.17(react@19.0.0-rc-69d4b800-20241021) + '@react-email/code-block': 0.0.9(react@19.0.0-rc-69d4b800-20241021) + '@react-email/code-inline': 0.0.4(react@19.0.0-rc-69d4b800-20241021) + '@react-email/column': 0.0.12(react@19.0.0-rc-69d4b800-20241021) + '@react-email/container': 0.0.14(react@19.0.0-rc-69d4b800-20241021) + '@react-email/font': 0.0.8(react@19.0.0-rc-69d4b800-20241021) + '@react-email/head': 0.0.11(react@19.0.0-rc-69d4b800-20241021) + '@react-email/heading': 0.0.14(react@19.0.0-rc-69d4b800-20241021) + '@react-email/hr': 0.0.10(react@19.0.0-rc-69d4b800-20241021) + '@react-email/html': 0.0.10(react@19.0.0-rc-69d4b800-20241021) + '@react-email/img': 0.0.10(react@19.0.0-rc-69d4b800-20241021) + '@react-email/link': 0.0.10(react@19.0.0-rc-69d4b800-20241021) + '@react-email/markdown': 0.0.12(react@19.0.0-rc-69d4b800-20241021) + '@react-email/preview': 0.0.11(react@19.0.0-rc-69d4b800-20241021) + '@react-email/render': 1.0.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021) + '@react-email/row': 0.0.10(react@19.0.0-rc-69d4b800-20241021) + '@react-email/section': 0.0.14(react@19.0.0-rc-69d4b800-20241021) + '@react-email/tailwind': 0.1.0(react@19.0.0-rc-69d4b800-20241021) + '@react-email/text': 0.0.10(react@19.0.0-rc-69d4b800-20241021) + react: 19.0.0-rc-69d4b800-20241021 + transitivePeerDependencies: + - react-dom - /@radix-ui/primitive@1.0.1: - resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} + '@react-email/container@0.0.14(react@19.0.0-rc-69d4b800-20241021)': dependencies: - '@babel/runtime': 7.23.7 - dev: false + react: 19.0.0-rc-69d4b800-20241021 - /@radix-ui/react-arrow@1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@react-email/font@0.0.8(react@19.0.0-rc-69d4b800-20241021)': dependencies: - '@babel/runtime': 7.23.7 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.0.27 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false + react: 19.0.0-rc-69d4b800-20241021 - /@radix-ui/react-avatar@1.0.4(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-kVK2K7ZD3wwj3qhle0ElXhOjbezIgyl2hVvgwfIdexL3rN6zJmy5AqqIf+D31lxVppdzV8CjAfZ6PklkmInZLw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@react-email/head@0.0.11(react@19.0.0-rc-69d4b800-20241021)': dependencies: - '@babel/runtime': 7.23.7 - '@radix-ui/react-context': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@types/react': 18.0.27 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false + react: 19.0.0-rc-69d4b800-20241021 - /@radix-ui/react-collection@1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@react-email/heading@0.0.14(react@19.0.0-rc-69d4b800-20241021)': dependencies: - '@babel/runtime': 7.23.7 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.0.27)(react@18.2.0) - '@types/react': 18.0.27 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false + react: 19.0.0-rc-69d4b800-20241021 - /@radix-ui/react-compose-refs@1.0.1(@types/react@18.0.27)(react@18.2.0): - resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@react-email/hr@0.0.10(react@19.0.0-rc-69d4b800-20241021)': dependencies: - '@babel/runtime': 7.23.7 - '@types/react': 18.0.27 - react: 18.2.0 - dev: false + react: 19.0.0-rc-69d4b800-20241021 - /@radix-ui/react-context@1.0.1(@types/react@18.0.27)(react@18.2.0): - resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@react-email/html@0.0.10(react@19.0.0-rc-69d4b800-20241021)': dependencies: - '@babel/runtime': 7.23.7 - '@types/react': 18.0.27 - react: 18.2.0 - dev: false + react: 19.0.0-rc-69d4b800-20241021 - /@radix-ui/react-dialog@1.0.5(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@react-email/img@0.0.10(react@19.0.0-rc-69d4b800-20241021)': dependencies: - '@babel/runtime': 7.23.7 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.4(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@types/react': 18.0.27 - aria-hidden: 1.2.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.0.27)(react@18.2.0) - dev: false - - /@radix-ui/react-direction@1.0.1(@types/react@18.0.27)(react@18.2.0): - resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + react: 19.0.0-rc-69d4b800-20241021 + + '@react-email/link@0.0.10(react@19.0.0-rc-69d4b800-20241021)': dependencies: - '@babel/runtime': 7.23.7 - '@types/react': 18.0.27 - react: 18.2.0 - dev: false + react: 19.0.0-rc-69d4b800-20241021 - /@radix-ui/react-dismissable-layer@1.0.5(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@react-email/markdown@0.0.12(react@19.0.0-rc-69d4b800-20241021)': dependencies: - '@babel/runtime': 7.23.7 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.0.27)(react@18.2.0) - '@types/react': 18.0.27 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false + md-to-react-email: 5.0.2(react@19.0.0-rc-69d4b800-20241021) + react: 19.0.0-rc-69d4b800-20241021 - /@radix-ui/react-dropdown-menu@2.0.6(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@react-email/preview@0.0.11(react@19.0.0-rc-69d4b800-20241021)': dependencies: - '@babel/runtime': 7.23.7 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-menu': 2.0.6(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@types/react': 18.0.27 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /@radix-ui/react-focus-guards@1.0.1(@types/react@18.0.27)(react@18.2.0): - resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + react: 19.0.0-rc-69d4b800-20241021 + + '@react-email/render@0.0.17(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)': dependencies: - '@babel/runtime': 7.23.7 - '@types/react': 18.0.27 - react: 18.2.0 - dev: false + html-to-text: 9.0.5 + js-beautify: 1.15.1 + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + react-promise-suspense: 0.3.4 - /@radix-ui/react-focus-scope@1.0.4(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@react-email/render@1.0.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)': dependencies: - '@babel/runtime': 7.23.7 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@types/react': 18.0.27 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false + html-to-text: 9.0.5 + js-beautify: 1.15.1 + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + react-promise-suspense: 0.3.4 - /@radix-ui/react-id@1.0.1(@types/react@18.0.27)(react@18.2.0): - resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@react-email/row@0.0.10(react@19.0.0-rc-69d4b800-20241021)': dependencies: - '@babel/runtime': 7.23.7 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@types/react': 18.0.27 - react: 18.2.0 - dev: false + react: 19.0.0-rc-69d4b800-20241021 - /@radix-ui/react-label@2.0.2(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@react-email/section@0.0.14(react@19.0.0-rc-69d4b800-20241021)': dependencies: - '@babel/runtime': 7.23.7 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.0.27 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false + react: 19.0.0-rc-69d4b800-20241021 - /@radix-ui/react-menu@2.0.6(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@react-email/tailwind@0.1.0(react@19.0.0-rc-69d4b800-20241021)': dependencies: - '@babel/runtime': 7.23.7 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.4(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-popper': 1.1.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@types/react': 18.0.27 - aria-hidden: 1.2.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.0.27)(react@18.2.0) - dev: false - - /@radix-ui/react-popper@1.1.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + react: 19.0.0-rc-69d4b800-20241021 + + '@react-email/text@0.0.10(react@19.0.0-rc-69d4b800-20241021)': dependencies: - '@babel/runtime': 7.23.7 - '@floating-ui/react-dom': 2.0.2(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-arrow': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-use-rect': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/rect': 1.0.1 - '@types/react': 18.0.27 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /@radix-ui/react-portal@1.0.4(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + react: 19.0.0-rc-69d4b800-20241021 + + '@rtsao/scc@1.1.0': {} + + '@rushstack/eslint-patch@1.10.4': {} + + '@selderee/plugin-htmlparser2@0.11.0': dependencies: - '@babel/runtime': 7.23.7 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.0.27 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false + domhandler: 5.0.3 + selderee: 0.11.0 - /@radix-ui/react-presence@1.0.1(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@slack/types@2.14.0': {} + + '@slack/webhook@7.0.3': dependencies: - '@babel/runtime': 7.23.7 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@types/react': 18.0.27 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false + '@slack/types': 2.14.0 + '@types/node': 22.5.5 + axios: 1.7.7 + transitivePeerDependencies: + - debug - /@radix-ui/react-primitive@1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@smithy/abort-controller@3.1.5': dependencies: - '@babel/runtime': 7.23.7 - '@radix-ui/react-slot': 1.0.2(@types/react@18.0.27)(react@18.2.0) - '@types/react': 18.0.27 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false + '@smithy/types': 3.5.0 + tslib: 2.7.0 - /@radix-ui/react-roving-focus@1.0.4(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@smithy/chunked-blob-reader-native@3.0.0': dependencies: - '@babel/runtime': 7.23.7 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@types/react': 18.0.27 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /@radix-ui/react-select@2.0.0(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@smithy/util-base64': 3.0.0 + tslib: 2.7.0 + + '@smithy/chunked-blob-reader@3.0.0': dependencies: - '@babel/runtime': 7.23.7 - '@radix-ui/number': 1.0.1 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.4(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-popper': 1.1.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.0.27 - aria-hidden: 1.2.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.0.27)(react@18.2.0) - dev: false - - /@radix-ui/react-slot@1.0.2(@types/react@18.0.27)(react@18.2.0): - resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + tslib: 2.7.0 + + '@smithy/config-resolver@3.0.9': dependencies: - '@babel/runtime': 7.23.7 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@types/react': 18.0.27 - react: 18.2.0 - dev: false + '@smithy/node-config-provider': 3.1.8 + '@smithy/types': 3.5.0 + '@smithy/util-config-provider': 3.0.0 + '@smithy/util-middleware': 3.0.7 + tslib: 2.7.0 - /@radix-ui/react-tabs@1.0.4(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@smithy/core@2.4.7': dependencies: - '@babel/runtime': 7.23.7 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@types/react': 18.0.27 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /@radix-ui/react-tooltip@1.0.7(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.22 + '@smithy/middleware-serde': 3.0.7 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.3.6 + '@smithy/types': 3.5.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + + '@smithy/credential-provider-imds@3.2.4': dependencies: - '@babel/runtime': 7.23.7 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-popper': 1.1.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.0.27 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.0.27)(react@18.2.0): - resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@smithy/node-config-provider': 3.1.8 + '@smithy/property-provider': 3.1.7 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 + tslib: 2.7.0 + + '@smithy/eventstream-codec@3.1.6': dependencies: - '@babel/runtime': 7.23.7 - '@types/react': 18.0.27 - react: 18.2.0 - dev: false + '@aws-crypto/crc32': 5.2.0 + '@smithy/types': 3.5.0 + '@smithy/util-hex-encoding': 3.0.0 + tslib: 2.7.0 - /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.0.27)(react@18.2.0): - resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@smithy/eventstream-serde-browser@3.0.10': dependencies: - '@babel/runtime': 7.23.7 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@types/react': 18.0.27 - react: 18.2.0 - dev: false + '@smithy/eventstream-serde-universal': 3.0.9 + '@smithy/types': 3.5.0 + tslib: 2.7.0 - /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.0.27)(react@18.2.0): - resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@smithy/eventstream-serde-config-resolver@3.0.7': dependencies: - '@babel/runtime': 7.23.7 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@types/react': 18.0.27 - react: 18.2.0 - dev: false + '@smithy/types': 3.5.0 + tslib: 2.7.0 - /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.0.27)(react@18.2.0): - resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@smithy/eventstream-serde-node@3.0.9': dependencies: - '@babel/runtime': 7.23.7 - '@types/react': 18.0.27 - react: 18.2.0 - dev: false + '@smithy/eventstream-serde-universal': 3.0.9 + '@smithy/types': 3.5.0 + tslib: 2.7.0 - /@radix-ui/react-use-previous@1.0.1(@types/react@18.0.27)(react@18.2.0): - resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@smithy/eventstream-serde-universal@3.0.9': dependencies: - '@babel/runtime': 7.23.7 - '@types/react': 18.0.27 - react: 18.2.0 - dev: false + '@smithy/eventstream-codec': 3.1.6 + '@smithy/types': 3.5.0 + tslib: 2.7.0 - /@radix-ui/react-use-rect@1.0.1(@types/react@18.0.27)(react@18.2.0): - resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@smithy/fetch-http-handler@3.2.9': dependencies: - '@babel/runtime': 7.23.7 - '@radix-ui/rect': 1.0.1 - '@types/react': 18.0.27 - react: 18.2.0 - dev: false + '@smithy/protocol-http': 4.1.4 + '@smithy/querystring-builder': 3.0.7 + '@smithy/types': 3.5.0 + '@smithy/util-base64': 3.0.0 + tslib: 2.7.0 - /@radix-ui/react-use-size@1.0.1(@types/react@18.0.27)(react@18.2.0): - resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@smithy/hash-blob-browser@3.1.6': dependencies: - '@babel/runtime': 7.23.7 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.27)(react@18.2.0) - '@types/react': 18.0.27 - react: 18.2.0 - dev: false + '@smithy/chunked-blob-reader': 3.0.0 + '@smithy/chunked-blob-reader-native': 3.0.0 + '@smithy/types': 3.5.0 + tslib: 2.7.0 - /@radix-ui/react-visually-hidden@1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + '@smithy/hash-node@3.0.7': dependencies: - '@babel/runtime': 7.23.7 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.0.27 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false + '@smithy/types': 3.5.0 + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 - /@radix-ui/rect@1.0.1: - resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} + '@smithy/hash-stream-node@3.1.6': dependencies: - '@babel/runtime': 7.23.7 - dev: false + '@smithy/types': 3.5.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 - /@react-email/render@0.0.12: - resolution: {integrity: sha512-S8WRv/PqECEi6x0QJBj0asnAb5GFtJaHlnByxLETLkgJjc76cxMYDH4r9wdbuJ4sjkcbpwP3LPnVzwS+aIjT7g==} - engines: {node: '>=18.0.0'} + '@smithy/invalid-dependency@3.0.7': dependencies: - html-to-text: 9.0.5 - js-beautify: 1.14.11 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false + '@smithy/types': 3.5.0 + tslib: 2.7.0 - /@rollup/plugin-commonjs@24.0.0(rollup@2.78.0): - resolution: {integrity: sha512-0w0wyykzdyRRPHOb0cQt14mIBLujfAv6GgP6g8nvg/iBxEm112t3YPPq+Buqe2+imvElTka+bjNlJ/gB56TD8g==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.68.0||^3.0.0 - peerDependenciesMeta: - rollup: - optional: true + '@smithy/is-array-buffer@2.2.0': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@2.78.0) - commondir: 1.0.1 - estree-walker: 2.0.2 - glob: 8.1.0 - is-reference: 1.2.1 - magic-string: 0.27.0 - rollup: 2.78.0 - dev: false + tslib: 2.7.0 - /@rollup/pluginutils@5.1.0(rollup@2.78.0): - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true + '@smithy/is-array-buffer@3.0.0': dependencies: - '@types/estree': 1.0.5 - estree-walker: 2.0.2 - picomatch: 2.3.1 - rollup: 2.78.0 - dev: false + tslib: 2.7.0 - /@rushstack/eslint-patch@1.6.1: - resolution: {integrity: sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==} - dev: true + '@smithy/md5-js@3.0.7': + dependencies: + '@smithy/types': 3.5.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 - /@selderee/plugin-htmlparser2@0.11.0: - resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} + '@smithy/middleware-content-length@3.0.9': dependencies: - domhandler: 5.0.3 - selderee: 0.11.0 - dev: false + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + tslib: 2.7.0 - /@sentry-internal/feedback@7.102.1: - resolution: {integrity: sha512-vY4hpLLMNLjICtWiizc7KeGbWOTUMGrF7C+9dPCztZww3CLgzWy9A7DvPj5hodRiYzpdRnAMl8yQnMFbYXh7bA==} - engines: {node: '>=12'} + '@smithy/middleware-endpoint@3.1.4': dependencies: - '@sentry/core': 7.102.1 - '@sentry/types': 7.102.1 - '@sentry/utils': 7.102.1 - dev: false + '@smithy/middleware-serde': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 + '@smithy/util-middleware': 3.0.7 + tslib: 2.7.0 - /@sentry-internal/replay-canvas@7.102.1: - resolution: {integrity: sha512-GUX4RWI10uRjdjeyvCLtAAhWRVqnAnG6+yNxWfqUQ3qMA7B7XxG43KT2UhSnulmErNzODQ6hA68rGPwwYeRIww==} - engines: {node: '>=12'} + '@smithy/middleware-retry@3.0.22': dependencies: - '@sentry/core': 7.102.1 - '@sentry/replay': 7.102.1 - '@sentry/types': 7.102.1 - '@sentry/utils': 7.102.1 - dev: false + '@smithy/node-config-provider': 3.1.8 + '@smithy/protocol-http': 4.1.4 + '@smithy/service-error-classification': 3.0.7 + '@smithy/smithy-client': 3.3.6 + '@smithy/types': 3.5.0 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 + tslib: 2.7.0 + uuid: 9.0.1 - /@sentry-internal/tracing@7.102.1: - resolution: {integrity: sha512-RkFlFyAC0fQOvBbBqnq0CLmFW5m3JJz9pKbZd5vXPraWAlniKSb1bC/4DF9SlNx0FN1LWG+IU3ISdpzwwTeAGg==} - engines: {node: '>=8'} + '@smithy/middleware-serde@3.0.7': dependencies: - '@sentry/core': 7.102.1 - '@sentry/types': 7.102.1 - '@sentry/utils': 7.102.1 - dev: false + '@smithy/types': 3.5.0 + tslib: 2.7.0 - /@sentry/browser@7.102.1: - resolution: {integrity: sha512-7BOfPBiM7Kp6q/iy0JIbsBTxIASV+zWXByqqjuEMWGj3X2u4oRIfm3gv4erPU/l+CORQUVQZLSPGoIoM1gbB/A==} - engines: {node: '>=8'} + '@smithy/middleware-stack@3.0.7': dependencies: - '@sentry-internal/feedback': 7.102.1 - '@sentry-internal/replay-canvas': 7.102.1 - '@sentry-internal/tracing': 7.102.1 - '@sentry/core': 7.102.1 - '@sentry/replay': 7.102.1 - '@sentry/types': 7.102.1 - '@sentry/utils': 7.102.1 - dev: false - - /@sentry/cli@1.77.3: - resolution: {integrity: sha512-c3eDqcDRmy4TFz2bFU5Y6QatlpoBPPa8cxBooaS4aMQpnIdLYPF1xhyyiW0LQlDUNc3rRjNF7oN5qKoaRoMTQQ==} - engines: {node: '>= 8'} - hasBin: true - requiresBuild: true + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@smithy/node-config-provider@3.1.8': dependencies: - https-proxy-agent: 5.0.1 - mkdirp: 0.5.6 - node-fetch: 2.7.0 - progress: 2.0.3 - proxy-from-env: 1.1.0 - which: 2.0.2 - transitivePeerDependencies: - - encoding - - supports-color - dev: false + '@smithy/property-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 + tslib: 2.7.0 - /@sentry/core@7.102.1: - resolution: {integrity: sha512-QjY+LSP3du3J/C8x/FfEbRxgZgsWd0jfTJ4P7s9f219I1csK4OeBMC3UA1HwEa0pY/9OF6H/egW2CjOcMM5Pdg==} - engines: {node: '>=8'} + '@smithy/node-http-handler@3.2.4': dependencies: - '@sentry/types': 7.102.1 - '@sentry/utils': 7.102.1 - dev: false + '@smithy/abort-controller': 3.1.5 + '@smithy/protocol-http': 4.1.4 + '@smithy/querystring-builder': 3.0.7 + '@smithy/types': 3.5.0 + tslib: 2.7.0 - /@sentry/integrations@7.102.1: - resolution: {integrity: sha512-Its3Ru6xCAqpaLE3cTxW/b91js2SIFoXa8LWtQDJ7tmTdwPAbT8Pij1F4bOhhaqLYbjLtCXGl/NR2cffsiRLww==} - engines: {node: '>=8'} + '@smithy/property-provider@3.1.7': dependencies: - '@sentry/core': 7.102.1 - '@sentry/types': 7.102.1 - '@sentry/utils': 7.102.1 - localforage: 1.10.0 - dev: false + '@smithy/types': 3.5.0 + tslib: 2.7.0 - /@sentry/nextjs@7.102.1(next@14.1.0)(react@18.2.0)(webpack@5.89.0): - resolution: {integrity: sha512-gOI/GD7DWhc3WucyYnepl8Nu5jmpa1YfR6jWDzTkPE2CV9zKK9zulTdqk+Aig9ch62SAmJOGkgejm5k9PE2XzQ==} - engines: {node: '>=8'} - peerDependencies: - next: ^10.0.8 || ^11.0 || ^12.0 || ^13.0 || ^14.0 - react: 16.x || 17.x || 18.x - webpack: '>= 4.0.0' - peerDependenciesMeta: - webpack: - optional: true - dependencies: - '@rollup/plugin-commonjs': 24.0.0(rollup@2.78.0) - '@sentry/core': 7.102.1 - '@sentry/integrations': 7.102.1 - '@sentry/node': 7.102.1 - '@sentry/react': 7.102.1(react@18.2.0) - '@sentry/types': 7.102.1 - '@sentry/utils': 7.102.1 - '@sentry/vercel-edge': 7.102.1 - '@sentry/webpack-plugin': 1.21.0 - chalk: 3.0.0 - next: 14.1.0(@babel/core@7.22.17)(react-dom@18.2.0)(react@18.2.0) - react: 18.2.0 - resolve: 1.22.8 - rollup: 2.78.0 - stacktrace-parser: 0.1.10 - webpack: 5.89.0 - transitivePeerDependencies: - - encoding - - supports-color - dev: false + '@smithy/protocol-http@4.1.4': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.7.0 - /@sentry/node@7.102.1: - resolution: {integrity: sha512-mb3vmM3SGuCruckPiv/Vafeh89UQavTfpPFoU6Jwe6dSpQ39BO8fO8k8Zev+/nP6r/FKLtX17mJobErHECXsYw==} - engines: {node: '>=8'} + '@smithy/querystring-builder@3.0.7': dependencies: - '@sentry-internal/tracing': 7.102.1 - '@sentry/core': 7.102.1 - '@sentry/types': 7.102.1 - '@sentry/utils': 7.102.1 - dev: false + '@smithy/types': 3.5.0 + '@smithy/util-uri-escape': 3.0.0 + tslib: 2.7.0 - /@sentry/react@7.102.1(react@18.2.0): - resolution: {integrity: sha512-X4j2DgbktlEifnd21YJKCayAmff5hnaS+9MNz9OonEwD0ARi0ks7bo0wtWHMjPK20992MO+JwczVg/1BXJYDdQ==} - engines: {node: '>=8'} - peerDependencies: - react: 15.x || 16.x || 17.x || 18.x + '@smithy/querystring-parser@3.0.7': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@smithy/service-error-classification@3.0.7': dependencies: - '@sentry/browser': 7.102.1 - '@sentry/core': 7.102.1 - '@sentry/types': 7.102.1 - '@sentry/utils': 7.102.1 - hoist-non-react-statics: 3.3.2 - react: 18.2.0 - dev: false + '@smithy/types': 3.5.0 - /@sentry/replay@7.102.1: - resolution: {integrity: sha512-HR/j9dGIvbrId8fh8mQlODx7JrhRmawEd9e9P3laPtogWCg/5TI+XPb2VGSaXOX9VWtb/6Z2UjHsaGjgg6YcuA==} - engines: {node: '>=12'} + '@smithy/shared-ini-file-loader@3.1.8': dependencies: - '@sentry-internal/tracing': 7.102.1 - '@sentry/core': 7.102.1 - '@sentry/types': 7.102.1 - '@sentry/utils': 7.102.1 - dev: false + '@smithy/types': 3.5.0 + tslib: 2.7.0 - /@sentry/types@7.102.1: - resolution: {integrity: sha512-htKorf3t/D0XYtM7foTcmG+rM47rDP6XdbvCcX5gBCuCYlzpM1vqCt2rl3FLktZC6TaIpFRJw1TLfx6m+x5jdA==} - engines: {node: '>=8'} - dev: false + '@smithy/signature-v4@4.2.0': + dependencies: + '@smithy/is-array-buffer': 3.0.0 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + '@smithy/util-hex-encoding': 3.0.0 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-uri-escape': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 - /@sentry/utils@7.102.1: - resolution: {integrity: sha512-+8WcFjHVV/HROXSAwMuUzveElBFC43EiTG7SNEBNgOUeQzQVTmbUZXyTVgLrUmtoWqvnIxCacoLxtZo1o67kdg==} - engines: {node: '>=8'} + '@smithy/smithy-client@3.3.6': dependencies: - '@sentry/types': 7.102.1 - dev: false + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-stack': 3.0.7 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + '@smithy/util-stream': 3.1.9 + tslib: 2.7.0 - /@sentry/vercel-edge@7.102.1: - resolution: {integrity: sha512-iB6KCSxrvO172VjfQHGiYpyXPKNbx6Cz01GA1YDByRiUSgSpAq0qAFRY4lvd736w5KX4s9hen+XmZ7Gmqj8Pag==} - engines: {node: '>=8'} + '@smithy/types@3.5.0': dependencies: - '@sentry-internal/tracing': 7.102.1 - '@sentry/core': 7.102.1 - '@sentry/types': 7.102.1 - '@sentry/utils': 7.102.1 - dev: false + tslib: 2.7.0 - /@sentry/webpack-plugin@1.21.0: - resolution: {integrity: sha512-x0PYIMWcsTauqxgl7vWUY6sANl+XGKtx7DCVnnY7aOIIlIna0jChTAPANTfA2QrK+VK+4I/4JxatCEZBnXh3Og==} - engines: {node: '>= 8'} + '@smithy/url-parser@3.0.7': dependencies: - '@sentry/cli': 1.77.3 - webpack-sources: 3.2.3 - transitivePeerDependencies: - - encoding - - supports-color - dev: false + '@smithy/querystring-parser': 3.0.7 + '@smithy/types': 3.5.0 + tslib: 2.7.0 - /@slack/types@2.10.0: - resolution: {integrity: sha512-JXY9l49rf7dDgvfMZi0maFyugzGkvq0s5u+kDlD68WaRUhjZNLBDKZcsrycMsVVDFfyOK0R1UKkYGmy9Ph069Q==} - engines: {node: '>= 12.13.0', npm: '>= 6.12.0'} - dev: false + '@smithy/util-base64@3.0.0': + dependencies: + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 - /@slack/webhook@7.0.1: - resolution: {integrity: sha512-0Uj/GQ1H8nmeAVEx+7zcWb6/q/zsSOrlIaGi6zFnwgMSxjmV6xGsVwv8w6DaAdkUbtqa43v1cirWjySeZaCOIA==} - engines: {node: '>= 18', npm: '>= 8.6.0'} + '@smithy/util-body-length-browser@3.0.0': dependencies: - '@slack/types': 2.10.0 - '@types/node': 20.5.6 - axios: 1.6.2 - transitivePeerDependencies: - - debug - dev: false + tslib: 2.7.0 - /@stripe/stripe-js@2.4.0: - resolution: {integrity: sha512-WFkQx1mbs2b5+7looI9IV1BLa3bIApuN3ehp9FP58xGg7KL9hCHDECgW3BwO9l9L+xBPVAD7Yjn1EhGe6EDTeA==} - dev: false + '@smithy/util-body-length-node@3.0.0': + dependencies: + tslib: 2.7.0 - /@swc-jotai/react-refresh@0.1.0: - resolution: {integrity: sha512-CWV4W06GdfQo3cW3CoUM2fp7avH4Z/suR7SvECNJnQbr6Sa9U3p7o10nXjNv2zT6z09bbNUPM55HBw5Nwd24Iw==} - dev: true + '@smithy/util-buffer-from@2.2.0': + dependencies: + '@smithy/is-array-buffer': 2.2.0 + tslib: 2.7.0 - /@swc/helpers@0.5.2: - resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} + '@smithy/util-buffer-from@3.0.0': dependencies: - tslib: 2.6.2 - dev: false + '@smithy/is-array-buffer': 3.0.0 + tslib: 2.7.0 - /@tanstack/query-core@5.20.1: - resolution: {integrity: sha512-OONHHYG5vzjob4An+EfzbW7TRyb+sCA0AEgHzUIMlV9NYlF7wIwbla3PUfB3ocnaK1gZyROf0Lux/CBSu0exBQ==} - dev: false + '@smithy/util-config-provider@3.0.0': + dependencies: + tslib: 2.7.0 - /@tanstack/react-query@5.20.1(react@18.2.0): - resolution: {integrity: sha512-KRkOtJ47tv9B3EXfjHkbPkiFzOzYCOid8BrYBozk0rm9JpDB2xSf71q8w1PRudlQW6QUQIEDI9E6NIMh6AlLUw==} - peerDependencies: - react: ^18.0.0 + '@smithy/util-defaults-mode-browser@3.0.22': dependencies: - '@tanstack/query-core': 5.20.1 - react: 18.2.0 - dev: false + '@smithy/property-provider': 3.1.7 + '@smithy/smithy-client': 3.3.6 + '@smithy/types': 3.5.0 + bowser: 2.11.0 + tslib: 2.7.0 - /@tootallnate/once@2.0.0: - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - dev: false + '@smithy/util-defaults-mode-node@3.0.22': + dependencies: + '@smithy/config-resolver': 3.0.9 + '@smithy/credential-provider-imds': 3.2.4 + '@smithy/node-config-provider': 3.1.8 + '@smithy/property-provider': 3.1.7 + '@smithy/smithy-client': 3.3.6 + '@smithy/types': 3.5.0 + tslib: 2.7.0 - /@tsconfig/node10@1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + '@smithy/util-endpoints@2.1.3': + dependencies: + '@smithy/node-config-provider': 3.1.8 + '@smithy/types': 3.5.0 + tslib: 2.7.0 - /@tsconfig/node12@1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + '@smithy/util-hex-encoding@3.0.0': + dependencies: + tslib: 2.7.0 - /@tsconfig/node14@1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + '@smithy/util-middleware@3.0.7': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.7.0 - /@tsconfig/node16@1.0.4: - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@smithy/util-retry@3.0.7': + dependencies: + '@smithy/service-error-classification': 3.0.7 + '@smithy/types': 3.5.0 + tslib: 2.7.0 - /@types/caseless@0.12.5: - resolution: {integrity: sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==} - dev: false + '@smithy/util-stream@3.1.9': + dependencies: + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/node-http-handler': 3.2.4 + '@smithy/types': 3.5.0 + '@smithy/util-base64': 3.0.0 + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-hex-encoding': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 - /@types/debug@4.1.8: - resolution: {integrity: sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==} + '@smithy/util-uri-escape@3.0.0': dependencies: - '@types/ms': 0.7.31 - dev: false + tslib: 2.7.0 - /@types/eslint-scope@3.7.7: - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + '@smithy/util-utf8@2.3.0': dependencies: - '@types/eslint': 8.56.0 - '@types/estree': 1.0.5 - dev: false + '@smithy/util-buffer-from': 2.2.0 + tslib: 2.7.0 - /@types/eslint@8.56.0: - resolution: {integrity: sha512-FlsN0p4FhuYRjIxpbdXovvHQhtlG05O1GG/RNWvdAxTboR438IOTwmrY/vLA+Xfgg06BTkP045M3vpFwTMv1dg==} + '@smithy/util-utf8@3.0.0': dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 - dev: false + '@smithy/util-buffer-from': 3.0.0 + tslib: 2.7.0 - /@types/estree-jsx@1.0.3: - resolution: {integrity: sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==} + '@smithy/util-waiter@3.1.6': dependencies: - '@types/estree': 1.0.5 - dev: false + '@smithy/abort-controller': 3.1.5 + '@smithy/types': 3.5.0 + tslib: 2.7.0 - /@types/estree@1.0.5: - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - dev: false + '@socket.io/component-emitter@3.1.2': {} - /@types/formidable@3.4.5: - resolution: {integrity: sha512-s7YPsNVfnsng5L8sKnG/Gbb2tiwwJTY1conOkJzTMRvJAlLFW1nEua+ADsJQu8N1c0oTHx9+d5nqg10WuT9gHQ==} - dependencies: - '@types/node': 20.10.6 - dev: true + '@stripe/stripe-js@4.9.0': {} - /@types/hast@2.3.5: - resolution: {integrity: sha512-SvQi0L/lNpThgPoleH53cdjB3y9zpLlVjRbqB3rH8hx1jiRSBGAhyjV3H+URFjNVRqt2EdYNrbZE5IsGlNfpRg==} + '@swc-jotai/react-refresh@0.2.0': {} + + '@swc/counter@0.1.3': {} + + '@swc/helpers@0.5.13': dependencies: - '@types/unist': 2.0.8 - dev: false + tslib: 2.7.0 - /@types/hast@3.0.0: - resolution: {integrity: sha512-SoytUJRuf68HXYqcXicQIhCrLQjqeYU2anikr4G3p3Iz+OZO5QDQpDj++gv+RenHsnUBwNZ2dumBArF8VLSk2Q==} + '@swc/helpers@0.5.5': dependencies: - '@types/unist': 3.0.0 - dev: false + '@swc/counter': 0.1.3 + tslib: 2.7.0 - /@types/json-schema@7.0.12: - resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} - dev: false + '@tsconfig/node10@1.0.11': {} - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: false + '@tsconfig/node12@1.0.11': {} - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true + '@tsconfig/node14@1.0.3': {} - /@types/mdast@4.0.3: - resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==} - dependencies: - '@types/unist': 3.0.0 - dev: false + '@tsconfig/node16@1.0.4': {} - /@types/minimist@1.2.2: - resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} - dev: true + '@types/cookie@0.4.1': {} - /@types/ms@0.7.31: - resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} - dev: false + '@types/cookie@0.6.0': {} - /@types/node@12.20.55: - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - dev: true + '@types/cors@2.8.17': + dependencies: + '@types/node': 22.5.5 - /@types/node@20.10.6: - resolution: {integrity: sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==} + '@types/debug@4.1.12': dependencies: - undici-types: 5.26.5 + '@types/ms': 0.7.34 - /@types/node@20.5.6: - resolution: {integrity: sha512-Gi5wRGPbbyOTX+4Y2iULQ27oUPrefaB0PxGQJnfyWN3kvEDGM3mIB5M/gQLmitZf7A9FmLeaqxD3L1CXpm3VKQ==} + '@types/estree-jsx@1.0.5': + dependencies: + '@types/estree': 1.0.6 - /@types/normalize-package-data@2.4.1: - resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} - dev: true + '@types/estree@1.0.6': {} - /@types/papaparse@5.3.14: - resolution: {integrity: sha512-LxJ4iEFcpqc6METwp9f6BV6VVc43m6MfH0VqFosHvrUgfXiFe6ww7R3itkOQ+TCK6Y+Iv/+RnnvtRZnkc5Kc9g==} + '@types/formidable@3.4.5': dependencies: - '@types/node': 20.10.6 - dev: false + '@types/node': 22.5.5 - /@types/prismjs@1.26.0: - resolution: {integrity: sha512-ZTaqn/qSqUuAq1YwvOFQfVW1AR/oQJlLSZVustdjwI+GZ8kr0MSHBj0tsXPW1EqHubx50gtBEjbPGsdZwQwCjQ==} - dev: false + '@types/hast@2.3.10': + dependencies: + '@types/unist': 2.0.11 + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/json-schema@7.0.15': {} - /@types/prop-types@15.7.5: - resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + '@types/json5@0.0.29': {} - /@types/react@18.0.27: - resolution: {integrity: sha512-3vtRKHgVxu3Jp9t718R9BuzoD4NcQ8YJ5XRzsSKxNDiDonD2MXIT1TmSkenxuCycZJoQT5d2vE8LwWJxBC1gmA==} + '@types/mdast@4.0.4': dependencies: - '@types/prop-types': 15.7.5 - '@types/scheduler': 0.16.3 - csstype: 3.1.2 + '@types/unist': 3.0.3 - /@types/request@2.48.12: - resolution: {integrity: sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==} + '@types/ms@0.7.34': {} + + '@types/node@22.5.5': dependencies: - '@types/caseless': 0.12.5 - '@types/node': 20.10.6 - '@types/tough-cookie': 4.0.5 - form-data: 2.5.1 - dev: false + undici-types: 6.19.8 - /@types/scheduler@0.16.3: - resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} + '@types/papaparse@5.3.14': + dependencies: + '@types/node': 22.5.5 - /@types/semver@7.5.1: - resolution: {integrity: sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==} - dev: true + '@types/prismjs@1.26.4': {} - /@types/tough-cookie@4.0.5: - resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - dev: false + '@types/unist@2.0.11': {} - /@types/unist@2.0.8: - resolution: {integrity: sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==} - dev: false + '@types/unist@3.0.3': {} - /@types/unist@3.0.0: - resolution: {integrity: sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==} - dev: false + '@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)': + dependencies: + '@eslint-community/regexpp': 4.11.1 + '@typescript-eslint/parser': 8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/scope-manager': 8.6.0 + '@typescript-eslint/type-utils': 8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/utils': 8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 8.6.0 + eslint: 9.9.1(jiti@1.21.6) + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color - /@typescript-eslint/parser@6.17.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-C4bBaX2orvhK+LlwrY8oWGmSl4WolCfYm513gEccdWZj0CwGadbIADb0FtVEcI+WzUyjyoBj2JRP8g25E6IB8A==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser@8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)': dependencies: - '@typescript-eslint/scope-manager': 6.17.0 - '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.17.0 - debug: 4.3.4 - eslint: 8.56.0 - typescript: 5.3.3 + '@typescript-eslint/scope-manager': 8.6.0 + '@typescript-eslint/types': 8.6.0 + '@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 8.6.0 + debug: 4.3.7 + eslint: 9.9.1(jiti@1.21.6) + optionalDependencies: + typescript: 5.6.2 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/scope-manager@6.17.0: - resolution: {integrity: sha512-RX7a8lwgOi7am0k17NUO0+ZmMOX4PpjLtLRgLmT1d3lBYdWH4ssBUbwdmc5pdRX8rXon8v9x8vaoOSpkHfcXGA==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/scope-manager@8.6.0': dependencies: - '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/visitor-keys': 6.17.0 - dev: true + '@typescript-eslint/types': 8.6.0 + '@typescript-eslint/visitor-keys': 8.6.0 - /@typescript-eslint/types@6.17.0: - resolution: {integrity: sha512-qRKs9tvc3a4RBcL/9PXtKSehI/q8wuU9xYJxe97WFxnzH8NWWtcW3ffNS+EWg8uPvIerhjsEZ+rHtDqOCiH57A==} - engines: {node: ^16.0.0 || >=18.0.0} - dev: true + '@typescript-eslint/type-utils@8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)': + dependencies: + '@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2) + '@typescript-eslint/utils': 8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + debug: 4.3.7 + ts-api-utils: 1.3.0(typescript@5.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - eslint + - supports-color - /@typescript-eslint/typescript-estree@6.17.0(typescript@5.3.3): - resolution: {integrity: sha512-gVQe+SLdNPfjlJn5VNGhlOhrXz4cajwFd5kAgWtZ9dCZf4XJf8xmgCTLIqec7aha3JwgLI2CK6GY1043FRxZwg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/types@8.6.0': {} + + '@typescript-eslint/typescript-estree@8.6.0(typescript@5.6.2)': dependencies: - '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/visitor-keys': 6.17.0 - debug: 4.3.4 - globby: 11.1.0 + '@typescript-eslint/types': 8.6.0 + '@typescript-eslint/visitor-keys': 8.6.0 + debug: 4.3.7 + fast-glob: 3.3.2 is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1(jiti@1.21.6)) + '@typescript-eslint/scope-manager': 8.6.0 + '@typescript-eslint/types': 8.6.0 + '@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2) + eslint: 9.9.1(jiti@1.21.6) transitivePeerDependencies: - supports-color - dev: true + - typescript - /@typescript-eslint/visitor-keys@6.17.0: - resolution: {integrity: sha512-H6VwB/k3IuIeQOyYczyyKN8wH6ed8EwliaYHLxOIhyF0dYEIsN8+Bk3GE19qafeMKyZJJHP8+O1HiFhFLUNKSg==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/visitor-keys@8.6.0': dependencies: - '@typescript-eslint/types': 6.17.0 + '@typescript-eslint/types': 8.6.0 eslint-visitor-keys: 3.4.3 - dev: true - - /@uiw/color-convert@2.0.8(@babel/runtime@7.23.7): - resolution: {integrity: sha512-yh0Q91FwTNCl5rMpNSQSlpazMz65V6V0LMIyssHk0ris4af9xQi+t01snLP+Dbjbk4HaSy7b8AptTP3NudggdQ==} - peerDependencies: - '@babel/runtime': '>=7.19.0' - dependencies: - '@babel/runtime': 7.23.7 - dev: false - - /@uiw/copy-to-clipboard@1.0.15: - resolution: {integrity: sha512-1bbGZ3T+SGmA07BoVPK4UCUDcowDN/moctviJGQexfOc9qL8TMLDQPr7mTPvDKhgJkgnlKkAQNFU8PiarIi9sQ==} - dev: false - - /@uiw/react-color-alpha@2.0.8(@babel/runtime@7.23.7)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-QppWrb7QBTIi0xZ6Q818tSi0LpZfkB323Q4F36a/vH4chzqOJAj6aCFM18d1CqjcLT4R1gnDhBSlW2dVD/4YoQ==} - peerDependencies: - '@babel/runtime': '>=7.19.0' - react: '>=16.9.0' - react-dom: '>=16.9.0' - dependencies: - '@babel/runtime': 7.23.7 - '@uiw/color-convert': 2.0.8(@babel/runtime@7.23.7) - '@uiw/react-drag-event-interactive': 2.0.8(@babel/runtime@7.23.7)(react-dom@18.2.0)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /@uiw/react-color-editable-input-rgba@2.0.8(@babel/runtime@7.23.7)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-3bPmbyc1u6T++ap0pKl9w+x4+llDtLAuXY41NgNEUKhd63rMZjnVbVnFnzvIUDL92JRB5m+a+3Rr3n1TheeFew==} - peerDependencies: - '@babel/runtime': '>=7.19.0' - react: '>=16.9.0' - react-dom: '>=16.9.0' - dependencies: - '@babel/runtime': 7.23.7 - '@uiw/color-convert': 2.0.8(@babel/runtime@7.23.7) - '@uiw/react-color-editable-input': 2.0.8(@babel/runtime@7.23.7)(react-dom@18.2.0)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /@uiw/react-color-editable-input@2.0.8(@babel/runtime@7.23.7)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-WpehDwnIRTIOUYAnchSVjZu+TwJjA1vCiK+tMkgta/Nu2qI3bLLPTwKmIF1cQgcrEEKvfgaqOD3yP7BvjjKFJA==} - peerDependencies: - '@babel/runtime': '>=7.19.0' - react: '>=16.9.0' - react-dom: '>=16.9.0' - dependencies: - '@babel/runtime': 7.23.7 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /@uiw/react-color-hue@2.0.8(@babel/runtime@7.23.7)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-h3EKzc87/leSq94dBchAqN+0liPQZismqjlGOM2LsZadGqgn9pO4+3+SlO4kD5IdQIybCRXmK3zVUVGDdxOIYg==} - peerDependencies: - '@babel/runtime': '>=7.19.0' - react: '>=16.9.0' - react-dom: '>=16.9.0' - dependencies: - '@babel/runtime': 7.23.7 - '@uiw/color-convert': 2.0.8(@babel/runtime@7.23.7) - '@uiw/react-color-alpha': 2.0.8(@babel/runtime@7.23.7)(react-dom@18.2.0)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /@uiw/react-color-saturation@2.0.8(@babel/runtime@7.23.7)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-cBZ5Al4YrHOYTcWiRQzjYiT5Llgv7pnFEZPy07dQ5NSL+FlzQmDfjVmQynXUqYG3IqQrx0Md4jJLLhhLP9Q5MQ==} - peerDependencies: - '@babel/runtime': '>=7.19.0' - react: '>=16.9.0' - react-dom: '>=16.9.0' - dependencies: - '@babel/runtime': 7.23.7 - '@uiw/color-convert': 2.0.8(@babel/runtime@7.23.7) - '@uiw/react-drag-event-interactive': 2.0.8(@babel/runtime@7.23.7)(react-dom@18.2.0)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /@uiw/react-color-sketch@2.0.8(@babel/runtime@7.23.7)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-4b4mDMJHTsxuab75bmcH5OvDOvcam8irkYapIbcVLJzrBurWiuxflMdmsht37hKegPOsRp6m0NONfEGcUtg1fQ==} - peerDependencies: - '@babel/runtime': '>=7.19.0' - react: '>=16.9.0' - react-dom: '>=16.9.0' - dependencies: - '@babel/runtime': 7.23.7 - '@uiw/color-convert': 2.0.8(@babel/runtime@7.23.7) - '@uiw/react-color-alpha': 2.0.8(@babel/runtime@7.23.7)(react-dom@18.2.0)(react@18.2.0) - '@uiw/react-color-editable-input': 2.0.8(@babel/runtime@7.23.7)(react-dom@18.2.0)(react@18.2.0) - '@uiw/react-color-editable-input-rgba': 2.0.8(@babel/runtime@7.23.7)(react-dom@18.2.0)(react@18.2.0) - '@uiw/react-color-hue': 2.0.8(@babel/runtime@7.23.7)(react-dom@18.2.0)(react@18.2.0) - '@uiw/react-color-saturation': 2.0.8(@babel/runtime@7.23.7)(react-dom@18.2.0)(react@18.2.0) - '@uiw/react-color-swatch': 2.0.8(@babel/runtime@7.23.7)(react-dom@18.2.0)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /@uiw/react-color-swatch@2.0.8(@babel/runtime@7.23.7)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-ZURW9tsTNv8ea5TJqYvN2gqoljrhtjPpzs4UC9C7vfI6JvDdjAzIyMwRwRVCftekOtvLvdGZzXYXbGxPF4BvTQ==} - peerDependencies: - '@babel/runtime': '>=7.19.0' - react: '>=16.9.0' - react-dom: '>=16.9.0' - dependencies: - '@babel/runtime': 7.23.7 - '@uiw/color-convert': 2.0.8(@babel/runtime@7.23.7) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /@uiw/react-drag-event-interactive@2.0.8(@babel/runtime@7.23.7)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Z8awDfUV7970Q6GfJmx6x7fx5KeHn6RPinQVRYRAnKS7QP6XgQOIvVn8bYKe5vd4vQeBbzIVYYySjYRWjA5heA==} - peerDependencies: - '@babel/runtime': '>=7.19.0' - react: '>=16.9.0' - react-dom: '>=16.9.0' - dependencies: - '@babel/runtime': 7.23.7 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /@uiw/react-markdown-preview@5.0.6(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-zd+T02xFhy6K75XPdkF3RRAWKzVzJctZ6CCpFDcn/CgdQlEj8Z+Z9k11nkPspzbznB43UYdoe4qQvnjgG6TfZw==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' + + '@uiw/copy-to-clipboard@1.0.17': {} + + '@uiw/react-markdown-preview@5.1.3(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': dependencies: - '@babel/runtime': 7.22.11 - '@uiw/copy-to-clipboard': 1.0.15 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-markdown: 9.0.1(@types/react@18.0.27)(react@18.2.0) + '@babel/runtime': 7.25.6 + '@uiw/copy-to-clipboard': 1.0.17 + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + react-markdown: 9.0.1(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) rehype-attr: 3.0.3 rehype-autolink-headings: 7.1.0 rehype-ignore: 2.0.2 - rehype-prism-plus: 1.6.3 + rehype-prism-plus: 2.0.0 rehype-raw: 7.0.0 rehype-rewrite: 4.0.2 rehype-slug: 6.0.0 remark-gfm: 4.0.0 + remark-github-blockquote-alert: 1.2.1 unist-util-visit: 5.0.0 transitivePeerDependencies: - '@types/react' - supports-color - dev: false - /@uiw/react-md-editor@4.0.3(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-TvChXxUBUS21Rk0cVC0aeJoWcFZ/G0xN/Hc4Lv9FGFK8wPOHESd7Bcq4jNRHJ6lEzE/+d4Wh00lEVNKj+rQyBw==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' + '@uiw/react-md-editor@4.0.4(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1)': dependencies: - '@babel/runtime': 7.23.7 - '@uiw/react-markdown-preview': 5.0.6(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + '@babel/runtime': 7.25.6 + '@uiw/react-markdown-preview': 5.1.3(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) rehype: 13.0.1 rehype-prism-plus: 2.0.0 transitivePeerDependencies: - '@types/react' - supports-color - dev: false - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@ungap/structured-clone@1.2.0': {} - /@webassemblyjs/ast@1.11.6: - resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} + '@webassemblyjs/ast@1.12.1': dependencies: '@webassemblyjs/helper-numbers': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - dev: false - /@webassemblyjs/floating-point-hex-parser@1.11.6: - resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} - dev: false + '@webassemblyjs/floating-point-hex-parser@1.11.6': {} - /@webassemblyjs/helper-api-error@1.11.6: - resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} - dev: false + '@webassemblyjs/helper-api-error@1.11.6': {} - /@webassemblyjs/helper-buffer@1.11.6: - resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} - dev: false + '@webassemblyjs/helper-buffer@1.12.1': {} - /@webassemblyjs/helper-numbers@1.11.6: - resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + '@webassemblyjs/helper-numbers@1.11.6': dependencies: '@webassemblyjs/floating-point-hex-parser': 1.11.6 '@webassemblyjs/helper-api-error': 1.11.6 '@xtuc/long': 4.2.2 - dev: false - /@webassemblyjs/helper-wasm-bytecode@1.11.6: - resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} - dev: false + '@webassemblyjs/helper-wasm-bytecode@1.11.6': {} - /@webassemblyjs/helper-wasm-section@1.11.6: - resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} + '@webassemblyjs/helper-wasm-section@1.12.1': dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - dev: false + '@webassemblyjs/wasm-gen': 1.12.1 - /@webassemblyjs/ieee754@1.11.6: - resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + '@webassemblyjs/ieee754@1.11.6': dependencies: '@xtuc/ieee754': 1.2.0 - dev: false - /@webassemblyjs/leb128@1.11.6: - resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + '@webassemblyjs/leb128@1.11.6': dependencies: '@xtuc/long': 4.2.2 - dev: false - /@webassemblyjs/utf8@1.11.6: - resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} - dev: false + '@webassemblyjs/utf8@1.11.6': {} - /@webassemblyjs/wasm-edit@1.11.6: - resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} + '@webassemblyjs/wasm-edit@1.12.1': dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/helper-wasm-section': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - '@webassemblyjs/wasm-opt': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - '@webassemblyjs/wast-printer': 1.11.6 - dev: false + '@webassemblyjs/helper-wasm-section': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-opt': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + '@webassemblyjs/wast-printer': 1.12.1 - /@webassemblyjs/wasm-gen@1.11.6: - resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} + '@webassemblyjs/wasm-gen@1.12.1': dependencies: - '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 '@webassemblyjs/ieee754': 1.11.6 '@webassemblyjs/leb128': 1.11.6 '@webassemblyjs/utf8': 1.11.6 - dev: false - /@webassemblyjs/wasm-opt@1.11.6: - resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} + '@webassemblyjs/wasm-opt@1.12.1': dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - dev: false + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 - /@webassemblyjs/wasm-parser@1.11.6: - resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} + '@webassemblyjs/wasm-parser@1.12.1': dependencies: - '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/helper-api-error': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 '@webassemblyjs/ieee754': 1.11.6 '@webassemblyjs/leb128': 1.11.6 '@webassemblyjs/utf8': 1.11.6 - dev: false - /@webassemblyjs/wast-printer@1.11.6: - resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} + '@webassemblyjs/wast-printer@1.12.1': dependencies: - '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/ast': 1.12.1 '@xtuc/long': 4.2.2 - dev: false - /@xtuc/ieee754@1.2.0: - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - dev: false + '@xtuc/ieee754@1.2.0': {} - /@xtuc/long@4.2.2: - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - dev: false + '@xtuc/long@4.2.2': {} - /abbrev@2.0.0: - resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: false + abbrev@2.0.0: {} - /abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} + accepts@1.3.8: dependencies: - event-target-shim: 5.0.1 - dev: false + mime-types: 2.1.35 + negotiator: 0.6.3 - /acorn-import-assertions@1.9.0(acorn@8.11.3): - resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} - peerDependencies: - acorn: ^8 + acorn-import-attributes@1.9.5(acorn@8.12.1): dependencies: - acorn: 8.11.3 - dev: false + acorn: 8.12.1 - /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 + acorn-jsx@5.3.2(acorn@8.12.1): dependencies: - acorn: 8.11.3 - dev: true - - /acorn-walk@8.3.0: - resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==} - engines: {node: '>=0.4.0'} - - /acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} - engines: {node: '>=0.4.0'} - hasBin: true - - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} - engines: {node: '>=0.4.0'} - hasBin: true + acorn: 8.12.1 - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} + acorn-walk@8.3.4: dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false + acorn: 8.12.1 - /agent-base@7.1.0: - resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} - engines: {node: '>= 14'} - dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false + acorn@8.12.1: {} - /ajv-formats@2.1.1(ajv@8.12.0): - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - dependencies: - ajv: 8.12.0 - dev: false + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 - /ajv-keywords@3.5.2(ajv@6.12.6): - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 + ajv-keywords@3.5.2(ajv@6.12.6): dependencies: ajv: 6.12.6 - dev: false - /ajv-keywords@5.1.0(ajv@8.12.0): - resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} - peerDependencies: - ajv: ^8.8.2 + ajv-keywords@5.1.0(ajv@8.17.1): dependencies: - ajv: 8.12.0 + ajv: 8.17.1 fast-deep-equal: 3.1.3 - dev: false - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 + fast-uri: 3.0.1 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: false - - /ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} - dev: true - /ansi-escapes@5.0.0: - resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} - engines: {node: '>=12'} + ansi-escapes@7.0.0: dependencies: - type-fest: 1.4.0 - dev: true + environment: 1.1.0 - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} + ansi-regex@5.0.1: {} - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} + ansi-regex@6.1.0: {} - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} + ansi-styles@6.2.1: {} - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + any-promise@1.3.0: {} - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - /arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - - /arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + arg@4.1.3: {} - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - dependencies: - sprintf-js: 1.0.3 - dev: true + arg@5.0.2: {} - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true + argparse@2.0.1: {} - /aria-hidden@1.2.3: - resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==} - engines: {node: '>=10'} + aria-hidden@1.2.4: dependencies: - tslib: 2.6.2 - dev: false + tslib: 2.7.0 - /aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + aria-query@5.1.3: dependencies: - dequal: 2.0.3 - dev: true + deep-equal: 2.2.3 - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + array-buffer-byte-length@1.0.1: dependencies: - call-bind: 1.0.5 - is-array-buffer: 3.0.2 - dev: true + call-bind: 1.0.7 + is-array-buffer: 3.0.4 - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} - engines: {node: '>= 0.4'} + array-includes@3.1.8: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + 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.findlastindex@1.2.3: - resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} - engines: {node: '>= 0.4'} + array.prototype.findlast@1.2.5: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 - dev: true - /array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} + array.prototype.findlastindex@1.2.5: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + 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.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} + array.prototype.flat@1.3.2: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.tosorted@1.1.2: - resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} + array.prototype.flatmap@1.3.2: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 - dev: true - /arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} - engines: {node: '>= 0.4'} + array.prototype.tosorted@1.1.4: dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 - dev: true - - /arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - dev: true - - /arrify@2.0.1: - resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} - engines: {node: '>=8'} - dev: false - - /asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - dev: false - - /ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - dev: true + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 - /async-retry@1.3.3: - resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + arraybuffer.prototype.slice@1.0.3: dependencies: - retry: 0.13.1 - dev: false + 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 - /asynciterator.prototype@1.0.0: - resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} - dependencies: - has-symbols: 1.0.3 - dev: true + asap@2.0.6: {} - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: false + ast-types-flow@0.0.8: {} - /attr-accept@2.2.2: - resolution: {integrity: sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==} - engines: {node: '>=4'} - dev: false + asynckit@0.4.0: {} - /autoprefixer@10.4.16(postcss@8.4.28): - resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 + attr-accept@2.2.2: {} + + autoprefixer@10.4.20(postcss@8.4.47): dependencies: - browserslist: 4.21.10 - caniuse-lite: 1.0.30001572 + browserslist: 4.23.3 + caniuse-lite: 1.0.30001663 fraction.js: 4.3.7 normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.28 + picocolors: 1.1.0 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - dev: true - - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - dev: true - - /axe-core@4.7.0: - resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} - engines: {node: '>=4'} - dev: true - /axios@1.5.0: - resolution: {integrity: sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==} + available-typed-arrays@1.0.7: dependencies: - follow-redirects: 1.15.2 - form-data: 4.0.0 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - dev: false + possible-typed-array-names: 1.0.0 + + axe-core@4.10.0: {} - /axios@1.6.2: - resolution: {integrity: sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==} + axios@1.7.7: dependencies: - follow-redirects: 1.15.2 + follow-redirects: 1.15.9 form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - dev: false - /axobject-query@3.2.1: - resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} - dependencies: - dequal: 2.0.3 - dev: true + axobject-query@4.1.0: {} - /babel-loader@9.1.3(@babel/core@7.22.17)(webpack@5.89.0): - resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} - engines: {node: '>= 14.15.0'} - peerDependencies: - '@babel/core': ^7.12.0 - webpack: '>=5' + babel-loader@9.2.1(@babel/core@7.25.2)(webpack@5.94.0): dependencies: - '@babel/core': 7.22.17 + '@babel/core': 7.25.2 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.89.0 - dev: false + webpack: 5.94.0 - /babel-plugin-transform-remove-imports@1.7.0(@babel/core@7.22.17): - resolution: {integrity: sha512-gprmWf6ry5qrnxMyiDaxZpXzZJP6R9FRA+p0AImLIWRmSEGtlKcFprHKeGMZYkII9rJR6Q1hYou+n1fk6rWf2g==} - peerDependencies: - '@babel/core': ^7.0.0-0 + babel-plugin-transform-remove-imports@1.8.0(@babel/core@7.25.2): dependencies: - '@babel/core': 7.22.17 - dev: false + '@babel/core': 7.25.2 - /bail@2.0.2: - resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - dev: false + bail@2.0.2: {} - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@1.0.2: {} - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: false + base64-js@1.5.1: {} - /bcp-47-match@2.0.3: - resolution: {integrity: sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==} - dev: false + base64id@2.0.0: {} - /better-path-resolve@1.0.0: - resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} - engines: {node: '>=4'} - dependencies: - is-windows: 1.0.2 - dev: true + bcp-47-match@2.0.3: {} - /bignumber.js@9.1.2: - resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} - dev: false + binary-extensions@2.3.0: {} - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 - /boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - dev: false + boolbase@1.0.0: {} - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + bowser@2.11.0: {} + + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} + braces@3.0.3: dependencies: - fill-range: 7.0.1 + fill-range: 7.1.1 - /breakword@1.0.6: - resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} + browserslist@4.23.3: dependencies: - wcwidth: 1.0.1 - dev: true + caniuse-lite: 1.0.30001663 + electron-to-chromium: 1.5.27 + node-releases: 2.0.18 + update-browserslist-db: 1.1.0(browserslist@4.23.3) - /browserslist@4.21.10: - resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001572 - electron-to-chromium: 1.4.503 - node-releases: 2.0.13 - update-browserslist-db: 1.0.11(browserslist@4.21.10) + buffer-from@1.1.2: {} - /browserslist@4.22.2: - resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + buffer@5.7.1: dependencies: - caniuse-lite: 1.0.30001587 - electron-to-chromium: 1.4.616 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.2) - dev: false - - /buffer-equal-constant-time@1.0.1: - resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} - dev: false - - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: false + base64-js: 1.5.1 + ieee754: 1.2.1 - /busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} + busboy@1.6.0: dependencies: streamsearch: 1.1.0 - dev: false - /call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + call-bind@1.0.7: dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.2 - set-function-length: 1.1.1 - - /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'} - - /camelcase-keys@6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} - engines: {node: '>=8'} - dependencies: - camelcase: 5.3.1 - map-obj: 4.3.0 - quick-lru: 4.0.1 - dev: true + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 - /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: true + callsites@3.1.0: {} - /caniuse-lite@1.0.30001572: - resolution: {integrity: sha512-1Pbh5FLmn5y4+QhNyJE9j3/7dK44dGB83/ZMjv/qJk86TvDbjk0LosiZo0i0WB0Vx607qMX9jYrn1VLHCkN4rw==} + camelcase-css@2.0.1: {} - /caniuse-lite@1.0.30001587: - resolution: {integrity: sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA==} - dev: false + caniuse-lite@1.0.30001663: {} - /ccount@2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - dev: false + ccount@2.0.1: {} - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - /chalk@3.0.0: - resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: false - - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true - - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true - /character-entities-html4@2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - dev: false + chalk@5.3.0: {} - /character-entities-legacy@3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - dev: false + character-entities-html4@2.1.0: {} - /character-entities@2.0.2: - resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - dev: false + character-entities-legacy@3.0.0: {} - /character-reference-invalid@2.0.1: - resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - dev: false + character-entities@2.0.2: {} - /chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true + character-reference-invalid@2.0.1: {} - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 - braces: 3.0.2 + braces: 3.0.3 glob-parent: 5.1.2 is-binary-path: 2.1.0 is-glob: 4.0.3 @@ -3042,1508 +7385,1004 @@ packages: optionalDependencies: fsevents: 2.3.3 - /chrome-trace-event@1.0.3: - resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} - engines: {node: '>=6.0'} - dev: false - - /ci-info@3.8.0: - resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} - engines: {node: '>=8'} - dev: true + chrome-trace-event@1.0.4: {} - /class-variance-authority@0.7.0: - resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} + class-variance-authority@0.7.0: dependencies: clsx: 2.0.0 - dev: false - /cli-cursor@4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cli-cursor@3.1.0: dependencies: - restore-cursor: 4.0.0 - dev: true + restore-cursor: 3.1.0 - /cli-truncate@3.1.0: - resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cli-cursor@5.0.0: dependencies: - slice-ansi: 5.0.0 - string-width: 5.1.2 - dev: true + restore-cursor: 5.1.0 - /client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - dev: false + cli-spinners@2.9.2: {} - /cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + cli-truncate@4.0.0: dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - dev: true + slice-ansi: 5.0.0 + string-width: 7.2.0 - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - dev: true + client-only@0.0.1: {} - /clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - dev: true + clone@1.0.4: {} - /clsx@2.0.0: - resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} - engines: {node: '>=6'} - dev: false + clsx@2.0.0: {} - /clsx@2.1.0: - resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==} - engines: {node: '>=6'} - dev: false + clsx@2.1.1: {} - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@1.9.3: dependencies: color-name: 1.1.3 - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + color-name@1.1.3: {} - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-name@1.1.4: {} - /colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - dev: true + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + optional: true - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + color@4.2.3: dependencies: - delayed-stream: 1.0.0 - dev: false + color-convert: 2.0.1 + color-string: 1.9.1 + optional: true - /comma-separated-tokens@2.0.3: - resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - dev: false + colorette@2.0.20: {} - /commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} - engines: {node: '>=14'} - dev: false + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 - /commander@11.1.0: - resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} - engines: {node: '>=16'} - dev: true + comma-separated-tokens@2.0.3: {} - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: false + commander@10.0.1: {} - /commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} + commander@11.1.0: {} - /common-path-prefix@3.0.0: - resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} - dev: false + commander@12.1.0: {} - /commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - dev: false + commander@2.20.3: {} - /compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: false + commander@4.1.1: {} - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + common-path-prefix@3.0.0: {} - /config-chain@1.1.13: - resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + concat-map@0.0.1: {} + + config-chain@1.1.13: dependencies: ini: 1.3.8 proto-list: 1.2.4 - dev: false - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: false + convert-source-map@2.0.0: {} - /cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} - engines: {node: '>= 0.6'} - dev: false + cookie@0.4.2: {} - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + cookie@0.6.0: {} + + cookie@0.7.1: {} - /cross-spawn@5.1.0: - resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + cors@2.8.5: dependencies: - lru-cache: 4.1.5 - shebang-command: 1.2.0 - which: 1.3.1 - dev: true + object-assign: 4.1.1 + vary: 1.1.2 - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + create-require@1.1.1: {} + + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - /css-selector-parser@3.0.4: - resolution: {integrity: sha512-pnmS1dbKsz6KA4EW4BznyPL2xxkNDRg62hcD0v8g6DEw2W7hxOln5M953jsp9hmw5Dg57S6o/A8GOn37mbAgcQ==} - dev: false + css-selector-parser@3.0.5: {} - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true + cssesc@3.0.0: {} - /csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + csstype@3.1.3: {} - /csv-generate@3.4.3: - resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} - dev: true + damerau-levenshtein@1.0.8: {} - /csv-parse@4.16.3: - resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} - dev: true + data-view-buffer@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 - /csv-stringify@5.6.5: - resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} - dev: true + data-view-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 - /csv@5.5.3: - resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} - engines: {node: '>= 0.1.90'} + data-view-byte-offset@1.0.0: dependencies: - csv-generate: 3.4.3 - csv-parse: 4.16.3 - csv-stringify: 5.6.5 - stream-transform: 2.1.3 - dev: true + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 - /damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - dev: true + debounce@2.0.0: {} - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@3.2.7: dependencies: - ms: 2.1.2 - dev: true + ms: 2.1.3 - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.7: dependencies: - ms: 2.1.2 + ms: 2.1.3 - /decamelize-keys@1.1.1: - resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} - engines: {node: '>=0.10.0'} + decode-named-character-reference@1.0.2: dependencies: - decamelize: 1.2.0 - map-obj: 1.0.1 - dev: true - - /decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - dev: true + character-entities: 2.0.2 - /decode-named-character-reference@1.0.2: - resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + deep-equal@2.2.3: dependencies: - character-entities: 2.0.2 - dev: false + 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 - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true + deep-is@0.1.4: {} - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dev: false + deepmerge@4.3.1: {} - /defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + defaults@1.0.4: dependencies: clone: 1.0.4 - dev: true - /define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} - engines: {node: '>= 0.4'} + define-data-property@1.1.4: dependencies: - get-intrinsic: 1.2.2 + es-define-property: 1.0.0 + es-errors: 1.3.0 gopd: 1.0.1 - has-property-descriptors: 1.0.1 - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + define-properties@1.2.1: dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 object-keys: 1.1.1 - dev: true - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: false + delayed-stream@1.0.0: {} - /dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} + dequal@2.0.3: {} - /detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - dev: true + detect-libc@2.0.3: + optional: true - /detect-node-es@1.1.0: - resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - dev: false + detect-node-es@1.1.0: {} - /devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + devlop@1.1.0: dependencies: dequal: 2.0.3 - dev: false - /dezalgo@1.0.4: - resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} + dezalgo@1.0.4: dependencies: asap: 2.0.6 wrappy: 1.0.2 - dev: false - - /didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} + didyoumean@1.2.2: {} - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - dev: true + diff@4.0.2: {} - /direction@2.0.1: - resolution: {integrity: sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==} - hasBin: true - dev: false + direction@2.0.1: {} - /dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dlv@1.1.3: {} - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} + doctrine@2.1.0: dependencies: esutils: 2.0.3 - dev: true - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + doctrine@3.0.0: dependencies: esutils: 2.0.3 - dev: true - /dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 entities: 4.5.0 - dev: false - /domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - dev: false + domelementtype@2.3.0: {} - /domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} + domhandler@5.0.3: dependencies: domelementtype: 2.3.0 - dev: false - /domutils@3.1.0: - resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + domutils@3.1.0: dependencies: dom-serializer: 2.0.0 domelementtype: 2.3.0 domhandler: 5.0.3 - dev: false - /dotenv@16.3.1: - resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} - engines: {node: '>=12'} - dev: true - - /duplexify@4.1.2: - resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==} - dependencies: - end-of-stream: 1.4.4 - inherits: 2.0.4 - readable-stream: 3.6.2 - stream-shift: 1.0.3 - dev: false - - /eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dotenv@16.4.5: {} - /ecdsa-sig-formatter@1.0.11: - resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - dependencies: - safe-buffer: 5.2.1 - dev: false + eastasianwidth@0.2.0: {} - /editorconfig@1.0.4: - resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==} - engines: {node: '>=14'} - hasBin: true + editorconfig@1.0.4: dependencies: '@one-ini/wasm': 0.1.1 commander: 10.0.1 minimatch: 9.0.1 - semver: 7.5.4 - dev: false + semver: 7.6.3 - /electron-to-chromium@1.4.503: - resolution: {integrity: sha512-LF2IQit4B0VrUHFeQkWhZm97KuJSGF2WJqq1InpY+ECpFRkXd8yTIaTtJxsO0OKDmiBYwWqcrNaXOurn2T2wiA==} + electron-to-chromium@1.5.27: {} - /electron-to-chromium@1.4.616: - resolution: {integrity: sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==} - dev: false + emoji-regex@10.4.0: {} - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emoji-regex@8.0.0: {} - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + emoji-regex@9.2.2: {} - /end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + engine.io-parser@5.2.3: {} + + engine.io@6.5.5: dependencies: - once: 1.4.0 - dev: false + '@types/cookie': 0.4.1 + '@types/cors': 2.8.17 + '@types/node': 22.5.5 + accepts: 1.3.8 + base64id: 2.0.0 + cookie: 0.4.2 + cors: 2.8.5 + debug: 4.3.7 + engine.io-parser: 5.2.3 + ws: 8.17.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate - /enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} - engines: {node: '>=10.13.0'} + enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 - /enquirer@2.4.1: - resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} - engines: {node: '>=8.6'} - dependencies: - ansi-colors: 4.1.3 - strip-ansi: 6.0.1 - dev: true - - /ent@2.2.0: - resolution: {integrity: sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==} - dev: false - - /entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - dev: false + entities@4.5.0: {} - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - dependencies: - is-arrayish: 0.2.1 - dev: true + environment@1.1.0: {} - /es-abstract@1.22.3: - resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} - engines: {node: '>= 0.4'} + es-abstract@1.23.3: dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - es-set-tostringtag: 2.0.2 + 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.2 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 gopd: 1.0.1 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.0 - internal-slot: 1.0.6 - is-array-buffer: 3.0.2 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 is-callable: 1.2.7 - is-negative-zero: 2.0.2 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 + is-shared-array-buffer: 1.0.3 is-string: 1.0.7 - is-typed-array: 1.1.12 + is-typed-array: 1.1.13 is-weakref: 1.0.2 - object-inspect: 1.13.1 + object-inspect: 1.13.2 object-keys: 1.1.1 object.assign: 4.1.5 - regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.0.1 - safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.0 - typed-array-byte-length: 1.0.0 - typed-array-byte-offset: 1.0.0 - typed-array-length: 1.0.4 + 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.13 - dev: true + which-typed-array: 1.1.15 + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es-get-iterator@1.1.3: + 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 - /es-iterator-helpers@1.0.15: - resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} + es-iterator-helpers@1.0.19: dependencies: - asynciterator.prototype: 1.0.0 - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - es-set-tostringtag: 2.0.2 + 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.2 - globalthis: 1.0.3 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 + 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.6 + internal-slot: 1.0.7 iterator.prototype: 1.1.2 - safe-array-concat: 1.0.1 - dev: true + safe-array-concat: 1.1.2 + + es-iterator-helpers@1.1.0: + 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.3 + safe-array-concat: 1.1.2 - /es-module-lexer@1.4.1: - resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} - dev: false + es-module-lexer@1.5.4: {} - /es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} - engines: {node: '>= 0.4'} + es-object-atoms@1.0.0: dependencies: - get-intrinsic: 1.2.2 - has-tostringtag: 1.0.0 - hasown: 2.0.0 - dev: true + es-errors: 1.3.0 - /es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + es-set-tostringtag@2.0.3: dependencies: - hasown: 2.0.0 - dev: true + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} + es-shim-unscopables@1.0.2: + dependencies: + hasown: 2.0.2 + + es-to-primitive@1.2.1: dependencies: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 - dev: true - - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - 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 - - /escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} - dev: false - /eslint-config-next@14.1.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-SBX2ed7DoRFXC6CQSLc/SbLY9Ut6HxNB2wPTcoIWjUMd7aF7O/SIE7111L8FdZ9TXsNV4pulUDnfthpyPtbFUg==} - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@next/eslint-plugin-next': 14.1.0 - '@rushstack/eslint-patch': 1.6.1 - '@typescript-eslint/parser': 6.17.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 + esbuild@0.19.11: + optionalDependencies: + '@esbuild/aix-ppc64': 0.19.11 + '@esbuild/android-arm': 0.19.11 + '@esbuild/android-arm64': 0.19.11 + '@esbuild/android-x64': 0.19.11 + '@esbuild/darwin-arm64': 0.19.11 + '@esbuild/darwin-x64': 0.19.11 + '@esbuild/freebsd-arm64': 0.19.11 + '@esbuild/freebsd-x64': 0.19.11 + '@esbuild/linux-arm': 0.19.11 + '@esbuild/linux-arm64': 0.19.11 + '@esbuild/linux-ia32': 0.19.11 + '@esbuild/linux-loong64': 0.19.11 + '@esbuild/linux-mips64el': 0.19.11 + '@esbuild/linux-ppc64': 0.19.11 + '@esbuild/linux-riscv64': 0.19.11 + '@esbuild/linux-s390x': 0.19.11 + '@esbuild/linux-x64': 0.19.11 + '@esbuild/netbsd-x64': 0.19.11 + '@esbuild/openbsd-x64': 0.19.11 + '@esbuild/sunos-x64': 0.19.11 + '@esbuild/win32-arm64': 0.19.11 + '@esbuild/win32-ia32': 0.19.11 + '@esbuild/win32-x64': 0.19.11 + + escalade@3.2.0: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + eslint-config-next@15.0.1(eslint-plugin-import-x@4.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2): + dependencies: + '@next/eslint-plugin-next': 15.0.1 + '@rushstack/eslint-patch': 1.10.4 + '@typescript-eslint/eslint-plugin': 8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/parser': 8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + eslint: 9.9.1(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) - eslint-plugin-react: 7.33.2(eslint@8.56.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) - typescript: 5.3.3 + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint-plugin-import@2.31.0)(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-jsx-a11y: 6.10.0(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-react: 7.37.2(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-react-hooks: 5.0.0(eslint@9.9.1(jiti@1.21.6)) + optionalDependencies: + typescript: 5.6.2 transitivePeerDependencies: - eslint-import-resolver-webpack + - eslint-plugin-import-x - supports-color - dev: true - /eslint-config-prettier@9.0.0(eslint@8.56.0): - resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' + eslint-config-prettier@9.1.0(eslint@9.9.1(jiti@1.21.6)): dependencies: - eslint: 8.56.0 - dev: true + eslint: 9.9.1(jiti@1.21.6) - /eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 - is-core-module: 2.13.1 + is-core-module: 2.15.1 resolve: 1.22.8 transitivePeerDependencies: - supports-color - dev: true - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0): - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint-plugin-import@2.31.0)(eslint@9.9.1(jiti@1.21.6)): dependencies: - debug: 4.3.4 - enhanced-resolve: 5.15.0 - eslint: 8.56.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + '@nolyfill/is-core-module': 1.0.39 + debug: 4.3.7 + enhanced-resolve: 5.17.1 + eslint: 9.9.1(jiti@1.21.6) + eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.9.1(jiti@1.21.6)) fast-glob: 3.3.2 - get-tsconfig: 4.7.2 - is-core-module: 2.13.1 + get-tsconfig: 4.8.1 + is-bun-module: 1.2.1 is-glob: 4.0.3 + optionalDependencies: + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-import-x: 4.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true + eslint-module-utils@2.11.0(@typescript-eslint/parser@8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.9.1(jiti@1.21.6)): dependencies: - '@typescript-eslint/parser': 6.17.0(eslint@8.56.0)(typescript@5.3.3) debug: 3.2.7 - eslint: 8.56.0 + optionalDependencies: + '@typescript-eslint/parser': 8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + eslint: 9.9.1(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint-plugin-import@2.31.0)(eslint@9.9.1(jiti@1.21.6)) transitivePeerDependencies: - supports-color - dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.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 + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.9.1(jiti@1.21.6)): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + eslint: 9.9.1(jiti@1.21.6) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import-x@4.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint-plugin-import@2.31.0)(eslint@9.9.1(jiti@1.21.6)) + transitivePeerDependencies: + - supports-color + + eslint-plugin-import-x@4.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2): + dependencies: + '@typescript-eslint/utils': 8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + debug: 4.3.7 + doctrine: 3.0.0 + eslint: 9.9.1(jiti@1.21.6) + eslint-import-resolver-node: 0.3.9 + get-tsconfig: 4.8.1 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + stable-hash: 0.0.4 + tslib: 2.7.0 + transitivePeerDependencies: + - supports-color + - typescript + + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@9.9.1(jiti@1.21.6)): dependencies: - '@typescript-eslint/parser': 6.17.0(eslint@8.56.0)(typescript@5.3.3) - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.3 + '@rtsao/scc': 1.1.0 + 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.56.0 + eslint: 9.9.1(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - hasown: 2.0.0 - is-core-module: 2.13.1 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.9.1(jiti@1.21.6)) + hasown: 2.0.2 + is-core-module: 2.15.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.1 - object.values: 1.1.7 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 semver: 6.3.1 + string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - dev: true - /eslint-plugin-jsx-a11y@6.8.0(eslint@8.56.0): - resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint-plugin-jsx-a11y@6.10.0(eslint@9.9.1(jiti@1.21.6)): dependencies: - '@babel/runtime': 7.23.7 - aria-query: 5.3.0 - array-includes: 3.1.7 + 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.7.0 - axobject-query: 3.2.1 + axe-core: 4.10.0 + axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.15 - eslint: 8.56.0 - hasown: 2.0.0 + es-iterator-helpers: 1.0.19 + eslint: 9.9.1(jiti@1.21.6) + hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - dev: true + object.fromentries: 2.0.8 + safe-regex-test: 1.0.3 + string.prototype.includes: 2.0.0 - /eslint-plugin-react-hooks@4.6.0(eslint@8.56.0): - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + eslint-plugin-playwright@1.6.2(eslint@9.9.1(jiti@1.21.6)): dependencies: - eslint: 8.56.0 - dev: true + eslint: 9.9.1(jiti@1.21.6) + globals: 13.24.0 - /eslint-plugin-react@7.33.2(eslint@8.56.0): - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.9.1(jiti@1.21.6)))(eslint@9.9.1(jiti@1.21.6))(prettier@3.3.3): + dependencies: + eslint: 9.9.1(jiti@1.21.6) + prettier: 3.3.3 + prettier-linter-helpers: 1.0.0 + synckit: 0.9.1 + optionalDependencies: + eslint-config-prettier: 9.1.0(eslint@9.9.1(jiti@1.21.6)) + + eslint-plugin-react-hooks@5.0.0(eslint@9.9.1(jiti@1.21.6)): dependencies: - array-includes: 3.1.7 + eslint: 9.9.1(jiti@1.21.6) + + eslint-plugin-react@7.37.2(eslint@9.9.1(jiti@1.21.6)): + dependencies: + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.2 + array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 - es-iterator-helpers: 1.0.15 - eslint: 8.56.0 + es-iterator-helpers: 1.1.0 + eslint: 9.9.1(jiti@1.21.6) estraverse: 5.3.0 + hasown: 2.0.2 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - object.hasown: 1.1.3 - object.values: 1.1.7 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.10 - dev: true - - /eslint-plugin-unused-imports@3.0.0(eslint@8.56.0): - resolution: {integrity: sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^6.0.0 - eslint: ^8.0.0 - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - dependencies: - eslint: 8.56.0 - eslint-rule-composer: 0.3.0 - dev: true + 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 - /eslint-rule-composer@0.3.0: - resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} - engines: {node: '>=4.0.0'} - dev: true + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6)): + dependencies: + eslint: 9.9.1(jiti@1.21.6) + optionalDependencies: + '@typescript-eslint/eslint-plugin': 8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} + eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - dev: false - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@8.0.2: 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-visitor-keys@3.4.3: {} - /eslint@8.56.0: - resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true + eslint-visitor-keys@4.0.0: {} + + eslint@9.9.1(jiti@1.21.6): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@eslint-community/regexpp': 4.8.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.56.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1(jiti@1.21.6)) + '@eslint-community/regexpp': 4.11.1 + '@eslint/config-array': 0.18.0 + '@eslint/eslintrc': 3.1.0 + '@eslint/js': 9.9.1 '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.3.0 '@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 + debug: 4.3.7 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 + eslint-scope: 8.0.2 + eslint-visitor-keys: 4.0.0 + espree: 10.1.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.21.0 - graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.2 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 + optionator: 0.9.4 strip-ansi: 6.0.1 text-table: 0.2.0 + optionalDependencies: + jiti: 1.21.6 transitivePeerDependencies: - supports-color - dev: true - - /esm@3.2.25: - resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} - engines: {node: '>=6'} - dev: false - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@10.1.0: dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) - eslint-visitor-keys: 3.4.3 - dev: true - - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint-visitor-keys: 4.0.0 - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} + esquery@1.6.0: dependencies: estraverse: 5.3.0 - dev: true - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: false - - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - /estree-util-is-identifier-name@3.0.0: - resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} - dev: false + estraverse@4.3.0: {} - /estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: false + estraverse@5.3.0: {} - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true + estree-util-is-identifier-name@3.0.0: {} - /event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - dev: false + esutils@2.0.3: {} - /eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - dev: true + eventemitter3@5.0.1: {} - /events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - dev: false + events@3.3.0: {} - /execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} + execa@8.0.1: dependencies: cross-spawn: 7.0.3 get-stream: 8.0.1 human-signals: 5.0.0 is-stream: 3.0.0 merge-stream: 2.0.0 - npm-run-path: 5.1.0 + npm-run-path: 5.3.0 onetime: 6.0.0 signal-exit: 4.1.0 strip-final-newline: 3.0.0 - dev: true - /extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - dev: false + extend@3.0.2: {} - /extendable-error@0.1.7: - resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} - dev: true + fast-deep-equal@2.0.1: {} - /external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} - dependencies: - chardet: 0.7.0 - iconv-lite: 0.4.24 - tmp: 0.0.33 - dev: true + fast-deep-equal@3.1.3: {} - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-diff@1.3.0: {} - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} + fast-glob@3.3.1: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 + micromatch: 4.0.8 - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + fast-glob@3.3.2: + 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.8 - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true + fast-json-stable-stringify@2.1.0: {} - /fast-xml-parser@4.3.4: - resolution: {integrity: sha512-utnwm92SyozgA3hhH2I8qldf2lBqm6qHOICawRNRFu1qMe3+oqr+GcXjGqTmXTMGE5T4eC03kr/rlh5C1IRdZA==} - hasBin: true + fast-levenshtein@2.0.6: {} + + fast-uri@3.0.1: {} + + fast-xml-parser@4.4.1: dependencies: strnum: 1.0.5 - dev: false - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + fastq@1.17.1: 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} + file-entry-cache@8.0.0: dependencies: - flat-cache: 3.1.0 - dev: true + flat-cache: 4.0.1 - /file-selector@0.6.0: - resolution: {integrity: sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw==} - engines: {node: '>= 12'} + file-selector@0.6.0: dependencies: - tslib: 2.6.2 - dev: false + tslib: 2.7.0 - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 - /find-cache-dir@4.0.0: - resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} - engines: {node: '>=14.16'} + find-cache-dir@4.0.0: dependencies: common-path-prefix: 3.0.0 pkg-dir: 7.0.0 - dev: false - - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - dev: true - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true - /find-up@6.3.0: - resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + find-up@6.3.0: dependencies: locate-path: 7.2.0 path-exists: 5.0.0 - dev: false - - /find-yarn-workspace-root2@1.2.16: - resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} - dependencies: - micromatch: 4.0.5 - pkg-dir: 4.2.0 - dev: true - /flat-cache@3.1.0: - resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==} - engines: {node: '>=12.0.0'} + flat-cache@4.0.1: dependencies: - flatted: 3.2.7 - keyv: 4.5.3 - rimraf: 3.0.2 - dev: true + flatted: 3.3.1 + keyv: 4.5.4 - /flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - dev: true + flatted@3.3.1: {} - /follow-redirects@1.15.2: - resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false + follow-redirects@1.15.9: {} - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.3: dependencies: is-callable: 1.2.7 - dev: true - /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} + foreground-child@3.3.0: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 - /form-data@2.5.1: - resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==} - engines: {node: '>= 0.12'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: false - - /form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} + form-data@4.0.0: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 - dev: false - /formidable@3.5.1: - resolution: {integrity: sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==} + formidable@3.5.1: dependencies: dezalgo: 1.0.4 hexoid: 1.0.0 once: 1.4.0 - dev: false - - /fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - dev: true - - /fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - dev: true - /fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - dev: true + fraction.js@4.3.7: {} - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + fsevents@2.3.2: optional: 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 + fsevents@2.3.3: optional: true - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + function-bind@1.1.2: {} - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} + function.prototype.name@1.1.6: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + 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 - - /gaxios@6.2.0: - resolution: {integrity: sha512-H6+bHeoEAU5D6XNc6mPKeN5dLZqEDs9Gpk6I+SZBEzK5So58JVrHPmevNi35fRl1J9Y5TaeLW0kYx3pCJ1U2mQ==} - engines: {node: '>=14'} - dependencies: - extend: 3.0.2 - https-proxy-agent: 7.0.2 - is-stream: 2.0.1 - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - /gcp-metadata@6.1.0: - resolution: {integrity: sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==} - engines: {node: '>=14'} - dependencies: - gaxios: 6.2.0 - json-bigint: 1.0.0 - transitivePeerDependencies: - - encoding - - supports-color - dev: false + functions-have-names@1.2.3: {} - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: false + gensync@1.0.0-beta.2: {} - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true + get-east-asian-width@1.2.0: {} - /get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + get-intrinsic@1.2.4: dependencies: + es-errors: 1.3.0 function-bind: 1.1.2 - has-proto: 1.0.1 + has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.0 + hasown: 2.0.2 - /get-nonce@1.0.1: - resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} - engines: {node: '>=6'} - dev: false + get-nonce@1.0.1: {} - /get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - dev: true + get-stream@8.0.1: {} - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} + get-symbol-description@1.0.2: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - dev: true + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 - /get-tsconfig@4.7.2: - resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + get-tsconfig@4.8.1: dependencies: resolve-pkg-maps: 1.0.0 - dev: true - /github-slugger@2.0.0: - resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} - dev: false + github-slugger@2.0.0: {} - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: false + glob-to-regexp@0.4.1: {} - /glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true + glob@10.3.4: dependencies: - foreground-child: 3.1.1 + foreground-child: 3.3.0 jackspeak: 2.3.6 - minimatch: 9.0.3 - minipass: 7.0.4 - path-scurry: 1.10.1 - - /glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - /glob@7.1.7: - resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true + minimatch: 9.0.5 + minipass: 7.1.2 + path-scurry: 1.11.1 - /glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} + glob@10.4.5: dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.6 - once: 1.4.0 - dev: false + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 1.11.1 - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: false + globals@11.12.0: {} - /globals@13.21.0: - resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} - engines: {node: '>=8'} + globals@13.24.0: dependencies: type-fest: 0.20.2 - dev: true - - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} - dependencies: - define-properties: 1.2.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.2.4 - merge2: 1.4.1 - slash: 3.0.0 - dev: true + globals@14.0.0: {} - /google-auth-library@9.6.3: - resolution: {integrity: sha512-4CacM29MLC2eT9Cey5GDVK4Q8t+MMp8+OEdOaqD9MG6b0dOyLORaaeJMPQ7EESVgm/+z5EKYyFLxgzBJlJgyHQ==} - engines: {node: '>=14'} + globalthis@1.0.4: dependencies: - base64-js: 1.5.1 - ecdsa-sig-formatter: 1.0.11 - gaxios: 6.2.0 - gcp-metadata: 6.1.0 - gtoken: 7.1.0 - jws: 4.0.0 - transitivePeerDependencies: - - encoding - - supports-color - dev: false + define-properties: 1.2.1 + gopd: 1.0.1 - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.0.1: dependencies: - get-intrinsic: 1.2.2 - - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + get-intrinsic: 1.2.4 - /grapheme-splitter@1.0.4: - resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} - dev: true + graceful-fs@4.2.11: {} - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true - - /gtoken@7.1.0: - resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==} - engines: {node: '>=14.0.0'} - dependencies: - gaxios: 6.2.0 - jws: 4.0.0 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /hard-rejection@2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} - dev: true + graphemer@1.4.0: {} - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true + has-bigints@1.0.2: {} - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} + has-flag@3.0.0: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + has-flag@4.0.0: {} - /has-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + has-property-descriptors@1.0.2: dependencies: - get-intrinsic: 1.2.2 + es-define-property: 1.0.0 - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} + has-proto@1.0.3: {} - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} + has-symbols@1.0.3: {} - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: dependencies: has-symbols: 1.0.3 - dev: true - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} + hasown@2.0.2: dependencies: function-bind: 1.1.2 - /hast-util-from-html@2.0.1: - resolution: {integrity: sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==} + hast-util-from-html@2.0.3: dependencies: - '@types/hast': 3.0.0 + '@types/hast': 3.0.4 devlop: 1.1.0 hast-util-from-parse5: 8.0.1 parse5: 7.1.2 - vfile: 6.0.1 + vfile: 6.0.3 vfile-message: 4.0.2 - dev: false - - /hast-util-from-parse5@7.1.2: - resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==} - dependencies: - '@types/hast': 2.3.5 - '@types/unist': 2.0.8 - hastscript: 7.2.0 - property-information: 6.2.0 - vfile: 5.3.7 - vfile-location: 4.1.0 - web-namespaces: 2.0.1 - dev: false - /hast-util-from-parse5@8.0.1: - resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} + hast-util-from-parse5@8.0.1: dependencies: - '@types/hast': 3.0.0 - '@types/unist': 3.0.0 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 devlop: 1.1.0 hastscript: 8.0.0 - property-information: 6.2.0 - vfile: 6.0.1 - vfile-location: 5.0.2 + property-information: 6.5.0 + vfile: 6.0.3 + vfile-location: 5.0.3 web-namespaces: 2.0.1 - dev: false - /hast-util-has-property@3.0.0: - resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==} + hast-util-has-property@3.0.0: dependencies: - '@types/hast': 3.0.0 - dev: false + '@types/hast': 3.0.4 - /hast-util-heading-rank@3.0.0: - resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==} + hast-util-heading-rank@3.0.0: dependencies: - '@types/hast': 3.0.0 - dev: false + '@types/hast': 3.0.4 - /hast-util-is-element@3.0.0: - resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + hast-util-is-element@3.0.0: dependencies: - '@types/hast': 3.0.0 - dev: false + '@types/hast': 3.0.4 - /hast-util-parse-selector@3.1.1: - resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} + hast-util-parse-selector@3.1.1: dependencies: - '@types/hast': 2.3.5 - dev: false + '@types/hast': 2.3.10 - /hast-util-parse-selector@4.0.0: - resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + hast-util-parse-selector@4.0.0: dependencies: - '@types/hast': 3.0.0 - dev: false + '@types/hast': 3.0.4 - /hast-util-raw@9.0.1: - resolution: {integrity: sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==} + hast-util-raw@9.0.4: dependencies: - '@types/hast': 3.0.0 - '@types/unist': 3.0.0 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 '@ungap/structured-clone': 1.2.0 hast-util-from-parse5: 8.0.1 hast-util-to-parse5: 8.0.0 html-void-elements: 3.0.0 - mdast-util-to-hast: 13.0.2 + mdast-util-to-hast: 13.2.0 parse5: 7.1.2 unist-util-position: 5.0.0 unist-util-visit: 5.0.0 - vfile: 6.0.1 + vfile: 6.0.3 web-namespaces: 2.0.1 zwitch: 2.0.4 - dev: false - /hast-util-sanitize@5.0.0: - resolution: {integrity: sha512-L0g/qhOA82zG2hA3O29hnlv4mLU7YVVT1if5JZSr2tKO1ywkQbuMDcN05btgX0HtpqDXQniAM0ar0K+Lv4MDBQ==} + hast-util-sanitize@5.0.1: dependencies: - '@types/hast': 3.0.0 + '@types/hast': 3.0.4 '@ungap/structured-clone': 1.2.0 unist-util-position: 5.0.0 - dev: false - /hast-util-select@6.0.2: - resolution: {integrity: sha512-hT/SD/d/Meu+iobvgkffo1QecV8WeKWxwsNMzcTJsKw1cKTQKSR/7ArJeURLNJF9HDjp9nVoORyNNJxrvBye8Q==} + hast-util-select@6.0.2: dependencies: - '@types/hast': 3.0.0 - '@types/unist': 3.0.0 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 bcp-47-match: 2.0.3 comma-separated-tokens: 2.0.3 - css-selector-parser: 3.0.4 + css-selector-parser: 3.0.5 devlop: 1.1.0 direction: 2.0.1 hast-util-has-property: 3.0.0 @@ -4551,871 +8390,464 @@ packages: hast-util-whitespace: 3.0.0 not: 0.1.0 nth-check: 2.1.1 - property-information: 6.2.0 + property-information: 6.5.0 space-separated-tokens: 2.0.2 unist-util-visit: 5.0.0 zwitch: 2.0.4 - dev: false - /hast-util-to-html@9.0.0: - resolution: {integrity: sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw==} + hast-util-to-html@9.0.3: dependencies: - '@types/hast': 3.0.0 - '@types/unist': 3.0.0 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 ccount: 2.0.1 comma-separated-tokens: 2.0.3 - hast-util-raw: 9.0.1 hast-util-whitespace: 3.0.0 html-void-elements: 3.0.0 - mdast-util-to-hast: 13.0.2 - property-information: 6.2.0 + mdast-util-to-hast: 13.2.0 + property-information: 6.5.0 space-separated-tokens: 2.0.2 - stringify-entities: 4.0.3 + stringify-entities: 4.0.4 zwitch: 2.0.4 - dev: false - /hast-util-to-jsx-runtime@2.3.0: - resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==} + hast-util-to-jsx-runtime@2.3.0: dependencies: - '@types/estree': 1.0.5 - '@types/hast': 3.0.0 - '@types/unist': 3.0.0 + '@types/estree': 1.0.6 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 comma-separated-tokens: 2.0.3 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.0 - mdast-util-mdx-jsx: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.1.3 mdast-util-mdxjs-esm: 2.0.1 - property-information: 6.2.0 + property-information: 6.5.0 space-separated-tokens: 2.0.2 - style-to-object: 1.0.5 + style-to-object: 1.0.8 unist-util-position: 5.0.0 vfile-message: 4.0.2 transitivePeerDependencies: - supports-color - dev: false - /hast-util-to-parse5@8.0.0: - resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} + hast-util-to-parse5@8.0.0: dependencies: - '@types/hast': 3.0.0 + '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 devlop: 1.1.0 - property-information: 6.2.0 + property-information: 6.5.0 space-separated-tokens: 2.0.2 web-namespaces: 2.0.1 zwitch: 2.0.4 - dev: false - - /hast-util-to-string@2.0.0: - resolution: {integrity: sha512-02AQ3vLhuH3FisaMM+i/9sm4OXGSq1UhOOCpTLLQtHdL3tZt7qil69r8M8iDkZYyC0HCFylcYoP+8IO7ddta1A==} - dependencies: - '@types/hast': 2.3.5 - dev: false - /hast-util-to-string@3.0.0: - resolution: {integrity: sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==} + hast-util-to-string@3.0.0: dependencies: - '@types/hast': 3.0.0 - dev: false + '@types/hast': 3.0.4 - /hast-util-whitespace@3.0.0: - resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + hast-util-whitespace@3.0.0: dependencies: - '@types/hast': 3.0.0 - dev: false + '@types/hast': 3.0.4 - /hastscript@7.2.0: - resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} + hastscript@7.2.0: dependencies: - '@types/hast': 2.3.5 + '@types/hast': 2.3.10 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 3.1.1 - property-information: 6.2.0 + property-information: 6.5.0 space-separated-tokens: 2.0.2 - dev: false - /hastscript@8.0.0: - resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} + hastscript@8.0.0: dependencies: - '@types/hast': 3.0.0 + '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 4.0.0 - property-information: 6.2.0 + property-information: 6.5.0 space-separated-tokens: 2.0.2 - dev: false - - /hexoid@1.0.0: - resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} - engines: {node: '>=8'} - dev: false - /hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - dependencies: - react-is: 16.13.1 - dev: false + hexoid@1.0.0: {} - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true - - /html-to-text@9.0.5: - resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==} - engines: {node: '>=14'} + html-to-text@9.0.5: dependencies: '@selderee/plugin-htmlparser2': 0.11.0 deepmerge: 4.3.1 dom-serializer: 2.0.0 htmlparser2: 8.0.2 selderee: 0.11.0 - dev: false - /html-url-attributes@3.0.0: - resolution: {integrity: sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow==} - dev: false + html-url-attributes@3.0.0: {} - /html-void-elements@3.0.0: - resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - dev: false + html-void-elements@3.0.0: {} - /htmlparser2@8.0.2: - resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + htmlparser2@8.0.2: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 domutils: 3.1.0 entities: 4.5.0 - dev: false - - /http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} - dependencies: - '@tootallnate/once': 2.0.0 - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - - /https-proxy-agent@7.0.2: - resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} - engines: {node: '>= 14'} - dependencies: - agent-base: 7.1.0 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - - /human-id@1.0.2: - resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} - dev: true - /human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - dev: true - - /husky@9.0.11: - resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==} - engines: {node: '>=18'} - hasBin: true - dev: true + human-signals@5.0.0: {} - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: true + husky@9.1.6: {} - /ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - dev: true + ieee754@1.2.1: {} - /immediate@3.0.6: - resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - dev: false + ignore@5.3.2: {} - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + import-fresh@3.3.0: 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 - - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 + imurmurhash@0.1.4: {} - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + inherits@2.0.4: {} - /ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: false + ini@1.3.8: {} - /inline-style-parser@0.2.2: - resolution: {integrity: sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ==} - dev: false + inline-style-parser@0.2.4: {} - /internal-slot@1.0.6: - resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} - engines: {node: '>= 0.4'} + internal-slot@1.0.7: dependencies: - get-intrinsic: 1.2.2 - hasown: 2.0.0 - side-channel: 1.0.4 - dev: true + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 - /invariant@2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + invariant@2.2.4: dependencies: loose-envify: 1.4.0 - dev: false - /is-alphabetical@2.0.1: - resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} - dev: false + is-alphabetical@2.0.1: {} - /is-alphanumerical@2.0.1: - resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + is-alphanumerical@2.0.1: dependencies: is-alphabetical: 2.0.1 is-decimal: 2.0.1 - dev: false - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + is-arguments@1.1.1: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 - dev: true + call-bind: 1.0.7 + has-tostringtag: 1.0.2 - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true + is-array-buffer@3.0.4: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 - /is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} + is-arrayish@0.3.2: + optional: true + + is-async-function@2.0.0: dependencies: - has-tostringtag: 1.0.0 - dev: true + has-tostringtag: 1.0.2 - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-bigint@1.0.4: dependencies: has-bigints: 1.0.2 - dev: true - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + is-binary-path@2.1.0: dependencies: - binary-extensions: 2.2.0 + binary-extensions: 2.3.0 - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} + is-boolean-object@1.1.2: dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 - dev: true + call-bind: 1.0.7 + has-tostringtag: 1.0.2 - /is-buffer@2.0.5: - resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} - engines: {node: '>=4'} - dev: false + is-bun-module@1.2.1: + dependencies: + semver: 7.6.3 - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true + is-callable@1.2.7: {} - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-core-module@2.15.1: dependencies: - hasown: 2.0.0 + hasown: 2.0.2 - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} + is-data-view@1.0.1: dependencies: - has-tostringtag: 1.0.0 - dev: true + is-typed-array: 1.1.13 - /is-decimal@2.0.1: - resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - dev: false - - /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==} + is-date-object@1.0.5: dependencies: - call-bind: 1.0.5 - dev: true + has-tostringtag: 1.0.2 - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + is-decimal@2.0.1: {} - /is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - dev: true + is-extglob@2.1.1: {} - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} + is-finalizationregistry@1.0.2: dependencies: - has-tostringtag: 1.0.0 - dev: true + call-bind: 1.0.7 - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 + is-fullwidth-code-point@3.0.0: {} - /is-hexadecimal@2.0.1: - resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - dev: false + is-fullwidth-code-point@4.0.0: {} - /is-map@2.0.2: - resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} - dev: true + is-fullwidth-code-point@5.0.0: + dependencies: + get-east-asian-width: 1.2.0 - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - dev: true + is-generator-function@1.0.10: + dependencies: + has-tostringtag: 1.0.2 - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} + is-glob@4.0.3: dependencies: - has-tostringtag: 1.0.0 - dev: true + is-extglob: 2.1.1 - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} + is-hexadecimal@2.0.1: {} - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true + is-interactive@1.0.0: {} - /is-plain-obj@1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} - dev: true + is-map@2.0.3: {} - /is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - dev: false + is-negative-zero@2.0.3: {} - /is-reference@1.2.1: - resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + is-number-object@1.0.7: dependencies: - '@types/estree': 1.0.5 - dev: false + has-tostringtag: 1.0.2 - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 - dev: true + is-number@7.0.0: {} - /is-set@2.0.2: - resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} - dev: true + is-path-inside@3.0.3: {} - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} - dependencies: - call-bind: 1.0.5 - dev: true + is-plain-obj@4.1.0: {} - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: false + is-regex@1.1.4: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 - /is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + is-set@2.0.3: {} - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} + is-shared-array-buffer@1.0.3: dependencies: - has-tostringtag: 1.0.0 - dev: true + call-bind: 1.0.7 - /is-subdir@1.2.0: - resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} - engines: {node: '>=4'} + is-stream@3.0.0: {} + + is-string@1.0.7: dependencies: - better-path-resolve: 1.0.0 - dev: true + has-tostringtag: 1.0.2 - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} + is-symbol@1.0.4: dependencies: has-symbols: 1.0.3 - dev: true - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} + is-typed-array@1.1.13: dependencies: - which-typed-array: 1.1.13 - dev: true + which-typed-array: 1.1.15 - /is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} - dev: true + is-unicode-supported@0.1.0: {} - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-weakmap@2.0.2: {} + + is-weakref@1.0.2: dependencies: - call-bind: 1.0.5 - dev: true + call-bind: 1.0.7 - /is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + is-weakset@2.0.3: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - dev: true + call-bind: 1.0.7 + get-intrinsic: 1.2.4 - /is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - dev: true + isarray@2.0.5: {} - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true + isexe@2.0.0: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + iterator.prototype@1.1.2: + 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 - /iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + iterator.prototype@1.1.3: dependencies: define-properties: 1.2.1 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.4 - set-function-name: 2.0.1 - dev: true + reflect.getprototypeof: 1.0.6 + set-function-name: 2.0.2 - /jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} + jackspeak@2.3.6: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - /jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jest-worker@27.5.1: dependencies: - '@types/node': 20.10.6 + '@types/node': 22.5.5 merge-stream: 2.0.0 supports-color: 8.1.1 - dev: false - /jiti@1.19.3: - resolution: {integrity: sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==} - hasBin: true + jiti@1.21.6: {} - /jose@4.15.4: - resolution: {integrity: sha512-W+oqK4H+r5sITxfxpSU+MMdr/YSWGvgZMQDIsNoBDGGy4i7GBPTtvFKibQzW06n3U3TqHjhvBJsirShsEJ6eeQ==} - dev: false + jose@5.9.3: {} - /jotai@2.6.4(@types/react@18.0.27)(react@18.2.0): - resolution: {integrity: sha512-RniwQPX4893YlNR1muOtyUGHYaTD1fhEN4qnOuZJSrDHj6xdEMrqlRSN/hCm2fshwk78ruecB/P2l+NCVWe6TQ==} - engines: {node: '>=12.20.0'} - peerDependencies: - '@types/react': '>=17.0.0' - react: '>=17.0.0' - peerDependenciesMeta: - '@types/react': - optional: true - react: - optional: true - dependencies: - '@types/react': 18.0.27 - react: 18.2.0 - dev: false + jotai@2.10.0(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1): + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 + react: 19.0.0-rc-69d4b800-20241021 - /js-beautify@1.14.11: - resolution: {integrity: sha512-rPogWqAfoYh1Ryqqh2agUpVfbxAhbjuN1SmU86dskQUKouRiggUTCO4+2ym9UPXllc2WAp0J+T5qxn7Um3lCdw==} - engines: {node: '>=14'} - hasBin: true + js-beautify@1.15.1: dependencies: config-chain: 1.1.13 editorconfig: 1.0.4 - glob: 10.3.10 - nopt: 7.2.0 - dev: false + glob: 10.4.5 + js-cookie: 3.0.5 + nopt: 7.2.1 - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-cookie@3.0.5: {} - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - dev: true + js-tokens@4.0.0: {} - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - dev: true - - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: false - /json-bigint@1.0.0: - resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} - dependencies: - bignumber.js: 9.1.2 - dev: false + jsesc@2.5.2: {} - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true + json-buffer@3.0.1: {} - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-parse-even-better-errors@2.3.1: {} - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@0.4.1: {} - /json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: false + json-schema-traverse@1.0.0: {} - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true + json-stable-stringify-without-jsonify@1.0.1: {} - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true + json5@1.0.2: dependencies: minimist: 1.2.8 - dev: true - - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - dev: false - /jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - optionalDependencies: - graceful-fs: 4.2.11 - dev: true + json5@2.2.3: {} - /jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} + jsx-ast-utils@3.3.5: dependencies: - array-includes: 3.1.7 + array-includes: 3.1.8 array.prototype.flat: 1.3.2 object.assign: 4.1.5 - object.values: 1.1.7 - dev: true - - /jwa@2.0.0: - resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 - dev: false + object.values: 1.2.0 - /jws@4.0.0: - resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} - dependencies: - jwa: 2.0.0 - safe-buffer: 5.2.1 - dev: false - - /keyv@4.5.3: - resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 - dev: true - - /kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - dev: true - - /kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - dev: true - /language-subtag-registry@0.3.22: - resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} - dev: true + language-subtag-registry@0.3.23: {} - /language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} + language-tags@1.0.9: dependencies: - language-subtag-registry: 0.3.22 - dev: true + language-subtag-registry: 0.3.23 - /leac@0.6.0: - resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} - dev: false + leac@0.6.0: {} - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /lie@3.1.1: - resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} - dependencies: - immediate: 3.0.6 - dev: false + lilconfig@2.1.0: {} - /lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} + lilconfig@3.1.2: {} - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + lines-and-columns@1.2.4: {} - /lint-staged@15.0.2: - resolution: {integrity: sha512-vnEy7pFTHyVuDmCAIFKR5QDO8XLVlPFQQyujQ/STOxe40ICWqJ6knS2wSJ/ffX/Lw0rz83luRDh+ET7toN+rOw==} - engines: {node: '>=18.12.0'} - hasBin: true + lint-staged@15.2.10: dependencies: chalk: 5.3.0 - commander: 11.1.0 - debug: 4.3.4 + commander: 12.1.0 + debug: 4.3.7 execa: 8.0.1 - lilconfig: 2.1.0 - listr2: 7.0.2 - micromatch: 4.0.5 + lilconfig: 3.1.2 + listr2: 8.2.4 + micromatch: 4.0.8 pidtree: 0.6.0 string-argv: 0.3.2 - yaml: 2.3.3 + yaml: 2.5.1 transitivePeerDependencies: - supports-color - dev: true - /listr2@7.0.2: - resolution: {integrity: sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==} - engines: {node: '>=16.0.0'} + listr2@8.2.4: dependencies: - cli-truncate: 3.1.0 + cli-truncate: 4.0.0 colorette: 2.0.20 eventemitter3: 5.0.1 - log-update: 5.0.1 - rfdc: 1.3.0 - wrap-ansi: 8.1.0 - dev: true - - /load-yaml-file@0.2.0: - resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} - engines: {node: '>=6'} - dependencies: - graceful-fs: 4.2.11 - js-yaml: 3.14.1 - pify: 4.0.1 - strip-bom: 3.0.0 - dev: true - - /loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} - engines: {node: '>=6.11.5'} - dev: false - - /localforage@1.10.0: - resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} - dependencies: - lie: 3.1.1 - dev: false + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.0 - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - dependencies: - p-locate: 4.1.0 - dev: true + loader-runner@4.3.0: {} - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - dev: true - /locate-path@7.2.0: - resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + locate-path@7.2.0: dependencies: p-locate: 6.0.0 - dev: false - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true + lodash.merge@4.6.2: {} - /lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - dev: true + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 - /log-update@5.0.1: - resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + log-update@6.1.0: dependencies: - ansi-escapes: 5.0.0 - cli-cursor: 4.0.0 - slice-ansi: 5.0.0 + ansi-escapes: 7.0.0 + cli-cursor: 5.0.0 + slice-ansi: 7.1.0 strip-ansi: 7.1.0 - wrap-ansi: 8.1.0 - dev: true + wrap-ansi: 9.0.0 - /longest-streak@3.1.0: - resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - dev: false + longest-streak@3.1.0: {} - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 - /lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} - engines: {node: 14 || >=16.14} - - /lru-cache@4.1.5: - resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} - dependencies: - pseudomap: 1.0.2 - yallist: 2.1.2 - dev: true + lru-cache@10.4.3: {} - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 - dev: false - - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - - /lucide-react@0.321.0(react@18.2.0): - resolution: {integrity: sha512-Fi9VahIna6642U+2nAGSjnXwUBV3WyfFFPQq4yi3w30jtqxDLfSyiYCtCYCYQZ2KWNZc1MDI+rcsa0t+ChdYpw==} - peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 - dependencies: - react: 18.2.0 - dev: false - /magic-string@0.27.0: - resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} - engines: {node: '>=12'} + lucide-react@0.438.0(react@19.0.0-rc-69d4b800-20241021): dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - dev: false + react: 19.0.0-rc-69d4b800-20241021 - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + make-error@1.3.6: {} - /map-obj@1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - dev: true + markdown-table@3.0.3: {} - /map-obj@4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} - dev: true + marked@7.0.4: {} - /markdown-table@3.0.3: - resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} - dev: false + md-to-react-email@5.0.2(react@19.0.0-rc-69d4b800-20241021): + dependencies: + marked: 7.0.4 + react: 19.0.0-rc-69d4b800-20241021 - /mdast-util-find-and-replace@3.0.1: - resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} + mdast-util-find-and-replace@3.0.1: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 escape-string-regexp: 5.0.0 unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - dev: false - /mdast-util-from-markdown@2.0.0: - resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==} + mdast-util-from-markdown@2.0.1: dependencies: - '@types/mdast': 4.0.3 - '@types/unist': 3.0.0 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 decode-named-character-reference: 1.0.2 devlop: 1.1.0 mdast-util-to-string: 4.0.0 @@ -5428,68 +8860,56 @@ packages: unist-util-stringify-position: 4.0.0 transitivePeerDependencies: - supports-color - dev: false - /mdast-util-gfm-autolink-literal@2.0.0: - resolution: {integrity: sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==} + mdast-util-gfm-autolink-literal@2.0.1: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 ccount: 2.0.1 devlop: 1.1.0 mdast-util-find-and-replace: 3.0.1 - micromark-util-character: 2.0.1 - dev: false + micromark-util-character: 2.1.0 - /mdast-util-gfm-footnote@2.0.0: - resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==} + mdast-util-gfm-footnote@2.0.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.1 mdast-util-to-markdown: 2.1.0 micromark-util-normalize-identifier: 2.0.0 transitivePeerDependencies: - supports-color - dev: false - /mdast-util-gfm-strikethrough@2.0.0: - resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + mdast-util-gfm-strikethrough@2.0.0: dependencies: - '@types/mdast': 4.0.3 - mdast-util-from-markdown: 2.0.0 + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.1 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color - dev: false - /mdast-util-gfm-table@2.0.0: - resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + mdast-util-gfm-table@2.0.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 devlop: 1.1.0 markdown-table: 3.0.3 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.1 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color - dev: false - /mdast-util-gfm-task-list-item@2.0.0: - resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + mdast-util-gfm-task-list-item@2.0.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.1 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color - dev: false - /mdast-util-gfm@3.0.0: - resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==} + mdast-util-gfm@3.0.0: dependencies: - mdast-util-from-markdown: 2.0.0 - mdast-util-gfm-autolink-literal: 2.0.0 + mdast-util-from-markdown: 2.0.1 + mdast-util-gfm-autolink-literal: 2.0.1 mdast-util-gfm-footnote: 2.0.0 mdast-util-gfm-strikethrough: 2.0.0 mdast-util-gfm-table: 2.0.0 @@ -5497,119 +8917,83 @@ packages: mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color - dev: false - /mdast-util-mdx-expression@2.0.0: - resolution: {integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==} + mdast-util-mdx-expression@2.0.1: dependencies: - '@types/estree-jsx': 1.0.3 - '@types/hast': 3.0.0 - '@types/mdast': 4.0.3 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.1 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color - dev: false - /mdast-util-mdx-jsx@3.0.0: - resolution: {integrity: sha512-XZuPPzQNBPAlaqsTTgRrcJnyFbSOBovSadFgbFu8SnuNgm+6Bdx1K+IWoitsmj6Lq6MNtI+ytOqwN70n//NaBA==} + mdast-util-mdx-jsx@3.1.3: dependencies: - '@types/estree-jsx': 1.0.3 - '@types/hast': 3.0.0 - '@types/mdast': 4.0.3 - '@types/unist': 3.0.0 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.1 mdast-util-to-markdown: 2.1.0 parse-entities: 4.0.1 - stringify-entities: 4.0.3 - unist-util-remove-position: 5.0.0 + stringify-entities: 4.0.4 unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 transitivePeerDependencies: - supports-color - dev: false - /mdast-util-mdxjs-esm@2.0.1: - resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + mdast-util-mdxjs-esm@2.0.1: dependencies: - '@types/estree-jsx': 1.0.3 - '@types/hast': 3.0.0 - '@types/mdast': 4.0.3 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.1 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color - dev: false - /mdast-util-phrasing@4.0.0: - resolution: {integrity: sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA==} + mdast-util-phrasing@4.1.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 unist-util-is: 6.0.0 - dev: false - /mdast-util-to-hast@13.0.2: - resolution: {integrity: sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==} + mdast-util-to-hast@13.2.0: dependencies: - '@types/hast': 3.0.0 - '@types/mdast': 4.0.3 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 '@ungap/structured-clone': 1.2.0 devlop: 1.1.0 micromark-util-sanitize-uri: 2.0.0 trim-lines: 3.0.1 unist-util-position: 5.0.0 unist-util-visit: 5.0.0 - dev: false + vfile: 6.0.3 - /mdast-util-to-markdown@2.1.0: - resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} + mdast-util-to-markdown@2.1.0: dependencies: - '@types/mdast': 4.0.3 - '@types/unist': 3.0.0 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 longest-streak: 3.1.0 - mdast-util-phrasing: 4.0.0 + mdast-util-phrasing: 4.1.0 mdast-util-to-string: 4.0.0 micromark-util-decode-string: 2.0.0 unist-util-visit: 5.0.0 zwitch: 2.0.4 - dev: false - /mdast-util-to-string@4.0.0: - resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + mdast-util-to-string@4.0.0: dependencies: - '@types/mdast': 4.0.3 - dev: false + '@types/mdast': 4.0.4 - /meow@6.1.1: - resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} - engines: {node: '>=8'} - dependencies: - '@types/minimist': 1.2.2 - camelcase-keys: 6.2.2 - decamelize-keys: 1.1.1 - hard-rejection: 2.1.0 - minimist-options: 4.1.0 - normalize-package-data: 2.5.0 - read-pkg-up: 7.0.1 - redent: 3.0.0 - trim-newlines: 3.0.1 - type-fest: 0.13.1 - yargs-parser: 18.1.3 - dev: true - - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + merge-stream@2.0.0: {} - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + merge2@1.4.1: {} - /micromark-core-commonmark@2.0.0: - resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==} + micromark-core-commonmark@2.0.1: dependencies: decode-named-character-reference: 1.0.2 devlop: 1.1.0 @@ -5618,41 +9002,35 @@ packages: micromark-factory-space: 2.0.0 micromark-factory-title: 2.0.0 micromark-factory-whitespace: 2.0.0 - micromark-util-character: 2.0.1 + micromark-util-character: 2.1.0 micromark-util-chunked: 2.0.0 micromark-util-classify-character: 2.0.0 micromark-util-html-tag-name: 2.0.0 micromark-util-normalize-identifier: 2.0.0 micromark-util-resolve-all: 2.0.0 - micromark-util-subtokenize: 2.0.0 + micromark-util-subtokenize: 2.0.1 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-extension-gfm-autolink-literal@2.0.0: - resolution: {integrity: sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==} + micromark-extension-gfm-autolink-literal@2.1.0: dependencies: - micromark-util-character: 2.0.1 + micromark-util-character: 2.1.0 micromark-util-sanitize-uri: 2.0.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-extension-gfm-footnote@2.0.0: - resolution: {integrity: sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==} + micromark-extension-gfm-footnote@2.1.0: dependencies: devlop: 1.1.0 - micromark-core-commonmark: 2.0.0 + micromark-core-commonmark: 2.0.1 micromark-factory-space: 2.0.0 - micromark-util-character: 2.0.1 + micromark-util-character: 2.1.0 micromark-util-normalize-identifier: 2.0.0 micromark-util-sanitize-uri: 2.0.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-extension-gfm-strikethrough@2.0.0: - resolution: {integrity: sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==} + micromark-extension-gfm-strikethrough@2.1.0: dependencies: devlop: 1.1.0 micromark-util-chunked: 2.0.0 @@ -5660,187 +9038,139 @@ packages: micromark-util-resolve-all: 2.0.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-extension-gfm-table@2.0.0: - resolution: {integrity: sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==} + micromark-extension-gfm-table@2.1.0: dependencies: devlop: 1.1.0 micromark-factory-space: 2.0.0 - micromark-util-character: 2.0.1 + micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-extension-gfm-tagfilter@2.0.0: - resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + micromark-extension-gfm-tagfilter@2.0.0: dependencies: micromark-util-types: 2.0.0 - dev: false - /micromark-extension-gfm-task-list-item@2.0.1: - resolution: {integrity: sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==} + micromark-extension-gfm-task-list-item@2.1.0: dependencies: devlop: 1.1.0 micromark-factory-space: 2.0.0 - micromark-util-character: 2.0.1 + micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-extension-gfm@3.0.0: - resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + micromark-extension-gfm@3.0.0: dependencies: - micromark-extension-gfm-autolink-literal: 2.0.0 - micromark-extension-gfm-footnote: 2.0.0 - micromark-extension-gfm-strikethrough: 2.0.0 - micromark-extension-gfm-table: 2.0.0 + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.0 micromark-extension-gfm-tagfilter: 2.0.0 - micromark-extension-gfm-task-list-item: 2.0.1 + micromark-extension-gfm-task-list-item: 2.1.0 micromark-util-combine-extensions: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-factory-destination@2.0.0: - resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} + micromark-factory-destination@2.0.0: dependencies: - micromark-util-character: 2.0.1 + micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-factory-label@2.0.0: - resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} + micromark-factory-label@2.0.0: dependencies: devlop: 1.1.0 - micromark-util-character: 2.0.1 + micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-factory-space@2.0.0: - resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} + micromark-factory-space@2.0.0: dependencies: - micromark-util-character: 2.0.1 + micromark-util-character: 2.1.0 micromark-util-types: 2.0.0 - dev: false - /micromark-factory-title@2.0.0: - resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} + micromark-factory-title@2.0.0: dependencies: micromark-factory-space: 2.0.0 - micromark-util-character: 2.0.1 + micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-factory-whitespace@2.0.0: - resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} + micromark-factory-whitespace@2.0.0: dependencies: micromark-factory-space: 2.0.0 - micromark-util-character: 2.0.1 + micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-util-character@2.0.1: - resolution: {integrity: sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==} + micromark-util-character@2.1.0: dependencies: micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-util-chunked@2.0.0: - resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} + micromark-util-chunked@2.0.0: dependencies: micromark-util-symbol: 2.0.0 - dev: false - /micromark-util-classify-character@2.0.0: - resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} + micromark-util-classify-character@2.0.0: dependencies: - micromark-util-character: 2.0.1 + micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-util-combine-extensions@2.0.0: - resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} + micromark-util-combine-extensions@2.0.0: dependencies: micromark-util-chunked: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-util-decode-numeric-character-reference@2.0.1: - resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} + micromark-util-decode-numeric-character-reference@2.0.1: dependencies: micromark-util-symbol: 2.0.0 - dev: false - /micromark-util-decode-string@2.0.0: - resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} + micromark-util-decode-string@2.0.0: dependencies: decode-named-character-reference: 1.0.2 - micromark-util-character: 2.0.1 + micromark-util-character: 2.1.0 micromark-util-decode-numeric-character-reference: 2.0.1 micromark-util-symbol: 2.0.0 - dev: false - /micromark-util-encode@2.0.0: - resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} - dev: false + micromark-util-encode@2.0.0: {} - /micromark-util-html-tag-name@2.0.0: - resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} - dev: false + micromark-util-html-tag-name@2.0.0: {} - /micromark-util-normalize-identifier@2.0.0: - resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} + micromark-util-normalize-identifier@2.0.0: dependencies: micromark-util-symbol: 2.0.0 - dev: false - /micromark-util-resolve-all@2.0.0: - resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} + micromark-util-resolve-all@2.0.0: dependencies: micromark-util-types: 2.0.0 - dev: false - /micromark-util-sanitize-uri@2.0.0: - resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + micromark-util-sanitize-uri@2.0.0: dependencies: - micromark-util-character: 2.0.1 + micromark-util-character: 2.1.0 micromark-util-encode: 2.0.0 micromark-util-symbol: 2.0.0 - dev: false - /micromark-util-subtokenize@2.0.0: - resolution: {integrity: sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==} + micromark-util-subtokenize@2.0.1: dependencies: devlop: 1.1.0 micromark-util-chunked: 2.0.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - dev: false - /micromark-util-symbol@2.0.0: - resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} - dev: false + micromark-util-symbol@2.0.0: {} - /micromark-util-types@2.0.0: - resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} - dev: false + micromark-util-types@2.0.0: {} - /micromark@4.0.0: - resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} + micromark@4.0.0: dependencies: - '@types/debug': 4.1.8 - debug: 4.3.4 + '@types/debug': 4.1.12 + debug: 4.3.7 decode-named-character-reference: 1.0.2 devlop: 1.1.0 - micromark-core-commonmark: 2.0.0 + micromark-core-commonmark: 2.0.1 micromark-factory-space: 2.0.0 - micromark-util-character: 2.0.1 + micromark-util-character: 2.1.0 micromark-util-chunked: 2.0.0 micromark-util-combine-extensions: 2.0.0 micromark-util-decode-numeric-character-reference: 2.0.1 @@ -5848,495 +9178,274 @@ packages: micromark-util-normalize-identifier: 2.0.0 micromark-util-resolve-all: 2.0.0 micromark-util-sanitize-uri: 2.0.0 - micromark-util-subtokenize: 2.0.0 + micromark-util-subtokenize: 2.0.1 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 transitivePeerDependencies: - supports-color - dev: false - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + micromatch@4.0.8: dependencies: - braces: 3.0.2 + braces: 3.0.3 picomatch: 2.3.1 - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: false + mime-db@1.52.0: {} - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 - dev: false - - /mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} - engines: {node: '>=10.0.0'} - hasBin: true - dev: false - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true + mimic-fn@2.1.0: {} - /mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - dev: true + mimic-fn@4.0.0: {} - /min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - dev: true + mimic-function@5.0.1: {} - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - /minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: false - - /minimatch@9.0.1: - resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} - engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.1: dependencies: brace-expansion: 2.0.1 - dev: false - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 - /minimist-options@4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} - dependencies: - arrify: 1.0.1 - is-plain-obj: 1.1.0 - kind-of: 6.0.3 - dev: true - - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - /minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} - engines: {node: '>=16 || 14 >=14.17'} - - /mixme@0.5.9: - resolution: {integrity: sha512-VC5fg6ySUscaWUpI4gxCBTQMH2RdUpNrk+MsbpCYtIvf9SBJdiUey4qE7BXviJsJR4nDQxCZ+3yaYNW3guz/Pw==} - engines: {node: '>= 8.0.0'} - dev: true + minimist@1.2.8: {} - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - dependencies: - minimist: 1.2.8 - dev: false + minipass@7.1.2: {} - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + ms@2.1.3: {} - /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + mz@2.7.0: dependencies: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 - /nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true - - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true + nanoid@3.3.7: {} - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true + natural-compare@1.4.0: {} - /neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: false + negotiator@0.6.3: {} - /next-auth@4.24.5(next@14.1.0)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-3RafV3XbfIKk6rF6GlLE4/KxjTcuMCifqrmD+98ejFq73SRoj2rmzoca8u764977lH/Q7jo6Xu6yM+Re1Mz/Og==} - peerDependencies: - next: ^12.2.5 || ^13 || ^14 - nodemailer: ^6.6.5 - react: ^17.0.2 || ^18 - react-dom: ^17.0.2 || ^18 - peerDependenciesMeta: - nodemailer: - optional: true - dependencies: - '@babel/runtime': 7.23.7 - '@panva/hkdf': 1.1.1 - cookie: 0.5.0 - jose: 4.15.4 - next: 14.1.0(@babel/core@7.22.17)(react-dom@18.2.0)(react@18.2.0) - oauth: 0.9.15 - openid-client: 5.6.2 - preact: 10.19.3 - preact-render-to-string: 5.2.6(preact@10.19.3) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - uuid: 8.3.2 - dev: false + neo-async@2.6.2: {} - /next-connect@0.13.0: - resolution: {integrity: sha512-f2G4edY01XomjCECSrgOpb/zzQinJO6Whd8Zds0+rLUYhj5cLwkh6FVvZsQCSSbxSc4k9nCwNuk5NLIhvO1gUA==} + next-auth@5.0.0-beta.25(next@15.0.1(@babel/core@7.24.5)(@playwright/test@1.47.2)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021): dependencies: - trouter: 3.2.1 - dev: false + '@auth/core': 0.37.2 + next: 15.0.1(@babel/core@7.24.5)(@playwright/test@1.47.2)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021) + react: 19.0.0-rc-69d4b800-20241021 - /next-remove-imports@1.0.12(webpack@5.89.0): - resolution: {integrity: sha512-3tdL6VuSykJ/mcUwxfjQ+Fd4OpEmrwWVHtLZ/fhNcSaToWCutUp7nrfIww7/4CURe9I7BDCQE9AWl4fkY3YZOQ==} + next-remove-imports@1.0.12(webpack@5.94.0): dependencies: - '@babel/core': 7.22.17 - babel-loader: 9.1.3(@babel/core@7.22.17)(webpack@5.89.0) - babel-plugin-transform-remove-imports: 1.7.0(@babel/core@7.22.17) + '@babel/core': 7.25.2 + babel-loader: 9.2.1(@babel/core@7.25.2)(webpack@5.94.0) + babel-plugin-transform-remove-imports: 1.8.0(@babel/core@7.25.2) transitivePeerDependencies: - supports-color - webpack - dev: false - /next-themes@0.2.1(next@14.1.0)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A==} - peerDependencies: - next: '*' - react: '*' - react-dom: '*' + next-safe-action@7.9.3(next@15.0.1(@babel/core@7.24.5)(@playwright/test@1.47.2)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021))(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(zod@3.23.8): dependencies: - next: 14.1.0(@babel/core@7.22.17)(react-dom@18.2.0)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false + next: 15.0.1(@babel/core@7.24.5)(@playwright/test@1.47.2)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021) + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + optionalDependencies: + zod: 3.23.8 - /next@14.1.0(@babel/core@7.22.17)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q==} - engines: {node: '>=18.17.0'} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - react: ^18.2.0 - react-dom: ^18.2.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - sass: - optional: true + next-themes@0.3.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021): + dependencies: + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + + next@14.2.3(@babel/core@7.24.5)(@playwright/test@1.47.2)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021): dependencies: - '@next/env': 14.1.0 - '@swc/helpers': 0.5.2 + '@next/env': 14.2.3 + '@swc/helpers': 0.5.5 busboy: 1.6.0 - caniuse-lite: 1.0.30001587 + caniuse-lite: 1.0.30001663 graceful-fs: 4.2.11 postcss: 8.4.31 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.22.17)(react@18.2.0) + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + styled-jsx: 5.1.1(@babel/core@7.24.5)(react@19.0.0-rc-69d4b800-20241021) optionalDependencies: - '@next/swc-darwin-arm64': 14.1.0 - '@next/swc-darwin-x64': 14.1.0 - '@next/swc-linux-arm64-gnu': 14.1.0 - '@next/swc-linux-arm64-musl': 14.1.0 - '@next/swc-linux-x64-gnu': 14.1.0 - '@next/swc-linux-x64-musl': 14.1.0 - '@next/swc-win32-arm64-msvc': 14.1.0 - '@next/swc-win32-ia32-msvc': 14.1.0 - '@next/swc-win32-x64-msvc': 14.1.0 + '@next/swc-darwin-arm64': 14.2.3 + '@next/swc-darwin-x64': 14.2.3 + '@next/swc-linux-arm64-gnu': 14.2.3 + '@next/swc-linux-arm64-musl': 14.2.3 + '@next/swc-linux-x64-gnu': 14.2.3 + '@next/swc-linux-x64-musl': 14.2.3 + '@next/swc-win32-arm64-msvc': 14.2.3 + '@next/swc-win32-ia32-msvc': 14.2.3 + '@next/swc-win32-x64-msvc': 14.2.3 + '@playwright/test': 1.47.2 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - dev: false - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + next@15.0.1(@babel/core@7.24.5)(@playwright/test@1.47.2)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021): dependencies: - whatwg-url: 5.0.0 - dev: false - - /node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + '@next/env': 15.0.1 + '@swc/counter': 0.1.3 + '@swc/helpers': 0.5.13 + busboy: 1.6.0 + caniuse-lite: 1.0.30001663 + postcss: 8.4.31 + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) + styled-jsx: 5.1.6(@babel/core@7.24.5)(react@19.0.0-rc-69d4b800-20241021) + optionalDependencies: + '@next/swc-darwin-arm64': 15.0.1 + '@next/swc-darwin-x64': 15.0.1 + '@next/swc-linux-arm64-gnu': 15.0.1 + '@next/swc-linux-arm64-musl': 15.0.1 + '@next/swc-linux-x64-gnu': 15.0.1 + '@next/swc-linux-x64-musl': 15.0.1 + '@next/swc-win32-arm64-msvc': 15.0.1 + '@next/swc-win32-x64-msvc': 15.0.1 + '@playwright/test': 1.47.2 + sharp: 0.33.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros - /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - dev: false + node-releases@2.0.18: {} - /nopt@7.2.0: - resolution: {integrity: sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true + nopt@7.2.1: dependencies: abbrev: 2.0.0 - dev: false - /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.8 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 - dev: true - - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} + normalize-path@3.0.0: {} - /normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-range@0.1.2: {} - /not@0.1.0: - resolution: {integrity: sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA==} - dev: false + not@0.1.0: {} - /npm-run-path@5.1.0: - resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + npm-run-path@5.3.0: dependencies: path-key: 4.0.0 - dev: true - /nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + nth-check@2.1.1: dependencies: boolbase: 1.0.0 - dev: false - /oauth@0.9.15: - resolution: {integrity: sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==} - dev: false - - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} + oauth4webapi@2.17.0: {} - /object-hash@2.2.0: - resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} - engines: {node: '>= 6'} - dev: false + oauth4webapi@3.1.2: {} - /object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} + object-assign@4.1.1: {} - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + object-hash@3.0.0: {} - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true + object-inspect@1.13.2: {} - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} + object-is@1.1.6: dependencies: - call-bind: 1.0.5 + 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.7: - resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} - engines: {node: '>= 0.4'} + object-keys@1.1.1: {} + + object.assign@4.1.5: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true + has-symbols: 1.0.3 + object-keys: 1.1.1 - /object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} - engines: {node: '>= 0.4'} + object.entries@1.1.8: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true + es-object-atoms: 1.0.0 - /object.groupby@1.0.1: - resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + object.fromentries@2.0.8: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - dev: true + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 - /object.hasown@1.1.3: - resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} + object.groupby@1.0.3: dependencies: + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true + es-abstract: 1.23.3 - /object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} - engines: {node: '>= 0.4'} + object.values@1.2.0: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true + es-object-atoms: 1.0.0 - /oidc-token-hash@5.0.3: - resolution: {integrity: sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==} - engines: {node: ^10.13.0 || >=12.0.0} - dev: false - - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 - dev: true - /onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} + onetime@6.0.0: dependencies: mimic-fn: 4.0.0 - dev: true - /openid-client@5.6.2: - resolution: {integrity: sha512-TIVimoK/fAvpiISLcoGZyNJx2TOfd5AE6TXn58FFj6Y8qbU/jqky54Aws7sYKuCph1bLPWSRUa1r/Rd6K21bhg==} + onetime@7.0.0: dependencies: - jose: 4.15.4 - lru-cache: 6.0.0 - object-hash: 2.2.0 - oidc-token-hash: 5.0.3 - dev: false + mimic-function: 5.0.1 - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} + optionator@0.9.4: 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 - - /os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - dev: true - - /outdent@0.5.0: - resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} - dev: true - - /p-filter@2.1.0: - resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} - engines: {node: '>=8'} - dependencies: - p-map: 2.1.0 - dev: true + word-wrap: 1.2.5 - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + ora@5.4.1: dependencies: - p-try: 2.2.0 - dev: true + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - /p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - yocto-queue: 1.0.0 - dev: false - - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + p-limit@4.0.0: dependencies: - p-limit: 2.3.0 - dev: true + yocto-queue: 1.1.1 - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - dev: true - /p-locate@6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-locate@6.0.0: dependencies: p-limit: 4.0.0 - dev: false - /p-map@2.1.0: - resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} - engines: {node: '>=6'} - dev: true - - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true + package-json-from-dist@1.0.0: {} - /papaparse@5.4.1: - resolution: {integrity: sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw==} - dev: false + papaparse@5.4.1: {} - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + parent-module@1.0.1: dependencies: callsites: 3.1.0 - dev: true - /parse-entities@4.0.1: - resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} + parse-entities@4.0.1: dependencies: - '@types/unist': 2.0.8 + '@types/unist': 2.0.11 character-entities: 2.0.2 character-entities-legacy: 3.0.0 character-reference-invalid: 2.0.1 @@ -6344,661 +9453,332 @@ packages: is-alphanumerical: 2.0.1 is-decimal: 2.0.1 is-hexadecimal: 2.0.1 - dev: false - - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - dependencies: - '@babel/code-frame': 7.22.13 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - dev: true - /parse-numeric-range@1.3.0: - resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} - dev: false - - /parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - dev: false + parse-numeric-range@1.3.0: {} - /parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + parse5@7.1.2: dependencies: entities: 4.5.0 - dev: false - /parseley@0.12.1: - resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==} + parseley@0.12.1: dependencies: leac: 0.6.0 peberminta: 0.9.0 - dev: false - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true - - /path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: false + path-exists@4.0.0: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} + path-exists@5.0.0: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} + path-key@3.1.1: {} - /path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - dev: true + path-key@4.0.0: {} - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-parse@1.0.7: {} - /path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} - engines: {node: '>=16 || 14 >=14.17'} + path-scurry@1.11.1: dependencies: - lru-cache: 10.2.0 - minipass: 7.0.4 + lru-cache: 10.4.3 + minipass: 7.1.2 - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true - - /peberminta@0.9.0: - resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} - dev: false - - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + peberminta@0.9.0: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - /pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} - hasBin: true - dev: true + picocolors@1.1.0: {} - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} + picomatch@2.3.1: {} - /pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - dev: true + pidtree@0.6.0: {} - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} + pify@2.3.0: {} - /pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - dev: true + pirates@4.0.6: {} - /pkg-dir@7.0.0: - resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} - engines: {node: '>=14.16'} + pkg-dir@7.0.0: dependencies: find-up: 6.3.0 - dev: false - /playwright-core@1.41.1: - resolution: {integrity: sha512-/KPO5DzXSMlxSX77wy+HihKGOunh3hqndhqeo/nMxfigiKzogn8kfL0ZBDu0L1RKgan5XHCPmn6zXd2NUJgjhg==} - engines: {node: '>=16'} - hasBin: true - dev: true + playwright-core@1.47.2: {} - /playwright@1.41.1: - resolution: {integrity: sha512-gdZAWG97oUnbBdRL3GuBvX3nDDmUOuqzV/D24dytqlKt+eI5KbwusluZRGljx1YoJKZ2NRPaeWiFTeGZO7SosQ==} - engines: {node: '>=16'} - hasBin: true + playwright@1.47.2: dependencies: - playwright-core: 1.41.1 + playwright-core: 1.47.2 optionalDependencies: fsevents: 2.3.2 - dev: true - /postcss-import@15.1.0(postcss@8.4.31): - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 + possible-typed-array-names@1.0.0: {} + + postcss-import@15.1.0(postcss@8.4.47): dependencies: - postcss: 8.4.31 + postcss: 8.4.47 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - /postcss-js@4.0.1(postcss@8.4.31): - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 + postcss-js@4.0.1(postcss@8.4.47): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.31 + postcss: 8.4.47 - /postcss-load-config@4.0.1(postcss@8.4.31)(ts-node@10.9.1): - resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true + postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.6.2)): dependencies: - lilconfig: 2.1.0 - postcss: 8.4.31 - ts-node: 10.9.1(@types/node@20.5.6)(typescript@5.3.3) - yaml: 2.3.3 + lilconfig: 3.1.2 + yaml: 2.5.1 + optionalDependencies: + postcss: 8.4.47 + ts-node: 10.9.2(@types/node@22.5.5)(typescript@5.6.2) - /postcss-nested@6.0.1(postcss@8.4.31): - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 + postcss-nested@6.2.0(postcss@8.4.47): dependencies: - postcss: 8.4.31 - postcss-selector-parser: 6.0.13 + postcss: 8.4.47 + postcss-selector-parser: 6.1.2 - /postcss-selector-parser@6.0.13: - resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} - engines: {node: '>=4'} + postcss-selector-parser@6.1.2: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - /postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + postcss-value-parser@4.2.0: {} - /postcss@8.4.28: - resolution: {integrity: sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==} - engines: {node: ^10 || ^12 || >=14} + postcss@8.4.31: dependencies: - nanoid: 3.3.6 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: true + nanoid: 3.3.7 + picocolors: 1.1.0 + source-map-js: 1.2.1 - /postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} + postcss@8.4.47: dependencies: nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 + picocolors: 1.1.0 + source-map-js: 1.2.1 - /preact-render-to-string@5.2.6(preact@10.19.3): - resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==} - peerDependencies: - preact: '>=10' + preact-render-to-string@5.2.3(preact@10.11.3): dependencies: - preact: 10.19.3 + preact: 10.11.3 pretty-format: 3.8.0 - dev: false - /preact@10.19.3: - resolution: {integrity: sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ==} - dev: false - - /preferred-pm@3.0.3: - resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} - engines: {node: '>=10'} - dependencies: - find-up: 5.0.0 - find-yarn-workspace-root2: 1.2.16 - path-exists: 4.0.0 - which-pm: 2.0.0 - dev: true + preact@10.11.3: {} - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true + prelude-ls@1.2.1: {} - /prettier-plugin-tailwindcss@0.5.11(prettier@3.2.5): - resolution: {integrity: sha512-AvI/DNyMctyyxGOjyePgi/gqj5hJYClZ1avtQvLlqMT3uDZkRbi4HhGUpok3DRzv9z7Lti85Kdj3s3/1CeNI0w==} - engines: {node: '>=14.21.3'} - peerDependencies: - '@ianvs/prettier-plugin-sort-imports': '*' - '@prettier/plugin-pug': '*' - '@shopify/prettier-plugin-liquid': '*' - '@trivago/prettier-plugin-sort-imports': '*' - 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-style-order: '*' - prettier-plugin-svelte: '*' - prettier-plugin-twig-melody: '*' - 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 - 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-style-order: - optional: true - prettier-plugin-svelte: - optional: true - prettier-plugin-twig-melody: - optional: true + prettier-linter-helpers@1.0.0: dependencies: - prettier: 3.2.5 - dev: true + fast-diff: 1.3.0 - /prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} - hasBin: true - dev: true + prettier-plugin-tailwindcss@0.6.6(prettier@3.3.3): + dependencies: + prettier: 3.3.3 - /prettier@3.2.5: - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} - engines: {node: '>=14'} - hasBin: true - dev: true + prettier@3.3.3: {} - /pretty-format@3.8.0: - resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==} - dev: false + pretty-format@3.8.0: {} - /prisma@5.10.2: - resolution: {integrity: sha512-hqb/JMz9/kymRE25pMWCxkdyhbnIWrq+h7S6WysJpdnCvhstbJSNP/S6mScEcqiB8Qv2F+0R3yG+osRaWqZacQ==} - engines: {node: '>=16.13'} - hasBin: true - requiresBuild: true + prisma@5.16.1: dependencies: - '@prisma/engines': 5.10.2 + '@prisma/engines': 5.16.1 - /progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - dev: false + prismjs@1.29.0: {} - /prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - /property-information@6.2.0: - resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==} - dev: false - - /proto-list@1.2.4: - resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} - dev: false + property-information@6.5.0: {} - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: false + proto-list@1.2.4: {} - /pseudomap@1.0.2: - resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - dev: true + proxy-from-env@1.1.0: {} - /punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} - engines: {node: '>=6'} + punycode@2.3.1: {} - /qs@6.11.2: - resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} - engines: {node: '>=0.6'} + qs@6.13.0: dependencies: - side-channel: 1.0.4 - dev: false + side-channel: 1.0.6 - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - /quick-lru@4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} - engines: {node: '>=8'} - dev: true + queue-microtask@1.2.3: {} - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 - dev: false - /react-dom@18.2.0(react@18.2.0): - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} - peerDependencies: - react: ^18.2.0 + react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021): dependencies: - loose-envify: 1.4.0 - react: 18.2.0 - scheduler: 0.23.0 - dev: false - - /react-dropzone@14.2.3(react@18.2.0): - resolution: {integrity: sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug==} - engines: {node: '>= 10.13'} - peerDependencies: - react: '>= 16.8 || 18.0.0' + react: 19.0.0-rc-69d4b800-20241021 + scheduler: 0.25.0-rc-69d4b800-20241021 + + react-dropzone@14.2.3(react@19.0.0-rc-69d4b800-20241021): dependencies: attr-accept: 2.2.2 file-selector: 0.6.0 prop-types: 15.8.1 - react: 18.2.0 - dev: false + react: 19.0.0-rc-69d4b800-20241021 - /react-error-boundary@4.0.12(react@18.2.0): - resolution: {integrity: sha512-kJdxdEYlb7CPC1A0SeUY38cHpjuu6UkvzKiAmqmOFL21VRfMhOcWxTCBgLVCO0VEMh9JhFNcVaXlV4/BTpiwOA==} - peerDependencies: - react: '>=16.13.1' + react-email@3.0.1(@playwright/test@1.47.2)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021): dependencies: - '@babel/runtime': 7.23.7 - react: 18.2.0 - dev: false + '@babel/core': 7.24.5 + '@babel/parser': 7.24.5 + chalk: 4.1.2 + chokidar: 3.6.0 + commander: 11.1.0 + debounce: 2.0.0 + esbuild: 0.19.11 + glob: 10.3.4 + log-symbols: 4.1.0 + mime-types: 2.1.35 + next: 14.2.3(@babel/core@7.24.5)(@playwright/test@1.47.2)(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021) + normalize-path: 3.0.0 + ora: 5.4.1 + socket.io: 4.7.5 + transitivePeerDependencies: + - '@opentelemetry/api' + - '@playwright/test' + - babel-plugin-macros + - bufferutil + - react + - react-dom + - sass + - supports-color + - utf-8-validate - /react-hook-form@7.45.4(react@18.2.0): - resolution: {integrity: sha512-HGDV1JOOBPZj10LB3+OZgfDBTn+IeEsNOKiq/cxbQAIbKaiJUe/KV8DBUzsx0Gx/7IG/orWqRRm736JwOfUSWQ==} - engines: {node: '>=12.22.0'} - peerDependencies: - react: ^16.8.0 || ^17 || ^18 + react-error-boundary@4.0.13(react@19.0.0-rc-69d4b800-20241021): dependencies: - react: 18.2.0 - dev: false + '@babel/runtime': 7.25.6 + react: 19.0.0-rc-69d4b800-20241021 - /react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + react-hook-form@7.53.0(react@19.0.0-rc-69d4b800-20241021): + dependencies: + react: 19.0.0-rc-69d4b800-20241021 - /react-markdown@9.0.1(@types/react@18.0.27)(react@18.2.0): - resolution: {integrity: sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==} - peerDependencies: - '@types/react': '>=18' - react: '>=18' + react-is@16.13.1: {} + + react-markdown@9.0.1(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1): dependencies: - '@types/hast': 3.0.0 - '@types/react': 18.0.27 + '@types/hast': 3.0.4 + '@types/react': types-react@19.0.0-rc.1 devlop: 1.1.0 hast-util-to-jsx-runtime: 2.3.0 html-url-attributes: 3.0.0 - mdast-util-to-hast: 13.0.2 - react: 18.2.0 + mdast-util-to-hast: 13.2.0 + react: 19.0.0-rc-69d4b800-20241021 remark-parse: 11.0.0 - remark-rehype: 11.0.0 - unified: 11.0.4 + remark-rehype: 11.1.1 + unified: 11.0.5 unist-util-visit: 5.0.0 - vfile: 6.0.1 + vfile: 6.0.3 transitivePeerDependencies: - supports-color - dev: false - /react-paginate@8.2.0(react@18.2.0): - resolution: {integrity: sha512-sJCz1PW+9PNIjUSn919nlcRVuleN2YPoFBOvL+6TPgrH/3lwphqiSOgdrLafLdyLDxsgK+oSgviqacF4hxsDIw==} - peerDependencies: - react: ^16 || ^17 || ^18 + react-paginate@8.2.0(react@19.0.0-rc-69d4b800-20241021): dependencies: prop-types: 15.8.1 - react: 18.2.0 - dev: false + react: 19.0.0-rc-69d4b800-20241021 - /react-papaparse@4.4.0: - resolution: {integrity: sha512-xTEwHZYJ+1dh9mQDQjjwJXmWyX20DdZ52u+ddw75V+Xm5qsjXSvWmC7c8K82vRwMjKAOH2S9uFyGpHEyEztkUQ==} - engines: {node: '>=8', npm: '>=5'} + react-papaparse@4.4.0: dependencies: '@types/papaparse': 5.3.14 papaparse: 5.4.1 - dev: false - /react-remove-scroll-bar@2.3.4(@types/react@18.0.27)(react@18.2.0): - resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} - 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 + react-promise-suspense@0.3.4: dependencies: - '@types/react': 18.0.27 - react: 18.2.0 - react-style-singleton: 2.2.1(@types/react@18.0.27)(react@18.2.0) - tslib: 2.6.2 - dev: false + fast-deep-equal: 2.0.1 - /react-remove-scroll@2.5.5(@types/react@18.0.27)(react@18.2.0): - resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} - 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 + react-remove-scroll-bar@2.3.6(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1): dependencies: - '@types/react': 18.0.27 - react: 18.2.0 - react-remove-scroll-bar: 2.3.4(@types/react@18.0.27)(react@18.2.0) - react-style-singleton: 2.2.1(@types/react@18.0.27)(react@18.2.0) - tslib: 2.6.2 - use-callback-ref: 1.3.0(@types/react@18.0.27)(react@18.2.0) - use-sidecar: 1.1.2(@types/react@18.0.27)(react@18.2.0) - dev: false + react: 19.0.0-rc-69d4b800-20241021 + react-style-singleton: 2.2.1(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + tslib: 2.7.0 + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /react-style-singleton@2.2.1(@types/react@18.0.27)(react@18.2.0): - 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 + react-remove-scroll@2.5.7(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1): + dependencies: + react: 19.0.0-rc-69d4b800-20241021 + react-remove-scroll-bar: 2.3.6(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + react-style-singleton: 2.2.1(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + tslib: 2.7.0 + use-callback-ref: 1.3.2(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + use-sidecar: 1.1.2(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 + + react-style-singleton@2.2.1(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1): dependencies: - '@types/react': 18.0.27 get-nonce: 1.0.1 invariant: 2.2.4 - react: 18.2.0 - tslib: 2.6.2 - dev: false + react: 19.0.0-rc-69d4b800-20241021 + tslib: 2.7.0 + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} - engines: {node: '>=0.10.0'} - dependencies: - loose-envify: 1.4.0 - dev: false + react@19.0.0-rc-69d4b800-20241021: {} - /read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + read-cache@1.0.0: dependencies: pify: 2.3.0 - /read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - dev: true - - /read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} - dependencies: - '@types/normalize-package-data': 2.4.1 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - dev: true - - /read-yaml-file@1.1.0: - resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} - engines: {node: '>=6'} - dependencies: - graceful-fs: 4.2.11 - js-yaml: 3.14.1 - pify: 4.0.1 - strip-bom: 3.0.0 - dev: true - - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: false - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + readdirp@3.6.0: dependencies: picomatch: 2.3.1 - /redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} - dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - dev: true - - /reflect.getprototypeof@1.0.4: - resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} - engines: {node: '>= 0.4'} + reflect.getprototypeof@1.0.6: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - globalthis: 1.0.3 - which-builtin-type: 1.1.3 - dev: true + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + globalthis: 1.0.4 + which-builtin-type: 1.1.4 - /refractor@4.8.1: - resolution: {integrity: sha512-/fk5sI0iTgFYlmVGYVew90AoYnNMP6pooClx/XKqyeeCQXrL0Kvgn8V0VEht5ccdljbzzF1i3Q213gcntkRExg==} + refractor@4.8.1: dependencies: - '@types/hast': 2.3.5 - '@types/prismjs': 1.26.0 + '@types/hast': 2.3.10 + '@types/prismjs': 1.26.4 hastscript: 7.2.0 parse-entities: 4.0.1 - dev: false - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + regenerator-runtime@0.14.1: {} - /regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} - engines: {node: '>= 0.4'} + regexp.prototype.flags@1.5.2: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - set-function-name: 2.0.1 - dev: true + es-errors: 1.3.0 + set-function-name: 2.0.2 - /regexparam@1.3.0: - resolution: {integrity: sha512-6IQpFBv6e5vz1QAqI+V4k8P2e/3gRrqfCJ9FI+O1FLQTO+Uz6RXZEZOPmTJ6hlGj7gkERzY5BRCv09whKP96/g==} - engines: {node: '>=6'} - dev: false - - /rehype-attr@3.0.3: - resolution: {integrity: sha512-Up50Xfra8tyxnkJdCzLBIBtxOcB2M1xdeKe1324U06RAvSjYm7ULSeoM+b/nYPQPVd7jsXJ9+39IG1WAJPXONw==} - engines: {node: '>=16'} + rehype-attr@3.0.3: dependencies: - unified: 11.0.4 + unified: 11.0.5 unist-util-visit: 5.0.0 - dev: false - /rehype-autolink-headings@7.1.0: - resolution: {integrity: sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==} + rehype-autolink-headings@7.1.0: dependencies: - '@types/hast': 3.0.0 + '@types/hast': 3.0.4 '@ungap/structured-clone': 1.2.0 hast-util-heading-rank: 3.0.0 hast-util-is-element: 3.0.0 - unified: 11.0.4 + unified: 11.0.5 unist-util-visit: 5.0.0 - dev: false - /rehype-ignore@2.0.2: - resolution: {integrity: sha512-BpAT/3lU9DMJ2siYVD/dSR0A/zQgD6Fb+fxkJd4j+wDVy6TYbYpK+FZqu8eM9EuNKGvi4BJR7XTZ/+zF02Dq8w==} - engines: {node: '>=16'} + rehype-ignore@2.0.2: dependencies: hast-util-select: 6.0.2 - unified: 11.0.4 + unified: 11.0.5 unist-util-visit: 5.0.0 - dev: false - - /rehype-parse@8.0.5: - resolution: {integrity: sha512-Ds3RglaY/+clEX2U2mHflt7NlMA72KspZ0JLUJgBBLpRddBcEw3H8uYZQliQriku22NZpYMfjDdSgHcjxue24A==} - dependencies: - '@types/hast': 2.3.5 - hast-util-from-parse5: 7.1.2 - parse5: 6.0.1 - unified: 10.1.2 - dev: false - - /rehype-parse@9.0.0: - resolution: {integrity: sha512-WG7nfvmWWkCR++KEkZevZb/uw41E8TsH4DsY9UxsTbIXCVGbAs4S+r8FrQ+OtH5EEQAs+5UxKC42VinkmpA1Yw==} - dependencies: - '@types/hast': 3.0.0 - hast-util-from-html: 2.0.1 - unified: 11.0.4 - dev: false - /rehype-prism-plus@1.6.3: - resolution: {integrity: sha512-F6tn376zimnvy+xW0bSnryul+rvVL7NhDIkavc9kAuzDx5zIZW04A6jdXPkcFBhojcqZB8b6pHt6CLqiUx+Tbw==} + rehype-parse@9.0.0: dependencies: - hast-util-to-string: 2.0.0 - parse-numeric-range: 1.3.0 - refractor: 4.8.1 - rehype-parse: 8.0.5 - unist-util-filter: 4.0.1 - unist-util-visit: 4.1.2 - dev: false + '@types/hast': 3.0.4 + hast-util-from-html: 2.0.3 + unified: 11.0.5 - /rehype-prism-plus@2.0.0: - resolution: {integrity: sha512-FeM/9V2N7EvDZVdR2dqhAzlw5YI49m9Tgn7ZrYJeYHIahM6gcXpH0K1y2gNnKanZCydOMluJvX2cB9z3lhY8XQ==} + rehype-prism-plus@2.0.0: dependencies: hast-util-to-string: 3.0.0 parse-numeric-range: 1.3.0 @@ -7006,1288 +9786,733 @@ packages: rehype-parse: 9.0.0 unist-util-filter: 5.0.1 unist-util-visit: 5.0.0 - dev: false - /rehype-raw@7.0.0: - resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + rehype-raw@7.0.0: dependencies: - '@types/hast': 3.0.0 - hast-util-raw: 9.0.1 - vfile: 6.0.1 - dev: false + '@types/hast': 3.0.4 + hast-util-raw: 9.0.4 + vfile: 6.0.3 - /rehype-rewrite@4.0.2: - resolution: {integrity: sha512-rjLJ3z6fIV11phwCqHp/KRo8xuUCO8o9bFJCNw5o6O2wlLk6g8r323aRswdGBQwfXPFYeSuZdAjp4tzo6RGqEg==} - engines: {node: '>=16.0.0'} + rehype-rewrite@4.0.2: dependencies: hast-util-select: 6.0.2 - unified: 11.0.4 + unified: 11.0.5 unist-util-visit: 5.0.0 - dev: false - /rehype-sanitize@6.0.0: - resolution: {integrity: sha512-CsnhKNsyI8Tub6L4sm5ZFsme4puGfc6pYylvXo1AeqaGbjOYyzNv3qZPwvs0oMJ39eryyeOdmxwUIo94IpEhqg==} + rehype-sanitize@6.0.0: dependencies: - '@types/hast': 3.0.0 - hast-util-sanitize: 5.0.0 - dev: false + '@types/hast': 3.0.4 + hast-util-sanitize: 5.0.1 - /rehype-slug@6.0.0: - resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==} + rehype-slug@6.0.0: dependencies: - '@types/hast': 3.0.0 + '@types/hast': 3.0.4 github-slugger: 2.0.0 hast-util-heading-rank: 3.0.0 hast-util-to-string: 3.0.0 unist-util-visit: 5.0.0 - dev: false - /rehype-stringify@10.0.0: - resolution: {integrity: sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==} + rehype-stringify@10.0.0: dependencies: - '@types/hast': 3.0.0 - hast-util-to-html: 9.0.0 - unified: 11.0.4 - dev: false + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.3 + unified: 11.0.5 - /rehype@13.0.1: - resolution: {integrity: sha512-AcSLS2mItY+0fYu9xKxOu1LhUZeBZZBx8//5HKzF+0XP+eP8+6a5MXn2+DW2kfXR6Dtp1FEXMVrjyKAcvcU8vg==} + rehype@13.0.1: dependencies: - '@types/hast': 3.0.0 + '@types/hast': 3.0.4 rehype-parse: 9.0.0 rehype-stringify: 10.0.0 - unified: 11.0.4 - dev: false - - /relative-luminance@2.0.1: - resolution: {integrity: sha512-wFuITNthJilFPwkK7gNJcULxXBcfFZvZORsvdvxeOdO44wCeZnuQkf3nFFzOR/dpJNxYsdRZJLsepWbyKhnMww==} - dependencies: - esm: 3.2.25 - dev: false + unified: 11.0.5 - /remark-gfm@4.0.0: - resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==} + remark-gfm@4.0.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 mdast-util-gfm: 3.0.0 micromark-extension-gfm: 3.0.0 remark-parse: 11.0.0 remark-stringify: 11.0.0 - unified: 11.0.4 + unified: 11.0.5 transitivePeerDependencies: - supports-color - dev: false - /remark-parse@11.0.0: - resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + remark-github-blockquote-alert@1.2.1: + dependencies: + unist-util-visit: 5.0.0 + + remark-parse@11.0.0: dependencies: - '@types/mdast': 4.0.3 - mdast-util-from-markdown: 2.0.0 + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.1 micromark-util-types: 2.0.0 - unified: 11.0.4 + unified: 11.0.5 transitivePeerDependencies: - supports-color - dev: false - /remark-rehype@11.0.0: - resolution: {integrity: sha512-vx8x2MDMcxuE4lBmQ46zYUDfcFMmvg80WYX+UNLeG6ixjdCCLcw1lrgAukwBTuOFsS78eoAedHGn9sNM0w7TPw==} + remark-rehype@11.1.1: dependencies: - '@types/hast': 3.0.0 - '@types/mdast': 4.0.3 - mdast-util-to-hast: 13.0.2 - unified: 11.0.4 - vfile: 6.0.1 - dev: false + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.0 + unified: 11.0.5 + vfile: 6.0.3 - /remark-stringify@11.0.0: - resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + remark-stringify@11.0.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 mdast-util-to-markdown: 2.1.0 - unified: 11.0.4 - dev: false - - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true + unified: 11.0.5 - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: false + require-from-string@2.0.2: {} - /require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - dev: true - - /resend@3.2.0: - resolution: {integrity: sha512-lDHhexiFYPoLXy7zRlJ8D5eKxoXy6Tr9/elN3+Vv7PkUoYuSSD1fpiIfa/JYXEWyiyN2UczkCTLpkT8dDPJ4Pg==} - engines: {node: '>=18'} + resend@4.0.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021): dependencies: - '@react-email/render': 0.0.12 - dev: false - - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true - - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true + '@react-email/render': 0.0.17(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021) + transitivePeerDependencies: + - react + - react-dom - /resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - dev: true + resolve-from@4.0.0: {} - /resolve@1.22.4: - resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} - hasBin: true - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 + resolve-pkg-maps@1.0.0: {} - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true + resolve@1.22.8: dependencies: - is-core-module: 2.13.1 + is-core-module: 2.15.1 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 + resolve@2.0.0-next.5: dependencies: - is-core-module: 2.13.1 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /restore-cursor@4.0.0: - resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + restore-cursor@3.1.0: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - dev: true - /retry-request@7.0.2: - resolution: {integrity: sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==} - engines: {node: '>=14'} + restore-cursor@5.1.0: dependencies: - '@types/request': 2.48.12 - extend: 3.0.2 - teeny-request: 9.0.0 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - dev: false - - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - /rfdc@1.3.0: - resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} - dev: true + onetime: 7.0.0 + signal-exit: 4.1.0 - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true - dependencies: - glob: 7.1.7 - dev: true + reusify@1.0.4: {} - /rollup@2.78.0: - resolution: {integrity: sha512-4+YfbQC9QEVvKTanHhIAFVUFSRsezvQF8vFOJwtGfb9Bb+r014S+qryr9PSmw8x6sMnPkmFBGAvIFVQxvJxjtg==} - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.3 - dev: false + rfdc@1.4.1: {} - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - /safe-array-concat@1.0.1: - resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} - engines: {node: '>=0.4'} + safe-array-concat@1.1.2: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 - dev: true - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: false + safe-buffer@5.2.1: {} - /safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + safe-regex-test@1.0.3: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + es-errors: 1.3.0 is-regex: 1.1.4 - dev: true - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true + scheduler@0.25.0-rc-69d4b800-20241021: {} - /scheduler@0.23.0: - resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} - dependencies: - loose-envify: 1.4.0 - dev: false - - /schema-utils@3.3.0: - resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} - engines: {node: '>= 10.13.0'} + schema-utils@3.3.0: dependencies: '@types/json-schema': 7.0.15 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) - dev: false - /schema-utils@4.2.0: - resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} - engines: {node: '>= 12.13.0'} + schema-utils@4.2.0: dependencies: - '@types/json-schema': 7.0.12 - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - ajv-keywords: 5.1.0(ajv@8.12.0) - dev: false + '@types/json-schema': 7.0.15 + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) - /selderee@0.11.0: - resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} + selderee@0.11.0: dependencies: parseley: 0.12.1 - dev: false - - /semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - dev: true - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true + semver@6.3.1: {} - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 + semver@7.6.3: {} - /serialize-javascript@6.0.1: - resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} + serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 - dev: false - /set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - dev: true - - /set-function-length@1.1.1: - resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} - engines: {node: '>= 0.4'} + set-function-length@1.2.2: dependencies: - define-data-property: 1.1.1 - get-intrinsic: 1.2.2 + 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.1 + has-property-descriptors: 1.0.2 - /set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} - engines: {node: '>= 0.4'} + set-function-name@2.0.2: dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.4 + es-errors: 1.3.0 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.1 - dev: true + has-property-descriptors: 1.0.2 - /shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} + sharp@0.33.5: dependencies: - shebang-regex: 1.0.0 - dev: true + color: 4.2.3 + detect-libc: 2.0.3 + semver: 7.6.3 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-s390x': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-linuxmusl-arm64': 0.33.5 + '@img/sharp-linuxmusl-x64': 0.33.5 + '@img/sharp-wasm32': 0.33.5 + '@img/sharp-win32-ia32': 0.33.5 + '@img/sharp-win32-x64': 0.33.5 + optional: true - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - /shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - dev: true - - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} + shebang-regex@3.0.0: {} - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + side-channel@1.0.6: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - object-inspect: 1.13.1 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true + signal-exit@3.0.7: {} - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} + signal-exit@4.1.0: {} - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: true + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + optional: true - /slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} + slice-ansi@5.0.0: dependencies: ansi-styles: 6.2.1 is-fullwidth-code-point: 4.0.0 - dev: true - - /slugify@1.6.6: - resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==} - engines: {node: '>=8.0.0'} - dev: false - /smartwrap@2.0.2: - resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} - engines: {node: '>=6'} - hasBin: true - dependencies: - array.prototype.flat: 1.3.2 - breakword: 1.0.6 - grapheme-splitter: 1.0.4 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - yargs: 15.4.1 - dev: true - - /sonner@1.4.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-nvkTsIuOmi9e5Wz5If8ldasJjZNVfwiXYijBi2dbijvTQnQppvMcXTFNxL/NUFWlI2yJ1JX7TREDsg+gYm9WyA==} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 + slice-ansi@7.1.0: dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.0.0 - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} + slugify@1.6.6: {} - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + socket.io-adapter@2.5.5: dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - dev: false - - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: false - - /space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - dev: false + debug: 4.3.7 + ws: 8.17.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate - /spawndamnit@2.0.0: - resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} + socket.io-parser@4.2.4: dependencies: - cross-spawn: 5.1.0 - signal-exit: 3.0.7 - dev: true + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color - /spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + socket.io@4.7.5: dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.13 - dev: true - - /spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} - dev: true + accepts: 1.3.8 + base64id: 2.0.0 + cors: 2.8.5 + debug: 4.3.7 + engine.io: 6.5.5 + socket.io-adapter: 2.5.5 + socket.io-parser: 4.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + sonner@1.5.0(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021): dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.13 - dev: true + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) - /spdx-license-ids@3.0.13: - resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} - dev: true + source-map-js@1.2.1: {} - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true - - /stacktrace-parser@0.1.10: - resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} - engines: {node: '>=6'} + source-map-support@0.5.21: dependencies: - type-fest: 0.7.1 - dev: false + buffer-from: 1.1.2 + source-map: 0.6.1 - /stream-events@1.0.5: - resolution: {integrity: sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==} - dependencies: - stubs: 3.0.0 - dev: false + source-map@0.6.1: {} + + space-separated-tokens@2.0.2: {} - /stream-shift@1.0.3: - resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} - dev: false + stable-hash@0.0.4: {} - /stream-transform@2.1.3: - resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} + stop-iteration-iterator@1.0.0: dependencies: - mixme: 0.5.9 - dev: true + internal-slot: 1.0.7 - /streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - dev: false + streamsearch@1.1.0: {} - /string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - dev: true + string-argv@0.3.2: {} - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-width@4.2.3: 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'} + string-width@5.1.2: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 - /string.prototype.matchall@4.0.10: - resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} + string-width@7.2.0: + dependencies: + emoji-regex: 10.4.0 + get-east-asian-width: 1.2.0 + strip-ansi: 7.1.0 + + string.prototype.includes@2.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.3 + + string.prototype.matchall@4.0.11: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + 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.6 - regexp.prototype.flags: 1.5.1 - set-function-name: 2.0.1 - side-channel: 1.0.4 - dev: true - - /string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} - engines: {node: '>= 0.4'} + internal-slot: 1.0.7 + regexp.prototype.flags: 1.5.2 + set-function-name: 2.0.2 + side-channel: 1.0.6 + + string.prototype.repeat@1.0.0: dependencies: - call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true + es-abstract: 1.23.3 - /string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + string.prototype.trim@1.2.9: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + string.prototype.trimend@1.0.8: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true + es-object-atoms: 1.0.0 - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 - dev: false - /stringify-entities@4.0.3: - resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} + stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 - dev: false - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} + strip-ansi@7.1.0: dependencies: - ansi-regex: 6.0.1 - - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: true + ansi-regex: 6.1.0 - /strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - dev: true + strip-bom@3.0.0: {} - /strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - dependencies: - min-indent: 1.0.1 - dev: true + strip-final-newline@3.0.0: {} - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true + strip-json-comments@3.1.1: {} - /stripe@14.16.0: - resolution: {integrity: sha512-1gOr2LzafWV84cPIO5Md/QPh4XVPLKULVuRpBVOV3Plq3seiHmg/eeOktX+hDl8jpNZuORHYaUJGrNqrABLwdg==} - engines: {node: '>=12.*'} + stripe@17.2.1: dependencies: - '@types/node': 20.10.6 - qs: 6.11.2 - dev: false + '@types/node': 22.5.5 + qs: 6.13.0 - /strnum@1.0.5: - resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} - dev: false + strnum@1.0.5: {} - /stubs@3.0.0: - resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==} - dev: false + style-to-object@1.0.8: + dependencies: + inline-style-parser: 0.2.4 - /style-to-object@1.0.5: - resolution: {integrity: sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ==} + styled-jsx@5.1.1(@babel/core@7.24.5)(react@19.0.0-rc-69d4b800-20241021): dependencies: - inline-style-parser: 0.2.2 - dev: false + client-only: 0.0.1 + react: 19.0.0-rc-69d4b800-20241021 + optionalDependencies: + '@babel/core': 7.24.5 - /styled-jsx@5.1.1(@babel/core@7.22.17)(react@18.2.0): - 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 + styled-jsx@5.1.6(@babel/core@7.24.5)(react@19.0.0-rc-69d4b800-20241021): dependencies: - '@babel/core': 7.22.17 client-only: 0.0.1 - react: 18.2.0 - dev: false + react: 19.0.0-rc-69d4b800-20241021 + optionalDependencies: + '@babel/core': 7.24.5 - /sucrase@3.34.0: - resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} - engines: {node: '>=8'} - hasBin: true + sucrase@3.35.0: dependencies: - '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 7.1.6 + 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'} + supports-color@5.5.0: dependencies: has-flag: 3.0.0 - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + supports-color@8.1.1: dependencies: has-flag: 4.0.0 - dev: false - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} + supports-preserve-symlinks-flag@1.0.0: {} - /tailwind-merge@2.2.0: - resolution: {integrity: sha512-SqqhhaL0T06SW59+JVNfAqKdqLs0497esifRrZ7jOaefP3o64fdFNDMrAQWZFMxTLJPiHVjRLUywT8uFz1xNWQ==} + synckit@0.9.1: dependencies: - '@babel/runtime': 7.23.6 - dev: false + '@pkgr/core': 0.1.1 + tslib: 2.7.0 - /tailwindcss-animate@1.0.6(tailwindcss@3.4.1): - resolution: {integrity: sha512-4WigSGMvbl3gCCact62ZvOngA+PRqhAn7si3TQ3/ZuPuQZcIEtVap+ENSXbzWhpojKB8CpvnIsrwBu8/RnHtuw==} - peerDependencies: - tailwindcss: '>=3.0.0 || insiders' + tailwind-merge@2.5.2: {} + + tailwindcss-animate@1.0.7(tailwindcss@3.4.12(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.6.2))): dependencies: - tailwindcss: 3.4.1(ts-node@10.9.1) - dev: false + tailwindcss: 3.4.12(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.6.2)) - /tailwindcss@3.4.1(ts-node@10.9.1): - resolution: {integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==} - engines: {node: '>=14.0.0'} - hasBin: true + tailwindcss@3.4.12(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.6.2)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 - chokidar: 3.5.3 + 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.19.3 + jiti: 1.21.6 lilconfig: 2.1.0 - micromatch: 4.0.5 + micromatch: 4.0.8 normalize-path: 3.0.0 object-hash: 3.0.0 - picocolors: 1.0.0 - postcss: 8.4.31 - postcss-import: 15.1.0(postcss@8.4.31) - postcss-js: 4.0.1(postcss@8.4.31) - postcss-load-config: 4.0.1(postcss@8.4.31)(ts-node@10.9.1) - postcss-nested: 6.0.1(postcss@8.4.31) - postcss-selector-parser: 6.0.13 - resolve: 1.22.4 - sucrase: 3.34.0 + picocolors: 1.1.0 + postcss: 8.4.47 + postcss-import: 15.1.0(postcss@8.4.47) + postcss-js: 4.0.1(postcss@8.4.47) + postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.6.2)) + postcss-nested: 6.2.0(postcss@8.4.47) + postcss-selector-parser: 6.1.2 + resolve: 1.22.8 + sucrase: 3.35.0 transitivePeerDependencies: - ts-node - /tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - - /teeny-request@9.0.0: - resolution: {integrity: sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==} - engines: {node: '>=14'} - dependencies: - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - node-fetch: 2.7.0 - stream-events: 1.0.5 - uuid: 9.0.1 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /term-size@2.2.1: - resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} - engines: {node: '>=8'} - dev: true + tapable@2.2.1: {} - /terser-webpack-plugin@5.3.10(webpack@5.89.0): - resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true + terser-webpack-plugin@5.3.10(webpack@5.94.0): dependencies: - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 - serialize-javascript: 6.0.1 - terser: 5.26.0 - webpack: 5.89.0 - dev: false + serialize-javascript: 6.0.2 + terser: 5.33.0 + webpack: 5.94.0 - /terser@5.26.0: - resolution: {integrity: sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==} - engines: {node: '>=10'} - hasBin: true + terser@5.33.0: dependencies: - '@jridgewell/source-map': 0.3.5 - acorn: 8.11.3 + '@jridgewell/source-map': 0.3.6 + acorn: 8.12.1 commander: 2.20.3 source-map-support: 0.5.21 - dev: false - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true + text-table@0.2.0: {} - /thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} + thenify-all@1.6.0: dependencies: thenify: 3.3.1 - /thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + thenify@3.3.1: dependencies: any-promise: 1.3.0 - /tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} - dependencies: - os-tmpdir: 1.0.2 - dev: true - - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - dev: false + to-fast-properties@2.0.0: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: false - - /trim-lines@3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - dev: false - - /trim-newlines@3.0.1: - resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} - engines: {node: '>=8'} - dev: true - - /trough@2.1.0: - resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} - dev: false + trim-lines@3.0.1: {} - /trouter@3.2.1: - resolution: {integrity: sha512-oY3CmIiEYOe1YMEzh++I67lrNOUldtCeuLL0vRPydvQLHZpSJ03B5dgDFlpFsiriMq6e//NDjjopjUzXOztHow==} - engines: {node: '>=6'} - dependencies: - regexparam: 1.3.0 - dev: false + trough@2.2.0: {} - /ts-api-utils@1.0.3(typescript@5.3.3): - resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} - engines: {node: '>=16.13.0'} - peerDependencies: - typescript: '>=4.2.0' + ts-api-utils@1.3.0(typescript@5.6.2): dependencies: - typescript: 5.3.3 - dev: true + typescript: 5.6.2 - /ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + ts-interface-checker@0.1.13: {} - /ts-node@10.9.1(@types/node@20.5.6)(typescript@5.3.3): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true + ts-node@10.9.2(@types/node@22.5.5)(typescript@5.6.2): dependencies: '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 + '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.5.6 - acorn: 8.10.0 - acorn-walk: 8.3.0 + '@types/node': 22.5.5 + acorn: 8.12.1 + acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.3.3 + typescript: 5.6.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - /tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + tsconfig-paths@3.15.0: 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.7.0: {} - /tty-table@4.2.1: - resolution: {integrity: sha512-xz0uKo+KakCQ+Dxj1D/tKn2FSyreSYWzdkL/BYhgN6oMW808g8QRMuh1atAV9fjTPbWBjfbkKQpI/5rEcnAc7g==} - engines: {node: '>=8.0.0'} - hasBin: true - dependencies: - chalk: 4.1.2 - csv: 5.5.3 - kleur: 4.1.5 - smartwrap: 2.0.2 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - yargs: 17.7.2 - dev: true - - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - dev: true - - /type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} - dev: true - - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true - - /type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - dev: true - /type-fest@0.7.1: - resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} - engines: {node: '>=8'} - dev: false - - /type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - dev: true - - /type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} - engines: {node: '>=10'} - dev: true + type-fest@0.20.2: {} - /typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} - engines: {node: '>= 0.4'} + typed-array-buffer@1.0.2: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 - dev: true + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 - /typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} - engines: {node: '>= 0.4'} + typed-array-byte-length@1.0.1: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 - dev: true + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 - /typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} - engines: {node: '>= 0.4'} + typed-array-byte-offset@1.0.2: dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 - dev: true + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + typed-array-length@1.0.6: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 - is-typed-array: 1.1.12 - dev: true + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - hasBin: true + types-react@19.0.0-rc.1: + dependencies: + csstype: 3.1.3 - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + typescript-eslint@8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2): + dependencies: + '@typescript-eslint/eslint-plugin': 8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/parser': 8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/utils': 8.6.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - eslint + - supports-color + + typescript@5.6.2: {} + + unbox-primitive@1.0.2: dependencies: - call-bind: 1.0.5 + 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==} - /unified@10.1.2: - resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} - dependencies: - '@types/unist': 2.0.8 - bail: 2.0.2 - extend: 3.0.2 - is-buffer: 2.0.5 - is-plain-obj: 4.1.0 - trough: 2.1.0 - vfile: 5.3.7 - dev: false + undici-types@6.19.8: {} - /unified@11.0.4: - resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} + unified@11.0.5: dependencies: - '@types/unist': 3.0.0 + '@types/unist': 3.0.3 bail: 2.0.2 devlop: 1.1.0 extend: 3.0.2 is-plain-obj: 4.1.0 - trough: 2.1.0 - vfile: 6.0.1 - dev: false - - /unist-util-filter@4.0.1: - resolution: {integrity: sha512-RynicUM/vbOSTSiUK+BnaK9XMfmQUh6gyi7L6taNgc7FIf84GukXVV3ucGzEN/PhUUkdP5hb1MmXc+3cvPUm5Q==} - dependencies: - '@types/unist': 2.0.8 - unist-util-is: 5.2.1 - unist-util-visit-parents: 5.1.3 - dev: false + trough: 2.2.0 + vfile: 6.0.3 - /unist-util-filter@5.0.1: - resolution: {integrity: sha512-pHx7D4Zt6+TsfwylH9+lYhBhzyhEnCXs/lbq/Hstxno5z4gVdyc2WEW0asfjGKPyG4pEKrnBv5hdkO6+aRnQJw==} + unist-util-filter@5.0.1: dependencies: - '@types/unist': 3.0.0 + '@types/unist': 3.0.3 unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - dev: false - - /unist-util-is@5.2.1: - resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} - dependencies: - '@types/unist': 2.0.8 - dev: false - - /unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} - dependencies: - '@types/unist': 3.0.0 - dev: false - - /unist-util-position@5.0.0: - resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} - dependencies: - '@types/unist': 3.0.0 - dev: false - - /unist-util-remove-position@5.0.0: - resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} - dependencies: - '@types/unist': 3.0.0 - unist-util-visit: 5.0.0 - dev: false - /unist-util-stringify-position@3.0.3: - resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + unist-util-is@6.0.0: dependencies: - '@types/unist': 2.0.8 - dev: false + '@types/unist': 3.0.3 - /unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + unist-util-position@5.0.0: dependencies: - '@types/unist': 3.0.0 - dev: false + '@types/unist': 3.0.3 - /unist-util-visit-parents@5.1.3: - resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + unist-util-stringify-position@4.0.0: dependencies: - '@types/unist': 2.0.8 - unist-util-is: 5.2.1 - dev: false + '@types/unist': 3.0.3 - /unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + unist-util-visit-parents@6.0.1: dependencies: - '@types/unist': 3.0.0 + '@types/unist': 3.0.3 unist-util-is: 6.0.0 - dev: false - - /unist-util-visit@4.1.2: - resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} - dependencies: - '@types/unist': 2.0.8 - unist-util-is: 5.2.1 - unist-util-visit-parents: 5.1.3 - dev: false - /unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + unist-util-visit@5.0.0: dependencies: - '@types/unist': 3.0.0 + '@types/unist': 3.0.3 unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - dev: false - - /universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - dev: true - /update-browserslist-db@1.0.11(browserslist@4.21.10): - resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + update-browserslist-db@1.1.0(browserslist@4.23.3): dependencies: - browserslist: 4.21.10 - escalade: 3.1.1 - picocolors: 1.0.0 + browserslist: 4.23.3 + escalade: 3.2.0 + picocolors: 1.1.0 - /update-browserslist-db@1.0.13(browserslist@4.22.2): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + uri-js@4.4.1: dependencies: - browserslist: 4.22.2 - escalade: 3.1.1 - picocolors: 1.0.0 - dev: false + punycode: 2.3.1 - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + use-callback-ref@1.3.2(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1): dependencies: - punycode: 2.3.0 + react: 19.0.0-rc-69d4b800-20241021 + tslib: 2.7.0 + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /use-callback-ref@1.3.0(@types/react@18.0.27)(react@18.2.0): - resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} - 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 + use-debounce@10.0.3(react@19.0.0-rc-69d4b800-20241021): dependencies: - '@types/react': 18.0.27 - react: 18.2.0 - tslib: 2.6.2 - dev: false + react: 19.0.0-rc-69d4b800-20241021 - /use-sidecar@1.1.2(@types/react@18.0.27)(react@18.2.0): - 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 + use-sidecar@1.1.2(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1): dependencies: - '@types/react': 18.0.27 detect-node-es: 1.1.0 - react: 18.2.0 - tslib: 2.6.2 - dev: false - - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + react: 19.0.0-rc-69d4b800-20241021 + tslib: 2.7.0 + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: false + util-deprecate@1.0.2: {} - /uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - dev: false + uuid@9.0.1: {} - /v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + v8-compile-cache-lib@3.0.1: {} - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 - dev: true + vary@1.1.2: {} - /vaul@0.9.0(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-bZSySGbAHiTXmZychprnX/dE0EsSige88xtyyL3/MCRbrFotRPQZo7UdydGXZWw+CKbNOw5Ow8gwAo93/nB/Cg==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + vaul@1.1.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1): dependencies: - '@radix-ui/react-dialog': 1.0.5(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + '@radix-ui/react-dialog': 1.1.1(react-dom@19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021))(react@19.0.0-rc-69d4b800-20241021)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-69d4b800-20241021 + react-dom: 19.0.0-rc-69d4b800-20241021(react@19.0.0-rc-69d4b800-20241021) transitivePeerDependencies: - '@types/react' - '@types/react-dom' - dev: false - - /vfile-location@4.1.0: - resolution: {integrity: sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==} - dependencies: - '@types/unist': 2.0.8 - vfile: 5.3.7 - dev: false - - /vfile-location@5.0.2: - resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==} - dependencies: - '@types/unist': 3.0.0 - vfile: 6.0.1 - dev: false - /vfile-message@3.1.4: - resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} + vfile-location@5.0.3: dependencies: - '@types/unist': 2.0.8 - unist-util-stringify-position: 3.0.3 - dev: false + '@types/unist': 3.0.3 + vfile: 6.0.3 - /vfile-message@4.0.2: - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + vfile-message@4.0.2: dependencies: - '@types/unist': 3.0.0 + '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 - dev: false - - /vfile@5.3.7: - resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} - dependencies: - '@types/unist': 2.0.8 - is-buffer: 2.0.5 - unist-util-stringify-position: 3.0.3 - vfile-message: 3.1.4 - dev: false - /vfile@6.0.1: - resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} + vfile@6.0.3: dependencies: - '@types/unist': 3.0.0 - unist-util-stringify-position: 4.0.0 + '@types/unist': 3.0.3 vfile-message: 4.0.2 - dev: false - /watchpack@2.4.0: - resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} - engines: {node: '>=10.13.0'} + watchpack@2.4.2: dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - dev: false - - /wcag-contrast@3.0.0: - resolution: {integrity: sha512-RWbpg/S7FOXDCwqC2oFhN/vh8dHzj0OS6dpyOSDHyQFSmqmR+lAUStV/ziTT1GzDqL9wol+nZQB4vCi5yEak+w==} - dependencies: - relative-luminance: 2.0.1 - dev: false - /wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + wcwidth@1.0.1: dependencies: defaults: 1.0.4 - dev: true - /web-namespaces@2.0.1: - resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} - dev: false - - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: false + web-namespaces@2.0.1: {} - /webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - dev: false + webpack-sources@3.2.3: {} - /webpack@5.89.0: - resolution: {integrity: sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true + webpack@5.94.0: dependencies: - '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.5 - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/wasm-edit': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - acorn: 8.11.3 - acorn-import-assertions: 1.9.0(acorn@8.11.3) - browserslist: 4.22.2 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.15.0 - es-module-lexer: 1.4.1 + '@types/estree': 1.0.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + acorn: 8.12.1 + acorn-import-attributes: 1.9.5(acorn@8.12.1) + browserslist: 4.23.3 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.17.1 + es-module-lexer: 1.5.4 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -8298,38 +10523,26 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.89.0) - watchpack: 2.4.0 + terser-webpack-plugin: 5.3.10(webpack@5.94.0) + watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - dev: false - - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - dev: false - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 - dev: true - /which-builtin-type@1.1.3: - resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} - engines: {node: '>= 0.4'} + which-builtin-type@1.1.4: dependencies: function.prototype.name: 1.1.6 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-async-function: 2.0.0 is-date-object: 1.0.5 is-finalizationregistry: 1.0.2 @@ -8338,168 +10551,62 @@ packages: is-weakref: 1.0.2 isarray: 2.0.5 which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.13 - dev: true - - /which-collection@1.0.1: - resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} - dependencies: - is-map: 2.0.2 - is-set: 2.0.2 - is-weakmap: 2.0.1 - is-weakset: 2.0.2 - dev: true - - /which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - dev: true + which-collection: 1.0.2 + which-typed-array: 1.1.15 - /which-pm@2.0.0: - resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} - engines: {node: '>=8.15'} + which-collection@1.0.2: dependencies: - load-yaml-file: 0.2.0 - path-exists: 4.0.0 - dev: true + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.3 - /which-typed-array@1.1.13: - resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} - engines: {node: '>= 0.4'} + which-typed-array@1.1.15: dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.0 - dev: true - - /which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true + has-tostringtag: 1.0.2 - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - /wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: true + word-wrap@1.2.5: {} - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: 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'} + wrap-ansi@8.1.0: 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==} - - /y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - dev: true - - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true - - /yallist@2.1.2: - resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} - dev: true - - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: false - - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - /yaml@2.3.3: - resolution: {integrity: sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==} - engines: {node: '>= 14'} - - /yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} + wrap-ansi@9.0.0: dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - dev: true + ansi-styles: 6.2.1 + string-width: 7.2.0 + strip-ansi: 7.1.0 - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - dev: true + wrappy@1.0.2: {} - /yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} - dependencies: - cliui: 6.0.0 - decamelize: 1.2.0 - find-up: 4.1.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 4.2.3 - which-module: 2.0.1 - y18n: 4.0.3 - yargs-parser: 18.1.3 - dev: true + ws@8.17.1: {} - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - dependencies: - cliui: 8.0.1 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - dev: true + yallist@3.1.1: {} - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} + yaml@2.5.1: {} - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} + yn@3.1.1: {} - /yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} - engines: {node: '>=12.20'} - dev: false + yocto-queue@0.1.0: {} - /zod@3.22.4: - resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} - dev: false + yocto-queue@1.1.1: {} - /zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} - dev: false + zod@3.23.8: {} + + zwitch@2.0.4: {} diff --git a/prisma/migrations/20240616144143_faqmaker_dev16/migration.sql b/prisma/migrations/20240616144143_faqmaker_dev16/migration.sql new file mode 100644 index 000000000..0a7727e3e --- /dev/null +++ b/prisma/migrations/20240616144143_faqmaker_dev16/migration.sql @@ -0,0 +1,18 @@ +-- CreateTable +CREATE TABLE "Favorite" ( + "id" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "nodeId" TEXT NOT NULL, + "userId" TEXT NOT NULL, + + CONSTRAINT "Favorite_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "Favorite_userId_nodeId_key" ON "Favorite"("userId", "nodeId"); + +-- AddForeignKey +ALTER TABLE "Favorite" ADD CONSTRAINT "Favorite_nodeId_fkey" FOREIGN KEY ("nodeId") REFERENCES "Node"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Favorite" ADD CONSTRAINT "Favorite_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/prisma/migrations/20240623080816_faqmaker_dev17/migration.sql b/prisma/migrations/20240623080816_faqmaker_dev17/migration.sql new file mode 100644 index 000000000..d1bb86783 --- /dev/null +++ b/prisma/migrations/20240623080816_faqmaker_dev17/migration.sql @@ -0,0 +1,20 @@ +-- DropIndex +DROP INDEX "Answer_nodeId_idx"; + +-- DropIndex +DROP INDEX "Answer_userId_idx"; + +-- DropIndex +DROP INDEX "Question_nodeId_idx"; + +-- DropIndex +DROP INDEX "Question_userId_idx"; + +-- CreateIndex +CREATE INDEX "Answer_nodeId_userId_idx" ON "Answer"("nodeId", "userId"); + +-- CreateIndex +CREATE INDEX "Favorite_userId_nodeId_idx" ON "Favorite"("userId", "nodeId"); + +-- CreateIndex +CREATE INDEX "Question_nodeId_userId_idx" ON "Question"("nodeId", "userId"); diff --git a/prisma/migrations/20240624124858_faqmaker_dev18/migration.sql b/prisma/migrations/20240624124858_faqmaker_dev18/migration.sql new file mode 100644 index 000000000..da55d0bd3 --- /dev/null +++ b/prisma/migrations/20240624124858_faqmaker_dev18/migration.sql @@ -0,0 +1,42 @@ +/* + Warnings: + + - A unique constraint covering the columns `[email,domain,logo,customerId]` on the table `Tenant` will be added. If there are existing duplicate values, this will fail. + +*/ +-- DropIndex +DROP INDEX "Tenant_customerId_key"; + +-- DropIndex +DROP INDEX "Tenant_domain_key"; + +-- DropIndex +DROP INDEX "Tenant_email_key"; + +-- DropIndex +DROP INDEX "Tenant_logo_key"; + +-- CreateTable +CREATE TABLE "Reaction" ( + "id" TEXT NOT NULL, + "emoji" TEXT NOT NULL, + "nodeId" TEXT NOT NULL, + "userId" TEXT NOT NULL, + + CONSTRAINT "Reaction_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE INDEX "Reaction_userId_nodeId_idx" ON "Reaction"("userId", "nodeId"); + +-- CreateIndex +CREATE UNIQUE INDEX "Reaction_userId_nodeId_key" ON "Reaction"("userId", "nodeId"); + +-- CreateIndex +CREATE UNIQUE INDEX "Tenant_email_domain_logo_customerId_key" ON "Tenant"("email", "domain", "logo", "customerId"); + +-- AddForeignKey +ALTER TABLE "Reaction" ADD CONSTRAINT "Reaction_nodeId_fkey" FOREIGN KEY ("nodeId") REFERENCES "Node"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Reaction" ADD CONSTRAINT "Reaction_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/prisma/migrations/20240628144111_faqmaker_dev19/migration.sql b/prisma/migrations/20240628144111_faqmaker_dev19/migration.sql new file mode 100644 index 000000000..7a9a56246 --- /dev/null +++ b/prisma/migrations/20240628144111_faqmaker_dev19/migration.sql @@ -0,0 +1,15 @@ +/* + Warnings: + + - You are about to drop the column `domain` on the `Tenant` table. All the data in the column will be lost. + - A unique constraint covering the columns `[email,logo,customerId]` on the table `Tenant` will be added. If there are existing duplicate values, this will fail. + +*/ +-- DropIndex +DROP INDEX "Tenant_email_domain_logo_customerId_key"; + +-- AlterTable +ALTER TABLE "Tenant" DROP COLUMN "domain"; + +-- CreateIndex +CREATE UNIQUE INDEX "Tenant_email_logo_customerId_key" ON "Tenant"("email", "logo", "customerId"); diff --git a/prisma/migrations/20240630142921_faqmaker_dev20/migration.sql b/prisma/migrations/20240630142921_faqmaker_dev20/migration.sql new file mode 100644 index 000000000..c54862d12 --- /dev/null +++ b/prisma/migrations/20240630142921_faqmaker_dev20/migration.sql @@ -0,0 +1,10 @@ +/* + Warnings: + + - You are about to drop the column `emoji` on the `Reaction` table. All the data in the column will be lost. + - Added the required column `shortcode` to the `Reaction` table without a default value. This is not possible if the table is not empty. + +*/ +-- AlterTable +ALTER TABLE "Reaction" DROP COLUMN "emoji", +ADD COLUMN "shortcode" TEXT NOT NULL; diff --git a/prisma/migrations/20240701091337_faqmaker_dev21/migration.sql b/prisma/migrations/20240701091337_faqmaker_dev21/migration.sql new file mode 100644 index 000000000..8faa391dc --- /dev/null +++ b/prisma/migrations/20240701091337_faqmaker_dev21/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "Reaction" ADD COLUMN "count" INTEGER NOT NULL DEFAULT 1; diff --git a/prisma/migrations/20240701091650_faqmaker_dev22/migration.sql b/prisma/migrations/20240701091650_faqmaker_dev22/migration.sql new file mode 100644 index 000000000..ba1493e62 --- /dev/null +++ b/prisma/migrations/20240701091650_faqmaker_dev22/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "Node" ADD COLUMN "isPinned" BOOLEAN NOT NULL DEFAULT false; diff --git a/prisma/migrations/20240701091955_faq_maker_dev23/migration.sql b/prisma/migrations/20240701091955_faq_maker_dev23/migration.sql new file mode 100644 index 000000000..17abbe366 --- /dev/null +++ b/prisma/migrations/20240701091955_faq_maker_dev23/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "Tenant" ADD COLUMN "pinnedAmount" INTEGER NOT NULL DEFAULT 0; diff --git a/prisma/migrations/20240704091529_faqmaker_dev24/migration.sql b/prisma/migrations/20240704091529_faqmaker_dev24/migration.sql new file mode 100644 index 000000000..1df3861a1 --- /dev/null +++ b/prisma/migrations/20240704091529_faqmaker_dev24/migration.sql @@ -0,0 +1,45 @@ +/* + Warnings: + + - You are about to drop the column `userId` on the `Reaction` table. All the data in the column will be lost. + - A unique constraint covering the columns `[nodeId]` on the table `Reaction` will be added. If there are existing duplicate values, this will fail. + +*/ +-- DropForeignKey +ALTER TABLE "Reaction" DROP CONSTRAINT "Reaction_userId_fkey"; + +-- DropIndex +DROP INDEX "Reaction_userId_nodeId_idx"; + +-- DropIndex +DROP INDEX "Reaction_userId_nodeId_key"; + +-- AlterTable +ALTER TABLE "Reaction" DROP COLUMN "userId"; + +-- CreateTable +CREATE TABLE "ReactionUser" ( + "id" TEXT NOT NULL, + "reactionId" TEXT NOT NULL, + "userId" TEXT NOT NULL, + + CONSTRAINT "ReactionUser_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE INDEX "ReactionUser_reactionId_userId_idx" ON "ReactionUser"("reactionId", "userId"); + +-- CreateIndex +CREATE UNIQUE INDEX "ReactionUser_reactionId_userId_key" ON "ReactionUser"("reactionId", "userId"); + +-- CreateIndex +CREATE INDEX "Reaction_nodeId_idx" ON "Reaction"("nodeId"); + +-- CreateIndex +CREATE UNIQUE INDEX "Reaction_nodeId_key" ON "Reaction"("nodeId"); + +-- AddForeignKey +ALTER TABLE "ReactionUser" ADD CONSTRAINT "ReactionUser_reactionId_fkey" FOREIGN KEY ("reactionId") REFERENCES "Reaction"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ReactionUser" ADD CONSTRAINT "ReactionUser_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/prisma/migrations/20240704101446_faqmaker_dev25/migration.sql b/prisma/migrations/20240704101446_faqmaker_dev25/migration.sql new file mode 100644 index 000000000..478040b05 --- /dev/null +++ b/prisma/migrations/20240704101446_faqmaker_dev25/migration.sql @@ -0,0 +1,11 @@ +/* + Warnings: + + - A unique constraint covering the columns `[shortcode,nodeId]` on the table `Reaction` will be added. If there are existing duplicate values, this will fail. + +*/ +-- DropIndex +DROP INDEX "Reaction_nodeId_key"; + +-- CreateIndex +CREATE UNIQUE INDEX "Reaction_shortcode_nodeId_key" ON "Reaction"("shortcode", "nodeId"); diff --git a/prisma/migrations/20240704130636_faqmaker_dev26/migration.sql b/prisma/migrations/20240704130636_faqmaker_dev26/migration.sql new file mode 100644 index 000000000..16271027e --- /dev/null +++ b/prisma/migrations/20240704130636_faqmaker_dev26/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "Reaction" ADD COLUMN "emoji" TEXT NOT NULL DEFAULT ''; diff --git a/prisma/migrations/20240704134447_faqmaker_dev27/migration.sql b/prisma/migrations/20240704134447_faqmaker_dev27/migration.sql new file mode 100644 index 000000000..be64df860 --- /dev/null +++ b/prisma/migrations/20240704134447_faqmaker_dev27/migration.sql @@ -0,0 +1,19 @@ +/* + Warnings: + + - A unique constraint covering the columns `[email]` on the table `Tenant` will be added. If there are existing duplicate values, this will fail. + - A unique constraint covering the columns `[logo]` on the table `Tenant` will be added. If there are existing duplicate values, this will fail. + - A unique constraint covering the columns `[customerId]` on the table `Tenant` will be added. If there are existing duplicate values, this will fail. + +*/ +-- DropIndex +DROP INDEX "Tenant_email_logo_customerId_key"; + +-- CreateIndex +CREATE UNIQUE INDEX "Tenant_email_key" ON "Tenant"("email"); + +-- CreateIndex +CREATE UNIQUE INDEX "Tenant_logo_key" ON "Tenant"("logo"); + +-- CreateIndex +CREATE UNIQUE INDEX "Tenant_customerId_key" ON "Tenant"("customerId"); diff --git a/prisma/migrations/20240716155356_faqmaker_dev28/migration.sql b/prisma/migrations/20240716155356_faqmaker_dev28/migration.sql new file mode 100644 index 000000000..07e237176 --- /dev/null +++ b/prisma/migrations/20240716155356_faqmaker_dev28/migration.sql @@ -0,0 +1,17 @@ +-- CreateTable +CREATE TABLE "VerificationToken" ( + "id" TEXT NOT NULL, + "identifier" TEXT NOT NULL, + "token" TEXT NOT NULL, + "expires" TIMESTAMP(3) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "VerificationToken_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "VerificationToken_token_key" ON "VerificationToken"("token"); + +-- CreateIndex +CREATE UNIQUE INDEX "VerificationToken_identifier_token_key" ON "VerificationToken"("identifier", "token"); diff --git a/prisma/migrations/20240716174119_faqmaker_dev28/migration.sql b/prisma/migrations/20240716174119_faqmaker_dev28/migration.sql new file mode 100644 index 000000000..572834ff5 --- /dev/null +++ b/prisma/migrations/20240716174119_faqmaker_dev28/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "User" ADD COLUMN "emailVerified" TIMESTAMP(3); diff --git a/prisma/migrations/20241029150921_faqmaker_dev29/migration.sql b/prisma/migrations/20241029150921_faqmaker_dev29/migration.sql new file mode 100644 index 000000000..c9f545391 --- /dev/null +++ b/prisma/migrations/20241029150921_faqmaker_dev29/migration.sql @@ -0,0 +1,25 @@ +/* + Warnings: + + - You are about to drop the `Reaction` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `ReactionUser` table. If the table is not empty, all the data it contains will be lost. + - Made the column `customerId` on table `Tenant` required. This step will fail if there are existing NULL values in that column. + +*/ +-- DropForeignKey +ALTER TABLE "Reaction" DROP CONSTRAINT "Reaction_nodeId_fkey"; + +-- DropForeignKey +ALTER TABLE "ReactionUser" DROP CONSTRAINT "ReactionUser_reactionId_fkey"; + +-- DropForeignKey +ALTER TABLE "ReactionUser" DROP CONSTRAINT "ReactionUser_userId_fkey"; + +-- AlterTable +ALTER TABLE "Tenant" ALTER COLUMN "customerId" SET NOT NULL; + +-- DropTable +DROP TABLE "Reaction"; + +-- DropTable +DROP TABLE "ReactionUser"; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index ebd38bba2..3e2ad174b 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -13,43 +13,47 @@ model Tenant { email String @unique plan Plan @default(free) company String - domain String? @unique logo String? @unique - customerId String? @unique + customerId String @unique isActive Boolean @default(false) subscriptionId String? users User[] nodes Node[] tags Tag[] integrations Integrations? + pinnedAmount Int @default(0) } model User { - id String @id @default(cuid()) - createdAt DateTime @default(now()) + id String @id @default(cuid()) + createdAt DateTime @default(now()) name String? - email String @unique + email String @unique image String? - role Role @default(user) - tenant Tenant @relation(fields: [tenantId], references: [id], onDelete: Cascade) + role Role @default(user) + emailVerified DateTime? + tenant Tenant @relation(fields: [tenantId], references: [id], onDelete: Cascade) tenantId String questions Question[] answers Answer[] accounts Account[] sessions Session[] + favorites Favorite[] @@index([tenantId]) } model Node { - id String @id @default(cuid()) - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt + id String @id @default(cuid()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt question Question? answer Answer? tags Tag[] - tenant Tenant @relation(fields: [tenantId], references: [id], onDelete: Cascade) + tenant Tenant @relation(fields: [tenantId], references: [id], onDelete: Cascade) tenantId String + favorites Favorite[] + isPinned Boolean @default(false) @@index([tenantId]) } @@ -65,8 +69,7 @@ model Question { user User @relation(fields: [userId], references: [id], onDelete: Cascade) userId String - @@index([nodeId]) - @@index([userId]) + @@index([nodeId, userId]) } model Answer { @@ -79,8 +82,7 @@ model Answer { user User @relation(fields: [userId], references: [id], onDelete: Cascade) userId String - @@index([nodeId]) - @@index([userId]) + @@index([nodeId, userId]) } model Tag { @@ -93,6 +95,18 @@ model Tag { @@index([tenantId]) } +model Favorite { + id String @id @default(cuid()) + createdAt DateTime @default(now()) + node Node @relation(fields: [nodeId], references: [id], onDelete: Cascade) + nodeId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + userId String + + @@unique([userId, nodeId]) + @@index([userId, nodeId]) +} + model Integrations { id String @id @default(cuid()) slack String @@ -127,16 +141,28 @@ model Account { scope String? id_token String? @db.Text session_state String? - - user User @relation(fields: [userId], references: [id], onDelete: Cascade) + user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@unique([provider, providerAccountId]) } model Session { id String @id @default(cuid()) - sessionToken String @unique + sessionToken String userId String expires DateTime user User @relation(fields: [userId], references: [id], onDelete: Cascade) -} \ No newline at end of file + + @@unique([sessionToken]) +} + +model VerificationToken { + id String @id @default(cuid()) + identifier String + token String @unique + expires DateTime + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@unique([identifier, token]) +} diff --git a/sentry.client.config.ts b/sentry.client.config.ts deleted file mode 100644 index 8a0899a45..000000000 --- a/sentry.client.config.ts +++ /dev/null @@ -1,15 +0,0 @@ -import * as Sentry from '@sentry/nextjs'; - -Sentry.init({ - dsn: 'https://205614d8b705aa1e52a68d3affaef461@o4506702112489472.ingest.sentry.io/4506704576380928', - tracesSampleRate: 1, - debug: false, - replaysOnErrorSampleRate: 1.0, - replaysSessionSampleRate: 0.1, - integrations: [ - Sentry.replayIntegration({ - maskAllText: true, - blockAllMedia: true, - }), - ], -}); diff --git a/sentry.edge.config.ts b/sentry.edge.config.ts deleted file mode 100644 index 620e0f92b..000000000 --- a/sentry.edge.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as Sentry from '@sentry/nextjs'; - -Sentry.init({ - dsn: 'https://205614d8b705aa1e52a68d3affaef461@o4506702112489472.ingest.sentry.io/4506704576380928', - tracesSampleRate: 1, - debug: false, -}); diff --git a/sentry.server.config.ts b/sentry.server.config.ts deleted file mode 100644 index 620e0f92b..000000000 --- a/sentry.server.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as Sentry from '@sentry/nextjs'; - -Sentry.init({ - dsn: 'https://205614d8b705aa1e52a68d3affaef461@o4506702112489472.ingest.sentry.io/4506704576380928', - tracesSampleRate: 1, - debug: false, -}); diff --git a/src/actions/create-answer/action.ts b/src/actions/create-answer/action.ts new file mode 100644 index 000000000..2f5e794d5 --- /dev/null +++ b/src/actions/create-answer/action.ts @@ -0,0 +1,25 @@ +'use server'; + +import { revalidatePath } from 'next/cache'; +import { redirect } from 'next/navigation'; + +import { authActionClient } from '@/lib/safe-actions'; +import { Routes } from '@/utils/routing'; +import prisma from 'lib/prisma'; + +import { createAnswerSchema } from './schema'; + +export const createAnswer = authActionClient + .metadata({ actionName: 'createAnswer' }) + .schema(createAnswerSchema) + .action(async ({ parsedInput: { text, nodeId }, ctx: { userId } }) => { + await prisma.answer.create({ + data: { + nodeId, + userId, + text, + }, + }); + revalidatePath(Routes.SITE.HOME); + redirect(Routes.SITE.HOME); + }); diff --git a/src/actions/create-answer/schema.ts b/src/actions/create-answer/schema.ts new file mode 100644 index 000000000..587c5605c --- /dev/null +++ b/src/actions/create-answer/schema.ts @@ -0,0 +1,10 @@ +import { z } from 'zod'; + +export const createAnswerSchema = z.object({ + text: z + .string() + .trim() + .min(1, { message: 'Answer is required' }) + .max(1000, { message: 'Answer must be under 1000 characters long' }), + nodeId: z.string().cuid2(), +}); diff --git a/src/actions/create-favorite/action.ts b/src/actions/create-favorite/action.ts new file mode 100644 index 000000000..ab96ccec7 --- /dev/null +++ b/src/actions/create-favorite/action.ts @@ -0,0 +1,23 @@ +'use server'; + +import { revalidatePath } from 'next/cache'; + +import { authActionClient } from '@/lib/safe-actions'; +import { Routes } from '@/utils/routing'; +import prisma from 'lib/prisma'; + +import { createFavoriteSchema } from './schema'; + +export const createFavorite = authActionClient + .metadata({ actionName: 'createFavorite' }) + .schema(createFavoriteSchema) + .action(async ({ parsedInput: { nodeId }, ctx: { userId } }) => { + await prisma.favorite.create({ + data: { + nodeId, + userId, + }, + }); + revalidatePath(Routes.SITE.HOME); + return { message: 'Question added to favorites' }; + }); diff --git a/src/actions/create-favorite/schema.ts b/src/actions/create-favorite/schema.ts new file mode 100644 index 000000000..785ad75d6 --- /dev/null +++ b/src/actions/create-favorite/schema.ts @@ -0,0 +1,5 @@ +import { z } from 'zod'; + +export const createFavoriteSchema = z.object({ + nodeId: z.string().cuid2(), +}); diff --git a/src/actions/create-node/action.ts b/src/actions/create-node/action.ts new file mode 100644 index 000000000..e6a954cbd --- /dev/null +++ b/src/actions/create-node/action.ts @@ -0,0 +1,97 @@ +'use server'; + +import { IncomingWebhook } from '@slack/webhook'; +import { revalidatePath } from 'next/cache'; +import { redirect } from 'next/navigation'; +import slugify from 'slugify'; + +import { ActionError, authActionClient } from '@/lib/safe-actions'; +import { dateOptions, timeOptions } from '@/utils/date'; +import { Routes } from '@/utils/routing'; +import prisma from 'lib/prisma'; + +import { createNodeSchema, slackIntegrationSchema } from './schema'; + +export const slackNotification = async (body) => { + const result = slackIntegrationSchema.safeParse(body); + if (result.success === false) { + const errors = result.error.flatten().fieldErrors; + return { errors: `Invalid request${errors}` }; + } + const { url, text } = result.data; + const webhook = new IncomingWebhook(url); + const message = await webhook.send({ + text, + blocks: [ + { + type: 'section', + text: { + type: 'mrkdwn', + text: `*${text}*`, + }, + }, + { + type: 'divider', + block_id: 'divider1', + }, + { + type: 'section', + text: { + type: 'mrkdwn', + text: `Asked on ${new Date().toLocaleDateString( + undefined, + dateOptions, + )} at ${new Date().toLocaleTimeString(undefined, timeOptions)}`, + }, + }, + ], + }); + if (!message.text) { + return { error: 'Slack notifications not sent' }; + } + return undefined; +}; + +export const createNode = authActionClient + .metadata({ actionName: 'createNode' }) + .schema(createNodeSchema) + .action( + async ({ + parsedInput: { text, tenantId, tags, integrations, withAnswer }, + ctx: { userId }, + }) => { + const duplicateQuestion = await prisma.node.findFirst({ + where: { tenantId, question: { text } }, + }); + if (duplicateQuestion) { + throw new ActionError('This question already exists'); + } + if (integrations && integrations.slack) { + const slackBody = { + text, + url: integrations.slack, + }; + await slackNotification(slackBody); + } + const node = await prisma.node.create({ + data: { + tenant: { connect: { id: tenantId } }, + question: { + create: { + text, + slug: slugify(text).toLowerCase(), + user: { connect: { id: userId } }, + }, + }, + tags: { + connect: tags?.map((tag) => ({ id: tag })), + }, + }, + }); + if (withAnswer) { + redirect(`${Routes.SITE.ANSWER}?id=${node.id}`); + } + revalidatePath(Routes.SITE.HOME); + redirect(Routes.SITE.HOME); + }, + ); diff --git a/src/actions/create-node/schema.ts b/src/actions/create-node/schema.ts new file mode 100644 index 000000000..53e6b9c71 --- /dev/null +++ b/src/actions/create-node/schema.ts @@ -0,0 +1,25 @@ +import { z } from 'zod'; + +export const slackIntegrationSchema = z.object({ + text: z + .string() + .trim() + .min(3, { message: 'Question must be at least 3 characters long' }), + url: z.string().trim().url({ message: 'Invalid URL' }), +}); + +export const createNodeSchema = z.object({ + text: z + .string() + .trim() + .min(3, { message: 'Question must be at least 3 characters long' }) + .max(100, { message: 'Question must be under 100 characters long' }), + tenantId: z.string().cuid2(), + tags: z.array(z.string().cuid2()).optional(), + withAnswer: z.boolean().optional(), + integrations: z + .object({ + slack: z.string().trim().url({ message: 'Invalid URL' }).optional(), + }) + .nullable(), +}); diff --git a/src/actions/create-pin/action.ts b/src/actions/create-pin/action.ts new file mode 100644 index 000000000..86d715ac4 --- /dev/null +++ b/src/actions/create-pin/action.ts @@ -0,0 +1,43 @@ +'use server'; + +import { revalidatePath } from 'next/cache'; + +import { ActionError, authActionClient } from '@/lib/safe-actions'; +import { Routes } from '@/utils/routing'; +import prisma from 'lib/prisma'; + +import { createPinSchema } from './schema'; + +export const createPin = authActionClient + .metadata({ actionName: 'createPin' }) + .schema(createPinSchema) + .action(async ({ parsedInput: { nodeId, tenantId } }) => { + const tenant = await prisma.tenant.findUnique({ + where: { id: tenantId }, + select: { + pinnedAmount: true, + }, + }); + if (!tenant) { + throw new ActionError('Could not find tenant'); + } + if (tenant.pinnedAmount > 2) { + throw new ActionError('You already have 3 pinned questions'); + } + await prisma.node.update({ + where: { id: nodeId }, + data: { + isPinned: true, + }, + }); + await prisma.tenant.update({ + where: { id: tenantId }, + data: { + pinnedAmount: { + increment: 1, + }, + }, + }); + revalidatePath(Routes.SITE.HOME); + return { message: 'Question pinned' }; + }); diff --git a/src/actions/create-pin/schema.ts b/src/actions/create-pin/schema.ts new file mode 100644 index 000000000..0d5c0d8ab --- /dev/null +++ b/src/actions/create-pin/schema.ts @@ -0,0 +1,6 @@ +import { z } from 'zod'; + +export const createPinSchema = z.object({ + nodeId: z.string().cuid2(), + tenantId: z.string().cuid2(), +}); diff --git a/src/actions/create-tag/action.ts b/src/actions/create-tag/action.ts new file mode 100644 index 000000000..6493e23af --- /dev/null +++ b/src/actions/create-tag/action.ts @@ -0,0 +1,29 @@ +'use server'; + +import { revalidatePath } from 'next/cache'; + +import { ActionError, authActionClient } from '@/lib/safe-actions'; +import { Routes } from '@/utils/routing'; +import prisma from 'lib/prisma'; + +import { createTagSchema } from './schema'; + +export const createTag = authActionClient + .metadata({ actionName: 'createTag' }) + .schema(createTagSchema) + .action(async ({ parsedInput: { label, tenantId, plan, tagsCount } }) => { + if ( + (plan === 'free' && tagsCount >= 3) || + (plan === 'startup' && tagsCount >= 10) + ) { + throw new ActionError('You reached the maximum number of tags'); + } + await prisma.tag.create({ + data: { + label, + tenantId, + }, + }); + revalidatePath(Routes.SITE.SETTINGS); + return { message: 'Tag created successfully' }; + }); diff --git a/src/actions/create-tag/schema.ts b/src/actions/create-tag/schema.ts new file mode 100644 index 000000000..93eb2d17d --- /dev/null +++ b/src/actions/create-tag/schema.ts @@ -0,0 +1,14 @@ +import { z } from 'zod'; + +import { PLAN } from '@/utils/constants'; + +export const createTagSchema = z.object({ + label: z + .string() + .trim() + .min(1, { message: 'Tag name is required' }) + .max(50, { message: 'Tag name is too long' }), + tenantId: z.string().cuid2(), + plan: z.enum(PLAN), + tagsCount: z.number().min(0), +}); diff --git a/src/actions/create-tenant/action.ts b/src/actions/create-tenant/action.ts new file mode 100644 index 000000000..c1b6155b1 --- /dev/null +++ b/src/actions/create-tenant/action.ts @@ -0,0 +1,91 @@ +'use server'; + +// import { Resend } from 'resend'; +import Stripe from 'stripe'; + +import { ActionError, actionClient } from '@/lib/safe-actions'; +import { STRIPE_VERSION } from '@/utils/constants'; +import prisma from 'lib/prisma'; + +import { createTenantSchema } from './schema'; + +const stripe = new Stripe(process.env.STRIPE_SECRET_KEY, { + apiVersion: STRIPE_VERSION, +}); + +// const resend = new Resend(process.env.RESEND_API_KEY); +// const { data: domains } = await resend.domains.list(); + +export const createTenant = actionClient + .metadata({ actionName: 'createTenant' }) + .schema(createTenantSchema) + .action(async ({ parsedInput: { company, companyEmail, email } }) => { + const tenantExists = await prisma.tenant.findFirst({ + where: { email: companyEmail }, + }); + if (tenantExists) { + throw new ActionError( + 'An account with the same company email already exists', + ); + } + const userExists = await prisma.user.findUnique({ + where: { email }, + }); + if (userExists) { + throw new ActionError('A user with the same email already exists'); + } + const tenant = await prisma.tenant.create({ + data: { + company, + email: companyEmail, + customerId: '', + }, + }); + if (!tenant) { + throw new ActionError('There was a problem when creating the account'); + } + const user = await prisma.user.create({ + data: { + email, + role: 'tenant', + tenant: { connect: { id: tenant.id } }, + }, + }); + if (!user) { + throw new ActionError('There was a problem when creating the user'); + } + // await resend.emails.send({ + // from: `no-reply@${domains?.data[0].name}`, + // to: [companyEmail], + // subject: 'Welcome to FAQMaker', + // react: RegisterEmailTemplate(), + // }); + const customerExists = await stripe.customers.search({ + query: `email:'${companyEmail}'`, + }); + if (customerExists.data.length > 0) { + throw new ActionError( + 'A customer with the same company email already exists', + ); + } + const customer = await stripe.customers.create({ + email: companyEmail, + name: company, + }); + if (!customer) { + throw new ActionError('There was a problem creating the customer'); + } + const updatedTenant = await prisma.tenant.update({ + where: { email: companyEmail, id: tenant.id }, + data: { + customerId: customer.id, + }, + }); + if (!updatedTenant) { + throw new ActionError('There was a problem updating the tenant'); + } + return { + customerId: customer.id, + message: 'Your account has successfully been created', + }; + }); diff --git a/src/lib/client/validations/register.ts b/src/actions/create-tenant/schema.ts similarity index 60% rename from src/lib/client/validations/register.ts rename to src/actions/create-tenant/schema.ts index 783e3a9b0..3bfdb2d65 100644 --- a/src/lib/client/validations/register.ts +++ b/src/actions/create-tenant/schema.ts @@ -1,16 +1,15 @@ import { z } from 'zod'; -export const registerCompanyClientSchema = z.object({ +export const createTenantCompanySchema = z.object({ company: z.string().min(1, { message: 'Company name is required' }), companyEmail: z .string() .trim() .min(1, { message: 'Company email is required' }) .email({ message: 'Invalid email' }), - domain: z.string().trim().nullable(), }); -export const registerUserClientSchema = z.object({ +export const createTenantUserSchema = z.object({ email: z .string() .trim() @@ -18,6 +17,6 @@ export const registerUserClientSchema = z.object({ .email({ message: 'Invalid email' }), }); -export const registerCompleteClientSchema = registerCompanyClientSchema.merge( - registerUserClientSchema, +export const createTenantSchema = createTenantCompanySchema.merge( + createTenantUserSchema, ); diff --git a/src/actions/create-user/action.ts b/src/actions/create-user/action.ts new file mode 100644 index 000000000..b4cd06e61 --- /dev/null +++ b/src/actions/create-user/action.ts @@ -0,0 +1,63 @@ +'use server'; + +import { revalidatePath } from 'next/cache'; +import { Resend } from 'resend'; + +import { NewUserEmailTemplate } from '@/components/emails/NewUser'; +import { ActionError, authActionClient } from '@/lib/safe-actions'; +import { Routes } from '@/utils/routing'; +import prisma from 'lib/prisma'; + +import { createUserSchema } from './schema'; +import { getMe } from '../get-me'; + +const resend = new Resend(process.env.RESEND_API_KEY); + +export const createUser = authActionClient + .metadata({ actionName: 'createUser' }) + .schema(createUserSchema) + .action( + async ({ parsedInput: { email, role, plan, usersCount, tenantId } }) => { + const userExists = await prisma.user.findUnique({ + where: { email, tenantId }, + }); + if (userExists) throw new ActionError('User already exists'); + if (typeof usersCount !== 'number') + throw new ActionError('Could not find the number of users'); + if ( + (plan === 'free' && usersCount >= 5) || + (plan === 'startup' && usersCount >= 100) + ) { + throw new ActionError('You reached the maximum number of users'); + } + const newUser = await prisma.user.create({ + data: { + email, + role, + tenantId, + }, + }); + if (!newUser) { + throw new ActionError('User could not be created'); + } + const tenant = await prisma.tenant.findFirst({ + where: { id: tenantId }, + }); + const me = await getMe(); + const { company } = tenant; + const { data: domains } = await resend.domains.list(); + await resend.emails.send({ + from: `FAQMaker - `, + to: [email], + subject: `You're invited to FAQMaker`, + react: NewUserEmailTemplate({ + company, + username: email, + invitedByUsername: me?.name, + invitedByEmail: me?.email, + }), + }); + revalidatePath(Routes.SITE.SETTINGS); + return { message: 'User created successfully' }; + }, + ); diff --git a/src/actions/create-user/schema.ts b/src/actions/create-user/schema.ts new file mode 100644 index 000000000..3ff7825a4 --- /dev/null +++ b/src/actions/create-user/schema.ts @@ -0,0 +1,17 @@ +import { z } from 'zod'; + +import { PLAN, ROLE } from '@/utils/constants'; +import { Limits } from '@/utils/limits'; + +export const createUserSchema = z.object({ + email: z + .string() + .trim() + .min(1, { message: 'User email is required' }) + .max(Limits.EMAIL, { message: 'Email is too long' }) + .email({ message: 'Invalid email' }), + role: z.enum(ROLE), + plan: z.enum(PLAN), + tenantId: z.string().cuid2(), + usersCount: z.number().min(0), +}); diff --git a/src/actions/create-users/action.ts b/src/actions/create-users/action.ts new file mode 100644 index 000000000..f71fb2d1b --- /dev/null +++ b/src/actions/create-users/action.ts @@ -0,0 +1,106 @@ +'use server'; + +import { revalidatePath } from 'next/cache'; + +import { auth } from '@/auth'; +import prisma from 'lib/prisma'; + +import { createUsersSchema } from './schema'; + +type CreateUsersData = { + tenantId: string; + usersCount: string | number; + usersArray: string; +}; + +type ErrorObject = { + email: string; + message: string; +}; + +export async function createUsers(usersArray, formData) { + try { + if (!formData) { + return { error: 'Data not provided' }; + } + const data = Object.fromEntries(formData) as CreateUsersData; + data.usersCount = Number(data.usersCount); + data.usersArray = usersArray; + const session = await auth(); + if (!session) { + return { error: 'Not signed in' }; + } + const result = createUsersSchema.safeParse({ ...data }); + if (result.success === false) { + const errors = result.error.flatten().fieldErrors; + return { error: errors }; + } + const { usersArray: parsedUsersArray, usersCount, tenantId } = result.data; + const errors: ErrorObject[] = []; + const creationPromises = parsedUsersArray?.map(async (email) => { + if (!email) { + errors.push({ + email, + message: 'Empty email, skipping user creation', + }); + return; + } + const userExists = await prisma.user.findUnique({ + where: { email, tenantId }, + }); + if (userExists) { + errors.push({ + email, + message: 'User already exists', + }); + return; + } + if (!usersCount) { + errors.push({ + email, + message: 'Could not find the number of users', + }); + return; + } + const tenant = await prisma.tenant.findUnique({ + where: { id: tenantId }, + select: { plan: true }, + }); + if (!tenant) { + errors.push({ + email, + message: 'Could not find the tenant', + }); + return; + } + if ( + (tenant.plan === 'free' && usersCount >= 5) || + (tenant.plan === 'startup' && usersCount >= 100) + ) { + errors.push({ + email, + message: 'You reached the maximum number of users.', + }); + return; + } + await prisma.user.create({ + data: { + email, + role: 'user', + tenantId, + }, + }); + }); + + await Promise.all(creationPromises); + + if (errors.length > 0) { + return { message: 'Some users could not be created', errors }; + } + } catch { + return { error: 'Error creating users' }; + } + + revalidatePath('/settings'); + return { message: 'Users created successfully' }; +} diff --git a/src/actions/create-users/schema.ts b/src/actions/create-users/schema.ts new file mode 100644 index 000000000..b46ee9a4c --- /dev/null +++ b/src/actions/create-users/schema.ts @@ -0,0 +1,7 @@ +import { z } from 'zod'; + +export const createUsersSchema = z.object({ + tenantId: z.string().cuid2(), + usersCount: z.number().min(0), + usersArray: z.array(z.string().email()), +}); diff --git a/src/actions/delete-favorite/action.ts b/src/actions/delete-favorite/action.ts new file mode 100644 index 000000000..92b04931e --- /dev/null +++ b/src/actions/delete-favorite/action.ts @@ -0,0 +1,20 @@ +'use server'; + +import { revalidatePath } from 'next/cache'; + +import { authActionClient } from '@/lib/safe-actions'; +import { Routes } from '@/utils/routing'; +import prisma from 'lib/prisma'; + +import { deleteFavoriteSchema } from './schema'; + +export const deleteFavorite = authActionClient + .metadata({ actionName: 'deleteFavorite' }) + .schema(deleteFavoriteSchema) + .action(async ({ parsedInput: { nodeId }, ctx: { userId } }) => { + await prisma.favorite.deleteMany({ + where: { nodeId, userId }, + }); + revalidatePath(Routes.SITE.HOME); + return { message: 'Question removed from favorites' }; + }); diff --git a/src/actions/delete-favorite/schema.ts b/src/actions/delete-favorite/schema.ts new file mode 100644 index 000000000..92c5e34ca --- /dev/null +++ b/src/actions/delete-favorite/schema.ts @@ -0,0 +1,5 @@ +import { z } from 'zod'; + +export const deleteFavoriteSchema = z.object({ + nodeId: z.string().cuid2(), +}); diff --git a/src/actions/delete-pin/action.ts b/src/actions/delete-pin/action.ts new file mode 100644 index 000000000..18d555a52 --- /dev/null +++ b/src/actions/delete-pin/action.ts @@ -0,0 +1,31 @@ +'use server'; + +import { revalidatePath } from 'next/cache'; + +import { authActionClient } from '@/lib/safe-actions'; +import { Routes } from '@/utils/routing'; +import prisma from 'lib/prisma'; + +import { deletePinSchema } from './schema'; + +export const deletePin = authActionClient + .metadata({ actionName: 'deletePin' }) + .schema(deletePinSchema) + .action(async ({ parsedInput: { nodeId, tenantId } }) => { + await prisma.node.update({ + where: { id: nodeId }, + data: { + isPinned: false, + }, + }); + await prisma.tenant.update({ + where: { id: tenantId }, + data: { + pinnedAmount: { + decrement: 1, + }, + }, + }); + revalidatePath(Routes.SITE.HOME); + return { message: 'Question unpinned' }; + }); diff --git a/src/actions/delete-pin/schema.ts b/src/actions/delete-pin/schema.ts new file mode 100644 index 000000000..fb768e5fb --- /dev/null +++ b/src/actions/delete-pin/schema.ts @@ -0,0 +1,6 @@ +import { z } from 'zod'; + +export const deletePinSchema = z.object({ + nodeId: z.string().cuid2(), + tenantId: z.string().cuid2(), +}); diff --git a/src/actions/delete-tag/action.ts b/src/actions/delete-tag/action.ts new file mode 100644 index 000000000..a48cfa148 --- /dev/null +++ b/src/actions/delete-tag/action.ts @@ -0,0 +1,20 @@ +'use server'; + +import { revalidatePath } from 'next/cache'; + +import { authActionClient } from '@/lib/safe-actions'; +import { Routes } from '@/utils/routing'; +import prisma from 'lib/prisma'; + +import { deleteTagSchema } from './schema'; + +export const deleteTag = authActionClient + .metadata({ actionName: 'deleteTag' }) + .schema(deleteTagSchema) + .action(async ({ parsedInput: { id, tenantId } }) => { + await prisma.tag.delete({ + where: { id, tenantId }, + }); + revalidatePath(Routes.SITE.SETTINGS); + return { message: 'Tag deleted successfully' }; + }); diff --git a/src/actions/delete-tag/schema.ts b/src/actions/delete-tag/schema.ts new file mode 100644 index 000000000..cfdb6146c --- /dev/null +++ b/src/actions/delete-tag/schema.ts @@ -0,0 +1,6 @@ +import { z } from 'zod'; + +export const deleteTagSchema = z.object({ + tenantId: z.string().cuid2(), + id: z.string().cuid2(), +}); diff --git a/src/actions/delete-tenant/action.ts b/src/actions/delete-tenant/action.ts new file mode 100644 index 000000000..ff5c3301f --- /dev/null +++ b/src/actions/delete-tenant/action.ts @@ -0,0 +1,52 @@ +'use server'; + +import { + DeleteObjectCommand, + DeleteObjectCommandInput, +} from '@aws-sdk/client-s3'; +import { redirect } from 'next/navigation'; +import Stripe from 'stripe'; + +import { s3Client } from '@/lib/aws'; +import { authActionClient } from '@/lib/safe-actions'; +import { STRIPE_VERSION } from '@/utils/constants'; +import { Routes } from '@/utils/routing'; +import prisma from 'lib/prisma'; + +import { deleteTenantSchema } from './schema'; + +const stripe = new Stripe(process.env.STRIPE_SECRET_KEY, { + apiVersion: STRIPE_VERSION, +}); + +export const deleteTenant = authActionClient + .metadata({ actionName: 'deleteTenant' }) + .schema(deleteTenantSchema) + .action(async ({ parsedInput: { id, company } }) => { + const tenant = await prisma.tenant.findUnique({ + where: { id, company }, + select: { + customerId: true, + logo: true, + }, + }); + const logo = tenant?.logo; + if (logo) { + const fileName = logo.substring(logo.lastIndexOf('/') + 1); + const params: DeleteObjectCommandInput = { + Bucket: process.env.AWS_S3_BUCKET as string, + Key: `${company}/${fileName}`, + }; + const command = new DeleteObjectCommand(params); + await s3Client.send(command); + } + await prisma.tenant.delete({ + where: { id, company }, + }); + const customerId = tenant?.customerId; + if (customerId) { + await stripe.customers.del(customerId); + } + redirect(Routes.SITE.LOGIN); + return { message: 'Account deleted successfully' }; + }); diff --git a/src/actions/delete-tenant/schema.ts b/src/actions/delete-tenant/schema.ts new file mode 100644 index 000000000..95d121149 --- /dev/null +++ b/src/actions/delete-tenant/schema.ts @@ -0,0 +1,12 @@ +import { z } from 'zod'; + +export const deleteTenantSchema = z + .object({ + text: z.string().trim().min(1), + company: z.string(), + id: z.string().cuid2(), + }) + .refine((data) => data.text === `DELETE ${data.company}`, { + message: 'Confirmation text does not match expected format', + path: ['text'], + }); diff --git a/src/actions/delete-user/action.ts b/src/actions/delete-user/action.ts new file mode 100644 index 000000000..56436b5be --- /dev/null +++ b/src/actions/delete-user/action.ts @@ -0,0 +1,20 @@ +'use server'; + +import { revalidatePath } from 'next/cache'; + +import { authActionClient } from '@/lib/safe-actions'; +import { Routes } from '@/utils/routing'; +import prisma from 'lib/prisma'; + +import { deleteUserSchema } from './schema'; + +export const deleteUser = authActionClient + .metadata({ actionName: 'deleteUser' }) + .schema(deleteUserSchema) + .action(async ({ parsedInput: { id, tenantId } }) => { + await prisma.user.delete({ + where: { id, tenantId }, + }); + revalidatePath(Routes.SITE.SETTINGS); + return { message: 'User deleted successfully' }; + }); diff --git a/src/actions/delete-user/schema.ts b/src/actions/delete-user/schema.ts new file mode 100644 index 000000000..e1951db1c --- /dev/null +++ b/src/actions/delete-user/schema.ts @@ -0,0 +1,6 @@ +import { z } from 'zod'; + +export const deleteUserSchema = z.object({ + tenantId: z.string().cuid2(), + id: z.string().cuid2(), +}); diff --git a/src/actions/get-favorite/index.ts b/src/actions/get-favorite/index.ts new file mode 100644 index 000000000..b015a2a4a --- /dev/null +++ b/src/actions/get-favorite/index.ts @@ -0,0 +1,24 @@ +import { cache } from 'react'; + +import prisma from 'lib/prisma'; + +import type { Favorite } from '@prisma/client'; + +export const getFavorite = cache( + async (userId: string, nodeId: string): Promise => { + try { + if (!nodeId) { + throw new Error('Node not found'); + } + const favorite = await prisma.favorite.findFirst({ + where: { nodeId: nodeId as string, userId: userId as string }, + select: { + nodeId: true, + }, + }); + return favorite as Favorite; + } catch { + throw new Error('Error fetching favorite'); + } + }, +); diff --git a/src/actions/get-favorites/index.ts b/src/actions/get-favorites/index.ts new file mode 100644 index 000000000..a7737a1f0 --- /dev/null +++ b/src/actions/get-favorites/index.ts @@ -0,0 +1,30 @@ +import { cache } from 'react'; + +import { ExtendedFavorites } from '@/types/models/node'; +import prisma from 'lib/prisma'; + +export const getFavorites = cache( + async (userId: string): Promise => { + try { + if (!userId) { + throw new Error('User not found'); + } + const favorites = await prisma.favorite.findMany({ + where: { userId }, + include: { + node: { + include: { + question: true, + }, + }, + }, + }); + + if (!favorites) return []; + + return favorites as ExtendedFavorites[]; + } catch { + throw new Error('Error fetching favorites'); + } + }, +); diff --git a/src/actions/get-integration/index.ts b/src/actions/get-integration/index.ts new file mode 100644 index 000000000..57ff9b0d2 --- /dev/null +++ b/src/actions/get-integration/index.ts @@ -0,0 +1,24 @@ +import { cache } from 'react'; + +import prisma from 'lib/prisma'; + +import type { Integrations } from '@prisma/client'; + +export const getIntegration = cache( + async (tenantId: string): Promise => { + try { + if (!tenantId) { + throw new Error('Tenant not found'); + } + const integrations = await prisma.integrations.findUnique({ + where: { tenantId }, + }); + + if (!integrations) return null; + + return integrations; + } catch { + throw new Error('Error fetching integrations'); + } + }, +); diff --git a/src/actions/get-me/index.ts b/src/actions/get-me/index.ts new file mode 100644 index 000000000..d2ad0c1ae --- /dev/null +++ b/src/actions/get-me/index.ts @@ -0,0 +1,46 @@ +'use server'; + +import { cache } from 'react'; + +import { redirect } from 'next/navigation'; + +import { auth } from '@/auth'; +import { Me } from '@/types/models/user'; +import { Routes } from '@/utils/routing'; +import prisma from 'lib/prisma'; + +import type { Session } from 'next-auth'; + +export const getMe = cache(async (): Promise => { + const session = await auth(); + if (!session) redirect(Routes.SITE.LOGIN); + const id = session.user?.id; + if (!id) { + throw new Error('User ID not found'); + } + const me = await prisma.user.findUnique({ + where: { id }, + include: { tenant: { select: { company: true, logo: true } } }, + }); + if (!me) { + return null; + } + return me as Me; +}); + +export const getUserId = cache( + async (session: Session): Promise => { + const id = session?.user?.id; + if (!id) { + throw new Error('ID not found'); + } + const user = await prisma.user.findUnique({ + where: { id }, + select: { + id: true, + }, + }); + const userId = user?.id ?? null; + return userId as string; + }, +); diff --git a/src/actions/get-node/index.ts b/src/actions/get-node/index.ts new file mode 100644 index 000000000..f8d752161 --- /dev/null +++ b/src/actions/get-node/index.ts @@ -0,0 +1,26 @@ +import { cache } from 'react'; + +import { redirect } from 'next/navigation'; + +import { ExtendedNode } from '@/types/models/node'; +import { nodeModel } from '@/utils/models'; +import { Routes } from '@/utils/routing'; +import prisma from 'lib/prisma'; + +export const getNode = cache( + async (tenantId, id: string): Promise => { + try { + if (!id) { + throw new Error('Node not found'); + } + const node = await prisma.node.findUnique({ + where: { id: id as string, tenantId: tenantId as string }, + include: nodeModel, + }); + if (!node) return redirect(Routes.SITE.HOME); + return node as ExtendedNode; + } catch { + throw new Error('Error fetching node'); + } + }, +); diff --git a/src/actions/get-nodes-count/index.ts b/src/actions/get-nodes-count/index.ts new file mode 100644 index 000000000..c15b33a21 --- /dev/null +++ b/src/actions/get-nodes-count/index.ts @@ -0,0 +1,22 @@ +import { cache } from 'react'; + +import prisma from 'lib/prisma'; + +export const getNodesCount = cache( + async (tenantId: string): Promise => { + try { + if (!tenantId) { + throw new Error('Tenant not found'); + } + const nodes = await prisma.node.count({ + where: { tenantId }, + }); + + if (!nodes) return 0; + + return nodes; + } catch { + throw new Error('Error fetching nodes count'); + } + }, +); diff --git a/src/actions/get-nodes/index.ts b/src/actions/get-nodes/index.ts new file mode 100644 index 000000000..8ecc8b363 --- /dev/null +++ b/src/actions/get-nodes/index.ts @@ -0,0 +1,67 @@ +import { cache } from 'react'; + +import { ExtendedNode } from '@/types/models/node'; +import { OFFSET } from '@/utils/constants'; +import { nodeModel } from '@/utils/models'; +import prisma from 'lib/prisma'; + +import { getNodesSchema } from './schema'; + +type Props = { + tenantId: string; + page: number; +}; + +export const getPaginatedNodes = cache( + async (body: Props): Promise => { + try { + if (!body) { + throw new Error('Tenant not found'); + } + const result = getNodesSchema.safeParse(body); + if (result.success === false) { + const errors = result.error.formErrors.fieldErrors; + throw new Error(`Invalid request${errors}`); + } else { + const { tenantId, page } = result.data; + const nodes = await prisma.node.findMany({ + where: { tenantId: tenantId as string }, + orderBy: [ + { + isPinned: 'desc', + }, + { + createdAt: 'desc', + }, + ], + skip: page * OFFSET, + take: OFFSET, + include: nodeModel, + }); + if (!nodes) return []; + return nodes as ExtendedNode[]; + } + } catch { + throw new Error('Error fetching nodes'); + } + }, +); + +export const getAllNodes = cache(async (tenantId: string) => { + try { + if (!tenantId) { + throw new Error('Tenant not found'); + } + const nodes = await prisma.node.findMany({ + where: { tenantId }, + orderBy: { createdAt: 'desc' }, + include: nodeModel, + }); + + if (!nodes) return null; + + return nodes; + } catch { + throw new Error('Error fetching nodes'); + } +}); diff --git a/src/actions/get-nodes/schema.ts b/src/actions/get-nodes/schema.ts new file mode 100644 index 000000000..c215a8dcb --- /dev/null +++ b/src/actions/get-nodes/schema.ts @@ -0,0 +1,6 @@ +import { z } from 'zod'; + +export const getNodesSchema = z.object({ + tenantId: z.string(), + page: z.number(), +}); diff --git a/src/actions/get-search-nodes/index.ts b/src/actions/get-search-nodes/index.ts new file mode 100644 index 000000000..653c3d942 --- /dev/null +++ b/src/actions/get-search-nodes/index.ts @@ -0,0 +1,44 @@ +import { cache } from 'react'; + +import { ExtendedNode } from '@/types/models/node'; +import { nodeModel } from '@/utils/models'; +import prisma from 'lib/prisma'; + +import { getSearchSchema } from './schema'; + +export const getSearchNodes = cache( + async (tenantId, query): Promise => { + try { + if (!tenantId) { + throw new Error('Tenant not found'); + } + if (!query) { + return []; + } + const result = getSearchSchema.safeParse({ tenantId, query }); + if (result.success === false) { + const errors = result.error.formErrors.fieldErrors; + throw new Error(`Invalid request${errors}`); + } else { + const validatedData = result.data; + const nodes = await prisma.node.findMany({ + where: { + tenantId: validatedData.tenantId as string, + question: { + text: { + contains: validatedData.query as string, + mode: 'insensitive', + }, + }, + }, + orderBy: { createdAt: 'desc' }, + include: nodeModel, + }); + if (!nodes) return []; + return nodes as ExtendedNode[]; + } + } catch { + throw new Error('Error fetching results'); + } + }, +); diff --git a/src/actions/get-search-nodes/schema.ts b/src/actions/get-search-nodes/schema.ts new file mode 100644 index 000000000..b5eec9934 --- /dev/null +++ b/src/actions/get-search-nodes/schema.ts @@ -0,0 +1,6 @@ +import { z } from 'zod'; + +export const getSearchSchema = z.object({ + tenantId: z.string().cuid2(), + query: z.string().min(1, { message: 'Search query is required' }), +}); diff --git a/src/actions/get-search-tags/index.ts b/src/actions/get-search-tags/index.ts new file mode 100644 index 000000000..651c2225c --- /dev/null +++ b/src/actions/get-search-tags/index.ts @@ -0,0 +1,46 @@ +import { cache } from 'react'; + +import { ExtendedNode } from '@/types/models/node'; +import { nodeModel } from '@/utils/models'; +import prisma from 'lib/prisma'; + +import { getTagSearchSchema } from './schema'; + +export const getSearchTags = cache( + async (tenantId, tag): Promise => { + try { + if (!tenantId) { + throw new Error('Tenant not found'); + } + if (!tag) { + return []; + } + const result = getTagSearchSchema.safeParse({ tenantId, tag }); + if (result.success === false) { + const errors = result.error.formErrors.fieldErrors; + throw new Error(`Invalid request${errors}`); + } else { + const validatedData = result.data; + const nodes = await prisma.node.findMany({ + where: { + tenantId: validatedData.tenantId as string, + tags: { + some: { + label: { + contains: validatedData.tag as string, + mode: 'insensitive', + }, + }, + }, + }, + orderBy: { createdAt: 'desc' }, + include: nodeModel, + }); + if (!nodes) return []; + return nodes as ExtendedNode[]; + } + } catch { + throw new Error('Error fetching results'); + } + }, +); diff --git a/src/actions/get-search-tags/schema.ts b/src/actions/get-search-tags/schema.ts new file mode 100644 index 000000000..be4c1a28e --- /dev/null +++ b/src/actions/get-search-tags/schema.ts @@ -0,0 +1,6 @@ +import { z } from 'zod'; + +export const getTagSearchSchema = z.object({ + tenantId: z.string().cuid2(), + tag: z.string().min(1, { message: 'Tag is required' }), +}); diff --git a/src/actions/get-tags-count/index.ts b/src/actions/get-tags-count/index.ts new file mode 100644 index 000000000..f146ed1fa --- /dev/null +++ b/src/actions/get-tags-count/index.ts @@ -0,0 +1,20 @@ +import { cache } from 'react'; + +import prisma from 'lib/prisma'; + +export const getTagsCount = cache(async (tenantId: string): Promise => { + try { + if (!tenantId) { + throw new Error('Tenant not found'); + } + const tags = await prisma.tag.count({ + where: { tenantId }, + }); + + if (!tags) return 0; + + return tags; + } catch { + throw new Error('Error fetching tags count'); + } +}); diff --git a/src/actions/get-tags/index.ts b/src/actions/get-tags/index.ts new file mode 100644 index 000000000..dc13209d6 --- /dev/null +++ b/src/actions/get-tags/index.ts @@ -0,0 +1,20 @@ +import { cache } from 'react'; + +import prisma from 'lib/prisma'; + +import type { Tag } from '@prisma/client'; + +export const getTags = cache(async (tenantId: string): Promise => { + try { + if (!tenantId) { + throw new Error('Tenant not found'); + } + const tags = await prisma.tag.findMany({ + where: { tenantId }, + }); + if (!tags) return []; + return tags; + } catch { + throw new Error('Error fetching tags'); + } +}); diff --git a/src/actions/get-tenant/index.ts b/src/actions/get-tenant/index.ts new file mode 100644 index 000000000..6cba2157d --- /dev/null +++ b/src/actions/get-tenant/index.ts @@ -0,0 +1,25 @@ +import { cache } from 'react'; + +import { redirect } from 'next/navigation'; + +import { Routes } from '@/utils/routing'; +import prisma from 'lib/prisma'; + +import type { Tenant } from '@prisma/client'; + +export const getTenant = cache(async (tenantId: string): Promise => { + try { + if (!tenantId) { + throw new Error('User not found'); + } + const tenant = await prisma.tenant.findUnique({ + where: { id: tenantId }, + }); + + if (!tenant) redirect(Routes.SITE.HOME); + + return tenant; + } catch { + throw new Error('Error fetching tenant'); + } +}); diff --git a/src/actions/get-user-answers/index.ts b/src/actions/get-user-answers/index.ts new file mode 100644 index 000000000..3a9565989 --- /dev/null +++ b/src/actions/get-user-answers/index.ts @@ -0,0 +1,36 @@ +import { cache } from 'react'; + +import { NodeWithQuestionAndAnswer } from '@/types/models/node'; +import prisma from 'lib/prisma'; + +export const getUserAnswers = cache( + async (userId: string): Promise => { + try { + if (!userId) { + throw new Error('User not found'); + } + const answers = await prisma.node.findMany({ + where: { answer: { is: { userId } } }, + include: { + answer: { + select: { + text: true, + updatedAt: true, + }, + }, + question: { + select: { + id: true, + slug: true, + text: true, + }, + }, + }, + }); + if (!answers) return []; + return answers as NodeWithQuestionAndAnswer[]; + } catch { + throw new Error('Error fetching answers'); + } + }, +); diff --git a/src/actions/get-user-questions/index.ts b/src/actions/get-user-questions/index.ts new file mode 100644 index 000000000..c8564df08 --- /dev/null +++ b/src/actions/get-user-questions/index.ts @@ -0,0 +1,25 @@ +import { cache } from 'react'; + +import { QuestionWithNodeId } from '@/types/models/node'; +import prisma from 'lib/prisma'; + +export const getUserQuestions = cache( + async (userId: string): Promise => { + try { + if (!userId) { + throw new Error('User not found'); + } + const questions = await prisma.question.findMany({ + where: { userId: userId as string }, + orderBy: { createdAt: 'desc' }, + include: { node: { select: { id: true } } }, + }); + + if (!questions) return []; + + return questions; + } catch { + throw new Error('Error fetching questions'); + } + }, +); diff --git a/src/actions/get-user/index.ts b/src/actions/get-user/index.ts new file mode 100644 index 000000000..a0b1a5e9a --- /dev/null +++ b/src/actions/get-user/index.ts @@ -0,0 +1,17 @@ +import { cache } from 'react'; + +import prisma from 'lib/prisma'; + +export const getUser = cache(async (id: string) => { + try { + if (!id) { + return { error: 'User not found' }; + } + const user = await prisma.user.findUnique({ + where: { id }, + }); + return user; + } catch { + return { error: 'Error fetching user' }; + } +}); diff --git a/src/actions/get-users-count/index.ts b/src/actions/get-users-count/index.ts new file mode 100644 index 000000000..c76fd00f8 --- /dev/null +++ b/src/actions/get-users-count/index.ts @@ -0,0 +1,22 @@ +import { cache } from 'react'; + +import prisma from 'lib/prisma'; + +export const getUsersCount = cache( + async (tenantId: string): Promise => { + try { + if (!tenantId) { + throw new Error('Tenant not found'); + } + const users = await prisma.user.count({ + where: { tenantId }, + }); + + if (!users) return 0; + + return users; + } catch { + throw new Error('Error fetching users count'); + } + }, +); diff --git a/src/actions/get-users/index.ts b/src/actions/get-users/index.ts new file mode 100644 index 000000000..0b29d7b80 --- /dev/null +++ b/src/actions/get-users/index.ts @@ -0,0 +1,20 @@ +import { cache } from 'react'; + +import prisma from 'lib/prisma'; + +import type { User } from '@prisma/client'; + +export const getUsers = cache(async (tenantId: string): Promise => { + try { + if (!tenantId) { + throw new Error('User not found'); + } + const users = await prisma.user.findMany({ + where: { tenantId }, + }); + if (!users) return []; + return users; + } catch { + throw new Error('Error fetching users'); + } +}); diff --git a/src/actions/sign-in/index.ts b/src/actions/sign-in/index.ts new file mode 100644 index 000000000..5a885f518 --- /dev/null +++ b/src/actions/sign-in/index.ts @@ -0,0 +1,8 @@ +'use server'; + +import { signIn } from '@/auth'; +import { Routes } from '@/utils/routing'; + +export const signInAction = async () => { + await signIn('google', { redirectTo: Routes.SITE.HOME }); +}; diff --git a/src/actions/sign-out/index.ts b/src/actions/sign-out/index.ts new file mode 100644 index 000000000..f0e16504a --- /dev/null +++ b/src/actions/sign-out/index.ts @@ -0,0 +1,8 @@ +'use server'; + +import { signOut } from '@/auth'; +import { Routes } from '@/utils/routing'; + +export const signOutAction = async () => { + await signOut({ redirectTo: Routes.SITE.HOME }); +}; diff --git a/src/actions/update-answer/action.ts b/src/actions/update-answer/action.ts new file mode 100644 index 000000000..0f0253d01 --- /dev/null +++ b/src/actions/update-answer/action.ts @@ -0,0 +1,25 @@ +'use server'; + +import { revalidatePath } from 'next/cache'; +import { redirect } from 'next/navigation'; + +import { authActionClient } from '@/lib/safe-actions'; +import { Routes } from '@/utils/routing'; +import prisma from 'lib/prisma'; + +import { updateAnswerSchema } from './schema'; + +export const updateAnswer = authActionClient + .metadata({ actionName: 'updateAnswer' }) + .schema(updateAnswerSchema) + .action(async ({ parsedInput: { text, id }, ctx: { userId } }) => { + await prisma.answer.update({ + where: { id }, + data: { + text, + userId, + }, + }); + revalidatePath(Routes.SITE.HOME); + redirect(Routes.SITE.HOME); + }); diff --git a/src/actions/update-answer/schema.ts b/src/actions/update-answer/schema.ts new file mode 100644 index 000000000..2b6a1ab9b --- /dev/null +++ b/src/actions/update-answer/schema.ts @@ -0,0 +1,10 @@ +import { z } from 'zod'; + +export const updateAnswerSchema = z.object({ + text: z + .string() + .trim() + .min(1, { message: 'Answer is required' }) + .max(1000, { message: 'Answer must be under 1000 characters long' }), + id: z.string().cuid2(), +}); diff --git a/src/actions/update-logo/action.ts b/src/actions/update-logo/action.ts new file mode 100644 index 000000000..db2b35a12 --- /dev/null +++ b/src/actions/update-logo/action.ts @@ -0,0 +1,46 @@ +'use server'; + +import { + DeleteObjectCommand, + DeleteObjectCommandInput, +} from '@aws-sdk/client-s3'; +import { revalidatePath } from 'next/cache'; +import { redirect } from 'next/navigation'; + +import { s3Client } from '@/lib/aws'; +import { authActionClient } from '@/lib/safe-actions'; +import { Routes } from '@/utils/routing'; +import prisma from 'lib/prisma'; + +import { updateLogoSchema } from './schema'; + +export const updateLogo = authActionClient + .metadata({ actionName: 'updateLogo' }) + .schema(updateLogoSchema) + .action(async ({ parsedInput: { url, id } }) => { + const tenant = await prisma.tenant.findUnique({ + where: { id }, + select: { + logo: true, + company: true, + }, + }); + const oldLogo = tenant?.logo; + if (oldLogo) { + const fileName = oldLogo.substring(oldLogo.lastIndexOf('/') + 1); + const params: DeleteObjectCommandInput = { + Bucket: process.env.AWS_S3_BUCKET as string, + Key: `${tenant.company}/${fileName}`, + }; + const command = new DeleteObjectCommand(params); + await s3Client.send(command); + } + await prisma.tenant.update({ + where: { id }, + data: { + logo: url, + }, + }); + revalidatePath(Routes.SITE.HOME); + redirect(Routes.SITE.HOME); + }); diff --git a/src/actions/update-logo/schema.ts b/src/actions/update-logo/schema.ts new file mode 100644 index 000000000..f574e293a --- /dev/null +++ b/src/actions/update-logo/schema.ts @@ -0,0 +1,11 @@ +import { z } from 'zod'; + +const path = process.env.NEXT_PUBLIC_AWS_CLOUDFRONT_URL; + +export const updateLogoSchema = z.object({ + url: z + .string() + .url() + .regex(new RegExp(`^${path}`)), + id: z.string().cuid2(), +}); diff --git a/src/actions/update-node/action.ts b/src/actions/update-node/action.ts new file mode 100644 index 000000000..580bc45ed --- /dev/null +++ b/src/actions/update-node/action.ts @@ -0,0 +1,57 @@ +'use server'; + +import { revalidatePath } from 'next/cache'; +import { redirect } from 'next/navigation'; +import slugify from 'slugify'; + +import { ActionError, authActionClient } from '@/lib/safe-actions'; +import { Routes } from '@/utils/routing'; +import prisma from 'lib/prisma'; + +import { updateNodeSchema } from './schema'; + +export const updateNode = authActionClient + .metadata({ actionName: 'updateNode' }) + .schema(updateNodeSchema) + .action( + async ({ + parsedInput: { tenantId, questionId, text, tags, id }, + ctx: { userId }, + }) => { + const duplicateQuestion = await prisma.node.findFirst({ + where: { + tenantId, + question: { text }, + tags: { every: { id: { in: tags }, tenantId }, some: {} }, + }, + }); + if (duplicateQuestion) { + throw new ActionError('This question already exists'); + } + await prisma.node.update({ + where: { id, tenantId: tenantId as string }, + data: { + question: { + update: { + where: { id: questionId as string }, + data: { + text: text as string, + slug: slugify(text).toLowerCase(), + user: { connect: { id: userId } }, + }, + }, + }, + tags: { + set: tags.map((tag: string) => { + return { + id: tag, + tenantId, + }; + }), + }, + }, + }); + revalidatePath(Routes.SITE.HOME); + redirect(Routes.SITE.HOME); + }, + ); diff --git a/src/actions/update-node/schema.ts b/src/actions/update-node/schema.ts new file mode 100644 index 000000000..75a4660d1 --- /dev/null +++ b/src/actions/update-node/schema.ts @@ -0,0 +1,14 @@ +import { z } from 'zod'; + +export const updateNodeSchema = z.object({ + text: z + .string() + .trim() + .min(3, { message: 'Question must be at least 3 characters long' }) + .max(100, { message: 'Question must be under 100 characters long' }), + userId: z.string().cuid2(), + questionId: z.string().cuid2(), + tenantId: z.string().cuid2(), + tags: z.array(z.string().cuid2()), + id: z.string().cuid2(), +}); diff --git a/src/actions/update-tag/action.ts b/src/actions/update-tag/action.ts new file mode 100644 index 000000000..6eb8bac7e --- /dev/null +++ b/src/actions/update-tag/action.ts @@ -0,0 +1,23 @@ +'use server'; + +import { revalidatePath } from 'next/cache'; + +import { authActionClient } from '@/lib/safe-actions'; +import { Routes } from '@/utils/routing'; +import prisma from 'lib/prisma'; + +import { updateTagSchema } from './schema'; + +export const updateTag = authActionClient + .metadata({ actionName: 'updateTag' }) + .schema(updateTagSchema) + .action(async ({ parsedInput: { label, tenantId, id } }) => { + await prisma.tag.update({ + where: { id, tenantId }, + data: { + label, + }, + }); + revalidatePath(Routes.SITE.SETTINGS); + return { message: 'Tag updated successfully' }; + }); diff --git a/src/actions/update-tag/schema.ts b/src/actions/update-tag/schema.ts new file mode 100644 index 000000000..a67475ef1 --- /dev/null +++ b/src/actions/update-tag/schema.ts @@ -0,0 +1,11 @@ +import { z } from 'zod'; + +export const updateTagSchema = z.object({ + id: z.string().cuid2(), + label: z + .string() + .trim() + .min(1, { message: 'Tag name is required' }) + .max(50, { message: 'Tag name is too long' }), + tenantId: z.string().cuid2(), +}); diff --git a/src/actions/update-tenant/action.ts b/src/actions/update-tenant/action.ts new file mode 100644 index 000000000..3a9a1457c --- /dev/null +++ b/src/actions/update-tenant/action.ts @@ -0,0 +1,35 @@ +'use server'; + +import { revalidatePath } from 'next/cache'; +import { redirect } from 'next/navigation'; + +import { authActionClient } from '@/lib/safe-actions'; +import { Routes } from '@/utils/routing'; +import prisma from 'lib/prisma'; + +import { updateTenantSchema } from './schema'; + +export const updateTenant = authActionClient + .metadata({ actionName: 'updateTenant' }) + .schema(updateTenantSchema) + .action(async ({ parsedInput: { company, id, email, slack } }) => { + await prisma.tenant.update({ + where: { id }, + data: { + company, + email, + }, + }); + if (slack) { + await prisma.integrations.upsert({ + where: { tenantId: id }, + update: { slack }, + create: { + slack, + tenantId: id, + }, + }); + } + revalidatePath(Routes.SITE.SETTINGS); + redirect(Routes.SITE.HOME); + }); diff --git a/src/actions/update-tenant/schema.ts b/src/actions/update-tenant/schema.ts new file mode 100644 index 000000000..d7881f483 --- /dev/null +++ b/src/actions/update-tenant/schema.ts @@ -0,0 +1,22 @@ +import { z } from 'zod'; + +import { Limits } from '@/utils/limits'; + +export const updateTenantSchema = z.object({ + company: z + .string() + .trim() + .min(1, { message: 'Company name is required' }) + .max(Limits.COMPANY, { message: 'Company name is too long' }), + email: z + .string() + .trim() + .min(1, { message: 'Email is required' }) + .max(Limits.EMAIL, { message: 'Email is too long' }) + .email({ message: 'Invalid email' }), + slack: z.union([ + z.literal(''), + z.string().trim().url({ message: 'Invalid URL' }), + ]), + id: z.string().cuid2(), +}); diff --git a/src/actions/update-user/action.ts b/src/actions/update-user/action.ts new file mode 100644 index 000000000..bda5ab042 --- /dev/null +++ b/src/actions/update-user/action.ts @@ -0,0 +1,25 @@ +'use server'; + +import { revalidatePath } from 'next/cache'; + +import { authActionClient } from '@/lib/safe-actions'; +import { Routes } from '@/utils/routing'; +import prisma from 'lib/prisma'; + +import { updateUserSchema } from './schema'; + +export const updateUser = authActionClient + .metadata({ actionName: 'updateUser' }) + .schema(updateUserSchema) + .action(async ({ parsedInput: { tenantId, email, id, name, role } }) => { + await prisma.user.update({ + where: { id, tenantId }, + data: { + email, + name, + role, + }, + }); + revalidatePath(Routes.SITE.PROFILE); + return { message: 'User updated successfully' }; + }); diff --git a/src/actions/update-user/schema.ts b/src/actions/update-user/schema.ts new file mode 100644 index 000000000..59fb63b9b --- /dev/null +++ b/src/actions/update-user/schema.ts @@ -0,0 +1,22 @@ +import { z } from 'zod'; + +import { ROLE } from '@/utils/constants'; +import { Limits } from '@/utils/limits'; + +export const updateUserSchema = z.object({ + tenantId: z.string().cuid2(), + email: z + .string() + .trim() + .min(1, { message: 'User email is required' }) + .max(Limits.EMAIL, { message: 'Email is too long' }) + .email({ message: 'Invalid email' }) + .optional(), + name: z + .string() + .trim() + .max(Limits.NAME, { message: 'Name is too long' }) + .optional(), + role: z.enum(ROLE).optional(), + id: z.string().cuid2(), +}); diff --git a/src/actions/upload-file/action.ts b/src/actions/upload-file/action.ts new file mode 100644 index 000000000..2e6ad2da0 --- /dev/null +++ b/src/actions/upload-file/action.ts @@ -0,0 +1,35 @@ +'use server'; + +import { PutObjectCommand, PutObjectCommandInput } from '@aws-sdk/client-s3'; + +import { s3Client } from '@/lib/aws'; + +export async function uploadFile( + file: File, + fileName: string, + company: string, +) { + const fileBuffer = (await file.arrayBuffer()) as Buffer; + const params: PutObjectCommandInput = { + Bucket: process.env.AWS_S3_BUCKET as string, + Key: `${company}/${fileName}`, + Body: fileBuffer, + ContentType: file.type, + }; + const command = new PutObjectCommand(params); + await s3Client.send(command); +} + +export const submitImage = async (formData: FormData, field: string) => { + const image = formData.get(field); + if (typeof image !== 'object' || !image || image?.size === 0) { + return ''; + } + //eslint-disable-next-line no-control-regex + const asciiName = image.name.replace(/[^\x00-\x7F]/g, '').replace('', '_'); + const fileName = `${new Date().getTime()}-${asciiName}`; + const company = formData.get('company') as string; + await uploadFile(image as File, fileName, company); + const url = `${process.env.NEXT_PUBLIC_AWS_CLOUDFRONT_URL}/${company}/${fileName}`; + return url; +}; diff --git a/src/app/api/auth/[...nextauth]/route.ts b/src/app/api/auth/[...nextauth]/route.ts new file mode 100644 index 000000000..0aa1cd732 --- /dev/null +++ b/src/app/api/auth/[...nextauth]/route.ts @@ -0,0 +1,2 @@ +import { handlers } from '@/auth'; +export const { GET, POST } = handlers; diff --git a/src/app/api/auth/token/route.ts b/src/app/api/auth/token/route.ts new file mode 100644 index 000000000..e51a28087 --- /dev/null +++ b/src/app/api/auth/token/route.ts @@ -0,0 +1,10 @@ +import { cookies } from 'next/headers'; +import { NextResponse } from 'next/server'; + +export async function GET() { + const getCookies = await cookies(); + const nextAuthSession = + getCookies.get('next-auth.session-token')?.value || ''; + + return NextResponse.json(nextAuthSession); +} diff --git a/src/app/api/stripe/billing/route.ts b/src/app/api/stripe/billing/route.ts new file mode 100644 index 000000000..98ac46b08 --- /dev/null +++ b/src/app/api/stripe/billing/route.ts @@ -0,0 +1,137 @@ +import { NextResponse } from 'next/server'; +import Stripe from 'stripe'; + +import { STRIPE_VERSION } from '@/utils/constants'; +import prisma from 'lib/prisma'; + +import type { NextRequest } from 'next/server'; + +const stripe = new Stripe(process.env.STRIPE_SECRET_KEY, { + apiVersion: STRIPE_VERSION, +}); + +type Products = { + product: string; + prices: Stripe.Price[]; +}; + +export async function POST(req: NextRequest) { + try { + const body = await req.json(); + if (!body) { + return NextResponse.json( + { + error: 'Customer details not provided', + }, + { status: 500 }, + ); + } + const { tenantId } = body; + const tenant = await prisma.tenant.findUnique({ + where: { id: tenantId }, + select: { + customerId: true, + plan: true, + }, + }); + if (!tenant) { + return NextResponse.json({ error: 'Tenant not found' }, { status: 400 }); + } + const { customerId, plan } = tenant; + const usersCount = await prisma.user.count({ + where: { tenantId }, + }); + const tagsCount = await prisma.tag.count({ + where: { tenantId }, + }); + const productsList = await stripe.products.list({ + active: true, + }); + const [free, startup, enterprise] = productsList.data; + const products: Products[] = []; + switch (plan) { + case 'free': + products.push( + { product: free.id, prices: [free.default_price] }, + { product: startup.id, prices: [startup.default_price] }, + { product: enterprise.id, prices: [enterprise.default_price] }, + ); + break; + case 'startup': + if (usersCount <= 5 && tagsCount <= 3) { + products.push( + { product: free.id, prices: [free.default_price] }, + { product: startup.id, prices: [startup.default_price] }, + { product: enterprise.id, prices: [enterprise.default_price] }, + ); + } else { + products.push( + { product: startup.id, prices: [startup.default_price] }, + { product: enterprise.id, prices: [enterprise.default_price] }, + ); + } + break; + case 'enterprise': + if (usersCount <= 5 && tagsCount <= 3) { + products.push( + { product: free.id, prices: [free.default_price] }, + { product: startup.id, prices: [startup.default_price] }, + { product: enterprise.id, prices: [enterprise.default_price] }, + ); + } else if (usersCount <= 100 && tagsCount <= 10) { + products.push( + { product: startup.id, prices: [startup.default_price] }, + { product: enterprise.id, prices: [enterprise.default_price] }, + ); + } else { + products.push({ + product: enterprise.id, + prices: [enterprise.default_price], + }); + } + break; + default: + break; + } + const configuration = await stripe.billingPortal.configurations.create({ + business_profile: { + privacy_policy_url: 'https://example.com/privacy', + terms_of_service_url: 'https://example.com/terms', + }, + default_return_url: process.env.NEXT_PUBLIC_SITE_URL, + features: { + customer_update: { + allowed_updates: ['name', 'email'], + enabled: true, + }, + invoice_history: { + enabled: true, + }, + payment_method_update: { + enabled: true, + }, + subscription_cancel: { + enabled: true, + mode: 'at_period_end', + }, + subscription_update: { + enabled: true, + default_allowed_updates: ['price', 'promotion_code'], + products, + }, + }, + }); + const { url } = await stripe.billingPortal.sessions.create({ + customer: customerId, + configuration: configuration.id, + }); + return NextResponse.json({ url, customerId, plan }); + } catch { + return NextResponse.json( + { + error: 'Error creating billing session', + }, + { status: 500 }, + ); + } +} diff --git a/src/pages/api/stripe/checkout/[id].ts b/src/app/api/stripe/checkout/[id].ts similarity index 79% rename from src/pages/api/stripe/checkout/[id].ts rename to src/app/api/stripe/checkout/[id].ts index 63f4607fb..437c46655 100644 --- a/src/pages/api/stripe/checkout/[id].ts +++ b/src/app/api/stripe/checkout/[id].ts @@ -1,8 +1,11 @@ -import { NextApiRequest, NextApiResponse } from 'next'; import Stripe from 'stripe'; +import { STRIPE_VERSION } from '@/utils/constants'; + +import type { NextApiRequest, NextApiResponse } from 'next'; + const stripe = new Stripe(process.env.STRIPE_SECRET_KEY, { - apiVersion: '2023-10-16', + apiVersion: STRIPE_VERSION, }); export default async function handler( diff --git a/src/app/api/stripe/checkout/route.ts b/src/app/api/stripe/checkout/route.ts new file mode 100644 index 000000000..aeb24580d --- /dev/null +++ b/src/app/api/stripe/checkout/route.ts @@ -0,0 +1,55 @@ +import { NextResponse } from 'next/server'; +import Stripe from 'stripe'; + +import { createCheckoutSchema } from '@/lib/validations'; +import { STRIPE_VERSION } from '@/utils/constants'; +import { Routes } from '@/utils/routing'; + +import type { NextRequest } from 'next/server'; + +const stripe = new Stripe(process.env.STRIPE_SECRET_KEY, { + apiVersion: STRIPE_VERSION, +}); + +export async function POST(req: NextRequest) { + try { + const body = await req.json(); + if (!body) { + return NextResponse.json( + { error: 'Information not provided' }, + { status: 500 }, + ); + } + const result = createCheckoutSchema.safeParse(body); + if (result.success === false) { + const errors = result.error.flatten().fieldErrors; + return NextResponse.json({ error: errors }, { status: 500 }); + } + const { lookup_key, customerId } = result.data; + const prices = await stripe.prices.list({ + lookup_keys: [lookup_key], + }); + const session = await stripe.checkout.sessions.create({ + line_items: [ + { + price: prices.data[0].id, + quantity: 1, + }, + ], + customer: customerId, + customer_update: { + address: 'auto', + }, + mode: 'subscription', + success_url: `${process.env.NEXT_PUBLIC_SITE_URL}/${Routes.SITE.LOGIN}`, + cancel_url: `${process.env.NEXT_PUBLIC_SITE_URL}/register/plan?status=cancel`, + automatic_tax: { enabled: true }, + }); + return NextResponse.json({ id: session.id }); + } catch { + return NextResponse.json( + { error: 'Error creating checkout session' }, + { status: 500 }, + ); + } +} diff --git a/src/pages/api/stripe/webhooks/index.ts b/src/app/api/stripe/webhooks/route.ts similarity index 75% rename from src/pages/api/stripe/webhooks/index.ts rename to src/app/api/stripe/webhooks/route.ts index 85abcf86c..a037b8cf5 100644 --- a/src/pages/api/stripe/webhooks/index.ts +++ b/src/app/api/stripe/webhooks/route.ts @@ -1,43 +1,29 @@ -import { NextApiRequest, NextApiResponse } from 'next'; +/* eslint-disable no-case-declarations */ + +import { headers } from 'next/headers'; +import { NextRequest, NextResponse } from 'next/server'; import { Stripe } from 'stripe'; -import { IPlan } from '@/types'; +import { IPlan } from '@/types/global'; +import { STRIPE_VERSION } from '@/utils/constants'; import prisma from 'lib/prisma'; const stripe = new Stripe(process.env.STRIPE_SECRET_KEY, { - apiVersion: '2023-10-16', + apiVersion: STRIPE_VERSION, }); const webhookSecret = process.env.STRIPE_WEBHOOK_SECRET!; -const STRIPE_SIGNATURE_HEADER = 'stripe-signature'; - -async function buffer(readable) { - const chunks = []; - for await (const chunk of readable) { - chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk); - } - return Buffer.concat(chunks); -} -export const config = { - api: { - bodyParser: false, - }, -}; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - const body = await buffer(req); - const signature = req.headers[STRIPE_SIGNATURE_HEADER]; +export async function POST(req: NextRequest) { + const body = await req.text(); + const headersList = await headers(); + const signature = headersList.get('Stripe-Signature'); let event: Stripe.Event; try { event = stripe.webhooks.constructEvent(body, signature!, webhookSecret); } catch (error) { - console.error(`Webhook signature verification failed.`, error.message); - return res.status(500).json({ error: error.message }); + return NextResponse.json({ error: error.message }, { status: 400 }); } const permittedEvents: string[] = [ @@ -97,6 +83,7 @@ export default async function handler( email: customer.email, }, }); + break; case 'payment_intent.payment_failed': data = event.data.object as Stripe.PaymentIntent; console.log(`❌ Payment failed: ${data.last_payment_error?.message}`); @@ -116,13 +103,17 @@ export default async function handler( }); break; default: - throw new Error(`Unhandled event: ${event.type}`); + return NextResponse.json( + { message: `Unhandled event: ${event.type}` }, + { status: 400 }, + ); } } catch (error) { - if (error instanceof Error) { - return res.status(500).json({ error: error.message }); - } + return NextResponse.json( + { error: `Webhook error: ${error.message}` }, + { status: 500 }, + ); } } - return res.status(200).json({ message: 'Received' }); + return new NextResponse('Received'); } diff --git a/src/app/error.tsx b/src/app/error.tsx new file mode 100644 index 000000000..f3ddcc814 --- /dev/null +++ b/src/app/error.tsx @@ -0,0 +1,35 @@ +'use client'; + +import { useEffect } from 'react'; + +import Link from 'next/link'; + +import { Button } from '@/components/button/Button'; +import { Routes } from '@/utils/routing'; + +export default function Error({ + error, + reset, +}: { + error: Error & { digest?: string }; + reset: () => void; +}) { + useEffect(() => { + console.error(error); + }, [error]); + + return ( +
+

Something went wrong!

+

{error.message}

+
+ + +
+
+ ); +} diff --git a/src/app/favicon.ico b/src/app/favicon.ico new file mode 100644 index 000000000..f5d4fbd34 Binary files /dev/null and b/src/app/favicon.ico differ diff --git a/src/app/home.tsx b/src/app/home.tsx new file mode 100644 index 000000000..17342b9d7 --- /dev/null +++ b/src/app/home.tsx @@ -0,0 +1,65 @@ +'use client'; + +import { useSearchParams } from 'next/navigation'; + +import { Pagination } from '@/components/pagination/Pagination'; +import { List } from '@/modules/home/List'; +import { Search } from '@/modules/search/Search'; +import { ExtendedNode, ExtendedFavorites } from '@/types/models/node'; +import { OFFSET } from '@/utils/constants'; + +import type { Tag } from '@prisma/client'; + +type Props = { + initialNodes: ExtendedNode[]; + filteredNodes: ExtendedNode[]; + filteredTags: ExtendedNode[]; + nodesCount: number; + tags: Tag[]; + favorites: ExtendedFavorites[]; +}; + +export default function Home({ + initialNodes, + filteredNodes, + filteredTags, + nodesCount, + tags, + favorites, +}: Props) { + const searchParams = useSearchParams(); + const query = searchParams.get('query') || ''; + const tag = searchParams.get('tag') || ''; + const page = searchParams.get('page') || 0; + + let nodes: ExtendedNode[] = []; + let message = 'Ask a question'; + + if (query) { + if (filteredNodes && filteredNodes.length > 0) { + nodes = filteredNodes; + } else { + nodes = []; + message = 'No results'; + } + } else if (tag) { + if (filteredTags && filteredTags.length > 0) { + nodes = filteredTags; + } else { + nodes = []; + message = 'No results'; + } + } else { + nodes = initialNodes ?? []; + } + + return ( + <> + + + {nodesCount > OFFSET && (nodes.length === OFFSET || page !== 0) && ( + + )} + + ); +} diff --git a/src/app/layout.tsx b/src/app/layout.tsx new file mode 100644 index 000000000..38fdc08e7 --- /dev/null +++ b/src/app/layout.tsx @@ -0,0 +1,18 @@ +import '@/styles/globals.css'; +import type { ReactNode } from 'react'; + +import Providers from './providers'; + +type Props = { + children: ReactNode; +}; + +export default function RootLayout({ children }: Props) { + return ( + + + {children} + + + ); +} diff --git a/src/app/loading.tsx b/src/app/loading.tsx new file mode 100644 index 000000000..cf32411b8 --- /dev/null +++ b/src/app/loading.tsx @@ -0,0 +1,5 @@ +import { Loader } from '@/components/loader/Loader'; + +export default function Loading() { + return ; +} diff --git a/src/app/login/EmailForm.tsx b/src/app/login/EmailForm.tsx new file mode 100644 index 000000000..10b749a64 --- /dev/null +++ b/src/app/login/EmailForm.tsx @@ -0,0 +1,70 @@ +'use client'; + +import { useEffect, useState } from 'react'; + +import { zodResolver } from '@hookform/resolvers/zod'; +import { AtSign } from 'lucide-react'; +import { signIn } from 'next-auth/react'; +import { useForm } from 'react-hook-form'; +import { z } from 'zod'; + +import { Button } from '@/components/button/Button'; +import { Field } from '@/components/field/Field'; +import { Input } from '@/components/input/Input'; +import { successToast } from '@/components/toast/Toast'; +import { userEmailSchema } from '@/lib/validations'; + +import type { SubmitHandler } from 'react-hook-form'; + +type Schema = z.infer; + +export default function EmailForm() { + const [disabled, setDisabled] = useState(true); + + const { + register, + handleSubmit, + formState: { isSubmitting, isDirty, errors, isValid }, + } = useForm({ + resolver: zodResolver(userEmailSchema), + mode: 'onChange', + defaultValues: { + email: '', + }, + }); + + const onSubmit: SubmitHandler = async (data) => { + const { email } = data; + await signIn('resend', { email }); + successToast(`Link sent to ${data.email}`); + }; + + useEffect(() => { + setDisabled(isSubmitting || !isDirty || !isValid); + }, [isDirty, isSubmitting, isValid]); + return ( +
+
+
+ + } + type="email" + id="email" + placeholder="john.doe@email.com" + /> + +
+
+ +
+ ); +} diff --git a/src/app/login/layout.tsx b/src/app/login/layout.tsx new file mode 100644 index 000000000..91229034f --- /dev/null +++ b/src/app/login/layout.tsx @@ -0,0 +1,20 @@ +import type { ReactNode } from 'react'; + +import { ThemeToggle } from '@/modules/theme/ThemeToggle'; + +type Props = { + children: ReactNode; +}; + +export default function Layout({ children }: Props) { + return ( +
+
+ +
+
+ {children} +
+
+ ); +} diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx new file mode 100644 index 000000000..a8edf4af8 --- /dev/null +++ b/src/app/login/page.tsx @@ -0,0 +1,84 @@ +import Image from 'next/image'; +import Link from 'next/link'; + +import { signInAction } from '@/actions/sign-in'; +import googleIcon from '@/assets/google.svg'; +import { Button } from '@/components/button/Button'; +import { Routes } from '@/utils/routing'; + +import EmailForm from './EmailForm'; + +const loginErrors = { + Signin: 'Try signing with a different account.', + OAuthSignin: 'Try signing with a different account.', + OAuthCallback: 'Try signing with a different account.', + OAuthCreateAccount: 'Try signing with a different account.', + EmailCreateAccount: 'Try signing with a different account.', + Callback: 'Try signing with a different account.', + OAuthAccountNotLinked: + 'To confirm your identity, sign in with the same account you used originally.', + EmailSignin: 'Check your email address.', + CredentialsSignin: + 'Sign in failed. Check the details you provided are correct.', + AccessDenied: 'User not found.', + default: 'Unable to sign in.', +}; + +type ErrorProps = { + error: string; +}; + +const LoginError = ({ error }: ErrorProps) => { + const errorMessage = error && (loginErrors[error] ?? loginErrors.default); + return
{errorMessage}
; +}; + +export default async function Page(props) { + const searchParams = await props.searchParams; + const { error } = searchParams; + + return ( +
+
+

+ Login +

+

+ Use your associated account +

+
+ +
+
+ OR +
+
+
+ +
+ {error && } +

+ No client account ?{' '} + + Register + +

+
+ ); +} diff --git a/src/app/page.tsx b/src/app/page.tsx new file mode 100644 index 000000000..ccac53530 --- /dev/null +++ b/src/app/page.tsx @@ -0,0 +1,53 @@ +import { redirect } from 'next/navigation'; + +import { getFavorites } from '@/actions/get-favorites'; +import { getMe } from '@/actions/get-me'; +import { getPaginatedNodes } from '@/actions/get-nodes'; +import { getNodesCount } from '@/actions/get-nodes-count'; +import { getSearchNodes } from '@/actions/get-search-nodes'; +import { getSearchTags } from '@/actions/get-search-tags'; +import { getTags } from '@/actions/get-tags'; +import { Footer } from '@/modules/footer/Footer'; +import { Header } from '@/modules/header/Header'; +import { Routes } from '@/utils/routing'; + +import Home from './home'; + +export default async function Page(props) { + const searchParams = await props.searchParams; + const me = await getMe(); + + if (!me) { + redirect(Routes.SITE.LOGIN); + } + + const { tenantId, id: userId } = me; + const page = Number(searchParams?.page) || 0; + const query = searchParams.query || ''; + const tag = searchParams.tag || ''; + + const body = { tenantId, page }; + const initialNodes = await getPaginatedNodes(body); + const filteredNodes = await getSearchNodes(tenantId, query); + const filteredTags = await getSearchTags(tenantId, tag); + const nodesCount = await getNodesCount(tenantId); + const tags = await getTags(tenantId); + const favorites = await getFavorites(userId); + + return ( +
+
+
+ +
+
+
+ ); +} diff --git a/src/app/profile/page.tsx b/src/app/profile/page.tsx new file mode 100644 index 000000000..c4418876e --- /dev/null +++ b/src/app/profile/page.tsx @@ -0,0 +1,33 @@ +import { redirect } from 'next/navigation'; + +import { getFavorites } from '@/actions/get-favorites'; +import { getMe } from '@/actions/get-me'; +import { getUserAnswers } from '@/actions/get-user-answers'; +import { getUserQuestions } from '@/actions/get-user-questions'; +import { Footer } from '@/modules/footer/Footer'; +import { Header } from '@/modules/header/Header'; +import { Routes } from '@/utils/routing'; + +import Profile from './profile'; + +export default async function Page() { + const me = await getMe(); + + if (!me) return redirect(Routes.SITE.LOGIN); + + const questions = await getUserQuestions(me.id); + const answers = await getUserAnswers(me.id); + const favorites = await getFavorites(me.id); + return ( +
+
+ +
+
+ ); +} diff --git a/src/app/profile/profile.tsx b/src/app/profile/profile.tsx new file mode 100644 index 000000000..6916d62b3 --- /dev/null +++ b/src/app/profile/profile.tsx @@ -0,0 +1,90 @@ +'use client'; + +import { + Tabs, + TabsContent, + TabsList, + TabsTrigger, +} from '@/components/tabs/Tabs'; +import { UserAnswers } from '@/modules/profile/Answers'; +import { UserFavorites } from '@/modules/profile/Favorites'; +import { UserQuestions } from '@/modules/profile/Questions'; +import { UpdateProfile } from '@/modules/profile/Update'; +import { + QuestionWithNodeId, + NodeWithQuestionAndAnswer, + ExtendedFavorites, +} from '@/types/models/node'; +import { Me } from '@/types/models/user'; + +type Props = { + me: Me; + questions?: QuestionWithNodeId[]; + answers?: NodeWithQuestionAndAnswer[]; + favorites?: ExtendedFavorites[]; +}; + +export default function Profile({ me, questions, answers, favorites }: Props) { + const tabs = [ + { + value: 'profile', + label: 'Profile', + }, + { + value: 'questions', + label: 'Questions', + }, + { + value: 'answers', + label: 'Answers', + }, + { + value: 'favorites', + label: 'Favorites', + }, + ]; + + return ( +
+
+

Profile

+

+ Manage your account information and find your questions / answers. +

+
+
+ + +
+ + + + + + + + + + + + +
+
+
+ ); +} diff --git a/src/app/providers.tsx b/src/app/providers.tsx new file mode 100644 index 000000000..c4069988a --- /dev/null +++ b/src/app/providers.tsx @@ -0,0 +1,52 @@ +'use client'; + +import '@/styles/globals.css'; +import { Provider } from 'jotai'; +import { Inter, Merriweather } from 'next/font/google'; +import { SessionProvider } from 'next-auth/react'; +import { ThemeProvider } from 'next-themes'; +import { Toaster } from 'sonner'; + +import { TooltipProvider } from '@/components/tooltip/Tooltip'; + +const merriweather = Merriweather({ + subsets: ['latin'], + weight: '400', + variable: '--font-merriweather', +}); +const inter = Inter({ + subsets: ['latin'], + weight: ['400', '600', '700'], + variable: '--font-inter', +}); + +export default function Providers({ children }) { + return ( + + + + + +
+ {children} +
+
+
+
+
+ ); +} diff --git a/src/app/question/[id]/page.tsx b/src/app/question/[id]/page.tsx new file mode 100644 index 000000000..051aa8e6a --- /dev/null +++ b/src/app/question/[id]/page.tsx @@ -0,0 +1,32 @@ +import { redirect } from 'next/navigation'; + +import { getFavorite } from '@/actions/get-favorite'; +import { getMe } from '@/actions/get-me'; +import { getNode } from '@/actions/get-node'; +import { Footer } from '@/modules/footer/Footer'; +import { Header } from '@/modules/header/Header'; +import { Routes } from '@/utils/routing'; + +import Question from './question'; + +export default async function Page(props) { + const params = await props.params; + const me = await getMe(); + + if (!me) return redirect(Routes.SITE.LOGIN); + const { tenantId, id: userId } = me; + const { id } = params; + if (!id) return redirect(Routes.SITE.HOME); + + const node = await getNode(tenantId, id); + const favorite = await getFavorite(userId, node.id); + return ( +
+
+
+ +
+
+
+ ); +} diff --git a/src/app/question/[id]/question.tsx b/src/app/question/[id]/question.tsx new file mode 100644 index 000000000..030e4f291 --- /dev/null +++ b/src/app/question/[id]/question.tsx @@ -0,0 +1,221 @@ +'use client'; + +import { zodResolver } from '@hookform/resolvers/zod'; +import { + HelpCircle, + PenSquare, + LinkIcon, + Bookmark, + BookmarkCheck, + Badge, +} from 'lucide-react'; +import dynamic from 'next/dynamic'; +import Link from 'next/link'; +import { usePathname } from 'next/navigation'; +import { useForm } from 'react-hook-form'; +import { z } from 'zod'; + +import { createFavorite } from '@/actions/create-favorite/action'; +import { createFavoriteSchema } from '@/actions/create-favorite/schema'; +import { deleteFavorite } from '@/actions/delete-favorite/action'; +import { BackButton } from '@/components/button/BackButton'; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from '@/components/dropdown/Dropdown'; +import { resultToast } from '@/components/toast/Toast'; +import { + Tooltip, + TooltipContent, + TooltipTrigger, +} from '@/components/tooltip/Tooltip'; +import { ExtendedNode } from '@/types/models/node'; +import { dateOptions } from '@/utils/date'; +import { Routes } from '@/utils/routing'; + +import type { Favorite } from '@prisma/client'; +import type { SubmitHandler } from 'react-hook-form'; + +const MarkdownPreview = dynamic(() => import('@uiw/react-markdown-preview'), { + ssr: false, +}); + +type Props = { + node: ExtendedNode; + favorite: Favorite; +}; + +type Schema = z.infer; + +export default function Question({ node, favorite }: Props) { + const pathname = usePathname(); + + const { handleSubmit } = useForm({ + resolver: zodResolver(createFavoriteSchema), + mode: 'onBlur', + defaultValues: { + nodeId: node.id, + }, + }); + + const onSubmit: SubmitHandler = async (data) => { + if (favorite?.nodeId === node.id) { + const result = await deleteFavorite(data); + resultToast(result?.serverError, result?.data?.message); + } else { + const result = await createFavorite(data); + resultToast(result?.serverError, result?.data?.message); + } + }; + + return ( +
+
+ + + + Edit + + + + + + Question + + + + + + Answer + + + + +
+
+
+

{node.question.text}

+
+
+ + + + + + {favorite?.nodeId === node.id + ? 'Remove from favorites' + : 'Add to favorites'} + + +
+ + + + + Copy URL + +
+
+
    + {node.tags.map((tag) => ( +
  • + {tag.label} +
  • + ))} +
+
+ {node.answer ? ( + + ) : ( +

No answer

+ )} +
+
+
+

+ Asked by {node.question.user.name} +

+

+ Asked on{' '} + + {new Date(node.question.createdAt).toLocaleDateString( + undefined, + dateOptions, + )} + +

+

+ Updated on{' '} + + {new Date(node.question.updatedAt).toLocaleDateString( + undefined, + dateOptions, + )} + +

+
+ {node.answer && ( +
+

+ Answered by {node.answer.user.name} +

+

+ Answered on{' '} + + {new Date(node.answer.createdAt).toLocaleDateString( + undefined, + dateOptions, + )} + +

+

+ Updated on{' '} + + {new Date(node.answer.updatedAt).toLocaleDateString( + undefined, + dateOptions, + )} + +

+
+ )} +
+
+
+ ); +} diff --git a/src/app/question/answer/answer.tsx b/src/app/question/answer/answer.tsx new file mode 100644 index 000000000..2c543d528 --- /dev/null +++ b/src/app/question/answer/answer.tsx @@ -0,0 +1,116 @@ +'use client'; + +import { useEffect, useState } from 'react'; + +import { zodResolver } from '@hookform/resolvers/zod'; +import Editor from '@uiw/react-md-editor'; +import { Controller, useForm } from 'react-hook-form'; +import { z } from 'zod'; + +import { createAnswer } from '@/actions/create-answer/action'; +import { createAnswerSchema } from '@/actions/create-answer/schema'; +import { updateAnswer } from '@/actions/update-answer/action'; +import { updateAnswerSchema } from '@/actions/update-answer/schema'; +import { BackButton } from '@/components/button/BackButton'; +import { Button } from '@/components/button/Button'; +import { resultToast } from '@/components/toast/Toast'; +import { answerSchema } from '@/lib/validations'; +import { PageChangeAlert } from '@/modules/navigation/PageChange'; +import { ExtendedNode } from '@/types/models/node'; +import { Limits } from '@/utils/limits'; + +import type { SubmitHandler } from 'react-hook-form'; + +type Props = { + node: ExtendedNode; +}; + +type Schema = z.infer; +type CreateAnswer = z.infer; +type UpdateAnswer = z.infer; + +export default function Answer({ node }: Props) { + const [disabled, setDisabled] = useState(true); + + const { + handleSubmit, + control, + watch, + formState: { isSubmitting, errors, isValid, isDirty }, + } = useForm({ + resolver: zodResolver(answerSchema), + mode: 'onBlur', + defaultValues: { + text: node?.answer?.text ?? '', + }, + }); + + const text = watch('text'); + + const onSubmit: SubmitHandler = async (data) => { + if (node?.answer) { + const updateData: UpdateAnswer = { + text: data.text, + id: node.answer.id, + }; + const result = await updateAnswer(updateData); + resultToast(result?.serverError, 'Answer updated successfully'); + } else { + const createData: CreateAnswer = { + text: data.text, + nodeId: node.id, + }; + const result = await createAnswer(createData); + resultToast(result?.serverError, 'Answer created successfully'); + } + }; + + useEffect(() => { + setDisabled(isSubmitting || !isValid || !isDirty); + }, [isSubmitting, isValid, isDirty]); + + return ( +
+ +
+

+ {node.answer ? 'Edit the answer' : 'Answer'} +

+
+
+

+ Question: {node.question.text} +

+ ( + + )} + /> +
+ {errors.text && ( + + {errors.text.message} + + )} + + {text.length} / {Limits.ANSWER} + +
+
+ +
+
+ +
+ ); +} diff --git a/src/app/question/answer/page.tsx b/src/app/question/answer/page.tsx new file mode 100644 index 000000000..74666c5f4 --- /dev/null +++ b/src/app/question/answer/page.tsx @@ -0,0 +1,30 @@ +import { redirect } from 'next/navigation'; + +import { getMe } from '@/actions/get-me'; +import { getNode } from '@/actions/get-node'; +import { Footer } from '@/modules/footer/Footer'; +import { Header } from '@/modules/header/Header'; +import { Routes } from '@/utils/routing'; + +import Answer from './answer'; + +export default async function Page(props) { + const searchParams = await props.searchParams; + const me = await getMe(); + + if (!me) return redirect(Routes.SITE.LOGIN); + const { tenantId } = me; + const { id } = searchParams; + if (!id) return redirect(Routes.SITE.HOME); + + const node = await getNode(tenantId, id); + return ( +
+
+
+ +
+
+
+ ); +} diff --git a/src/app/question/edit/edit.tsx b/src/app/question/edit/edit.tsx new file mode 100644 index 000000000..676e7fa44 --- /dev/null +++ b/src/app/question/edit/edit.tsx @@ -0,0 +1,122 @@ +'use client'; + +import { useEffect, useState } from 'react'; + +import { zodResolver } from '@hookform/resolvers/zod'; +import { HelpCircle } from 'lucide-react'; +import { useForm } from 'react-hook-form'; +import { z } from 'zod'; + +import { updateNode } from '@/actions/update-node/action'; +import { updateNodeSchema } from '@/actions/update-node/schema'; +import { BackButton } from '@/components/button/BackButton'; +import { Button } from '@/components/button/Button'; +import { Field } from '@/components/field/Field'; +import { Input } from '@/components/input/Input'; +import { resultToast } from '@/components/toast/Toast'; +import { useMediaQuery } from '@/hooks/useMediaQuery'; +import { PageChangeAlert } from '@/modules/navigation/PageChange'; +import { TagsList } from '@/modules/question/TagsList'; +import { ExtendedNode } from '@/types/models/node'; +import { Me } from '@/types/models/user'; +import { arraysAreEqual } from '@/utils/functions'; +import { Limits } from '@/utils/limits'; + +import type { Tag } from '@prisma/client'; +import type { SubmitHandler } from 'react-hook-form'; + +type Props = { + me: Me; + node: ExtendedNode; + tags: Tag[]; +}; + +type Schema = z.infer; + +export default function Edit({ me, node, tags }: Props) { + const [disabled, setDisabled] = useState(true); + const [selectedTags, setSelectedTags] = useState([]); + const isDesktop = useMediaQuery('(min-width: 640px)'); + + const { + register, + handleSubmit, + watch, + formState: { isSubmitting, isDirty, isValid, errors }, + } = useForm({ + resolver: zodResolver(updateNodeSchema), + mode: 'onBlur', + defaultValues: { + text: node?.question.text, + id: node.id, + tenantId: me.tenantId, + questionId: node.question.id, + }, + }); + + const text = watch('text'); + + const onSubmit: SubmitHandler = async (data) => { + const updatedData = { ...data, selectedTags }; + const result = await updateNode(updatedData); + resultToast(result?.serverError, 'Question updated successfully'); + }; + + const tagsId = node?.tags?.map((tag) => tag.id); + + useEffect(() => { + setSelectedTags(node?.tags?.map((tag) => tag.id)); + setDisabled(isSubmitting || !isValid || !isDirty); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [isSubmitting, isValid, isDirty]); + return ( +
+ +
+
+
+
+ + Edit the question + +
+ + } + type="text" + id="question" + /> + +
+ + + +
+ +
+ ); +} diff --git a/src/app/question/edit/page.tsx b/src/app/question/edit/page.tsx new file mode 100644 index 000000000..ff9c3d7b3 --- /dev/null +++ b/src/app/question/edit/page.tsx @@ -0,0 +1,32 @@ +import { redirect } from 'next/navigation'; + +import { getMe } from '@/actions/get-me'; +import { getNode } from '@/actions/get-node'; +import { getTags } from '@/actions/get-tags'; +import { Footer } from '@/modules/footer/Footer'; +import { Header } from '@/modules/header/Header'; +import { Routes } from '@/utils/routing'; + +import Edit from './edit'; + +export default async function Page(props) { + const searchParams = await props.searchParams; + const me = await getMe(); + + if (!me) return redirect(Routes.SITE.LOGIN); + const { tenantId } = me; + const { id } = searchParams; + if (!id) return redirect(Routes.SITE.HOME); + + const node = await getNode(tenantId, id); + const tags = await getTags(tenantId); + return ( +
+
+
+ +
+
+
+ ); +} diff --git a/src/app/question/new/new.tsx b/src/app/question/new/new.tsx new file mode 100644 index 000000000..55790fd2b --- /dev/null +++ b/src/app/question/new/new.tsx @@ -0,0 +1,135 @@ +'use client'; + +import { useEffect, useState } from 'react'; + +import { zodResolver } from '@hookform/resolvers/zod'; +import { HelpCircle, MoveRight } from 'lucide-react'; +import { useForm } from 'react-hook-form'; +import { z } from 'zod'; + +import { createNode } from '@/actions/create-node/action'; +import { createNodeSchema } from '@/actions/create-node/schema'; +import { BackButton } from '@/components/button/BackButton'; +import { Button } from '@/components/button/Button'; +import { Field } from '@/components/field/Field'; +import { Input } from '@/components/input/Input'; +import { resultToast } from '@/components/toast/Toast'; +import { useMediaQuery } from '@/hooks/useMediaQuery'; +import { useWarnIfUnsavedChanges } from '@/hooks/useWarnIfUnsavedChanges'; +import { PageChangeAlert } from '@/modules/navigation/PageChange'; +import { TagsList } from '@/modules/question/TagsList'; +import { Me } from '@/types/models/user'; +import { Limits } from '@/utils/limits'; + +import type { Integrations, Tag } from '@prisma/client'; +import type { SubmitHandler } from 'react-hook-form'; + +type Props = { + me: Me; + tags: Tag[]; + integrations: Integrations | null; +}; + +type Schema = z.infer; + +export default function New({ me, tags, integrations }: Props) { + const [disabled, setDisabled] = useState(true); + const [selectedTags, setSelectedTags] = useState([]); + const isDesktop = useMediaQuery('(min-width: 640px)'); + const withAnswer = false; + + const { + register, + handleSubmit, + watch, + formState: { isSubmitting, errors, isValid, isDirty }, + } = useForm({ + resolver: zodResolver(createNodeSchema), + mode: 'onBlur', + defaultValues: { + text: '', + tenantId: me.tenantId, + integrations, + withAnswer, + }, + }); + const text = watch('text'); + + useWarnIfUnsavedChanges(isDirty); + + const onSubmit: SubmitHandler = async (data) => { + const updatedData = { ...data, tags: selectedTags }; + const result = await createNode(updatedData); + resultToast(result?.serverError, 'Question created successfully'); + }; + + const onSubmitWithAnswer: SubmitHandler = async (data) => { + const updatedData = { ...data, tags: selectedTags, withAnswer: true }; + const result = await createNode(updatedData); + resultToast(result?.serverError, 'Question created successfully'); + }; + + useEffect(() => { + setDisabled(isSubmitting || !isValid); + }, [isSubmitting, isValid]); + + return ( +
+ +
+
+
+
+ + Ask a question + +
+ + } + type="text" + id="question" + placeholder="New question" + /> + + +
+
+ + +
+
+
+ +
+ ); +} diff --git a/src/app/question/new/page.tsx b/src/app/question/new/page.tsx new file mode 100644 index 000000000..0ca46d068 --- /dev/null +++ b/src/app/question/new/page.tsx @@ -0,0 +1,29 @@ +import { redirect } from 'next/navigation'; + +import { getIntegration } from '@/actions/get-integration'; +import { getMe } from '@/actions/get-me'; +import { getTags } from '@/actions/get-tags'; +import { Footer } from '@/modules/footer/Footer'; +import { Header } from '@/modules/header/Header'; +import { Routes } from '@/utils/routing'; + +import New from './new'; + +export default async function Page() { + const me = await getMe(); + + if (!me) return redirect(Routes.SITE.LOGIN); + const { tenantId } = me; + + const integrations = await getIntegration(tenantId); + const tags = await getTags(tenantId); + return ( +
+
+
+ +
+
+
+ ); +} diff --git a/src/app/register/confirm/form.tsx b/src/app/register/confirm/form.tsx new file mode 100644 index 000000000..30e6a4276 --- /dev/null +++ b/src/app/register/confirm/form.tsx @@ -0,0 +1,99 @@ +'use client'; + +import { useEffect, useState } from 'react'; + +import { zodResolver } from '@hookform/resolvers/zod'; +import { useAtom } from 'jotai'; +import { MoveLeft } from 'lucide-react'; +import { useRouter } from 'next/navigation'; +import { useForm } from 'react-hook-form'; +import { z } from 'zod'; + +import { createTenant } from '@/actions/create-tenant/action'; +import { createTenantSchema } from '@/actions/create-tenant/schema'; +import { Button } from '@/components/button/Button'; +import { resultToast } from '@/components/toast/Toast'; +import { registerAtom } from '@/store'; +import { Routes } from '@/utils/routing'; + +import type { SubmitHandler } from 'react-hook-form'; + +type Schema = z.infer; + +export default function Form() { + const [disabled, setDisabled] = useState(true); + const [state, setState] = useAtom(registerAtom); + const router = useRouter(); + const { + handleSubmit, + formState: { isSubmitting, isValid }, + } = useForm({ + resolver: zodResolver(createTenantSchema), + defaultValues: state, + }); + + const onSubmit: SubmitHandler = async (data) => { + const result = await createTenant(data); + resultToast(result?.serverError, result?.data?.message); + if (!result?.serverError && result?.data?.customerId) { + const { customerId } = result.data; + setState({ ...state, customerId }); + router.push(Routes.SITE.REGISTER.PLAN); + } + }; + + useEffect(() => { + setDisabled(!isValid || isSubmitting); + }, [isValid, isSubmitting]); + + return ( +
+
+
+

Company

+
+ Name +

{state.company}

+
+
+ Email +

{state.companyEmail}

+
+
+
+

User

+
+ Email +

{state.email}

+
+
+
+
+ + +
+
+ ); +} diff --git a/src/app/register/confirm/page.tsx b/src/app/register/confirm/page.tsx new file mode 100644 index 000000000..a2131c3ec --- /dev/null +++ b/src/app/register/confirm/page.tsx @@ -0,0 +1,12 @@ +'use client'; + +import Form from './form'; +import Structure from '../structure'; + +export default function Page() { + return ( + +
+ + ); +} diff --git a/src/pages/register/index.tsx b/src/app/register/form.tsx similarity index 52% rename from src/pages/register/index.tsx rename to src/app/register/form.tsx index d2b3bca0a..6eb37ed4b 100644 --- a/src/pages/register/index.tsx +++ b/src/app/register/form.tsx @@ -1,21 +1,26 @@ +'use client'; + import { zodResolver } from '@hookform/resolvers/zod'; import { useAtom } from 'jotai'; import { MoveRight } from 'lucide-react'; import Link from 'next/link'; -import { useRouter } from 'next/router'; -import { SubmitHandler, useForm } from 'react-hook-form'; +import { useRouter } from 'next/navigation'; +import { useForm } from 'react-hook-form'; import { z } from 'zod'; -import { Button, Field, Input } from '@/components'; -import { AuthLayout } from '@/layouts'; -import { registerCompanyClientSchema } from '@/lib'; +import { createTenantCompanySchema } from '@/actions/create-tenant/schema'; +import { Button } from '@/components/button/Button'; +import { Field } from '@/components/field/Field'; +import { Input } from '@/components/input/Input'; import { registerAtom } from '@/store'; -import { ITenantCreateFields } from '@/types'; -import { Routes } from '@/utils'; +import { ITenantCreateFields } from '@/types/global'; +import { Routes } from '@/utils/routing'; + +import type { SubmitHandler } from 'react-hook-form'; -type Schema = z.infer; +type Schema = z.infer; -function Company() { +export default function Form() { const [state, setState] = useAtom(registerAtom); const router = useRouter(); @@ -24,7 +29,7 @@ function Company() { register, formState: { errors, isValid }, } = useForm({ - resolver: zodResolver(registerCompanyClientSchema), + resolver: zodResolver(createTenantCompanySchema), mode: 'onBlur', defaultValues: state, }); @@ -45,31 +50,16 @@ function Company() { value: 'companyEmail', type: 'email', }, - { - label: 'Domain', - value: 'domain', - type: 'text', - info: `Fill this field if you have a personalized domain name used for your users' email`, - }, ]; return ( - - -
-
- - Company - -

Your company details

-
- {fields.map((field) => ( + +
+ {fields.map((field) => ( +
- ))} -
+ + ))} +
+
-

+ Already have an account ?{' '} Login -

- - + +
+ ); } - -export default Company; diff --git a/src/app/register/layout.tsx b/src/app/register/layout.tsx new file mode 100644 index 000000000..aaca5948c --- /dev/null +++ b/src/app/register/layout.tsx @@ -0,0 +1,20 @@ +import type { ReactNode } from 'react'; + +import { ThemeToggle } from '@/modules/theme/ThemeToggle'; + +type Props = { + children: ReactNode; +}; + +export default function Layout({ children }: Props) { + return ( +
+
+ +
+
+ {children} +
+
+ ); +} diff --git a/src/app/register/page.tsx b/src/app/register/page.tsx new file mode 100644 index 000000000..723ef254b --- /dev/null +++ b/src/app/register/page.tsx @@ -0,0 +1,12 @@ +'use client'; + +import Form from './form'; +import Structure from './structure'; + +export default function Page() { + return ( + +
+ + ); +} diff --git a/src/app/register/plan/form.tsx b/src/app/register/plan/form.tsx new file mode 100644 index 000000000..426c24fea --- /dev/null +++ b/src/app/register/plan/form.tsx @@ -0,0 +1,177 @@ +'use client'; + +import { useEffect, useMemo } from 'react'; + +import { useAtom } from 'jotai'; +import { RESET } from 'jotai/utils'; +import { Check, Minus, MoveRight, Wallet } from 'lucide-react'; +import { useParams, useRouter } from 'next/navigation'; +import { useForm } from 'react-hook-form'; + +import { Button } from '@/components/button/Button'; +import { errorToast, successToast } from '@/components/toast/Toast'; +import { registerAtom } from '@/store'; +import { IPlan } from '@/types/global'; +import { Routes } from '@/utils/routing'; +import { getStripe } from '@/utils/stripe'; + +export default function Form() { + const [state, setState] = useAtom(registerAtom); + + const { handleSubmit } = useForm(); + const router = useRouter(); + const params = useParams(); + const { status } = params; + + const saveData = async (value: IPlan['value'], lookup_key: string) => { + if (value === 'free') { + setState(RESET); + router.push(Routes.SITE.LOGIN); + } else { + const body = { customerId: state.customerId, lookup_key }; + const stripe = await getStripe(); + const response = await fetch(Routes.API.CHECKOUT, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(body), + }); + const checkoutSession = await response.json(); + if (response.ok) { + await stripe?.redirectToCheckout({ + sessionId: checkoutSession.id, + }); + } else { + errorToast(checkoutSession.error); + } + } + }; + + const plans: IPlan[] = useMemo( + () => [ + { + label: 'Free', + value: 'free', + price: 0, + lookup_key: 'free_monthly', + message: 'Perfect to try out', + benefits: ['5 users', '3 tags', 'Unlimited questions'], + drawbacks: ['Slack integration'], + }, + { + label: 'Startup', + value: 'startup', + price: 19, + lookup_key: 'startup_monthly', + message: 'Perfect for startups', + benefits: [ + '100 users', + '10 tags', + 'Unlimited questions', + 'Slack integration', + ], + }, + { + label: 'Enterprise', + value: 'enterprise', + price: 29, + lookup_key: 'enterprise_monthly', + message: 'Perfect for big companies', + benefits: [ + 'Unlimited users', + 'Unlimited tags', + 'Unlimited questions', + 'Slack integration', + ], + }, + ], + [], + ); + + useEffect(() => { + if (status === 'success') { + successToast('Payment successful'); + setState(RESET); + router.push(Routes.SITE.LOGIN); + } else if (status === 'cancel') { + errorToast('Payment unsuccessful'); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [status]); + + return ( +
+ {plans.map((plan) => ( +
+ saveData(plan.value, plan.lookup_key))} + key={plan.value} + > +
+

+ {plan.label} +

+

+ ${plan.price}/mo +

+
+
+

+ {plan.message} +

+
+
    + {plan.benefits.map((benefit) => ( +
  • + +

    {benefit}

    +
  • + ))} + {plan.drawbacks?.map((drawback) => ( +
  • + +

    {drawback}

    +
  • + ))} +
+
+ {plan.value === 'free' ? ( + + ) : ( + + )} +
+
+ +
+ ))} +
+ ); +} diff --git a/src/app/register/plan/page.tsx b/src/app/register/plan/page.tsx new file mode 100644 index 000000000..7987eef1c --- /dev/null +++ b/src/app/register/plan/page.tsx @@ -0,0 +1,7 @@ +'use client'; + +import Form from './form'; + +export default function Page() { + return
; +} diff --git a/src/app/register/structure.tsx b/src/app/register/structure.tsx new file mode 100644 index 000000000..e8a5da1b0 --- /dev/null +++ b/src/app/register/structure.tsx @@ -0,0 +1,50 @@ +'use client'; + +import { ReactNode } from 'react'; + +import { usePathname } from 'next/navigation'; + +import { RegisterRoutes } from '@/utils/routing'; + +type Props = { + title: string; + subtitle: string; + children: ReactNode; +}; + +export default function Structure({ title, subtitle, children }: Props) { + const pathname = usePathname(); + + return ( + <> +
+

+ {title} +

+

{subtitle}

+
+
+
+
+ {RegisterRoutes.map((link) => ( +
+ + {link.number} + + {link.title} +
+ ))} +
+
+ {children} +
+
+ + ); +} diff --git a/src/app/register/user/form.tsx b/src/app/register/user/form.tsx new file mode 100644 index 000000000..5970a05aa --- /dev/null +++ b/src/app/register/user/form.tsx @@ -0,0 +1,96 @@ +'use client'; + +import { zodResolver } from '@hookform/resolvers/zod'; +import { useAtom } from 'jotai'; +import { MoveLeft, MoveRight } from 'lucide-react'; +import Link from 'next/link'; +import { useRouter } from 'next/navigation'; +import { useForm } from 'react-hook-form'; +import { z } from 'zod'; + +import { createTenantUserSchema } from '@/actions/create-tenant/schema'; +import { Button } from '@/components/button/Button'; +import { Field } from '@/components/field/Field'; +import { Input } from '@/components/input/Input'; +import { registerAtom } from '@/store'; +import { Routes } from '@/utils/routing'; + +import type { SubmitHandler } from 'react-hook-form'; + +type Schema = z.infer; + +export default function Form() { + const [state, setState] = useAtom(registerAtom); + const router = useRouter(); + + const { + register, + handleSubmit, + formState: { isValid, errors }, + } = useForm({ + resolver: zodResolver(createTenantUserSchema), + mode: 'onBlur', + defaultValues: state, + }); + + const saveData: SubmitHandler = (values) => { + setState({ ...state, ...values }); + router.push(Routes.SITE.REGISTER.CONFIRM); + }; + + return ( + +
+ + + +
+
+
+ + +
+ + Already have an account ?{' '} + + Login + + +
+ + ); +} diff --git a/src/app/register/user/page.tsx b/src/app/register/user/page.tsx new file mode 100644 index 000000000..79477425d --- /dev/null +++ b/src/app/register/user/page.tsx @@ -0,0 +1,12 @@ +'use client'; + +import Form from './form'; +import Structure from '../structure'; + +export default function Page() { + return ( + +
+ + ); +} diff --git a/src/app/settings/loading.tsx b/src/app/settings/loading.tsx new file mode 100644 index 000000000..cf32411b8 --- /dev/null +++ b/src/app/settings/loading.tsx @@ -0,0 +1,5 @@ +import { Loader } from '@/components/loader/Loader'; + +export default function Loading() { + return ; +} diff --git a/src/app/settings/page.tsx b/src/app/settings/page.tsx new file mode 100644 index 000000000..e668f61a0 --- /dev/null +++ b/src/app/settings/page.tsx @@ -0,0 +1,48 @@ +import { redirect } from 'next/navigation'; + +import { getIntegration } from '@/actions/get-integration'; +import { getMe } from '@/actions/get-me'; +import { getTags } from '@/actions/get-tags'; +import { getTagsCount } from '@/actions/get-tags-count'; +import { getTenant } from '@/actions/get-tenant'; +import { getUsers } from '@/actions/get-users'; +import { getUsersCount } from '@/actions/get-users-count'; +import { Footer } from '@/modules/footer/Footer'; +import { Header } from '@/modules/header/Header'; +import { Routes } from '@/utils/routing'; + +import Settings from './settings'; + +export default async function Page() { + const me = await getMe(); + + if (!me) return redirect(Routes.SITE.LOGIN); + + if (me.role === 'user') return redirect(Routes.SITE.HOME); + const { tenantId } = me; + + const usersCount = await getUsersCount(tenantId); + const tagsCount = await getTagsCount(tenantId); + const tenant = await getTenant(tenantId); + const integrations = await getIntegration(tenantId); + const tags = await getTags(tenantId); + const users = await getUsers(tenantId); + + return ( +
+
+
+ +
+
+
+ ); +} diff --git a/src/app/settings/settings.tsx b/src/app/settings/settings.tsx new file mode 100644 index 000000000..25a7977ab --- /dev/null +++ b/src/app/settings/settings.tsx @@ -0,0 +1,112 @@ +import { + Tabs, + TabsContent, + TabsList, + TabsTrigger, +} from '@/components/tabs/Tabs'; +import { General } from '@/modules/settings/general/General'; +import { Payment } from '@/modules/settings/payment/Payment'; +import { Tags } from '@/modules/settings/tags/Tags'; +import { Users } from '@/modules/settings/users/Users'; +import { Me } from '@/types/models/user'; + +import type { Integrations, Tag, Tenant, User } from '@prisma/client'; + +type Props = { + me: Me; + usersCount: number; + tagsCount: number; + tenant: Tenant; + integrations: Integrations | null; + tags: Tag[] | null; + users: User[] | null; +}; + +export default function Settings({ + me, + usersCount, + tagsCount, + tenant, + integrations, + tags, + users, +}: Props) { + const tabs = [ + { + value: 'general', + label: 'General', + }, + { + value: 'tags', + label: 'Tags', + }, + { + value: 'users', + label: 'Users', + }, + ]; + + return ( +
+
+

Settings

+

+ Manage your account settings and invite users. +

+
+
+ +
+ +
+ + + + + + + + + + + + +
+
+
+
+ ); +} diff --git a/src/assets/faqmaker.png b/src/assets/faqmaker.png new file mode 100644 index 000000000..3aba020f7 Binary files /dev/null and b/src/assets/faqmaker.png differ diff --git a/src/assets/faqmaker.svg b/src/assets/faqmaker.svg new file mode 100644 index 000000000..9e5b9838a --- /dev/null +++ b/src/assets/faqmaker.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/auth.config.ts b/src/auth.config.ts new file mode 100644 index 000000000..6e6869e9d --- /dev/null +++ b/src/auth.config.ts @@ -0,0 +1,73 @@ +import { NextAuthConfig } from 'next-auth'; +import GoogleProvider from 'next-auth/providers/google'; +import ResendProvider from 'next-auth/providers/resend'; + +import { Routes } from '@/utils/routing'; +import prisma from 'lib/prisma'; + +export const authConfig: NextAuthConfig = { + providers: [ + GoogleProvider({ + clientId: process.env.AUTH_GOOGLE_ID, + clientSecret: process.env.AUTH_GOOGLE_SECRET, + allowDangerousEmailAccountLinking: true, + profile(profile) { + return { + id: profile.sub, + name: profile.name, + email: profile.email, + image: profile.picture, + }; + }, + }), + ResendProvider({ + apiKey: process.env.RESEND_API_KEY, + from: 'no-reply@faqmaker.co', + }), + ], + trustHost: true, + pages: { + signIn: Routes.SITE.LOGIN, + error: Routes.SITE.LOGIN, + }, + callbacks: { + async signIn({ profile, account, user }) { + if (!account || !user) { + return false; + } + const userExists = await prisma.user.findUnique({ + where: { email: user?.email }, + }); + if (!userExists) { + return false; + } + if ( + account?.provider === 'google' && + (!userExists.name || !userExists.image) + ) { + await prisma.user.update({ + where: { id: userExists?.id }, + data: { + name: profile?.name, + image: profile?.picture, + }, + }); + } + return true; + }, + async redirect({ baseUrl }) { + return baseUrl; + }, + async jwt({ token, account, user }) { + if (account) { + token.accessToken = account.access_token; + token.id = user.id; + } + return token; + }, + async session({ session, token }) { + session.user.id = token.id as string; + return session; + }, + }, +} satisfies NextAuthConfig; diff --git a/src/auth.ts b/src/auth.ts new file mode 100644 index 000000000..24d1b4260 --- /dev/null +++ b/src/auth.ts @@ -0,0 +1,15 @@ +import { PrismaAdapter } from '@auth/prisma-adapter'; +import NextAuth from 'next-auth'; + +import prisma from 'lib/prisma'; + +import { authConfig } from './auth.config'; + +export const { handlers, auth, signIn, signOut } = NextAuth({ + adapter: PrismaAdapter(prisma), + session: { + strategy: 'jwt', + maxAge: 60 * 60, + }, + ...authConfig, +}); diff --git a/src/components/alert/Alert.tsx b/src/components/alert/Alert.tsx new file mode 100644 index 000000000..faced5848 --- /dev/null +++ b/src/components/alert/Alert.tsx @@ -0,0 +1,149 @@ +'use client'; + +import { + forwardRef, + ElementRef, + ComponentPropsWithoutRef, + HTMLAttributes, +} from 'react'; + +import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog'; +import { VariantProps } from 'class-variance-authority'; + +import { cn } from '@/utils/cn'; + +import { buttonVariants } from '../button/Button'; + +const AlertDialog = AlertDialogPrimitive.Root; + +const AlertDialogTrigger = AlertDialogPrimitive.Trigger; + +const AlertDialogPortal = AlertDialogPrimitive.Portal; + +const AlertDialogOverlay = forwardRef< + ElementRef, + ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName; + +const AlertDialogContent = forwardRef< + ElementRef, + ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + + +)); +AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName; + +const AlertDialogHeader = ({ + className, + ...props +}: HTMLAttributes) => ( +
+); +AlertDialogHeader.displayName = 'AlertDialogHeader'; + +const AlertDialogFooter = ({ + className, + ...props +}: HTMLAttributes) => ( +
+); +AlertDialogFooter.displayName = 'AlertDialogFooter'; + +const AlertDialogTitle = forwardRef< + ElementRef, + ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName; + +const AlertDialogDescription = forwardRef< + ElementRef, + ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +AlertDialogDescription.displayName = + AlertDialogPrimitive.Description.displayName; + +const AlertDialogAction = forwardRef< + ElementRef, + Omit, 'ref'> & { + variant?: VariantProps; + } +>(({ className, variant = 'primary', ...props }, ref) => ( + +)); +AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName; + +const AlertDialogCancel = forwardRef< + ElementRef, + Omit, 'ref'> & { + variant?: VariantProps; + } +>(({ className, variant = 'secondary', ...props }, ref) => ( + +)); +AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName; + +export { + AlertDialog, + AlertDialogPortal, + AlertDialogOverlay, + AlertDialogTrigger, + AlertDialogContent, + AlertDialogHeader, + AlertDialogFooter, + AlertDialogTitle, + AlertDialogDescription, + AlertDialogAction, + AlertDialogCancel, +}; diff --git a/src/components/avatar/Avatar.tsx b/src/components/avatar/Avatar.tsx index 017b15a06..38a5df916 100644 --- a/src/components/avatar/Avatar.tsx +++ b/src/components/avatar/Avatar.tsx @@ -1,8 +1,11 @@ -import { ComponentPropsWithoutRef, ElementRef, forwardRef } from 'react'; +'use client'; + +import type { ComponentPropsWithoutRef, ElementRef } from 'react'; +import { forwardRef } from 'react'; import * as AvatarPrimitive from '@radix-ui/react-avatar'; -import { cn } from '@/utils'; +import { cn } from '@/utils/cn'; const Avatar = forwardRef< ElementRef, @@ -11,7 +14,7 @@ const Avatar = forwardRef< , diff --git a/src/components/badge/index.ts b/src/components/badge/index.ts deleted file mode 100644 index 9c8edca28..000000000 --- a/src/components/badge/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Badge'; diff --git a/src/components/button/BackButton.tsx b/src/components/button/BackButton.tsx index 2b328f0b4..4b317f9af 100644 --- a/src/components/button/BackButton.tsx +++ b/src/components/button/BackButton.tsx @@ -1,23 +1,17 @@ +'use client'; + import { MoveLeft } from 'lucide-react'; -import { useRouter } from 'next/router'; +import Link from 'next/link'; import { Button } from './Button'; export const BackButton = () => { - const router = useRouter(); return ( - ); }; diff --git a/src/components/button/Button.tsx b/src/components/button/Button.tsx index 13a6d93b0..ca59cd8f3 100644 --- a/src/components/button/Button.tsx +++ b/src/components/button/Button.tsx @@ -1,67 +1,64 @@ -import { ButtonHTMLAttributes, forwardRef } from 'react'; +import type { ButtonHTMLAttributes } from 'react'; +import { forwardRef } from 'react'; import { Slot } from '@radix-ui/react-slot'; import { cva, type VariantProps } from 'class-variance-authority'; -import { cn } from '@/utils'; +import { cn } from '@/utils/cn'; -const button = cva('transition-all duration-300', { - variants: { - variant: { - primary: [ - 'bg-teal-9 hover:bg-teal-10 text-white shadow-sm shadow-transparent', - ], - ghost: [ - 'bg-gray-3 hover:bg-gray-4 shadow-sm shadow-grayA-8 text-gray-12', - ], - secondary: [ - 'bg-transparent text-tealA-11 shadow shadow-sm shadow-tealA-7 hover:shadow-tealA-8', - ], - disabled: [ - 'bg-teal-surfaceLight dark:bg-teal-surfaceDark shadow-sm text-tealA-11 shadow-tealA-7 hover:shadow-tealA-8', - ], - disabledDestructive: [ - 'bg-red-surfaceLight dark:bg-red-surfaceDark shadow-sm text-redA-11 shadow-redA-7 hover:shadow-redA-8', - ], - destructive: [ - 'bg-red-9 hover:bg-red-10 text-white shadow-sm shadow-transparent', - ], - }, - icon: { - withIcon: ['flex justify-center items-center gap-1'], - }, - font: { - small: ['text-sm'], - base: ['text-base'], - large: ['text-lg'], - }, - rounded: { - none: ['rounded-none'], - base: ['rounded-md'], - bottom: ['rounded-b-md'], - full: ['rounded-full'], - }, - weight: { - bold: ['font-bold'], - semibold: ['font-semibold'], +export const buttonVariants = cva( + 'transition-all duration-300 ease-in-out lowercase', + { + variants: { + variant: { + primary: + 'bg-primary-negative text-primary-negative shadow-sm shadow-transparent disabled:bg-primary-negative-disabled disabled:text-primary disabled:shadow-sm disabled:shadow-primary disabled:hover:shadow-primary-hover', + ghost: + 'bg-primary-foreground text-primary shadow-sm shadow-primary hover:bg-primary-foreground-hover disabled:shadow-transparent disabled:bg-transparent', + + secondary: + 'bg-transparent text-accent-secondary shadow-sm shadow-accent hover:shadow-accent-hover', + + destructive: + 'bg-destructive text-white shadow-sm shadow-transparent hover:bg-destructive-hover disabled:bg-destructive-disabled disabled:text-redA-11 disabled:shadow-sm disabled:shadow-destructive disabled:hover:shadow-destructive-hover disabled:dark:bg-destructive-disabled-dark', + }, + icon: { + true: 'flex items-center justify-center gap-1', + }, + font: { + small: 'text-sm', + base: 'text-base', + large: 'text-lg', + }, + rounded: { + none: 'rounded-none', + base: 'rounded-md', + bottom: 'rounded-b-md', + full: 'rounded-full', + }, + weight: { + bold: 'font-bold', + semibold: 'font-semibold', + }, + size: { + small: 'w-fit px-2 py-1', + medium: 'w-fit px-4 py-2', + full: 'w-full py-2', + icon: 'size-6', + }, }, - size: { - small: ['py-1 px-2 w-fit'], - medium: ['py-2 px-4 w-fit'], - full: ['py-2 w-full'], - icon: ['h-6 w-6'], + defaultVariants: { + font: 'base', + rounded: 'base', + size: 'medium', + weight: 'semibold', }, }, - defaultVariants: { - font: 'base', - rounded: 'base', - size: 'medium', - }, -}); +); export interface ButtonProps extends ButtonHTMLAttributes, - VariantProps { + VariantProps { asChild?: boolean; } @@ -83,8 +80,9 @@ export const Button = forwardRef( const Comp = asChild ? Slot : 'button'; return ( , - React.ComponentPropsWithoutRef +const DialogOverlay = forwardRef< + ElementRef, + ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( , - React.ComponentPropsWithoutRef +const DialogContent = forwardRef< + ElementRef, + ComponentPropsWithoutRef >(({ className, children, ...props }, ref) => ( {children} - - + + Close @@ -55,7 +62,7 @@ DialogContent.displayName = DialogPrimitive.Content.displayName; const DialogHeader = ({ className, ...props -}: React.HTMLAttributes) => ( +}: HTMLAttributes) => (
) => ( +}: HTMLAttributes) => (
); DialogFooter.displayName = 'DialogFooter'; -const DialogTitle = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef +const DialogTitle = forwardRef< + ElementRef, + ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( ) => ( +}: ComponentProps) => ( , - React.ComponentPropsWithoutRef +const DrawerOverlay = forwardRef< + ElementRef, + ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )); -DrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName; +DrawerOverlay.displayName = DrawerPrimitive.Overlay?.displayName; -const DrawerContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef +const DrawerContent = forwardRef< + ElementRef, + ComponentPropsWithoutRef >(({ className, children, ...props }, ref) => ( -
+
{children} @@ -57,7 +65,7 @@ DrawerContent.displayName = 'DrawerContent'; const DrawerHeader = ({ className, ...props -}: React.HTMLAttributes) => ( +}: HTMLAttributes) => (
) => ( +}: HTMLAttributes) => (
, - React.ComponentPropsWithoutRef +const DrawerTitle = forwardRef< + ElementRef, + ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )); -DrawerTitle.displayName = DrawerPrimitive.Title.displayName; +DrawerTitle.displayName = DrawerPrimitive.Title?.displayName; export { Drawer, diff --git a/src/components/drawer/index.ts b/src/components/drawer/index.ts deleted file mode 100644 index 0529d6460..000000000 --- a/src/components/drawer/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Drawer'; diff --git a/src/components/dropdown/Dropdown.tsx b/src/components/dropdown/Dropdown.tsx index 31fa898cc..c776947bf 100644 --- a/src/components/dropdown/Dropdown.tsx +++ b/src/components/dropdown/Dropdown.tsx @@ -1,8 +1,11 @@ -import { ComponentPropsWithoutRef, ElementRef, forwardRef } from 'react'; +'use client'; + +import type { ComponentPropsWithoutRef, ElementRef } from 'react'; +import { forwardRef } from 'react'; import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'; -import { cn } from '@/utils'; +import { cn } from '@/utils/cn'; const DropdownMenu = DropdownMenuPrimitive.Root; @@ -21,7 +24,7 @@ const DropdownMenuContent = forwardRef< ref={ref} sideOffset={sideOffset} className={cn( - 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-gray-1 p-1 text-black shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 dark:bg-gray-12', + 'z-50 min-w-[8rem] overflow-hidden rounded-md bg-primary p-1 text-primary shadow-sm shadow-primary data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2', className, )} {...props} @@ -39,7 +42,7 @@ const DropdownMenuItem = forwardRef< import('@uiw/react-md-editor'), { ssr: false }); type Props = { + /* eslint-disable-next-line @typescript-eslint/no-explicit-any*/ onChange: (...event: any[]) => void; value: string; }; @@ -18,7 +21,7 @@ export const Editor = ({ onChange, value }: Props) => { return (
{ + const previewText = `Join XXX on FAQMaker`; + + return ( + + + {previewText} + + + +
+ FAQMaker +
+ + Join {company} on FAQMaker + + Hello XXX, + + {invitedByUsername} ( + + {invitedByEmail} + + ) has invited you to the {company} team on{' '} + FAQMaker. + +
+ +
+
+ + This invitation was intended for{' '} + {username}. If you were not + expecting this invitation, you can ignore this email. If you are + concerned about your account's safety, please reply to this email + to get in touch with us. + +
+ +
+ + ); +}; + +export default NewUserEmailTemplate; diff --git a/src/components/email/Register.tsx b/src/components/emails/Register.tsx similarity index 100% rename from src/components/email/Register.tsx rename to src/components/emails/Register.tsx diff --git a/src/components/error/ErrorFallback.tsx b/src/components/error/ErrorFallback.tsx deleted file mode 100644 index bc6aa3c63..000000000 --- a/src/components/error/ErrorFallback.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import React, { HTMLAttributes, forwardRef } from 'react'; - -import { VariantProps, cva } from 'class-variance-authority'; - -import { cn } from '@/utils'; - -import { Button } from '../button'; - -const errorVariants = cva('error', { - variants: { - fallbackType: { - item: ['h-8 w-8'], - page: ['h-16 w-16'], - screen: ['h-screen w-screen'], - }, - }, -}); - -export interface ErrorProps - extends HTMLAttributes, - VariantProps { - resetErrorBoundary: () => void; - error: Error; -} - -export const ErrorFallback = forwardRef( - ({ fallbackType, resetErrorBoundary, error }, ref) => { - return ( -
-

Something went wrong

-
-

- UI: {fallbackType} -

-

- Message: {error.message} -

-
- -
- ); - }, -); -ErrorFallback.displayName = 'ErrorFallback'; diff --git a/src/components/error/index.ts b/src/components/error/index.ts deleted file mode 100644 index 12bb8db1b..000000000 --- a/src/components/error/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './ErrorFallback'; diff --git a/src/components/field/Field.tsx b/src/components/field/Field.tsx index 8bfa48eac..438815c0a 100644 --- a/src/components/field/Field.tsx +++ b/src/components/field/Field.tsx @@ -1,9 +1,9 @@ -import { ReactNode } from 'react'; +import type { ReactNode } from 'react'; import { HelpCircle } from 'lucide-react'; -import { Label } from '../label'; -import { Tooltip, TooltipContent, TooltipTrigger } from '../tooltip'; +import { Label } from '../label/Label'; +import { Tooltip, TooltipContent, TooltipTrigger } from '../tooltip/Tooltip'; type Props = { children: ReactNode; @@ -11,26 +11,35 @@ type Props = { value: string; error?: string; info?: string; + limit?: number; + curLength?: number; }; -export const Field = ({ children, label, value, error, info }: Props) => { +export const Field = ({ + children, + label, + value, + error, + info, + limit, + curLength, +}: Props) => { return (
{info && ( - +

{info}

@@ -39,7 +48,20 @@ export const Field = ({ children, label, value, error, info }: Props) => { )}
{children} - {error && {error}} +
+ {error && ( + + {error} + + )} + {limit && ( + limit ? 'text-destructive' : 'text-primary-muted'}`} + > + {curLength} / {limit} characters + + )} +
); }; diff --git a/src/components/field/index.ts b/src/components/field/index.ts deleted file mode 100644 index deacb7827..000000000 --- a/src/components/field/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Field'; diff --git a/src/components/index.ts b/src/components/index.ts deleted file mode 100644 index 779951eae..000000000 --- a/src/components/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -export * from './avatar'; -export * from './badge'; -export * from './button'; -export * from './dialog'; -export * from './drawer'; -export * from './dropdown'; -export * from './editor'; -export * from './email'; -export * from './error'; -export * from './field'; -export * from './input'; -export * from './label'; -export * from './loader'; -export * from './pagination'; -export * from './select'; -export * from './stepper'; -export * from './tabs'; -export * from './theme'; -export * from './toast'; -export * from './tooltip'; diff --git a/src/components/input/Input.tsx b/src/components/input/Input.tsx index 23f60462f..1e3e20415 100644 --- a/src/components/input/Input.tsx +++ b/src/components/input/Input.tsx @@ -1,23 +1,21 @@ -import { ReactNode, forwardRef } from 'react'; +import type { InputHTMLAttributes, ReactNode } from 'react'; +import { forwardRef } from 'react'; -import { cn } from '@/utils'; +import { cn } from '@/utils/cn'; -export interface InputProps - extends React.InputHTMLAttributes { +export interface InputProps extends InputHTMLAttributes { withIcon?: boolean; icon?: ReactNode; } const styles = - 'shadow-sm shadow-grayA-7 focus:shadow-tealA-8 bg-gray-3 w-full rounded-md p-1 outline-none'; + 'shadow-sm shadow-primary focus:shadow-accent-focus bg-primary-foreground w-full rounded-md p-1 outline-none'; export const Input = forwardRef( ({ className, type, withIcon = false, icon, ...props }, ref) => { return withIcon ? (
- - {icon} - + {icon} ( ({ className, size, border, color, ...props }, ref) => { - return ( - <> - {size === 'items' ? ( -
-
- - Loading... - -
-
- ) : ( -
-
- - Loading... - -
-
- )} - + return size === 'items' ? ( +
+
+ + Loading... + +
+
+ ) : ( +
+
+ + Loading... + +
+
); }, ); diff --git a/src/components/loader/index.ts b/src/components/loader/index.ts deleted file mode 100644 index d5ce98115..000000000 --- a/src/components/loader/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Loader'; diff --git a/src/components/pagination/Pagination.tsx b/src/components/pagination/Pagination.tsx index a474f22af..5eadd6713 100644 --- a/src/components/pagination/Pagination.tsx +++ b/src/components/pagination/Pagination.tsx @@ -1,29 +1,40 @@ -import { Dispatch, SetStateAction } from 'react'; +'use client'; +import { usePathname, useRouter, useSearchParams } from 'next/navigation'; import ReactPaginate from 'react-paginate'; -import { OFFSET } from '@/utils'; +import { OFFSET } from '@/utils/constants'; type Props = { - setPage: Dispatch>; nodesLength: number; }; -export const Pagination = ({ setPage, nodesLength }: Props) => { +export const Pagination = ({ nodesLength }: Props) => { + const pathname = usePathname(); + const searchParams = useSearchParams(); + const { replace } = useRouter(); + const handlePageChange = (data: { selected: number }) => { - setPage(data.selected); + const params = new URLSearchParams(searchParams); + const page = data.selected; + if (page > 0) { + params.set('page', page.toString()); + } else { + params.delete('page'); + } + replace(`${pathname}?${params.toString()}`); }; return (
, + ComponentPropsWithoutRef +>(({ className, align = 'center', sideOffset = 4, ...props }, ref) => ( + + + +)); +PopoverContent.displayName = PopoverPrimitive.Content.displayName; + +export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }; diff --git a/src/components/select/Select.tsx b/src/components/select/Select.tsx index 00816a097..b7b6716d7 100644 --- a/src/components/select/Select.tsx +++ b/src/components/select/Select.tsx @@ -1,9 +1,12 @@ -import { forwardRef, ElementRef, ComponentPropsWithoutRef } from 'react'; +'use client'; + +import type { ElementRef, ComponentPropsWithoutRef } from 'react'; +import { forwardRef } from 'react'; import * as SelectPrimitive from '@radix-ui/react-select'; import { Check, ChevronDown } from 'lucide-react'; -import { cn } from '@/utils'; +import { cn } from '@/utils/cn'; const Select = SelectPrimitive.Root; @@ -16,14 +19,14 @@ const SelectTrigger = forwardRef< {children} - + )); @@ -66,14 +69,14 @@ const SelectItem = forwardRef< - + - + diff --git a/src/components/select/index.ts b/src/components/select/index.ts deleted file mode 100644 index 7868ecbae..000000000 --- a/src/components/select/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Select'; diff --git a/src/components/stepper/Stepper.tsx b/src/components/stepper/Stepper.tsx index ca6d874a1..587c59a74 100644 --- a/src/components/stepper/Stepper.tsx +++ b/src/components/stepper/Stepper.tsx @@ -1,23 +1,28 @@ -import React from 'react'; +import { Fragment } from 'react'; import { BadgeCheck } from 'lucide-react'; -import { TSteps } from '@/types'; +import { TSteps } from '@/types/global'; type Props = { - steps: TSteps[]; currentStep: number; }; -export const Stepper = ({ steps, currentStep }: Props) => { +export const Stepper = ({ currentStep }: Props) => { + const steps: TSteps[] = [ + { id: 1, label: 'Company' }, + { id: 2, label: 'User' }, + { id: 3, label: 'Confirm' }, + ]; + return ( -
) : (

No answers

)} - + ); }; diff --git a/src/modules/profile/Favorites.tsx b/src/modules/profile/Favorites.tsx new file mode 100644 index 000000000..ce7e6b35c --- /dev/null +++ b/src/modules/profile/Favorites.tsx @@ -0,0 +1,44 @@ +import Link from 'next/link'; + +import { ExtendedFavorites } from '@/types/models/node'; +import { dateOptions } from '@/utils/date'; +import { Routes } from '@/utils/routing'; + +type Props = { + favorites?: ExtendedFavorites[]; +}; + +export const UserFavorites = ({ favorites }: Props) => { + return ( +
+

+ Favorites +

+ {favorites && favorites.length > 0 ? ( +
+ {favorites.map((favorite) => ( + +

{favorite.node.question.text}

+ + Asked on{' '} + {new Date(favorite.node.question.createdAt).toLocaleDateString( + undefined, + dateOptions, + )} + + + ))} +
+ ) : ( +

No answers

+ )} +
+ ); +}; diff --git a/src/modules/profile/Questions.tsx b/src/modules/profile/Questions.tsx index c6a1759fc..bfca7c0d7 100644 --- a/src/modules/profile/Questions.tsx +++ b/src/modules/profile/Questions.tsx @@ -1,63 +1,46 @@ -import { Question } from '@prisma/client'; -import Link from 'next/link'; +'use client'; -import { Loader } from '@/components'; -import { dateOptions } from '@/utils'; +import Link from 'next/link'; -type QuestionWithNodeId = Question & { - node: { - id: string; - }; -}; +import { QuestionWithNodeId } from '@/types/models/node'; +import { dateOptions } from '@/utils/date'; +import { Routes } from '@/utils/routing'; type Props = { questions?: QuestionWithNodeId[]; - isPending: boolean; }; -export const UserQuestions = ({ questions, isPending }: Props) => { - if (isPending) { - return ; - } - +export const UserQuestions = ({ questions }: Props) => { return ( - <> +

Questions

{questions && questions.length > 0 ? ( -
    +
    {questions?.map((question) => ( -
  • -

    - - {question.text} - -

    -

    +

    {question.text}

    + Asked on{' '} {new Date(question.createdAt).toLocaleDateString( undefined, dateOptions, )} -

    -
  • + + ))} -
+
) : (

No questions

)} - + ); }; diff --git a/src/modules/profile/Update.tsx b/src/modules/profile/Update.tsx index 34b76fc6b..d549959d5 100644 --- a/src/modules/profile/Update.tsx +++ b/src/modules/profile/Update.tsx @@ -1,21 +1,33 @@ +'use client'; + import { useEffect, useMemo, useState } from 'react'; import { zodResolver } from '@hookform/resolvers/zod'; import { AtSign, UserIcon } from 'lucide-react'; import Image from 'next/image'; -import { SubmitHandler, useForm } from 'react-hook-form'; +import { useForm } from 'react-hook-form'; import { z } from 'zod'; -import { Button, Field, Input } from '@/components'; -import { useMediaQuery, useUpdateUser } from '@/hooks'; -import { updateUserClientSchema } from '@/lib'; -import { IUserUpdateFields, UserWithTenant } from '@/types'; +import { updateUser } from '@/actions/update-user/action'; +import { updateUserSchema } from '@/actions/update-user/schema'; +import { Button } from '@/components/button/Button'; +import { Field } from '@/components/field/Field'; +import { Input } from '@/components/input/Input'; +import { resultToast } from '@/components/toast/Toast'; +import { useMediaQuery } from '@/hooks/useMediaQuery'; +import { IUserUpdateFields } from '@/types/global'; +import { Me } from '@/types/models/user'; +import { Limits } from '@/utils/limits'; + +import { PageChangeAlert } from '../navigation/PageChange'; + +import type { SubmitHandler } from 'react-hook-form'; type Props = { - me: UserWithTenant; + me: Me; }; -type Schema = z.infer; +type Schema = z.infer; export const UpdateProfile = ({ me }: Props) => { const [disabled, setDisabled] = useState(true); @@ -24,20 +36,23 @@ export const UpdateProfile = ({ me }: Props) => { const { register, handleSubmit, + watch, formState: { isSubmitting, isDirty, errors, isValid }, } = useForm({ - resolver: zodResolver(updateUserClientSchema), + resolver: zodResolver(updateUserSchema), mode: 'onBlur', defaultValues: { name: me.name ?? '', email: me.email, + role: me.role, + tenantId: me.tenantId, + id: me.id, }, }); - const { mutate } = useUpdateUser(me.id, me.tenantId); - - const onSubmit: SubmitHandler = (values) => { - mutate(values); + const onSubmit: SubmitHandler = async (data) => { + const result = await updateUser(data); + resultToast(result?.serverError, result?.data?.message); }; const fields: IUserUpdateFields[] = useMemo( @@ -46,13 +61,15 @@ export const UpdateProfile = ({ me }: Props) => { label: 'Name', value: 'name', type: 'text', - icon: , + limit: Limits.NAME, + icon: , }, { label: 'Email', value: 'email', type: 'email', - icon: , + limit: Limits.EMAIL, + icon: , }, ], [], @@ -63,67 +80,64 @@ export const UpdateProfile = ({ me }: Props) => { }, [isDirty, isSubmitting, isValid]); return ( -
-
-
- - Informations - -
- {me.image ? ( - {'Profile - ) : ( - - )} -
    - {fields.map((field) => ( -
  • - - - -
  • - ))} -
  • - - Role: - {' '} - {me.role} -
  • -
-
- -
+ Profile + +
+
+ {me.image ? ( + Profile picture + ) : ( + + )} +
    + {fields.map((field) => ( +
  • + + + +
  • + ))} +
  • + + Role: + {' '} + {me.role} +
  • +
+
+ +
+ + ); }; diff --git a/src/modules/profile/index.ts b/src/modules/profile/index.ts deleted file mode 100644 index b644b6ef8..000000000 --- a/src/modules/profile/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './Update'; -export * from './Questions'; -export * from './Answers'; diff --git a/src/modules/question/TagsList.tsx b/src/modules/question/TagsList.tsx index 138abf27b..c64e1295e 100644 --- a/src/modules/question/TagsList.tsx +++ b/src/modules/question/TagsList.tsx @@ -1,22 +1,18 @@ -import { Dispatch, SetStateAction } from 'react'; +'use client'; -import { Tag } from '@prisma/client'; +import type { Dispatch, SetStateAction } from 'react'; -import { Button, Loader } from '@/components'; +import { Button } from '@/components/button/Button'; + +import type { Tag } from '@prisma/client'; type Props = { - isPending: boolean; tags: Tag[]; selectedTags: string[]; setSelectedTags: Dispatch>; }; -export const TagsList = ({ - isPending, - tags, - selectedTags, - setSelectedTags, -}: Props) => { +export const TagsList = ({ tags, selectedTags, setSelectedTags }: Props) => { const handleSelection = (tagId: string) => { if (selectedTags.includes(tagId)) { setSelectedTags(selectedTags.filter((id) => id !== tagId)); @@ -25,19 +21,18 @@ export const TagsList = ({ } }; - if (isPending) { - return ; - } else if (tags.length > 0) { + if (tags.length > 0) { return (
    {tags.map((tag) => (
); - } else { - return

No tags

; } + return

No tags

; }; diff --git a/src/modules/question/index.ts b/src/modules/question/index.ts deleted file mode 100644 index 88ab5e645..000000000 --- a/src/modules/question/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './TagsList'; diff --git a/src/modules/search/Search.tsx b/src/modules/search/Search.tsx index 2a7862d27..f7b84be4d 100644 --- a/src/modules/search/Search.tsx +++ b/src/modules/search/Search.tsx @@ -1,66 +1,58 @@ -import { Dispatch, MouseEvent, SetStateAction, useState } from 'react'; +'use client'; + +import type { MouseEvent } from 'react'; -import { Tag } from '@prisma/client'; import { SearchIcon, TagIcon } from 'lucide-react'; -import { useRouter } from 'next/router'; -import { useForm } from 'react-hook-form'; +import { usePathname, useRouter, useSearchParams } from 'next/navigation'; +import { useDebouncedCallback } from 'use-debounce'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, - Input, - Label, -} from '@/components'; +} from '@/components/dropdown/Dropdown'; +import { Input } from '@/components/input/Input'; +import { Label } from '@/components/label/Label'; + +import type { Tag } from '@prisma/client'; type Props = { tags: Tag[]; - setSearchQuery: Dispatch>; - setSearchTag: Dispatch>; - setPage: Dispatch>; }; -export const Search = ({ - tags, - setSearchQuery, - setSearchTag, - setPage, -}: Props) => { - const router = useRouter(); - const { handleSubmit, register } = useForm(); - const [tagActive, setTagActive] = useState(null); +export const Search = ({ tags }: Props) => { + const searchParams = useSearchParams(); + const pathname = usePathname(); + const { replace } = useRouter(); + const params = new URLSearchParams(searchParams); + const currentTag = params.get('tag') || ''; - const onSearch = (values) => { - const { search } = values; - setSearchQuery(search); - setPage(0); + const handleSearch = useDebouncedCallback((search) => { + params.delete('page'); if (search) { - const encodedSearch = encodeURI(search); - router.push(`?search=${encodedSearch}`); + params.set('query', search); } else { - router.push(''); + params.delete('query'); } - }; + replace(`${pathname}?${params.toString()}`); + }, 300); const handleTagSearch = (label: string) => { - setTagActive(label); - setSearchTag(label); - setPage(0); + params.delete('page'); + params.set('tag', label); + replace(`${pathname}?${params.toString()}`); }; const handleResetTag = () => { - setTagActive(null); - setSearchTag(null); - setPage(0); + params.delete('page'); + params.delete('tag'); + replace(`${pathname}?${params.toString()}`); }; return (
-
+
{tags.length > 0 && ( @@ -90,22 +83,25 @@ export const Search = ({ {tags.map((tag) => ( - {tagActive === tag.label && ( - + {currentTag === tag.label && ( + )} ))} diff --git a/src/modules/search/index.ts b/src/modules/search/index.ts deleted file mode 100644 index addd53308..000000000 --- a/src/modules/search/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Search'; diff --git a/src/modules/settings/general/Company.tsx b/src/modules/settings/general/Company.tsx index 962f31c6a..03d7e3886 100644 --- a/src/modules/settings/general/Company.tsx +++ b/src/modules/settings/general/Company.tsx @@ -1,84 +1,77 @@ -import { useEffect, useMemo, useState } from 'react'; +'use client'; + +import { Fragment, useEffect, useState } from 'react'; import { zodResolver } from '@hookform/resolvers/zod'; -import { Tenant } from '@prisma/client'; -import { useRouter } from 'next/router'; -import { SubmitHandler, useForm } from 'react-hook-form'; +import { useForm } from 'react-hook-form'; import { z } from 'zod'; -import { Button, Field, Input } from '@/components'; -import { useUpdateTenant } from '@/hooks'; -import { updateTenantClientSchema } from '@/lib'; -import { ITenantUpdateFields } from '@/types'; +import { updateTenant } from '@/actions/update-tenant/action'; +import { updateTenantSchema } from '@/actions/update-tenant/schema'; +import { Button } from '@/components/button/Button'; +import { Field } from '@/components/field/Field'; +import { Input } from '@/components/input/Input'; +import { resultToast } from '@/components/toast/Toast'; +import { PageChangeAlert } from '@/modules/navigation/PageChange'; +import { ITenantUpdateFields } from '@/types/global'; +import { Limits } from '@/utils/limits'; + +import type { Integrations, Tenant } from '@prisma/client'; +import type { SubmitHandler } from 'react-hook-form'; type Props = { tenant: Tenant; + integrations: Integrations | null; }; -type Schema = z.infer; +type Schema = z.infer; -export const Company = ({ tenant }: Props) => { +export function Company({ tenant, integrations }: Props) { const [disabled, setDisabled] = useState(true); - const router = useRouter(); const { register, handleSubmit, watch, - reset, formState: { isSubmitting, isDirty, isValid, errors }, } = useForm({ - resolver: zodResolver(updateTenantClientSchema), + resolver: zodResolver(updateTenantSchema), mode: 'onBlur', defaultValues: { company: tenant.company, email: tenant.email, - domain: tenant.domain, + slack: integrations?.slack ?? '', + id: tenant.id, }, }); - const domainValue = watch('domain'); - const { mutate } = useUpdateTenant(tenant.id, router); - - const onSubmit: SubmitHandler = (values) => { - mutate(values); + const onSubmit: SubmitHandler = async (data) => { + const result = await updateTenant(data); + resultToast(result?.serverError, 'Tenant updated successfully'); }; - const fields: ITenantUpdateFields[] = useMemo( - () => [ - { - label: 'Company', - value: 'company', - type: 'text', - }, - { - label: 'Email', - value: 'email', - type: 'email', - }, - { - label: 'Domain', - value: 'domain', - type: 'text', - }, - ], - [], - ); + const fields: ITenantUpdateFields[] = [ + { + label: 'Company', + value: 'company', + type: 'text', + limit: Limits.COMPANY, + }, + { + label: 'Email', + value: 'email', + type: 'email', + limit: Limits.EMAIL, + }, + ]; useEffect(() => { - if (domainValue === '') { - reset({ - domain: tenant.domain, - }); - } setDisabled(isSubmitting || !isDirty || !isValid); - - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [isDirty, isSubmitting, isValid, domainValue]); + }, [isDirty, isSubmitting, isValid]); return ( -
+

Company @@ -87,34 +80,43 @@ export const Company = ({ tenant }: Props) => { className="flex flex-col items-center gap-4" onSubmit={handleSubmit(onSubmit)} > -
- {fields.map((field) => ( -
- +
+
+ {fields.map((field) => ( + + + + + + ))} + {tenant.plan !== 'free' && ( + -
- ))} + )} +
- +

); -}; +} diff --git a/src/modules/settings/general/Data.tsx b/src/modules/settings/general/Data.tsx deleted file mode 100644 index cb31e7cb7..000000000 --- a/src/modules/settings/general/Data.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import { useMemo } from 'react'; - -import { HelpCircle, UserIcon, Wallet } from 'lucide-react'; - -import { useNodesCount, useUsersCount } from '@/hooks'; - -type Props = { - tenantId: string; - plan: string; -}; - -export const Data = ({ tenantId, plan }: Props) => { - const { data: nodesCount } = useNodesCount(tenantId); - const { data: usersCount } = useUsersCount(tenantId); - - const iconStyles = 'hidden h-9 w-9 xl:block'; - - const cards = useMemo( - () => [ - { - text: 'Questions', - value: nodesCount, - icon: , - }, - { - text: 'Users', - value: usersCount, - icon: , - }, - { - text: 'Plan', - value: plan, - icon: , - }, - ], - // eslint-disable-next-line react-hooks/exhaustive-deps - [], - ); - - return ( - <> -
    - {cards.map((card, index) => ( -
  • - {card.icon} -
    -

    {card.text}

    -

    - {card.value} -

    -
    -
  • - ))} -
- - ); -}; diff --git a/src/modules/settings/general/Files.tsx b/src/modules/settings/general/Files.tsx index 0644b1de2..978c488f8 100644 --- a/src/modules/settings/general/Files.tsx +++ b/src/modules/settings/general/Files.tsx @@ -1,145 +1,159 @@ -import { useEffect, useState } from 'react'; +'use client'; + +import { useCallback, useEffect, useState } from 'react'; import { zodResolver } from '@hookform/resolvers/zod'; -import { Tenant } from '@prisma/client'; import { Upload } from 'lucide-react'; import Image from 'next/image'; -import Dropzone from 'react-dropzone'; -import { Controller, SubmitHandler, useForm } from 'react-hook-form'; +import { DropzoneOptions, useDropzone } from 'react-dropzone'; +import { useForm } from 'react-hook-form'; import { z } from 'zod'; -import { Button } from '@/components'; -import { useUpsertFiles } from '@/hooks'; -import { filesClientSchema } from '@/lib'; +import { updateLogo } from '@/actions/update-logo/action'; +import { updateLogoSchema } from '@/actions/update-logo/schema'; +import { submitImage } from '@/actions/upload-file/action'; +import { Button } from '@/components/button/Button'; +import { resultToast } from '@/components/toast/Toast'; +import { filesSchema } from '@/lib/validations'; +import { MAX_FILE_SIZE } from '@/utils/constants'; + +import type { Tenant } from '@prisma/client'; +import type { SubmitHandler } from 'react-hook-form'; type Props = { tenant: Tenant; }; -type Schema = z.infer; +type Schema = z.infer; + +type UpdateLogoType = z.infer; export const Files = ({ tenant }: Props) => { const [disabled, setDisabled] = useState(true); const [previewImage, setPreviewImage] = useState(''); - const [file, setFile] = useState(); const { handleSubmit, - control, reset, - formState: { isSubmitting, isDirty, isValid, errors }, + register, + unregister, + setValue, + watch, + formState: { isSubmitting, isDirty, isValid }, } = useForm({ - resolver: zodResolver(filesClientSchema), + resolver: zodResolver(filesSchema), mode: 'onBlur', defaultValues: { - logo: null, + logo: undefined, }, }); - const { mutate } = useUpsertFiles(tenant.id); + const files: File[] = watch('logo'); + + const onDrop = useCallback( + (files) => { + setValue('logo', files, { shouldValidate: true, shouldDirty: true }); + setPreviewImage(URL.createObjectURL(files[0])); + }, + [setValue], + ); + + const { getRootProps, getInputProps, isDragActive, open } = useDropzone({ + onDrop, + accept: { + 'image/png': ['.svg', '.jpeg', '.jpg', '.webp', '.png'], + }, + maxSize: MAX_FILE_SIZE, + }); - const onSubmit: SubmitHandler = (values) => { - mutate(values); + const onSubmit: SubmitHandler = async (data) => { + const formData = new FormData(); + formData.append('logo', data.logo[0]); + formData.append('company', tenant.company); + const url = await submitImage(formData, 'logo'); + if (url === '') { + return resultToast('Upload failed', undefined); + } + const logo: UpdateLogoType = { + url, + id: tenant.id, + }; + const result = await updateLogo(logo); + resultToast(result?.serverError, 'Logo updated successfully'); }; const handleReset = () => { reset(); setPreviewImage(''); - setFile(null); }; useEffect(() => { - setDisabled(isSubmitting || !isDirty || !isValid); + register('logo'); + return () => { + unregister('logo'); + }; + }, [register, unregister]); - // eslint-disable-next-line react-hooks/exhaustive-deps + useEffect(() => { + setDisabled(isSubmitting || !isDirty || !isValid); }, [isDirty, isSubmitting, isValid]); return ( -
+

Logo

- ( -
- { - onChange(acceptedFiles[0]); - setFile(acceptedFiles[0]); - setPreviewImage(URL.createObjectURL(acceptedFiles[0])); - }} - > - {({ getRootProps, getInputProps, open, isDragActive }) => ( -
- - {previewImage ? ( - {file.name} - ) : ( -
- -
- )} -

- {file ? file.name : 'No file selected.'} -

- -
- )} -
- -
- )} - /> - + + )} +
+ +
+ diff --git a/src/modules/settings/general/General.tsx b/src/modules/settings/general/General.tsx index 841a25979..044f7cacb 100644 --- a/src/modules/settings/general/General.tsx +++ b/src/modules/settings/general/General.tsx @@ -1,40 +1,19 @@ -import { Tenant } from '@prisma/client'; - -import { Loader } from '@/components'; - import { Company } from './Company'; -import { Data } from './Data'; import { Files } from './Files'; -import { Integrations } from './Integrations'; + +import type { Integrations, Tenant } from '@prisma/client'; type Props = { - tenantId: string; tenant: Tenant; - isPending: boolean; + integrations: Integrations | null; }; -export const General = ({ tenantId, tenant, isPending }: Props) => { - const styles = 'w-full rounded-md bg-gray-3 p-4'; - - if (isPending) { - return ; - } +export const General = ({ tenant, integrations }: Props) => { return ( - <> -
- -
-
- -
- {tenant.plan !== 'free' && ( -
- -
- )} -
- -
- +
+ +
+ +
); }; diff --git a/src/modules/settings/general/Integrations.tsx b/src/modules/settings/general/Integrations.tsx deleted file mode 100644 index a9192643a..000000000 --- a/src/modules/settings/general/Integrations.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import { useEffect, useMemo, useState } from 'react'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { Integrations as IntegrationsType } from '@prisma/client'; -import { useForm } from 'react-hook-form'; -import { z } from 'zod'; - -import { Button, Field, Input, Loader } from '@/components'; -import { useIntegration, useUpsertIntegrations } from '@/hooks'; -import { integrationsClientSchema } from '@/lib'; -import { IIntegrations } from '@/types'; - -type Props = { - tenantId: string; -}; - -type Schema = z.infer; - -export const Integrations = ({ tenantId }: Props) => { - const { data: integrations, isPending } = useIntegration(tenantId); - - const [disabled, setDisabled] = useState(true); - const { - register, - handleSubmit, - formState: { errors, isSubmitting, isDirty, isValid }, - } = useForm({ - resolver: zodResolver(integrationsClientSchema), - mode: 'onBlur', - defaultValues: { - slack: integrations?.slack ?? '', - }, - }); - - const { mutate } = useUpsertIntegrations(tenantId); - - const onSubmit = (values: IntegrationsType) => { - mutate(values); - }; - - const fields: IIntegrations[] = useMemo( - () => [ - { - label: 'Slack', - value: 'slack', - type: 'url', - }, - ], - [], - ); - - useEffect(() => { - setDisabled(isSubmitting || !isDirty || !isValid); - }, [isDirty, isSubmitting, isValid]); - - if (isPending) { - return ; - } - - return ( -
-

- Integrations -

-
-
- {fields.map((field) => ( -
- - - -
- ))} -
- -
-
- ); -}; diff --git a/src/modules/settings/general/index.ts b/src/modules/settings/general/index.ts deleted file mode 100644 index 3f32c9372..000000000 --- a/src/modules/settings/general/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './General'; -export * from './Data'; diff --git a/src/modules/settings/index.ts b/src/modules/settings/index.ts deleted file mode 100644 index 4ad9e59fb..000000000 --- a/src/modules/settings/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './payment'; -export * from './general'; -export * from './tags'; -export * from './users'; diff --git a/src/modules/settings/payment/Billing.tsx b/src/modules/settings/payment/Billing.tsx index 07f1118df..20842080e 100644 --- a/src/modules/settings/payment/Billing.tsx +++ b/src/modules/settings/payment/Billing.tsx @@ -1,8 +1,11 @@ +'use client'; + import { Banknote } from 'lucide-react'; import { useForm } from 'react-hook-form'; -import { Button } from '@/components'; -import { useCreateBillingPortal } from '@/hooks'; +import { Button } from '@/components/button/Button'; +import { errorToast } from '@/components/toast/Toast'; +import { Routes } from '@/utils/routing'; type Props = { tenantId: string; @@ -10,21 +13,27 @@ type Props = { export const Billing = ({ tenantId }: Props) => { const { handleSubmit } = useForm(); - const { mutate } = useCreateBillingPortal(tenantId); - const onSubmit = () => { - mutate(); + const onSubmit = async () => { + const body = { tenantId }; + const response = await fetch(Routes.API.BILLING, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(body), + }); + const data = await response.json(); + if (response.ok) { + window.location.assign(data.url); + } else { + errorToast(data.error); + } }; return (
- diff --git a/src/modules/settings/payment/Delete.tsx b/src/modules/settings/payment/Delete.tsx index de869d4e8..f084e07dc 100644 --- a/src/modules/settings/payment/Delete.tsx +++ b/src/modules/settings/payment/Delete.tsx @@ -1,13 +1,16 @@ +'use client'; + import { useEffect, useState } from 'react'; import { zodResolver } from '@hookform/resolvers/zod'; import { Flame } from 'lucide-react'; -import { useRouter } from 'next/router'; -import { SubmitHandler, useForm } from 'react-hook-form'; +import { useForm } from 'react-hook-form'; import { z } from 'zod'; +import { deleteTenant } from '@/actions/delete-tenant/action'; +import { deleteTenantSchema } from '@/actions/delete-tenant/schema'; +import { Button } from '@/components/button/Button'; import { - Button, Dialog, DialogClose, DialogContent, @@ -15,23 +18,19 @@ import { DialogHeader, DialogTitle, DialogTrigger, - Input, -} from '@/components'; -import { useDeleteTenant } from '@/hooks'; +} from '@/components/dialog/Dialog'; +import { Input } from '@/components/input/Input'; + +import type { SubmitHandler } from 'react-hook-form'; type Props = { tenantId: string; company: string; }; +type Schema = z.infer; export const Delete = ({ tenantId, company }: Props) => { - const deleteSchema = z.object({ - text: z.literal(`DELETE ${company}`), - }); - type Schema = z.infer; - const [disabled, setDisabled] = useState(true); - const router = useRouter(); const { register, @@ -39,15 +38,17 @@ export const Delete = ({ tenantId, company }: Props) => { setValue, formState: { isSubmitting, isValid }, } = useForm({ - resolver: zodResolver(deleteSchema), + resolver: zodResolver(deleteTenantSchema), mode: 'onBlur', + defaultValues: { + text: '', + id: tenantId, + company, + }, }); - const { mutate } = useDeleteTenant(tenantId, company, router); - - const onSubmit: SubmitHandler = (values) => { - // @ts-ignore - mutate(values); + const onSubmit: SubmitHandler = async (data) => { + await deleteTenant(data); }; useEffect(() => { @@ -57,13 +58,7 @@ export const Delete = ({ tenantId, company }: Props) => { return ( - @@ -77,7 +72,7 @@ export const Delete = ({ tenantId, company }: Props) => { account is permanent and will delete all your data forever.

-

+

Type DELETE {company} to confirm

@@ -87,24 +82,13 @@ export const Delete = ({ tenantId, company }: Props) => { - diff --git a/src/modules/settings/payment/Payment.tsx b/src/modules/settings/payment/Payment.tsx index d9139b60d..b864af7df 100644 --- a/src/modules/settings/payment/Payment.tsx +++ b/src/modules/settings/payment/Payment.tsx @@ -8,7 +8,7 @@ type Props = { export const Payment = ({ tenantId, company }: Props) => { return ( -
+

; +type Schema = z.infer; + +const Form = ({ tenantId, plan, tagsCount }: Props) => { + const [disabled, setDisabled] = useState(true); + + const { + register, + handleSubmit, + watch, + formState: { errors, isSubmitting, isValid }, + } = useForm({ + resolver: zodResolver(createTagSchema), + mode: 'onBlur', + defaultValues: { + label: '', + tagsCount, + plan, + tenantId, + }, + }); + + const onSubmit: SubmitHandler = async (data) => { + const result = await createTag(data); + resultToast(result?.serverError, 'Tag created successfully'); + }; + + useEffect(() => { + setDisabled(isSubmitting || !isValid); + }, [isSubmitting, isValid]); + + return ( + +
+ + } + type="label" + id="label" + placeholder="Tag label" + /> + +
+ + + ); +}; -export const CreateTag = ({ tenantId }: Props) => { +export const CreateTag = ({ tenantId, plan, tagsCount }: Props) => { const isDesktop = useMediaQuery('(min-width: 640px)'); + const [disabled, setDisabled] = useState(false); + + useEffect(() => { + if ( + (plan === 'free' && tagsCount >= 3) || + (plan === 'startup' && tagsCount >= 10) + ) { + setDisabled(true); + } + }, [tagsCount, plan]); if (isDesktop) { return ( @@ -38,14 +115,11 @@ export const CreateTag = ({ tenantId }: Props) => { @@ -53,7 +127,7 @@ export const CreateTag = ({ tenantId }: Props) => { New tag -
+

); @@ -64,14 +138,11 @@ export const CreateTag = ({ tenantId }: Props) => { @@ -80,65 +151,9 @@ export const CreateTag = ({ tenantId }: Props) => { New tag - +
); }; - -const Form = ({ tenantId }: Props) => { - const [disabled, setDisabled] = useState(true); - - const { - register, - handleSubmit, - reset, - formState: { errors, isSubmitting, isValid }, - } = useForm({ - resolver: zodResolver(createTagClientSchema), - mode: 'onBlur', - defaultValues: { - label: '', - }, - }); - - const { mutate, isError, error } = useCreateTag(tenantId, reset); - - const onSubmit: SubmitHandler = (values) => { - mutate(values); - }; - - useEffect(() => { - setDisabled(isSubmitting || !isValid); - }, [isSubmitting, isValid]); - - return ( - -
- - } - type="label" - id="label" - placeholder="Tag label" - /> - -
- - - ); -}; diff --git a/src/modules/settings/tags/Tags.tsx b/src/modules/settings/tags/Tags.tsx index 9ac93c744..4dc797268 100644 --- a/src/modules/settings/tags/Tags.tsx +++ b/src/modules/settings/tags/Tags.tsx @@ -1,25 +1,62 @@ +'use client'; + import { useEffect, useState } from 'react'; -import { $Enums } from '@prisma/client'; +import { zodResolver } from '@hookform/resolvers/zod'; +import { TagIcon } from 'lucide-react'; +import { SubmitHandler, useForm } from 'react-hook-form'; +import { z } from 'zod'; -import { Button, Loader } from '@/components'; -import { useDeleteTag, useTags } from '@/hooks'; +import { deleteTag } from '@/actions/delete-tag/action'; +import { updateTag } from '@/actions/update-tag/action'; +import { updateTagSchema } from '@/actions/update-tag/schema'; +import { Button } from '@/components/button/Button'; +import { + Dialog, + DialogContent, + DialogHeader, + DialogTitle, + DialogTrigger, +} from '@/components/dialog/Dialog'; +import { Field } from '@/components/field/Field'; +import { Input } from '@/components/input/Input'; +import { resultToast } from '@/components/toast/Toast'; import { CreateTag } from './Create'; +import type { $Enums, Tag } from '@prisma/client'; + type Props = { tenantId: string; plan: $Enums.Plan; + tags: Tag[] | null; + tagsCount: number; }; -export const Tags = ({ tenantId, plan }: Props) => { +type Schema = z.infer; + +export const Tags = ({ tenantId, plan, tags, tagsCount }: Props) => { const [limit, setLimit] = useState(3); + const [disabled, setDisabled] = useState(false); - const { data: tags, isPending } = useTags(tenantId); - const { mutate, isPending: isTagLoading } = useDeleteTag(tenantId); + const { + register, + handleSubmit, + formState: { isSubmitting, isDirty, isValid }, + } = useForm({ + resolver: zodResolver(updateTagSchema), + mode: 'onBlur', + defaultValues: {}, + }); - const handleDeleteTag = (id: string) => { - mutate({ id }); + const onSubmit: SubmitHandler = async (data) => { + const result = await updateTag(data); + resultToast(result?.serverError, result?.data?.message); + }; + + const handleDeleteTag = async (id: string) => { + const result = await deleteTag({ id, tenantId }); + resultToast(result?.serverError, result?.data?.message); }; useEffect(() => { @@ -28,44 +65,89 @@ export const Tags = ({ tenantId, plan }: Props) => { } }, [plan]); - if (isPending || isTagLoading) { - return ; - } + useEffect(() => { + setDisabled(isSubmitting || !isValid || !isDirty); + }, [isSubmitting, isValid, isDirty]); return ( -
- {tags.length > 0 ? ( -
    - {tags.map((tag) => ( -
  • -

    {tag.label}

    - -
  • - ))} -
- ) : ( -

No tags

- )} - - {tags.length > 0 && plan !== 'enterprise' && ( -

- Tags limit: {tags.length} /{' '} - {limit} -

- )} + + +

{tag.label}

+
+ + + Edit the tag + +
+ + + + } + type="text" + placeholder={tag.label} + /> + +
+ + +
+
+
+
+ + ))} + + ) : ( +

No tags

+ )} + + {tags && tags.length > 0 && plan !== 'enterprise' && ( +

+ Tags limit: {tags.length} /{' '} + {limit} +

+ )} +
); }; diff --git a/src/modules/settings/tags/index.ts b/src/modules/settings/tags/index.ts deleted file mode 100644 index b7c10b6d5..000000000 --- a/src/modules/settings/tags/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Tags'; diff --git a/src/modules/settings/users/Create.tsx b/src/modules/settings/users/Create.tsx index 6f79c5f71..52cd1e9a6 100644 --- a/src/modules/settings/users/Create.tsx +++ b/src/modules/settings/users/Create.tsx @@ -1,120 +1,78 @@ +'use client'; + import { useEffect, useState } from 'react'; import { zodResolver } from '@hookform/resolvers/zod'; -import { AtSign, PlusCircle } from 'lucide-react'; -import { Controller, SubmitHandler, useForm } from 'react-hook-form'; +import { $Enums } from '@prisma/client'; +import { AtSign, Mail } from 'lucide-react'; +import { Controller, useForm } from 'react-hook-form'; import { z } from 'zod'; +import { createUser } from '@/actions/create-user/action'; +import { createUserSchema } from '@/actions/create-user/schema'; +import { Button } from '@/components/button/Button'; import { - Button, Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, +} from '@/components/dialog/Dialog'; +import { Drawer, DrawerContent, DrawerHeader, DrawerTitle, DrawerTrigger, - Field, - Input, - Label, +} from '@/components/drawer/Drawer'; +import { Field } from '@/components/field/Field'; +import { Input } from '@/components/input/Input'; +import { Label } from '@/components/label/Label'; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, -} from '@/components'; -import { useCreateUser, useMediaQuery } from '@/hooks'; -import { createUserClientSchema } from '@/lib'; +} from '@/components/select/Select'; +import { resultToast } from '@/components/toast/Toast'; +import { useMediaQuery } from '@/hooks/useMediaQuery'; +import { Limits } from '@/utils/limits'; + +import type { SubmitHandler } from 'react-hook-form'; type Props = { tenantId: string; + usersCount: number; + plan: $Enums.Plan; }; -type Schema = z.infer; - -export const CreateUser = ({ tenantId }: Props) => { - const isDesktop = useMediaQuery('(min-width: 640px)'); - - if (isDesktop) { - return ( - - - - - - - New user - -
- -
- ); - } +type Schema = z.infer; - return ( - - - - - -
- - New user - - -
-
-
- ); -}; - -const Form = ({ tenantId }: Props) => { +const Form = ({ tenantId, usersCount, plan }: Props) => { const [disabled, setDisabled] = useState(true); const { register, handleSubmit, control, - reset, + watch, formState: { errors, isValid, isSubmitting }, } = useForm({ - resolver: zodResolver(createUserClientSchema), + resolver: zodResolver(createUserSchema), mode: 'onBlur', defaultValues: { email: '', role: 'user', + plan, + tenantId, + usersCount, }, }); - const { mutate } = useCreateUser(tenantId, reset); - - const onSubmit: SubmitHandler = (values) => { - mutate(values); + const onSubmit: SubmitHandler = async (data) => { + const result = await createUser(data); + resultToast(result?.serverError, result?.data?.message); }; useEffect(() => { @@ -127,11 +85,17 @@ const Form = ({ tenantId }: Props) => { className="flex flex-col items-center gap-4" >
- + } + icon={} type="email" id="email" placeholder="Email" @@ -168,14 +132,70 @@ const Form = ({ tenantId }: Props) => {
); }; + +export const CreateUser = ({ tenantId, usersCount, plan }: Props) => { + const isDesktop = useMediaQuery('(min-width: 640px)'); + const [disabled, setDisabled] = useState(false); + + useEffect(() => { + if ( + (plan === 'free' && usersCount >= 5) || + (plan === 'startup' && usersCount >= 100) + ) { + setDisabled(true); + } + }, [usersCount, plan]); + + if (isDesktop) { + return ( + + + + + + + New user + +
+ +
+ ); + } + + return ( + + + + + +
+ + New user + + +
+
+
+ ); +}; diff --git a/src/modules/settings/users/FileInput.tsx b/src/modules/settings/users/FileInput.tsx index c2f69b2e8..911a5f13f 100644 --- a/src/modules/settings/users/FileInput.tsx +++ b/src/modules/settings/users/FileInput.tsx @@ -1,52 +1,60 @@ +'use client'; + import { useEffect, useRef, useState } from 'react'; import { zodResolver } from '@hookform/resolvers/zod'; -import { $Enums, User } from '@prisma/client'; import { FileUp } from 'lucide-react'; -import { SubmitHandler, useForm } from 'react-hook-form'; +import { useForm } from 'react-hook-form'; import { usePapaParse } from 'react-papaparse'; import { z } from 'zod'; +import { createUsers } from '@/actions/create-users/action'; +import { Button } from '@/components/button/Button'; import { - Button, Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, +} from '@/components/dialog/Dialog'; +import { Drawer, DrawerContent, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger, - Input, -} from '@/components'; -import { useCreateUsers, useMediaQuery } from '@/hooks'; -import { csvUploadClientSchema } from '@/lib'; +} from '@/components/drawer/Drawer'; +import { Input } from '@/components/input/Input'; +import { useMediaQuery } from '@/hooks/useMediaQuery'; +import { csvUploadSchema } from '@/lib/validations'; + +import type { $Enums, User } from '@prisma/client'; +import type { SubmitHandler } from 'react-hook-form'; type Props = { tenantId: string; users: User[]; plan: $Enums.Plan; + usersCount: number; }; -type Schema = z.infer; +type Schema = z.infer; -export const FileInput = ({ tenantId, users, plan }: Props) => { +export const FileInput = ({ tenantId, users, plan, usersCount }: Props) => { const isDesktop = useMediaQuery('(min-width: 640px)'); - const [file, setFile] = useState(); + const [file, setFile] = useState(null); const [fileName, setFileName] = useState(''); const [csvData, setCsvData] = useState([]); const [disabled, setDisabled] = useState(true); - const [newUsers, setNewUsers] = useState(); + const [newUsers, setNewUsers] = useState([]); const [limit, setLimit] = useState(5 - users.length); const fileInput = useRef(null); const { readRemoteFile } = usePapaParse(); const emails = users.map((user) => user.email); - const newUsersArray = newUsers + const usersArray = newUsers ?.filter((user) => !emails.includes(user)) .splice(0, limit); const removedUsersArray = newUsers @@ -60,7 +68,7 @@ export const FileInput = ({ tenantId, users, plan }: Props) => { handleSubmit, formState: { isSubmitting }, } = useForm({ - resolver: zodResolver(csvUploadClientSchema), + resolver: zodResolver(csvUploadSchema), defaultValues: { name: '', }, @@ -90,7 +98,7 @@ export const FileInput = ({ tenantId, users, plan }: Props) => { complete: (results) => { let columnIndex: number = 0; const newUsersArray = []; - results.data.map((data) => { + results.data.forEach((data) => { columnIndex = Object.keys(data).indexOf(field); newUsersArray.push(Object.values(data)); }); @@ -100,14 +108,15 @@ export const FileInput = ({ tenantId, users, plan }: Props) => { }); }; - const { mutate } = useCreateUsers(tenantId, newUsersArray); - const onFileSubmit: SubmitHandler = (values) => { handleFileSubmit(values.name); }; - const onSubmit = () => { - mutate(); + const onSubmit = async () => { + const formData = new FormData(); + formData.append('tenantId', tenantId); + formData.append('usersCount', String(usersCount)); + await createUsers(usersArray, formData); }; useEffect(() => { @@ -124,28 +133,24 @@ export const FileInput = ({ tenantId, users, plan }: Props) => {
{ type="text" id="column" placeholder="Column name" - className="rounded-none rounded-tr-md px-1 outline-none md:rounded-none" + className="rounded-none rounded-tr-md px-1 outline-none" /> {isDesktop ? (
)}
- {newUsersArray.length > 0 ? ( + {usersArray.length > 0 ? ( <>

New

    - {newUsersArray && - newUsersArray.map((user, index) => ( -
  • {user}
  • + {usersArray && + usersArray.map((user) => ( +
  • {user}
  • ))}
@@ -210,23 +213,18 @@ export const FileInput = ({ tenantId, users, plan }: Props) => {

Not added

    {removedUsersArray && - removedUsersArray.map((user, index) => ( -
  • {user}
  • + removedUsersArray.map((user) => ( +
  • {user}
  • ))}
)}
@@ -247,12 +245,10 @@ export const FileInput = ({ tenantId, users, plan }: Props) => {
)}
- {newUsersArray.length > 0 ? ( + {usersArray.length > 0 ? ( <>

New

    - {newUsersArray && - newUsersArray.map((user, index) => ( -
  • {user}
  • + {usersArray && + usersArray.map((user) => ( +
  • {user}
  • ))}
@@ -298,23 +294,20 @@ export const FileInput = ({ tenantId, users, plan }: Props) => {

Not added

    {removedUsersArray && - removedUsersArray.map((user, index) => ( -
  • {user}
  • + removedUsersArray.map((user) => ( +
  • {user}
  • ))}
)}
diff --git a/src/modules/settings/users/Update.tsx b/src/modules/settings/users/Update.tsx index 6b42eb761..0cf7440d9 100644 --- a/src/modules/settings/users/Update.tsx +++ b/src/modules/settings/users/Update.tsx @@ -1,95 +1,50 @@ +'use client'; + import { useEffect, useState } from 'react'; import { zodResolver } from '@hookform/resolvers/zod'; -import { User } from '@prisma/client'; import { AtSign, UserIcon } from 'lucide-react'; -import { Controller, SubmitHandler, useForm } from 'react-hook-form'; +import { Controller, useForm } from 'react-hook-form'; import { z } from 'zod'; +import { updateUser } from '@/actions/update-user/action'; +import { updateUserSchema } from '@/actions/update-user/schema'; +import { Button } from '@/components/button/Button'; import { - Button, Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, +} from '@/components/dialog/Dialog'; +import { Drawer, DrawerContent, DrawerHeader, DrawerTitle, DrawerTrigger, - Field, - Input, - Label, +} from '@/components/drawer/Drawer'; +import { Field } from '@/components/field/Field'; +import { Input } from '@/components/input/Input'; +import { Label } from '@/components/label/Label'; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, -} from '@/components'; -import { useMediaQuery, useUpdateUser } from '@/hooks'; -import { updateUserClientSchema } from '@/lib'; +} from '@/components/select/Select'; +import { useMediaQuery } from '@/hooks/useMediaQuery'; + +import type { User } from '@prisma/client'; +import type { SubmitHandler } from 'react-hook-form'; type Props = { user: User; tenantId: string; }; -type Schema = z.infer; - -export const UpdateUser = ({ user, tenantId }: Props) => { - const isDesktop = useMediaQuery('(min-width: 640px)'); - - if (isDesktop) { - return ( - - - - - - - Modify user - - - - - ); - } - - return ( - - - - - -
- - - Modify user - - - -
-
-
- ); -}; +type Schema = z.infer; const Form = ({ user, tenantId }: Props) => { const [disabled, setDisabled] = useState(true); @@ -100,18 +55,19 @@ const Form = ({ user, tenantId }: Props) => { control, formState: { isSubmitting, isDirty, isValid, errors }, } = useForm({ - resolver: zodResolver(updateUserClientSchema), + resolver: zodResolver(updateUserSchema), mode: 'onBlur', defaultValues: { - name: user.name, + name: user.name ?? '', email: user.email, role: user.role, + tenantId, + id: user.id, }, }); - const { mutate } = useUpdateUser(user.id, tenantId); - const onSubmit: SubmitHandler = (values) => { - mutate(values); + const onSubmit: SubmitHandler = async (data) => { + await updateUser(data); }; useEffect(() => { @@ -125,12 +81,12 @@ const Form = ({ user, tenantId }: Props) => { >
- + } + defaultValue={user.name ?? ''} + icon={} type="name" id="name" placeholder="Name" @@ -138,12 +94,12 @@ const Form = ({ user, tenantId }: Props) => {
- + } + icon={} type="email" id="email" placeholder="Email" @@ -182,15 +138,51 @@ const Form = ({ user, tenantId }: Props) => {
)}
- ); }; + +export const UpdateUser = ({ user, tenantId }: Props) => { + const isDesktop = useMediaQuery('(min-width: 640px)'); + + if (isDesktop) { + return ( + + + + + + + Modify user + +
+ +
+ ); + } + + return ( + + + + + +
+ + + Modify user + + + +
+
+
+ ); +}; diff --git a/src/modules/settings/users/Users.tsx b/src/modules/settings/users/Users.tsx index bedd5fa1d..c56098569 100644 --- a/src/modules/settings/users/Users.tsx +++ b/src/modules/settings/users/Users.tsx @@ -1,94 +1,105 @@ -import { $Enums } from '@prisma/client'; +'use client'; +import { deleteUser } from '@/actions/delete-user/action'; import { Avatar, AvatarFallback, AvatarImage, - Button, - Loader, -} from '@/components'; -import { useDeleteUser, useUsers } from '@/hooks'; +} from '@/components/avatar/Avatar'; +import { Button } from '@/components/button/Button'; +import { resultToast } from '@/components/toast/Toast'; import { CreateUser } from './Create'; import { FileInput } from './FileInput'; import { UpdateUser } from './Update'; +import type { $Enums, User } from '@prisma/client'; + type Props = { userId: string; tenantId: string; plan: $Enums.Plan; + users: User[]; + usersCount: number; }; -export const Users = ({ userId, tenantId, plan }: Props) => { - const { data: users, isPending } = useUsers(tenantId); - - const { mutate, isPending: isUserLoading } = useDeleteUser(tenantId); +const UserAvatar = ({ id, email, image }) => { + const placeholderImage = `https://api.dicebear.com/7.x/bottts-neutral/svg?seed=${id}&radius=50`; + const avatar = image ?? placeholderImage; + return ( + + + {email[0].toUpperCase()} + + ); +}; - const handleDeleteUser = (id: string) => { - mutate({ id }); +export const Users = ({ userId, tenantId, plan, users, usersCount }: Props) => { + const handleDeleteUser = async (id: string) => { + const result = await deleteUser({ id, tenantId }); + resultToast(result?.serverError, result?.data?.message); }; - if (isPending || isUserLoading) { - return ; - } - return ( -
    - {users?.map((user) => ( -
  • -
    -
    - -
    -

    - {user.name} -

    -

    {user.email}

    +
    +

    + Users +

    +
      + {users?.map((user) => ( +
    • +
      +
      + +
      +

      + {user.name} +

      + {user.email} +
      +
      +
      + + {(user.role === 'user' || user.id !== userId) && ( + + )}
      -
      - - {(user.role === 'user' || user.id !== userId) && ( - - )} -
      -
    -
  • - ))} - -
    -
    + + ))} +
+ +
+

or

-
+
- - - ); -}; - -const UserAvatar = ({ id, email, image }) => { - const placeholderImage = `https://api.dicebear.com/7.x/bottts-neutral/svg?seed=${id}&radius=50`; - const avatar = image ?? placeholderImage; - return ( - - - {email[0].toUpperCase()} - + + ); }; diff --git a/src/modules/settings/users/index.ts b/src/modules/settings/users/index.ts deleted file mode 100644 index 1858d4aed..000000000 --- a/src/modules/settings/users/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Users'; diff --git a/src/modules/theme/ThemeToggle.tsx b/src/modules/theme/ThemeToggle.tsx index ea918c03d..ea6f39064 100644 --- a/src/modules/theme/ThemeToggle.tsx +++ b/src/modules/theme/ThemeToggle.tsx @@ -1,13 +1,17 @@ +'use client'; + +import { useEffect } from 'react'; + import { SunIcon, MoonIcon } from 'lucide-react'; import { useTheme } from 'next-themes'; +import { Button } from '@/components/button/Button'; import { - Button, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, -} from '@/components'; +} from '@/components/dropdown/Dropdown'; export const ThemeToggle = () => { const { theme, setTheme } = useTheme(); @@ -27,14 +31,21 @@ export const ThemeToggle = () => { }, ]; + useEffect(() => { + const isDarkTheme = globalThis.matchMedia( + '(prefers-color-scheme: dark)', + ).matches; + setTheme(isDarkTheme ? 'dark' : 'light'); + }, []); + return ( - @@ -45,8 +56,8 @@ export const ThemeToggle = () => { key={th.value} className={ theme === th.value - ? 'bg-gray-12 text-white hover:bg-gray-12 dark:bg-gray-1 dark:hover:bg-gray-1' - : 'bg-gray-1 dark:bg-gray-12' + ? 'bg-primary-negative text-primary-negative hover:bg-primary-negative' + : 'bg-primary' } onClick={() => setTheme(th.value)} > diff --git a/src/modules/theme/index.ts b/src/modules/theme/index.ts deleted file mode 100644 index 879e51319..000000000 --- a/src/modules/theme/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './ThemeToggle'; diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx deleted file mode 100644 index 221ce1b18..000000000 --- a/src/pages/_app.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import '@/styles/globals.css'; -import { useState } from 'react'; - -import { - HydrationBoundary, - QueryClient, - QueryClientProvider, -} from '@tanstack/react-query'; -import { Inter, Merriweather } from 'next/font/google'; -import { SessionProvider } from 'next-auth/react'; -import { Toaster } from 'sonner'; - -import { ThemeProvider, TooltipProvider } from '@/components'; - -const merriweather = Merriweather({ - subsets: ['latin'], - weight: '400', - variable: '--font-merriweather', -}); -const inter = Inter({ - subsets: ['latin'], - weight: ['400', '600', '700'], - variable: '--font-inter', -}); - -function App({ Component, pageProps: { session, ...pageProps } }) { - const [queryClient] = useState( - () => - new QueryClient({ - defaultOptions: { - queries: { - gcTime: 60 * 1000, - staleTime: 60 * 1000, - retry: false, - throwOnError: true, - }, - }, - }), - ); - - return ( - - - - - - -
- -
-
-
-
-
-
- ); -} - -export default App; diff --git a/src/pages/_error.tsx b/src/pages/_error.tsx deleted file mode 100644 index c5f35cc2f..000000000 --- a/src/pages/_error.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import * as Sentry from '@sentry/nextjs'; -import Error from 'next/error'; - -import type { NextPage } from 'next'; -import type { ErrorProps } from 'next/error'; - -const CustomErrorComponent: NextPage = (props) => { - return ; -}; - -CustomErrorComponent.getInitialProps = async (contextData) => { - // In case this is running in a serverless function, await this in order to give Sentry - // time to send the error before the lambda exits - await Sentry.captureUnderscoreErrorException(contextData); - - // This will contain the status code of the response - return Error.getInitialProps(contextData); -}; - -export default CustomErrorComponent; diff --git a/src/pages/api/answers/[id].ts b/src/pages/api/answers/[id].ts deleted file mode 100644 index a5546eecd..000000000 --- a/src/pages/api/answers/[id].ts +++ /dev/null @@ -1,57 +0,0 @@ -import { getToken } from 'next-auth/jwt'; - -import { updateAnswerServerSchema } from '@/lib'; -import prisma from 'lib/prisma'; - -import type { NextApiRequest, NextApiResponse } from 'next'; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - if (req.method === 'PUT') { - try { - if (!req.query) { - return res - .status(404) - .json({ success: false, error: { message: `Answer not found` } }); - } - const token = await getToken({ req }); - if (token) { - const result = updateAnswerServerSchema.safeParse({ - body: req.body, - query: req.query, - }); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { id } = result.data.query; - const data = result.data.body; - await prisma.answer.update({ - where: { id }, - data, - }); - return res - .status(201) - .json({ success: true, message: 'Answer updated successfully' }); - } - } else { - return res - .status(401) - .json({ success: false, error: { message: 'Not signed in' } }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(500).json({ success: false, error: error.message }); - } - } - } else { - return res - .status(405) - .json({ success: false, error: { message: 'Method not allowed' } }); - } -} diff --git a/src/pages/api/answers/index.ts b/src/pages/api/answers/index.ts deleted file mode 100644 index 31a230c5c..000000000 --- a/src/pages/api/answers/index.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { NextApiRequest, NextApiResponse } from 'next'; -import { getToken } from 'next-auth/jwt'; - -import { createAnswerServerSchema, getUserIdSchema } from '@/lib'; -import prisma from 'lib/prisma'; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - if (req.method === 'GET') { - try { - if (!req.query) { - return res - .status(404) - .json({ success: false, error: { message: `User not found` } }); - } - const result = getUserIdSchema.safeParse(req.query); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { userId } = result.data; - const answers = await prisma.node.findMany({ - where: { answer: { is: { userId } } }, - include: { - answer: { - select: { - text: true, - }, - }, - question: { - select: { - id: true, - slug: true, - text: true, - }, - }, - }, - }); - return res.status(200).json(answers); - } - } catch (error) { - if (error instanceof Error) { - return res - .status(404) - .json({ success: false, error: { error: error.message } }); - } - } - } else if (req.method === 'POST') { - try { - if (!req.body) { - return res - .status(404) - .json({ success: false, error: { message: `Answer not provided` } }); - } - const token = await getToken({ req }); - if (token) { - const result = createAnswerServerSchema.safeParse(req.body); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { text, nodeId, userId } = result.data; - await prisma.answer.create({ - data: { - nodeId, - userId, - text, - }, - }); - return res - .status(201) - .json({ success: true, message: 'Answer created successfully' }); - } - } else { - return res - .status(401) - .json({ success: false, error: { message: 'Not signed in' } }); - } - } catch (error) { - if (error instanceof Error) { - return res - .status(500) - .json({ success: false, error: { error: error.message } }); - } - } - } else { - return res - .status(405) - .json({ success: false, error: { message: 'Method not allowed' } }); - } -} diff --git a/src/pages/api/auth/[...nextauth].ts b/src/pages/api/auth/[...nextauth].ts deleted file mode 100644 index f2779ee4e..000000000 --- a/src/pages/api/auth/[...nextauth].ts +++ /dev/null @@ -1,91 +0,0 @@ -import { PrismaAdapter } from '@next-auth/prisma-adapter'; -import { NextApiHandler } from 'next/types'; -import NextAuth, { NextAuthOptions } from 'next-auth'; -import GoogleProvider from 'next-auth/providers/google'; - -import { Routes } from '@/utils'; -import prisma from 'lib/prisma'; - -export const authOptions: NextAuthOptions = { - adapter: PrismaAdapter(prisma), - providers: [ - GoogleProvider({ - clientId: process.env.GOOGLE_CLIENT_ID, - clientSecret: process.env.GOOGLE_CLIENT_SECRET, - allowDangerousEmailAccountLinking: true, - }), - ], - pages: { - signIn: Routes.SITE.LOGIN, - error: Routes.SITE.LOGIN, - }, - callbacks: { - async signIn({ profile, account }) { - const maybeUser = await prisma.user.findUnique({ - where: { email: profile.email }, - }); - if (!maybeUser) { - const domain = profile.email.split('@')[1]; - const tenant = await prisma.tenant.findUnique({ where: { domain } }); - if (!tenant) return false; - const usersCount = await prisma.user.count({ - where: { tenantId: tenant.id }, - }); - if ( - (tenant.plan === 'free' && usersCount >= 5) || - (tenant.plan === 'startup' && usersCount >= 100) - ) { - return false; - } - const newUser = await prisma.user.create({ - data: { - name: profile.name, - email: profile.email, - image: profile.picture, - role: 'user', - tenant: { connect: { id: tenant.id } }, - }, - }); - if (!newUser) { - return false; - } - return true; - } - if ( - account.provider === 'google' && - (!maybeUser.name || !maybeUser.image) - ) { - await prisma.user.update({ - where: { id: maybeUser.id }, - data: { - name: profile.name, - image: profile.picture, - }, - }); - } - return true; - }, - async jwt({ token, account, user }) { - if (account) { - token.accessToken = account.access_token; - token.id = user.id; - } - return token; - }, - async session({ session, token }) { - session.user.id = token.id as string; - return session; - }, - }, - session: { - strategy: `jwt`, - maxAge: 60 * 60, - }, - secret: process.env.NEXTAUTH_SECRET, -}; - -const authHandler: NextApiHandler = (req, res) => { - NextAuth(req, res, authOptions); -}; - -export default authHandler; diff --git a/src/pages/api/integrations/[id].ts b/src/pages/api/integrations/[id].ts deleted file mode 100644 index 674515f17..000000000 --- a/src/pages/api/integrations/[id].ts +++ /dev/null @@ -1,51 +0,0 @@ -import { getToken } from 'next-auth/jwt'; - -import { getIdSchema } from '@/lib'; -import prisma from 'lib/prisma'; - -import type { NextApiRequest, NextApiResponse } from 'next'; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - if (req.method === 'GET') { - try { - if (!req.query) { - return res - .status(404) - .json({ success: false, error: { message: `Tenant not found` } }); - } - const token = await getToken({ req }); - if (token) { - const result = getIdSchema.safeParse(req.query); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { id } = result.data; - const integrations = await prisma.integrations.findUnique({ - where: { tenantId: id as string }, - }); - return res.status(200).json(integrations); - } - } else { - return res.status(401).json({ - success: false, - error: { success: false, message: 'Not signed in' }, - }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(404).json({ success: false, error: error.message }); - } - } - } else { - return res - .status(405) - .json({ success: false, error: { message: 'Method not allowed' } }); - } -} diff --git a/src/pages/api/integrations/index.ts b/src/pages/api/integrations/index.ts deleted file mode 100644 index 4d260d057..000000000 --- a/src/pages/api/integrations/index.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { getToken } from 'next-auth/jwt'; - -import { createIntegrationServerSchema } from '@/lib'; -import prisma from 'lib/prisma'; - -import type { NextApiRequest, NextApiResponse } from 'next'; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - if (req.method === 'POST') { - try { - if (!req.body) { - return res.status(404).json({ - success: false, - error: { message: `Form data not provided` }, - }); - } - const token = await getToken({ req }); - if (token) { - const result = createIntegrationServerSchema.safeParse(req.body); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { slack, tenantId } = result.data; - await prisma.integrations.upsert({ - where: { tenantId }, - update: { slack }, - create: { - slack, - tenantId, - }, - }); - return res.status(201).json({ - success: true, - message: 'Integrations updated successfully', - }); - } - } else { - return res - .status(401) - .json({ success: false, error: { message: 'Not signed in' } }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(500).json({ success: false, error: error.message }); - } - } - } else { - return res - .status(405) - .json({ success: false, error: { message: 'Method not allowed' } }); - } -} diff --git a/src/pages/api/integrations/slack/index.ts b/src/pages/api/integrations/slack/index.ts deleted file mode 100644 index e07510a20..000000000 --- a/src/pages/api/integrations/slack/index.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { IncomingWebhook } from '@slack/webhook'; -import { getToken } from 'next-auth/jwt'; - -import { slackIntegrationServerSchema } from '@/lib'; -import { dateOptions, timeOptions } from '@/utils'; - -import type { NextApiRequest, NextApiResponse } from 'next'; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - if (req.method === 'POST') { - try { - if (!req.body) { - return res.status(404).json({ - success: false, - error: { message: `Form data not provided` }, - }); - } - const token = await getToken({ req }); - if (token) { - const result = slackIntegrationServerSchema.safeParse(req.body); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { url, text } = result.data; - const webhook = new IncomingWebhook(url); - await webhook.send({ - text, - blocks: [ - { - type: 'section', - text: { - type: 'mrkdwn', - text: `*${text}*`, - }, - }, - { - type: 'divider', - block_id: 'divider1', - }, - { - type: 'section', - text: { - type: 'mrkdwn', - text: `Asked on ${new Date().toLocaleDateString( - undefined, - dateOptions, - )} at ${new Date().toLocaleTimeString( - undefined, - timeOptions, - )}`, - }, - }, - ], - }); - return res - .status(200) - .json({ success: true, message: 'Question created successfully' }); - } - } else { - return res - .status(401) - .json({ success: false, error: { message: 'Not signed in' } }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(500).json({ success: false, error: error.message }); - } - } - } else { - return res - .status(405) - .json({ success: false, error: { message: 'Method not allowed' } }); - } -} diff --git a/src/pages/api/nodes/[id].ts b/src/pages/api/nodes/[id].ts deleted file mode 100644 index 61b043c8f..000000000 --- a/src/pages/api/nodes/[id].ts +++ /dev/null @@ -1,124 +0,0 @@ -import { getToken } from 'next-auth/jwt'; - -import { getNodeServerSchema, updateNodeServerSchema } from '@/lib'; -import { nodeModelWithDate } from '@/utils'; -import prisma from 'lib/prisma'; - -import type { NextApiRequest, NextApiResponse } from 'next'; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - const token = await getToken({ req }); - if (req.method === 'GET') { - try { - if (!req.query) { - return res - .status(404) - .json({ success: false, error: { message: `Node not found` } }); - } - if (token) { - const result = getNodeServerSchema.safeParse(req.query); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { tenantId, id } = result.data; - const node = await prisma.node.findUnique({ - where: { id: id as string, tenantId: tenantId as string }, - include: nodeModelWithDate, - }); - return res.status(200).json(node); - } - } else { - return res - .status(401) - .json({ success: false, error: { message: 'Not signed in' } }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(404).json({ success: false, error: error.message }); - } - } - } else if (req.method === 'PUT') { - try { - if (!req.query) { - return res - .status(404) - .json({ success: false, error: { message: `Node not found` } }); - } - if (token) { - const result = updateNodeServerSchema.safeParse({ - body: req.body, - query: req.query, - }); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { id } = result.data.query; - const { tenantId, questionId, text, slug, userId, tags } = - result.data.body; - const duplicateQuestion = await prisma.node.findFirst({ - where: { - tenantId, - question: { text: text }, - tags: { every: { id: { in: tags }, tenantId }, some: {} }, - }, - }); - if (duplicateQuestion) { - return res.status(409).json({ - success: false, - message: 'This question already exists', - }); - } - await prisma.node.update({ - where: { id, tenantId: tenantId as string }, - data: { - question: { - update: { - where: { id: questionId as string }, - data: { - text: text as string, - slug: slug as string, - user: { connect: { id: userId } }, - }, - }, - }, - tags: { - set: tags.map((tag: string) => { - return { - id: tag, - tenantId, - }; - }), - }, - }, - }); - return res - .status(201) - .json({ success: true, message: 'Question updated successfully' }); - } - } else { - return res - .status(401) - .json({ success: false, error: { message: 'Not signed in' } }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(500).json({ success: false, error: error.message }); - } - } - } else { - return res - .status(405) - .json({ success: false, error: { message: 'Method not allowed' } }); - } -} diff --git a/src/pages/api/nodes/count.ts b/src/pages/api/nodes/count.ts deleted file mode 100644 index 1c4543d08..000000000 --- a/src/pages/api/nodes/count.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { getToken } from 'next-auth/jwt'; - -import { getTenantIdSchema } from '@/lib'; -import prisma from 'lib/prisma'; - -import type { NextApiRequest, NextApiResponse } from 'next'; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - const token = await getToken({ req }); - if (req.method === 'GET') { - try { - if (!req.query) { - return res - .status(404) - .json({ success: false, error: { message: `Node not found` } }); - } - if (token) { - const result = getTenantIdSchema.safeParse(req.query); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { tenantId } = result.data; - let nodes = await prisma.node.count({ - where: { tenantId }, - }); - if (!nodes) { - nodes = 0; - } - return res.status(200).json(nodes); - } - } else { - return res - .status(401) - .json({ success: false, error: { message: 'Not signed in' } }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(404).json({ success: false, error: error.message }); - } - } - } else { - return res - .status(405) - .json({ success: false, error: { message: 'Method not allowed' } }); - } -} diff --git a/src/pages/api/nodes/index.ts b/src/pages/api/nodes/index.ts deleted file mode 100644 index 6e467f5d8..000000000 --- a/src/pages/api/nodes/index.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { NextApiRequest, NextApiResponse } from 'next'; -import { getToken } from 'next-auth/jwt'; - -import { getNodesServerSchema, createNodeServerSchema } from '@/lib'; -import { OFFSET, nodeModel } from '@/utils'; -import prisma from 'lib/prisma'; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - if (req.method === 'GET') { - try { - if (!req.query) { - return res - .status(404) - .json({ success: false, error: { message: `Tenant not found` } }); - } - const result = getNodesServerSchema.safeParse(req.query); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { tenantId, page } = result.data; - const pageInt = Number(page); - const nodes = await prisma.node.findMany({ - where: { tenantId: tenantId as string }, - orderBy: { createdAt: 'desc' }, - skip: pageInt * OFFSET, - take: OFFSET, - include: nodeModel, - }); - return res.status(200).json(nodes); - } - } catch (error) { - if (error instanceof Error) { - return res.status(404).json({ success: false, error: error.message }); - } - } - } else if (req.method === 'POST') { - try { - if (!req.body) { - return res - .status(404) - .json({ success: false, message: `Data not provided` }); - } - const token = await getToken({ req }); - if (token) { - const result = createNodeServerSchema.safeParse(req.body); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { text, slug, tenantId, userId, tags, withAnswer } = - result.data; - const duplicateQuestion = await prisma.node.findFirst({ - where: { tenantId, question: { text: text } }, - }); - if (duplicateQuestion) { - return res.status(409).json({ - success: false, - error: { message: 'This question already exists' }, - }); - } - const node = await prisma.node.create({ - data: { - tenant: { connect: { id: tenantId } }, - question: { - create: { text, slug, user: { connect: { id: userId } } }, - }, - tags: { - connect: tags.map((tag) => ({ id: tag })), - }, - }, - }); - if (withAnswer) { - return res.status(201).json({ - node, - message: 'Question created successfully', - }); - } - return res - .status(201) - .json({ success: true, message: 'Question created successfully' }); - } - } else { - return res - .status(401) - .json({ success: false, error: { message: 'Not signed in' } }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(500).json({ success: false, error: error.message }); - } - } - } else { - return res - .status(405) - .json({ success: false, error: { message: 'Method not allowed' } }); - } -} diff --git a/src/pages/api/questions/index.ts b/src/pages/api/questions/index.ts deleted file mode 100644 index 03028fd50..000000000 --- a/src/pages/api/questions/index.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { NextApiRequest, NextApiResponse } from 'next'; -import { getToken } from 'next-auth/jwt'; - -import { getUserIdSchema } from '@/lib'; -import prisma from 'lib/prisma'; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - if (req.method === 'GET') { - try { - if (!req.query) { - return res - .status(404) - .json({ success: false, message: `User not found` }); - } - const token = await getToken({ req }); - if (token) { - const result = getUserIdSchema.safeParse(req.query); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { userId } = result.data; - const questions = await prisma.question.findMany({ - where: { userId: userId as string }, - orderBy: { createdAt: 'desc' }, - include: { node: { select: { id: true } } }, - }); - return res.status(200).json(questions); - } - } else { - return res - .status(401) - .json({ success: false, error: { message: 'Not signed in' } }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(404).json({ error: error.message }); - } - } - } else { - return res - .status(405) - .json({ success: false, error: { message: 'Method not allowed' } }); - } -} diff --git a/src/pages/api/search/index.ts b/src/pages/api/search/index.ts deleted file mode 100644 index 6023d6e5c..000000000 --- a/src/pages/api/search/index.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { NextApiRequest, NextApiResponse } from 'next'; -import { getToken } from 'next-auth/jwt'; - -import { getSearchServerSchema } from '@/lib'; -import { nodeModel } from '@/utils'; -import prisma from 'lib/prisma'; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - if (req.method === 'GET') { - try { - if (!req.query) { - return res - .status(404) - .json({ success: false, error: { message: `Tenant not found` } }); - } - const token = await getToken({ req }); - if (token) { - const result = getSearchServerSchema.safeParse(req.query); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { tenantId, searchQuery } = result.data; - const nodes = await prisma.node.findMany({ - where: { - tenantId: tenantId as string, - question: { - text: { contains: searchQuery as string, mode: 'insensitive' }, - }, - }, - orderBy: { createdAt: 'desc' }, - include: nodeModel, - }); - return res.status(200).json(nodes); - } - } else { - return res - .status(401) - .json({ success: false, error: { message: 'Not signed in' } }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(404).json({ success: false, error: error.message }); - } - } - } else { - return res - .status(405) - .json({ success: false, error: { message: 'Method not allowed' } }); - } -} diff --git a/src/pages/api/search/tags/index.ts b/src/pages/api/search/tags/index.ts deleted file mode 100644 index 01ebf0f7d..000000000 --- a/src/pages/api/search/tags/index.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { NextApiRequest, NextApiResponse } from 'next'; -import { getToken } from 'next-auth/jwt'; - -import { getTagSearchServerSchema } from '@/lib'; -import { nodeModel } from '@/utils'; -import prisma from 'lib/prisma'; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - if (req.method === 'GET') { - try { - if (!req.query) { - return res - .status(404) - .json({ success: false, error: { message: `Tenant not found` } }); - } - const token = await getToken({ req }); - if (token) { - const result = getTagSearchServerSchema.safeParse(req.query); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { tenantId, searchTag } = result.data; - const nodes = await prisma.node.findMany({ - where: { - tenantId: tenantId as string, - tags: { - some: { - label: { contains: searchTag as string, mode: 'insensitive' }, - }, - }, - }, - orderBy: { createdAt: 'desc' }, - include: nodeModel, - }); - return res.status(200).json(nodes); - } - } else { - return res - .status(401) - .json({ success: false, error: { message: 'Not signed in' } }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(404).json({ success: false, error: error.message }); - } - } - } else { - return res - .status(405) - .json({ success: false, error: { message: 'Method not allowed' } }); - } -} diff --git a/src/pages/api/storage/logo.ts b/src/pages/api/storage/logo.ts deleted file mode 100644 index f1bf97117..000000000 --- a/src/pages/api/storage/logo.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Storage } from '@google-cloud/storage'; -import { NextApiRequest, NextApiResponse } from 'next'; -import { getToken } from 'next-auth/jwt'; - -const bucketName = 'faqmaker'; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - const token = await getToken({ req }); - if (req.method === 'POST') { - try { - if (token) { - const storage = new Storage({ - projectId: process.env.PROJECT_ID, - credentials: { - client_email: process.env.CLIENT_EMAIL, - private_key: process.env.PRIVATE_KEY.replace(/\\n/g, '\n'), - }, - }); - const bucket = storage.bucket(bucketName); - const file = bucket.file(`logos/${req.query.file as string}`); - const options = { - expires: Date.now() + 1 * 60 * 1000, // 1 minute, - fields: { 'x-goog-meta-test': 'data' }, - }; - const [response] = await file.generateSignedPostPolicyV4(options); - res.status(200).json(response); - } else { - return res - .status(401) - .json({ success: false, error: { message: 'Not signed in' } }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(404).json({ success: false, error: error.message }); - } - } - } else { - return res - .status(405) - .json({ success: false, error: { message: 'Method not allowed' } }); - } -} diff --git a/src/pages/api/stripe/billing/index.ts b/src/pages/api/stripe/billing/index.ts deleted file mode 100644 index 26a79da7b..000000000 --- a/src/pages/api/stripe/billing/index.ts +++ /dev/null @@ -1,139 +0,0 @@ -import Stripe from 'stripe'; - -import { getTenantIdSchema } from '@/lib'; -import prisma from 'lib/prisma'; - -import type { NextApiRequest, NextApiResponse } from 'next'; - -const stripe = new Stripe(process.env.STRIPE_SECRET_KEY, { - apiVersion: '2023-10-16', -}); - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - if (req.method === 'POST') { - try { - if (!req.body) { - return res.status(404).json({ - success: false, - error: { message: `Customer details not provided` }, - }); - } - const result = getTenantIdSchema.safeParse(req.body); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { tenantId } = result.data; - const { customerId, plan } = await prisma.tenant.findUnique({ - where: { id: tenantId }, - select: { - customerId: true, - plan: true, - }, - }); - const usersCount = await prisma.user.count({ - where: { tenantId }, - }); - const tagsCount = await prisma.tag.count({ - where: { tenantId }, - }); - const productsList = await stripe.products.list({ - active: true, - }); - const [free, startup, enterprise] = productsList.data; - const products = []; - switch (plan) { - case 'free': - products.push( - { product: free.id, prices: [free.default_price] }, - { product: startup.id, prices: [startup.default_price] }, - { product: enterprise.id, prices: [enterprise.default_price] }, - ); - break; - case 'startup': - if (usersCount <= 5 && tagsCount <= 3) { - products.push( - { product: free.id, prices: [free.default_price] }, - { product: startup.id, prices: [startup.default_price] }, - { product: enterprise.id, prices: [enterprise.default_price] }, - ); - } else { - products.push( - { product: startup.id, prices: [startup.default_price] }, - { product: enterprise.id, prices: [enterprise.default_price] }, - ); - } - break; - case 'enterprise': - if (usersCount <= 5 && tagsCount <= 3) { - products.push( - { product: free.id, prices: [free.default_price] }, - { product: startup.id, prices: [startup.default_price] }, - { product: enterprise.id, prices: [enterprise.default_price] }, - ); - } else if (usersCount <= 100 && tagsCount <= 10) { - products.push( - { product: startup.id, prices: [startup.default_price] }, - { product: enterprise.id, prices: [enterprise.default_price] }, - ); - } else { - products.push({ - product: enterprise.id, - prices: [enterprise.default_price], - }); - } - break; - default: - break; - } - const configuration = await stripe.billingPortal.configurations.create({ - business_profile: { - privacy_policy_url: 'https://example.com/privacy', - terms_of_service_url: 'https://example.com/terms', - }, - default_return_url: process.env.NEXT_PUBLIC_SITE_URL, - features: { - customer_update: { - allowed_updates: ['name', 'email'], - enabled: true, - }, - invoice_history: { - enabled: true, - }, - payment_method_update: { - enabled: true, - }, - subscription_cancel: { - enabled: true, - mode: 'at_period_end', - }, - subscription_update: { - enabled: true, - default_allowed_updates: ['price', 'promotion_code'], - products: products, - }, - }, - }); - const { url } = await stripe.billingPortal.sessions.create({ - customer: customerId, - configuration: configuration.id, - }); - return res.status(200).json({ url }); - } - } catch (error) { - if (error instanceof Error) { - res.status(500).json({ success: false, error: error.message }); - } - } - } else { - return res - .status(405) - .json({ success: false, error: { message: 'Method not allowed' } }); - } -} diff --git a/src/pages/api/stripe/checkout/index.ts b/src/pages/api/stripe/checkout/index.ts deleted file mode 100644 index 9a1042160..000000000 --- a/src/pages/api/stripe/checkout/index.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { NextApiRequest, NextApiResponse } from 'next'; -import Stripe from 'stripe'; - -import { createCheckoutServerSchema } from '@/lib/server/validations/stripe'; -import { Routes } from '@/utils'; - -const stripe = new Stripe(process.env.STRIPE_SECRET_KEY, { - apiVersion: '2023-10-16', -}); - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - if (req.method === 'POST') { - try { - if (!req.body) { - return res - .status(404) - .json({ success: false, message: `Information not provided` }); - } - const result = createCheckoutServerSchema.safeParse(req.body); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { lookup_key, customerId } = result.data; - const prices = await stripe.prices.list({ - lookup_keys: [lookup_key], - }); - const session = await stripe.checkout.sessions.create({ - line_items: [ - { - price: prices.data[0].id, - quantity: 1, - }, - ], - customer: customerId, - customer_update: { - address: 'auto', - }, - mode: 'subscription', - success_url: `${process.env.NEXT_PUBLIC_SITE_URL}/${Routes.SITE.LOGIN}`, - cancel_url: `${process.env.NEXT_PUBLIC_SITE_URL}/register/plan?status=cancel`, - automatic_tax: { enabled: true }, - }); - return res.json({ id: session.id }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(500).json({ success: false, error: error.message }); - } - } - } else { - return res - .status(405) - .json({ success: false, error: { message: 'Method not allowed' } }); - } -} diff --git a/src/pages/api/stripe/customer/index.ts b/src/pages/api/stripe/customer/index.ts deleted file mode 100644 index 041a6c1e2..000000000 --- a/src/pages/api/stripe/customer/index.ts +++ /dev/null @@ -1,68 +0,0 @@ -import Stripe from 'stripe'; - -import { createCustomerServerSchema } from '@/lib/server/validations/stripe'; -import prisma from 'lib/prisma'; - -import type { NextApiRequest, NextApiResponse } from 'next'; - -const stripe = new Stripe(process.env.STRIPE_SECRET_KEY, { - apiVersion: '2023-10-16', -}); - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - if (req.method === 'POST') { - try { - if (!req.body) { - return res - .status(404) - .json({ success: false, message: `Company details not provided` }); - } - const result = createCustomerServerSchema.safeParse(req.body); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { companyEmail, company } = result.data; - const customerExists = await stripe.customers.search({ - query: `email:'${companyEmail}'`, - }); - if (customerExists.data.length > 0) { - return res.status(409).json({ - success: false, - message: 'A customer with the same company email already exists', - }); - } - const customer = await stripe.customers.create({ - email: companyEmail, - name: company, - }); - if (!customer) { - return res - .status(500) - .json({ message: 'There was a problem creating the customer' }); - } - await prisma.tenant.update({ - where: { email: companyEmail }, - data: { - customerId: customer.id, - }, - }); - return res.status(201).json({ customerId: customer.id }); - } - } catch (error) { - if (error instanceof Error) { - res.status(500).json({ success: false, error: error.message }); - } - } - } else { - return res - .status(405) - .json({ success: false, error: { message: 'Method not allowed' } }); - } -} diff --git a/src/pages/api/tags/[id].ts b/src/pages/api/tags/[id].ts deleted file mode 100644 index 4b9ad50f9..000000000 --- a/src/pages/api/tags/[id].ts +++ /dev/null @@ -1,52 +0,0 @@ -import { getToken } from 'next-auth/jwt'; - -import { deleteTagServerSchema } from '@/lib'; -import prisma from 'lib/prisma'; - -import type { NextApiRequest, NextApiResponse } from 'next'; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - if (req.method === 'DELETE') { - try { - if (!req.query) { - return res - .status(404) - .json({ success: false, error: { message: `Tag not found` } }); - } - const token = await getToken({ req }); - if (token) { - const result = deleteTagServerSchema.safeParse({ - body: req.body, - query: req.query, - }); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { id } = result.data.query; - const { tenantId } = result.data.body; - await prisma.tag.delete({ - where: { id, tenantId }, - }); - return res - .status(200) - .json({ success: true, message: 'Tag deleted successfully' }); - } - } else { - return res - .status(401) - .json({ success: false, error: { message: 'Not signed in' } }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(500).json({ error: error.message }); - } - } - } -} diff --git a/src/pages/api/tags/index.ts b/src/pages/api/tags/index.ts deleted file mode 100644 index 7de3fecd2..000000000 --- a/src/pages/api/tags/index.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { getToken } from 'next-auth/jwt'; - -import { getTenantIdSchema, createTagServerSchema, getTagsCount } from '@/lib'; -import prisma from 'lib/prisma'; - -import type { NextApiRequest, NextApiResponse } from 'next'; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - if (req.method === 'GET') { - try { - if (!req.query) { - return res - .status(404) - .json({ success: false, error: { message: `Tenant not found` } }); - } - const result = getTenantIdSchema.safeParse(req.query); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { tenantId } = result.data; - const tags = await prisma.tag.findMany({ - where: { tenantId: tenantId as string }, - }); - return res.status(200).json(tags); - } - } catch (error) { - if (error instanceof Error) { - return res.status(400).json({ success: false, error: error.message }); - } - } - } else if (req.method === 'POST') { - try { - if (!req.body) { - return res - .status(404) - .json({ success: false, error: { message: `Label not provided` } }); - } - const token = await getToken({ req }); - if (token) { - const result = createTagServerSchema.safeParse(req.body); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { label, tenantId } = result.data; - const tagsCount = await getTagsCount(tenantId); - if (typeof tagsCount !== 'number') { - return res.status(404).json({ - success: false, - error: { message: 'Could not find the number of tags' }, - }); - } - const { plan } = await prisma.tenant.findUnique({ - where: { id: tenantId }, - select: { plan: true }, - }); - if ( - (plan === 'free' && tagsCount >= 3) || - (plan === 'startup' && tagsCount >= 10) - ) { - return res.status(402).json({ - success: false, - error: { message: 'You reached the maximum number of tags.' }, - }); - } - await prisma.tag.create({ - data: { - label, - tenantId, - }, - }); - return res - .status(201) - .json({ success: true, message: 'Tag created successfully' }); - } - } else { - return res - .status(401) - .json({ success: false, error: { message: 'Not signed in' } }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(500).json({ success: false, error: error.message }); - } - } - } else { - return res - .status(405) - .json({ success: false, error: { message: 'Method not allowed' } }); - } -} diff --git a/src/pages/api/tenant/[id].ts b/src/pages/api/tenant/[id].ts deleted file mode 100644 index 62188fe0f..000000000 --- a/src/pages/api/tenant/[id].ts +++ /dev/null @@ -1,167 +0,0 @@ -import { Storage } from '@google-cloud/storage'; -import { getToken } from 'next-auth/jwt'; -import Stripe from 'stripe'; - -import { - deleteTenantServerSchema, - getIdSchema, - updateTenantServerSchema, -} from '@/lib'; -import prisma from 'lib/prisma'; - -import type { NextApiRequest, NextApiResponse } from 'next'; - -const stripe = new Stripe(process.env.STRIPE_SECRET_KEY, { - apiVersion: '2023-10-16', -}); - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - const token = await getToken({ req }); - if (req.method === 'GET') { - try { - if (!req.query) { - return res - .status(404) - .json({ success: false, error: { message: `Tenant not found` } }); - } - if (token) { - const result = getIdSchema.safeParse(req.query); - if (result.success === false) { - const { errors } = result.error; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { id } = result.data; - const tenant = await prisma.tenant.findUnique({ - where: { id: id as string }, - }); - return res.status(200).json(tenant); - } - } else { - return res - .status(401) - .json({ success: false, error: { message: 'Not signed in' } }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(404).json({ success: false, error: error.message }); - } - } - } else if (req.method === 'PUT') { - try { - if (!req.query) { - return res - .status(404) - .json({ success: false, error: { message: `Tenant not found` } }); - } - if (token) { - const result = updateTenantServerSchema.safeParse({ - body: req.body, - query: req.query, - }); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { id } = result.data.query; - const data = result.data.body; - await prisma.tenant.update({ - where: { id }, - data, - }); - return res - .status(201) - .json({ success: true, message: 'Tenant updated successfully' }); - } - } else { - return res - .status(401) - .json({ success: false, error: { message: 'Not signed in' } }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(500).json({ success: false, error: error.message }); - } - } - } else if (req.method === 'DELETE') { - try { - if (!req.query) { - return res - .status(404) - .json({ success: false, message: `User not found` }); - } - if (token) { - const result = deleteTenantServerSchema(req.body.company).safeParse({ - body: req.body, - query: req.query, - }); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { id } = result.data.query; - const { company } = result.data.body; - const { customerId, logo } = await prisma.tenant.findUnique({ - where: { id }, - select: { - customerId: true, - logo: true, - }, - }); - const storage = new Storage({ - projectId: process.env.PROJECT_ID, - credentials: { - client_email: process.env.CLIENT_EMAIL, - private_key: process.env.PRIVATE_KEY.replace(/\\n/g, '\n'), - }, - }); - const bucketName = 'faqmaker'; - const bucket = storage.bucket(bucketName); - if (logo) { - const fileName = logo.replace( - 'https://storage.googleapis.com/faqmaker/', - '', - ); - bucket.file(fileName).delete(); - } - if (!customerId) { - return res.status(404).json({ - success: false, - error: { message: `Customer not found` }, - }); - } - await prisma.tenant.delete({ - where: { id, company }, - }); - await stripe.customers.del(customerId); - return res - .status(200) - .json({ success: true, message: 'Tenant deleted successfully' }); - } - } else { - return res - .status(401) - .json({ success: false, error: { message: 'Not signed in' } }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(500).json({ success: false, error: error.message }); - } - } - } else { - return res - .status(405) - .json({ success: false, error: { message: 'Method not allowed' } }); - } -} diff --git a/src/pages/api/tenant/index.ts b/src/pages/api/tenant/index.ts deleted file mode 100644 index 8b276fe8a..000000000 --- a/src/pages/api/tenant/index.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { Resend } from 'resend'; - -import { RegisterEmailTemplate } from '@/components'; -import { createTenantServerSchema } from '@/lib'; -import prisma from 'lib/prisma'; - -import type { NextApiRequest, NextApiResponse } from 'next'; - -const resend = new Resend(process.env.RESEND_API_KEY); -const { data: domains } = await resend.domains.list(); - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - if (req.method === 'POST') { - try { - if (!req.body) { - return res.status(404).json({ - success: false, - error: { message: `Information not provided` }, - }); - } - const result = createTenantServerSchema.safeParse(req.body); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { company, companyEmail, email, domain } = result.data; - const tenantExists = await prisma.tenant.findUnique({ - where: { email: companyEmail }, - }); - if (tenantExists) { - return res.status(409).json({ - success: false, - error: { - message: 'An account with the same company email already exists', - }, - }); - } - const userExists = await prisma.user.findUnique({ - where: { email }, - }); - if (userExists) { - return res.status(409).json({ - success: false, - error: { message: 'A user with the same email already exists' }, - }); - } - const tenant = await prisma.tenant.create({ - data: { - company, - email: companyEmail, - domain, - }, - }); - if (!tenant) { - return res.status(500).json({ - success: false, - error: { message: 'There was a problem when creating the account' }, - }); - } - const user = await prisma.user.create({ - data: { - email, - role: 'tenant', - tenant: { connect: { id: tenant.id } }, - }, - }); - if (!user) { - return res.status(500).json({ - success: false, - error: { message: 'There was a problem when creating the user' }, - }); - } - await resend.emails.send({ - from: `noreply@${domains.data[0].name}`, - to: [companyEmail], - subject: 'Welcome to FAQMaker', - react: RegisterEmailTemplate(), - }); - return res - .status(201) - .json({ success: true, message: 'Account created successfully' }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(500).json({ success: false, error: error.message }); - } - } - } else { - return res - .status(405) - .json({ success: false, error: { message: 'Method not allowed' } }); - } -} diff --git a/src/pages/api/tenant/logo/[id].ts b/src/pages/api/tenant/logo/[id].ts deleted file mode 100644 index 2b24b0b69..000000000 --- a/src/pages/api/tenant/logo/[id].ts +++ /dev/null @@ -1,82 +0,0 @@ -import { Storage } from '@google-cloud/storage'; -import { getToken } from 'next-auth/jwt'; - -import { updateLogoServerSchema } from '@/lib'; -import { bucketName } from '@/utils'; -import prisma from 'lib/prisma'; - -import type { NextApiRequest, NextApiResponse } from 'next'; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - const token = await getToken({ req }); - if (req.method === 'PUT') { - try { - if (!req.query) { - return res - .status(404) - .json({ success: false, error: { message: `Tenant not found` } }); - } - if (token) { - const result = updateLogoServerSchema.safeParse({ - body: req.body, - query: req.query, - }); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { id } = result.data.query; - const { logoUrl } = result.data.body; - const { logo: oldLogo } = await prisma.tenant.findUnique({ - where: { id }, - select: { - logo: true, - }, - }); - if (oldLogo) { - const storage = new Storage({ - projectId: process.env.PROJECT_ID, - credentials: { - client_email: process.env.CLIENT_EMAIL, - private_key: process.env.PRIVATE_KEY.replace(/\\n/g, '\n'), - }, - }); - const bucket = storage.bucket(bucketName); - const fileName = oldLogo.replace( - 'https://storage.googleapis.com/faqmaker/', - '', - ); - bucket.file(fileName).delete(); - } - await prisma.tenant.update({ - where: { id }, - data: { - logo: logoUrl, - }, - }); - return res - .status(201) - .json({ success: true, message: 'Logo uploaded successfully' }); - } - } else { - return res - .status(401) - .json({ success: false, error: { message: 'Not signed in' } }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(500).json({ success: false, error: error.message }); - } - } - } else { - return res - .status(405) - .json({ success: false, error: { message: 'Method not allowed' } }); - } -} diff --git a/src/pages/api/users/[id].ts b/src/pages/api/users/[id].ts deleted file mode 100644 index d5cf0fc35..000000000 --- a/src/pages/api/users/[id].ts +++ /dev/null @@ -1,131 +0,0 @@ -import { getToken } from 'next-auth/jwt'; - -import { - deleteUserServerSchema, - getIdSchema, - updateUserServerSchema, -} from '@/lib'; -import prisma from 'lib/prisma'; - -import type { NextApiRequest, NextApiResponse } from 'next'; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - const token = await getToken({ req }); - if (req.method === 'GET') { - try { - if (!req.query) { - return res - .status(404) - .json({ success: false, message: `Email not provided` }); - } - if (token) { - const result = getIdSchema.safeParse(req.query); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { id } = result.data; - const user = await prisma.user.findUnique({ - where: { id }, - }); - return res.status(200).json(user); - } - } else { - return res - .status(401) - .json({ success: false, error: { message: 'Not signed in' } }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(404).json({ success: false, error: error.message }); - } - } - } else if (req.method === 'PUT') { - try { - if (!req.query) { - return res - .status(404) - .json({ success: false, message: `User not found` }); - } - if (token) { - const result = updateUserServerSchema.safeParse({ - body: req.body, - query: req.query, - }); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { id } = result.data.query; - const data = result.data.body; - await prisma.user.update({ - where: { id }, - data, - }); - return res - .status(201) - .json({ success: true, message: 'User updated successfully' }); - } - } else { - return res - .status(401) - .json({ success: false, error: { message: 'Not signed in' } }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(500).json({ success: false, error: error.message }); - } - } - } else if (req.method === 'DELETE') { - try { - if (!req.query) { - return res - .status(404) - .json({ success: false, message: `User not found` }); - } - if (token) { - const result = deleteUserServerSchema.safeParse({ - body: req.body, - query: req.query, - }); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { id } = result.data.query; - const { tenantId } = result.data.body; - await prisma.user.delete({ - where: { id, tenantId }, - }); - return res - .status(200) - .json({ success: true, message: 'User deleted successfully' }); - } - } else { - return res - .status(401) - .json({ success: false, error: { message: 'Not signed in' } }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(500).json({ success: false, error: error.message }); - } - } - } else { - return res - .status(405) - .json({ success: false, error: { message: 'Method not allowed' } }); - } -} diff --git a/src/pages/api/users/count.ts b/src/pages/api/users/count.ts deleted file mode 100644 index 3b455016d..000000000 --- a/src/pages/api/users/count.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { getToken } from 'next-auth/jwt'; - -import { getTenantIdSchema } from '@/lib'; -import prisma from 'lib/prisma'; - -import type { NextApiRequest, NextApiResponse } from 'next'; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - const token = await getToken({ req }); - if (req.method === 'GET') { - try { - if (!req.query) { - return res - .status(404) - .json({ success: false, error: { message: `Node not found` } }); - } - if (token) { - const result = getTenantIdSchema.safeParse(req.query); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { tenantId } = result.data; - let users = await prisma.user.count({ - where: { tenantId }, - }); - if (!users) { - users = 0; - } - return res.status(200).json(users); - } - } else { - return res - .status(401) - .json({ success: false, error: { message: 'Not signed in' } }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(404).json({ success: false, error: error.message }); - } - } - } else { - return res - .status(405) - .json({ success: false, error: { message: 'Method not allowed' } }); - } -} diff --git a/src/pages/api/users/index.ts b/src/pages/api/users/index.ts deleted file mode 100644 index 4b78faa44..000000000 --- a/src/pages/api/users/index.ts +++ /dev/null @@ -1,179 +0,0 @@ -import { getToken } from 'next-auth/jwt'; - -import { - createUserServerSchema, - getTenantIdSchema, - getUsersCount, -} from '@/lib'; -import prisma from 'lib/prisma'; - -import type { NextApiRequest, NextApiResponse } from 'next'; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse, -) { - if (req.method === 'GET') { - try { - if (!req.query) { - return res - .status(404) - .json({ success: false, message: `Tenant not found` }); - } - const result = getTenantIdSchema.safeParse(req.query); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { tenantId } = result.data; - const users = await prisma.user.findMany({ - where: { tenantId: tenantId as string }, - }); - return res.status(200).json(users); - } - } catch (error) { - if (error instanceof Error) { - return res.status(404).json({ success: false, error: error.message }); - } - } - } else if (req.method === 'POST') { - try { - if (!req.body) { - return res.status(404).json({ - success: false, - error: { message: `Form data not provided` }, - }); - } - const token = await getToken({ req }); - if (token) { - const result = createUserServerSchema.safeParse(req.body); - if (result.success === false) { - const errors = result.error.formErrors.fieldErrors; - return res.status(422).json({ - success: false, - error: { message: 'Invalid request', errors }, - }); - } else { - const { email, role, newUsersArray, tenantId } = result.data; - if (role) { - const userExists = await prisma.user.findUnique({ - where: { email, tenantId }, - }); - if (userExists) { - return res.status(409).json({ - success: false, - error: { message: 'User already exists' }, - }); - } - const usersCount = await getUsersCount(tenantId); - if (typeof usersCount !== 'number') { - return res.status(404).json({ - success: false, - error: { message: 'Could not find the number of users' }, - }); - } - const { plan } = await prisma.tenant.findUnique({ - where: { id: tenantId }, - select: { plan: true }, - }); - if ( - (plan === 'free' && usersCount >= 5) || - (plan === 'startup' && usersCount >= 100) - ) { - return res.status(402).json({ - success: false, - error: { message: 'You reached the maximum number of users.' }, - }); - } - await prisma.user.create({ - data: { - email, - role, - tenantId, - }, - }); - return res - .status(201) - .json({ message: 'User created successfully' }); - } else { - const errors = []; - for (const element of newUsersArray) { - const userEmail = element; - if (!userEmail) { - errors.push({ - email: userEmail, - message: 'Empty email, skipping user creation', - }); - continue; - } - const userExists = await prisma.user.findUnique({ - where: { email: userEmail, tenantId }, - }); - if (userExists) { - errors.push({ - email: userEmail, - message: 'User already exists', - }); - continue; - } - const usersCount = await getUsersCount(tenantId); - if (!usersCount) { - errors.push({ - email: userEmail, - message: 'Could not find the number of users', - }); - continue; - } - const { plan } = await prisma.tenant.findUnique({ - where: { id: tenantId }, - select: { plan: true }, - }); - if ( - (plan === 'free' && usersCount >= 5) || - (plan === 'startup' && usersCount >= 100) - ) { - errors.push({ - email: userEmail, - message: 'You reached the maximum number of users.', - }); - continue; - } - await prisma.user.create({ - data: { - email: userEmail, - role: 'user', - tenantId, - }, - }); - } - if (errors.length > 0) { - return res.status(409).json({ - success: false, - message: 'Some users could not be created', - errors, - }); - } - return res - .status(201) - .json({ message: 'Users created successfully' }); - } - } - } else { - return res - .status(401) - .json({ success: false, error: { message: 'Not signed in' } }); - } - } catch (error) { - if (error instanceof Error) { - return res.status(500).json({ success: false, error: error.message }); - } - } - } else { - return res - .status(405) - .json({ success: false, error: { message: 'Method not allowed' } }); - } -} diff --git a/src/pages/index.tsx b/src/pages/index.tsx deleted file mode 100644 index fd9043b6f..000000000 --- a/src/pages/index.tsx +++ /dev/null @@ -1,134 +0,0 @@ -import { useEffect, useState } from 'react'; - -import { User } from '@prisma/client'; -import { QueryClient, dehydrate } from '@tanstack/react-query'; -import { GetServerSideProps } from 'next'; -import { useSearchParams } from 'next/navigation'; - -import { Pagination } from '@/components'; -import { - useNodes, - useNodesCount, - useSearchNodes, - useSearchTags, - useTags, -} from '@/hooks'; -import { PageLayout } from '@/layouts'; -import { getMe, getNodes, getNodesCount, getTags, ssrNcHandler } from '@/lib'; -import { List, Search } from '@/modules'; -import { ExtendedNode, UserWithTenant } from '@/types'; -import { OFFSET, QueryKeys, Redirects } from '@/utils'; - -type Props = { - me: UserWithTenant; -}; - -function Home({ me }: Props) { - const search = useSearchParams(); - const [searchQuery, setSearchQuery] = useState( - search.get('search') ?? null, - ); - const [searchTag, setSearchTag] = useState(null); - const [isLoading, setIsLoading] = useState(false); - const [page, setPage] = useState(0); - - let nodes: ExtendedNode[] = []; - let message = 'Ask a question'; - const { - data: initialNodes, - isPending, - isError, - error, - } = useNodes(me.tenantId, page); - const { data: filteredNodes, isLoading: isSearchLoading } = useSearchNodes( - me.tenantId, - searchQuery, - ); - const { data: filteredTags } = useSearchTags(me.tenantId, searchTag); - const { data: nodesCount, isPending: isNodesCountLoading } = useNodesCount( - me.tenantId, - ); - const { data: tags } = useTags(me.tenantId); - - if (searchQuery) { - if (filteredNodes && filteredNodes.length > 0) { - nodes = filteredNodes; - } else { - nodes = []; - message = 'No results'; - } - } else if (searchTag) { - if (filteredTags && filteredTags.length > 0) { - nodes = filteredTags; - } else { - nodes = []; - message = 'No results'; - } - } else { - nodes = initialNodes ?? []; - } - - useEffect(() => { - setIsLoading(isPending || isSearchLoading || isNodesCountLoading); - }, [isPending, isSearchLoading, isNodesCountLoading]); - - return ( - - - - {nodesCount > OFFSET && (nodes.length === OFFSET || page !== 0) && ( - - )} - - ); -} - -export default Home; - -export const getServerSideProps: GetServerSideProps = async ({ req, res }) => { - const callbackMe = async () => await getMe({ req }); - const me = await ssrNcHandler(req, res, callbackMe); - - if (!me) return Redirects.LOGIN; - - const queryClient = new QueryClient(); - await queryClient.prefetchQuery({ - queryKey: [QueryKeys.ME, me.id], - queryFn: () => me, - }); - await queryClient.prefetchQuery({ - queryKey: [QueryKeys.NODES, me.tenantId], - queryFn: () => getNodes(me.tenantId), - }); - await queryClient.prefetchQuery({ - queryKey: [QueryKeys.NODES_COUNT, me.tenantId], - queryFn: () => getNodesCount(me.tenantId), - }); - await queryClient.prefetchQuery({ - queryKey: [QueryKeys.TAGS, me.tenantId], - queryFn: () => getTags(me.tenantId), - }); - - return { - props: { - me: JSON.parse(JSON.stringify(me)), - dehydratedState: JSON.parse(JSON.stringify(dehydrate(queryClient))), - }, - }; -}; diff --git a/src/pages/login.tsx b/src/pages/login.tsx deleted file mode 100644 index 165ff3aae..000000000 --- a/src/pages/login.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import Image from 'next/image'; -import Link from 'next/link'; -import { useRouter } from 'next/router'; -import { signIn } from 'next-auth/react'; - -import googleIcon from '@/assets/google.svg'; -import { Button } from '@/components'; -import { LoginLayout } from '@/layouts'; -import { Routes } from '@/utils'; - -function Login() { - const router = useRouter(); - const error = router.query.error as string; - - return ( - -
-
-

- Login -

-

Use your associated account

-
- - {error && } -

- No client account ?{' '} - - Register - -

-
-
- ); -} - -export default Login; - -const errors = { - Signin: 'Try signing with a different account.', - OAuthSignin: 'Try signing with a different account.', - OAuthCallback: 'Try signing with a different account.', - OAuthCreateAccount: 'Try signing with a different account.', - EmailCreateAccount: 'Try signing with a different account.', - Callback: 'Try signing with a different account.', - OAuthAccountNotLinked: - 'To confirm your identity, sign in with the same account you used originally.', - EmailSignin: 'Check your email address.', - CredentialsSignin: - 'Sign in failed. Check the details you provided are correct.', - AccessDenied: 'User not found.', - default: 'Unable to sign in.', -}; - -type ErrorProps = { - error: string; -}; - -const LoginError = ({ error }: ErrorProps) => { - const errorMessage = error && (errors[error] ?? errors.default); - return
{errorMessage}
; -}; diff --git a/src/pages/profile.tsx b/src/pages/profile.tsx deleted file mode 100644 index 405eb05b3..000000000 --- a/src/pages/profile.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import { User } from '@prisma/client'; -import { QueryClient, dehydrate } from '@tanstack/react-query'; -import { GetServerSideProps } from 'next'; - -import { useUserAnswers, useUserQuestions } from '@/hooks'; -import { PageLayout } from '@/layouts'; -import { getMe, getUserAnswers, getUserQuestions, ssrNcHandler } from '@/lib'; -import { UpdateProfile, UserAnswers, UserQuestions } from '@/modules'; -import { UserWithTenant } from '@/types'; -import { QueryKeys, Redirects } from '@/utils'; - -type Props = { - me: UserWithTenant; -}; - -function Profile({ me }: Props) { - const { data: questions, isPending: isQuestionsLoading } = useUserQuestions( - me.id, - ); - const { data: answers, isPending: isAnswersLoading } = useUserAnswers(me.id); - - const sections = [ - { component: }, - { - component: ( - - ), - }, - { component: }, - ]; - - return ( - -
- {sections.map((section, index) => ( -
{section.component}
- ))} -
-
- ); -} - -export default Profile; - -const Section = ({ children }) => ( -
- {children} -
-); - -export const getServerSideProps: GetServerSideProps = async ({ req, res }) => { - const callbackMe = async () => await getMe({ req }); - const me = await ssrNcHandler(req, res, callbackMe); - - if (!me) return Redirects.LOGIN; - - const queryClient = new QueryClient(); - await queryClient.prefetchQuery({ - queryKey: [QueryKeys.ME, me.id], - queryFn: () => me, - }); - await queryClient.prefetchQuery({ - queryKey: [QueryKeys.QUESTIONS, me.id], - queryFn: () => getUserQuestions(me.id), - }); - await queryClient.prefetchQuery({ - queryKey: [QueryKeys.ANSWERS, me.id], - queryFn: () => getUserAnswers(me.id), - }); - - return { - props: { - me: JSON.parse(JSON.stringify(me)), - dehydratedState: JSON.parse(JSON.stringify(dehydrate(queryClient))), - }, - }; -}; diff --git a/src/pages/question/[id].tsx b/src/pages/question/[id].tsx deleted file mode 100644 index d69a9c9a2..000000000 --- a/src/pages/question/[id].tsx +++ /dev/null @@ -1,214 +0,0 @@ -import { User } from '@prisma/client'; -import { QueryClient, dehydrate } from '@tanstack/react-query'; -import { HelpCircle, LinkIcon, PenSquare } from 'lucide-react'; -import { GetServerSideProps } from 'next'; -import dynamic from 'next/dynamic'; -import Link from 'next/link'; -import { useRouter } from 'next/router'; - -import { - BackButton, - Badge, - DropdownMenu, - DropdownMenuContent, - DropdownMenuItem, - DropdownMenuTrigger, - Loader, - Tooltip, - TooltipContent, - TooltipTrigger, -} from '@/components'; -import { useNode } from '@/hooks'; -import { PageLayout } from '@/layouts'; -import { getMe, getNode, ssrNcHandler } from '@/lib'; -import { UserWithTenant } from '@/types'; -import { QueryKeys, Redirects, Routes, dateOptions } from '@/utils'; -const MarkdownPreview = dynamic(() => import('@uiw/react-markdown-preview'), { - ssr: false, -}); - -type Props = { - me: UserWithTenant; - id: string; -}; - -function QuestionPage({ me, id }: Props) { - const { data: node, isPending } = useNode(me.tenantId, id as string); - const { asPath } = useRouter(); - - return ( - - {isPending ? ( - - ) : ( -
-
- - - - Edit - - - - - - Question - - - - - - Answer - - - - -
-
-
    - {node.tags.map((tag) => ( -
  • - - {tag.label} - -
  • - ))} -
-
-

{node.question.text}

- - - - - Copy url - -
-
- {node.answer ? ( - - ) : ( -

No answer

- )} -
-
-
-

- Asked by {node.question.user.name} -

-

- Asked on{' '} - - {new Date(node.question.createdAt).toLocaleDateString( - undefined, - dateOptions, - )} - -

-

- Updated on{' '} - - {new Date(node.question.updatedAt).toLocaleDateString( - undefined, - dateOptions, - )} - -

-
- {node.answer && ( -
-

- Answered by {node.answer.user.name} -

-

- Answered on{' '} - - {new Date(node.answer.createdAt).toLocaleDateString( - undefined, - dateOptions, - )} - -

-

- Updated on{' '} - - {new Date(node.answer.updatedAt).toLocaleDateString( - undefined, - dateOptions, - )} - -

-
- )} -
-
-
- )} -
- ); -} - -export default QuestionPage; - -export const getServerSideProps: GetServerSideProps = async ({ - req, - res, - query, -}) => { - const { id } = query; - const callbackMe = async () => await getMe({ req }); - const me = await ssrNcHandler(req, res, callbackMe); - - if (!me) return Redirects.LOGIN; - - const queryClient = new QueryClient(); - await queryClient.prefetchQuery({ - queryKey: [QueryKeys.ME, me.id], - queryFn: () => me, - }); - await queryClient.prefetchQuery({ - queryKey: [QueryKeys.NODE, me.tenantId, id], - queryFn: () => getNode(me.tenantId, id as string), - }); - - return { - props: { - id, - me: JSON.parse(JSON.stringify(me)), - dehydratedState: JSON.parse(JSON.stringify(dehydrate(queryClient))), - }, - }; -}; diff --git a/src/pages/question/answer.tsx b/src/pages/question/answer.tsx deleted file mode 100644 index df47db52f..000000000 --- a/src/pages/question/answer.tsx +++ /dev/null @@ -1,166 +0,0 @@ -import { useEffect, useState } from 'react'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { User } from '@prisma/client'; -import { QueryClient, dehydrate } from '@tanstack/react-query'; -import { ExternalLink } from 'lucide-react'; -import { GetServerSideProps } from 'next'; -import Link from 'next/link'; -import { useRouter } from 'next/router'; -import { Controller, SubmitHandler, useForm } from 'react-hook-form'; -import { z } from 'zod'; - -import { BackButton, Button, Editor, Loader } from '@/components'; -import { useCreateAnswer, useNode, useUpdateAnswer } from '@/hooks'; -import { PageLayout } from '@/layouts'; -import { answerClientSchema, getMe, getNode, ssrNcHandler } from '@/lib'; -import { UserWithTenant } from '@/types'; -import { QueryKeys, Redirects } from '@/utils'; - -type Props = { - me: UserWithTenant; - id: string; -}; - -type Schema = z.infer; - -function Answer({ me, id }: Props) { - const [disabled, setDisabled] = useState(true); - - const { data: node, isPending } = useNode(me.tenantId, id as string); - - const { - handleSubmit, - control, - formState: { isSubmitting, errors, isValid, isDirty }, - } = useForm({ - resolver: zodResolver(answerClientSchema), - mode: 'onBlur', - defaultValues: { - text: node?.answer?.text ?? '', - }, - }); - - const router = useRouter(); - - const { mutate: createAnswer } = useCreateAnswer( - id, - me.id, - me.tenantId, - router, - ); - - const { mutate: updateAnswer } = useUpdateAnswer( - me.id, - me.tenantId, - router, - node?.answer?.id, - ); - - const onSubmit: SubmitHandler = (values) => { - if (node?.answer) { - updateAnswer(values); - } else { - createAnswer(values); - } - }; - - useEffect(() => { - setDisabled(isSubmitting || !isValid || !isDirty); - }, [isSubmitting, isValid, isDirty]); - - return ( - - {isPending ? ( - - ) : ( -
- -
-

- {node.answer ? 'Edit the answer' : 'Answer'} -

- -
-

- Question: {node.question.text} -

- ( - - )} - /> - {errors.text && ( -

{errors.text.message}

- )} - - Markdown guide - - -
- - -
-
- )} -
- ); -} - -export default Answer; - -export const getServerSideProps: GetServerSideProps = async ({ - req, - res, - query, -}) => { - const { id } = query; - const callbackMe = async () => await getMe({ req }); - const me = await ssrNcHandler(req, res, callbackMe); - - if (!me) return Redirects.LOGIN; - - const queryClient = new QueryClient(); - await queryClient.prefetchQuery({ - queryKey: [QueryKeys.ME, me.id], - queryFn: () => me, - }); - await queryClient.prefetchQuery({ - queryKey: [QueryKeys.NODE, me.tenantId, id], - queryFn: () => getNode(me.tenantId, id as string), - }); - - return { - props: { - id, - me: JSON.parse(JSON.stringify(me)), - dehydratedState: JSON.parse(JSON.stringify(dehydrate(queryClient))), - }, - }; -}; diff --git a/src/pages/question/edit.tsx b/src/pages/question/edit.tsx deleted file mode 100644 index 3f096bd79..000000000 --- a/src/pages/question/edit.tsx +++ /dev/null @@ -1,178 +0,0 @@ -import { useEffect, useState } from 'react'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { User } from '@prisma/client'; -import { QueryClient, dehydrate } from '@tanstack/react-query'; -import { HelpCircle } from 'lucide-react'; -import { GetServerSideProps } from 'next'; -import { useRouter } from 'next/router'; -import { SubmitHandler, useForm } from 'react-hook-form'; -import { z } from 'zod'; - -import { BackButton, Button, Field, Input, Loader } from '@/components'; -import { useMediaQuery, useNode, useTags, useUpdateNode } from '@/hooks'; -import { PageLayout } from '@/layouts'; -import { - getMe, - getNode, - getTags, - questionClientSchema, - ssrNcHandler, -} from '@/lib'; -import { TagsList } from '@/modules'; -import { UserWithTenant } from '@/types'; -import { QueryKeys, Redirects, arraysAreEqual } from '@/utils'; - -type Props = { - me: UserWithTenant; - id: string; -}; - -type Schema = z.infer; - -function Edit({ me, id }: Props) { - const [disabled, setDisabled] = useState(true); - const [selectedTags, setSelectedTags] = useState([]); - const isDesktop = useMediaQuery('(min-width: 640px)'); - - const { data: tags, isPending: isTagsLoading } = useTags(me.tenantId); - const { data: node, isPending } = useNode(me.tenantId, id as string); - - const { - register, - handleSubmit, - formState: { isSubmitting, isDirty, isValid, errors }, - } = useForm({ - resolver: zodResolver(questionClientSchema), - mode: 'onBlur', - defaultValues: { - text: node?.question.text, - }, - }); - - const router = useRouter(); - - const { mutate, isError, error } = useUpdateNode( - id, - me.tenantId, - me.id, - selectedTags, - router, - node?.question.id, - ); - - const onSubmit: SubmitHandler = (values) => { - mutate(values); - }; - - const tagsId = node?.tags?.map((tag) => tag.id); - - useEffect(() => { - setSelectedTags(node?.tags?.map((tag) => tag.id)); - setDisabled(isSubmitting || !isValid || !isDirty); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [isSubmitting, isValid, isDirty]); - - return ( - - {isPending ? ( - - ) : ( -
- -
-
-
-
- - Edit the question - -
- - } - type="text" - id="question" - /> - -
- - - -
-
- )} -
- ); -} - -export default Edit; - -export const getServerSideProps: GetServerSideProps = async ({ - req, - res, - query, -}) => { - const { id } = query; - const callbackMe = async () => await getMe({ req }); - const me = await ssrNcHandler(req, res, callbackMe); - - if (!me) return Redirects.LOGIN; - - const queryClient = new QueryClient(); - await queryClient.prefetchQuery({ - queryKey: [QueryKeys.ME, me.id], - queryFn: () => me, - }); - await queryClient.prefetchQuery({ - queryKey: [QueryKeys.NODE, me.tenantId, id], - queryFn: () => getNode(me.tenantId, id as string), - }); - await queryClient.prefetchQuery({ - queryKey: [QueryKeys.TAGS, me.tenantId], - queryFn: () => getTags(me.tenantId), - }); - - return { - props: { - id, - me: JSON.parse(JSON.stringify(me)), - dehydratedState: JSON.parse(JSON.stringify(dehydrate(queryClient))), - }, - }; -}; diff --git a/src/pages/question/new.tsx b/src/pages/question/new.tsx deleted file mode 100644 index 12160c866..000000000 --- a/src/pages/question/new.tsx +++ /dev/null @@ -1,175 +0,0 @@ -import { useEffect, useState } from 'react'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { User } from '@prisma/client'; -import { dehydrate, QueryClient } from '@tanstack/react-query'; -import { HelpCircle, MoveRight } from 'lucide-react'; -import { GetServerSideProps } from 'next'; -import { useRouter } from 'next/router'; -import { SubmitHandler, useForm } from 'react-hook-form'; -import { z } from 'zod'; - -import { BackButton, Button, Field, Input } from '@/components'; -import { useCreateNode, useIntegration, useMediaQuery, useTags } from '@/hooks'; -import { PageLayout } from '@/layouts'; -import { - getIntegration, - getMe, - getTags, - questionClientSchema, - ssrNcHandler, -} from '@/lib'; -import { TagsList } from '@/modules'; -import { UserWithTenant } from '@/types'; -import { QueryKeys, Redirects } from '@/utils'; - -type Props = { - me: UserWithTenant; -}; - -type Schema = z.infer; - -function New({ me }: Props) { - const [disabled, setDisabled] = useState(true); - const [selectedTags, setSelectedTags] = useState([]); - const isDesktop = useMediaQuery('(min-width: 640px)'); - const withAnswer = true; - - const { - register, - handleSubmit, - formState: { isSubmitting, errors, isValid }, - } = useForm({ - resolver: zodResolver(questionClientSchema), - mode: 'onBlur', - defaultValues: { - text: '', - }, - }); - const router = useRouter(); - - const { data: tags, isPending } = useTags(me.tenantId); - const { data: integrations } = useIntegration(me.tenantId); - const { mutate } = useCreateNode(me, router, selectedTags, integrations); - - const onSubmit: SubmitHandler = (values) => { - mutate(values); - }; - - const onSubmitWithAnswer: SubmitHandler = (data) => { - const values = { ...data, withAnswer }; - mutate(values); - }; - - useEffect(() => { - setDisabled(isSubmitting || !isValid); - }, [isSubmitting, isValid]); - - return ( - -
- -
-
-
-
- - Ask a question - -
- - } - type="text" - id="question" - placeholder="New question" - /> - - -
-
- - -
-
-
-

- {disabled - ? 'The question must have 3 or more letters' - : "You're good to post"} -

-
-
-
-
- ); -} - -export default New; - -export const getServerSideProps: GetServerSideProps = async ({ req, res }) => { - const callbackMe = async () => await getMe({ req }); - const me = await ssrNcHandler(req, res, callbackMe); - - if (!me) return Redirects.LOGIN; - - const queryClient = new QueryClient(); - await queryClient.prefetchQuery({ - queryKey: [QueryKeys.ME, me.id], - queryFn: () => me, - }); - await queryClient.prefetchQuery({ - queryKey: [QueryKeys.TAGS, me.tenantId], - queryFn: () => getTags(me.tenantId), - }); - await queryClient.prefetchQuery({ - queryKey: [QueryKeys.INTEGRATION, me.tenantId], - queryFn: () => getIntegration(me.tenantId), - }); - - return { - props: { - me: JSON.parse(JSON.stringify(me)), - dehydratedState: JSON.parse(JSON.stringify(dehydrate(queryClient))), - }, - }; -}; diff --git a/src/pages/register/confirm.tsx b/src/pages/register/confirm.tsx deleted file mode 100644 index 89398db66..000000000 --- a/src/pages/register/confirm.tsx +++ /dev/null @@ -1,137 +0,0 @@ -import { useEffect, useState } from 'react'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { useAtom } from 'jotai'; -import { MoveLeft } from 'lucide-react'; -import { useRouter } from 'next/router'; -import { SubmitHandler, useForm } from 'react-hook-form'; -import { z } from 'zod'; - -import { Button } from '@/components'; -import { useCreateCustomer, useCreateTenant } from '@/hooks'; -import { AuthLayout } from '@/layouts'; -import { registerCompleteClientSchema } from '@/lib'; -import { registerAtom } from '@/store'; -import { Routes } from '@/utils'; - -type Schema = z.infer; - -function Confirm() { - const [disabled, setDisabled] = useState(true); - const [state, setState] = useAtom(registerAtom); - const router = useRouter(); - const { - handleSubmit, - formState: { isSubmitting, isValid }, - } = useForm({ - resolver: zodResolver(registerCompleteClientSchema), - defaultValues: state, - }); - - const { - data: customerId, - mutateAsync: mutateCustomer, - isSuccess: customerIsSuccess, - } = useCreateCustomer(); - const { mutateAsync: mutateTenant, isSuccess: tenantIsSuccess } = - useCreateTenant(); - - const onSubmit: SubmitHandler = async (values) => { - try { - await mutateTenant(values); - await mutateCustomer(values); - } catch (error) { - console.error(`Something went wrong: ${error}`); - } - }; - - useEffect(() => { - if (tenantIsSuccess && customerIsSuccess) { - setState({ ...state, customerId }); - router.push(Routes.SITE.REGISTER.PLAN); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [tenantIsSuccess, customerIsSuccess, customerId]); - - useEffect(() => { - setDisabled(!isValid || isSubmitting); - }, [isValid, isSubmitting]); - - return ( - -
-
-
- - Confirm - -

Confirm the information

-
-
-

Company

-
-

Name

-

{state.company}

-
-
-

Email

-

{state.companyEmail}

-
-
-

Domain

-

- {state.domain || 'No domain'} -

-
-
-
-

User

-
-

Email

-

{state.email}

-
-
-
-
- - -
-
-
- ); -} - -export default Confirm; diff --git a/src/pages/register/plan.tsx b/src/pages/register/plan.tsx deleted file mode 100644 index 46236467f..000000000 --- a/src/pages/register/plan.tsx +++ /dev/null @@ -1,178 +0,0 @@ -import { useEffect, useMemo } from 'react'; - -import { useAtom } from 'jotai'; -import { RESET } from 'jotai/utils'; -import { Check, Minus, MoveRight, Wallet } from 'lucide-react'; -import { useRouter } from 'next/router'; -import { useForm } from 'react-hook-form'; - -import { Button, errorToast, successToast } from '@/components'; -import { useCreateCheckout } from '@/hooks'; -import { AuthLayout } from '@/layouts'; -import { registerAtom } from '@/store'; -import { IPlan } from '@/types'; -import { Routes } from '@/utils'; - -function Plan() { - const [state, setState] = useAtom(registerAtom); - - const { handleSubmit } = useForm(); - const router = useRouter(); - const { status } = router.query; - - const { mutate } = useCreateCheckout(state.customerId); - - const saveData = (value: IPlan['value'], lookup_key: string) => { - if (value === 'free') { - setState(RESET); - router.push(Routes.SITE.LOGIN); - } else { - return mutate(lookup_key); - } - }; - - const plans: IPlan[] = useMemo( - () => [ - { - label: 'Free', - value: 'free', - price: 0, - lookup_key: 'free_monthly', - message: 'Perfect to try out', - benefits: ['5 users', '3 tags', 'Unlimited questions'], - drawbacks: ['Slack integration'], - }, - { - label: 'Startup', - value: 'startup', - price: 19, - lookup_key: 'startup_monthly', - message: 'Perfect for startups', - benefits: [ - '100 users', - '10 tags', - 'Unlimited questions', - 'Slack integration', - ], - }, - { - label: 'Enterprise', - value: 'enterprise', - price: 29, - lookup_key: 'enterprise_monthly', - message: 'Perfect for big companies', - benefits: [ - 'Unlimited users', - 'Unlimited tags', - 'Unlimited questions', - 'Slack integration', - ], - }, - ], - [], - ); - - useEffect(() => { - if (status === 'success') { - successToast('Payment successful'); - setState(RESET); - router.push(Routes.SITE.LOGIN); - } else if (status === 'cancel') { - errorToast('Payment unsuccessful'); - } - - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [status, router.isReady]); - - return ( - -
-
-

- Plan -

-

Choose the right plan for you

-
-
- {plans.map((plan, index) => ( -
- saveData(plan.value, plan.lookup_key), - )} - key={index} - className="w-full overflow-hidden rounded-md bg-grayA-3 p-4 text-center text-gray-12 shadow-sm shadow-tealA-7 transition-all duration-300 hover:shadow-tealA-8" - > -
-

- {plan.label} -

-

- ${plan.price}/mo -

-
-
-

- {plan.message} -

-
-
    - {plan.benefits.map((benefit, index) => ( -
  • - -

    {benefit}

    -
  • - ))} - {plan.drawbacks?.map((drawback, index) => ( -
  • - -

    {drawback}

    -
  • - ))} -
-
- {plan.value === 'free' ? ( - - ) : ( - - )} -
-
-
- ))} -
-
-
- ); -} - -export default Plan; diff --git a/src/pages/register/user.tsx b/src/pages/register/user.tsx deleted file mode 100644 index 9b3adfd81..000000000 --- a/src/pages/register/user.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import { zodResolver } from '@hookform/resolvers/zod'; -import { useAtom } from 'jotai'; -import { MoveLeft, MoveRight } from 'lucide-react'; -import Link from 'next/link'; -import { useRouter } from 'next/router'; -import { SubmitHandler, useForm } from 'react-hook-form'; -import { z } from 'zod'; - -import { Button, Field, Input } from '@/components'; -import { AuthLayout } from '@/layouts'; -import { registerUserClientSchema } from '@/lib'; -import { registerAtom } from '@/store'; -import { Routes } from '@/utils'; - -type Schema = z.infer; - -function Register() { - const [state, setState] = useAtom(registerAtom); - const router = useRouter(); - - const { - register, - handleSubmit, - formState: { isValid, errors }, - } = useForm({ - resolver: zodResolver(registerUserClientSchema), - mode: 'onBlur', - defaultValues: state, - }); - - const saveData: SubmitHandler = (values) => { - setState({ ...state, ...values }); - router.push(Routes.SITE.REGISTER.CONFIRM); - }; - - return ( - -
-
-
- - User - -

Your connection mail

-
- - - -
-
- - -
-

- Already have an account ?{' '} - - Login - -

-
-
- ); -} - -export default Register; diff --git a/src/pages/settings.tsx b/src/pages/settings.tsx deleted file mode 100644 index cf2147bd7..000000000 --- a/src/pages/settings.tsx +++ /dev/null @@ -1,146 +0,0 @@ -import { useMemo } from 'react'; - -import { User } from '@prisma/client'; -import { QueryClient, dehydrate } from '@tanstack/react-query'; -import { GetServerSideProps } from 'next'; - -import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components'; -import { useTenant } from '@/hooks'; -import { PageLayout } from '@/layouts'; -import { - getIntegration, - getMe, - getNodesCount, - getTags, - getTenant, - getUsersCount, - ssrNcHandler, -} from '@/lib'; -import { General, Payment, Tags, Users } from '@/modules'; -import { UserWithTenant } from '@/types'; -import { QueryKeys, Redirects } from '@/utils'; - -type Props = { - me: UserWithTenant; -}; - -function Settings({ me }: Props) { - const { data: tenant, isPending } = useTenant(me.tenantId); - - const tabs = useMemo( - () => [ - { - value: 'general', - label: 'General', - }, - { - value: 'tags', - label: 'Tags', - }, - { - value: 'users', - label: 'Users', - }, - ], - [], - ); - - return ( - -
-

- Settings -

- - - {tabs.map((tab, index) => ( - - {tab.label} - - ))} - {me.role === 'tenant' && ( - - Payment - - )} - - - - - - - - - - - - - - -
-
- ); -} - -export default Settings; - -export const getServerSideProps: GetServerSideProps = async ({ req, res }) => { - const callbackMe = async () => await getMe({ req }); - const me = await ssrNcHandler(req, res, callbackMe); - - if (!me) return Redirects.LOGIN; - - if (me.role === 'user') return Redirects.HOME; - - const queryClient = new QueryClient(); - await queryClient.prefetchQuery({ - queryKey: [QueryKeys.ME, me.id], - queryFn: () => me, - }); - await queryClient.prefetchQuery({ - queryKey: [QueryKeys.NODES_COUNT, me.tenantId], - queryFn: () => getNodesCount(me.tenantId), - }); - await queryClient.prefetchQuery({ - queryKey: [QueryKeys.USERS_COUNT, me.tenantId], - queryFn: () => getUsersCount(me.tenantId), - }); - await queryClient.prefetchQuery({ - queryKey: [QueryKeys.TENANT, me.tenantId], - queryFn: () => getTenant(me.tenantId), - }); - await queryClient.prefetchQuery({ - queryKey: [QueryKeys.INTEGRATION, me.tenantId], - queryFn: () => getIntegration(me.tenantId), - }); - await queryClient.prefetchQuery({ - queryKey: [QueryKeys.TAGS, me.tenantId], - queryFn: () => getTags(me.tenantId), - }); - - return { - props: { - me: JSON.parse(JSON.stringify(me)), - dehydratedState: JSON.parse(JSON.stringify(dehydrate(queryClient))), - }, - }; -}; diff --git a/src/store/index.ts b/src/store/index.ts index 1052851d8..44967bc3c 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -1,2 +1,15 @@ -export * from './register'; -export * from './theme'; +import { atom } from 'jotai'; +import { atomWithStorage } from 'jotai/utils'; + +import { RegisterInfo, Me } from '@/types/models/user'; + +export const registerAtom = atomWithStorage('register-data', { + company: '', + companyEmail: '', + email: '', + plan: 'free', +}); + +export const themeAtom = atomWithStorage('theme', 'neutral'); + +export const userAtom = atom(null); diff --git a/src/store/register.ts b/src/store/register.ts deleted file mode 100644 index 9841a6a24..000000000 --- a/src/store/register.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { atomWithStorage } from 'jotai/utils'; - -import { RegisterInfo } from '@/types'; - -export const registerAtom = atomWithStorage('register-data', { - company: '', - companyEmail: '', - domain: null, - email: '', - plan: 'free', -}); diff --git a/src/store/theme.ts b/src/store/theme.ts deleted file mode 100644 index c01b6f492..000000000 --- a/src/store/theme.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { atomWithStorage } from 'jotai/utils'; - -export const themeAtom = atomWithStorage('theme', 'neutral'); diff --git a/src/styles/globals.css b/src/styles/globals.css index cb152bd9a..1722eb17a 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -1,21 +1,26 @@ +@import '@radix-ui/colors/teal.css'; +@import '@radix-ui/colors/teal-alpha.css'; +@import '@radix-ui/colors/teal-dark.css'; +@import '@radix-ui/colors/teal-dark-alpha.css'; + +@import '@radix-ui/colors/gray.css'; +@import '@radix-ui/colors/gray-alpha.css'; +@import '@radix-ui/colors/gray-dark.css'; +@import '@radix-ui/colors/gray-dark-alpha.css'; + +@import '@radix-ui/colors/red.css'; +@import '@radix-ui/colors/red-alpha.css'; +@import '@radix-ui/colors/red-dark.css'; +@import '@radix-ui/colors/red-dark-alpha.css'; + @tailwind base; @tailwind components; @tailwind utilities; -@import '@radix-ui/colors/teal'; -@import '@radix-ui/colors/teal-alpha'; -@import '@radix-ui/colors/teal-dark'; -@import '@radix-ui/colors/teal-dark-alpha'; -@import '@radix-ui/colors/gray'; -@import '@radix-ui/colors/gray-alpha'; -@import '@radix-ui/colors/gray-dark'; -@import '@radix-ui/colors/gray-dark-alpha'; - -@import '@radix-ui/colors/red'; -@import '@radix-ui/colors/red-alpha'; -@import '@radix-ui/colors/red-dark'; -@import '@radix-ui/colors/red-dark-alpha'; +* { + @apply transition-colors duration-300 ease-in-out; +} td, th { diff --git a/src/types/environment.d.ts b/src/types/environment.d.ts index 222ea8905..cb4ef7394 100644 --- a/src/types/environment.d.ts +++ b/src/types/environment.d.ts @@ -7,8 +7,8 @@ declare global { NEXTAUTH_URL: string; NEXTAUTH_SECRET: string; - GOOGLE_CLIENT_ID: string; - GOOGLE_CLIENT_SECRET: string; + AUTH_GOOGLE_ID: string; + AUTH_GOOGLE_SECRET: string; TEST_EMAIL: string; TEST_PASSWORD: string; @@ -17,14 +17,18 @@ declare global { STRIPE_SECRET_KEY: string; STRIPE_WEBHOOK_SECRET: string; - SENTRY_AUTH_TOKEN: string; - SENTRY_IGNORE_API_RESOLUTION_ERROR: number; - PROJECT_ID: string; CLIENT_EMAIL: string; PRIVATE_KEY: string; RESEND_API_KEY: string; + + AWS_S3_BUCKET: string; + AWS_S3_REGION: string; + AWS_S3_ACCESS_KEY_ID: string; + AWS_S3_SECRET_ACCESS_KEY: string; + NEXT_PUBLIC_AWS_CLOUDFRONT_URL: string; + NEXT_PUBLIC_AWS_CLOUDFRONT_URL: string; } } } diff --git a/src/types/global.ts b/src/types/global.ts index 552e16ae0..31a2c4827 100644 --- a/src/types/global.ts +++ b/src/types/global.ts @@ -1,8 +1,7 @@ -import { IncomingMessage } from 'http'; +import type { ReactElement } from 'react'; -import { ReactElement } from 'react'; - -import { NextApiRequestCookies } from 'next/dist/server/api-utils'; +import type { IncomingMessage } from 'http'; +import type { NextApiRequestCookies } from 'next/dist/server/api-utils'; export type FallbackType = 'screen' | 'page' | 'item'; export type QueryParamsType = Partial<{ @@ -18,22 +17,26 @@ interface IFields { icon?: ReactElement; error?: string; info?: string; + limit?: number; } export interface IUserCreateFields extends IFields { value: 'email'; } +export interface IUserLoginFields extends IFields { + value: 'email' | 'password'; +} export interface IUserUpdateFields extends IFields { value: 'name' | 'email'; } export interface ITenantCreateFields extends IFields { - value: 'company' | 'companyEmail' | 'domain'; + value: 'company' | 'companyEmail'; } export interface ITenantUpdateFields extends IFields { - value: 'company' | 'email' | 'domain'; + value: 'company' | 'email'; } export interface IIntegrations extends IFields { diff --git a/src/types/index.ts b/src/types/index.ts deleted file mode 100644 index ace30e8f1..000000000 --- a/src/types/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './models'; -export * from './global'; diff --git a/src/types/models/index.ts b/src/types/models/index.ts deleted file mode 100644 index bde8f26c7..000000000 --- a/src/types/models/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './node'; -export * from './user'; diff --git a/src/types/models/node.ts b/src/types/models/node.ts index c38da9871..574b24c3e 100644 --- a/src/types/models/node.ts +++ b/src/types/models/node.ts @@ -1,4 +1,11 @@ -import { Answer, Node, Question, Tag, User } from '@prisma/client'; +import type { + Answer, + Favorite, + Node, + Question, + Tag, + User, +} from '@prisma/client'; type ExtendedQuestion = Question & { user: User; @@ -13,3 +20,27 @@ export type ExtendedNode = Node & { answer: ExtendedAnswer; tags: Tag[]; }; + +export type NodeWithQuestionAndAnswer = Node & { + answer: { + text: string; + updatedAt: Date; + }; + question: { + id: string; + slug: string; + text: string; + }; +}; + +export type QuestionWithNodeId = Question & { + node: { + id: string; + }; +}; + +export type ExtendedFavorites = Favorite & { + node: Node & { + question: Question; + }; +}; diff --git a/src/types/models/user.ts b/src/types/models/user.ts index 74da05abe..c9b1a1f38 100644 --- a/src/types/models/user.ts +++ b/src/types/models/user.ts @@ -1,13 +1,15 @@ -import { Tenant, User } from '@prisma/client'; +import type { User } from '@prisma/client'; -export type UserWithTenant = User & { - tenant: Tenant; +export type Me = User & { + tenant: { + logo: string; + company: string; + }; }; export type RegisterInfo = { company: string; companyEmail: string; - domain?: string | null; email: string; customerId?: string; plan: 'free' | 'startup' | 'enterprise'; diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 32cbbf348..172a0f3a9 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -7,3 +7,6 @@ export const ACCEPTED_IMAGE_TYPES = [ 'image/webp', 'image/svg', ]; +export const ROLE = ['user', 'admin', 'tenant'] as const; +export const PLAN = ['free', 'startup', 'enterprise'] as const; +export const STRIPE_VERSION = '2024-09-30.acacia'; diff --git a/src/utils/dateFormat.ts b/src/utils/date.ts similarity index 100% rename from src/utils/dateFormat.ts rename to src/utils/date.ts diff --git a/src/utils/arraysEqual.ts b/src/utils/functions.ts similarity index 71% rename from src/utils/arraysEqual.ts rename to src/utils/functions.ts index 10b94017f..6e804231c 100644 --- a/src/utils/arraysEqual.ts +++ b/src/utils/functions.ts @@ -1,3 +1,4 @@ +/* eslint-disable-next-line @typescript-eslint/no-explicit-any*/ export const arraysAreEqual = (array1: any[], array2: any[]) => array1.length === array2.length && array1.every((value, index) => value === array2[index]); diff --git a/src/utils/gcp.ts b/src/utils/gcp.ts deleted file mode 100644 index acba35856..000000000 --- a/src/utils/gcp.ts +++ /dev/null @@ -1 +0,0 @@ -export const bucketName = 'faqmaker'; diff --git a/src/utils/index.ts b/src/utils/index.ts deleted file mode 100644 index 5e91f4bcf..000000000 --- a/src/utils/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export * from './arraysEqual'; -export * from './cn'; -export * from './constants'; -export * from './dateFormat'; -export * from './gcp'; -export * from './keys'; -export * from './prisma'; -export * from './routing'; -export * from './stripe'; diff --git a/src/utils/keys.ts b/src/utils/keys.ts deleted file mode 100644 index 0a5a0e9a6..000000000 --- a/src/utils/keys.ts +++ /dev/null @@ -1,15 +0,0 @@ -export const QueryKeys = { - NODES: 'nodes', - NODES_COUNT: 'nodes_count', - NODE: 'node', - QUESTIONS: 'questions', - ANSWERS: 'answers', - ME: 'me,', - USERS: 'users', - USERS_COUNT: 'users_count', - USER: 'user', - TAGS: 'tags', - TENANT: 'tenant', - SEARCH: 'search', - INTEGRATION: 'integration', -} as const; diff --git a/src/utils/limits.ts b/src/utils/limits.ts new file mode 100644 index 000000000..0c0c756bc --- /dev/null +++ b/src/utils/limits.ts @@ -0,0 +1,8 @@ +export const Limits = { + QUESTION: 100, + ANSWER: 1000, + COMPANY: 500, + EMAIL: 100, + NAME: 100, + TAG: 50, +} as const; diff --git a/src/utils/prisma.ts b/src/utils/models.ts similarity index 53% rename from src/utils/prisma.ts rename to src/utils/models.ts index 275119017..1791d3bfc 100644 --- a/src/utils/prisma.ts +++ b/src/utils/models.ts @@ -1,32 +1,4 @@ export const nodeModel = { - question: { - select: { - id: true, - text: true, - slug: true, - user: { - select: { - name: true, - }, - }, - }, - }, - answer: { - select: { - id: true, - text: true, - updatedAt: true, - user: { - select: { - name: true, - }, - }, - }, - }, - tags: true, -}; - -export const nodeModelWithDate = { question: { select: { createdAt: true, diff --git a/src/utils/routing.ts b/src/utils/routing.ts index 75f72fbb3..5e624553f 100644 --- a/src/utils/routing.ts +++ b/src/utils/routing.ts @@ -6,6 +6,7 @@ export const Routes = { PROFILE: '/profile', ANSWER: '/question/answer', QUESTION: { + INDEX: '/question', NEW: '/question/new', EDIT: '/question/edit', }, @@ -15,63 +16,28 @@ export const Routes = { CONFIRM: '/register/confirm', PLAN: '/register/plan', }, - _500: '/500', }, API: { - USERS: { - INDEX: '/api/users', - COUNT: '/api/users/count', - }, - NODES: { - INDEX: '/api/nodes', - COUNT: '/api/nodes/count', - }, - CHECKOUT: '/api/stripe/checkout', - COLORS: '/api/colors', - CUSTOMER: '/api/stripe/customer', BILLING: '/api/stripe/billing', - ANSWERS: '/api/answers', - QUESTIONS: '/api/questions', - SEARCH: { - INDEX: '/api/search', - TAGS: '/api/search/tags', - }, - TAGS: '/api/tags', - TENANT: { - INDEX: '/api/tenant', - LOGO: '/api/tenant/logo', - }, + CHECKOUT: '/api/stripe/checkout', WEBHOOKS: '/api/stripe/webhooks', - STORAGE: { - LOGO: '/api/storage/logo', - }, - INTEGRATIONS: { - INDEX: '/api/integrations', - SLACK: '/api/integrations/slack', - }, }, } as const; -export const Redirects = { - NOT_FOUND: { - notFound: true, - }, - _500: { - redirect: { - permanent: false, - destination: Routes.SITE._500, - }, +export const RegisterRoutes = [ + { + title: 'Company', + number: 1, + route: Routes.SITE.REGISTER.INDEX, }, - LOGIN: { - redirect: { - permanent: false, - destination: Routes.SITE.LOGIN, - }, + { + title: 'User', + number: 2, + route: Routes.SITE.REGISTER.USER, }, - HOME: { - redirect: { - permanent: false, - destination: Routes.SITE.HOME, - }, + { + title: 'Confirm', + number: 3, + route: Routes.SITE.REGISTER.CONFIRM, }, -} as const; +]; diff --git a/src/utils/stripe.ts b/src/utils/stripe.ts index 388ce25c9..c2bf1c8b4 100644 --- a/src/utils/stripe.ts +++ b/src/utils/stripe.ts @@ -1,4 +1,6 @@ -import { Stripe, loadStripe } from '@stripe/stripe-js'; +import { loadStripe } from '@stripe/stripe-js'; + +import type { Stripe } from '@stripe/stripe-js'; let stripePromise: Promise; export const getStripe = () => { diff --git a/tailwind.config.js b/tailwind.config.js index c0ad16122..ee846f24d 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -2,7 +2,6 @@ module.exports = { content: [ './src/**/*.{js,ts,jsx,tsx,mdx}', - './node_modules/@tremor/**/*.{js,ts,jsx,tsx}', ], darkMode: 'class', theme: { @@ -14,6 +13,67 @@ module.exports = { boxShadow: { sm: '0 0 0 1px', }, + borderColor: { + primary: 'var(--gray-6)', + accent: 'var(--teal-6)' + }, + backgroundColor: { + divider: 'var(--gray-6)', + primary: { + DEFAULT: 'var(--gray-1)', + foreground: { + DEFAULT: 'var(--gray-3)', + hover: 'var(--gray-4)', + active: 'var(--gray-4)', + alpha: 'var(--gray-a3)' + }, + negative: { + DEFAULT: 'var(--gray-12)', + hover: 'var(--gray-11)', + disabled: 'var(--gray-10)' + }, + }, + destructive: { + DEFAULT: 'var(--red-6)', + hover: 'var(--red-5)', + disabled: { + DEFAULT: '#fff5f5cc', + dark: '#2f151780' + } + }, + }, + boxShadowColor: { + primary: { + DEFAULT: 'var(--gray-a7)', + hover: 'var(--gray-a8)', + muted: 'var(--gray-6)' + }, + accent: { + DEFAULT: 'var(--teal-a7)', + hover: 'var(--teal-a8)', + focus: 'var(--teal-10)', + }, + destructive: { + DEFAULT: 'var(--red-a7)', + hover: 'var(--red-a8)', + } + }, + textColor: { + primary: { + DEFAULT: 'var(--gray-12)', + muted: 'var(--gray-11)', + negative: 'var(--gray-1)' + }, + accent: { + DEFAULT: 'var(--teal-9)', + focus: 'var(--teal-10)', + secondary: 'var(--teal-11)', + }, + destructive: { + DEFAULT: 'var(--red-9)', + hover: 'var(--red-10)' + } + }, colors: { teal: { 1: 'var(--teal-1)', diff --git a/tsconfig.json b/tsconfig.json index 32f02388f..1427b1b5c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,11 @@ { "compilerOptions": { "target": "ESNext", - "lib": ["dom", "dom.iterable", "esnext"], + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], "allowJs": true, "skipLibCheck": true, "strict": false, @@ -16,9 +20,19 @@ "incremental": true, "baseUrl": ".", "paths": { - "@/*": ["./src/*"], - "@/public/*": ["./public/*"] - } + "@/*": [ + "./src/*" + ], + "@/public/*": [ + "./public/*" + ] + }, + "plugins": [ + { + "name": "next" + } + ], + "strictNullChecks": true }, "include": [ "next-env.d.ts", @@ -26,5 +40,7 @@ "src/**/*.tsx", ".next/types/**/*.ts" ], - "exclude": ["node_modules"] + "exclude": [ + "node_modules" + ] }