├── .nvmrc ├── .eslintignore ├── .prettierignore ├── .husky ├── commit-msg └── prepare-commit-msg ├── .vscode ├── extensions.json └── settings.json ├── apps └── example │ ├── .eslintrc.json │ ├── src │ ├── app │ │ ├── globals.css │ │ ├── favicon.ico │ │ ├── todos │ │ │ ├── add-todo-validation.ts │ │ │ ├── page.tsx │ │ │ ├── add-todo-action.ts │ │ │ └── add-todo-form.tsx │ │ ├── login │ │ │ ├── login-validation.ts │ │ │ ├── page.tsx │ │ │ ├── login-action.ts │ │ │ └── login-form.tsx │ │ ├── layout.tsx │ │ └── page.tsx │ └── lib │ │ └── safe-action.ts │ ├── next.config.mjs │ ├── postcss.config.mjs │ ├── .gitignore │ ├── tailwind.config.ts │ ├── tsconfig.json │ ├── package.json │ ├── LICENSE │ └── pnpm-lock.yaml ├── commitlint.config.js ├── packages └── adapter-react-hook-form │ ├── src │ ├── index.types.ts │ ├── index.ts │ ├── hooks.types.ts │ ├── standard-schema.ts │ └── hooks.ts │ ├── .prettierrc.json │ ├── tsup.config.ts │ ├── tsconfig.json │ ├── .eslintrc.js │ ├── LICENSE │ ├── package.json │ ├── release.config.cjs │ └── README.md ├── .gitignore ├── turbo.json ├── pnpm-workspace.yaml ├── LICENSE ├── .github └── workflows │ └── cicd.yml ├── package.json └── README.md /.nvmrc: -------------------------------------------------------------------------------- 1 | 22 -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | **/*.js -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | *.md -------------------------------------------------------------------------------- /.husky/commit-msg: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | pnpm exec commitlint --edit "${1}" -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["dbaeumer.vscode-eslint"] 3 | } 4 | -------------------------------------------------------------------------------- /.husky/prepare-commit-msg: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | exec < /dev/tty && pnpm exec cz --hook || true -------------------------------------------------------------------------------- /apps/example/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals", 3 | "root": true 4 | } 5 | -------------------------------------------------------------------------------- /apps/example/src/app/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | -------------------------------------------------------------------------------- /commitlint.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: ["@commitlint/config-conventional"], 3 | }; 4 | -------------------------------------------------------------------------------- /apps/example/src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/next-safe-action/adapter-react-hook-form/HEAD/apps/example/src/app/favicon.ico -------------------------------------------------------------------------------- /apps/example/src/lib/safe-action.ts: -------------------------------------------------------------------------------- 1 | import { createSafeActionClient } from "next-safe-action"; 2 | 3 | export const ac = createSafeActionClient(); 4 | -------------------------------------------------------------------------------- /apps/example/src/app/todos/add-todo-validation.ts: -------------------------------------------------------------------------------- 1 | import { z } from "zod"; 2 | 3 | export const addTodoSchema = z.object({ 4 | content: z.string().min(1).max(100), 5 | }); 6 | -------------------------------------------------------------------------------- /apps/example/next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | experimental: { 4 | authInterrupts: true, 5 | }, 6 | }; 7 | 8 | export default nextConfig; 9 | -------------------------------------------------------------------------------- /apps/example/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /packages/adapter-react-hook-form/src/index.types.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Props for `mapToHookFormErrors`. Also used by the hooks. 3 | */ 4 | export type ErrorMapperProps = { 5 | joinBy?: string; 6 | }; 7 | -------------------------------------------------------------------------------- /apps/example/src/app/login/login-validation.ts: -------------------------------------------------------------------------------- 1 | import { z } from "zod"; 2 | 3 | export const loginSchema = z.object({ 4 | username: z.string().min(3).max(30), 5 | password: z.string().min(8).max(100), 6 | }); 7 | -------------------------------------------------------------------------------- /packages/adapter-react-hook-form/.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "es5", 3 | "printWidth": 120, 4 | "useTabs": true, 5 | "arrowParens": "always", 6 | "tabWidth": 2, 7 | "semi": true, 8 | "singleQuote": false, 9 | "quoteProps": "consistent" 10 | } 11 | -------------------------------------------------------------------------------- /packages/adapter-react-hook-form/tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "tsup"; 2 | 3 | export default defineConfig({ 4 | entry: ["src/index.ts", "src/hooks.ts"], 5 | bundle: true, 6 | format: ["esm"], 7 | clean: true, 8 | splitting: false, 9 | sourcemap: true, 10 | dts: true, 11 | }); 12 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "eslint.validate": ["typescript", "typescriptreact"], 3 | "editor.codeActionsOnSave": { 4 | "source.organizeImports": "explicit", 5 | "source.fixAll.eslint": "explicit" 6 | }, 7 | "editor.rulers": [120], 8 | "[markdown]": { 9 | "editor.formatOnSave": false 10 | }, 11 | "typescript.tsdk": "node_modules/typescript/lib" 12 | } 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # macOS 2 | .DS_Store 3 | .AppleDouble 4 | .LSOverride 5 | 6 | node_modules 7 | yarn.lock 8 | dist 9 | .env* 10 | *.pem 11 | .npmrc 12 | 13 | npm-debug.log* 14 | yarn-debug.log* 15 | yarn-error.log* 16 | 17 | # Exclude .example files 18 | !*.example 19 | 20 | # ESLint 21 | .eslintcache 22 | 23 | # TypeScript stuff 24 | *.tsbuildinfo 25 | 26 | # Turborepo 27 | .turbo 28 | 29 | /packages/adapter-react-hook-form/src/test.ts -------------------------------------------------------------------------------- /turbo.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://turbo.build/schema.json", 3 | "ui": "stream", 4 | "tasks": { 5 | "build": { 6 | "dependsOn": ["^build"], 7 | "outputs": [".next/**", "!.next/cache/**", "dist/**", "build/**"] 8 | }, 9 | "lint": {}, 10 | "deploy": { 11 | "dependsOn": ["build", "lint"], 12 | "env": ["NPM_TOKEN", "GITHUB_TOKEN"] 13 | }, 14 | "dev": { 15 | "cache": false, 16 | "persistent": true 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - packages/* 3 | - apps/* 4 | catalog: 5 | '@hookform/resolvers': ^5.0.1 6 | '@types/node': ^22 7 | '@types/react': ^19 8 | '@types/react-dom': ^19 9 | next-safe-action: 8.0.0 10 | postcss: ^8 11 | react-hook-form: ^7.56.4 12 | tailwindcss: ^3 13 | typescript: 5.8.2 14 | next: 15.3.3 15 | eslint-config-next: 15.3.3 16 | react: ^19 17 | react-dom: ^19 18 | eslint: ^8.57.0 19 | onlyBuiltDependencies: 20 | - esbuild 21 | - sharp 22 | - unrs-resolver 23 | -------------------------------------------------------------------------------- /apps/example/src/app/layout.tsx: -------------------------------------------------------------------------------- 1 | import type { Metadata } from "next"; 2 | import { Inter } from "next/font/google"; 3 | import "./globals.css"; 4 | 5 | const inter = Inter({ subsets: ["latin"] }); 6 | 7 | export const metadata: Metadata = { 8 | title: "next-safe-action/react-hook-form adapter", 9 | }; 10 | 11 | export default function RootLayout({ 12 | children, 13 | }: Readonly<{ 14 | children: React.ReactNode; 15 | }>) { 16 | return ( 17 | 18 | {children} 19 | 20 | ); 21 | } 22 | -------------------------------------------------------------------------------- /apps/example/src/app/login/page.tsx: -------------------------------------------------------------------------------- 1 | import Link from "next/link"; 2 | import { LoginForm } from "./login-form"; 3 | 4 | export default function LoginPage() { 5 | return ( 6 |
7 |
8 | 9 | ← Go back to home 10 | 11 |

Login Form

12 | 13 |
14 |
15 | ); 16 | } 17 | -------------------------------------------------------------------------------- /apps/example/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | .yarn/install-state.gz 8 | 9 | # testing 10 | /coverage 11 | 12 | # next.js 13 | /.next/ 14 | /out/ 15 | 16 | # production 17 | /build 18 | 19 | # misc 20 | .DS_Store 21 | *.pem 22 | 23 | # debug 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | -------------------------------------------------------------------------------- /apps/example/tailwind.config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from "tailwindcss"; 2 | 3 | const config: Config = { 4 | content: [ 5 | "./src/pages/**/*.{js,ts,jsx,tsx,mdx}", 6 | "./src/components/**/*.{js,ts,jsx,tsx,mdx}", 7 | "./src/app/**/*.{js,ts,jsx,tsx,mdx}", 8 | ], 9 | theme: { 10 | extend: { 11 | backgroundImage: { 12 | "gradient-radial": "radial-gradient(var(--tw-gradient-stops))", 13 | "gradient-conic": 14 | "conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))", 15 | }, 16 | }, 17 | }, 18 | plugins: [], 19 | }; 20 | export default config; 21 | -------------------------------------------------------------------------------- /apps/example/src/app/todos/page.tsx: -------------------------------------------------------------------------------- 1 | import Link from "next/link"; 2 | import { getTodos } from "./add-todo-action"; 3 | import { AddTodoForm } from "./add-todo-form"; 4 | 5 | export default async function TodosPage() { 6 | const todos = await getTodos(); 7 | 8 | return ( 9 |
10 |
11 | 12 | ← Go back to home 13 | 14 |

Todos Form

15 | 16 |
Current todos from server: {JSON.stringify(todos, null, 1)}
17 |
18 |
19 | ); 20 | } 21 | -------------------------------------------------------------------------------- /apps/example/src/app/page.tsx: -------------------------------------------------------------------------------- 1 | import Link from "next/link"; 2 | 3 | export default function HomePage() { 4 | return ( 5 |
6 |

Examples

7 |
8 | 21 |
22 |
23 | ); 24 | } 25 | -------------------------------------------------------------------------------- /apps/example/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "lib": [ 4 | "dom", 5 | "dom.iterable", 6 | "esnext" 7 | ], 8 | "allowJs": true, 9 | "skipLibCheck": true, 10 | "strict": true, 11 | "noEmit": true, 12 | "esModuleInterop": true, 13 | "module": "esnext", 14 | "moduleResolution": "bundler", 15 | "resolveJsonModule": true, 16 | "isolatedModules": true, 17 | "jsx": "preserve", 18 | "incremental": true, 19 | "plugins": [ 20 | { 21 | "name": "next" 22 | } 23 | ], 24 | "paths": { 25 | "@/*": [ 26 | "./src/*" 27 | ] 28 | }, 29 | "target": "ES2017" 30 | }, 31 | "include": [ 32 | "next-env.d.ts", 33 | "**/*.ts", 34 | "**/*.tsx", 35 | ".next/types/**/*.ts" 36 | ], 37 | "exclude": [ 38 | "node_modules" 39 | ] 40 | } 41 | -------------------------------------------------------------------------------- /packages/adapter-react-hook-form/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "module": "CommonJS", 5 | "lib": ["ES2022"], 6 | "skipLibCheck": true, 7 | "sourceMap": true, 8 | "outDir": "./dist", 9 | "moduleResolution": "node", 10 | "removeComments": false, 11 | "strict": true, 12 | "strictPropertyInitialization": false, 13 | "useUnknownInCatchVariables": false, 14 | "forceConsistentCasingInFileNames": true, 15 | "noImplicitAny": true, 16 | "noImplicitThis": true, 17 | "noImplicitReturns": true, 18 | "noEmitOnError": true, 19 | "noUncheckedIndexedAccess": true, 20 | "noFallthroughCasesInSwitch": true, 21 | "allowSyntheticDefaultImports": true, 22 | "esModuleInterop": true, 23 | "resolveJsonModule": true, 24 | "incremental": false, 25 | "noEmit": true 26 | }, 27 | "exclude": ["node_modules"], 28 | "include": ["tsup.config.ts", "./src/**/*.ts"] 29 | } 30 | -------------------------------------------------------------------------------- /apps/example/src/app/login/login-action.ts: -------------------------------------------------------------------------------- 1 | "use server"; 2 | 3 | import { ac } from "@/lib/safe-action"; 4 | import { returnValidationErrors } from "next-safe-action"; 5 | import { unauthorized } from "next/navigation"; 6 | import { loginSchema } from "./login-validation"; 7 | 8 | export const loginAction = ac 9 | .inputSchema(loginSchema) 10 | .action(async ({ parsedInput }) => { 11 | if ( 12 | parsedInput.username !== "admin" || 13 | parsedInput.password !== "password" 14 | ) { 15 | await new Promise((resolve) => setTimeout(resolve, 1000)); 16 | unauthorized(); 17 | returnValidationErrors(loginSchema, { 18 | _errors: ["Invalid username or password"], 19 | username: { 20 | _errors: ["Invalid username"], 21 | }, 22 | password: { 23 | _errors: ["Invalid password"], 24 | }, 25 | }); 26 | } 27 | 28 | return { 29 | successful: true, 30 | username: parsedInput.username, 31 | }; 32 | }); 33 | -------------------------------------------------------------------------------- /apps/example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@apps/example", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@hookform/resolvers": "catalog:", 13 | "@next-safe-action/adapter-react-hook-form": "workspace:*", 14 | "next": "catalog:", 15 | "next-safe-action": "catalog:", 16 | "react": "catalog:", 17 | "react-dom": "catalog:", 18 | "react-hook-form": "catalog:", 19 | "zod": "^3.25.0" 20 | }, 21 | "devDependencies": { 22 | "@types/node": "catalog:", 23 | "@types/react": "catalog:", 24 | "@types/react-dom": "catalog:", 25 | "eslint": "catalog:", 26 | "eslint-config-next": "catalog:", 27 | "postcss": "catalog:", 28 | "tailwindcss": "catalog:", 29 | "typescript": "catalog:" 30 | }, 31 | "packageManager": "pnpm@9.7.1+sha512.faf344af2d6ca65c4c5c8c2224ea77a81a5e8859cbc4e06b1511ddce2f0151512431dd19e6aff31f2c6a8f5f2aced9bd2273e1fed7dd4de1868984059d2c4247" 32 | } 33 | -------------------------------------------------------------------------------- /packages/adapter-react-hook-form/.eslintrc.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | const { defineConfig } = require("eslint-define-config"); 3 | 4 | module.exports = defineConfig({ 5 | root: true, 6 | extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended-type-checked", "prettier"], 7 | plugins: ["@typescript-eslint", "react-hooks"], 8 | parser: "@typescript-eslint/parser", 9 | parserOptions: { 10 | project: "./tsconfig.json", 11 | tsconfigRootDir: __dirname, 12 | }, 13 | ignorePatterns: ["**/*.js", "**/*.mjs", "**/*.cjs", "dist/**"], 14 | rules: { 15 | "@typescript-eslint/consistent-type-imports": "error", 16 | "@typescript-eslint/consistent-type-exports": "error", 17 | "@typescript-eslint/unbound-method": "off", 18 | "@typescript-eslint/ban-ts-comment": "off", 19 | "@typescript-eslint/no-redundant-type-constituents": "off", 20 | "@typescript-eslint/no-explicit-any": "off", 21 | "@typescript-eslint/ban-types": "off", 22 | "react-hooks/exhaustive-deps": "warn", 23 | "@typescript-eslint/require-await": "off", 24 | }, 25 | }); 26 | -------------------------------------------------------------------------------- /apps/example/src/app/todos/add-todo-action.ts: -------------------------------------------------------------------------------- 1 | "use server"; 2 | 3 | import { ac } from "@/lib/safe-action"; 4 | import { returnValidationErrors } from "next-safe-action"; 5 | import { revalidatePath } from "next/cache"; 6 | import { addTodoSchema } from "./add-todo-validation"; 7 | 8 | const todos = ["first todo"]; 9 | 10 | export async function getTodos() { 11 | return todos; 12 | } 13 | 14 | async function addTodo(newTodoContent: string) { 15 | todos.push(newTodoContent); 16 | return todos; 17 | } 18 | 19 | export const addTodoAction = ac 20 | .inputSchema(addTodoSchema) 21 | .action(async ({ parsedInput }) => { 22 | // Simulate a slow server 23 | await new Promise((resolve) => setTimeout(resolve, 1000)); 24 | 25 | if (parsedInput.content === "bad word") { 26 | returnValidationErrors(addTodoSchema, { 27 | content: { 28 | _errors: ["The bad word is not allowed, please remove it"], 29 | }, 30 | }); 31 | } 32 | 33 | await addTodo(parsedInput.content); 34 | 35 | revalidatePath("/todos"); 36 | 37 | return { 38 | successful: true, 39 | content: parsedInput.content, 40 | }; 41 | }); 42 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Edoardo Ranghieri 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /apps/example/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Edoardo Ranghieri 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /packages/adapter-react-hook-form/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Edoardo Ranghieri 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.github/workflows/cicd.yml: -------------------------------------------------------------------------------- 1 | name: CI/CD 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | - beta 8 | pull_request: 9 | branches: 10 | - "*" 11 | 12 | jobs: 13 | ci: 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: actions/checkout@v4 17 | - uses: pnpm/action-setup@v3 18 | with: 19 | version: 9 20 | - name: Setup Node.js 21 | uses: actions/setup-node@v4 22 | with: 23 | node-version: "20" 24 | cache: "pnpm" 25 | - run: pnpm install --frozen-lockfile 26 | - run: pnpm run lint:lib 27 | 28 | cd: 29 | if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/beta' }} 30 | runs-on: ubuntu-latest 31 | needs: [ci] 32 | steps: 33 | - uses: actions/checkout@v4 34 | - uses: pnpm/action-setup@v3 35 | with: 36 | version: 9 37 | - name: Setup Node.js 38 | uses: actions/setup-node@v4 39 | with: 40 | node-version: "20" 41 | cache: "pnpm" 42 | - run: pnpm install --frozen-lockfile 43 | - run: pnpm run build:lib 44 | - name: Release 45 | env: 46 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }} 47 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 48 | run: pnpm run deploy:lib 49 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "adapter-react-hook-form-monorepo", 3 | "version": "0.0.0", 4 | "private": true, 5 | "description": "Monorepo for next-safe-action react-hook-form adapter.", 6 | "scripts": { 7 | "prepare": "is-ci || husky", 8 | "ex": "turbo run dev --filter=@apps/example", 9 | "lint": "turbo run lint", 10 | "build": "turbo run build", 11 | "lint:lib": "turbo run lint --filter=@next-safe-action/adapter-react-hook-form", 12 | "build:lib": "turbo run build --filter=@next-safe-action/adapter-react-hook-form", 13 | "deploy:lib": "turbo run deploy --filter=@next-safe-action/adapter-react-hook-form", 14 | "build:ex": "turbo run build --filter=@apps/eample --force" 15 | }, 16 | "author": "Edoardo Ranghieri", 17 | "license": "MIT", 18 | "engines": { 19 | "node": ">=18.17" 20 | }, 21 | "config": { 22 | "commitizen": { 23 | "path": "./node_modules/cz-conventional-changelog" 24 | } 25 | }, 26 | "repository": { 27 | "type": "git", 28 | "url": "https://github.com/TheEdoRan/next-safe-action.git" 29 | }, 30 | "dependencies": { 31 | "@commitlint/cli": "^19.3.0", 32 | "@commitlint/config-conventional": "^19.2.2", 33 | "commitizen": "^4.3.0", 34 | "cz-conventional-changelog": "^3.3.0", 35 | "husky": "^9.0.11", 36 | "is-ci": "^3.0.1", 37 | "turbo": "^2.4.4", 38 | "typescript": "catalog:" 39 | }, 40 | "packageManager": "pnpm@10.6.5" 41 | } 42 | -------------------------------------------------------------------------------- /apps/example/src/app/todos/add-todo-form.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { zodResolver } from "@hookform/resolvers/zod"; 4 | import { 5 | useHookFormOptimisticAction 6 | } from "@next-safe-action/adapter-react-hook-form/hooks"; 7 | import { addTodoAction } from "./add-todo-action"; 8 | import { addTodoSchema } from "./add-todo-validation"; 9 | 10 | type Props = { 11 | todos: string[]; 12 | }; 13 | 14 | export function AddTodoForm({ todos }: Props) { 15 | const { form, action, handleSubmitWithAction, resetFormAndAction } = 16 | useHookFormOptimisticAction(addTodoAction, zodResolver(addTodoSchema), { 17 | actionProps: { 18 | currentState: { todos }, 19 | updateFn: (state, input) => { 20 | return { 21 | todos: [...state.todos, input.content], 22 | }; 23 | }, 24 | }, 25 | formProps: { 26 | mode: "onChange", 27 | }, 28 | }); 29 | 30 | return ( 31 |
32 |
35 | 41 | {form.formState.errors.content ? ( 42 |

{form.formState.errors.content.message}

43 | ) : null} 44 | 45 | 50 | 56 | {form.formState.errors.root ? ( 57 |

{form.formState.errors.root.message}

58 | ) : null} 59 |
60 |
61 |
62 | 					Optimistic state todos:{" "}
63 | 					{JSON.stringify(action.optimisticState.todos, null, 1)}
64 | 				
65 |
66 |
67 | ); 68 | } 69 | -------------------------------------------------------------------------------- /apps/example/src/app/login/login-form.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { zodResolver } from "@hookform/resolvers/zod"; 4 | import { useHookFormAction } from "@next-safe-action/adapter-react-hook-form/hooks"; 5 | import { loginAction } from "./login-action"; 6 | import { loginSchema } from "./login-validation"; 7 | 8 | export function LoginForm() { 9 | const { form, action, handleSubmitWithAction, resetFormAndAction } = 10 | useHookFormAction(loginAction, zodResolver(loginSchema), { 11 | formProps: { 12 | mode: "onChange", 13 | }, 14 | actionProps: { 15 | onSuccess: (args) => { 16 | console.log("onSuccess called:", args); 17 | window.alert("Logged in successfully!"); 18 | resetFormAndAction(); 19 | }, 20 | onNavigation: (args) => { 21 | console.log("onNavigation called:", args); 22 | }, 23 | onSettled: (args) => { 24 | console.log("onSettled called:", args); 25 | }, 26 | }, 27 | }); 28 | 29 | return ( 30 |
31 | 37 | {form.formState.errors.username ? ( 38 |

{form.formState.errors.username.message}

39 | ) : null} 40 | 41 | 47 | {form.formState.errors.password ? ( 48 |

{form.formState.errors.password.message}

49 | ) : null} 50 | 51 | 56 | 62 | {form.formState.errors.root ? ( 63 |

{form.formState.errors.root.message}

64 | ) : null} 65 |
66 | ); 67 | } 68 | -------------------------------------------------------------------------------- /packages/adapter-react-hook-form/src/index.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-argument */ 2 | 3 | import type { ValidationErrors } from "next-safe-action"; 4 | import type { FieldError, FieldErrors } from "react-hook-form"; 5 | import type {} from "zod"; 6 | import type { ErrorMapperProps } from "./index.types"; 7 | import type { InferOutputOrDefault, StandardSchemaV1 } from "./standard-schema"; 8 | 9 | /** 10 | * Maps a validation errors object to an object of `FieldErrors` compatible with react-hook-form. 11 | * You should only call this function directly for advanced use cases, and prefer exported hooks. 12 | */ 13 | export function mapToHookFormErrors( 14 | validationErrors: ValidationErrors | undefined, 15 | props?: ErrorMapperProps 16 | ) { 17 | if (!validationErrors || Object.keys(validationErrors).length === 0) { 18 | return undefined; 19 | } 20 | 21 | const fieldErrors: FieldErrors> = {}; 22 | 23 | function mapper(ve: Record, paths: string[] = []) { 24 | // Map through validation errors. 25 | for (const key of Object.keys(ve)) { 26 | // If validation error is an object, recursively call mapper so we go one level deeper 27 | // at a time. Pass the current paths to the mapper as well. 28 | if (typeof ve[key] === "object" && ve[key] && !Array.isArray(ve[key])) { 29 | mapper(ve[key], [...paths, key]); 30 | } 31 | 32 | // We're just interested in the `_errors` field, which must be an array. 33 | if (key === "_errors" && Array.isArray(ve[key])) { 34 | // Initially set moving reference to root `fieldErrors` object. 35 | let ref = fieldErrors as Record; 36 | 37 | // Iterate through the paths, create nested objects if needed and move the reference. 38 | for (let i = 0; i < paths.length - 1; i++) { 39 | const p = paths[i]!; 40 | ref[p] ??= {}; 41 | ref = ref[p]; 42 | } 43 | 44 | // The actual path is the last one. If it's undefined, it means that we're at the root level. 45 | const path = paths.at(-1) ?? "root"; 46 | 47 | // Set the error for the current path. 48 | ref[path] = { 49 | type: "validate", 50 | message: ve[key].join(props?.joinBy ?? " "), 51 | } as FieldError; 52 | } 53 | } 54 | } 55 | 56 | mapper(validationErrors ?? {}); 57 | return fieldErrors; 58 | } 59 | 60 | export type * from "./index.types"; 61 | -------------------------------------------------------------------------------- /packages/adapter-react-hook-form/src/hooks.types.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/no-unsafe-function-type */ 2 | 3 | import type { SafeActionFn } from "next-safe-action"; 4 | import type { HookCallbacks, UseActionHookReturn, UseOptimisticActionHookReturn } from "next-safe-action/hooks"; 5 | import type { UseFormProps, UseFormReturn } from "react-hook-form"; 6 | import type { ErrorMapperProps } from "./index.types"; 7 | import type { InferInputOrDefault, InferOutputOrDefault, StandardSchemaV1 } from "./standard-schema"; 8 | 9 | /** 10 | * Optional props for `useHookFormAction` and `useHookFormOptimisticAction`. 11 | */ 12 | export type HookProps = { 13 | errorMapProps?: ErrorMapperProps; 14 | actionProps?: HookCallbacks; 15 | formProps?: Omit, FormContext, InferOutputOrDefault>, "resolver">; 16 | }; 17 | 18 | /** 19 | * Type of the return object of the `useHookFormAction` hook. 20 | */ 21 | export type UseHookFormActionHookReturn< 22 | ServerError, 23 | S extends StandardSchemaV1 | undefined, 24 | CVE, 25 | Data, 26 | FormContext = any, 27 | > = { 28 | action: UseActionHookReturn; 29 | form: UseFormReturn, FormContext, InferOutputOrDefault>; 30 | handleSubmitWithAction: (e?: React.BaseSyntheticEvent) => Promise; 31 | resetFormAndAction: () => void; 32 | }; 33 | 34 | /** 35 | * Type of the return object of the `useHookFormOptimisticAction` hook. 36 | */ 37 | export type UseHookFormOptimisticActionHookReturn< 38 | ServerError, 39 | S extends StandardSchemaV1 | undefined, 40 | CVE, 41 | Data, 42 | State, 43 | FormContext = any, 44 | > = Omit, "action"> & { 45 | action: UseOptimisticActionHookReturn; 46 | }; 47 | 48 | /** 49 | * Infer the type of the return object of the `useHookFormAction` hook. 50 | */ 51 | export type InferUseHookFormActionHookReturn = 52 | T extends SafeActionFn 53 | ? UseHookFormActionHookReturn 54 | : never; 55 | 56 | /** 57 | * Infer the type of the return object of the `useHookFormOptimisticAction` hook. 58 | */ 59 | export type InferUseHookFormOptimisticActionHookReturn = 60 | T extends SafeActionFn 61 | ? UseHookFormOptimisticActionHookReturn 62 | : never; 63 | -------------------------------------------------------------------------------- /packages/adapter-react-hook-form/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@next-safe-action/adapter-react-hook-form", 3 | "version": "0.0.0-development", 4 | "private": false, 5 | "description": "This adapter offers a way to seamlessly integrate next-safe-action with react-hook-form.", 6 | "main": "./dist/index.mjs", 7 | "module": "./dist/index.mjs", 8 | "types": "./dist/index.d.mts", 9 | "files": [ 10 | "dist" 11 | ], 12 | "exports": { 13 | ".": "./dist/index.mjs", 14 | "./hooks": "./dist/hooks.mjs" 15 | }, 16 | "typesVersions": { 17 | "*": { 18 | ".": [ 19 | "./dist/index.d.mts" 20 | ], 21 | "hooks": [ 22 | "./dist/hooks.d.mts" 23 | ] 24 | } 25 | }, 26 | "funding": [ 27 | { 28 | "type": "github", 29 | "url": "https://github.com/sponsors/TheEdoRan" 30 | }, 31 | { 32 | "type": "paypal", 33 | "url": "https://www.paypal.com/donate/?hosted_button_id=ES9JRPSC66XKW" 34 | } 35 | ], 36 | "scripts": { 37 | "lint": "tsc && prettier --write . && eslint .", 38 | "build": "tsup", 39 | "deploy": "semantic-release" 40 | }, 41 | "keywords": [ 42 | "next", 43 | "nextjs", 44 | "react", 45 | "rsc", 46 | "react server components", 47 | "mutation", 48 | "action", 49 | "actions", 50 | "react actions", 51 | "next actions", 52 | "server actions", 53 | "next-safe-action", 54 | "next safe action", 55 | "react-hook-form", 56 | "react hook form", 57 | "react forms" 58 | ], 59 | "author": "Edoardo Ranghieri", 60 | "license": "MIT", 61 | "publishConfig": { 62 | "access": "public" 63 | }, 64 | "devDependencies": { 65 | "@eslint/js": "^9.9.0", 66 | "@hookform/resolvers": "catalog:", 67 | "@manypkg/cli": "^0.21.4", 68 | "@types/node": "catalog:", 69 | "@types/react": "catalog:", 70 | "@types/react-dom": "catalog:", 71 | "@typescript-eslint/eslint-plugin": "^8.27.0", 72 | "@typescript-eslint/parser": "^8.27.0", 73 | "eslint": "catalog:", 74 | "eslint-config-prettier": "^9.1.0", 75 | "eslint-define-config": "^2.1.0", 76 | "eslint-plugin-react-hooks": "^4.6.2", 77 | "next-safe-action": "catalog:", 78 | "prettier": "^3.3.3", 79 | "react": "catalog:", 80 | "react-hook-form": "catalog:", 81 | "semantic-release": "^23.0.8", 82 | "tsup": "^8.2.4", 83 | "tsx": "^4.17.0", 84 | "typescript": "catalog:", 85 | "typescript-eslint": "^7.18.0", 86 | "zod": "^3.25.0" 87 | }, 88 | "peerDependencies": { 89 | "@hookform/resolvers": ">= 5.0.0", 90 | "next": ">= 14.0.0", 91 | "next-safe-action": ">= 8.0.0", 92 | "react": ">= 18.2.0", 93 | "react-dom": ">= 18.2.0", 94 | "react-hook-form": ">= 7.0.0" 95 | }, 96 | "repository": { 97 | "type": "git", 98 | "url": "https://github.com/next-safe-action/adapter-react-hook-form.git" 99 | }, 100 | "packageManager": "pnpm@9.7.1+sha512.faf344af2d6ca65c4c5c8c2224ea77a81a5e8859cbc4e06b1511ddce2f0151512431dd19e6aff31f2c6a8f5f2aced9bd2273e1fed7dd4de1868984059d2c4247" 101 | } 102 | -------------------------------------------------------------------------------- /packages/adapter-react-hook-form/release.config.cjs: -------------------------------------------------------------------------------- 1 | /** 2 | * @type {import('semantic-release').GlobalConfig} 3 | */ 4 | module.exports = { 5 | branches: [ 6 | { 7 | name: "main", 8 | }, 9 | { 10 | name: "next", 11 | channel: "next", 12 | prerelease: true, 13 | }, 14 | { 15 | name: "experimental", 16 | channel: "experimental", 17 | prerelease: true, 18 | }, 19 | { 20 | name: "beta", 21 | channel: "beta", 22 | prerelease: true, 23 | }, 24 | { 25 | name: "4.x", 26 | range: "4.x", 27 | channel: "4.x", 28 | }, 29 | ], 30 | plugins: [ 31 | [ 32 | "@semantic-release/commit-analyzer", 33 | { 34 | preset: "conventionalcommits", 35 | releaseRules: [ 36 | { 37 | breaking: true, 38 | release: "major", 39 | }, 40 | { 41 | revert: true, 42 | release: "patch", 43 | }, 44 | { 45 | type: "feat", 46 | release: "minor", 47 | }, 48 | { 49 | type: "fix", 50 | release: "patch", 51 | }, 52 | { 53 | type: "perf", 54 | release: "patch", 55 | }, 56 | { 57 | type: "refactor", 58 | release: "patch", 59 | }, 60 | { 61 | type: "build", 62 | release: "patch", 63 | }, 64 | { 65 | type: "docs", 66 | release: "patch", 67 | }, 68 | { 69 | type: "chore", 70 | release: false, 71 | }, 72 | { 73 | type: "test", 74 | release: false, 75 | }, 76 | { 77 | type: "ci", 78 | release: false, 79 | }, 80 | { 81 | type: "style", 82 | release: false, 83 | }, 84 | ], 85 | parserOpts: { 86 | noteKeywords: ["BREAKING CHANGE", "BREAKING CHANGES"], 87 | }, 88 | }, 89 | ], 90 | [ 91 | "@semantic-release/release-notes-generator", 92 | { 93 | preset: "conventionalcommits", 94 | presetConfig: { 95 | types: [ 96 | { 97 | type: "revert", 98 | section: "Reverts", 99 | hidden: false, 100 | }, 101 | { 102 | type: "feat", 103 | section: "Features", 104 | hidden: false, 105 | }, 106 | { 107 | type: "fix", 108 | section: "Bug Fixes", 109 | hidden: false, 110 | }, 111 | { 112 | type: "perf", 113 | section: "Performance improvements", 114 | hidden: false, 115 | }, 116 | { 117 | type: "refactor", 118 | section: "Refactors", 119 | hidden: false, 120 | }, 121 | { 122 | type: "build", 123 | section: "Build System", 124 | hidden: false, 125 | }, 126 | { 127 | type: "docs", 128 | section: "Documentation", 129 | hidden: false, 130 | }, 131 | { 132 | type: "chore", 133 | hidden: true, 134 | }, 135 | { 136 | type: "test", 137 | hidden: true, 138 | }, 139 | { 140 | type: "ci", 141 | hidden: true, 142 | }, 143 | { 144 | type: "style", 145 | hidden: true, 146 | }, 147 | ], 148 | }, 149 | parserOpts: { 150 | noteKeywords: ["BREAKING CHANGE", "BREAKING CHANGES"], 151 | }, 152 | }, 153 | ], 154 | "@semantic-release/npm", 155 | "@semantic-release/github", 156 | ], 157 | }; 158 | -------------------------------------------------------------------------------- /packages/adapter-react-hook-form/src/standard-schema.ts: -------------------------------------------------------------------------------- 1 | /** The Standard Schema interface. */ 2 | export interface StandardSchemaV1 { 3 | /** The Standard Schema properties. */ 4 | readonly "~standard": StandardSchemaV1.Props; 5 | } 6 | 7 | // eslint-disable-next-line @typescript-eslint/no-namespace 8 | export declare namespace StandardSchemaV1 { 9 | /** The Standard Schema properties interface. */ 10 | export interface Props { 11 | /** The version number of the standard. */ 12 | readonly version: 1; 13 | /** The vendor name of the schema library. */ 14 | readonly vendor: string; 15 | /** Validates unknown input values. */ 16 | readonly validate: (value: unknown) => Result | Promise>; 17 | /** Inferred types associated with the schema. */ 18 | readonly types?: Types | undefined; 19 | } 20 | 21 | /** The result interface of the validate function. */ 22 | export type Result = SuccessResult | FailureResult; 23 | 24 | /** The result interface if validation succeeds. */ 25 | export interface SuccessResult { 26 | /** The typed output value. */ 27 | readonly value: Output; 28 | /** The non-existent issues. */ 29 | readonly issues?: undefined; 30 | } 31 | 32 | /** The result interface if validation fails. */ 33 | export interface FailureResult { 34 | /** The issues of failed validation. */ 35 | readonly issues: ReadonlyArray; 36 | } 37 | 38 | /** The issue interface of the failure output. */ 39 | export interface Issue { 40 | /** The error message of the issue. */ 41 | readonly message: string; 42 | /** The path of the issue, if any. */ 43 | readonly path?: ReadonlyArray | undefined; 44 | } 45 | 46 | /** The path segment interface of the issue. */ 47 | export interface PathSegment { 48 | /** The key representing a path segment. */ 49 | readonly key: PropertyKey; 50 | } 51 | 52 | /** The Standard Schema types interface. */ 53 | export interface Types { 54 | /** The input type of the schema. */ 55 | readonly input: Input; 56 | /** The output type of the schema. */ 57 | readonly output: Output; 58 | } 59 | 60 | /** Infers the input type of a Standard Schema. */ 61 | export type InferInput = NonNullable["input"]; 62 | 63 | /** Infers the output type of a Standard Schema. */ 64 | export type InferOutput = NonNullable["output"]; 65 | } 66 | 67 | // custom helpers 68 | 69 | /** Infer the input type of an array of Standard Schemas. */ 70 | export type InferInputArray = { 71 | [K in keyof Schemas]: StandardSchemaV1.InferInput; 72 | }; 73 | 74 | /** Infer the output type of an array of Standard Schemas. */ 75 | export type InferOutputArray = { 76 | [K in keyof Schemas]: StandardSchemaV1.InferOutput; 77 | }; 78 | 79 | /** Infer the input type of a Standard Schema, or a default type if the schema is undefined. */ 80 | export type InferInputOrDefault = MaybeSchema extends StandardSchemaV1 81 | ? StandardSchemaV1.InferInput 82 | : Default; 83 | 84 | /** Infer the output type of a Standard Schema, or a default type if the schema is undefined. */ 85 | export type InferOutputOrDefault = MaybeSchema extends StandardSchemaV1 86 | ? StandardSchemaV1.InferOutput 87 | : Default; 88 | 89 | export async function standardParse(schema: StandardSchemaV1, value: unknown) { 90 | return schema["~standard"].validate(value); 91 | } 92 | -------------------------------------------------------------------------------- /packages/adapter-react-hook-form/src/hooks.ts: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import type { ValidationErrors } from "next-safe-action"; 4 | import type { HookSafeActionFn } from "next-safe-action/hooks"; 5 | import { useAction, useOptimisticAction } from "next-safe-action/hooks"; 6 | import * as React from "react"; 7 | import type { Resolver } from "react-hook-form"; 8 | import { useForm } from "react-hook-form"; 9 | import type { HookProps, UseHookFormActionHookReturn, UseHookFormOptimisticActionHookReturn } from "./hooks.types"; 10 | import type { ErrorMapperProps } from "./index"; 11 | import { mapToHookFormErrors } from "./index"; 12 | import type { InferInputOrDefault, InferOutputOrDefault, StandardSchemaV1 } from "./standard-schema"; 13 | 14 | /** 15 | * For more advanced use cases where you want full customization of the hooks used, you can 16 | * use this hook to map a validation errors object to a `FieldErrors` compatible with react-hook-form. 17 | * You can then pass the returned `hookFormValidationErrors` property to `useForm`'s `errors` prop. 18 | * 19 | * @param validationErrors Validation errors object from `next-safe-action` 20 | * @returns Object of `FieldErrors` compatible with react-hook-form 21 | */ 22 | export function useHookFormActionErrorMapper( 23 | validationErrors: ValidationErrors | undefined, 24 | props?: ErrorMapperProps 25 | ) { 26 | const propsRef = React.useRef(props); 27 | 28 | const hookFormValidationErrors = React.useMemo( 29 | () => mapToHookFormErrors(validationErrors, propsRef.current), 30 | [validationErrors] 31 | ); 32 | 33 | return { 34 | hookFormValidationErrors, 35 | }; 36 | } 37 | 38 | /** 39 | * This hook is a wrapper around `useAction` and `useForm` that makes it easier to use safe actions 40 | * with react-hook-form. It also maps validation errors to `FieldErrors` compatible with react-hook-form. 41 | * 42 | * @param safeAction The safe action 43 | * @param hookFormResolver A react-hook-form validation resolver 44 | * @param props Optional props for both `useAction`, `useForm` hooks and error mapper 45 | * @returns An object containing `action` and `form` controllers, `handleActionSubmit`, and `resetFormAndAction` 46 | */ 47 | export function useHookFormAction( 48 | safeAction: HookSafeActionFn, 49 | hookFormResolver: Resolver, FormContext, InferOutputOrDefault>, 50 | props?: HookProps 51 | ): UseHookFormActionHookReturn { 52 | const action = useAction(safeAction, props?.actionProps); 53 | 54 | const { hookFormValidationErrors } = useHookFormActionErrorMapper( 55 | action.result.validationErrors as ValidationErrors | undefined, 56 | props?.errorMapProps 57 | ); 58 | 59 | const form = useForm, FormContext, InferOutputOrDefault>({ 60 | ...props?.formProps, 61 | resolver: hookFormResolver, 62 | errors: hookFormValidationErrors, 63 | }); 64 | 65 | const handleSubmitWithAction = form.handleSubmit(action.executeAsync); 66 | 67 | const resetFormAndAction = () => { 68 | form.reset(); 69 | action.reset(); 70 | }; 71 | 72 | return { 73 | action, 74 | form, 75 | handleSubmitWithAction, 76 | resetFormAndAction, 77 | }; 78 | } 79 | 80 | /** 81 | * This hook is a wrapper around `useOptimisticAction` and `useForm` that makes it easier to use safe actions 82 | * with react-hook-form. It also maps validation errors to `FieldErrors` compatible with react-hook-form. 83 | * 84 | * @param safeAction The safe action 85 | * @param hookFormResolver A react-hook-form validation resolver 86 | * @param props Required `currentState` and `updateFn` props for the action, and additional optional 87 | * props for both `useAction`, `useForm` hooks and error mapper 88 | * @returns An object containing `action` and `form` controllers, `handleActionSubmit`, and `resetFormAndAction` 89 | */ 90 | export function useHookFormOptimisticAction< 91 | ServerError, 92 | S extends StandardSchemaV1 | undefined, 93 | CVE, 94 | Data, 95 | State, 96 | FormContext = any, 97 | >( 98 | safeAction: HookSafeActionFn, 99 | hookFormResolver: Resolver, FormContext, InferOutputOrDefault>, 100 | props: HookProps & { 101 | actionProps: { 102 | currentState: State; 103 | updateFn: (state: State, input: InferInputOrDefault) => State; 104 | }; 105 | } 106 | ): UseHookFormOptimisticActionHookReturn { 107 | const action = useOptimisticAction(safeAction, props.actionProps); 108 | 109 | const { hookFormValidationErrors } = useHookFormActionErrorMapper( 110 | action.result.validationErrors as ValidationErrors | undefined, 111 | props.errorMapProps 112 | ); 113 | 114 | const form = useForm, FormContext, InferOutputOrDefault>({ 115 | ...props?.formProps, 116 | resolver: hookFormResolver, 117 | errors: hookFormValidationErrors, 118 | }); 119 | 120 | const handleSubmitWithAction = form.handleSubmit(action.executeAsync); 121 | 122 | const resetFormAndAction = () => { 123 | form.reset(); 124 | action.reset(); 125 | }; 126 | 127 | return { 128 | action, 129 | form, 130 | handleSubmitWithAction, 131 | resetFormAndAction, 132 | }; 133 | } 134 | 135 | export type * from "./hooks.types"; 136 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 5 | 6 | This adapter offers a way to seamlessly integrate [next-safe-action](https://github.com/TheEdoRan/next-safe-action) with [react-hook-form](https://github.com/react-hook-form/react-hook-form). 7 | 8 | # Requirements 9 | 10 | - React >= `18.2.0` 11 | - Next.js >= `14.0.0` 12 | - next-safe-action >= `7.6.0` 13 | - react-hook-form >= `7.0.0` 14 | - @hookform/resolvers >= `3.0.0` 15 | 16 | # Installation 17 | 18 | ```sh 19 | npm i next-safe-action react-hook-form @hookform/resolvers @next-safe-action/adapter-react-hook-form 20 | ``` 21 | 22 | # Example 23 | 24 | The best way to learn how to use this adapter is to take a look at the examples. The [app](https://github.com/next-safe-action/adapter-react-hook-form/tree/main/apps/example) in this repository shows you how to use the `useHookFormAction` and `useHookFormOptimisticAction` hooks: 25 | 26 | - [`useHookFormAction` example \(login\)](https://github.com/next-safe-action/adapter-react-hook-form/tree/main/apps/example/src/app/login) 27 | - [`useHookFormOptimisticAction` example \(todos\)](https://github.com/next-safe-action/adapter-react-hook-form/tree/main/apps/example/src/app/todos) 28 | 29 | # Hooks 30 | 31 | ## `useHookFormAction` 32 | 33 | This hook is a wrapper around `useAction` from next-safe-action and `useForm` from react-hook-form that makes it much easier to use safe actions with react-hook-form. It also maps validation errors to `FieldErrors` compatible with react-hook-form. 34 | 35 | ### Example (login) 36 | 37 | 1. First of all, we need a shared file to store our validation schema(s). In this case, the `loginSchema` Zod validator is exported from `validation.ts`: 38 | 39 | ```ts 40 | import { z } from "zod"; 41 | 42 | export const loginSchema = z.object({ 43 | username: z.string().min(3).max(30), 44 | password: z.string().min(8).max(100), 45 | }); 46 | ``` 47 | 48 | 2. Then, we can create our login action using `loginSchema`: 49 | 50 | ```ts 51 | "use server"; 52 | 53 | import { returnValidationErrors } from "next-safe-action"; 54 | import { actionClient } from "@/lib/safe-action"; 55 | import { loginSchema } from "./validation"; 56 | import { checkCredentials } from "@/services/auth"; 57 | 58 | export const loginAction = actionClient.schema(loginSchema).action(async ({ parsedInput }) => { 59 | const valid = await checkCredentials(parsedInput.username, parsedInput.password); 60 | 61 | // If the credentials are invalid, return root validation error. 62 | if (!valid) { 63 | returnValidationErrors(loginSchema, { 64 | _errors: ["Invalid username or password"], 65 | }); 66 | } 67 | 68 | return { 69 | successful: true, 70 | }; 71 | }); 72 | ``` 73 | 74 | 3. Finally, we can use `useHookFormAction` in our Client Component, by passing to it the `loginSchema` and `loginAction` declared above: 75 | 76 | ```tsx 77 | "use client"; 78 | 79 | import { useHookFormAction } from "@next-safe-action/adapter-react-hook-form/hooks"; 80 | import { zodResolver } from "@hookform/resolvers/zod"; 81 | import { loginSchema } from "./validation"; 82 | import { loginAction } from "./login-action"; 83 | 84 | export function LoginForm() { 85 | const { form, action, handleSubmitWithAction, resetFormAndAction } = useHookFormAction( 86 | loginAction, 87 | zodResolver(loginSchema), 88 | { 89 | actionProps: {}, 90 | formProps: {}, 91 | errorMapProps: {}, 92 | } 93 | ); 94 | 95 | return
...
; 96 | } 97 | ``` 98 | 99 | ### Parameters 100 | 101 | - `safeAction`: the safe action (required) 102 | - `hookFormResolver`: a react-hook-form validation resolver (required) 103 | - `props`: props for `useAction`, `useForm` and error mapper (optional) 104 | 105 | ### Return values (object) 106 | 107 | - `form`: the react-hook-form form 108 | - `action`: the next-safe-action action 109 | - `handleSubmitWithAction`: a function that handles form submission by automatically executing the action 110 | - `resetFormAndAction`: a function that resets the form and the action state 111 | 112 | ## `useHookFormOptimisticAction` 113 | 114 | This hook is a wrapper around `useOptimisticAction` from next-safe-action and `useForm` from react-hook-form that makes it much easier to use safe actions with react-hook-form. It also maps validation errors to `FieldErrors` compatible with react-hook-form. 115 | 116 | ### Example (add todo) 117 | 118 | 1. First of all, we need a shared file to store our validation schema(s). In this case, the `addTodoSchema` Zod validator is exported from `validation.ts`: 119 | 120 | ```ts 121 | import { z } from "zod"; 122 | 123 | export const addTodoSchema = z.object({ 124 | newTodo: z.string().min(1).max(200), 125 | }); 126 | ``` 127 | 128 | 2. Then, we can create our add todo action using `addTodoSchema`: 129 | 130 | ```ts 131 | "use server"; 132 | 133 | import { returnValidationErrors } from "next-safe-action"; 134 | import { revalidatePath } from "next/cache"; 135 | import { actionClient } from "@/lib/safe-action"; 136 | import { addTodoSchema } from "./validation"; 137 | import { badWordsCheck } from "@/utils"; 138 | import { saveTodoInDb } from "@/services/db"; 139 | 140 | export const addTodoAction = actionClient.schema(addTodoSchema).action(async ({ parsedInput }) => { 141 | const containsBadWords = badWordsCheck(parsedInput.newTodo); 142 | 143 | // If the todo con 144 | if (containsBadWords) { 145 | returnValidationErrors(addTodoSchema, { 146 | newTodo: { 147 | _errors: ["The todo contains bad words!"], 148 | }, 149 | }); 150 | } 151 | 152 | await saveTodoInDb(parsedInput.newTodo); 153 | revalidatePath("/"); 154 | 155 | return { 156 | newTodo: parsedInput.newTodo, 157 | }; 158 | }); 159 | ``` 160 | 161 | 3. Finally, we can use `useHookFormOptimisticAction` in our Client Component, by passing to it the `addTodoSchema` and `addTodoAction` declared above: 162 | 163 | ```tsx 164 | "use client"; 165 | 166 | import { useHookFormOptimisticAction } from "@next-safe-action/adapter-react-hook-form/hooks"; 167 | import { zodResolver } from "@hookform/resolvers/zod"; 168 | import { addTodoSchema } from "./validation"; 169 | import { addTodoAction } from "./addtodo-action"; 170 | 171 | type Props = { 172 | todos: string[]; 173 | }; 174 | 175 | // Todos are passed from the parent Server Component and updated each time a new todo is added 176 | // thanks to the `revalidatePath` function called inside the action. 177 | export function AddTodoForm({ todos }: Props) { 178 | const { form, action, handleActionSubmit, resetFormAndAction } = useHookFormOptimisticAction( 179 | addTodoAction, 180 | zodResolver(addTodoSchema), 181 | { 182 | actionProps: { 183 | currentState: { 184 | todos, 185 | }, 186 | updateFn: (state, input) => { 187 | return { 188 | todos: [...state.todos, input.newTodo], 189 | }; 190 | }, 191 | }, 192 | formProps: {}, 193 | errorMapProps: {}, 194 | } 195 | ); 196 | 197 | return
; 198 | } 199 | ``` 200 | 201 | ### Parameters 202 | 203 | - `safeAction`: the safe action (required) 204 | - `hookFormResolver`: a react-hook-form validation resolver (required) 205 | - `props`: props for `useOptimisticAction`, `useForm` and error mapper. `actionProps.currentState` and `actionProps.updateFn` are required by the `useOptimisticAction` hook used under the hood, the rest are optional. (required/optional) 206 | 207 | ### Return values (object) 208 | 209 | - `form`: the react-hook-form form 210 | - `action`: the next-safe-action action 211 | - `handleSubmitWithAction`: a function that handles form submission by automatically executing the action 212 | - `resetFormAndAction`: a function that resets the form and the action state 213 | 214 | ## `useHookFormActionErrorMapper` 215 | 216 | For more control over the execution flow, you can use this hook to get back the memoized mapped validation errors of the action. It can be useful for cases when you need to use both `useAction` and `useForm` in your Client Component, for a particular task, or when you want to create custom hooks. 217 | 218 | ### Example (Client Component) 219 | 220 | 1. We'll reuse the `loginSchema` and `loginAction` from the `useHookFormAction` example here. 221 | 222 | 2. Here's how you would use `useHookFormActionErrorMapper` in your Client Component: 223 | 224 | ```tsx 225 | "use client"; 226 | 227 | import { useHookFormActionErrorMapper } from "@next-safe-action/adapter-react-hook-form/hooks"; 228 | import { zodResolver } from "@hookform/resolvers/zod"; 229 | import { loginSchema } from "./validation"; 230 | import { loginAction } from "./login-action"; 231 | import { useAction } from "next-safe-action/hooks"; 232 | import { useForm } from "react-hook-form"; 233 | import { Infer } from "next-safe-action/adapters/types"; 234 | 235 | export function CustomForm() { 236 | const action = useAction(loginAction); 237 | 238 | const { hookFormValidationErrors } = useHookFormActionErrorMapper( 239 | action.result.validationErrors, 240 | { joinBy: "\n" } 241 | ); 242 | 243 | const form = useForm>({ 244 | resolver: zodResolver(loginSchema), 245 | errors: hookFormValidationErrors, 246 | }); 247 | 248 | return
...
; 249 | } 250 | ``` 251 | 252 | ### Parameters 253 | 254 | - `validationErrors`: next-safe-action object of `ValidationErrors`, or `undefined` (required) 255 | - `props`: `joinBy` from `ErrorMapperProps` type. It's used to determine how to join the error messages, if more than one is present in the errors array. It defaults to `" "` (optional) 256 | 257 | ### Return values (object) 258 | 259 | - `hookFormValidationErrors`: object of mapped errors with `FieldErrors` type, compatible with react-hook-form 260 | 261 | # Utilities 262 | 263 | ## `mapToHookFormErrors` 264 | 265 | For more advanced stuff, you can directly use the `mapToHookFormErrors` function that is utilized under the hood to map next-safe-action `ValidationErrors` to react-hook-form compatible `FieldErrors`. 266 | 267 | ### Example 268 | 269 | ```typescript 270 | import { mapToHookFormErrors } from "@next-safe-action/adapter-react-hook-form"; 271 | import { loginAction } from "./login-action"; 272 | import type { loginSchema } from "./validation"; 273 | 274 | async function advancedStuff() { 275 | const result = await loginAction({ username: "foo", password: "bar" }); 276 | const hookFormValidationErrors = mapToHookFormErrors(result?.validationErrors, { joinBy: "\n" }); 277 | 278 | // Do something with `hookFormValidationErrors`... 279 | } 280 | ``` 281 | 282 | ### Parameters 283 | 284 | - `validationErrors`: next-safe-action object of `ValidationErrors`, or `undefined` (required) 285 | - `props`: `joinBy` from `ErrorMapperProps` type. It's used to determine how to join the error messages, if more than one is present in the errors array. It defaults to `" "` (optional) 286 | 287 | ### Return value 288 | 289 | - mapped errors: object of mapped errors with `FieldErrors` type, compatible with react-hook-form 290 | 291 | # Types 292 | 293 | ## `/` 294 | 295 | ### `ErrorMapperProps` 296 | 297 | Props for `mapToHookFormErrors`. Also used by the hooks. 298 | 299 | ```typescript 300 | export type ErrorMapperProps = { 301 | joinBy?: string; 302 | }; 303 | ``` 304 | 305 | ## `/hooks` 306 | 307 | ### `HookProps` 308 | 309 | Optional props for `useHookFormAction` and `useHookFormOptimisticAction`. 310 | 311 | ```typescript 312 | export type HookProps = { 313 | errorMapProps?: ErrorMapperProps; 314 | actionProps?: HookCallbacks; 315 | formProps?: Omit, FormContext, InferOutputOrDefault>, "resolver">; 316 | }; 317 | ``` 318 | 319 | ### `UseHookFormActionHookReturn` 320 | 321 | Type of the return object of the `useHookFormAction` hook. 322 | 323 | ```typescript 324 | export type UseHookFormActionHookReturn< 325 | ServerError, 326 | S extends StandardSchemaV1 | undefined, 327 | CVE, 328 | Data, 329 | FormContext = any, 330 | > = { 331 | action: UseActionHookReturn; 332 | form: UseFormReturn, FormContext, InferOutputOrDefault>; 333 | handleSubmitWithAction: (e?: React.BaseSyntheticEvent) => Promise; 334 | resetFormAndAction: () => void; 335 | }; 336 | ``` 337 | 338 | ### `UseHookFormOptimisticActionHookReturn` 339 | 340 | Type of the return object of the `useHookFormOptimisticAction` hook. 341 | 342 | ```typescript 343 | export type UseHookFormOptimisticActionHookReturn< 344 | ServerError, 345 | S extends StandardSchemaV1 | undefined, 346 | CVE, 347 | Data, 348 | State, 349 | FormContext = any, 350 | > = Omit, "action"> & { 351 | action: UseOptimisticActionHookReturn; 352 | }; 353 | ``` 354 | 355 | ## Infer types 356 | 357 | You can use these utility types exported from the `/hooks` path to infer the return types of the hooks. 358 | 359 | ### `InferUseHookFormActionHookReturn` 360 | 361 | Infer the type of the return object of the `useHookFormAction` hook. 362 | 363 | ```typescript 364 | export type InferUseHookFormActionHookReturn = 365 | T extends SafeActionFn< 366 | infer ServerError, 367 | infer S extends Schema | undefined, 368 | infer BAS extends readonly Schema[], 369 | infer CVE, 370 | infer CBAVE, 371 | infer Data 372 | > 373 | ? UseHookFormActionHookReturn 374 | : never; 375 | ``` 376 | 377 | ### `InferUseHookFormOptimisticActionHookReturn` 378 | 379 | Infer the type of the return object of the `useHookFormOptimisticAction` hook. 380 | 381 | ```typescript 382 | export type InferUseHookFormOptimisticActionHookReturn = 383 | T extends SafeActionFn< 384 | infer ServerError, 385 | infer S extends Schema | undefined, 386 | infer BAS extends readonly Schema[], 387 | infer CVE, 388 | infer CBAVE, 389 | infer Data 390 | > 391 | ? UseHookFormOptimisticActionHookReturn 392 | : never; 393 | ``` 394 | 395 | # License 396 | 397 | This project is released under the [MIT License](https://github.com/next-safe-action/adapter-react-hook-form/blob/main/LICENSE). 398 | -------------------------------------------------------------------------------- /packages/adapter-react-hook-form/README.md: -------------------------------------------------------------------------------- 1 | 5 | 6 | This adapter offers a way to seamlessly integrate [next-safe-action](https://github.com/TheEdoRan/next-safe-action) with [react-hook-form](https://github.com/react-hook-form/react-hook-form). 7 | 8 | # Requirements 9 | 10 | - React >= `18.2.0` 11 | - Next.js >= `14.0.0` 12 | - next-safe-action >= `7.6.0` 13 | - react-hook-form >= `7.0.0` 14 | - @hookform/resolvers >= `3.0.0` 15 | 16 | # Installation 17 | 18 | ```sh 19 | npm i next-safe-action react-hook-form @hookform/resolvers @next-safe-action/adapter-react-hook-form 20 | ``` 21 | 22 | # Example 23 | 24 | The best way to learn how to use this adapter is to take a look at the examples. The [app](https://github.com/next-safe-action/adapter-react-hook-form/tree/main/apps/example) in this repository shows you how to use the `useHookFormAction` and `useHookFormOptimisticAction` hooks: 25 | 26 | - [`useHookFormAction` example \(login\)](https://github.com/next-safe-action/adapter-react-hook-form/tree/main/apps/example/src/app/login) 27 | - [`useHookFormOptimisticAction` example \(todos\)](https://github.com/next-safe-action/adapter-react-hook-form/tree/main/apps/example/src/app/todos) 28 | 29 | # Hooks 30 | 31 | ## `useHookFormAction` 32 | 33 | This hook is a wrapper around `useAction` from next-safe-action and `useForm` from react-hook-form that makes it much easier to use safe actions with react-hook-form. It also maps validation errors to `FieldErrors` compatible with react-hook-form. 34 | 35 | ### Example (login) 36 | 37 | 1. First of all, we need a shared file to store our validation schema(s). In this case, the `loginSchema` Zod validator is exported from `validation.ts`: 38 | 39 | ```ts 40 | import { z } from "zod"; 41 | 42 | export const loginSchema = z.object({ 43 | username: z.string().min(3).max(30), 44 | password: z.string().min(8).max(100), 45 | }); 46 | ``` 47 | 48 | 2. Then, we can create our login action using `loginSchema`: 49 | 50 | ```ts 51 | "use server"; 52 | 53 | import { returnValidationErrors } from "next-safe-action"; 54 | import { actionClient } from "@/lib/safe-action"; 55 | import { loginSchema } from "./validation"; 56 | import { checkCredentials } from "@/services/auth"; 57 | 58 | export const loginAction = actionClient.schema(loginSchema).action(async ({ parsedInput }) => { 59 | const valid = await checkCredentials(parsedInput.username, parsedInput.password); 60 | 61 | // If the credentials are invalid, return root validation error. 62 | if (!valid) { 63 | returnValidationErrors(loginSchema, { 64 | _errors: ["Invalid username or password"], 65 | }); 66 | } 67 | 68 | return { 69 | successful: true, 70 | }; 71 | }); 72 | ``` 73 | 74 | 3. Finally, we can use `useHookFormAction` in our Client Component, by passing to it the `loginSchema` and `loginAction` declared above: 75 | 76 | ```tsx 77 | "use client"; 78 | 79 | import { useHookFormAction } from "@next-safe-action/adapter-react-hook-form/hooks"; 80 | import { zodResolver } from "@hookform/resolvers/zod"; 81 | import { loginSchema } from "./validation"; 82 | import { loginAction } from "./login-action"; 83 | 84 | export function LoginForm() { 85 | const { form, action, handleSubmitWithAction, resetFormAndAction } = useHookFormAction( 86 | loginAction, 87 | zodResolver(loginSchema), 88 | { 89 | actionProps: {}, 90 | formProps: {}, 91 | errorMapProps: {}, 92 | } 93 | ); 94 | 95 | return
...
; 96 | } 97 | ``` 98 | 99 | ### Parameters 100 | 101 | - `safeAction`: the safe action (required) 102 | - `hookFormResolver`: a react-hook-form validation resolver (required) 103 | - `props`: props for `useAction`, `useForm` and error mapper (optional) 104 | 105 | ### Return values (object) 106 | 107 | - `form`: the react-hook-form form 108 | - `action`: the next-safe-action action 109 | - `handleSubmitWithAction`: a function that handles form submission by automatically executing the action 110 | - `resetFormAndAction`: a function that resets the form and the action state 111 | 112 | ## `useHookFormOptimisticAction` 113 | 114 | This hook is a wrapper around `useOptimisticAction` from next-safe-action and `useForm` from react-hook-form that makes it much easier to use safe actions with react-hook-form. It also maps validation errors to `FieldErrors` compatible with react-hook-form. 115 | 116 | ### Example (add todo) 117 | 118 | 1. First of all, we need a shared file to store our validation schema(s). In this case, the `addTodoSchema` Zod validator is exported from `validation.ts`: 119 | 120 | ```ts 121 | import { z } from "zod"; 122 | 123 | export const addTodoSchema = z.object({ 124 | newTodo: z.string().min(1).max(200), 125 | }); 126 | ``` 127 | 128 | 2. Then, we can create our add todo action using `addTodoSchema`: 129 | 130 | ```ts 131 | "use server"; 132 | 133 | import { returnValidationErrors } from "next-safe-action"; 134 | import { revalidatePath } from "next/cache"; 135 | import { actionClient } from "@/lib/safe-action"; 136 | import { addTodoSchema } from "./validation"; 137 | import { badWordsCheck } from "@/utils"; 138 | import { saveTodoInDb } from "@/services/db"; 139 | 140 | export const addTodoAction = actionClient.schema(addTodoSchema).action(async ({ parsedInput }) => { 141 | const containsBadWords = badWordsCheck(parsedInput.newTodo); 142 | 143 | // If the todo con 144 | if (containsBadWords) { 145 | returnValidationErrors(addTodoSchema, { 146 | newTodo: { 147 | _errors: ["The todo contains bad words!"], 148 | }, 149 | }); 150 | } 151 | 152 | await saveTodoInDb(parsedInput.newTodo); 153 | revalidatePath("/"); 154 | 155 | return { 156 | newTodo: parsedInput.newTodo, 157 | }; 158 | }); 159 | ``` 160 | 161 | 3. Finally, we can use `useHookFormOptimisticAction` in our Client Component, by passing to it the `addTodoSchema` and `addTodoAction` declared above: 162 | 163 | ```tsx 164 | "use client"; 165 | 166 | import { useHookFormOptimisticAction } from "@next-safe-action/adapter-react-hook-form/hooks"; 167 | import { zodResolver } from "@hookform/resolvers/zod"; 168 | import { addTodoSchema } from "./validation"; 169 | import { addTodoAction } from "./addtodo-action"; 170 | 171 | type Props = { 172 | todos: string[]; 173 | }; 174 | 175 | // Todos are passed from the parent Server Component and updated each time a new todo is added 176 | // thanks to the `revalidatePath` function called inside the action. 177 | export function AddTodoForm({ todos }: Props) { 178 | const { form, action, handleActionSubmit, resetFormAndAction } = useHookFormOptimisticAction( 179 | addTodoAction, 180 | zodResolver(addTodoSchema), 181 | { 182 | actionProps: { 183 | currentState: { 184 | todos, 185 | }, 186 | updateFn: (state, input) => { 187 | return { 188 | todos: [...state.todos, input.newTodo], 189 | }; 190 | }, 191 | }, 192 | formProps: {}, 193 | errorMapProps: {}, 194 | } 195 | ); 196 | 197 | return
; 198 | } 199 | ``` 200 | 201 | ### Parameters 202 | 203 | - `safeAction`: the safe action (required) 204 | - `hookFormResolver`: a react-hook-form validation resolver (required) 205 | - `props`: props for `useOptimisticAction`, `useForm` and error mapper. `actionProps.currentState` and `actionProps.updateFn` are required by the `useOptimisticAction` hook used under the hood, the rest are optional. (required/optional) 206 | 207 | ### Return values (object) 208 | 209 | - `form`: the react-hook-form form 210 | - `action`: the next-safe-action action 211 | - `handleSubmitWithAction`: a function that handles form submission by automatically executing the action 212 | - `resetFormAndAction`: a function that resets the form and the action state 213 | 214 | ## `useHookFormActionErrorMapper` 215 | 216 | For more control over the execution flow, you can use this hook to get back the memoized mapped validation errors of the action. It can be useful for cases when you need to use both `useAction` and `useForm` in your Client Component, for a particular task, or when you want to create custom hooks. 217 | 218 | ### Example (Client Component) 219 | 220 | 1. We'll reuse the `loginSchema` and `loginAction` from the `useHookFormAction` example here. 221 | 222 | 2. Here's how you would use `useHookFormActionErrorMapper` in your Client Component: 223 | 224 | ```tsx 225 | "use client"; 226 | 227 | import { useHookFormActionErrorMapper } from "@next-safe-action/adapter-react-hook-form/hooks"; 228 | import { zodResolver } from "@hookform/resolvers/zod"; 229 | import { loginSchema } from "./validation"; 230 | import { loginAction } from "./login-action"; 231 | import { useAction } from "next-safe-action/hooks"; 232 | import { useForm } from "react-hook-form"; 233 | import { Infer } from "next-safe-action/adapters/types"; 234 | 235 | export function CustomForm() { 236 | const action = useAction(loginAction); 237 | 238 | const { hookFormValidationErrors } = useHookFormActionErrorMapper( 239 | action.result.validationErrors, 240 | { joinBy: "\n" } 241 | ); 242 | 243 | const form = useForm>({ 244 | resolver: zodResolver(loginSchema), 245 | errors: hookFormValidationErrors, 246 | }); 247 | 248 | return
...
; 249 | } 250 | ``` 251 | 252 | ### Parameters 253 | 254 | - `validationErrors`: next-safe-action object of `ValidationErrors`, or `undefined` (required) 255 | - `props`: `joinBy` from `ErrorMapperProps` type. It's used to determine how to join the error messages, if more than one is present in the errors array. It defaults to `" "` (optional) 256 | 257 | ### Return values (object) 258 | 259 | - `hookFormValidationErrors`: object of mapped errors with `FieldErrors` type, compatible with react-hook-form 260 | 261 | # Utilities 262 | 263 | ## `mapToHookFormErrors` 264 | 265 | For more advanced stuff, you can directly use the `mapToHookFormErrors` function that is utilized under the hood to map next-safe-action `ValidationErrors` to react-hook-form compatible `FieldErrors`. 266 | 267 | ### Example 268 | 269 | ```typescript 270 | import { mapToHookFormErrors } from "@next-safe-action/adapter-react-hook-form"; 271 | import { loginAction } from "./login-action"; 272 | import type { loginSchema } from "./validation"; 273 | 274 | async function advancedStuff() { 275 | const result = await loginAction({ username: "foo", password: "bar" }); 276 | const hookFormValidationErrors = mapToHookFormErrors(result?.validationErrors, { joinBy: "\n" }); 277 | 278 | // Do something with `hookFormValidationErrors`... 279 | } 280 | ``` 281 | 282 | ### Parameters 283 | 284 | - `validationErrors`: next-safe-action object of `ValidationErrors`, or `undefined` (required) 285 | - `props`: `joinBy` from `ErrorMapperProps` type. It's used to determine how to join the error messages, if more than one is present in the errors array. It defaults to `" "` (optional) 286 | 287 | ### Return value 288 | 289 | - mapped errors: object of mapped errors with `FieldErrors` type, compatible with react-hook-form 290 | 291 | # Types 292 | 293 | ## `/` 294 | 295 | ### `ErrorMapperProps` 296 | 297 | Props for `mapToHookFormErrors`. Also used by the hooks. 298 | 299 | ```typescript 300 | export type ErrorMapperProps = { 301 | joinBy?: string; 302 | }; 303 | ``` 304 | 305 | ## `/hooks` 306 | 307 | ### `HookProps` 308 | 309 | Optional props for `useHookFormAction` and `useHookFormOptimisticAction`. 310 | 311 | ```typescript 312 | export type HookProps = { 313 | errorMapProps?: ErrorMapperProps; 314 | actionProps?: HookCallbacks; 315 | formProps?: Omit, FormContext, InferOutputOrDefault>, "resolver">; 316 | }; 317 | ``` 318 | 319 | ### `UseHookFormActionHookReturn` 320 | 321 | Type of the return object of the `useHookFormAction` hook. 322 | 323 | ```typescript 324 | export type UseHookFormActionHookReturn< 325 | ServerError, 326 | S extends StandardSchemaV1 | undefined, 327 | CVE, 328 | Data, 329 | FormContext = any, 330 | > = { 331 | action: UseActionHookReturn; 332 | form: UseFormReturn, FormContext, InferOutputOrDefault>; 333 | handleSubmitWithAction: (e?: React.BaseSyntheticEvent) => Promise; 334 | resetFormAndAction: () => void; 335 | }; 336 | ``` 337 | 338 | ### `UseHookFormOptimisticActionHookReturn` 339 | 340 | Type of the return object of the `useHookFormOptimisticAction` hook. 341 | 342 | ```typescript 343 | export type UseHookFormOptimisticActionHookReturn< 344 | ServerError, 345 | S extends StandardSchemaV1 | undefined, 346 | CVE, 347 | Data, 348 | State, 349 | FormContext = any, 350 | > = Omit, "action"> & { 351 | action: UseOptimisticActionHookReturn; 352 | }; 353 | ``` 354 | 355 | ## Infer types 356 | 357 | You can use these utility types exported from the `/hooks` path to infer the return types of the hooks. 358 | 359 | ### `InferUseHookFormActionHookReturn` 360 | 361 | Infer the type of the return object of the `useHookFormAction` hook. 362 | 363 | ```typescript 364 | export type InferUseHookFormActionHookReturn = 365 | T extends SafeActionFn< 366 | infer ServerError, 367 | infer S extends Schema | undefined, 368 | infer BAS extends readonly Schema[], 369 | infer CVE, 370 | infer CBAVE, 371 | infer Data 372 | > 373 | ? UseHookFormActionHookReturn 374 | : never; 375 | ``` 376 | 377 | ### `InferUseHookFormOptimisticActionHookReturn` 378 | 379 | Infer the type of the return object of the `useHookFormOptimisticAction` hook. 380 | 381 | ```typescript 382 | export type InferUseHookFormOptimisticActionHookReturn = 383 | T extends SafeActionFn< 384 | infer ServerError, 385 | infer S extends Schema | undefined, 386 | infer BAS extends readonly Schema[], 387 | infer CVE, 388 | infer CBAVE, 389 | infer Data 390 | > 391 | ? UseHookFormOptimisticActionHookReturn 392 | : never; 393 | ``` 394 | 395 | # License 396 | 397 | This project is released under the [MIT License](https://github.com/next-safe-action/adapter-react-hook-form/blob/main/LICENSE). 398 | -------------------------------------------------------------------------------- /apps/example/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@hookform/resolvers': 12 | specifier: ^3.9.0 13 | version: 3.9.0(react-hook-form@7.52.2(react@18.3.1)) 14 | '@next-safe-action/adapter-react-hook-form': 15 | specifier: ^1.0.7 16 | version: 1.0.7(@hookform/resolvers@3.9.0(react-hook-form@7.52.2(react@18.3.1)))(next-safe-action@7.7.0(next@14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.23.8))(next@14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-hook-form@7.52.2(react@18.3.1))(react@18.3.1) 17 | next: 18 | specifier: 14.2.5 19 | version: 14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 20 | next-safe-action: 21 | specifier: ^7.7.0 22 | version: 7.7.0(next@14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.23.8) 23 | react: 24 | specifier: ^18 25 | version: 18.3.1 26 | react-dom: 27 | specifier: ^18 28 | version: 18.3.1(react@18.3.1) 29 | react-hook-form: 30 | specifier: ^7.52.2 31 | version: 7.52.2(react@18.3.1) 32 | zod: 33 | specifier: ^3.23.8 34 | version: 3.23.8 35 | devDependencies: 36 | '@types/node': 37 | specifier: ^20 38 | version: 20.16.0 39 | '@types/react': 40 | specifier: ^18 41 | version: 18.3.3 42 | '@types/react-dom': 43 | specifier: ^18 44 | version: 18.3.0 45 | eslint: 46 | specifier: ^8 47 | version: 8.57.0 48 | eslint-config-next: 49 | specifier: 14.2.5 50 | version: 14.2.5(eslint@8.57.0)(typescript@5.5.4) 51 | postcss: 52 | specifier: ^8 53 | version: 8.4.41 54 | tailwindcss: 55 | specifier: ^3.4.1 56 | version: 3.4.10 57 | typescript: 58 | specifier: ^5 59 | version: 5.5.4 60 | 61 | packages: 62 | 63 | '@alloc/quick-lru@5.2.0': 64 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 65 | engines: {node: '>=10'} 66 | 67 | '@eslint-community/eslint-utils@4.4.0': 68 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 69 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 70 | peerDependencies: 71 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 72 | 73 | '@eslint-community/regexpp@4.11.0': 74 | resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} 75 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 76 | 77 | '@eslint/eslintrc@2.1.4': 78 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} 79 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 80 | 81 | '@eslint/js@8.57.0': 82 | resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} 83 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 84 | 85 | '@hookform/resolvers@3.9.0': 86 | resolution: {integrity: sha512-bU0Gr4EepJ/EQsH/IwEzYLsT/PEj5C0ynLQ4m+GSHS+xKH4TfSelhluTgOaoc4kA5s7eCsQbM4wvZLzELmWzUg==} 87 | peerDependencies: 88 | react-hook-form: ^7.0.0 89 | 90 | '@humanwhocodes/config-array@0.11.14': 91 | resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} 92 | engines: {node: '>=10.10.0'} 93 | deprecated: Use @eslint/config-array instead 94 | 95 | '@humanwhocodes/module-importer@1.0.1': 96 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 97 | engines: {node: '>=12.22'} 98 | 99 | '@humanwhocodes/object-schema@2.0.3': 100 | resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} 101 | deprecated: Use @eslint/object-schema instead 102 | 103 | '@isaacs/cliui@8.0.2': 104 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 105 | engines: {node: '>=12'} 106 | 107 | '@jridgewell/gen-mapping@0.3.5': 108 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 109 | engines: {node: '>=6.0.0'} 110 | 111 | '@jridgewell/resolve-uri@3.1.2': 112 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 113 | engines: {node: '>=6.0.0'} 114 | 115 | '@jridgewell/set-array@1.2.1': 116 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 117 | engines: {node: '>=6.0.0'} 118 | 119 | '@jridgewell/sourcemap-codec@1.5.0': 120 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 121 | 122 | '@jridgewell/trace-mapping@0.3.25': 123 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 124 | 125 | '@next-safe-action/adapter-react-hook-form@1.0.7': 126 | resolution: {integrity: sha512-lOJQTx8SpMpBiymJO4IHY+dI6mJ3wk0qhKSyb7I8RF2emAkiq6llqlp/va7Cm7Zk9lkRTMQ+0w//xlKPKFj5kg==} 127 | engines: {node: '>=18.17'} 128 | peerDependencies: 129 | '@hookform/resolvers': '>= 3.0.0' 130 | next: '>= 14.0.0' 131 | next-safe-action: '>= 7.6.0' 132 | react: '>= 18.2.0' 133 | react-dom: '>= 18.2.0' 134 | react-hook-form: '>= 7.0.0' 135 | 136 | '@next/env@14.2.5': 137 | resolution: {integrity: sha512-/zZGkrTOsraVfYjGP8uM0p6r0BDT6xWpkjdVbcz66PJVSpwXX3yNiRycxAuDfBKGWBrZBXRuK/YVlkNgxHGwmA==} 138 | 139 | '@next/eslint-plugin-next@14.2.5': 140 | resolution: {integrity: sha512-LY3btOpPh+OTIpviNojDpUdIbHW9j0JBYBjsIp8IxtDFfYFyORvw3yNq6N231FVqQA7n7lwaf7xHbVJlA1ED7g==} 141 | 142 | '@next/swc-darwin-arm64@14.2.5': 143 | resolution: {integrity: sha512-/9zVxJ+K9lrzSGli1///ujyRfon/ZneeZ+v4ptpiPoOU+GKZnm8Wj8ELWU1Pm7GHltYRBklmXMTUqM/DqQ99FQ==} 144 | engines: {node: '>= 10'} 145 | cpu: [arm64] 146 | os: [darwin] 147 | 148 | '@next/swc-darwin-x64@14.2.5': 149 | resolution: {integrity: sha512-vXHOPCwfDe9qLDuq7U1OYM2wUY+KQ4Ex6ozwsKxp26BlJ6XXbHleOUldenM67JRyBfVjv371oneEvYd3H2gNSA==} 150 | engines: {node: '>= 10'} 151 | cpu: [x64] 152 | os: [darwin] 153 | 154 | '@next/swc-linux-arm64-gnu@14.2.5': 155 | resolution: {integrity: sha512-vlhB8wI+lj8q1ExFW8lbWutA4M2ZazQNvMWuEDqZcuJJc78iUnLdPPunBPX8rC4IgT6lIx/adB+Cwrl99MzNaA==} 156 | engines: {node: '>= 10'} 157 | cpu: [arm64] 158 | os: [linux] 159 | 160 | '@next/swc-linux-arm64-musl@14.2.5': 161 | resolution: {integrity: sha512-NpDB9NUR2t0hXzJJwQSGu1IAOYybsfeB+LxpGsXrRIb7QOrYmidJz3shzY8cM6+rO4Aojuef0N/PEaX18pi9OA==} 162 | engines: {node: '>= 10'} 163 | cpu: [arm64] 164 | os: [linux] 165 | 166 | '@next/swc-linux-x64-gnu@14.2.5': 167 | resolution: {integrity: sha512-8XFikMSxWleYNryWIjiCX+gU201YS+erTUidKdyOVYi5qUQo/gRxv/3N1oZFCgqpesN6FPeqGM72Zve+nReVXQ==} 168 | engines: {node: '>= 10'} 169 | cpu: [x64] 170 | os: [linux] 171 | 172 | '@next/swc-linux-x64-musl@14.2.5': 173 | resolution: {integrity: sha512-6QLwi7RaYiQDcRDSU/os40r5o06b5ue7Jsk5JgdRBGGp8l37RZEh9JsLSM8QF0YDsgcosSeHjglgqi25+m04IQ==} 174 | engines: {node: '>= 10'} 175 | cpu: [x64] 176 | os: [linux] 177 | 178 | '@next/swc-win32-arm64-msvc@14.2.5': 179 | resolution: {integrity: sha512-1GpG2VhbspO+aYoMOQPQiqc/tG3LzmsdBH0LhnDS3JrtDx2QmzXe0B6mSZZiN3Bq7IOMXxv1nlsjzoS1+9mzZw==} 180 | engines: {node: '>= 10'} 181 | cpu: [arm64] 182 | os: [win32] 183 | 184 | '@next/swc-win32-ia32-msvc@14.2.5': 185 | resolution: {integrity: sha512-Igh9ZlxwvCDsu6438FXlQTHlRno4gFpJzqPjSIBZooD22tKeI4fE/YMRoHVJHmrQ2P5YL1DoZ0qaOKkbeFWeMg==} 186 | engines: {node: '>= 10'} 187 | cpu: [ia32] 188 | os: [win32] 189 | 190 | '@next/swc-win32-x64-msvc@14.2.5': 191 | resolution: {integrity: sha512-tEQ7oinq1/CjSG9uSTerca3v4AZ+dFa+4Yu6ihaG8Ud8ddqLQgFGcnwYls13H5X5CPDPZJdYxyeMui6muOLd4g==} 192 | engines: {node: '>= 10'} 193 | cpu: [x64] 194 | os: [win32] 195 | 196 | '@nodelib/fs.scandir@2.1.5': 197 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 198 | engines: {node: '>= 8'} 199 | 200 | '@nodelib/fs.stat@2.0.5': 201 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 202 | engines: {node: '>= 8'} 203 | 204 | '@nodelib/fs.walk@1.2.8': 205 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 206 | engines: {node: '>= 8'} 207 | 208 | '@pkgjs/parseargs@0.11.0': 209 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 210 | engines: {node: '>=14'} 211 | 212 | '@rushstack/eslint-patch@1.10.4': 213 | resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} 214 | 215 | '@swc/counter@0.1.3': 216 | resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} 217 | 218 | '@swc/helpers@0.5.5': 219 | resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} 220 | 221 | '@types/json5@0.0.29': 222 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} 223 | 224 | '@types/node@20.16.0': 225 | resolution: {integrity: sha512-vDxceJcoZhIVh67S568bm1UGZO0DX0hpplJZxzeXMKwIPLn190ec5RRxQ69BKhX44SUGIxxgMdDY557lGLKprQ==} 226 | 227 | '@types/prop-types@15.7.12': 228 | resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} 229 | 230 | '@types/react-dom@18.3.0': 231 | resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} 232 | 233 | '@types/react@18.3.3': 234 | resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} 235 | 236 | '@typescript-eslint/parser@7.2.0': 237 | resolution: {integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==} 238 | engines: {node: ^16.0.0 || >=18.0.0} 239 | peerDependencies: 240 | eslint: ^8.56.0 241 | typescript: '*' 242 | peerDependenciesMeta: 243 | typescript: 244 | optional: true 245 | 246 | '@typescript-eslint/scope-manager@7.2.0': 247 | resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==} 248 | engines: {node: ^16.0.0 || >=18.0.0} 249 | 250 | '@typescript-eslint/types@7.2.0': 251 | resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==} 252 | engines: {node: ^16.0.0 || >=18.0.0} 253 | 254 | '@typescript-eslint/typescript-estree@7.2.0': 255 | resolution: {integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==} 256 | engines: {node: ^16.0.0 || >=18.0.0} 257 | peerDependencies: 258 | typescript: '*' 259 | peerDependenciesMeta: 260 | typescript: 261 | optional: true 262 | 263 | '@typescript-eslint/visitor-keys@7.2.0': 264 | resolution: {integrity: sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==} 265 | engines: {node: ^16.0.0 || >=18.0.0} 266 | 267 | '@ungap/structured-clone@1.2.0': 268 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 269 | 270 | acorn-jsx@5.3.2: 271 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 272 | peerDependencies: 273 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 274 | 275 | acorn@8.12.1: 276 | resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} 277 | engines: {node: '>=0.4.0'} 278 | hasBin: true 279 | 280 | ajv@6.12.6: 281 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 282 | 283 | ansi-regex@5.0.1: 284 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 285 | engines: {node: '>=8'} 286 | 287 | ansi-regex@6.0.1: 288 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} 289 | engines: {node: '>=12'} 290 | 291 | ansi-styles@4.3.0: 292 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 293 | engines: {node: '>=8'} 294 | 295 | ansi-styles@6.2.1: 296 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 297 | engines: {node: '>=12'} 298 | 299 | any-promise@1.3.0: 300 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 301 | 302 | anymatch@3.1.3: 303 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 304 | engines: {node: '>= 8'} 305 | 306 | arg@5.0.2: 307 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 308 | 309 | argparse@2.0.1: 310 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 311 | 312 | aria-query@5.1.3: 313 | resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} 314 | 315 | array-buffer-byte-length@1.0.1: 316 | resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} 317 | engines: {node: '>= 0.4'} 318 | 319 | array-includes@3.1.8: 320 | resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} 321 | engines: {node: '>= 0.4'} 322 | 323 | array-union@2.1.0: 324 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 325 | engines: {node: '>=8'} 326 | 327 | array.prototype.findlast@1.2.5: 328 | resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} 329 | engines: {node: '>= 0.4'} 330 | 331 | array.prototype.findlastindex@1.2.5: 332 | resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} 333 | engines: {node: '>= 0.4'} 334 | 335 | array.prototype.flat@1.3.2: 336 | resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} 337 | engines: {node: '>= 0.4'} 338 | 339 | array.prototype.flatmap@1.3.2: 340 | resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} 341 | engines: {node: '>= 0.4'} 342 | 343 | array.prototype.tosorted@1.1.4: 344 | resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} 345 | engines: {node: '>= 0.4'} 346 | 347 | arraybuffer.prototype.slice@1.0.3: 348 | resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} 349 | engines: {node: '>= 0.4'} 350 | 351 | ast-types-flow@0.0.8: 352 | resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} 353 | 354 | available-typed-arrays@1.0.7: 355 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 356 | engines: {node: '>= 0.4'} 357 | 358 | axe-core@4.10.0: 359 | resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==} 360 | engines: {node: '>=4'} 361 | 362 | axobject-query@3.1.1: 363 | resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==} 364 | 365 | balanced-match@1.0.2: 366 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 367 | 368 | binary-extensions@2.3.0: 369 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 370 | engines: {node: '>=8'} 371 | 372 | brace-expansion@1.1.11: 373 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 374 | 375 | brace-expansion@2.0.1: 376 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 377 | 378 | braces@3.0.3: 379 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 380 | engines: {node: '>=8'} 381 | 382 | busboy@1.6.0: 383 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} 384 | engines: {node: '>=10.16.0'} 385 | 386 | call-bind@1.0.7: 387 | resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} 388 | engines: {node: '>= 0.4'} 389 | 390 | callsites@3.1.0: 391 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 392 | engines: {node: '>=6'} 393 | 394 | camelcase-css@2.0.1: 395 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 396 | engines: {node: '>= 6'} 397 | 398 | caniuse-lite@1.0.30001651: 399 | resolution: {integrity: sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==} 400 | 401 | chalk@4.1.2: 402 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 403 | engines: {node: '>=10'} 404 | 405 | chokidar@3.6.0: 406 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 407 | engines: {node: '>= 8.10.0'} 408 | 409 | client-only@0.0.1: 410 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} 411 | 412 | color-convert@2.0.1: 413 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 414 | engines: {node: '>=7.0.0'} 415 | 416 | color-name@1.1.4: 417 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 418 | 419 | commander@4.1.1: 420 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 421 | engines: {node: '>= 6'} 422 | 423 | concat-map@0.0.1: 424 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 425 | 426 | cross-spawn@7.0.3: 427 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 428 | engines: {node: '>= 8'} 429 | 430 | cssesc@3.0.0: 431 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 432 | engines: {node: '>=4'} 433 | hasBin: true 434 | 435 | csstype@3.1.3: 436 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 437 | 438 | damerau-levenshtein@1.0.8: 439 | resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} 440 | 441 | data-view-buffer@1.0.1: 442 | resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} 443 | engines: {node: '>= 0.4'} 444 | 445 | data-view-byte-length@1.0.1: 446 | resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} 447 | engines: {node: '>= 0.4'} 448 | 449 | data-view-byte-offset@1.0.0: 450 | resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} 451 | engines: {node: '>= 0.4'} 452 | 453 | debug@3.2.7: 454 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 455 | peerDependencies: 456 | supports-color: '*' 457 | peerDependenciesMeta: 458 | supports-color: 459 | optional: true 460 | 461 | debug@4.3.6: 462 | resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} 463 | engines: {node: '>=6.0'} 464 | peerDependencies: 465 | supports-color: '*' 466 | peerDependenciesMeta: 467 | supports-color: 468 | optional: true 469 | 470 | deep-equal@2.2.3: 471 | resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} 472 | engines: {node: '>= 0.4'} 473 | 474 | deep-is@0.1.4: 475 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 476 | 477 | define-data-property@1.1.4: 478 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 479 | engines: {node: '>= 0.4'} 480 | 481 | define-properties@1.2.1: 482 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 483 | engines: {node: '>= 0.4'} 484 | 485 | didyoumean@1.2.2: 486 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 487 | 488 | dir-glob@3.0.1: 489 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 490 | engines: {node: '>=8'} 491 | 492 | dlv@1.1.3: 493 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 494 | 495 | doctrine@2.1.0: 496 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 497 | engines: {node: '>=0.10.0'} 498 | 499 | doctrine@3.0.0: 500 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 501 | engines: {node: '>=6.0.0'} 502 | 503 | eastasianwidth@0.2.0: 504 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 505 | 506 | emoji-regex@8.0.0: 507 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 508 | 509 | emoji-regex@9.2.2: 510 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 511 | 512 | enhanced-resolve@5.17.1: 513 | resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} 514 | engines: {node: '>=10.13.0'} 515 | 516 | es-abstract@1.23.3: 517 | resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} 518 | engines: {node: '>= 0.4'} 519 | 520 | es-define-property@1.0.0: 521 | resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} 522 | engines: {node: '>= 0.4'} 523 | 524 | es-errors@1.3.0: 525 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 526 | engines: {node: '>= 0.4'} 527 | 528 | es-get-iterator@1.1.3: 529 | resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} 530 | 531 | es-iterator-helpers@1.0.19: 532 | resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} 533 | engines: {node: '>= 0.4'} 534 | 535 | es-object-atoms@1.0.0: 536 | resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} 537 | engines: {node: '>= 0.4'} 538 | 539 | es-set-tostringtag@2.0.3: 540 | resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} 541 | engines: {node: '>= 0.4'} 542 | 543 | es-shim-unscopables@1.0.2: 544 | resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} 545 | 546 | es-to-primitive@1.2.1: 547 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 548 | engines: {node: '>= 0.4'} 549 | 550 | escape-string-regexp@4.0.0: 551 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 552 | engines: {node: '>=10'} 553 | 554 | eslint-config-next@14.2.5: 555 | resolution: {integrity: sha512-zogs9zlOiZ7ka+wgUnmcM0KBEDjo4Jis7kxN1jvC0N4wynQ2MIx/KBkg4mVF63J5EK4W0QMCn7xO3vNisjaAoA==} 556 | peerDependencies: 557 | eslint: ^7.23.0 || ^8.0.0 558 | typescript: '>=3.3.1' 559 | peerDependenciesMeta: 560 | typescript: 561 | optional: true 562 | 563 | eslint-import-resolver-node@0.3.9: 564 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} 565 | 566 | eslint-import-resolver-typescript@3.6.1: 567 | resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} 568 | engines: {node: ^14.18.0 || >=16.0.0} 569 | peerDependencies: 570 | eslint: '*' 571 | eslint-plugin-import: '*' 572 | 573 | eslint-module-utils@2.8.1: 574 | resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} 575 | engines: {node: '>=4'} 576 | peerDependencies: 577 | '@typescript-eslint/parser': '*' 578 | eslint: '*' 579 | eslint-import-resolver-node: '*' 580 | eslint-import-resolver-typescript: '*' 581 | eslint-import-resolver-webpack: '*' 582 | peerDependenciesMeta: 583 | '@typescript-eslint/parser': 584 | optional: true 585 | eslint: 586 | optional: true 587 | eslint-import-resolver-node: 588 | optional: true 589 | eslint-import-resolver-typescript: 590 | optional: true 591 | eslint-import-resolver-webpack: 592 | optional: true 593 | 594 | eslint-plugin-import@2.29.1: 595 | resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} 596 | engines: {node: '>=4'} 597 | peerDependencies: 598 | '@typescript-eslint/parser': '*' 599 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 600 | peerDependenciesMeta: 601 | '@typescript-eslint/parser': 602 | optional: true 603 | 604 | eslint-plugin-jsx-a11y@6.9.0: 605 | resolution: {integrity: sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==} 606 | engines: {node: '>=4.0'} 607 | peerDependencies: 608 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 609 | 610 | eslint-plugin-react-hooks@4.6.2: 611 | resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} 612 | engines: {node: '>=10'} 613 | peerDependencies: 614 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 615 | 616 | eslint-plugin-react@7.35.0: 617 | resolution: {integrity: sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==} 618 | engines: {node: '>=4'} 619 | peerDependencies: 620 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 621 | 622 | eslint-scope@7.2.2: 623 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 624 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 625 | 626 | eslint-visitor-keys@3.4.3: 627 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 628 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 629 | 630 | eslint@8.57.0: 631 | resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} 632 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 633 | hasBin: true 634 | 635 | espree@9.6.1: 636 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 637 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 638 | 639 | esquery@1.6.0: 640 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 641 | engines: {node: '>=0.10'} 642 | 643 | esrecurse@4.3.0: 644 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 645 | engines: {node: '>=4.0'} 646 | 647 | estraverse@5.3.0: 648 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 649 | engines: {node: '>=4.0'} 650 | 651 | esutils@2.0.3: 652 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 653 | engines: {node: '>=0.10.0'} 654 | 655 | fast-deep-equal@3.1.3: 656 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 657 | 658 | fast-glob@3.3.2: 659 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 660 | engines: {node: '>=8.6.0'} 661 | 662 | fast-json-stable-stringify@2.1.0: 663 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 664 | 665 | fast-levenshtein@2.0.6: 666 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 667 | 668 | fastq@1.17.1: 669 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 670 | 671 | file-entry-cache@6.0.1: 672 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 673 | engines: {node: ^10.12.0 || >=12.0.0} 674 | 675 | fill-range@7.1.1: 676 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 677 | engines: {node: '>=8'} 678 | 679 | find-up@5.0.0: 680 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 681 | engines: {node: '>=10'} 682 | 683 | flat-cache@3.2.0: 684 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 685 | engines: {node: ^10.12.0 || >=12.0.0} 686 | 687 | flatted@3.3.1: 688 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} 689 | 690 | for-each@0.3.3: 691 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 692 | 693 | foreground-child@3.3.0: 694 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} 695 | engines: {node: '>=14'} 696 | 697 | fs.realpath@1.0.0: 698 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 699 | 700 | fsevents@2.3.3: 701 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 702 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 703 | os: [darwin] 704 | 705 | function-bind@1.1.2: 706 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 707 | 708 | function.prototype.name@1.1.6: 709 | resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} 710 | engines: {node: '>= 0.4'} 711 | 712 | functions-have-names@1.2.3: 713 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 714 | 715 | get-intrinsic@1.2.4: 716 | resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} 717 | engines: {node: '>= 0.4'} 718 | 719 | get-symbol-description@1.0.2: 720 | resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} 721 | engines: {node: '>= 0.4'} 722 | 723 | get-tsconfig@4.7.6: 724 | resolution: {integrity: sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==} 725 | 726 | glob-parent@5.1.2: 727 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 728 | engines: {node: '>= 6'} 729 | 730 | glob-parent@6.0.2: 731 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 732 | engines: {node: '>=10.13.0'} 733 | 734 | glob@10.3.10: 735 | resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} 736 | engines: {node: '>=16 || 14 >=14.17'} 737 | hasBin: true 738 | 739 | glob@10.4.5: 740 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 741 | hasBin: true 742 | 743 | glob@7.2.3: 744 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 745 | deprecated: Glob versions prior to v9 are no longer supported 746 | 747 | globals@13.24.0: 748 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} 749 | engines: {node: '>=8'} 750 | 751 | globalthis@1.0.4: 752 | resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} 753 | engines: {node: '>= 0.4'} 754 | 755 | globby@11.1.0: 756 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 757 | engines: {node: '>=10'} 758 | 759 | gopd@1.0.1: 760 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 761 | 762 | graceful-fs@4.2.11: 763 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 764 | 765 | graphemer@1.4.0: 766 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 767 | 768 | has-bigints@1.0.2: 769 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 770 | 771 | has-flag@4.0.0: 772 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 773 | engines: {node: '>=8'} 774 | 775 | has-property-descriptors@1.0.2: 776 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 777 | 778 | has-proto@1.0.3: 779 | resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} 780 | engines: {node: '>= 0.4'} 781 | 782 | has-symbols@1.0.3: 783 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 784 | engines: {node: '>= 0.4'} 785 | 786 | has-tostringtag@1.0.2: 787 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 788 | engines: {node: '>= 0.4'} 789 | 790 | hasown@2.0.2: 791 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 792 | engines: {node: '>= 0.4'} 793 | 794 | ignore@5.3.2: 795 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 796 | engines: {node: '>= 4'} 797 | 798 | import-fresh@3.3.0: 799 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 800 | engines: {node: '>=6'} 801 | 802 | imurmurhash@0.1.4: 803 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 804 | engines: {node: '>=0.8.19'} 805 | 806 | inflight@1.0.6: 807 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 808 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. 809 | 810 | inherits@2.0.4: 811 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 812 | 813 | internal-slot@1.0.7: 814 | resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} 815 | engines: {node: '>= 0.4'} 816 | 817 | is-arguments@1.1.1: 818 | resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} 819 | engines: {node: '>= 0.4'} 820 | 821 | is-array-buffer@3.0.4: 822 | resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} 823 | engines: {node: '>= 0.4'} 824 | 825 | is-async-function@2.0.0: 826 | resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} 827 | engines: {node: '>= 0.4'} 828 | 829 | is-bigint@1.0.4: 830 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 831 | 832 | is-binary-path@2.1.0: 833 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 834 | engines: {node: '>=8'} 835 | 836 | is-boolean-object@1.1.2: 837 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 838 | engines: {node: '>= 0.4'} 839 | 840 | is-callable@1.2.7: 841 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 842 | engines: {node: '>= 0.4'} 843 | 844 | is-core-module@2.15.0: 845 | resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} 846 | engines: {node: '>= 0.4'} 847 | 848 | is-data-view@1.0.1: 849 | resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} 850 | engines: {node: '>= 0.4'} 851 | 852 | is-date-object@1.0.5: 853 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 854 | engines: {node: '>= 0.4'} 855 | 856 | is-extglob@2.1.1: 857 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 858 | engines: {node: '>=0.10.0'} 859 | 860 | is-finalizationregistry@1.0.2: 861 | resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} 862 | 863 | is-fullwidth-code-point@3.0.0: 864 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 865 | engines: {node: '>=8'} 866 | 867 | is-generator-function@1.0.10: 868 | resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} 869 | engines: {node: '>= 0.4'} 870 | 871 | is-glob@4.0.3: 872 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 873 | engines: {node: '>=0.10.0'} 874 | 875 | is-map@2.0.3: 876 | resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} 877 | engines: {node: '>= 0.4'} 878 | 879 | is-negative-zero@2.0.3: 880 | resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} 881 | engines: {node: '>= 0.4'} 882 | 883 | is-number-object@1.0.7: 884 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 885 | engines: {node: '>= 0.4'} 886 | 887 | is-number@7.0.0: 888 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 889 | engines: {node: '>=0.12.0'} 890 | 891 | is-path-inside@3.0.3: 892 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 893 | engines: {node: '>=8'} 894 | 895 | is-regex@1.1.4: 896 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 897 | engines: {node: '>= 0.4'} 898 | 899 | is-set@2.0.3: 900 | resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} 901 | engines: {node: '>= 0.4'} 902 | 903 | is-shared-array-buffer@1.0.3: 904 | resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} 905 | engines: {node: '>= 0.4'} 906 | 907 | is-string@1.0.7: 908 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 909 | engines: {node: '>= 0.4'} 910 | 911 | is-symbol@1.0.4: 912 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 913 | engines: {node: '>= 0.4'} 914 | 915 | is-typed-array@1.1.13: 916 | resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} 917 | engines: {node: '>= 0.4'} 918 | 919 | is-weakmap@2.0.2: 920 | resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} 921 | engines: {node: '>= 0.4'} 922 | 923 | is-weakref@1.0.2: 924 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 925 | 926 | is-weakset@2.0.3: 927 | resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} 928 | engines: {node: '>= 0.4'} 929 | 930 | isarray@2.0.5: 931 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 932 | 933 | isexe@2.0.0: 934 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 935 | 936 | iterator.prototype@1.1.2: 937 | resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} 938 | 939 | jackspeak@2.3.6: 940 | resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} 941 | engines: {node: '>=14'} 942 | 943 | jackspeak@3.4.3: 944 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 945 | 946 | jiti@1.21.6: 947 | resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} 948 | hasBin: true 949 | 950 | js-tokens@4.0.0: 951 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 952 | 953 | js-yaml@4.1.0: 954 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 955 | hasBin: true 956 | 957 | json-buffer@3.0.1: 958 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 959 | 960 | json-schema-traverse@0.4.1: 961 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 962 | 963 | json-stable-stringify-without-jsonify@1.0.1: 964 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 965 | 966 | json5@1.0.2: 967 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} 968 | hasBin: true 969 | 970 | jsx-ast-utils@3.3.5: 971 | resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} 972 | engines: {node: '>=4.0'} 973 | 974 | keyv@4.5.4: 975 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 976 | 977 | language-subtag-registry@0.3.23: 978 | resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} 979 | 980 | language-tags@1.0.9: 981 | resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} 982 | engines: {node: '>=0.10'} 983 | 984 | levn@0.4.1: 985 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 986 | engines: {node: '>= 0.8.0'} 987 | 988 | lilconfig@2.1.0: 989 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 990 | engines: {node: '>=10'} 991 | 992 | lilconfig@3.1.2: 993 | resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} 994 | engines: {node: '>=14'} 995 | 996 | lines-and-columns@1.2.4: 997 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 998 | 999 | locate-path@6.0.0: 1000 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1001 | engines: {node: '>=10'} 1002 | 1003 | lodash.merge@4.6.2: 1004 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1005 | 1006 | loose-envify@1.4.0: 1007 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1008 | hasBin: true 1009 | 1010 | lru-cache@10.4.3: 1011 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 1012 | 1013 | merge2@1.4.1: 1014 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1015 | engines: {node: '>= 8'} 1016 | 1017 | micromatch@4.0.7: 1018 | resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} 1019 | engines: {node: '>=8.6'} 1020 | 1021 | minimatch@3.1.2: 1022 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1023 | 1024 | minimatch@9.0.3: 1025 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} 1026 | engines: {node: '>=16 || 14 >=14.17'} 1027 | 1028 | minimatch@9.0.5: 1029 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1030 | engines: {node: '>=16 || 14 >=14.17'} 1031 | 1032 | minimist@1.2.8: 1033 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1034 | 1035 | minipass@7.1.2: 1036 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 1037 | engines: {node: '>=16 || 14 >=14.17'} 1038 | 1039 | ms@2.1.2: 1040 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1041 | 1042 | ms@2.1.3: 1043 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1044 | 1045 | mz@2.7.0: 1046 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1047 | 1048 | nanoid@3.3.7: 1049 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1050 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1051 | hasBin: true 1052 | 1053 | natural-compare@1.4.0: 1054 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1055 | 1056 | next-safe-action@7.7.0: 1057 | resolution: {integrity: sha512-kkzmySvcsJRC/2dOFhy19NIi/SRZoWZLZqtZGvNpoGrijrc3ZR8F2pmpA8e/u41xwhHfQBar089+cnnOi1Dzuw==} 1058 | engines: {node: '>=18.17'} 1059 | peerDependencies: 1060 | '@sinclair/typebox': '>= 0.33.3' 1061 | next: '>= 14.0.0' 1062 | react: '>= 18.2.0' 1063 | react-dom: '>= 18.2.0' 1064 | valibot: '>= 0.36.0' 1065 | yup: '>= 1.0.0' 1066 | zod: '>= 3.0.0' 1067 | peerDependenciesMeta: 1068 | '@sinclair/typebox': 1069 | optional: true 1070 | valibot: 1071 | optional: true 1072 | yup: 1073 | optional: true 1074 | zod: 1075 | optional: true 1076 | 1077 | next@14.2.5: 1078 | resolution: {integrity: sha512-0f8aRfBVL+mpzfBjYfQuLWh2WyAwtJXCRfkPF4UJ5qd2YwrHczsrSzXU4tRMV0OAxR8ZJZWPFn6uhSC56UTsLA==} 1079 | engines: {node: '>=18.17.0'} 1080 | hasBin: true 1081 | peerDependencies: 1082 | '@opentelemetry/api': ^1.1.0 1083 | '@playwright/test': ^1.41.2 1084 | react: ^18.2.0 1085 | react-dom: ^18.2.0 1086 | sass: ^1.3.0 1087 | peerDependenciesMeta: 1088 | '@opentelemetry/api': 1089 | optional: true 1090 | '@playwright/test': 1091 | optional: true 1092 | sass: 1093 | optional: true 1094 | 1095 | normalize-path@3.0.0: 1096 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1097 | engines: {node: '>=0.10.0'} 1098 | 1099 | object-assign@4.1.1: 1100 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1101 | engines: {node: '>=0.10.0'} 1102 | 1103 | object-hash@3.0.0: 1104 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 1105 | engines: {node: '>= 6'} 1106 | 1107 | object-inspect@1.13.2: 1108 | resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} 1109 | engines: {node: '>= 0.4'} 1110 | 1111 | object-is@1.1.6: 1112 | resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} 1113 | engines: {node: '>= 0.4'} 1114 | 1115 | object-keys@1.1.1: 1116 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1117 | engines: {node: '>= 0.4'} 1118 | 1119 | object.assign@4.1.5: 1120 | resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} 1121 | engines: {node: '>= 0.4'} 1122 | 1123 | object.entries@1.1.8: 1124 | resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} 1125 | engines: {node: '>= 0.4'} 1126 | 1127 | object.fromentries@2.0.8: 1128 | resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} 1129 | engines: {node: '>= 0.4'} 1130 | 1131 | object.groupby@1.0.3: 1132 | resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} 1133 | engines: {node: '>= 0.4'} 1134 | 1135 | object.values@1.2.0: 1136 | resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} 1137 | engines: {node: '>= 0.4'} 1138 | 1139 | once@1.4.0: 1140 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1141 | 1142 | optionator@0.9.4: 1143 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1144 | engines: {node: '>= 0.8.0'} 1145 | 1146 | p-limit@3.1.0: 1147 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1148 | engines: {node: '>=10'} 1149 | 1150 | p-locate@5.0.0: 1151 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1152 | engines: {node: '>=10'} 1153 | 1154 | package-json-from-dist@1.0.0: 1155 | resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} 1156 | 1157 | parent-module@1.0.1: 1158 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1159 | engines: {node: '>=6'} 1160 | 1161 | path-exists@4.0.0: 1162 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1163 | engines: {node: '>=8'} 1164 | 1165 | path-is-absolute@1.0.1: 1166 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1167 | engines: {node: '>=0.10.0'} 1168 | 1169 | path-key@3.1.1: 1170 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1171 | engines: {node: '>=8'} 1172 | 1173 | path-parse@1.0.7: 1174 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1175 | 1176 | path-scurry@1.11.1: 1177 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 1178 | engines: {node: '>=16 || 14 >=14.18'} 1179 | 1180 | path-type@4.0.0: 1181 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1182 | engines: {node: '>=8'} 1183 | 1184 | picocolors@1.0.1: 1185 | resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} 1186 | 1187 | picomatch@2.3.1: 1188 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1189 | engines: {node: '>=8.6'} 1190 | 1191 | pify@2.3.0: 1192 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 1193 | engines: {node: '>=0.10.0'} 1194 | 1195 | pirates@4.0.6: 1196 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 1197 | engines: {node: '>= 6'} 1198 | 1199 | possible-typed-array-names@1.0.0: 1200 | resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} 1201 | engines: {node: '>= 0.4'} 1202 | 1203 | postcss-import@15.1.0: 1204 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 1205 | engines: {node: '>=14.0.0'} 1206 | peerDependencies: 1207 | postcss: ^8.0.0 1208 | 1209 | postcss-js@4.0.1: 1210 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 1211 | engines: {node: ^12 || ^14 || >= 16} 1212 | peerDependencies: 1213 | postcss: ^8.4.21 1214 | 1215 | postcss-load-config@4.0.2: 1216 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} 1217 | engines: {node: '>= 14'} 1218 | peerDependencies: 1219 | postcss: '>=8.0.9' 1220 | ts-node: '>=9.0.0' 1221 | peerDependenciesMeta: 1222 | postcss: 1223 | optional: true 1224 | ts-node: 1225 | optional: true 1226 | 1227 | postcss-nested@6.2.0: 1228 | resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} 1229 | engines: {node: '>=12.0'} 1230 | peerDependencies: 1231 | postcss: ^8.2.14 1232 | 1233 | postcss-selector-parser@6.1.2: 1234 | resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} 1235 | engines: {node: '>=4'} 1236 | 1237 | postcss-value-parser@4.2.0: 1238 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 1239 | 1240 | postcss@8.4.31: 1241 | resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} 1242 | engines: {node: ^10 || ^12 || >=14} 1243 | 1244 | postcss@8.4.41: 1245 | resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==} 1246 | engines: {node: ^10 || ^12 || >=14} 1247 | 1248 | prelude-ls@1.2.1: 1249 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1250 | engines: {node: '>= 0.8.0'} 1251 | 1252 | prop-types@15.8.1: 1253 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} 1254 | 1255 | punycode@2.3.1: 1256 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1257 | engines: {node: '>=6'} 1258 | 1259 | queue-microtask@1.2.3: 1260 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1261 | 1262 | react-dom@18.3.1: 1263 | resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} 1264 | peerDependencies: 1265 | react: ^18.3.1 1266 | 1267 | react-hook-form@7.52.2: 1268 | resolution: {integrity: sha512-pqfPEbERnxxiNMPd0bzmt1tuaPcVccywFDpyk2uV5xCIBphHV5T8SVnX9/o3kplPE1zzKt77+YIoq+EMwJp56A==} 1269 | engines: {node: '>=18.0.0'} 1270 | peerDependencies: 1271 | react: ^16.8.0 || ^17 || ^18 || ^19 1272 | 1273 | react-is@16.13.1: 1274 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 1275 | 1276 | react@18.3.1: 1277 | resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} 1278 | engines: {node: '>=0.10.0'} 1279 | 1280 | read-cache@1.0.0: 1281 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 1282 | 1283 | readdirp@3.6.0: 1284 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1285 | engines: {node: '>=8.10.0'} 1286 | 1287 | reflect.getprototypeof@1.0.6: 1288 | resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} 1289 | engines: {node: '>= 0.4'} 1290 | 1291 | regexp.prototype.flags@1.5.2: 1292 | resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} 1293 | engines: {node: '>= 0.4'} 1294 | 1295 | resolve-from@4.0.0: 1296 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1297 | engines: {node: '>=4'} 1298 | 1299 | resolve-pkg-maps@1.0.0: 1300 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 1301 | 1302 | resolve@1.22.8: 1303 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 1304 | hasBin: true 1305 | 1306 | resolve@2.0.0-next.5: 1307 | resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} 1308 | hasBin: true 1309 | 1310 | reusify@1.0.4: 1311 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1312 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1313 | 1314 | rimraf@3.0.2: 1315 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1316 | deprecated: Rimraf versions prior to v4 are no longer supported 1317 | hasBin: true 1318 | 1319 | run-parallel@1.2.0: 1320 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1321 | 1322 | safe-array-concat@1.1.2: 1323 | resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} 1324 | engines: {node: '>=0.4'} 1325 | 1326 | safe-regex-test@1.0.3: 1327 | resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} 1328 | engines: {node: '>= 0.4'} 1329 | 1330 | scheduler@0.23.2: 1331 | resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} 1332 | 1333 | semver@6.3.1: 1334 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1335 | hasBin: true 1336 | 1337 | semver@7.6.3: 1338 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 1339 | engines: {node: '>=10'} 1340 | hasBin: true 1341 | 1342 | set-function-length@1.2.2: 1343 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} 1344 | engines: {node: '>= 0.4'} 1345 | 1346 | set-function-name@2.0.2: 1347 | resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} 1348 | engines: {node: '>= 0.4'} 1349 | 1350 | shebang-command@2.0.0: 1351 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1352 | engines: {node: '>=8'} 1353 | 1354 | shebang-regex@3.0.0: 1355 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1356 | engines: {node: '>=8'} 1357 | 1358 | side-channel@1.0.6: 1359 | resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} 1360 | engines: {node: '>= 0.4'} 1361 | 1362 | signal-exit@4.1.0: 1363 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1364 | engines: {node: '>=14'} 1365 | 1366 | slash@3.0.0: 1367 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1368 | engines: {node: '>=8'} 1369 | 1370 | source-map-js@1.2.0: 1371 | resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} 1372 | engines: {node: '>=0.10.0'} 1373 | 1374 | stop-iteration-iterator@1.0.0: 1375 | resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} 1376 | engines: {node: '>= 0.4'} 1377 | 1378 | streamsearch@1.1.0: 1379 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} 1380 | engines: {node: '>=10.0.0'} 1381 | 1382 | string-width@4.2.3: 1383 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1384 | engines: {node: '>=8'} 1385 | 1386 | string-width@5.1.2: 1387 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1388 | engines: {node: '>=12'} 1389 | 1390 | string.prototype.includes@2.0.0: 1391 | resolution: {integrity: sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==} 1392 | 1393 | string.prototype.matchall@4.0.11: 1394 | resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} 1395 | engines: {node: '>= 0.4'} 1396 | 1397 | string.prototype.repeat@1.0.0: 1398 | resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} 1399 | 1400 | string.prototype.trim@1.2.9: 1401 | resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} 1402 | engines: {node: '>= 0.4'} 1403 | 1404 | string.prototype.trimend@1.0.8: 1405 | resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} 1406 | 1407 | string.prototype.trimstart@1.0.8: 1408 | resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} 1409 | engines: {node: '>= 0.4'} 1410 | 1411 | strip-ansi@6.0.1: 1412 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1413 | engines: {node: '>=8'} 1414 | 1415 | strip-ansi@7.1.0: 1416 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1417 | engines: {node: '>=12'} 1418 | 1419 | strip-bom@3.0.0: 1420 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 1421 | engines: {node: '>=4'} 1422 | 1423 | strip-json-comments@3.1.1: 1424 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1425 | engines: {node: '>=8'} 1426 | 1427 | styled-jsx@5.1.1: 1428 | resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} 1429 | engines: {node: '>= 12.0.0'} 1430 | peerDependencies: 1431 | '@babel/core': '*' 1432 | babel-plugin-macros: '*' 1433 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' 1434 | peerDependenciesMeta: 1435 | '@babel/core': 1436 | optional: true 1437 | babel-plugin-macros: 1438 | optional: true 1439 | 1440 | sucrase@3.35.0: 1441 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 1442 | engines: {node: '>=16 || 14 >=14.17'} 1443 | hasBin: true 1444 | 1445 | supports-color@7.2.0: 1446 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1447 | engines: {node: '>=8'} 1448 | 1449 | supports-preserve-symlinks-flag@1.0.0: 1450 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1451 | engines: {node: '>= 0.4'} 1452 | 1453 | tailwindcss@3.4.10: 1454 | resolution: {integrity: sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==} 1455 | engines: {node: '>=14.0.0'} 1456 | hasBin: true 1457 | 1458 | tapable@2.2.1: 1459 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} 1460 | engines: {node: '>=6'} 1461 | 1462 | text-table@0.2.0: 1463 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1464 | 1465 | thenify-all@1.6.0: 1466 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 1467 | engines: {node: '>=0.8'} 1468 | 1469 | thenify@3.3.1: 1470 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1471 | 1472 | to-regex-range@5.0.1: 1473 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1474 | engines: {node: '>=8.0'} 1475 | 1476 | ts-api-utils@1.3.0: 1477 | resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} 1478 | engines: {node: '>=16'} 1479 | peerDependencies: 1480 | typescript: '>=4.2.0' 1481 | 1482 | ts-interface-checker@0.1.13: 1483 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 1484 | 1485 | tsconfig-paths@3.15.0: 1486 | resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} 1487 | 1488 | tslib@2.6.3: 1489 | resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} 1490 | 1491 | type-check@0.4.0: 1492 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1493 | engines: {node: '>= 0.8.0'} 1494 | 1495 | type-fest@0.20.2: 1496 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 1497 | engines: {node: '>=10'} 1498 | 1499 | typed-array-buffer@1.0.2: 1500 | resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} 1501 | engines: {node: '>= 0.4'} 1502 | 1503 | typed-array-byte-length@1.0.1: 1504 | resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} 1505 | engines: {node: '>= 0.4'} 1506 | 1507 | typed-array-byte-offset@1.0.2: 1508 | resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} 1509 | engines: {node: '>= 0.4'} 1510 | 1511 | typed-array-length@1.0.6: 1512 | resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} 1513 | engines: {node: '>= 0.4'} 1514 | 1515 | typescript@5.5.4: 1516 | resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} 1517 | engines: {node: '>=14.17'} 1518 | hasBin: true 1519 | 1520 | unbox-primitive@1.0.2: 1521 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 1522 | 1523 | undici-types@6.19.6: 1524 | resolution: {integrity: sha512-e/vggGopEfTKSvj4ihnOLTsqhrKRN3LeO6qSN/GxohhuRv8qH9bNQ4B8W7e/vFL+0XTnmHPB4/kegunZGA4Org==} 1525 | 1526 | uri-js@4.4.1: 1527 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1528 | 1529 | util-deprecate@1.0.2: 1530 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1531 | 1532 | which-boxed-primitive@1.0.2: 1533 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 1534 | 1535 | which-builtin-type@1.1.4: 1536 | resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} 1537 | engines: {node: '>= 0.4'} 1538 | 1539 | which-collection@1.0.2: 1540 | resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} 1541 | engines: {node: '>= 0.4'} 1542 | 1543 | which-typed-array@1.1.15: 1544 | resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} 1545 | engines: {node: '>= 0.4'} 1546 | 1547 | which@2.0.2: 1548 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1549 | engines: {node: '>= 8'} 1550 | hasBin: true 1551 | 1552 | word-wrap@1.2.5: 1553 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1554 | engines: {node: '>=0.10.0'} 1555 | 1556 | wrap-ansi@7.0.0: 1557 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1558 | engines: {node: '>=10'} 1559 | 1560 | wrap-ansi@8.1.0: 1561 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1562 | engines: {node: '>=12'} 1563 | 1564 | wrappy@1.0.2: 1565 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1566 | 1567 | yaml@2.5.0: 1568 | resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} 1569 | engines: {node: '>= 14'} 1570 | hasBin: true 1571 | 1572 | yocto-queue@0.1.0: 1573 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1574 | engines: {node: '>=10'} 1575 | 1576 | zod@3.23.8: 1577 | resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} 1578 | 1579 | snapshots: 1580 | 1581 | '@alloc/quick-lru@5.2.0': {} 1582 | 1583 | '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': 1584 | dependencies: 1585 | eslint: 8.57.0 1586 | eslint-visitor-keys: 3.4.3 1587 | 1588 | '@eslint-community/regexpp@4.11.0': {} 1589 | 1590 | '@eslint/eslintrc@2.1.4': 1591 | dependencies: 1592 | ajv: 6.12.6 1593 | debug: 4.3.6 1594 | espree: 9.6.1 1595 | globals: 13.24.0 1596 | ignore: 5.3.2 1597 | import-fresh: 3.3.0 1598 | js-yaml: 4.1.0 1599 | minimatch: 3.1.2 1600 | strip-json-comments: 3.1.1 1601 | transitivePeerDependencies: 1602 | - supports-color 1603 | 1604 | '@eslint/js@8.57.0': {} 1605 | 1606 | '@hookform/resolvers@3.9.0(react-hook-form@7.52.2(react@18.3.1))': 1607 | dependencies: 1608 | react-hook-form: 7.52.2(react@18.3.1) 1609 | 1610 | '@humanwhocodes/config-array@0.11.14': 1611 | dependencies: 1612 | '@humanwhocodes/object-schema': 2.0.3 1613 | debug: 4.3.6 1614 | minimatch: 3.1.2 1615 | transitivePeerDependencies: 1616 | - supports-color 1617 | 1618 | '@humanwhocodes/module-importer@1.0.1': {} 1619 | 1620 | '@humanwhocodes/object-schema@2.0.3': {} 1621 | 1622 | '@isaacs/cliui@8.0.2': 1623 | dependencies: 1624 | string-width: 5.1.2 1625 | string-width-cjs: string-width@4.2.3 1626 | strip-ansi: 7.1.0 1627 | strip-ansi-cjs: strip-ansi@6.0.1 1628 | wrap-ansi: 8.1.0 1629 | wrap-ansi-cjs: wrap-ansi@7.0.0 1630 | 1631 | '@jridgewell/gen-mapping@0.3.5': 1632 | dependencies: 1633 | '@jridgewell/set-array': 1.2.1 1634 | '@jridgewell/sourcemap-codec': 1.5.0 1635 | '@jridgewell/trace-mapping': 0.3.25 1636 | 1637 | '@jridgewell/resolve-uri@3.1.2': {} 1638 | 1639 | '@jridgewell/set-array@1.2.1': {} 1640 | 1641 | '@jridgewell/sourcemap-codec@1.5.0': {} 1642 | 1643 | '@jridgewell/trace-mapping@0.3.25': 1644 | dependencies: 1645 | '@jridgewell/resolve-uri': 3.1.2 1646 | '@jridgewell/sourcemap-codec': 1.5.0 1647 | 1648 | '@next-safe-action/adapter-react-hook-form@1.0.7(@hookform/resolvers@3.9.0(react-hook-form@7.52.2(react@18.3.1)))(next-safe-action@7.7.0(next@14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.23.8))(next@14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-hook-form@7.52.2(react@18.3.1))(react@18.3.1)': 1649 | dependencies: 1650 | '@hookform/resolvers': 3.9.0(react-hook-form@7.52.2(react@18.3.1)) 1651 | next: 14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1652 | next-safe-action: 7.7.0(next@14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.23.8) 1653 | react: 18.3.1 1654 | react-dom: 18.3.1(react@18.3.1) 1655 | react-hook-form: 7.52.2(react@18.3.1) 1656 | 1657 | '@next/env@14.2.5': {} 1658 | 1659 | '@next/eslint-plugin-next@14.2.5': 1660 | dependencies: 1661 | glob: 10.3.10 1662 | 1663 | '@next/swc-darwin-arm64@14.2.5': 1664 | optional: true 1665 | 1666 | '@next/swc-darwin-x64@14.2.5': 1667 | optional: true 1668 | 1669 | '@next/swc-linux-arm64-gnu@14.2.5': 1670 | optional: true 1671 | 1672 | '@next/swc-linux-arm64-musl@14.2.5': 1673 | optional: true 1674 | 1675 | '@next/swc-linux-x64-gnu@14.2.5': 1676 | optional: true 1677 | 1678 | '@next/swc-linux-x64-musl@14.2.5': 1679 | optional: true 1680 | 1681 | '@next/swc-win32-arm64-msvc@14.2.5': 1682 | optional: true 1683 | 1684 | '@next/swc-win32-ia32-msvc@14.2.5': 1685 | optional: true 1686 | 1687 | '@next/swc-win32-x64-msvc@14.2.5': 1688 | optional: true 1689 | 1690 | '@nodelib/fs.scandir@2.1.5': 1691 | dependencies: 1692 | '@nodelib/fs.stat': 2.0.5 1693 | run-parallel: 1.2.0 1694 | 1695 | '@nodelib/fs.stat@2.0.5': {} 1696 | 1697 | '@nodelib/fs.walk@1.2.8': 1698 | dependencies: 1699 | '@nodelib/fs.scandir': 2.1.5 1700 | fastq: 1.17.1 1701 | 1702 | '@pkgjs/parseargs@0.11.0': 1703 | optional: true 1704 | 1705 | '@rushstack/eslint-patch@1.10.4': {} 1706 | 1707 | '@swc/counter@0.1.3': {} 1708 | 1709 | '@swc/helpers@0.5.5': 1710 | dependencies: 1711 | '@swc/counter': 0.1.3 1712 | tslib: 2.6.3 1713 | 1714 | '@types/json5@0.0.29': {} 1715 | 1716 | '@types/node@20.16.0': 1717 | dependencies: 1718 | undici-types: 6.19.6 1719 | 1720 | '@types/prop-types@15.7.12': {} 1721 | 1722 | '@types/react-dom@18.3.0': 1723 | dependencies: 1724 | '@types/react': 18.3.3 1725 | 1726 | '@types/react@18.3.3': 1727 | dependencies: 1728 | '@types/prop-types': 15.7.12 1729 | csstype: 3.1.3 1730 | 1731 | '@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4)': 1732 | dependencies: 1733 | '@typescript-eslint/scope-manager': 7.2.0 1734 | '@typescript-eslint/types': 7.2.0 1735 | '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.5.4) 1736 | '@typescript-eslint/visitor-keys': 7.2.0 1737 | debug: 4.3.6 1738 | eslint: 8.57.0 1739 | optionalDependencies: 1740 | typescript: 5.5.4 1741 | transitivePeerDependencies: 1742 | - supports-color 1743 | 1744 | '@typescript-eslint/scope-manager@7.2.0': 1745 | dependencies: 1746 | '@typescript-eslint/types': 7.2.0 1747 | '@typescript-eslint/visitor-keys': 7.2.0 1748 | 1749 | '@typescript-eslint/types@7.2.0': {} 1750 | 1751 | '@typescript-eslint/typescript-estree@7.2.0(typescript@5.5.4)': 1752 | dependencies: 1753 | '@typescript-eslint/types': 7.2.0 1754 | '@typescript-eslint/visitor-keys': 7.2.0 1755 | debug: 4.3.6 1756 | globby: 11.1.0 1757 | is-glob: 4.0.3 1758 | minimatch: 9.0.3 1759 | semver: 7.6.3 1760 | ts-api-utils: 1.3.0(typescript@5.5.4) 1761 | optionalDependencies: 1762 | typescript: 5.5.4 1763 | transitivePeerDependencies: 1764 | - supports-color 1765 | 1766 | '@typescript-eslint/visitor-keys@7.2.0': 1767 | dependencies: 1768 | '@typescript-eslint/types': 7.2.0 1769 | eslint-visitor-keys: 3.4.3 1770 | 1771 | '@ungap/structured-clone@1.2.0': {} 1772 | 1773 | acorn-jsx@5.3.2(acorn@8.12.1): 1774 | dependencies: 1775 | acorn: 8.12.1 1776 | 1777 | acorn@8.12.1: {} 1778 | 1779 | ajv@6.12.6: 1780 | dependencies: 1781 | fast-deep-equal: 3.1.3 1782 | fast-json-stable-stringify: 2.1.0 1783 | json-schema-traverse: 0.4.1 1784 | uri-js: 4.4.1 1785 | 1786 | ansi-regex@5.0.1: {} 1787 | 1788 | ansi-regex@6.0.1: {} 1789 | 1790 | ansi-styles@4.3.0: 1791 | dependencies: 1792 | color-convert: 2.0.1 1793 | 1794 | ansi-styles@6.2.1: {} 1795 | 1796 | any-promise@1.3.0: {} 1797 | 1798 | anymatch@3.1.3: 1799 | dependencies: 1800 | normalize-path: 3.0.0 1801 | picomatch: 2.3.1 1802 | 1803 | arg@5.0.2: {} 1804 | 1805 | argparse@2.0.1: {} 1806 | 1807 | aria-query@5.1.3: 1808 | dependencies: 1809 | deep-equal: 2.2.3 1810 | 1811 | array-buffer-byte-length@1.0.1: 1812 | dependencies: 1813 | call-bind: 1.0.7 1814 | is-array-buffer: 3.0.4 1815 | 1816 | array-includes@3.1.8: 1817 | dependencies: 1818 | call-bind: 1.0.7 1819 | define-properties: 1.2.1 1820 | es-abstract: 1.23.3 1821 | es-object-atoms: 1.0.0 1822 | get-intrinsic: 1.2.4 1823 | is-string: 1.0.7 1824 | 1825 | array-union@2.1.0: {} 1826 | 1827 | array.prototype.findlast@1.2.5: 1828 | dependencies: 1829 | call-bind: 1.0.7 1830 | define-properties: 1.2.1 1831 | es-abstract: 1.23.3 1832 | es-errors: 1.3.0 1833 | es-object-atoms: 1.0.0 1834 | es-shim-unscopables: 1.0.2 1835 | 1836 | array.prototype.findlastindex@1.2.5: 1837 | dependencies: 1838 | call-bind: 1.0.7 1839 | define-properties: 1.2.1 1840 | es-abstract: 1.23.3 1841 | es-errors: 1.3.0 1842 | es-object-atoms: 1.0.0 1843 | es-shim-unscopables: 1.0.2 1844 | 1845 | array.prototype.flat@1.3.2: 1846 | dependencies: 1847 | call-bind: 1.0.7 1848 | define-properties: 1.2.1 1849 | es-abstract: 1.23.3 1850 | es-shim-unscopables: 1.0.2 1851 | 1852 | array.prototype.flatmap@1.3.2: 1853 | dependencies: 1854 | call-bind: 1.0.7 1855 | define-properties: 1.2.1 1856 | es-abstract: 1.23.3 1857 | es-shim-unscopables: 1.0.2 1858 | 1859 | array.prototype.tosorted@1.1.4: 1860 | dependencies: 1861 | call-bind: 1.0.7 1862 | define-properties: 1.2.1 1863 | es-abstract: 1.23.3 1864 | es-errors: 1.3.0 1865 | es-shim-unscopables: 1.0.2 1866 | 1867 | arraybuffer.prototype.slice@1.0.3: 1868 | dependencies: 1869 | array-buffer-byte-length: 1.0.1 1870 | call-bind: 1.0.7 1871 | define-properties: 1.2.1 1872 | es-abstract: 1.23.3 1873 | es-errors: 1.3.0 1874 | get-intrinsic: 1.2.4 1875 | is-array-buffer: 3.0.4 1876 | is-shared-array-buffer: 1.0.3 1877 | 1878 | ast-types-flow@0.0.8: {} 1879 | 1880 | available-typed-arrays@1.0.7: 1881 | dependencies: 1882 | possible-typed-array-names: 1.0.0 1883 | 1884 | axe-core@4.10.0: {} 1885 | 1886 | axobject-query@3.1.1: 1887 | dependencies: 1888 | deep-equal: 2.2.3 1889 | 1890 | balanced-match@1.0.2: {} 1891 | 1892 | binary-extensions@2.3.0: {} 1893 | 1894 | brace-expansion@1.1.11: 1895 | dependencies: 1896 | balanced-match: 1.0.2 1897 | concat-map: 0.0.1 1898 | 1899 | brace-expansion@2.0.1: 1900 | dependencies: 1901 | balanced-match: 1.0.2 1902 | 1903 | braces@3.0.3: 1904 | dependencies: 1905 | fill-range: 7.1.1 1906 | 1907 | busboy@1.6.0: 1908 | dependencies: 1909 | streamsearch: 1.1.0 1910 | 1911 | call-bind@1.0.7: 1912 | dependencies: 1913 | es-define-property: 1.0.0 1914 | es-errors: 1.3.0 1915 | function-bind: 1.1.2 1916 | get-intrinsic: 1.2.4 1917 | set-function-length: 1.2.2 1918 | 1919 | callsites@3.1.0: {} 1920 | 1921 | camelcase-css@2.0.1: {} 1922 | 1923 | caniuse-lite@1.0.30001651: {} 1924 | 1925 | chalk@4.1.2: 1926 | dependencies: 1927 | ansi-styles: 4.3.0 1928 | supports-color: 7.2.0 1929 | 1930 | chokidar@3.6.0: 1931 | dependencies: 1932 | anymatch: 3.1.3 1933 | braces: 3.0.3 1934 | glob-parent: 5.1.2 1935 | is-binary-path: 2.1.0 1936 | is-glob: 4.0.3 1937 | normalize-path: 3.0.0 1938 | readdirp: 3.6.0 1939 | optionalDependencies: 1940 | fsevents: 2.3.3 1941 | 1942 | client-only@0.0.1: {} 1943 | 1944 | color-convert@2.0.1: 1945 | dependencies: 1946 | color-name: 1.1.4 1947 | 1948 | color-name@1.1.4: {} 1949 | 1950 | commander@4.1.1: {} 1951 | 1952 | concat-map@0.0.1: {} 1953 | 1954 | cross-spawn@7.0.3: 1955 | dependencies: 1956 | path-key: 3.1.1 1957 | shebang-command: 2.0.0 1958 | which: 2.0.2 1959 | 1960 | cssesc@3.0.0: {} 1961 | 1962 | csstype@3.1.3: {} 1963 | 1964 | damerau-levenshtein@1.0.8: {} 1965 | 1966 | data-view-buffer@1.0.1: 1967 | dependencies: 1968 | call-bind: 1.0.7 1969 | es-errors: 1.3.0 1970 | is-data-view: 1.0.1 1971 | 1972 | data-view-byte-length@1.0.1: 1973 | dependencies: 1974 | call-bind: 1.0.7 1975 | es-errors: 1.3.0 1976 | is-data-view: 1.0.1 1977 | 1978 | data-view-byte-offset@1.0.0: 1979 | dependencies: 1980 | call-bind: 1.0.7 1981 | es-errors: 1.3.0 1982 | is-data-view: 1.0.1 1983 | 1984 | debug@3.2.7: 1985 | dependencies: 1986 | ms: 2.1.3 1987 | 1988 | debug@4.3.6: 1989 | dependencies: 1990 | ms: 2.1.2 1991 | 1992 | deep-equal@2.2.3: 1993 | dependencies: 1994 | array-buffer-byte-length: 1.0.1 1995 | call-bind: 1.0.7 1996 | es-get-iterator: 1.1.3 1997 | get-intrinsic: 1.2.4 1998 | is-arguments: 1.1.1 1999 | is-array-buffer: 3.0.4 2000 | is-date-object: 1.0.5 2001 | is-regex: 1.1.4 2002 | is-shared-array-buffer: 1.0.3 2003 | isarray: 2.0.5 2004 | object-is: 1.1.6 2005 | object-keys: 1.1.1 2006 | object.assign: 4.1.5 2007 | regexp.prototype.flags: 1.5.2 2008 | side-channel: 1.0.6 2009 | which-boxed-primitive: 1.0.2 2010 | which-collection: 1.0.2 2011 | which-typed-array: 1.1.15 2012 | 2013 | deep-is@0.1.4: {} 2014 | 2015 | define-data-property@1.1.4: 2016 | dependencies: 2017 | es-define-property: 1.0.0 2018 | es-errors: 1.3.0 2019 | gopd: 1.0.1 2020 | 2021 | define-properties@1.2.1: 2022 | dependencies: 2023 | define-data-property: 1.1.4 2024 | has-property-descriptors: 1.0.2 2025 | object-keys: 1.1.1 2026 | 2027 | didyoumean@1.2.2: {} 2028 | 2029 | dir-glob@3.0.1: 2030 | dependencies: 2031 | path-type: 4.0.0 2032 | 2033 | dlv@1.1.3: {} 2034 | 2035 | doctrine@2.1.0: 2036 | dependencies: 2037 | esutils: 2.0.3 2038 | 2039 | doctrine@3.0.0: 2040 | dependencies: 2041 | esutils: 2.0.3 2042 | 2043 | eastasianwidth@0.2.0: {} 2044 | 2045 | emoji-regex@8.0.0: {} 2046 | 2047 | emoji-regex@9.2.2: {} 2048 | 2049 | enhanced-resolve@5.17.1: 2050 | dependencies: 2051 | graceful-fs: 4.2.11 2052 | tapable: 2.2.1 2053 | 2054 | es-abstract@1.23.3: 2055 | dependencies: 2056 | array-buffer-byte-length: 1.0.1 2057 | arraybuffer.prototype.slice: 1.0.3 2058 | available-typed-arrays: 1.0.7 2059 | call-bind: 1.0.7 2060 | data-view-buffer: 1.0.1 2061 | data-view-byte-length: 1.0.1 2062 | data-view-byte-offset: 1.0.0 2063 | es-define-property: 1.0.0 2064 | es-errors: 1.3.0 2065 | es-object-atoms: 1.0.0 2066 | es-set-tostringtag: 2.0.3 2067 | es-to-primitive: 1.2.1 2068 | function.prototype.name: 1.1.6 2069 | get-intrinsic: 1.2.4 2070 | get-symbol-description: 1.0.2 2071 | globalthis: 1.0.4 2072 | gopd: 1.0.1 2073 | has-property-descriptors: 1.0.2 2074 | has-proto: 1.0.3 2075 | has-symbols: 1.0.3 2076 | hasown: 2.0.2 2077 | internal-slot: 1.0.7 2078 | is-array-buffer: 3.0.4 2079 | is-callable: 1.2.7 2080 | is-data-view: 1.0.1 2081 | is-negative-zero: 2.0.3 2082 | is-regex: 1.1.4 2083 | is-shared-array-buffer: 1.0.3 2084 | is-string: 1.0.7 2085 | is-typed-array: 1.1.13 2086 | is-weakref: 1.0.2 2087 | object-inspect: 1.13.2 2088 | object-keys: 1.1.1 2089 | object.assign: 4.1.5 2090 | regexp.prototype.flags: 1.5.2 2091 | safe-array-concat: 1.1.2 2092 | safe-regex-test: 1.0.3 2093 | string.prototype.trim: 1.2.9 2094 | string.prototype.trimend: 1.0.8 2095 | string.prototype.trimstart: 1.0.8 2096 | typed-array-buffer: 1.0.2 2097 | typed-array-byte-length: 1.0.1 2098 | typed-array-byte-offset: 1.0.2 2099 | typed-array-length: 1.0.6 2100 | unbox-primitive: 1.0.2 2101 | which-typed-array: 1.1.15 2102 | 2103 | es-define-property@1.0.0: 2104 | dependencies: 2105 | get-intrinsic: 1.2.4 2106 | 2107 | es-errors@1.3.0: {} 2108 | 2109 | es-get-iterator@1.1.3: 2110 | dependencies: 2111 | call-bind: 1.0.7 2112 | get-intrinsic: 1.2.4 2113 | has-symbols: 1.0.3 2114 | is-arguments: 1.1.1 2115 | is-map: 2.0.3 2116 | is-set: 2.0.3 2117 | is-string: 1.0.7 2118 | isarray: 2.0.5 2119 | stop-iteration-iterator: 1.0.0 2120 | 2121 | es-iterator-helpers@1.0.19: 2122 | dependencies: 2123 | call-bind: 1.0.7 2124 | define-properties: 1.2.1 2125 | es-abstract: 1.23.3 2126 | es-errors: 1.3.0 2127 | es-set-tostringtag: 2.0.3 2128 | function-bind: 1.1.2 2129 | get-intrinsic: 1.2.4 2130 | globalthis: 1.0.4 2131 | has-property-descriptors: 1.0.2 2132 | has-proto: 1.0.3 2133 | has-symbols: 1.0.3 2134 | internal-slot: 1.0.7 2135 | iterator.prototype: 1.1.2 2136 | safe-array-concat: 1.1.2 2137 | 2138 | es-object-atoms@1.0.0: 2139 | dependencies: 2140 | es-errors: 1.3.0 2141 | 2142 | es-set-tostringtag@2.0.3: 2143 | dependencies: 2144 | get-intrinsic: 1.2.4 2145 | has-tostringtag: 1.0.2 2146 | hasown: 2.0.2 2147 | 2148 | es-shim-unscopables@1.0.2: 2149 | dependencies: 2150 | hasown: 2.0.2 2151 | 2152 | es-to-primitive@1.2.1: 2153 | dependencies: 2154 | is-callable: 1.2.7 2155 | is-date-object: 1.0.5 2156 | is-symbol: 1.0.4 2157 | 2158 | escape-string-regexp@4.0.0: {} 2159 | 2160 | eslint-config-next@14.2.5(eslint@8.57.0)(typescript@5.5.4): 2161 | dependencies: 2162 | '@next/eslint-plugin-next': 14.2.5 2163 | '@rushstack/eslint-patch': 1.10.4 2164 | '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.5.4) 2165 | eslint: 8.57.0 2166 | eslint-import-resolver-node: 0.3.9 2167 | eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.57.0))(eslint@8.57.0) 2168 | eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) 2169 | eslint-plugin-jsx-a11y: 6.9.0(eslint@8.57.0) 2170 | eslint-plugin-react: 7.35.0(eslint@8.57.0) 2171 | eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) 2172 | optionalDependencies: 2173 | typescript: 5.5.4 2174 | transitivePeerDependencies: 2175 | - eslint-import-resolver-webpack 2176 | - supports-color 2177 | 2178 | eslint-import-resolver-node@0.3.9: 2179 | dependencies: 2180 | debug: 3.2.7 2181 | is-core-module: 2.15.0 2182 | resolve: 1.22.8 2183 | transitivePeerDependencies: 2184 | - supports-color 2185 | 2186 | eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.57.0))(eslint@8.57.0): 2187 | dependencies: 2188 | debug: 4.3.6 2189 | enhanced-resolve: 5.17.1 2190 | eslint: 8.57.0 2191 | eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0) 2192 | eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) 2193 | fast-glob: 3.3.2 2194 | get-tsconfig: 4.7.6 2195 | is-core-module: 2.15.0 2196 | is-glob: 4.0.3 2197 | transitivePeerDependencies: 2198 | - '@typescript-eslint/parser' 2199 | - eslint-import-resolver-node 2200 | - eslint-import-resolver-webpack 2201 | - supports-color 2202 | 2203 | eslint-module-utils@2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0): 2204 | dependencies: 2205 | debug: 3.2.7 2206 | optionalDependencies: 2207 | '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.5.4) 2208 | eslint: 8.57.0 2209 | eslint-import-resolver-node: 0.3.9 2210 | eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.57.0))(eslint@8.57.0) 2211 | transitivePeerDependencies: 2212 | - supports-color 2213 | 2214 | eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): 2215 | dependencies: 2216 | array-includes: 3.1.8 2217 | array.prototype.findlastindex: 1.2.5 2218 | array.prototype.flat: 1.3.2 2219 | array.prototype.flatmap: 1.3.2 2220 | debug: 3.2.7 2221 | doctrine: 2.1.0 2222 | eslint: 8.57.0 2223 | eslint-import-resolver-node: 0.3.9 2224 | eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0) 2225 | hasown: 2.0.2 2226 | is-core-module: 2.15.0 2227 | is-glob: 4.0.3 2228 | minimatch: 3.1.2 2229 | object.fromentries: 2.0.8 2230 | object.groupby: 1.0.3 2231 | object.values: 1.2.0 2232 | semver: 6.3.1 2233 | tsconfig-paths: 3.15.0 2234 | optionalDependencies: 2235 | '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.5.4) 2236 | transitivePeerDependencies: 2237 | - eslint-import-resolver-typescript 2238 | - eslint-import-resolver-webpack 2239 | - supports-color 2240 | 2241 | eslint-plugin-jsx-a11y@6.9.0(eslint@8.57.0): 2242 | dependencies: 2243 | aria-query: 5.1.3 2244 | array-includes: 3.1.8 2245 | array.prototype.flatmap: 1.3.2 2246 | ast-types-flow: 0.0.8 2247 | axe-core: 4.10.0 2248 | axobject-query: 3.1.1 2249 | damerau-levenshtein: 1.0.8 2250 | emoji-regex: 9.2.2 2251 | es-iterator-helpers: 1.0.19 2252 | eslint: 8.57.0 2253 | hasown: 2.0.2 2254 | jsx-ast-utils: 3.3.5 2255 | language-tags: 1.0.9 2256 | minimatch: 3.1.2 2257 | object.fromentries: 2.0.8 2258 | safe-regex-test: 1.0.3 2259 | string.prototype.includes: 2.0.0 2260 | 2261 | eslint-plugin-react-hooks@4.6.2(eslint@8.57.0): 2262 | dependencies: 2263 | eslint: 8.57.0 2264 | 2265 | eslint-plugin-react@7.35.0(eslint@8.57.0): 2266 | dependencies: 2267 | array-includes: 3.1.8 2268 | array.prototype.findlast: 1.2.5 2269 | array.prototype.flatmap: 1.3.2 2270 | array.prototype.tosorted: 1.1.4 2271 | doctrine: 2.1.0 2272 | es-iterator-helpers: 1.0.19 2273 | eslint: 8.57.0 2274 | estraverse: 5.3.0 2275 | hasown: 2.0.2 2276 | jsx-ast-utils: 3.3.5 2277 | minimatch: 3.1.2 2278 | object.entries: 1.1.8 2279 | object.fromentries: 2.0.8 2280 | object.values: 1.2.0 2281 | prop-types: 15.8.1 2282 | resolve: 2.0.0-next.5 2283 | semver: 6.3.1 2284 | string.prototype.matchall: 4.0.11 2285 | string.prototype.repeat: 1.0.0 2286 | 2287 | eslint-scope@7.2.2: 2288 | dependencies: 2289 | esrecurse: 4.3.0 2290 | estraverse: 5.3.0 2291 | 2292 | eslint-visitor-keys@3.4.3: {} 2293 | 2294 | eslint@8.57.0: 2295 | dependencies: 2296 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 2297 | '@eslint-community/regexpp': 4.11.0 2298 | '@eslint/eslintrc': 2.1.4 2299 | '@eslint/js': 8.57.0 2300 | '@humanwhocodes/config-array': 0.11.14 2301 | '@humanwhocodes/module-importer': 1.0.1 2302 | '@nodelib/fs.walk': 1.2.8 2303 | '@ungap/structured-clone': 1.2.0 2304 | ajv: 6.12.6 2305 | chalk: 4.1.2 2306 | cross-spawn: 7.0.3 2307 | debug: 4.3.6 2308 | doctrine: 3.0.0 2309 | escape-string-regexp: 4.0.0 2310 | eslint-scope: 7.2.2 2311 | eslint-visitor-keys: 3.4.3 2312 | espree: 9.6.1 2313 | esquery: 1.6.0 2314 | esutils: 2.0.3 2315 | fast-deep-equal: 3.1.3 2316 | file-entry-cache: 6.0.1 2317 | find-up: 5.0.0 2318 | glob-parent: 6.0.2 2319 | globals: 13.24.0 2320 | graphemer: 1.4.0 2321 | ignore: 5.3.2 2322 | imurmurhash: 0.1.4 2323 | is-glob: 4.0.3 2324 | is-path-inside: 3.0.3 2325 | js-yaml: 4.1.0 2326 | json-stable-stringify-without-jsonify: 1.0.1 2327 | levn: 0.4.1 2328 | lodash.merge: 4.6.2 2329 | minimatch: 3.1.2 2330 | natural-compare: 1.4.0 2331 | optionator: 0.9.4 2332 | strip-ansi: 6.0.1 2333 | text-table: 0.2.0 2334 | transitivePeerDependencies: 2335 | - supports-color 2336 | 2337 | espree@9.6.1: 2338 | dependencies: 2339 | acorn: 8.12.1 2340 | acorn-jsx: 5.3.2(acorn@8.12.1) 2341 | eslint-visitor-keys: 3.4.3 2342 | 2343 | esquery@1.6.0: 2344 | dependencies: 2345 | estraverse: 5.3.0 2346 | 2347 | esrecurse@4.3.0: 2348 | dependencies: 2349 | estraverse: 5.3.0 2350 | 2351 | estraverse@5.3.0: {} 2352 | 2353 | esutils@2.0.3: {} 2354 | 2355 | fast-deep-equal@3.1.3: {} 2356 | 2357 | fast-glob@3.3.2: 2358 | dependencies: 2359 | '@nodelib/fs.stat': 2.0.5 2360 | '@nodelib/fs.walk': 1.2.8 2361 | glob-parent: 5.1.2 2362 | merge2: 1.4.1 2363 | micromatch: 4.0.7 2364 | 2365 | fast-json-stable-stringify@2.1.0: {} 2366 | 2367 | fast-levenshtein@2.0.6: {} 2368 | 2369 | fastq@1.17.1: 2370 | dependencies: 2371 | reusify: 1.0.4 2372 | 2373 | file-entry-cache@6.0.1: 2374 | dependencies: 2375 | flat-cache: 3.2.0 2376 | 2377 | fill-range@7.1.1: 2378 | dependencies: 2379 | to-regex-range: 5.0.1 2380 | 2381 | find-up@5.0.0: 2382 | dependencies: 2383 | locate-path: 6.0.0 2384 | path-exists: 4.0.0 2385 | 2386 | flat-cache@3.2.0: 2387 | dependencies: 2388 | flatted: 3.3.1 2389 | keyv: 4.5.4 2390 | rimraf: 3.0.2 2391 | 2392 | flatted@3.3.1: {} 2393 | 2394 | for-each@0.3.3: 2395 | dependencies: 2396 | is-callable: 1.2.7 2397 | 2398 | foreground-child@3.3.0: 2399 | dependencies: 2400 | cross-spawn: 7.0.3 2401 | signal-exit: 4.1.0 2402 | 2403 | fs.realpath@1.0.0: {} 2404 | 2405 | fsevents@2.3.3: 2406 | optional: true 2407 | 2408 | function-bind@1.1.2: {} 2409 | 2410 | function.prototype.name@1.1.6: 2411 | dependencies: 2412 | call-bind: 1.0.7 2413 | define-properties: 1.2.1 2414 | es-abstract: 1.23.3 2415 | functions-have-names: 1.2.3 2416 | 2417 | functions-have-names@1.2.3: {} 2418 | 2419 | get-intrinsic@1.2.4: 2420 | dependencies: 2421 | es-errors: 1.3.0 2422 | function-bind: 1.1.2 2423 | has-proto: 1.0.3 2424 | has-symbols: 1.0.3 2425 | hasown: 2.0.2 2426 | 2427 | get-symbol-description@1.0.2: 2428 | dependencies: 2429 | call-bind: 1.0.7 2430 | es-errors: 1.3.0 2431 | get-intrinsic: 1.2.4 2432 | 2433 | get-tsconfig@4.7.6: 2434 | dependencies: 2435 | resolve-pkg-maps: 1.0.0 2436 | 2437 | glob-parent@5.1.2: 2438 | dependencies: 2439 | is-glob: 4.0.3 2440 | 2441 | glob-parent@6.0.2: 2442 | dependencies: 2443 | is-glob: 4.0.3 2444 | 2445 | glob@10.3.10: 2446 | dependencies: 2447 | foreground-child: 3.3.0 2448 | jackspeak: 2.3.6 2449 | minimatch: 9.0.5 2450 | minipass: 7.1.2 2451 | path-scurry: 1.11.1 2452 | 2453 | glob@10.4.5: 2454 | dependencies: 2455 | foreground-child: 3.3.0 2456 | jackspeak: 3.4.3 2457 | minimatch: 9.0.5 2458 | minipass: 7.1.2 2459 | package-json-from-dist: 1.0.0 2460 | path-scurry: 1.11.1 2461 | 2462 | glob@7.2.3: 2463 | dependencies: 2464 | fs.realpath: 1.0.0 2465 | inflight: 1.0.6 2466 | inherits: 2.0.4 2467 | minimatch: 3.1.2 2468 | once: 1.4.0 2469 | path-is-absolute: 1.0.1 2470 | 2471 | globals@13.24.0: 2472 | dependencies: 2473 | type-fest: 0.20.2 2474 | 2475 | globalthis@1.0.4: 2476 | dependencies: 2477 | define-properties: 1.2.1 2478 | gopd: 1.0.1 2479 | 2480 | globby@11.1.0: 2481 | dependencies: 2482 | array-union: 2.1.0 2483 | dir-glob: 3.0.1 2484 | fast-glob: 3.3.2 2485 | ignore: 5.3.2 2486 | merge2: 1.4.1 2487 | slash: 3.0.0 2488 | 2489 | gopd@1.0.1: 2490 | dependencies: 2491 | get-intrinsic: 1.2.4 2492 | 2493 | graceful-fs@4.2.11: {} 2494 | 2495 | graphemer@1.4.0: {} 2496 | 2497 | has-bigints@1.0.2: {} 2498 | 2499 | has-flag@4.0.0: {} 2500 | 2501 | has-property-descriptors@1.0.2: 2502 | dependencies: 2503 | es-define-property: 1.0.0 2504 | 2505 | has-proto@1.0.3: {} 2506 | 2507 | has-symbols@1.0.3: {} 2508 | 2509 | has-tostringtag@1.0.2: 2510 | dependencies: 2511 | has-symbols: 1.0.3 2512 | 2513 | hasown@2.0.2: 2514 | dependencies: 2515 | function-bind: 1.1.2 2516 | 2517 | ignore@5.3.2: {} 2518 | 2519 | import-fresh@3.3.0: 2520 | dependencies: 2521 | parent-module: 1.0.1 2522 | resolve-from: 4.0.0 2523 | 2524 | imurmurhash@0.1.4: {} 2525 | 2526 | inflight@1.0.6: 2527 | dependencies: 2528 | once: 1.4.0 2529 | wrappy: 1.0.2 2530 | 2531 | inherits@2.0.4: {} 2532 | 2533 | internal-slot@1.0.7: 2534 | dependencies: 2535 | es-errors: 1.3.0 2536 | hasown: 2.0.2 2537 | side-channel: 1.0.6 2538 | 2539 | is-arguments@1.1.1: 2540 | dependencies: 2541 | call-bind: 1.0.7 2542 | has-tostringtag: 1.0.2 2543 | 2544 | is-array-buffer@3.0.4: 2545 | dependencies: 2546 | call-bind: 1.0.7 2547 | get-intrinsic: 1.2.4 2548 | 2549 | is-async-function@2.0.0: 2550 | dependencies: 2551 | has-tostringtag: 1.0.2 2552 | 2553 | is-bigint@1.0.4: 2554 | dependencies: 2555 | has-bigints: 1.0.2 2556 | 2557 | is-binary-path@2.1.0: 2558 | dependencies: 2559 | binary-extensions: 2.3.0 2560 | 2561 | is-boolean-object@1.1.2: 2562 | dependencies: 2563 | call-bind: 1.0.7 2564 | has-tostringtag: 1.0.2 2565 | 2566 | is-callable@1.2.7: {} 2567 | 2568 | is-core-module@2.15.0: 2569 | dependencies: 2570 | hasown: 2.0.2 2571 | 2572 | is-data-view@1.0.1: 2573 | dependencies: 2574 | is-typed-array: 1.1.13 2575 | 2576 | is-date-object@1.0.5: 2577 | dependencies: 2578 | has-tostringtag: 1.0.2 2579 | 2580 | is-extglob@2.1.1: {} 2581 | 2582 | is-finalizationregistry@1.0.2: 2583 | dependencies: 2584 | call-bind: 1.0.7 2585 | 2586 | is-fullwidth-code-point@3.0.0: {} 2587 | 2588 | is-generator-function@1.0.10: 2589 | dependencies: 2590 | has-tostringtag: 1.0.2 2591 | 2592 | is-glob@4.0.3: 2593 | dependencies: 2594 | is-extglob: 2.1.1 2595 | 2596 | is-map@2.0.3: {} 2597 | 2598 | is-negative-zero@2.0.3: {} 2599 | 2600 | is-number-object@1.0.7: 2601 | dependencies: 2602 | has-tostringtag: 1.0.2 2603 | 2604 | is-number@7.0.0: {} 2605 | 2606 | is-path-inside@3.0.3: {} 2607 | 2608 | is-regex@1.1.4: 2609 | dependencies: 2610 | call-bind: 1.0.7 2611 | has-tostringtag: 1.0.2 2612 | 2613 | is-set@2.0.3: {} 2614 | 2615 | is-shared-array-buffer@1.0.3: 2616 | dependencies: 2617 | call-bind: 1.0.7 2618 | 2619 | is-string@1.0.7: 2620 | dependencies: 2621 | has-tostringtag: 1.0.2 2622 | 2623 | is-symbol@1.0.4: 2624 | dependencies: 2625 | has-symbols: 1.0.3 2626 | 2627 | is-typed-array@1.1.13: 2628 | dependencies: 2629 | which-typed-array: 1.1.15 2630 | 2631 | is-weakmap@2.0.2: {} 2632 | 2633 | is-weakref@1.0.2: 2634 | dependencies: 2635 | call-bind: 1.0.7 2636 | 2637 | is-weakset@2.0.3: 2638 | dependencies: 2639 | call-bind: 1.0.7 2640 | get-intrinsic: 1.2.4 2641 | 2642 | isarray@2.0.5: {} 2643 | 2644 | isexe@2.0.0: {} 2645 | 2646 | iterator.prototype@1.1.2: 2647 | dependencies: 2648 | define-properties: 1.2.1 2649 | get-intrinsic: 1.2.4 2650 | has-symbols: 1.0.3 2651 | reflect.getprototypeof: 1.0.6 2652 | set-function-name: 2.0.2 2653 | 2654 | jackspeak@2.3.6: 2655 | dependencies: 2656 | '@isaacs/cliui': 8.0.2 2657 | optionalDependencies: 2658 | '@pkgjs/parseargs': 0.11.0 2659 | 2660 | jackspeak@3.4.3: 2661 | dependencies: 2662 | '@isaacs/cliui': 8.0.2 2663 | optionalDependencies: 2664 | '@pkgjs/parseargs': 0.11.0 2665 | 2666 | jiti@1.21.6: {} 2667 | 2668 | js-tokens@4.0.0: {} 2669 | 2670 | js-yaml@4.1.0: 2671 | dependencies: 2672 | argparse: 2.0.1 2673 | 2674 | json-buffer@3.0.1: {} 2675 | 2676 | json-schema-traverse@0.4.1: {} 2677 | 2678 | json-stable-stringify-without-jsonify@1.0.1: {} 2679 | 2680 | json5@1.0.2: 2681 | dependencies: 2682 | minimist: 1.2.8 2683 | 2684 | jsx-ast-utils@3.3.5: 2685 | dependencies: 2686 | array-includes: 3.1.8 2687 | array.prototype.flat: 1.3.2 2688 | object.assign: 4.1.5 2689 | object.values: 1.2.0 2690 | 2691 | keyv@4.5.4: 2692 | dependencies: 2693 | json-buffer: 3.0.1 2694 | 2695 | language-subtag-registry@0.3.23: {} 2696 | 2697 | language-tags@1.0.9: 2698 | dependencies: 2699 | language-subtag-registry: 0.3.23 2700 | 2701 | levn@0.4.1: 2702 | dependencies: 2703 | prelude-ls: 1.2.1 2704 | type-check: 0.4.0 2705 | 2706 | lilconfig@2.1.0: {} 2707 | 2708 | lilconfig@3.1.2: {} 2709 | 2710 | lines-and-columns@1.2.4: {} 2711 | 2712 | locate-path@6.0.0: 2713 | dependencies: 2714 | p-locate: 5.0.0 2715 | 2716 | lodash.merge@4.6.2: {} 2717 | 2718 | loose-envify@1.4.0: 2719 | dependencies: 2720 | js-tokens: 4.0.0 2721 | 2722 | lru-cache@10.4.3: {} 2723 | 2724 | merge2@1.4.1: {} 2725 | 2726 | micromatch@4.0.7: 2727 | dependencies: 2728 | braces: 3.0.3 2729 | picomatch: 2.3.1 2730 | 2731 | minimatch@3.1.2: 2732 | dependencies: 2733 | brace-expansion: 1.1.11 2734 | 2735 | minimatch@9.0.3: 2736 | dependencies: 2737 | brace-expansion: 2.0.1 2738 | 2739 | minimatch@9.0.5: 2740 | dependencies: 2741 | brace-expansion: 2.0.1 2742 | 2743 | minimist@1.2.8: {} 2744 | 2745 | minipass@7.1.2: {} 2746 | 2747 | ms@2.1.2: {} 2748 | 2749 | ms@2.1.3: {} 2750 | 2751 | mz@2.7.0: 2752 | dependencies: 2753 | any-promise: 1.3.0 2754 | object-assign: 4.1.1 2755 | thenify-all: 1.6.0 2756 | 2757 | nanoid@3.3.7: {} 2758 | 2759 | natural-compare@1.4.0: {} 2760 | 2761 | next-safe-action@7.7.0(next@14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.23.8): 2762 | dependencies: 2763 | next: 14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2764 | react: 18.3.1 2765 | react-dom: 18.3.1(react@18.3.1) 2766 | optionalDependencies: 2767 | zod: 3.23.8 2768 | 2769 | next@14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2770 | dependencies: 2771 | '@next/env': 14.2.5 2772 | '@swc/helpers': 0.5.5 2773 | busboy: 1.6.0 2774 | caniuse-lite: 1.0.30001651 2775 | graceful-fs: 4.2.11 2776 | postcss: 8.4.31 2777 | react: 18.3.1 2778 | react-dom: 18.3.1(react@18.3.1) 2779 | styled-jsx: 5.1.1(react@18.3.1) 2780 | optionalDependencies: 2781 | '@next/swc-darwin-arm64': 14.2.5 2782 | '@next/swc-darwin-x64': 14.2.5 2783 | '@next/swc-linux-arm64-gnu': 14.2.5 2784 | '@next/swc-linux-arm64-musl': 14.2.5 2785 | '@next/swc-linux-x64-gnu': 14.2.5 2786 | '@next/swc-linux-x64-musl': 14.2.5 2787 | '@next/swc-win32-arm64-msvc': 14.2.5 2788 | '@next/swc-win32-ia32-msvc': 14.2.5 2789 | '@next/swc-win32-x64-msvc': 14.2.5 2790 | transitivePeerDependencies: 2791 | - '@babel/core' 2792 | - babel-plugin-macros 2793 | 2794 | normalize-path@3.0.0: {} 2795 | 2796 | object-assign@4.1.1: {} 2797 | 2798 | object-hash@3.0.0: {} 2799 | 2800 | object-inspect@1.13.2: {} 2801 | 2802 | object-is@1.1.6: 2803 | dependencies: 2804 | call-bind: 1.0.7 2805 | define-properties: 1.2.1 2806 | 2807 | object-keys@1.1.1: {} 2808 | 2809 | object.assign@4.1.5: 2810 | dependencies: 2811 | call-bind: 1.0.7 2812 | define-properties: 1.2.1 2813 | has-symbols: 1.0.3 2814 | object-keys: 1.1.1 2815 | 2816 | object.entries@1.1.8: 2817 | dependencies: 2818 | call-bind: 1.0.7 2819 | define-properties: 1.2.1 2820 | es-object-atoms: 1.0.0 2821 | 2822 | object.fromentries@2.0.8: 2823 | dependencies: 2824 | call-bind: 1.0.7 2825 | define-properties: 1.2.1 2826 | es-abstract: 1.23.3 2827 | es-object-atoms: 1.0.0 2828 | 2829 | object.groupby@1.0.3: 2830 | dependencies: 2831 | call-bind: 1.0.7 2832 | define-properties: 1.2.1 2833 | es-abstract: 1.23.3 2834 | 2835 | object.values@1.2.0: 2836 | dependencies: 2837 | call-bind: 1.0.7 2838 | define-properties: 1.2.1 2839 | es-object-atoms: 1.0.0 2840 | 2841 | once@1.4.0: 2842 | dependencies: 2843 | wrappy: 1.0.2 2844 | 2845 | optionator@0.9.4: 2846 | dependencies: 2847 | deep-is: 0.1.4 2848 | fast-levenshtein: 2.0.6 2849 | levn: 0.4.1 2850 | prelude-ls: 1.2.1 2851 | type-check: 0.4.0 2852 | word-wrap: 1.2.5 2853 | 2854 | p-limit@3.1.0: 2855 | dependencies: 2856 | yocto-queue: 0.1.0 2857 | 2858 | p-locate@5.0.0: 2859 | dependencies: 2860 | p-limit: 3.1.0 2861 | 2862 | package-json-from-dist@1.0.0: {} 2863 | 2864 | parent-module@1.0.1: 2865 | dependencies: 2866 | callsites: 3.1.0 2867 | 2868 | path-exists@4.0.0: {} 2869 | 2870 | path-is-absolute@1.0.1: {} 2871 | 2872 | path-key@3.1.1: {} 2873 | 2874 | path-parse@1.0.7: {} 2875 | 2876 | path-scurry@1.11.1: 2877 | dependencies: 2878 | lru-cache: 10.4.3 2879 | minipass: 7.1.2 2880 | 2881 | path-type@4.0.0: {} 2882 | 2883 | picocolors@1.0.1: {} 2884 | 2885 | picomatch@2.3.1: {} 2886 | 2887 | pify@2.3.0: {} 2888 | 2889 | pirates@4.0.6: {} 2890 | 2891 | possible-typed-array-names@1.0.0: {} 2892 | 2893 | postcss-import@15.1.0(postcss@8.4.41): 2894 | dependencies: 2895 | postcss: 8.4.41 2896 | postcss-value-parser: 4.2.0 2897 | read-cache: 1.0.0 2898 | resolve: 1.22.8 2899 | 2900 | postcss-js@4.0.1(postcss@8.4.41): 2901 | dependencies: 2902 | camelcase-css: 2.0.1 2903 | postcss: 8.4.41 2904 | 2905 | postcss-load-config@4.0.2(postcss@8.4.41): 2906 | dependencies: 2907 | lilconfig: 3.1.2 2908 | yaml: 2.5.0 2909 | optionalDependencies: 2910 | postcss: 8.4.41 2911 | 2912 | postcss-nested@6.2.0(postcss@8.4.41): 2913 | dependencies: 2914 | postcss: 8.4.41 2915 | postcss-selector-parser: 6.1.2 2916 | 2917 | postcss-selector-parser@6.1.2: 2918 | dependencies: 2919 | cssesc: 3.0.0 2920 | util-deprecate: 1.0.2 2921 | 2922 | postcss-value-parser@4.2.0: {} 2923 | 2924 | postcss@8.4.31: 2925 | dependencies: 2926 | nanoid: 3.3.7 2927 | picocolors: 1.0.1 2928 | source-map-js: 1.2.0 2929 | 2930 | postcss@8.4.41: 2931 | dependencies: 2932 | nanoid: 3.3.7 2933 | picocolors: 1.0.1 2934 | source-map-js: 1.2.0 2935 | 2936 | prelude-ls@1.2.1: {} 2937 | 2938 | prop-types@15.8.1: 2939 | dependencies: 2940 | loose-envify: 1.4.0 2941 | object-assign: 4.1.1 2942 | react-is: 16.13.1 2943 | 2944 | punycode@2.3.1: {} 2945 | 2946 | queue-microtask@1.2.3: {} 2947 | 2948 | react-dom@18.3.1(react@18.3.1): 2949 | dependencies: 2950 | loose-envify: 1.4.0 2951 | react: 18.3.1 2952 | scheduler: 0.23.2 2953 | 2954 | react-hook-form@7.52.2(react@18.3.1): 2955 | dependencies: 2956 | react: 18.3.1 2957 | 2958 | react-is@16.13.1: {} 2959 | 2960 | react@18.3.1: 2961 | dependencies: 2962 | loose-envify: 1.4.0 2963 | 2964 | read-cache@1.0.0: 2965 | dependencies: 2966 | pify: 2.3.0 2967 | 2968 | readdirp@3.6.0: 2969 | dependencies: 2970 | picomatch: 2.3.1 2971 | 2972 | reflect.getprototypeof@1.0.6: 2973 | dependencies: 2974 | call-bind: 1.0.7 2975 | define-properties: 1.2.1 2976 | es-abstract: 1.23.3 2977 | es-errors: 1.3.0 2978 | get-intrinsic: 1.2.4 2979 | globalthis: 1.0.4 2980 | which-builtin-type: 1.1.4 2981 | 2982 | regexp.prototype.flags@1.5.2: 2983 | dependencies: 2984 | call-bind: 1.0.7 2985 | define-properties: 1.2.1 2986 | es-errors: 1.3.0 2987 | set-function-name: 2.0.2 2988 | 2989 | resolve-from@4.0.0: {} 2990 | 2991 | resolve-pkg-maps@1.0.0: {} 2992 | 2993 | resolve@1.22.8: 2994 | dependencies: 2995 | is-core-module: 2.15.0 2996 | path-parse: 1.0.7 2997 | supports-preserve-symlinks-flag: 1.0.0 2998 | 2999 | resolve@2.0.0-next.5: 3000 | dependencies: 3001 | is-core-module: 2.15.0 3002 | path-parse: 1.0.7 3003 | supports-preserve-symlinks-flag: 1.0.0 3004 | 3005 | reusify@1.0.4: {} 3006 | 3007 | rimraf@3.0.2: 3008 | dependencies: 3009 | glob: 7.2.3 3010 | 3011 | run-parallel@1.2.0: 3012 | dependencies: 3013 | queue-microtask: 1.2.3 3014 | 3015 | safe-array-concat@1.1.2: 3016 | dependencies: 3017 | call-bind: 1.0.7 3018 | get-intrinsic: 1.2.4 3019 | has-symbols: 1.0.3 3020 | isarray: 2.0.5 3021 | 3022 | safe-regex-test@1.0.3: 3023 | dependencies: 3024 | call-bind: 1.0.7 3025 | es-errors: 1.3.0 3026 | is-regex: 1.1.4 3027 | 3028 | scheduler@0.23.2: 3029 | dependencies: 3030 | loose-envify: 1.4.0 3031 | 3032 | semver@6.3.1: {} 3033 | 3034 | semver@7.6.3: {} 3035 | 3036 | set-function-length@1.2.2: 3037 | dependencies: 3038 | define-data-property: 1.1.4 3039 | es-errors: 1.3.0 3040 | function-bind: 1.1.2 3041 | get-intrinsic: 1.2.4 3042 | gopd: 1.0.1 3043 | has-property-descriptors: 1.0.2 3044 | 3045 | set-function-name@2.0.2: 3046 | dependencies: 3047 | define-data-property: 1.1.4 3048 | es-errors: 1.3.0 3049 | functions-have-names: 1.2.3 3050 | has-property-descriptors: 1.0.2 3051 | 3052 | shebang-command@2.0.0: 3053 | dependencies: 3054 | shebang-regex: 3.0.0 3055 | 3056 | shebang-regex@3.0.0: {} 3057 | 3058 | side-channel@1.0.6: 3059 | dependencies: 3060 | call-bind: 1.0.7 3061 | es-errors: 1.3.0 3062 | get-intrinsic: 1.2.4 3063 | object-inspect: 1.13.2 3064 | 3065 | signal-exit@4.1.0: {} 3066 | 3067 | slash@3.0.0: {} 3068 | 3069 | source-map-js@1.2.0: {} 3070 | 3071 | stop-iteration-iterator@1.0.0: 3072 | dependencies: 3073 | internal-slot: 1.0.7 3074 | 3075 | streamsearch@1.1.0: {} 3076 | 3077 | string-width@4.2.3: 3078 | dependencies: 3079 | emoji-regex: 8.0.0 3080 | is-fullwidth-code-point: 3.0.0 3081 | strip-ansi: 6.0.1 3082 | 3083 | string-width@5.1.2: 3084 | dependencies: 3085 | eastasianwidth: 0.2.0 3086 | emoji-regex: 9.2.2 3087 | strip-ansi: 7.1.0 3088 | 3089 | string.prototype.includes@2.0.0: 3090 | dependencies: 3091 | define-properties: 1.2.1 3092 | es-abstract: 1.23.3 3093 | 3094 | string.prototype.matchall@4.0.11: 3095 | dependencies: 3096 | call-bind: 1.0.7 3097 | define-properties: 1.2.1 3098 | es-abstract: 1.23.3 3099 | es-errors: 1.3.0 3100 | es-object-atoms: 1.0.0 3101 | get-intrinsic: 1.2.4 3102 | gopd: 1.0.1 3103 | has-symbols: 1.0.3 3104 | internal-slot: 1.0.7 3105 | regexp.prototype.flags: 1.5.2 3106 | set-function-name: 2.0.2 3107 | side-channel: 1.0.6 3108 | 3109 | string.prototype.repeat@1.0.0: 3110 | dependencies: 3111 | define-properties: 1.2.1 3112 | es-abstract: 1.23.3 3113 | 3114 | string.prototype.trim@1.2.9: 3115 | dependencies: 3116 | call-bind: 1.0.7 3117 | define-properties: 1.2.1 3118 | es-abstract: 1.23.3 3119 | es-object-atoms: 1.0.0 3120 | 3121 | string.prototype.trimend@1.0.8: 3122 | dependencies: 3123 | call-bind: 1.0.7 3124 | define-properties: 1.2.1 3125 | es-object-atoms: 1.0.0 3126 | 3127 | string.prototype.trimstart@1.0.8: 3128 | dependencies: 3129 | call-bind: 1.0.7 3130 | define-properties: 1.2.1 3131 | es-object-atoms: 1.0.0 3132 | 3133 | strip-ansi@6.0.1: 3134 | dependencies: 3135 | ansi-regex: 5.0.1 3136 | 3137 | strip-ansi@7.1.0: 3138 | dependencies: 3139 | ansi-regex: 6.0.1 3140 | 3141 | strip-bom@3.0.0: {} 3142 | 3143 | strip-json-comments@3.1.1: {} 3144 | 3145 | styled-jsx@5.1.1(react@18.3.1): 3146 | dependencies: 3147 | client-only: 0.0.1 3148 | react: 18.3.1 3149 | 3150 | sucrase@3.35.0: 3151 | dependencies: 3152 | '@jridgewell/gen-mapping': 0.3.5 3153 | commander: 4.1.1 3154 | glob: 10.4.5 3155 | lines-and-columns: 1.2.4 3156 | mz: 2.7.0 3157 | pirates: 4.0.6 3158 | ts-interface-checker: 0.1.13 3159 | 3160 | supports-color@7.2.0: 3161 | dependencies: 3162 | has-flag: 4.0.0 3163 | 3164 | supports-preserve-symlinks-flag@1.0.0: {} 3165 | 3166 | tailwindcss@3.4.10: 3167 | dependencies: 3168 | '@alloc/quick-lru': 5.2.0 3169 | arg: 5.0.2 3170 | chokidar: 3.6.0 3171 | didyoumean: 1.2.2 3172 | dlv: 1.1.3 3173 | fast-glob: 3.3.2 3174 | glob-parent: 6.0.2 3175 | is-glob: 4.0.3 3176 | jiti: 1.21.6 3177 | lilconfig: 2.1.0 3178 | micromatch: 4.0.7 3179 | normalize-path: 3.0.0 3180 | object-hash: 3.0.0 3181 | picocolors: 1.0.1 3182 | postcss: 8.4.41 3183 | postcss-import: 15.1.0(postcss@8.4.41) 3184 | postcss-js: 4.0.1(postcss@8.4.41) 3185 | postcss-load-config: 4.0.2(postcss@8.4.41) 3186 | postcss-nested: 6.2.0(postcss@8.4.41) 3187 | postcss-selector-parser: 6.1.2 3188 | resolve: 1.22.8 3189 | sucrase: 3.35.0 3190 | transitivePeerDependencies: 3191 | - ts-node 3192 | 3193 | tapable@2.2.1: {} 3194 | 3195 | text-table@0.2.0: {} 3196 | 3197 | thenify-all@1.6.0: 3198 | dependencies: 3199 | thenify: 3.3.1 3200 | 3201 | thenify@3.3.1: 3202 | dependencies: 3203 | any-promise: 1.3.0 3204 | 3205 | to-regex-range@5.0.1: 3206 | dependencies: 3207 | is-number: 7.0.0 3208 | 3209 | ts-api-utils@1.3.0(typescript@5.5.4): 3210 | dependencies: 3211 | typescript: 5.5.4 3212 | 3213 | ts-interface-checker@0.1.13: {} 3214 | 3215 | tsconfig-paths@3.15.0: 3216 | dependencies: 3217 | '@types/json5': 0.0.29 3218 | json5: 1.0.2 3219 | minimist: 1.2.8 3220 | strip-bom: 3.0.0 3221 | 3222 | tslib@2.6.3: {} 3223 | 3224 | type-check@0.4.0: 3225 | dependencies: 3226 | prelude-ls: 1.2.1 3227 | 3228 | type-fest@0.20.2: {} 3229 | 3230 | typed-array-buffer@1.0.2: 3231 | dependencies: 3232 | call-bind: 1.0.7 3233 | es-errors: 1.3.0 3234 | is-typed-array: 1.1.13 3235 | 3236 | typed-array-byte-length@1.0.1: 3237 | dependencies: 3238 | call-bind: 1.0.7 3239 | for-each: 0.3.3 3240 | gopd: 1.0.1 3241 | has-proto: 1.0.3 3242 | is-typed-array: 1.1.13 3243 | 3244 | typed-array-byte-offset@1.0.2: 3245 | dependencies: 3246 | available-typed-arrays: 1.0.7 3247 | call-bind: 1.0.7 3248 | for-each: 0.3.3 3249 | gopd: 1.0.1 3250 | has-proto: 1.0.3 3251 | is-typed-array: 1.1.13 3252 | 3253 | typed-array-length@1.0.6: 3254 | dependencies: 3255 | call-bind: 1.0.7 3256 | for-each: 0.3.3 3257 | gopd: 1.0.1 3258 | has-proto: 1.0.3 3259 | is-typed-array: 1.1.13 3260 | possible-typed-array-names: 1.0.0 3261 | 3262 | typescript@5.5.4: {} 3263 | 3264 | unbox-primitive@1.0.2: 3265 | dependencies: 3266 | call-bind: 1.0.7 3267 | has-bigints: 1.0.2 3268 | has-symbols: 1.0.3 3269 | which-boxed-primitive: 1.0.2 3270 | 3271 | undici-types@6.19.6: {} 3272 | 3273 | uri-js@4.4.1: 3274 | dependencies: 3275 | punycode: 2.3.1 3276 | 3277 | util-deprecate@1.0.2: {} 3278 | 3279 | which-boxed-primitive@1.0.2: 3280 | dependencies: 3281 | is-bigint: 1.0.4 3282 | is-boolean-object: 1.1.2 3283 | is-number-object: 1.0.7 3284 | is-string: 1.0.7 3285 | is-symbol: 1.0.4 3286 | 3287 | which-builtin-type@1.1.4: 3288 | dependencies: 3289 | function.prototype.name: 1.1.6 3290 | has-tostringtag: 1.0.2 3291 | is-async-function: 2.0.0 3292 | is-date-object: 1.0.5 3293 | is-finalizationregistry: 1.0.2 3294 | is-generator-function: 1.0.10 3295 | is-regex: 1.1.4 3296 | is-weakref: 1.0.2 3297 | isarray: 2.0.5 3298 | which-boxed-primitive: 1.0.2 3299 | which-collection: 1.0.2 3300 | which-typed-array: 1.1.15 3301 | 3302 | which-collection@1.0.2: 3303 | dependencies: 3304 | is-map: 2.0.3 3305 | is-set: 2.0.3 3306 | is-weakmap: 2.0.2 3307 | is-weakset: 2.0.3 3308 | 3309 | which-typed-array@1.1.15: 3310 | dependencies: 3311 | available-typed-arrays: 1.0.7 3312 | call-bind: 1.0.7 3313 | for-each: 0.3.3 3314 | gopd: 1.0.1 3315 | has-tostringtag: 1.0.2 3316 | 3317 | which@2.0.2: 3318 | dependencies: 3319 | isexe: 2.0.0 3320 | 3321 | word-wrap@1.2.5: {} 3322 | 3323 | wrap-ansi@7.0.0: 3324 | dependencies: 3325 | ansi-styles: 4.3.0 3326 | string-width: 4.2.3 3327 | strip-ansi: 6.0.1 3328 | 3329 | wrap-ansi@8.1.0: 3330 | dependencies: 3331 | ansi-styles: 6.2.1 3332 | string-width: 5.1.2 3333 | strip-ansi: 7.1.0 3334 | 3335 | wrappy@1.0.2: {} 3336 | 3337 | yaml@2.5.0: {} 3338 | 3339 | yocto-queue@0.1.0: {} 3340 | 3341 | zod@3.23.8: {} 3342 | --------------------------------------------------------------------------------