├── .gitignore ├── LICENSE ├── README.md ├── app ├── actions.ts ├── favicon.ico ├── globals.css ├── layout.tsx ├── page.tsx └── todo-list.tsx ├── drizzle.config.ts ├── lib └── db │ ├── drizzle.ts │ ├── migrate.ts │ ├── migrations │ ├── 0000_bitter_talisman.sql │ └── meta │ │ ├── 0000_snapshot.json │ │ └── _journal.json │ ├── queries.ts │ ├── schema.ts │ ├── seed.ts │ └── setup.ts ├── next.config.ts ├── package.json ├── pnpm-lock.yaml ├── postcss.config.mjs └── tsconfig.json /.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 | # env files 29 | .env* 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | .vscode 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2024 Vercel, Inc. 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Next.js and Postgres Starter Template 2 | 3 | ## Tech Stack 4 | 5 | - **Framework**: [Next.js](https://nextjs.org/) 6 | - **Database**: [Postgres](https://www.postgresql.org/) 7 | - **ORM**: [Drizzle](https://orm.drizzle.team/) 8 | 9 | ## Getting Started 10 | 11 | ```bash 12 | git clone https://github.com/vercel/postgres-next-starter 13 | cd postgres-next-starter 14 | pnpm install 15 | ``` 16 | 17 | ## Running Locally 18 | 19 | Use the included setup script to create your `.env` file: 20 | 21 | ```bash 22 | pnpm db:setup 23 | ``` 24 | 25 | Then, run the database migrations and seed the database: 26 | 27 | ```bash 28 | pnpm db:generate 29 | pnpm db:migrate 30 | pnpm db:seed 31 | ``` 32 | 33 | Finally, run the Next.js development server: 34 | 35 | ```bash 36 | pnpm dev 37 | ``` 38 | 39 | Open [http://localhost:3000](http://localhost:3000) in your browser to see the app in action. 40 | -------------------------------------------------------------------------------- /app/actions.ts: -------------------------------------------------------------------------------- 1 | 'use server'; 2 | 3 | import { revalidatePath } from 'next/cache'; 4 | import { eq } from 'drizzle-orm'; 5 | import { db } from '@/lib/db/drizzle'; 6 | import { todos } from '@/lib/db/schema'; 7 | 8 | export async function addTodo(_: any, formData: FormData) { 9 | const text = formData.get('todo') as string; 10 | 11 | if (text.trim()) { 12 | await db.insert(todos).values({ text }); 13 | revalidatePath('/'); 14 | return { message: 'Todo added successfully', input: '' }; 15 | } 16 | 17 | return { message: 'Todo cannot be empty', input: text }; 18 | } 19 | 20 | export async function deleteTodo(_: any, formData: FormData) { 21 | const id = formData.get('id') as string; 22 | 23 | await db.delete(todos).where(eq(todos.id, id)); 24 | 25 | revalidatePath('/'); 26 | return { message: 'Todo deleted successfully' }; 27 | } 28 | -------------------------------------------------------------------------------- /app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vercel/postgres-next-starter/ed1c083b4477e096e7904473008eab1734a154df/app/favicon.ico -------------------------------------------------------------------------------- /app/globals.css: -------------------------------------------------------------------------------- 1 | @import 'tailwindcss'; 2 | 3 | @theme { 4 | --font-family-sans: 'Geist', sans-serif; 5 | } 6 | -------------------------------------------------------------------------------- /app/layout.tsx: -------------------------------------------------------------------------------- 1 | import type { Metadata } from 'next'; 2 | import { Geist_Mono } from 'next/font/google'; 3 | import './globals.css'; 4 | 5 | const geistMono = Geist_Mono({ subsets: ['latin'] }); 6 | 7 | export const metadata: Metadata = { 8 | title: 'Todo List', 9 | description: 'A simple todo list application', 10 | }; 11 | 12 | export default function RootLayout({ 13 | children, 14 | }: { 15 | children: React.ReactNode; 16 | }) { 17 | return ( 18 | 19 | 20 | {children} 21 | 22 | 23 | ); 24 | } 25 | -------------------------------------------------------------------------------- /app/page.tsx: -------------------------------------------------------------------------------- 1 | import { getTodos } from '@/lib/db/queries'; 2 | import TodoList from './todo-list'; 3 | 4 | // This will be replaced by 'use cache' soon 5 | export const dynamic = 'force-static'; 6 | 7 | export default async function Home() { 8 | const todos = await getTodos(); 9 | 10 | return ( 11 |
12 |
13 |

14 | Postgres Starter 15 |

16 | 17 |
18 |
19 | ); 20 | } 21 | -------------------------------------------------------------------------------- /app/todo-list.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { useActionState } from 'react'; 4 | import { addTodo, deleteTodo } from './actions'; 5 | import { Loader2, Plus, Trash2 } from 'lucide-react'; 6 | import { Todo } from '@/lib/db/queries'; 7 | 8 | export default function TodoList({ initialTodos }: { initialTodos: Todo[] }) { 9 | const [addState, addAction, isAddPending] = useActionState(addTodo, { 10 | input: '', 11 | message: '', 12 | }); 13 | const [_, deleteAction] = useActionState(deleteTodo, { 14 | message: '', 15 | }); 16 | 17 | return ( 18 |
19 |
20 | 27 | 38 |
39 | {addState.message && ( 40 |

{addState.message}

41 | )} 42 | 61 |
62 | ); 63 | } 64 | -------------------------------------------------------------------------------- /drizzle.config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from 'drizzle-kit'; 2 | 3 | export default { 4 | schema: './lib/db/schema.ts', 5 | out: './lib/db/migrations', 6 | dialect: 'postgresql', 7 | dbCredentials: { 8 | url: process.env.POSTGRES_URL!, 9 | }, 10 | } satisfies Config; 11 | -------------------------------------------------------------------------------- /lib/db/drizzle.ts: -------------------------------------------------------------------------------- 1 | import { drizzle } from 'drizzle-orm/postgres-js'; 2 | import postgres from 'postgres'; 3 | import * as schema from './schema'; 4 | import dotenv from 'dotenv'; 5 | 6 | dotenv.config(); 7 | 8 | if (!process.env.POSTGRES_URL) { 9 | throw new Error('POSTGRES_URL environment variable is not set'); 10 | } 11 | 12 | export const client = postgres(process.env.POSTGRES_URL); 13 | export const db = drizzle(client, { schema }); 14 | -------------------------------------------------------------------------------- /lib/db/migrate.ts: -------------------------------------------------------------------------------- 1 | import dotenv from 'dotenv'; 2 | import path from 'path'; 3 | import { migrate } from 'drizzle-orm/postgres-js/migrator'; 4 | import { client, db } from './drizzle'; 5 | 6 | dotenv.config(); 7 | 8 | async function main() { 9 | await migrate(db, { 10 | migrationsFolder: path.join(process.cwd(), '/lib/db/migrations'), 11 | }); 12 | console.log(`Migrations complete`); 13 | await client.end(); 14 | } 15 | 16 | main(); 17 | -------------------------------------------------------------------------------- /lib/db/migrations/0000_bitter_talisman.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS "todos" ( 2 | "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, 3 | "text" varchar(255) NOT NULL, 4 | "created_at" timestamp DEFAULT now() NOT NULL, 5 | "updated_at" timestamp DEFAULT now() NOT NULL 6 | ); 7 | -------------------------------------------------------------------------------- /lib/db/migrations/meta/0000_snapshot.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "9038895f-cfe9-48b6-91dc-34962fbfe396", 3 | "prevId": "00000000-0000-0000-0000-000000000000", 4 | "version": "7", 5 | "dialect": "postgresql", 6 | "tables": { 7 | "public.todos": { 8 | "name": "todos", 9 | "schema": "", 10 | "columns": { 11 | "id": { 12 | "name": "id", 13 | "type": "uuid", 14 | "primaryKey": true, 15 | "notNull": true, 16 | "default": "gen_random_uuid()" 17 | }, 18 | "text": { 19 | "name": "text", 20 | "type": "varchar(255)", 21 | "primaryKey": false, 22 | "notNull": true 23 | }, 24 | "created_at": { 25 | "name": "created_at", 26 | "type": "timestamp", 27 | "primaryKey": false, 28 | "notNull": true, 29 | "default": "now()" 30 | }, 31 | "updated_at": { 32 | "name": "updated_at", 33 | "type": "timestamp", 34 | "primaryKey": false, 35 | "notNull": true, 36 | "default": "now()" 37 | } 38 | }, 39 | "indexes": {}, 40 | "foreignKeys": {}, 41 | "compositePrimaryKeys": {}, 42 | "uniqueConstraints": {}, 43 | "policies": {}, 44 | "checkConstraints": {}, 45 | "isRLSEnabled": false 46 | } 47 | }, 48 | "enums": {}, 49 | "schemas": {}, 50 | "sequences": {}, 51 | "roles": {}, 52 | "policies": {}, 53 | "views": {}, 54 | "_meta": { 55 | "columns": {}, 56 | "schemas": {}, 57 | "tables": {} 58 | } 59 | } -------------------------------------------------------------------------------- /lib/db/migrations/meta/_journal.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "7", 3 | "dialect": "postgresql", 4 | "entries": [ 5 | { 6 | "idx": 0, 7 | "version": "7", 8 | "when": 1733332502118, 9 | "tag": "0000_bitter_talisman", 10 | "breakpoints": true 11 | } 12 | ] 13 | } -------------------------------------------------------------------------------- /lib/db/queries.ts: -------------------------------------------------------------------------------- 1 | import { db } from './drizzle'; 2 | import { todos } from './schema'; 3 | import { InferSelectModel } from 'drizzle-orm'; 4 | 5 | export type Todo = InferSelectModel; 6 | 7 | export async function getTodos() { 8 | return db 9 | .select({ 10 | id: todos.id, 11 | text: todos.text, 12 | createdAt: todos.createdAt, 13 | updatedAt: todos.updatedAt, 14 | }) 15 | .from(todos); 16 | } 17 | -------------------------------------------------------------------------------- /lib/db/schema.ts: -------------------------------------------------------------------------------- 1 | import { pgTable, varchar, timestamp, uuid } from 'drizzle-orm/pg-core'; 2 | 3 | export const todos = pgTable('todos', { 4 | id: uuid('id').defaultRandom().primaryKey(), 5 | text: varchar('text', { length: 255 }).notNull(), 6 | createdAt: timestamp('created_at').defaultNow().notNull(), 7 | updatedAt: timestamp('updated_at').defaultNow().notNull(), 8 | }); 9 | -------------------------------------------------------------------------------- /lib/db/seed.ts: -------------------------------------------------------------------------------- 1 | import { db } from './drizzle'; 2 | import { todos } from './schema'; 3 | import { seed } from 'drizzle-seed'; 4 | 5 | async function main() { 6 | await seed(db, { todos }).refine((f) => ({ 7 | todos: { 8 | columns: { 9 | text: f.loremIpsum(), 10 | }, 11 | count: 5, 12 | }, 13 | })); 14 | process.exit(); 15 | } 16 | 17 | main(); 18 | -------------------------------------------------------------------------------- /lib/db/setup.ts: -------------------------------------------------------------------------------- 1 | import { exec } from 'node:child_process'; 2 | import { promises as fs } from 'node:fs'; 3 | import { promisify } from 'node:util'; 4 | import readline from 'node:readline'; 5 | import path from 'node:path'; 6 | 7 | const execAsync = promisify(exec); 8 | 9 | function question(query: string): Promise { 10 | const rl = readline.createInterface({ 11 | input: process.stdin, 12 | output: process.stdout, 13 | }); 14 | 15 | return new Promise((resolve) => 16 | rl.question(query, (ans) => { 17 | rl.close(); 18 | resolve(ans); 19 | }) 20 | ); 21 | } 22 | 23 | async function getPostgresURL(): Promise { 24 | console.log('Step 1: Setting up Postgres'); 25 | const dbChoice = await question( 26 | 'Do you want to use a local Postgres instance with Docker (L) or a remote Postgres instance (R)? (L/R): ' 27 | ); 28 | 29 | if (dbChoice.toLowerCase() === 'l') { 30 | console.log('Setting up local Postgres instance with Docker...'); 31 | await setupLocalPostgres(); 32 | return 'postgres://postgres:postgres@localhost:54322/postgres'; 33 | } else { 34 | console.log( 35 | 'You can find Postgres databases at: https://vercel.com/marketplace?category=databases' 36 | ); 37 | return await question('Enter your POSTGRES_URL: '); 38 | } 39 | } 40 | 41 | async function setupLocalPostgres() { 42 | console.log('Checking if Docker is installed...'); 43 | try { 44 | await execAsync('docker --version'); 45 | console.log('Docker is installed.'); 46 | } catch (error) { 47 | console.error( 48 | 'Docker is not installed. Please install Docker and try again.' 49 | ); 50 | console.log( 51 | 'To install Docker, visit: https://docs.docker.com/get-docker/' 52 | ); 53 | process.exit(1); 54 | } 55 | 56 | console.log('Creating docker-compose.yml file...'); 57 | const dockerComposeContent = ` 58 | services: 59 | postgres: 60 | image: postgres:16.4-alpine 61 | container_name: music_player_postgres 62 | environment: 63 | POSTGRES_DB: postgres 64 | POSTGRES_USER: postgres 65 | POSTGRES_PASSWORD: postgres 66 | ports: 67 | - "54322:5432" 68 | volumes: 69 | - postgres_data:/var/lib/postgresql/data 70 | 71 | volumes: 72 | postgres_data: 73 | `; 74 | 75 | await fs.writeFile( 76 | path.join(process.cwd(), 'docker-compose.yml'), 77 | dockerComposeContent 78 | ); 79 | console.log('docker-compose.yml file created.'); 80 | 81 | console.log('Starting Docker container with `docker compose up -d`...'); 82 | try { 83 | await execAsync('docker compose up -d'); 84 | console.log('Docker container started successfully.'); 85 | } catch (error) { 86 | console.error( 87 | 'Failed to start Docker container. Please check your Docker installation and try again.' 88 | ); 89 | process.exit(1); 90 | } 91 | } 92 | 93 | async function writeEnvFile(envVars: Record) { 94 | console.log('Step 3: Writing environment variables to .env'); 95 | const envContent = Object.entries(envVars) 96 | .map(([key, value]) => `${key}=${value}`) 97 | .join('\n'); 98 | 99 | await fs.writeFile(path.join(process.cwd(), '.env'), envContent); 100 | console.log('.env file created with the necessary variables.'); 101 | } 102 | 103 | async function main() { 104 | const POSTGRES_URL = await getPostgresURL(); 105 | 106 | await writeEnvFile({ 107 | POSTGRES_URL, 108 | }); 109 | 110 | console.log('🎉 Setup completed successfully!'); 111 | } 112 | 113 | main().catch(console.error); 114 | -------------------------------------------------------------------------------- /next.config.ts: -------------------------------------------------------------------------------- 1 | import type { NextConfig } from 'next'; 2 | 3 | const nextConfig: NextConfig = {}; 4 | 5 | export default nextConfig; 6 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "dev": "next dev --turbopack", 5 | "build": "next build", 6 | "start": "next start", 7 | "db:setup": "npx tsx lib/db/setup.ts", 8 | "db:seed": "npx tsx lib/db/seed.ts", 9 | "db:generate": "drizzle-kit generate", 10 | "db:migrate": "npx tsx lib/db/migrate.ts", 11 | "db:studio": "drizzle-kit studio" 12 | }, 13 | "dependencies": { 14 | "@tailwindcss/postcss": "4.0.0-beta.4", 15 | "@types/node": "^22.10.1", 16 | "@types/react": "npm:types-react@19.0.0-rc.1", 17 | "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", 18 | "dotenv": "^16.4.7", 19 | "drizzle-kit": "^0.28.1", 20 | "drizzle-orm": "^0.36.4", 21 | "drizzle-seed": "^0.1.2", 22 | "lucide-react": "^0.465.0", 23 | "next": "15.0.4-canary.36", 24 | "postgres": "^3.4.5", 25 | "react": "19.0.0-rc-2d16326d-20240930", 26 | "react-dom": "19.0.0-rc-2d16326d-20240930", 27 | "tailwindcss": "4.0.0-beta.4", 28 | "typescript": "^5.7.2", 29 | "zod": "^3.23.8" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@tailwindcss/postcss': 12 | specifier: 4.0.0-beta.4 13 | version: 4.0.0-beta.4 14 | '@types/node': 15 | specifier: ^22.10.1 16 | version: 22.10.1 17 | '@types/react': 18 | specifier: npm:types-react@19.0.0-rc.1 19 | version: types-react@19.0.0-rc.1 20 | '@types/react-dom': 21 | specifier: npm:types-react-dom@19.0.0-rc.1 22 | version: types-react-dom@19.0.0-rc.1 23 | dotenv: 24 | specifier: ^16.4.7 25 | version: 16.4.7 26 | drizzle-kit: 27 | specifier: ^0.28.1 28 | version: 0.28.1 29 | drizzle-orm: 30 | specifier: ^0.36.4 31 | version: 0.36.4(postgres@3.4.5)(react@19.0.0-rc-2d16326d-20240930)(types-react@19.0.0-rc.1) 32 | drizzle-seed: 33 | specifier: ^0.1.2 34 | version: 0.1.2(drizzle-orm@0.36.4(postgres@3.4.5)(react@19.0.0-rc-2d16326d-20240930)(types-react@19.0.0-rc.1)) 35 | lucide-react: 36 | specifier: ^0.465.0 37 | version: 0.465.0(react@19.0.0-rc-2d16326d-20240930) 38 | next: 39 | specifier: 15.0.4-canary.36 40 | version: 15.0.4-canary.36(react-dom@19.0.0-rc-2d16326d-20240930(react@19.0.0-rc-2d16326d-20240930))(react@19.0.0-rc-2d16326d-20240930) 41 | postgres: 42 | specifier: ^3.4.5 43 | version: 3.4.5 44 | react: 45 | specifier: 19.0.0-rc-2d16326d-20240930 46 | version: 19.0.0-rc-2d16326d-20240930 47 | react-dom: 48 | specifier: 19.0.0-rc-2d16326d-20240930 49 | version: 19.0.0-rc-2d16326d-20240930(react@19.0.0-rc-2d16326d-20240930) 50 | tailwindcss: 51 | specifier: 4.0.0-beta.4 52 | version: 4.0.0-beta.4 53 | typescript: 54 | specifier: ^5.7.2 55 | version: 5.7.2 56 | zod: 57 | specifier: ^3.23.8 58 | version: 3.23.8 59 | 60 | packages: 61 | 62 | '@alloc/quick-lru@5.2.0': 63 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 64 | engines: {node: '>=10'} 65 | 66 | '@drizzle-team/brocli@0.10.2': 67 | resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} 68 | 69 | '@emnapi/runtime@1.3.1': 70 | resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} 71 | 72 | '@esbuild-kit/core-utils@3.3.2': 73 | resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} 74 | deprecated: 'Merged into tsx: https://tsx.is' 75 | 76 | '@esbuild-kit/esm-loader@2.6.5': 77 | resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} 78 | deprecated: 'Merged into tsx: https://tsx.is' 79 | 80 | '@esbuild/aix-ppc64@0.19.12': 81 | resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} 82 | engines: {node: '>=12'} 83 | cpu: [ppc64] 84 | os: [aix] 85 | 86 | '@esbuild/android-arm64@0.18.20': 87 | resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} 88 | engines: {node: '>=12'} 89 | cpu: [arm64] 90 | os: [android] 91 | 92 | '@esbuild/android-arm64@0.19.12': 93 | resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} 94 | engines: {node: '>=12'} 95 | cpu: [arm64] 96 | os: [android] 97 | 98 | '@esbuild/android-arm@0.18.20': 99 | resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} 100 | engines: {node: '>=12'} 101 | cpu: [arm] 102 | os: [android] 103 | 104 | '@esbuild/android-arm@0.19.12': 105 | resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} 106 | engines: {node: '>=12'} 107 | cpu: [arm] 108 | os: [android] 109 | 110 | '@esbuild/android-x64@0.18.20': 111 | resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} 112 | engines: {node: '>=12'} 113 | cpu: [x64] 114 | os: [android] 115 | 116 | '@esbuild/android-x64@0.19.12': 117 | resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} 118 | engines: {node: '>=12'} 119 | cpu: [x64] 120 | os: [android] 121 | 122 | '@esbuild/darwin-arm64@0.18.20': 123 | resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} 124 | engines: {node: '>=12'} 125 | cpu: [arm64] 126 | os: [darwin] 127 | 128 | '@esbuild/darwin-arm64@0.19.12': 129 | resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} 130 | engines: {node: '>=12'} 131 | cpu: [arm64] 132 | os: [darwin] 133 | 134 | '@esbuild/darwin-x64@0.18.20': 135 | resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} 136 | engines: {node: '>=12'} 137 | cpu: [x64] 138 | os: [darwin] 139 | 140 | '@esbuild/darwin-x64@0.19.12': 141 | resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} 142 | engines: {node: '>=12'} 143 | cpu: [x64] 144 | os: [darwin] 145 | 146 | '@esbuild/freebsd-arm64@0.18.20': 147 | resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} 148 | engines: {node: '>=12'} 149 | cpu: [arm64] 150 | os: [freebsd] 151 | 152 | '@esbuild/freebsd-arm64@0.19.12': 153 | resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} 154 | engines: {node: '>=12'} 155 | cpu: [arm64] 156 | os: [freebsd] 157 | 158 | '@esbuild/freebsd-x64@0.18.20': 159 | resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} 160 | engines: {node: '>=12'} 161 | cpu: [x64] 162 | os: [freebsd] 163 | 164 | '@esbuild/freebsd-x64@0.19.12': 165 | resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} 166 | engines: {node: '>=12'} 167 | cpu: [x64] 168 | os: [freebsd] 169 | 170 | '@esbuild/linux-arm64@0.18.20': 171 | resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} 172 | engines: {node: '>=12'} 173 | cpu: [arm64] 174 | os: [linux] 175 | 176 | '@esbuild/linux-arm64@0.19.12': 177 | resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} 178 | engines: {node: '>=12'} 179 | cpu: [arm64] 180 | os: [linux] 181 | 182 | '@esbuild/linux-arm@0.18.20': 183 | resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} 184 | engines: {node: '>=12'} 185 | cpu: [arm] 186 | os: [linux] 187 | 188 | '@esbuild/linux-arm@0.19.12': 189 | resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} 190 | engines: {node: '>=12'} 191 | cpu: [arm] 192 | os: [linux] 193 | 194 | '@esbuild/linux-ia32@0.18.20': 195 | resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} 196 | engines: {node: '>=12'} 197 | cpu: [ia32] 198 | os: [linux] 199 | 200 | '@esbuild/linux-ia32@0.19.12': 201 | resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} 202 | engines: {node: '>=12'} 203 | cpu: [ia32] 204 | os: [linux] 205 | 206 | '@esbuild/linux-loong64@0.18.20': 207 | resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} 208 | engines: {node: '>=12'} 209 | cpu: [loong64] 210 | os: [linux] 211 | 212 | '@esbuild/linux-loong64@0.19.12': 213 | resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} 214 | engines: {node: '>=12'} 215 | cpu: [loong64] 216 | os: [linux] 217 | 218 | '@esbuild/linux-mips64el@0.18.20': 219 | resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} 220 | engines: {node: '>=12'} 221 | cpu: [mips64el] 222 | os: [linux] 223 | 224 | '@esbuild/linux-mips64el@0.19.12': 225 | resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} 226 | engines: {node: '>=12'} 227 | cpu: [mips64el] 228 | os: [linux] 229 | 230 | '@esbuild/linux-ppc64@0.18.20': 231 | resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} 232 | engines: {node: '>=12'} 233 | cpu: [ppc64] 234 | os: [linux] 235 | 236 | '@esbuild/linux-ppc64@0.19.12': 237 | resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} 238 | engines: {node: '>=12'} 239 | cpu: [ppc64] 240 | os: [linux] 241 | 242 | '@esbuild/linux-riscv64@0.18.20': 243 | resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} 244 | engines: {node: '>=12'} 245 | cpu: [riscv64] 246 | os: [linux] 247 | 248 | '@esbuild/linux-riscv64@0.19.12': 249 | resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} 250 | engines: {node: '>=12'} 251 | cpu: [riscv64] 252 | os: [linux] 253 | 254 | '@esbuild/linux-s390x@0.18.20': 255 | resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} 256 | engines: {node: '>=12'} 257 | cpu: [s390x] 258 | os: [linux] 259 | 260 | '@esbuild/linux-s390x@0.19.12': 261 | resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} 262 | engines: {node: '>=12'} 263 | cpu: [s390x] 264 | os: [linux] 265 | 266 | '@esbuild/linux-x64@0.18.20': 267 | resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} 268 | engines: {node: '>=12'} 269 | cpu: [x64] 270 | os: [linux] 271 | 272 | '@esbuild/linux-x64@0.19.12': 273 | resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} 274 | engines: {node: '>=12'} 275 | cpu: [x64] 276 | os: [linux] 277 | 278 | '@esbuild/netbsd-x64@0.18.20': 279 | resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} 280 | engines: {node: '>=12'} 281 | cpu: [x64] 282 | os: [netbsd] 283 | 284 | '@esbuild/netbsd-x64@0.19.12': 285 | resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} 286 | engines: {node: '>=12'} 287 | cpu: [x64] 288 | os: [netbsd] 289 | 290 | '@esbuild/openbsd-x64@0.18.20': 291 | resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} 292 | engines: {node: '>=12'} 293 | cpu: [x64] 294 | os: [openbsd] 295 | 296 | '@esbuild/openbsd-x64@0.19.12': 297 | resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} 298 | engines: {node: '>=12'} 299 | cpu: [x64] 300 | os: [openbsd] 301 | 302 | '@esbuild/sunos-x64@0.18.20': 303 | resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} 304 | engines: {node: '>=12'} 305 | cpu: [x64] 306 | os: [sunos] 307 | 308 | '@esbuild/sunos-x64@0.19.12': 309 | resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} 310 | engines: {node: '>=12'} 311 | cpu: [x64] 312 | os: [sunos] 313 | 314 | '@esbuild/win32-arm64@0.18.20': 315 | resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} 316 | engines: {node: '>=12'} 317 | cpu: [arm64] 318 | os: [win32] 319 | 320 | '@esbuild/win32-arm64@0.19.12': 321 | resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} 322 | engines: {node: '>=12'} 323 | cpu: [arm64] 324 | os: [win32] 325 | 326 | '@esbuild/win32-ia32@0.18.20': 327 | resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} 328 | engines: {node: '>=12'} 329 | cpu: [ia32] 330 | os: [win32] 331 | 332 | '@esbuild/win32-ia32@0.19.12': 333 | resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} 334 | engines: {node: '>=12'} 335 | cpu: [ia32] 336 | os: [win32] 337 | 338 | '@esbuild/win32-x64@0.18.20': 339 | resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} 340 | engines: {node: '>=12'} 341 | cpu: [x64] 342 | os: [win32] 343 | 344 | '@esbuild/win32-x64@0.19.12': 345 | resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} 346 | engines: {node: '>=12'} 347 | cpu: [x64] 348 | os: [win32] 349 | 350 | '@img/sharp-darwin-arm64@0.33.5': 351 | resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} 352 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 353 | cpu: [arm64] 354 | os: [darwin] 355 | 356 | '@img/sharp-darwin-x64@0.33.5': 357 | resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} 358 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 359 | cpu: [x64] 360 | os: [darwin] 361 | 362 | '@img/sharp-libvips-darwin-arm64@1.0.4': 363 | resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} 364 | cpu: [arm64] 365 | os: [darwin] 366 | 367 | '@img/sharp-libvips-darwin-x64@1.0.4': 368 | resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} 369 | cpu: [x64] 370 | os: [darwin] 371 | 372 | '@img/sharp-libvips-linux-arm64@1.0.4': 373 | resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} 374 | cpu: [arm64] 375 | os: [linux] 376 | 377 | '@img/sharp-libvips-linux-arm@1.0.5': 378 | resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} 379 | cpu: [arm] 380 | os: [linux] 381 | 382 | '@img/sharp-libvips-linux-s390x@1.0.4': 383 | resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} 384 | cpu: [s390x] 385 | os: [linux] 386 | 387 | '@img/sharp-libvips-linux-x64@1.0.4': 388 | resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} 389 | cpu: [x64] 390 | os: [linux] 391 | 392 | '@img/sharp-libvips-linuxmusl-arm64@1.0.4': 393 | resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} 394 | cpu: [arm64] 395 | os: [linux] 396 | 397 | '@img/sharp-libvips-linuxmusl-x64@1.0.4': 398 | resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} 399 | cpu: [x64] 400 | os: [linux] 401 | 402 | '@img/sharp-linux-arm64@0.33.5': 403 | resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} 404 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 405 | cpu: [arm64] 406 | os: [linux] 407 | 408 | '@img/sharp-linux-arm@0.33.5': 409 | resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} 410 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 411 | cpu: [arm] 412 | os: [linux] 413 | 414 | '@img/sharp-linux-s390x@0.33.5': 415 | resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} 416 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 417 | cpu: [s390x] 418 | os: [linux] 419 | 420 | '@img/sharp-linux-x64@0.33.5': 421 | resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} 422 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 423 | cpu: [x64] 424 | os: [linux] 425 | 426 | '@img/sharp-linuxmusl-arm64@0.33.5': 427 | resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} 428 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 429 | cpu: [arm64] 430 | os: [linux] 431 | 432 | '@img/sharp-linuxmusl-x64@0.33.5': 433 | resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} 434 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 435 | cpu: [x64] 436 | os: [linux] 437 | 438 | '@img/sharp-wasm32@0.33.5': 439 | resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} 440 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 441 | cpu: [wasm32] 442 | 443 | '@img/sharp-win32-ia32@0.33.5': 444 | resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} 445 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 446 | cpu: [ia32] 447 | os: [win32] 448 | 449 | '@img/sharp-win32-x64@0.33.5': 450 | resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} 451 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 452 | cpu: [x64] 453 | os: [win32] 454 | 455 | '@next/env@15.0.4-canary.36': 456 | resolution: {integrity: sha512-i6UHO8KRU9Cw69VncF5xyv//rJiHFC+YVMbMzSlEDv/1/1AFIhKIlbkiDb8wqidrg6QOeMmPhFr6rtTkCu2XWg==} 457 | 458 | '@next/swc-darwin-arm64@15.0.4-canary.36': 459 | resolution: {integrity: sha512-FBXqE9wFakbmBZLxFGcSJOnOWc0Ms9nlT6jlTJmt70/BcZQnKvoN83j3pudPua7ajo03spAljP0I6ZsG6T1KFg==} 460 | engines: {node: '>= 10'} 461 | cpu: [arm64] 462 | os: [darwin] 463 | 464 | '@next/swc-darwin-x64@15.0.4-canary.36': 465 | resolution: {integrity: sha512-TVer2dAVIpwAQwX5oCW4VvhAkC4+qjVfXqyfaXHmhZp2DthsnbbsfMOZXUZwtU6c9GkPb5EwPSr+70slHs7eog==} 466 | engines: {node: '>= 10'} 467 | cpu: [x64] 468 | os: [darwin] 469 | 470 | '@next/swc-linux-arm64-gnu@15.0.4-canary.36': 471 | resolution: {integrity: sha512-QXMXcQ+6uPZ1v0tUyiPiFBMQ8xkpLxlmCUwHrtCYeIq2ZkrlG1bBjrPcCupAJYWKr0FolQYnWm1QguJljyANqw==} 472 | engines: {node: '>= 10'} 473 | cpu: [arm64] 474 | os: [linux] 475 | 476 | '@next/swc-linux-arm64-musl@15.0.4-canary.36': 477 | resolution: {integrity: sha512-RX3UbT9YZF/BLsDTUejE7v/Qadvy018cZKBs4swBH32BJrjNoe7EfN/xFpK7t0MN4tgjcYVe0C1ja7ljkjMG4Q==} 478 | engines: {node: '>= 10'} 479 | cpu: [arm64] 480 | os: [linux] 481 | 482 | '@next/swc-linux-x64-gnu@15.0.4-canary.36': 483 | resolution: {integrity: sha512-ReZ1gGYBiEik3OPTTwGpAX3S1meklcdItNCHq6NKGCLA+OTUmIbSSWVy4+d3yrtflcUSUQMfA9FHn2ljufPndQ==} 484 | engines: {node: '>= 10'} 485 | cpu: [x64] 486 | os: [linux] 487 | 488 | '@next/swc-linux-x64-musl@15.0.4-canary.36': 489 | resolution: {integrity: sha512-SZszQaH0L8UvDLeOA9kHcwaZ/kRrYjum/5CvHdD9ag9D8N5if63hCzyqI9wq5Ujmkk7JWdLLgU43Wjs/r2lcYw==} 490 | engines: {node: '>= 10'} 491 | cpu: [x64] 492 | os: [linux] 493 | 494 | '@next/swc-win32-arm64-msvc@15.0.4-canary.36': 495 | resolution: {integrity: sha512-B9oy+mgYeABnJfYcu0Xz//hZ4qj2177aT1D3+vjtHFePMh/bbTDnWXThO7BdfqBbHMTl1Bd17jwv8vYfKRLB7g==} 496 | engines: {node: '>= 10'} 497 | cpu: [arm64] 498 | os: [win32] 499 | 500 | '@next/swc-win32-x64-msvc@15.0.4-canary.36': 501 | resolution: {integrity: sha512-/0Sj8knfVb7lEwcgputR3IOWyO0yEA2PdyyTN2bG7efC4xb2zzaE7L5m+2D7u0JCFo+O3wNpZzBGMtmxVyIzHw==} 502 | engines: {node: '>= 10'} 503 | cpu: [x64] 504 | os: [win32] 505 | 506 | '@swc/counter@0.1.3': 507 | resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} 508 | 509 | '@swc/helpers@0.5.13': 510 | resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} 511 | 512 | '@tailwindcss/node@4.0.0-beta.4': 513 | resolution: {integrity: sha512-NAPhQ6BcjXUqI+QFtzYHTcoqX4ACGNZl69NfMIDCCTvmPZ761sdvX8cy3LyeJEZDyfyoBT5vzjzfWeNZR7Y+KA==} 514 | 515 | '@tailwindcss/oxide-android-arm64@4.0.0-beta.4': 516 | resolution: {integrity: sha512-r/MBScgeBZXE1xkZ+mw8/QybAlTOEzSJ6Jo9W9YCaqy+6S0Iaeo6CmwOPBrtX4/nlHm/v3hcmQWnaeJDQJMkTg==} 517 | engines: {node: '>= 10'} 518 | cpu: [arm64] 519 | os: [android] 520 | 521 | '@tailwindcss/oxide-darwin-arm64@4.0.0-beta.4': 522 | resolution: {integrity: sha512-snm+1FmjU59X/2kCgryBlbGYEwJ945cC48XkN78pZIxYn/V7LNukGvDlIKgVJ6GxU4iiac7pk149ZyFZ7Ukj4Q==} 523 | engines: {node: '>= 10'} 524 | cpu: [arm64] 525 | os: [darwin] 526 | 527 | '@tailwindcss/oxide-darwin-x64@4.0.0-beta.4': 528 | resolution: {integrity: sha512-BRbp+1WSExBCHnBK3EmTmmweM04UhpegOjjQbWDADrklhNU7juYNiu/4RN7A74ndweeopKuYB8gvMrdGlAEeuA==} 529 | engines: {node: '>= 10'} 530 | cpu: [x64] 531 | os: [darwin] 532 | 533 | '@tailwindcss/oxide-freebsd-x64@4.0.0-beta.4': 534 | resolution: {integrity: sha512-HO6cclVvp1JueqleUfYpLFK41lnI/5/oqwkftZQ5LNF0fwp8sQm2cEh7GTCj2hwTIUnHbxmSmrg1MZL1/yoVgA==} 535 | engines: {node: '>= 10'} 536 | cpu: [x64] 537 | os: [freebsd] 538 | 539 | '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.0-beta.4': 540 | resolution: {integrity: sha512-Z6xUcakkJZGySTce0QqfbNdLRK4cUNmilvDd69q+8Ep+Vxqy+x5bkCweAf7b+lJsUe6mjclT2EP1ouMvqegnQQ==} 541 | engines: {node: '>= 10'} 542 | cpu: [arm] 543 | os: [linux] 544 | 545 | '@tailwindcss/oxide-linux-arm64-gnu@4.0.0-beta.4': 546 | resolution: {integrity: sha512-hr9AbxrsAXWjZp8iIcQes7eIfMnSgUS6qA/SbcxFfvmte/BHUSuSxa21OZpFRVYFcQ/BIqLA1hU27fvfZZq4JQ==} 547 | engines: {node: '>= 10'} 548 | cpu: [arm64] 549 | os: [linux] 550 | 551 | '@tailwindcss/oxide-linux-arm64-musl@4.0.0-beta.4': 552 | resolution: {integrity: sha512-b//iI94Eo29LqzAOBfFt1m3bM1CF9NU3K59o3ikAwM6kdxmPQoc7TBpcrEh3lKomJ1Ejj0M95022YqksY7O8gQ==} 553 | engines: {node: '>= 10'} 554 | cpu: [arm64] 555 | os: [linux] 556 | 557 | '@tailwindcss/oxide-linux-x64-gnu@4.0.0-beta.4': 558 | resolution: {integrity: sha512-xqK6amSCZpEpWbuN0WYDlaOir7n2NjD2jtnVZ5eWpnw4kkjzu0kmVqN9PaWdejZUKVfvEy7Ldbmcos9MpQhi4g==} 559 | engines: {node: '>= 10'} 560 | cpu: [x64] 561 | os: [linux] 562 | 563 | '@tailwindcss/oxide-linux-x64-musl@4.0.0-beta.4': 564 | resolution: {integrity: sha512-9V3CtBJ+oBxeppvBUvfZ2NbsrgKkLDIVrF4jUcpj3Md4rdpW6mIRWxqzEY1uT9JZlFr4YmVx6Auax+32BUtD2A==} 565 | engines: {node: '>= 10'} 566 | cpu: [x64] 567 | os: [linux] 568 | 569 | '@tailwindcss/oxide-win32-arm64-msvc@4.0.0-beta.4': 570 | resolution: {integrity: sha512-MYfGNg1nikym/F2aCx0ni5ZWKsChVwWTsjgmDo9ZOiqhWE/7yeX0Ej+lugEh4gPHyUpcMbeTZySZx0OJ8o+X1Q==} 571 | engines: {node: '>= 10'} 572 | cpu: [arm64] 573 | os: [win32] 574 | 575 | '@tailwindcss/oxide-win32-x64-msvc@4.0.0-beta.4': 576 | resolution: {integrity: sha512-hCMihksJD5odhAm+SLFNk75etPRK+QjyMIPMryUI7na6kvB8OaTH4gRBIO27GvRk2q1Zm2sqn4JoYy2auuoAAA==} 577 | engines: {node: '>= 10'} 578 | cpu: [x64] 579 | os: [win32] 580 | 581 | '@tailwindcss/oxide@4.0.0-beta.4': 582 | resolution: {integrity: sha512-yYZ069LXAEOrQt3SwYV+PhwsGBM0qo7ofsOF5BDrju9Nsz+X0z9NCF9fvc6zJ11wX1bSVuiyLbwIS4P9rVT8hg==} 583 | engines: {node: '>= 10'} 584 | 585 | '@tailwindcss/postcss@4.0.0-beta.4': 586 | resolution: {integrity: sha512-nZZKXG/SRf4+8udSThSMbCduQRen60kWtlkxwLUNpKlJWBkWF7vy/ybJzfgCXwEFxBLuNsnm89o42I3XoifAIw==} 587 | 588 | '@types/node@22.10.1': 589 | resolution: {integrity: sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==} 590 | 591 | '@types/prop-types@15.7.13': 592 | resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} 593 | 594 | '@types/react@18.3.12': 595 | resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} 596 | 597 | buffer-from@1.1.2: 598 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 599 | 600 | busboy@1.6.0: 601 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} 602 | engines: {node: '>=10.16.0'} 603 | 604 | caniuse-lite@1.0.30001686: 605 | resolution: {integrity: sha512-Y7deg0Aergpa24M3qLC5xjNklnKnhsmSyR/V89dLZ1n0ucJIFNs7PgR2Yfa/Zf6W79SbBicgtGxZr2juHkEUIA==} 606 | 607 | client-only@0.0.1: 608 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} 609 | 610 | color-convert@2.0.1: 611 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 612 | engines: {node: '>=7.0.0'} 613 | 614 | color-name@1.1.4: 615 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 616 | 617 | color-string@1.9.1: 618 | resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} 619 | 620 | color@4.2.3: 621 | resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} 622 | engines: {node: '>=12.5.0'} 623 | 624 | csstype@3.1.3: 625 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 626 | 627 | debug@4.3.7: 628 | resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} 629 | engines: {node: '>=6.0'} 630 | peerDependencies: 631 | supports-color: '*' 632 | peerDependenciesMeta: 633 | supports-color: 634 | optional: true 635 | 636 | detect-libc@1.0.3: 637 | resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} 638 | engines: {node: '>=0.10'} 639 | hasBin: true 640 | 641 | detect-libc@2.0.3: 642 | resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} 643 | engines: {node: '>=8'} 644 | 645 | dotenv@16.4.7: 646 | resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} 647 | engines: {node: '>=12'} 648 | 649 | drizzle-kit@0.28.1: 650 | resolution: {integrity: sha512-JimOV+ystXTWMgZkLHYHf2w3oS28hxiH1FR0dkmJLc7GHzdGJoJAQtQS5DRppnabsRZwE2U1F6CuezVBgmsBBQ==} 651 | hasBin: true 652 | 653 | drizzle-orm@0.36.4: 654 | resolution: {integrity: sha512-1OZY3PXD7BR00Gl61UUOFihslDldfH4NFRH2MbP54Yxi0G/PKn4HfO65JYZ7c16DeP3SpM3Aw+VXVG9j6CRSXA==} 655 | peerDependencies: 656 | '@aws-sdk/client-rds-data': '>=3' 657 | '@cloudflare/workers-types': '>=3' 658 | '@electric-sql/pglite': '>=0.2.0' 659 | '@libsql/client': '>=0.10.0' 660 | '@libsql/client-wasm': '>=0.10.0' 661 | '@neondatabase/serverless': '>=0.10.0' 662 | '@op-engineering/op-sqlite': '>=2' 663 | '@opentelemetry/api': ^1.4.1 664 | '@planetscale/database': '>=1' 665 | '@prisma/client': '*' 666 | '@tidbcloud/serverless': '*' 667 | '@types/better-sqlite3': '*' 668 | '@types/pg': '*' 669 | '@types/react': '>=18' 670 | '@types/sql.js': '*' 671 | '@vercel/postgres': '>=0.8.0' 672 | '@xata.io/client': '*' 673 | better-sqlite3: '>=7' 674 | bun-types: '*' 675 | expo-sqlite: '>=14.0.0' 676 | knex: '*' 677 | kysely: '*' 678 | mysql2: '>=2' 679 | pg: '>=8' 680 | postgres: '>=3' 681 | prisma: '*' 682 | react: '>=18' 683 | sql.js: '>=1' 684 | sqlite3: '>=5' 685 | peerDependenciesMeta: 686 | '@aws-sdk/client-rds-data': 687 | optional: true 688 | '@cloudflare/workers-types': 689 | optional: true 690 | '@electric-sql/pglite': 691 | optional: true 692 | '@libsql/client': 693 | optional: true 694 | '@libsql/client-wasm': 695 | optional: true 696 | '@neondatabase/serverless': 697 | optional: true 698 | '@op-engineering/op-sqlite': 699 | optional: true 700 | '@opentelemetry/api': 701 | optional: true 702 | '@planetscale/database': 703 | optional: true 704 | '@prisma/client': 705 | optional: true 706 | '@tidbcloud/serverless': 707 | optional: true 708 | '@types/better-sqlite3': 709 | optional: true 710 | '@types/pg': 711 | optional: true 712 | '@types/react': 713 | optional: true 714 | '@types/sql.js': 715 | optional: true 716 | '@vercel/postgres': 717 | optional: true 718 | '@xata.io/client': 719 | optional: true 720 | better-sqlite3: 721 | optional: true 722 | bun-types: 723 | optional: true 724 | expo-sqlite: 725 | optional: true 726 | knex: 727 | optional: true 728 | kysely: 729 | optional: true 730 | mysql2: 731 | optional: true 732 | pg: 733 | optional: true 734 | postgres: 735 | optional: true 736 | prisma: 737 | optional: true 738 | react: 739 | optional: true 740 | sql.js: 741 | optional: true 742 | sqlite3: 743 | optional: true 744 | 745 | drizzle-seed@0.1.2: 746 | resolution: {integrity: sha512-F7+1tK/f5SHXK75ISH1zKUZWslW18dr9gbYB9tQHx7t5Wm82481OE5HGKFIjWuGV1VS0eFVr7+uXl8PFwPJjPA==} 747 | peerDependencies: 748 | drizzle-orm: '>=0.36.4' 749 | peerDependenciesMeta: 750 | drizzle-orm: 751 | optional: true 752 | 753 | enhanced-resolve@5.17.1: 754 | resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} 755 | engines: {node: '>=10.13.0'} 756 | 757 | esbuild-register@3.6.0: 758 | resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} 759 | peerDependencies: 760 | esbuild: '>=0.12 <1' 761 | 762 | esbuild@0.18.20: 763 | resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} 764 | engines: {node: '>=12'} 765 | hasBin: true 766 | 767 | esbuild@0.19.12: 768 | resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} 769 | engines: {node: '>=12'} 770 | hasBin: true 771 | 772 | get-tsconfig@4.8.1: 773 | resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} 774 | 775 | graceful-fs@4.2.11: 776 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 777 | 778 | is-arrayish@0.3.2: 779 | resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} 780 | 781 | jiti@2.4.1: 782 | resolution: {integrity: sha512-yPBThwecp1wS9DmoA4x4KR2h3QoslacnDR8ypuFM962kI4/456Iy1oHx2RAgh4jfZNdn0bctsdadceiBUgpU1g==} 783 | hasBin: true 784 | 785 | lightningcss-darwin-arm64@1.28.2: 786 | resolution: {integrity: sha512-/8cPSqZiusHSS+WQz0W4NuaqFjquys1x+NsdN/XOHb+idGHJSoJ7SoQTVl3DZuAgtPZwFZgRfb/vd1oi8uX6+g==} 787 | engines: {node: '>= 12.0.0'} 788 | cpu: [arm64] 789 | os: [darwin] 790 | 791 | lightningcss-darwin-x64@1.28.2: 792 | resolution: {integrity: sha512-R7sFrXlgKjvoEG8umpVt/yutjxOL0z8KWf0bfPT3cYMOW4470xu5qSHpFdIOpRWwl3FKNMUdbKtMUjYt0h2j4g==} 793 | engines: {node: '>= 12.0.0'} 794 | cpu: [x64] 795 | os: [darwin] 796 | 797 | lightningcss-freebsd-x64@1.28.2: 798 | resolution: {integrity: sha512-l2qrCT+x7crAY+lMIxtgvV10R8VurzHAoUZJaVFSlHrN8kRLTvEg9ObojIDIexqWJQvJcVVV3vfzsEynpiuvgA==} 799 | engines: {node: '>= 12.0.0'} 800 | cpu: [x64] 801 | os: [freebsd] 802 | 803 | lightningcss-linux-arm-gnueabihf@1.28.2: 804 | resolution: {integrity: sha512-DKMzpICBEKnL53X14rF7hFDu8KKALUJtcKdFUCW5YOlGSiwRSgVoRjM97wUm/E0NMPkzrTi/rxfvt7ruNK8meg==} 805 | engines: {node: '>= 12.0.0'} 806 | cpu: [arm] 807 | os: [linux] 808 | 809 | lightningcss-linux-arm64-gnu@1.28.2: 810 | resolution: {integrity: sha512-nhfjYkfymWZSxdtTNMWyhFk2ImUm0X7NAgJWFwnsYPOfmtWQEapzG/DXZTfEfMjSzERNUNJoQjPAbdqgB+sjiw==} 811 | engines: {node: '>= 12.0.0'} 812 | cpu: [arm64] 813 | os: [linux] 814 | 815 | lightningcss-linux-arm64-musl@1.28.2: 816 | resolution: {integrity: sha512-1SPG1ZTNnphWvAv8RVOymlZ8BDtAg69Hbo7n4QxARvkFVCJAt0cgjAw1Fox0WEhf4PwnyoOBaVH0Z5YNgzt4dA==} 817 | engines: {node: '>= 12.0.0'} 818 | cpu: [arm64] 819 | os: [linux] 820 | 821 | lightningcss-linux-x64-gnu@1.28.2: 822 | resolution: {integrity: sha512-ZhQy0FcO//INWUdo/iEdbefntTdpPVQ0XJwwtdbBuMQe+uxqZoytm9M+iqR9O5noWFaxK+nbS2iR/I80Q2Ofpg==} 823 | engines: {node: '>= 12.0.0'} 824 | cpu: [x64] 825 | os: [linux] 826 | 827 | lightningcss-linux-x64-musl@1.28.2: 828 | resolution: {integrity: sha512-alb/j1NMrgQmSFyzTbN1/pvMPM+gdDw7YBuQ5VSgcFDypN3Ah0BzC2dTZbzwzaMdUVDszX6zH5MzjfVN1oGuww==} 829 | engines: {node: '>= 12.0.0'} 830 | cpu: [x64] 831 | os: [linux] 832 | 833 | lightningcss-win32-arm64-msvc@1.28.2: 834 | resolution: {integrity: sha512-WnwcjcBeAt0jGdjlgbT9ANf30pF0C/QMb1XnLnH272DQU8QXh+kmpi24R55wmWBwaTtNAETZ+m35ohyeMiNt+g==} 835 | engines: {node: '>= 12.0.0'} 836 | cpu: [arm64] 837 | os: [win32] 838 | 839 | lightningcss-win32-x64-msvc@1.28.2: 840 | resolution: {integrity: sha512-3piBifyT3avz22o6mDKywQC/OisH2yDK+caHWkiMsF82i3m5wDBadyCjlCQ5VNgzYkxrWZgiaxHDdd5uxsi0/A==} 841 | engines: {node: '>= 12.0.0'} 842 | cpu: [x64] 843 | os: [win32] 844 | 845 | lightningcss@1.28.2: 846 | resolution: {integrity: sha512-ePLRrbt3fgjXI5VFZOLbvkLD5ZRuxGKm+wJ3ujCqBtL3NanDHPo/5zicR5uEKAPiIjBYF99BM4K4okvMznjkVA==} 847 | engines: {node: '>= 12.0.0'} 848 | 849 | lucide-react@0.465.0: 850 | resolution: {integrity: sha512-uV7WEqbwaCcc+QjAxIhAvkAr3kgwkkYID3XptCHll72/F7NZlk6ONmJYpk+Xqx5Q0r/8wiOjz73H1BYbl8Z8iw==} 851 | peerDependencies: 852 | react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc 853 | 854 | ms@2.1.3: 855 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 856 | 857 | nanoid@3.3.8: 858 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} 859 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 860 | hasBin: true 861 | 862 | next@15.0.4-canary.36: 863 | resolution: {integrity: sha512-ebOl41j6m0MR2Pgznwp4ld8QZoa3/kBxODkizinaNySnuWL8exsIHVHi2aVlegJXDvU19DAXFqftrSmt7mxINA==} 864 | engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} 865 | hasBin: true 866 | peerDependencies: 867 | '@opentelemetry/api': ^1.1.0 868 | '@playwright/test': ^1.41.2 869 | babel-plugin-react-compiler: '*' 870 | react: ^18.2.0 || 19.0.0-rc-b01722d5-20241114 871 | react-dom: ^18.2.0 || 19.0.0-rc-b01722d5-20241114 872 | sass: ^1.3.0 873 | peerDependenciesMeta: 874 | '@opentelemetry/api': 875 | optional: true 876 | '@playwright/test': 877 | optional: true 878 | babel-plugin-react-compiler: 879 | optional: true 880 | sass: 881 | optional: true 882 | 883 | picocolors@1.1.1: 884 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 885 | 886 | postcss@8.4.31: 887 | resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} 888 | engines: {node: ^10 || ^12 || >=14} 889 | 890 | postcss@8.4.49: 891 | resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} 892 | engines: {node: ^10 || ^12 || >=14} 893 | 894 | postgres@3.4.5: 895 | resolution: {integrity: sha512-cDWgoah1Gez9rN3H4165peY9qfpEo+SA61oQv65O3cRUE1pOEoJWwddwcqKE8XZYjbblOJlYDlLV4h67HrEVDg==} 896 | engines: {node: '>=12'} 897 | 898 | pure-rand@6.1.0: 899 | resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} 900 | 901 | react-dom@19.0.0-rc-2d16326d-20240930: 902 | resolution: {integrity: sha512-eBmzUwg2n0SkG+LFoQbRM/b6GyKSDFDnUEPWS+Oepbv6O6XCLSEzoJzPu7bFgNzL0tOA8gjjtP4ZJChcasldqA==} 903 | peerDependencies: 904 | react: 19.0.0-rc-2d16326d-20240930 905 | 906 | react@19.0.0-rc-2d16326d-20240930: 907 | resolution: {integrity: sha512-XeaCnXQ5lZoOtPaVZPDEcx2TUDDt6JPIEviTKhIBkQNAYKcQkAT6SPbEqxC2KqkLPnilvPi9zz+c8iikstrwRg==} 908 | engines: {node: '>=0.10.0'} 909 | 910 | resolve-pkg-maps@1.0.0: 911 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 912 | 913 | scheduler@0.25.0-rc-2d16326d-20240930: 914 | resolution: {integrity: sha512-P0lFGsD0rOhDQR2AA3ls0MYXeWnw/Tuu5bERwBC92DXSASB/493N9LQKe4AuCwVC671tjktLckGAxghUqJq7yg==} 915 | 916 | semver@7.6.3: 917 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 918 | engines: {node: '>=10'} 919 | hasBin: true 920 | 921 | sharp@0.33.5: 922 | resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} 923 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 924 | 925 | simple-swizzle@0.2.2: 926 | resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} 927 | 928 | source-map-js@1.2.1: 929 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 930 | engines: {node: '>=0.10.0'} 931 | 932 | source-map-support@0.5.21: 933 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 934 | 935 | source-map@0.6.1: 936 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 937 | engines: {node: '>=0.10.0'} 938 | 939 | streamsearch@1.1.0: 940 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} 941 | engines: {node: '>=10.0.0'} 942 | 943 | styled-jsx@5.1.6: 944 | resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} 945 | engines: {node: '>= 12.0.0'} 946 | peerDependencies: 947 | '@babel/core': '*' 948 | babel-plugin-macros: '*' 949 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' 950 | peerDependenciesMeta: 951 | '@babel/core': 952 | optional: true 953 | babel-plugin-macros: 954 | optional: true 955 | 956 | tailwindcss@4.0.0-beta.4: 957 | resolution: {integrity: sha512-mkjpwMyaHCa3L5HmRjYyY8w8D+7brxwbM7YQxH8QeEFtCURd5fvdHIC9TEpIaL1X49vhl8cuOFY6Nhi6sCsI5w==} 958 | 959 | tapable@2.2.1: 960 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} 961 | engines: {node: '>=6'} 962 | 963 | tslib@2.8.1: 964 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 965 | 966 | types-react-dom@19.0.0-rc.1: 967 | resolution: {integrity: sha512-VSLZJl8VXCD0fAWp7DUTFUDCcZ8DVXOQmjhJMD03odgeFmu14ZQJHCXeETm3BEAhJqfgJaFkLnGkQv88sRx0fQ==} 968 | 969 | types-react@19.0.0-rc.1: 970 | resolution: {integrity: sha512-RshndUfqTW6K3STLPis8BtAYCGOkMbtvYsi90gmVNDZBXUyUc5juf2PE9LfS/JmOlUIRO8cWTS/1MTnmhjDqyQ==} 971 | 972 | typescript@5.7.2: 973 | resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} 974 | engines: {node: '>=14.17'} 975 | hasBin: true 976 | 977 | undici-types@6.20.0: 978 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 979 | 980 | zod@3.23.8: 981 | resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} 982 | 983 | snapshots: 984 | 985 | '@alloc/quick-lru@5.2.0': {} 986 | 987 | '@drizzle-team/brocli@0.10.2': {} 988 | 989 | '@emnapi/runtime@1.3.1': 990 | dependencies: 991 | tslib: 2.8.1 992 | optional: true 993 | 994 | '@esbuild-kit/core-utils@3.3.2': 995 | dependencies: 996 | esbuild: 0.18.20 997 | source-map-support: 0.5.21 998 | 999 | '@esbuild-kit/esm-loader@2.6.5': 1000 | dependencies: 1001 | '@esbuild-kit/core-utils': 3.3.2 1002 | get-tsconfig: 4.8.1 1003 | 1004 | '@esbuild/aix-ppc64@0.19.12': 1005 | optional: true 1006 | 1007 | '@esbuild/android-arm64@0.18.20': 1008 | optional: true 1009 | 1010 | '@esbuild/android-arm64@0.19.12': 1011 | optional: true 1012 | 1013 | '@esbuild/android-arm@0.18.20': 1014 | optional: true 1015 | 1016 | '@esbuild/android-arm@0.19.12': 1017 | optional: true 1018 | 1019 | '@esbuild/android-x64@0.18.20': 1020 | optional: true 1021 | 1022 | '@esbuild/android-x64@0.19.12': 1023 | optional: true 1024 | 1025 | '@esbuild/darwin-arm64@0.18.20': 1026 | optional: true 1027 | 1028 | '@esbuild/darwin-arm64@0.19.12': 1029 | optional: true 1030 | 1031 | '@esbuild/darwin-x64@0.18.20': 1032 | optional: true 1033 | 1034 | '@esbuild/darwin-x64@0.19.12': 1035 | optional: true 1036 | 1037 | '@esbuild/freebsd-arm64@0.18.20': 1038 | optional: true 1039 | 1040 | '@esbuild/freebsd-arm64@0.19.12': 1041 | optional: true 1042 | 1043 | '@esbuild/freebsd-x64@0.18.20': 1044 | optional: true 1045 | 1046 | '@esbuild/freebsd-x64@0.19.12': 1047 | optional: true 1048 | 1049 | '@esbuild/linux-arm64@0.18.20': 1050 | optional: true 1051 | 1052 | '@esbuild/linux-arm64@0.19.12': 1053 | optional: true 1054 | 1055 | '@esbuild/linux-arm@0.18.20': 1056 | optional: true 1057 | 1058 | '@esbuild/linux-arm@0.19.12': 1059 | optional: true 1060 | 1061 | '@esbuild/linux-ia32@0.18.20': 1062 | optional: true 1063 | 1064 | '@esbuild/linux-ia32@0.19.12': 1065 | optional: true 1066 | 1067 | '@esbuild/linux-loong64@0.18.20': 1068 | optional: true 1069 | 1070 | '@esbuild/linux-loong64@0.19.12': 1071 | optional: true 1072 | 1073 | '@esbuild/linux-mips64el@0.18.20': 1074 | optional: true 1075 | 1076 | '@esbuild/linux-mips64el@0.19.12': 1077 | optional: true 1078 | 1079 | '@esbuild/linux-ppc64@0.18.20': 1080 | optional: true 1081 | 1082 | '@esbuild/linux-ppc64@0.19.12': 1083 | optional: true 1084 | 1085 | '@esbuild/linux-riscv64@0.18.20': 1086 | optional: true 1087 | 1088 | '@esbuild/linux-riscv64@0.19.12': 1089 | optional: true 1090 | 1091 | '@esbuild/linux-s390x@0.18.20': 1092 | optional: true 1093 | 1094 | '@esbuild/linux-s390x@0.19.12': 1095 | optional: true 1096 | 1097 | '@esbuild/linux-x64@0.18.20': 1098 | optional: true 1099 | 1100 | '@esbuild/linux-x64@0.19.12': 1101 | optional: true 1102 | 1103 | '@esbuild/netbsd-x64@0.18.20': 1104 | optional: true 1105 | 1106 | '@esbuild/netbsd-x64@0.19.12': 1107 | optional: true 1108 | 1109 | '@esbuild/openbsd-x64@0.18.20': 1110 | optional: true 1111 | 1112 | '@esbuild/openbsd-x64@0.19.12': 1113 | optional: true 1114 | 1115 | '@esbuild/sunos-x64@0.18.20': 1116 | optional: true 1117 | 1118 | '@esbuild/sunos-x64@0.19.12': 1119 | optional: true 1120 | 1121 | '@esbuild/win32-arm64@0.18.20': 1122 | optional: true 1123 | 1124 | '@esbuild/win32-arm64@0.19.12': 1125 | optional: true 1126 | 1127 | '@esbuild/win32-ia32@0.18.20': 1128 | optional: true 1129 | 1130 | '@esbuild/win32-ia32@0.19.12': 1131 | optional: true 1132 | 1133 | '@esbuild/win32-x64@0.18.20': 1134 | optional: true 1135 | 1136 | '@esbuild/win32-x64@0.19.12': 1137 | optional: true 1138 | 1139 | '@img/sharp-darwin-arm64@0.33.5': 1140 | optionalDependencies: 1141 | '@img/sharp-libvips-darwin-arm64': 1.0.4 1142 | optional: true 1143 | 1144 | '@img/sharp-darwin-x64@0.33.5': 1145 | optionalDependencies: 1146 | '@img/sharp-libvips-darwin-x64': 1.0.4 1147 | optional: true 1148 | 1149 | '@img/sharp-libvips-darwin-arm64@1.0.4': 1150 | optional: true 1151 | 1152 | '@img/sharp-libvips-darwin-x64@1.0.4': 1153 | optional: true 1154 | 1155 | '@img/sharp-libvips-linux-arm64@1.0.4': 1156 | optional: true 1157 | 1158 | '@img/sharp-libvips-linux-arm@1.0.5': 1159 | optional: true 1160 | 1161 | '@img/sharp-libvips-linux-s390x@1.0.4': 1162 | optional: true 1163 | 1164 | '@img/sharp-libvips-linux-x64@1.0.4': 1165 | optional: true 1166 | 1167 | '@img/sharp-libvips-linuxmusl-arm64@1.0.4': 1168 | optional: true 1169 | 1170 | '@img/sharp-libvips-linuxmusl-x64@1.0.4': 1171 | optional: true 1172 | 1173 | '@img/sharp-linux-arm64@0.33.5': 1174 | optionalDependencies: 1175 | '@img/sharp-libvips-linux-arm64': 1.0.4 1176 | optional: true 1177 | 1178 | '@img/sharp-linux-arm@0.33.5': 1179 | optionalDependencies: 1180 | '@img/sharp-libvips-linux-arm': 1.0.5 1181 | optional: true 1182 | 1183 | '@img/sharp-linux-s390x@0.33.5': 1184 | optionalDependencies: 1185 | '@img/sharp-libvips-linux-s390x': 1.0.4 1186 | optional: true 1187 | 1188 | '@img/sharp-linux-x64@0.33.5': 1189 | optionalDependencies: 1190 | '@img/sharp-libvips-linux-x64': 1.0.4 1191 | optional: true 1192 | 1193 | '@img/sharp-linuxmusl-arm64@0.33.5': 1194 | optionalDependencies: 1195 | '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 1196 | optional: true 1197 | 1198 | '@img/sharp-linuxmusl-x64@0.33.5': 1199 | optionalDependencies: 1200 | '@img/sharp-libvips-linuxmusl-x64': 1.0.4 1201 | optional: true 1202 | 1203 | '@img/sharp-wasm32@0.33.5': 1204 | dependencies: 1205 | '@emnapi/runtime': 1.3.1 1206 | optional: true 1207 | 1208 | '@img/sharp-win32-ia32@0.33.5': 1209 | optional: true 1210 | 1211 | '@img/sharp-win32-x64@0.33.5': 1212 | optional: true 1213 | 1214 | '@next/env@15.0.4-canary.36': {} 1215 | 1216 | '@next/swc-darwin-arm64@15.0.4-canary.36': 1217 | optional: true 1218 | 1219 | '@next/swc-darwin-x64@15.0.4-canary.36': 1220 | optional: true 1221 | 1222 | '@next/swc-linux-arm64-gnu@15.0.4-canary.36': 1223 | optional: true 1224 | 1225 | '@next/swc-linux-arm64-musl@15.0.4-canary.36': 1226 | optional: true 1227 | 1228 | '@next/swc-linux-x64-gnu@15.0.4-canary.36': 1229 | optional: true 1230 | 1231 | '@next/swc-linux-x64-musl@15.0.4-canary.36': 1232 | optional: true 1233 | 1234 | '@next/swc-win32-arm64-msvc@15.0.4-canary.36': 1235 | optional: true 1236 | 1237 | '@next/swc-win32-x64-msvc@15.0.4-canary.36': 1238 | optional: true 1239 | 1240 | '@swc/counter@0.1.3': {} 1241 | 1242 | '@swc/helpers@0.5.13': 1243 | dependencies: 1244 | tslib: 2.8.1 1245 | 1246 | '@tailwindcss/node@4.0.0-beta.4': 1247 | dependencies: 1248 | enhanced-resolve: 5.17.1 1249 | jiti: 2.4.1 1250 | tailwindcss: 4.0.0-beta.4 1251 | 1252 | '@tailwindcss/oxide-android-arm64@4.0.0-beta.4': 1253 | optional: true 1254 | 1255 | '@tailwindcss/oxide-darwin-arm64@4.0.0-beta.4': 1256 | optional: true 1257 | 1258 | '@tailwindcss/oxide-darwin-x64@4.0.0-beta.4': 1259 | optional: true 1260 | 1261 | '@tailwindcss/oxide-freebsd-x64@4.0.0-beta.4': 1262 | optional: true 1263 | 1264 | '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.0-beta.4': 1265 | optional: true 1266 | 1267 | '@tailwindcss/oxide-linux-arm64-gnu@4.0.0-beta.4': 1268 | optional: true 1269 | 1270 | '@tailwindcss/oxide-linux-arm64-musl@4.0.0-beta.4': 1271 | optional: true 1272 | 1273 | '@tailwindcss/oxide-linux-x64-gnu@4.0.0-beta.4': 1274 | optional: true 1275 | 1276 | '@tailwindcss/oxide-linux-x64-musl@4.0.0-beta.4': 1277 | optional: true 1278 | 1279 | '@tailwindcss/oxide-win32-arm64-msvc@4.0.0-beta.4': 1280 | optional: true 1281 | 1282 | '@tailwindcss/oxide-win32-x64-msvc@4.0.0-beta.4': 1283 | optional: true 1284 | 1285 | '@tailwindcss/oxide@4.0.0-beta.4': 1286 | optionalDependencies: 1287 | '@tailwindcss/oxide-android-arm64': 4.0.0-beta.4 1288 | '@tailwindcss/oxide-darwin-arm64': 4.0.0-beta.4 1289 | '@tailwindcss/oxide-darwin-x64': 4.0.0-beta.4 1290 | '@tailwindcss/oxide-freebsd-x64': 4.0.0-beta.4 1291 | '@tailwindcss/oxide-linux-arm-gnueabihf': 4.0.0-beta.4 1292 | '@tailwindcss/oxide-linux-arm64-gnu': 4.0.0-beta.4 1293 | '@tailwindcss/oxide-linux-arm64-musl': 4.0.0-beta.4 1294 | '@tailwindcss/oxide-linux-x64-gnu': 4.0.0-beta.4 1295 | '@tailwindcss/oxide-linux-x64-musl': 4.0.0-beta.4 1296 | '@tailwindcss/oxide-win32-arm64-msvc': 4.0.0-beta.4 1297 | '@tailwindcss/oxide-win32-x64-msvc': 4.0.0-beta.4 1298 | 1299 | '@tailwindcss/postcss@4.0.0-beta.4': 1300 | dependencies: 1301 | '@alloc/quick-lru': 5.2.0 1302 | '@tailwindcss/node': 4.0.0-beta.4 1303 | '@tailwindcss/oxide': 4.0.0-beta.4 1304 | lightningcss: 1.28.2 1305 | postcss: 8.4.49 1306 | tailwindcss: 4.0.0-beta.4 1307 | 1308 | '@types/node@22.10.1': 1309 | dependencies: 1310 | undici-types: 6.20.0 1311 | 1312 | '@types/prop-types@15.7.13': {} 1313 | 1314 | '@types/react@18.3.12': 1315 | dependencies: 1316 | '@types/prop-types': 15.7.13 1317 | csstype: 3.1.3 1318 | 1319 | buffer-from@1.1.2: {} 1320 | 1321 | busboy@1.6.0: 1322 | dependencies: 1323 | streamsearch: 1.1.0 1324 | 1325 | caniuse-lite@1.0.30001686: {} 1326 | 1327 | client-only@0.0.1: {} 1328 | 1329 | color-convert@2.0.1: 1330 | dependencies: 1331 | color-name: 1.1.4 1332 | optional: true 1333 | 1334 | color-name@1.1.4: 1335 | optional: true 1336 | 1337 | color-string@1.9.1: 1338 | dependencies: 1339 | color-name: 1.1.4 1340 | simple-swizzle: 0.2.2 1341 | optional: true 1342 | 1343 | color@4.2.3: 1344 | dependencies: 1345 | color-convert: 2.0.1 1346 | color-string: 1.9.1 1347 | optional: true 1348 | 1349 | csstype@3.1.3: {} 1350 | 1351 | debug@4.3.7: 1352 | dependencies: 1353 | ms: 2.1.3 1354 | 1355 | detect-libc@1.0.3: {} 1356 | 1357 | detect-libc@2.0.3: 1358 | optional: true 1359 | 1360 | dotenv@16.4.7: {} 1361 | 1362 | drizzle-kit@0.28.1: 1363 | dependencies: 1364 | '@drizzle-team/brocli': 0.10.2 1365 | '@esbuild-kit/esm-loader': 2.6.5 1366 | esbuild: 0.19.12 1367 | esbuild-register: 3.6.0(esbuild@0.19.12) 1368 | transitivePeerDependencies: 1369 | - supports-color 1370 | 1371 | drizzle-orm@0.36.4(postgres@3.4.5)(react@19.0.0-rc-2d16326d-20240930)(types-react@19.0.0-rc.1): 1372 | optionalDependencies: 1373 | '@types/react': types-react@19.0.0-rc.1 1374 | postgres: 3.4.5 1375 | react: 19.0.0-rc-2d16326d-20240930 1376 | 1377 | drizzle-seed@0.1.2(drizzle-orm@0.36.4(postgres@3.4.5)(react@19.0.0-rc-2d16326d-20240930)(types-react@19.0.0-rc.1)): 1378 | dependencies: 1379 | pure-rand: 6.1.0 1380 | optionalDependencies: 1381 | drizzle-orm: 0.36.4(postgres@3.4.5)(react@19.0.0-rc-2d16326d-20240930)(types-react@19.0.0-rc.1) 1382 | 1383 | enhanced-resolve@5.17.1: 1384 | dependencies: 1385 | graceful-fs: 4.2.11 1386 | tapable: 2.2.1 1387 | 1388 | esbuild-register@3.6.0(esbuild@0.19.12): 1389 | dependencies: 1390 | debug: 4.3.7 1391 | esbuild: 0.19.12 1392 | transitivePeerDependencies: 1393 | - supports-color 1394 | 1395 | esbuild@0.18.20: 1396 | optionalDependencies: 1397 | '@esbuild/android-arm': 0.18.20 1398 | '@esbuild/android-arm64': 0.18.20 1399 | '@esbuild/android-x64': 0.18.20 1400 | '@esbuild/darwin-arm64': 0.18.20 1401 | '@esbuild/darwin-x64': 0.18.20 1402 | '@esbuild/freebsd-arm64': 0.18.20 1403 | '@esbuild/freebsd-x64': 0.18.20 1404 | '@esbuild/linux-arm': 0.18.20 1405 | '@esbuild/linux-arm64': 0.18.20 1406 | '@esbuild/linux-ia32': 0.18.20 1407 | '@esbuild/linux-loong64': 0.18.20 1408 | '@esbuild/linux-mips64el': 0.18.20 1409 | '@esbuild/linux-ppc64': 0.18.20 1410 | '@esbuild/linux-riscv64': 0.18.20 1411 | '@esbuild/linux-s390x': 0.18.20 1412 | '@esbuild/linux-x64': 0.18.20 1413 | '@esbuild/netbsd-x64': 0.18.20 1414 | '@esbuild/openbsd-x64': 0.18.20 1415 | '@esbuild/sunos-x64': 0.18.20 1416 | '@esbuild/win32-arm64': 0.18.20 1417 | '@esbuild/win32-ia32': 0.18.20 1418 | '@esbuild/win32-x64': 0.18.20 1419 | 1420 | esbuild@0.19.12: 1421 | optionalDependencies: 1422 | '@esbuild/aix-ppc64': 0.19.12 1423 | '@esbuild/android-arm': 0.19.12 1424 | '@esbuild/android-arm64': 0.19.12 1425 | '@esbuild/android-x64': 0.19.12 1426 | '@esbuild/darwin-arm64': 0.19.12 1427 | '@esbuild/darwin-x64': 0.19.12 1428 | '@esbuild/freebsd-arm64': 0.19.12 1429 | '@esbuild/freebsd-x64': 0.19.12 1430 | '@esbuild/linux-arm': 0.19.12 1431 | '@esbuild/linux-arm64': 0.19.12 1432 | '@esbuild/linux-ia32': 0.19.12 1433 | '@esbuild/linux-loong64': 0.19.12 1434 | '@esbuild/linux-mips64el': 0.19.12 1435 | '@esbuild/linux-ppc64': 0.19.12 1436 | '@esbuild/linux-riscv64': 0.19.12 1437 | '@esbuild/linux-s390x': 0.19.12 1438 | '@esbuild/linux-x64': 0.19.12 1439 | '@esbuild/netbsd-x64': 0.19.12 1440 | '@esbuild/openbsd-x64': 0.19.12 1441 | '@esbuild/sunos-x64': 0.19.12 1442 | '@esbuild/win32-arm64': 0.19.12 1443 | '@esbuild/win32-ia32': 0.19.12 1444 | '@esbuild/win32-x64': 0.19.12 1445 | 1446 | get-tsconfig@4.8.1: 1447 | dependencies: 1448 | resolve-pkg-maps: 1.0.0 1449 | 1450 | graceful-fs@4.2.11: {} 1451 | 1452 | is-arrayish@0.3.2: 1453 | optional: true 1454 | 1455 | jiti@2.4.1: {} 1456 | 1457 | lightningcss-darwin-arm64@1.28.2: 1458 | optional: true 1459 | 1460 | lightningcss-darwin-x64@1.28.2: 1461 | optional: true 1462 | 1463 | lightningcss-freebsd-x64@1.28.2: 1464 | optional: true 1465 | 1466 | lightningcss-linux-arm-gnueabihf@1.28.2: 1467 | optional: true 1468 | 1469 | lightningcss-linux-arm64-gnu@1.28.2: 1470 | optional: true 1471 | 1472 | lightningcss-linux-arm64-musl@1.28.2: 1473 | optional: true 1474 | 1475 | lightningcss-linux-x64-gnu@1.28.2: 1476 | optional: true 1477 | 1478 | lightningcss-linux-x64-musl@1.28.2: 1479 | optional: true 1480 | 1481 | lightningcss-win32-arm64-msvc@1.28.2: 1482 | optional: true 1483 | 1484 | lightningcss-win32-x64-msvc@1.28.2: 1485 | optional: true 1486 | 1487 | lightningcss@1.28.2: 1488 | dependencies: 1489 | detect-libc: 1.0.3 1490 | optionalDependencies: 1491 | lightningcss-darwin-arm64: 1.28.2 1492 | lightningcss-darwin-x64: 1.28.2 1493 | lightningcss-freebsd-x64: 1.28.2 1494 | lightningcss-linux-arm-gnueabihf: 1.28.2 1495 | lightningcss-linux-arm64-gnu: 1.28.2 1496 | lightningcss-linux-arm64-musl: 1.28.2 1497 | lightningcss-linux-x64-gnu: 1.28.2 1498 | lightningcss-linux-x64-musl: 1.28.2 1499 | lightningcss-win32-arm64-msvc: 1.28.2 1500 | lightningcss-win32-x64-msvc: 1.28.2 1501 | 1502 | lucide-react@0.465.0(react@19.0.0-rc-2d16326d-20240930): 1503 | dependencies: 1504 | react: 19.0.0-rc-2d16326d-20240930 1505 | 1506 | ms@2.1.3: {} 1507 | 1508 | nanoid@3.3.8: {} 1509 | 1510 | next@15.0.4-canary.36(react-dom@19.0.0-rc-2d16326d-20240930(react@19.0.0-rc-2d16326d-20240930))(react@19.0.0-rc-2d16326d-20240930): 1511 | dependencies: 1512 | '@next/env': 15.0.4-canary.36 1513 | '@swc/counter': 0.1.3 1514 | '@swc/helpers': 0.5.13 1515 | busboy: 1.6.0 1516 | caniuse-lite: 1.0.30001686 1517 | postcss: 8.4.31 1518 | react: 19.0.0-rc-2d16326d-20240930 1519 | react-dom: 19.0.0-rc-2d16326d-20240930(react@19.0.0-rc-2d16326d-20240930) 1520 | styled-jsx: 5.1.6(react@19.0.0-rc-2d16326d-20240930) 1521 | optionalDependencies: 1522 | '@next/swc-darwin-arm64': 15.0.4-canary.36 1523 | '@next/swc-darwin-x64': 15.0.4-canary.36 1524 | '@next/swc-linux-arm64-gnu': 15.0.4-canary.36 1525 | '@next/swc-linux-arm64-musl': 15.0.4-canary.36 1526 | '@next/swc-linux-x64-gnu': 15.0.4-canary.36 1527 | '@next/swc-linux-x64-musl': 15.0.4-canary.36 1528 | '@next/swc-win32-arm64-msvc': 15.0.4-canary.36 1529 | '@next/swc-win32-x64-msvc': 15.0.4-canary.36 1530 | sharp: 0.33.5 1531 | transitivePeerDependencies: 1532 | - '@babel/core' 1533 | - babel-plugin-macros 1534 | 1535 | picocolors@1.1.1: {} 1536 | 1537 | postcss@8.4.31: 1538 | dependencies: 1539 | nanoid: 3.3.8 1540 | picocolors: 1.1.1 1541 | source-map-js: 1.2.1 1542 | 1543 | postcss@8.4.49: 1544 | dependencies: 1545 | nanoid: 3.3.8 1546 | picocolors: 1.1.1 1547 | source-map-js: 1.2.1 1548 | 1549 | postgres@3.4.5: {} 1550 | 1551 | pure-rand@6.1.0: {} 1552 | 1553 | react-dom@19.0.0-rc-2d16326d-20240930(react@19.0.0-rc-2d16326d-20240930): 1554 | dependencies: 1555 | react: 19.0.0-rc-2d16326d-20240930 1556 | scheduler: 0.25.0-rc-2d16326d-20240930 1557 | 1558 | react@19.0.0-rc-2d16326d-20240930: {} 1559 | 1560 | resolve-pkg-maps@1.0.0: {} 1561 | 1562 | scheduler@0.25.0-rc-2d16326d-20240930: {} 1563 | 1564 | semver@7.6.3: 1565 | optional: true 1566 | 1567 | sharp@0.33.5: 1568 | dependencies: 1569 | color: 4.2.3 1570 | detect-libc: 2.0.3 1571 | semver: 7.6.3 1572 | optionalDependencies: 1573 | '@img/sharp-darwin-arm64': 0.33.5 1574 | '@img/sharp-darwin-x64': 0.33.5 1575 | '@img/sharp-libvips-darwin-arm64': 1.0.4 1576 | '@img/sharp-libvips-darwin-x64': 1.0.4 1577 | '@img/sharp-libvips-linux-arm': 1.0.5 1578 | '@img/sharp-libvips-linux-arm64': 1.0.4 1579 | '@img/sharp-libvips-linux-s390x': 1.0.4 1580 | '@img/sharp-libvips-linux-x64': 1.0.4 1581 | '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 1582 | '@img/sharp-libvips-linuxmusl-x64': 1.0.4 1583 | '@img/sharp-linux-arm': 0.33.5 1584 | '@img/sharp-linux-arm64': 0.33.5 1585 | '@img/sharp-linux-s390x': 0.33.5 1586 | '@img/sharp-linux-x64': 0.33.5 1587 | '@img/sharp-linuxmusl-arm64': 0.33.5 1588 | '@img/sharp-linuxmusl-x64': 0.33.5 1589 | '@img/sharp-wasm32': 0.33.5 1590 | '@img/sharp-win32-ia32': 0.33.5 1591 | '@img/sharp-win32-x64': 0.33.5 1592 | optional: true 1593 | 1594 | simple-swizzle@0.2.2: 1595 | dependencies: 1596 | is-arrayish: 0.3.2 1597 | optional: true 1598 | 1599 | source-map-js@1.2.1: {} 1600 | 1601 | source-map-support@0.5.21: 1602 | dependencies: 1603 | buffer-from: 1.1.2 1604 | source-map: 0.6.1 1605 | 1606 | source-map@0.6.1: {} 1607 | 1608 | streamsearch@1.1.0: {} 1609 | 1610 | styled-jsx@5.1.6(react@19.0.0-rc-2d16326d-20240930): 1611 | dependencies: 1612 | client-only: 0.0.1 1613 | react: 19.0.0-rc-2d16326d-20240930 1614 | 1615 | tailwindcss@4.0.0-beta.4: {} 1616 | 1617 | tapable@2.2.1: {} 1618 | 1619 | tslib@2.8.1: {} 1620 | 1621 | types-react-dom@19.0.0-rc.1: 1622 | dependencies: 1623 | '@types/react': 18.3.12 1624 | 1625 | types-react@19.0.0-rc.1: 1626 | dependencies: 1627 | csstype: 3.1.3 1628 | 1629 | typescript@5.7.2: {} 1630 | 1631 | undici-types@6.20.0: {} 1632 | 1633 | zod@3.23.8: {} 1634 | -------------------------------------------------------------------------------- /postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | export default { 3 | plugins: { 4 | '@tailwindcss/postcss': {}, 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "allowJs": true, 10 | "skipLibCheck": true, 11 | "strict": true, 12 | "noEmit": true, 13 | "esModuleInterop": true, 14 | "module": "esnext", 15 | "moduleResolution": "bundler", 16 | "resolveJsonModule": true, 17 | "isolatedModules": true, 18 | "jsx": "preserve", 19 | "incremental": true, 20 | "baseUrl": ".", 21 | "plugins": [ 22 | { 23 | "name": "next" 24 | } 25 | ], 26 | "paths": { 27 | "@/*": [ 28 | "./*" 29 | ] 30 | } 31 | }, 32 | "include": [ 33 | "next-env.d.ts", 34 | "**/*.ts", 35 | "**/*.tsx", 36 | ".next/types/**/*.ts" 37 | ], 38 | "exclude": [ 39 | "node_modules" 40 | ] 41 | } 42 | --------------------------------------------------------------------------------