diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 0046a69d1..48c07e4b9 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -86,7 +86,7 @@ The code is organized into two main directories: ### Database - Use `PostgreSQL` with `Drizzle ORM` -- Use UUIDs for all database IDs +- Use `t.serial().primaryKey()` for all database IDs - You can find the database schema in the `apps/web/src/database/schema` files - Respect performance and security best practices when designing the database schema diff --git a/apps/docs/content/docs/dev/meta.json b/apps/docs/content/docs/dev/meta.json index e66479287..acd54fc69 100644 --- a/apps/docs/content/docs/dev/meta.json +++ b/apps/docs/content/docs/dev/meta.json @@ -13,9 +13,9 @@ "modules", "---Framework---", "auth", - "fetcher", "routes", "---API---", + "fetcher", "sso", "---Rest---", "..." diff --git a/apps/docs/content/docs/dev/pagination.mdx b/apps/docs/content/docs/dev/pagination.mdx new file mode 100644 index 000000000..c12813c3a --- /dev/null +++ b/apps/docs/content/docs/dev/pagination.mdx @@ -0,0 +1,269 @@ +--- +title: Pagination +description: How to implement cursor-based pagination in VitNode applications. +--- + +VitNode provides a powerful cursor-based pagination system that works seamlessly with the DataTable component. This documentation covers both backend implementation and frontend consumption of paginated data. + +## Backend Implementation + +VitNode uses cursor-based pagination for optimal performance with large datasets. The pagination system is implemented through the `withPagination` helper function. + +### Basic Usage + +```ts +import { buildRoute } from '@/api/lib/route'; +import { dbClient } from '@/database/client'; +import { users } from '@/database/schema/users'; +import { z } from 'zod'; + +import { + withPagination, + zodPaginationPageInfo, + zodPaginationQuery, +} from '@/api/lib/with-pagination'; + +export const routeUsersGet = buildRoute({ + route: { + isAuth: true, + path: '/users', + method: 'get', + description: 'Get users list', + request: { + query: zodPaginationQuery.extend({ + order: z.enum(['asc', 'desc']).optional(), + orderBy: z.enum(['id', 'username', 'createdAt']).optional(), + }), + }, + responses: { + 200: { + content: { + 'application/json': { + schema: z.object({ + edges: z.array( + z.object({ + id: z.number(), + username: z.string(), + email: z.string(), + createdAt: z.date(), + }), + ), + pageInfo: zodPaginationPageInfo, + }), + }, + }, + description: 'List of users', + }, + }, + }, + handler: async c => { + const query = c.req.valid('query'); + const data = await withPagination({ + params: { + query, + }, + primaryCursor: users.id, // Primary key used for pagination + query: async ({ limit, where, orderBy }) => + await dbClient + .select() + .from(users) + .where(where) + .orderBy(orderBy) + .limit(limit), + table: users, + orderBy: { + column: query.orderBy ? users[query.orderBy] : users.createdAt, + order: query.order ?? 'desc', + }, + }); + + return c.json(data); + }, +}); +``` + +### Pagination Parameters + +The `withPagination` function accepts the following parameters: + +| Parameter | Type | Description | +| --------------- | -------- | -------------------------------------------- | +| `params` | Object | Contains the query parameters for pagination | +| `primaryCursor` | Column | The primary key column used for pagination | +| `query` | Function | The database query function | +| `table` | Table | The database table being queried | +| `orderBy` | Object | The column and order to sort by | + +### Zod Schemas + +VitNode provides pre-defined Zod schemas for pagination: + +- `zodPaginationQuery`: Schema for pagination query parameters +- `zodPaginationPageInfo`: Schema for pagination information in the response + +```ts +// Example of zodPaginationQuery +const zodPaginationQuery = z.object({ + cursor: z.string().optional(), + first: z.string().transform(Number).optional(), + last: z.string().transform(Number).optional(), +}); + +// Example of zodPaginationPageInfo +const zodPaginationPageInfo = z.object({ + startCursor: z.string().nullable(), + endCursor: z.string().nullable(), + hasNextPage: z.boolean(), + hasPreviousPage: z.boolean(), +}); +``` + +## Frontend Implementation + +On the frontend, the pagination system works seamlessly with the DataTable component. + +### Query Parameters + +When fetching data from the API, include the pagination parameters in your request: + +```tsx +const res = await fetcher(userModule, { + path: '/users', + method: 'get', + module: 'user', + args: { + query: { + cursor: searchParams.cursor, + first: searchParams.first, + last: searchParams.last, + order: searchParams.order, + orderBy: searchParams.orderBy, + }, + }, + withPagination: true, // Important flag for pagination +}); +``` + +### SearchParamsDataTable Interface + +VitNode provides a `SearchParamsDataTable` interface to type the search parameters: + +```tsx +export interface SearchParamsDataTable { + cursor?: string; + first?: string; + last?: string; + order?: 'asc' | 'desc'; + orderBy?: keyof DataTableTMin; +} +``` + +### Complete Example + +Here's a complete example showing how to implement pagination in a Next.js page: + +```tsx +import { middlewareModule } from '@/api/modules/middleware/middleware.module'; +import { + DataTable, + SearchParamsDataTable, +} from 'vitnode/components/table/data-table'; +import { fetcher } from 'vitnode/lib/fetcher'; + +export const UsersAdminView = async ({ + searchParams, +}: { + searchParams: Promise; +}) => { + const query = await searchParams; + const res = await fetcher(middlewareModule, { + path: '/users', + method: 'get', + module: 'middleware', + args: { + query, + }, + withPagination: true, + }); + const data = await res.json(); + + return ( +
+ +
+ ); +}; +``` + +## Pagination Object Structure + +The pagination object returned from the API has the following structure: + +```json +{ + "edges": [ + { + "id": 1, + "username": "user1", + "email": "user1@example.com", + "createdAt": "2023-01-01T00:00:00.000Z" + } + // More items... + ], + "pageInfo": { + "startCursor": "MQ==", // Base64 encoded cursor + "endCursor": "MTA=", // Base64 encoded cursor + "hasNextPage": true, + "hasPreviousPage": false + } +} +``` + +## Advanced Usage + +### Custom Filtering + +You can extend the pagination query to include custom filtering: + +```ts +const query = c.req.valid('query'); +const data = await withPagination({ + params: { + query, + additionalWhere: eq(users.isActive, true), // Only active users + }, + primaryCursor: users.id, + query: async ({ limit, where, orderBy }) => + await dbClient + .select() + .from(users) + .where(and(where, eq(users.isActive, true))) + .orderBy(orderBy) + .limit(limit), + table: users, + orderBy: { + column: query.orderBy ? users[query.orderBy] : users.createdAt, + order: query.order ?? 'desc', + }, +}); +``` + +### Pagination Controls + +The DataTable component automatically handles pagination controls when provided with the correct `pageInfo` object, allowing users to navigate through data with next/previous buttons and showing the current page information. diff --git a/apps/docs/content/docs/dev/sso.mdx b/apps/docs/content/docs/dev/sso.mdx index 67f4d9d37..78a7c6733 100644 --- a/apps/docs/content/docs/dev/sso.mdx +++ b/apps/docs/content/docs/dev/sso.mdx @@ -180,7 +180,7 @@ export const DiscordSSOApiPlugin = ({ }); const userSchema = z.object({ - id: z.string(), + id: z.number(), email: z.string(), username: z.string(), }); diff --git a/apps/docs/content/docs/ui/data-table.mdx b/apps/docs/content/docs/ui/data-table.mdx new file mode 100644 index 000000000..91a3fc155 --- /dev/null +++ b/apps/docs/content/docs/ui/data-table.mdx @@ -0,0 +1,186 @@ +--- +title: Data Table +description: A table component with sorting, filtering, and pagination compatible with VitNode API. +--- + +## Usage + +```ts +import { DataTable } from 'vitnode/components/table/data-table'; +``` + +```tsx + +``` + +import { TypeTable } from 'fumadocs-ui/components/type-table'; + + JSX.Element; + }[]`, + }, + edges: { + description: 'Data to be displayed in the table', + required: true, + type: 'Array', + }, + order: { + description: 'Column sorting configuration', + required: true, + type: `{ + columns?: string[]; + defaultOrder: { + column: string; + order: 'asc' | 'desc'; + }; + }`, + }, + pageInfo: { + description: 'Pagination information from the API', + required: true, + type: `{ + hasNextPage: boolean; + hasPreviousPage: boolean; + startCursor: string; + endCursor: string; + }`, + }, + }} +/> + +## Cell Renderer + +You can customize how each cell is rendered using the `cell` property. The renderer function receives the current row data and all table data as parameters. + +```tsx + ( + // [!code ++] + + // [!code ++] + {row.id} - all data {allData.length} + // [!code ++] + + // [!code ++] + ), + }, + { id: 'createdAt', label: 'Created at' }, + ]} + edges={data.edges} + pageInfo={data.pageInfo} + order={{ + columns: ['createdAt', 'id'], + defaultOrder: { + order: 'desc', + }, + }} +/> +``` + +### Order Configuration + +If you want to enable sorting on specific columns, you can specify them in the `columns` property. + +```tsx +order={{ + // [!code ++] + columns: ['createdAt', 'id', 'name'], + defaultOrder: { + column: 'createdAt', + order: 'desc', + } +}} +``` + +## Complete Example + +Here's a complete example showing how to use the `DataTable` component in a page: + +```tsx +import { + DataTable, + SearchParamsDataTable, +} from 'vitnode/components/table/data-table'; +import { userModule } from '@/api/modules/user/user.module'; +import { fetcher } from 'vitnode/lib/fetcher'; + +export const UsersView = async ({ + searchParams, +}: { + searchParams: Promise; +}) => { + const query = await searchParams; + const res = await fetcher(userModule, { + path: '/users', + method: 'get', + module: 'user', + args: { + query, + }, + withPagination: true, + }); + const data = await res.json(); + + return ( +
+ ( + {row.username} + ), + }, + { id: 'email', label: 'Email' }, + { id: 'createdAt', label: 'Created at' }, + ]} + edges={data.edges} + order={{ + columns: ['id', 'username', 'email', 'createdAt'], + defaultOrder: { + column: 'createdAt', + order: 'desc', + }, + }} + pageInfo={data.pageInfo} + /> +
+ ); +}; +``` diff --git a/apps/docs/package.json b/apps/docs/package.json index 70fbfb592..e9da96dec 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -1,6 +1,6 @@ { "name": "docs", - "version": "0.0.0", + "version": "2.0.0-canary.0", "private": true, "scripts": { "build": "next build --turbopack", diff --git a/apps/docs/src/app/global.css b/apps/docs/src/app/global.css index 6a171afe2..f2d5234a7 100644 --- a/apps/docs/src/app/global.css +++ b/apps/docs/src/app/global.css @@ -1,77 +1,71 @@ @import 'tailwindcss'; -@import 'fumadocs-ui/css/black.css'; +@import 'fumadocs-ui/css/shadcn.css'; @import 'fumadocs-ui/css/preset.css'; @source '../../node_modules/fumadocs-ui/dist/**/*.js'; :root:not(.dark) { - --radius: 0.625rem; --background: oklch(1 0 0); - --foreground: oklch(0.145 0 0); + --foreground: oklch(0.141 0.005 285.823); --card: oklch(1 0 0); - --card-foreground: oklch(0.145 0 0); + --card-foreground: oklch(0.141 0.005 285.823); --popover: oklch(1 0 0); - --popover-foreground: oklch(0.145 0 0); + --popover-foreground: oklch(0.141 0.005 285.823); --primary: oklch(0.51 0.16 262.61); --primary-foreground: oklch(0.985 0 0); - --secondary: oklch(0.97 0 0); - --secondary-foreground: oklch(0.205 0 0); - --muted: oklch(0.97 0 0); - --muted-foreground: oklch(0.556 0 0); - --accent: oklch(0.97 0 0); - --accent-foreground: oklch(0.205 0 0); + --secondary: oklch(0.967 0.001 286.375); + --secondary-foreground: oklch(0.21 0.006 285.885); + --muted: oklch(0.967 0.001 286.375); + --muted-foreground: oklch(0.552 0.016 285.938); + --accent: oklch(0.94 0.005 286); /* Adjusted for better contrast on muted */ + --accent-foreground: oklch(0.21 0.006 285.885); --destructive: oklch(0.577 0.245 27.325); - --border: oklch(0.922 0 0); - --input: oklch(0.922 0 0); - --ring: oklch(0.708 0 0); - --chart-1: oklch(0.646 0.222 41.116); - --chart-2: oklch(0.6 0.118 184.704); - --chart-3: oklch(0.398 0.07 227.392); - --chart-4: oklch(0.828 0.189 84.429); - --chart-5: oklch(0.769 0.188 70.08); - --sidebar: oklch(0.985 0 0); - --sidebar-foreground: oklch(0.145 0 0); - --sidebar-primary: oklch(0.205 0 0); - --sidebar-primary-foreground: oklch(0.985 0 0); - --sidebar-accent: oklch(0.97 0 0); - --sidebar-accent-foreground: oklch(0.205 0 0); - --sidebar-border: oklch(0.922 0 0); - --sidebar-ring: oklch(0.708 0 0); + --border: oklch( + 0.9 0.02 262.61 + ); /* Similar hue to dark primary, lighter/desaturated */ + --ring: oklch(0.7 0.16 262.61); /* Lighter version of dark primary */ + --chart-1: oklch(0.65 0.22 40); + --chart-2: oklch(0.6 0.15 185); + --chart-3: oklch(0.42 0.09 230); + --chart-4: oklch(0.83 0.19 85); + --chart-5: oklch(0.77 0.18 70); } .dark { - --radius: 0.625rem; - --background: oklch(0.145 0 0); - --foreground: oklch(0.985 0 0); - --card: oklch(0.205 0 0); - --card-foreground: oklch(0.985 0 0); - --popover: oklch(0.269 0 0); - --popover-foreground: oklch(0.985 0 0); + --background: oklch(0.12 0 0); + --foreground: oklch(0.98 0.005 240); + --card: oklch(0.18 0.005 240); + --card-foreground: oklch(0.98 0.005 240); + --popover: oklch(0.18 0.005 240); + --popover-foreground: oklch(0.98 0.005 240); --primary: oklch(0.51 0.16 262.61); - --primary-foreground: oklch(0.985 0 0); - --secondary: oklch(0.269 0 0); - --secondary-foreground: oklch(0.985 0 0); - --muted: oklch(0.269 0 0); - --muted-foreground: oklch(0.708 0 0); - --accent: oklch(0.371 0 0); - --accent-foreground: oklch(0.985 0 0); + --primary-foreground: oklch(0.99 0.005 240); + --secondary: oklch(0.24 0.01 240); + --secondary-foreground: oklch(0.98 0.005 240); + --muted: oklch(0.22 0.01 240); /* Made slightly darker */ + --muted-foreground: oklch(0.75 0.005 240); + --accent: oklch(0.28 0.015 240); --destructive: oklch(0.704 0.191 22.216); - --border: oklch(1 0 0 / 10%); - --input: oklch(1 0 0 / 15%); - --ring: oklch(0.556 0 0); - --chart-1: oklch(0.488 0.243 264.376); - --chart-2: oklch(0.696 0.17 162.48); - --chart-3: oklch(0.769 0.188 70.08); - --chart-4: oklch(0.627 0.265 303.9); - --chart-5: oklch(0.645 0.246 16.439); - --sidebar: oklch(0.205 0 0); - --sidebar-foreground: oklch(0.985 0 0); - --sidebar-primary: oklch(0.488 0.243 264.376); - --sidebar-primary-foreground: oklch(0.985 0 0); - --sidebar-accent: oklch(0.269 0 0); - --sidebar-accent-foreground: oklch(0.985 0 0); - --sidebar-border: oklch(1 0 0 / 10%); - --sidebar-ring: oklch(0.439 0 0); + --border: oklch(0.28 0.005 240); + --ring: oklch(0.51 0.16 262.61); + --chart-1: oklch(0.55 0.24 265); + --chart-2: oklch(0.7 0.17 160); + --chart-3: oklch(0.8 0.18 70); + --chart-4: oklch(0.7 0.26 300); + --chart-5: oklch(0.7 0.24 20); +} + +:root { + --radius: 0.625rem; + --input: var(--border); + --sidebar: var(--muted); + --sidebar-foreground: var(--foreground); + --sidebar-primary: var(--primary); + --sidebar-primary-foreground: var(--primary-foreground); + --sidebar-accent: var(--accent); + --sidebar-accent-foreground: var(--accent-foreground); + --sidebar-border: var(--border); + --sidebar-ring: var(--ring); } @theme inline { diff --git a/apps/web/package.json b/apps/web/package.json index a89b2a35c..5b9b59adc 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,6 +1,6 @@ { "name": "web", - "version": "0.1.0", + "version": "2.0.0-canary.0", "private": true, "type": "module", "scripts": { diff --git a/apps/web/src/app/global-error.tsx b/apps/web/src/app/global-error.tsx new file mode 100644 index 000000000..d93df4e31 --- /dev/null +++ b/apps/web/src/app/global-error.tsx @@ -0,0 +1,27 @@ +'use client'; + +import { vitNodeConfig } from '@/vitnode.config'; +import { Geist, Geist_Mono } from 'next/font/google'; + +import './globals.css'; + +import { GlobalErrorView } from 'vitnode/views/error/global-error-view'; + +const geistSans = Geist({ + variable: '--font-geist-sans', + subsets: ['latin'], +}); + +const geistMono = Geist_Mono({ + variable: '--font-geist-mono', + subsets: ['latin'], +}); + +export default function GlobalError() { + return ( + + ); +} diff --git a/apps/web/src/app/globals.css b/apps/web/src/app/globals.css index 2a9e42b8a..b11b3fb84 100644 --- a/apps/web/src/app/globals.css +++ b/apps/web/src/app/globals.css @@ -8,73 +8,67 @@ @custom-variant dark (&:is(.dark *)); :root:not(.dark) { - --radius: 0.625rem; --background: oklch(1 0 0); - --foreground: oklch(0.145 0 0); + --foreground: oklch(0.141 0.005 285.823); --card: oklch(1 0 0); - --card-foreground: oklch(0.145 0 0); + --card-foreground: oklch(0.141 0.005 285.823); --popover: oklch(1 0 0); - --popover-foreground: oklch(0.145 0 0); + --popover-foreground: oklch(0.141 0.005 285.823); --primary: oklch(0.51 0.16 262.61); --primary-foreground: oklch(0.985 0 0); - --secondary: oklch(0.97 0 0); - --secondary-foreground: oklch(0.205 0 0); - --muted: oklch(0.97 0 0); - --muted-foreground: oklch(0.556 0 0); - --accent: oklch(0.97 0 0); - --accent-foreground: oklch(0.205 0 0); + --secondary: oklch(0.967 0.001 286.375); + --secondary-foreground: oklch(0.21 0.006 285.885); + --muted: oklch(0.967 0.001 286.375); + --muted-foreground: oklch(0.552 0.016 285.938); + --accent: oklch(0.94 0.005 286); /* Adjusted for better contrast on muted */ + --accent-foreground: oklch(0.21 0.006 285.885); --destructive: oklch(0.577 0.245 27.325); - --border: oklch(0.922 0 0); - --input: oklch(0.922 0 0); - --ring: oklch(0.708 0 0); - --chart-1: oklch(0.646 0.222 41.116); - --chart-2: oklch(0.6 0.118 184.704); - --chart-3: oklch(0.398 0.07 227.392); - --chart-4: oklch(0.828 0.189 84.429); - --chart-5: oklch(0.769 0.188 70.08); - --sidebar: oklch(0.985 0 0); - --sidebar-foreground: oklch(0.145 0 0); - --sidebar-primary: oklch(0.205 0 0); - --sidebar-primary-foreground: oklch(0.985 0 0); - --sidebar-accent: oklch(0.97 0 0); - --sidebar-accent-foreground: oklch(0.205 0 0); - --sidebar-border: oklch(0.922 0 0); - --sidebar-ring: oklch(0.708 0 0); + --border: oklch( + 0.9 0.02 262.61 + ); /* Similar hue to dark primary, lighter/desaturated */ + --ring: oklch(0.7 0.16 262.61); /* Lighter version of dark primary */ + --chart-1: oklch(0.65 0.22 40); + --chart-2: oklch(0.6 0.15 185); + --chart-3: oklch(0.42 0.09 230); + --chart-4: oklch(0.83 0.19 85); + --chart-5: oklch(0.77 0.18 70); } .dark { - --radius: 0.625rem; - --background: oklch(0.145 0 0); - --foreground: oklch(0.985 0 0); - --card: oklch(0.205 0 0); - --card-foreground: oklch(0.985 0 0); - --popover: oklch(0.269 0 0); - --popover-foreground: oklch(0.985 0 0); + --background: oklch(0.12 0 0); + --foreground: oklch(0.98 0.005 240); + --card: oklch(0.18 0.005 240); + --card-foreground: oklch(0.98 0.005 240); + --popover: oklch(0.18 0.005 240); + --popover-foreground: oklch(0.98 0.005 240); --primary: oklch(0.51 0.16 262.61); - --primary-foreground: oklch(0.985 0 0); - --secondary: oklch(0.269 0 0); - --secondary-foreground: oklch(0.985 0 0); - --muted: oklch(0.269 0 0); - --muted-foreground: oklch(0.708 0 0); - --accent: oklch(0.371 0 0); - --accent-foreground: oklch(0.985 0 0); + --primary-foreground: oklch(0.99 0.005 240); + --secondary: oklch(0.24 0.01 240); + --secondary-foreground: oklch(0.98 0.005 240); + --muted: oklch(0.22 0.01 240); /* Made slightly darker */ + --muted-foreground: oklch(0.75 0.005 240); + --accent: oklch(0.28 0.015 240); --destructive: oklch(0.704 0.191 22.216); - --border: oklch(1 0 0 / 10%); - --input: oklch(1 0 0 / 15%); - --ring: oklch(0.556 0 0); - --chart-1: oklch(0.488 0.243 264.376); - --chart-2: oklch(0.696 0.17 162.48); - --chart-3: oklch(0.769 0.188 70.08); - --chart-4: oklch(0.627 0.265 303.9); - --chart-5: oklch(0.645 0.246 16.439); - --sidebar: oklch(0.205 0 0); - --sidebar-foreground: oklch(0.985 0 0); - --sidebar-primary: oklch(0.488 0.243 264.376); - --sidebar-primary-foreground: oklch(0.985 0 0); - --sidebar-accent: oklch(0.269 0 0); - --sidebar-accent-foreground: oklch(0.985 0 0); - --sidebar-border: oklch(1 0 0 / 10%); - --sidebar-ring: oklch(0.439 0 0); + --border: oklch(0.28 0.005 240); + --ring: oklch(0.51 0.16 262.61); + --chart-1: oklch(0.55 0.24 265); + --chart-2: oklch(0.7 0.17 160); + --chart-3: oklch(0.8 0.18 70); + --chart-4: oklch(0.7 0.26 300); + --chart-5: oklch(0.7 0.24 20); +} + +:root { + --radius: 0.625rem; + --input: var(--border); + --sidebar: var(--muted); + --sidebar-foreground: var(--foreground); + --sidebar-primary: var(--primary); + --sidebar-primary-foreground: var(--primary-foreground); + --sidebar-accent: var(--accent); + --sidebar-accent-foreground: var(--accent-foreground); + --sidebar-border: var(--border); + --sidebar-ring: var(--ring); } @theme inline { diff --git a/apps/web/src/database/migrations/0000_clever_wrecker.sql b/apps/web/src/database/migrations/0000_clever_wrecker.sql deleted file mode 100644 index 2bf87aaf9..000000000 --- a/apps/web/src/database/migrations/0000_clever_wrecker.sql +++ /dev/null @@ -1,174 +0,0 @@ -CREATE TYPE "public"."vitnode_core_app_type" AS ENUM('website', 'article', 'book', 'music.album', 'music.playlist', 'music.radio_station', 'music.song', 'profile', 'video.episode', 'video.movie', 'video.tv_show');--> statement-breakpoint -CREATE TABLE "core_admin_permissions" ( - "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, - "role_id" uuid, - "user_id" uuid, - "created_at" timestamp DEFAULT now() NOT NULL, - "updated_at" timestamp NOT NULL, - "protected" boolean DEFAULT false NOT NULL -); ---> statement-breakpoint -CREATE TABLE "core_admin_sessions" ( - "token" varchar(255) PRIMARY KEY NOT NULL, - "user_id" uuid NOT NULL, - "created_at" timestamp DEFAULT now() NOT NULL, - "last_seen" timestamp DEFAULT now() NOT NULL, - "expires_at" timestamp NOT NULL, - "device_id" uuid NOT NULL -); ---> statement-breakpoint -CREATE TABLE "core_config" ( - "app_type" "vitnode_core_app_type" DEFAULT 'website' NOT NULL, - "restart_server" boolean DEFAULT false NOT NULL, - "editor_sticky" boolean DEFAULT true NOT NULL, - "site_name" varchar(150) DEFAULT 'VitNode' NOT NULL, - "site_short_name" varchar(75) DEFAULT 'VitNode' NOT NULL, - "contact_email" varchar DEFAULT '' NOT NULL, - "last_updated" timestamp DEFAULT now() NOT NULL, - "auth_force_login" boolean DEFAULT false NOT NULL, - "auth_lock_register" boolean DEFAULT false NOT NULL, - "auth_require_confirm_email" boolean DEFAULT false NOT NULL, - "admin_note" text DEFAULT 'Enter your note here. :)' NOT NULL, - "admin_note_updated_at" timestamp NOT NULL -); ---> statement-breakpoint -CREATE TABLE "core_languages" ( - "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, - "code" varchar(32) NOT NULL, - "name" varchar(255) NOT NULL, - "timezone" varchar(255) DEFAULT 'UTC' NOT NULL, - "protected" boolean DEFAULT false NOT NULL, - "default" boolean DEFAULT false NOT NULL, - "enabled" boolean DEFAULT true NOT NULL, - "created_at" timestamp DEFAULT now() NOT NULL, - "updated_at" timestamp NOT NULL, - "time_24" boolean DEFAULT false NOT NULL, - "allow_in_input" boolean DEFAULT true NOT NULL, - CONSTRAINT "core_languages_code_unique" UNIQUE("code") -); ---> statement-breakpoint -CREATE TABLE "core_languages_words" ( - "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, - "language_code" varchar NOT NULL, - "plugin_code" varchar(50) NOT NULL, - "item_id" varchar NOT NULL, - "value" text NOT NULL, - "table_name" varchar(255) NOT NULL, - "variable" varchar(255) NOT NULL -); ---> statement-breakpoint -CREATE TABLE "core_moderators_permissions" ( - "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, - "role_id" uuid, - "user_id" uuid, - "created_at" timestamp DEFAULT now() NOT NULL, - "updated_at" timestamp NOT NULL, - "protected" boolean DEFAULT false NOT NULL -); ---> statement-breakpoint -CREATE TABLE "core_roles" ( - "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, - "created_at" timestamp DEFAULT now() NOT NULL, - "updated_at" timestamp NOT NULL, - "protected" boolean DEFAULT false NOT NULL, - "default" boolean DEFAULT false NOT NULL, - "root" boolean DEFAULT false NOT NULL, - "guest" boolean DEFAULT false NOT NULL, - "color" varchar(19), - "files_allow_upload" boolean DEFAULT true NOT NULL, - "files_total_max_storage" integer DEFAULT 500000 NOT NULL, - "files_max_storage_for_submit" integer DEFAULT 5000 NOT NULL -); ---> statement-breakpoint -CREATE TABLE "core_sessions" ( - "token" varchar(255) NOT NULL, - "user_id" uuid NOT NULL, - "created_at" timestamp DEFAULT now() NOT NULL, - "expires_at" timestamp NOT NULL, - "device_id" uuid NOT NULL, - CONSTRAINT "core_sessions_token_unique" UNIQUE("token") -); ---> statement-breakpoint -CREATE TABLE "core_sessions_known_devices" ( - "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, - "ip_address" varchar(40) NOT NULL, - "user_agent" text NOT NULL, - "last_seen" timestamp DEFAULT now() NOT NULL -); ---> statement-breakpoint -CREATE TABLE "core_users" ( - "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, - "name_code" varchar(255) NOT NULL, - "name" varchar(255) NOT NULL, - "email" varchar(255) NOT NULL, - "password" varchar, - "joined_at" timestamp DEFAULT now() NOT NULL, - "newsletter" boolean DEFAULT false NOT NULL, - "avatar_color" varchar(6) NOT NULL, - "email_verified" boolean DEFAULT false NOT NULL, - "role_id" uuid NOT NULL, - "birthday" timestamp, - "ip_address" varchar(40) NOT NULL, - "language" varchar(5) DEFAULT 'en' NOT NULL, - CONSTRAINT "core_users_name_code_unique" UNIQUE("name_code"), - CONSTRAINT "core_users_name_unique" UNIQUE("name"), - CONSTRAINT "core_users_email_unique" UNIQUE("email") -); ---> statement-breakpoint -CREATE TABLE "core_users_confirm_emails" ( - "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, - "user_id" uuid NOT NULL, - "token" varchar(100) NOT NULL, - "created_at" timestamp DEFAULT now() NOT NULL, - "expires" timestamp NOT NULL, - CONSTRAINT "core_users_confirm_emails_token_unique" UNIQUE("token") -); ---> statement-breakpoint -CREATE TABLE "core_users_forgot_password" ( - "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, - "user_id" uuid NOT NULL, - "token" varchar(100) NOT NULL, - "ip_address" varchar(40) NOT NULL, - "created_at" timestamp DEFAULT now() NOT NULL, - "expires_at" timestamp NOT NULL, - CONSTRAINT "core_users_forgot_password_user_id_unique" UNIQUE("user_id"), - CONSTRAINT "core_users_forgot_password_token_unique" UNIQUE("token") -); ---> statement-breakpoint -CREATE TABLE "core_users_sso" ( - "user_id" uuid NOT NULL, - "provider_id" varchar(255) NOT NULL, - "provider_account_id" varchar(255) NOT NULL, - "created_at" timestamp DEFAULT now() NOT NULL, - "updated_at" timestamp NOT NULL -); ---> statement-breakpoint -ALTER TABLE "core_admin_permissions" ADD CONSTRAINT "core_admin_permissions_role_id_core_roles_id_fk" FOREIGN KEY ("role_id") REFERENCES "public"."core_roles"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "core_admin_permissions" ADD CONSTRAINT "core_admin_permissions_user_id_core_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."core_users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "core_admin_sessions" ADD CONSTRAINT "core_admin_sessions_user_id_core_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."core_users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "core_admin_sessions" ADD CONSTRAINT "core_admin_sessions_device_id_core_sessions_known_devices_id_fk" FOREIGN KEY ("device_id") REFERENCES "public"."core_sessions_known_devices"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "core_languages_words" ADD CONSTRAINT "core_languages_words_language_code_core_languages_code_fk" FOREIGN KEY ("language_code") REFERENCES "public"."core_languages"("code") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "core_moderators_permissions" ADD CONSTRAINT "core_moderators_permissions_role_id_core_roles_id_fk" FOREIGN KEY ("role_id") REFERENCES "public"."core_roles"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "core_moderators_permissions" ADD CONSTRAINT "core_moderators_permissions_user_id_core_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."core_users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "core_sessions" ADD CONSTRAINT "core_sessions_user_id_core_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."core_users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "core_sessions" ADD CONSTRAINT "core_sessions_device_id_core_sessions_known_devices_id_fk" FOREIGN KEY ("device_id") REFERENCES "public"."core_sessions_known_devices"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "core_users" ADD CONSTRAINT "core_users_role_id_core_roles_id_fk" FOREIGN KEY ("role_id") REFERENCES "public"."core_roles"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "core_users" ADD CONSTRAINT "core_users_language_core_languages_code_fk" FOREIGN KEY ("language") REFERENCES "public"."core_languages"("code") ON DELETE set default ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "core_users_confirm_emails" ADD CONSTRAINT "core_users_confirm_emails_user_id_core_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."core_users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "core_users_forgot_password" ADD CONSTRAINT "core_users_forgot_password_user_id_core_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."core_users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "core_users_sso" ADD CONSTRAINT "core_users_sso_user_id_core_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."core_users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -CREATE INDEX "core_admin_permissions_role_id_idx" ON "core_admin_permissions" USING btree ("role_id");--> statement-breakpoint -CREATE INDEX "core_admin_permissions_user_id_idx" ON "core_admin_permissions" USING btree ("user_id");--> statement-breakpoint -CREATE INDEX "core_admin_sessions_token_idx" ON "core_admin_sessions" USING btree ("token");--> statement-breakpoint -CREATE INDEX "core_admin_sessions_user_id_idx" ON "core_admin_sessions" USING btree ("user_id");--> statement-breakpoint -CREATE INDEX "core_languages_code_idx" ON "core_languages" USING btree ("code");--> statement-breakpoint -CREATE INDEX "core_languages_name_idx" ON "core_languages" USING btree ("name");--> statement-breakpoint -CREATE INDEX "core_languages_words_lang_code_idx" ON "core_languages_words" USING btree ("language_code");--> statement-breakpoint -CREATE INDEX "core_moderators_permissions_role_id_idx" ON "core_moderators_permissions" USING btree ("role_id");--> statement-breakpoint -CREATE INDEX "core_moderators_permissions_user_id_idx" ON "core_moderators_permissions" USING btree ("user_id");--> statement-breakpoint -CREATE INDEX "core_sessions_user_id_idx" ON "core_sessions" USING btree ("user_id");--> statement-breakpoint -CREATE INDEX "core_sessions_known_devices_ip_address_idx" ON "core_sessions_known_devices" USING btree ("ip_address");--> statement-breakpoint -CREATE INDEX "core_users_name_code_idx" ON "core_users" USING btree ("name_code");--> statement-breakpoint -CREATE INDEX "core_users_name_idx" ON "core_users" USING btree ("name");--> statement-breakpoint -CREATE INDEX "core_users_email_idx" ON "core_users" USING btree ("email");--> statement-breakpoint -CREATE INDEX "core_users_sso_user_id_idx" ON "core_users_sso" USING btree ("user_id"); \ No newline at end of file diff --git a/apps/web/src/database/migrations/0000_hesitant_sumo.sql b/apps/web/src/database/migrations/0000_hesitant_sumo.sql new file mode 100644 index 000000000..e8c4e66fd --- /dev/null +++ b/apps/web/src/database/migrations/0000_hesitant_sumo.sql @@ -0,0 +1,177 @@ +CREATE TABLE "core_admin_permissions" ( + "id" serial PRIMARY KEY NOT NULL, + "roleId" integer, + "userId" integer, + "createdAt" timestamp DEFAULT now() NOT NULL, + "updatedAt" timestamp NOT NULL, + "protected" boolean DEFAULT false NOT NULL +); +--> statement-breakpoint +ALTER TABLE "core_admin_permissions" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "core_admin_sessions" ( + "id" serial PRIMARY KEY NOT NULL, + "token" varchar(255) NOT NULL, + "userId" integer NOT NULL, + "createdAt" timestamp DEFAULT now() NOT NULL, + "lastSeen" timestamp DEFAULT now() NOT NULL, + "expiresAt" timestamp NOT NULL, + "deviceId" integer NOT NULL, + CONSTRAINT "core_admin_sessions_token_unique" UNIQUE("token") +); +--> statement-breakpoint +ALTER TABLE "core_admin_sessions" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "core_languages" ( + "id" serial PRIMARY KEY NOT NULL, + "code" varchar(32) NOT NULL, + "name" varchar(255) NOT NULL, + "timezone" varchar(255) DEFAULT 'UTC' NOT NULL, + "protected" boolean DEFAULT false NOT NULL, + "default" boolean DEFAULT false NOT NULL, + "enabled" boolean DEFAULT true NOT NULL, + "createdAt" timestamp DEFAULT now() NOT NULL, + "updatedAt" timestamp NOT NULL, + "time_24" boolean DEFAULT false NOT NULL, + "allow_in_input" boolean DEFAULT true NOT NULL, + CONSTRAINT "core_languages_code_unique" UNIQUE("code") +); +--> statement-breakpoint +ALTER TABLE "core_languages" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "core_languages_words" ( + "id" serial PRIMARY KEY NOT NULL, + "languageCode" varchar NOT NULL, + "pluginCode" varchar(50) NOT NULL, + "itemId" integer NOT NULL, + "value" text NOT NULL, + "tableName" varchar(255) NOT NULL, + "variable" varchar(255) NOT NULL +); +--> statement-breakpoint +ALTER TABLE "core_languages_words" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "core_moderators_permissions" ( + "id" serial PRIMARY KEY NOT NULL, + "roleId" integer, + "userId" integer, + "createdAt" timestamp DEFAULT now() NOT NULL, + "updatedAt" timestamp NOT NULL, + "protected" boolean DEFAULT false NOT NULL +); +--> statement-breakpoint +ALTER TABLE "core_moderators_permissions" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "core_roles" ( + "id" serial PRIMARY KEY NOT NULL, + "createdAt" timestamp DEFAULT now() NOT NULL, + "updatedAt" timestamp NOT NULL, + "protected" boolean DEFAULT false NOT NULL, + "default" boolean DEFAULT false NOT NULL, + "root" boolean DEFAULT false NOT NULL, + "guest" boolean DEFAULT false NOT NULL, + "color" varchar(19) +); +--> statement-breakpoint +ALTER TABLE "core_roles" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "core_sessions" ( + "id" serial PRIMARY KEY NOT NULL, + "token" varchar(255) NOT NULL, + "userId" integer NOT NULL, + "createdAt" timestamp DEFAULT now() NOT NULL, + "expiresAt" timestamp NOT NULL, + "deviceId" integer NOT NULL, + CONSTRAINT "core_sessions_token_unique" UNIQUE("token") +); +--> statement-breakpoint +ALTER TABLE "core_sessions" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "core_sessions_known_devices" ( + "id" serial PRIMARY KEY NOT NULL, + "ipAddress" varchar(40) NOT NULL, + "userAgent" text NOT NULL, + "lastSeen" timestamp DEFAULT now() NOT NULL +); +--> statement-breakpoint +ALTER TABLE "core_sessions_known_devices" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "core_test" ( + "id" serial PRIMARY KEY NOT NULL, + "createdAt" timestamp DEFAULT now() NOT NULL, + "text" text NOT NULL +); +--> statement-breakpoint +ALTER TABLE "core_test" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "core_users" ( + "id" serial PRIMARY KEY NOT NULL, + "nameCode" varchar(255) NOT NULL, + "name" varchar(255) NOT NULL, + "email" varchar(255) NOT NULL, + "password" varchar, + "createdAt" timestamp DEFAULT now() NOT NULL, + "newsletter" boolean DEFAULT false NOT NULL, + "avatarColor" varchar(6) NOT NULL, + "emailVerified" boolean DEFAULT false NOT NULL, + "roleId" integer NOT NULL, + "birthday" timestamp, + "ipAddress" varchar(40) NOT NULL, + "language" varchar(32) DEFAULT 'en' NOT NULL, + CONSTRAINT "core_users_nameCode_unique" UNIQUE("nameCode"), + CONSTRAINT "core_users_name_unique" UNIQUE("name"), + CONSTRAINT "core_users_email_unique" UNIQUE("email") +); +--> statement-breakpoint +ALTER TABLE "core_users" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "core_users_confirm_emails" ( + "id" serial PRIMARY KEY NOT NULL, + "userId" integer NOT NULL, + "token" varchar(100) NOT NULL, + "createdAt" timestamp DEFAULT now() NOT NULL, + "expires" timestamp NOT NULL, + CONSTRAINT "core_users_confirm_emails_token_unique" UNIQUE("token") +); +--> statement-breakpoint +ALTER TABLE "core_users_confirm_emails" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "core_users_forgot_password" ( + "id" serial PRIMARY KEY NOT NULL, + "userId" integer NOT NULL, + "token" varchar(100) NOT NULL, + "ip_address" varchar(40) NOT NULL, + "createdAt" timestamp DEFAULT now() NOT NULL, + "expiresAt" timestamp NOT NULL, + CONSTRAINT "core_users_forgot_password_userId_unique" UNIQUE("userId"), + CONSTRAINT "core_users_forgot_password_token_unique" UNIQUE("token") +); +--> statement-breakpoint +ALTER TABLE "core_users_forgot_password" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "core_users_sso" ( + "userId" integer NOT NULL, + "providerId" varchar(255) NOT NULL, + "providerAccountId" varchar(255) NOT NULL, + "createdAt" timestamp DEFAULT now() NOT NULL, + "updatedAt" timestamp NOT NULL +); +--> statement-breakpoint +ALTER TABLE "core_users_sso" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +ALTER TABLE "core_admin_permissions" ADD CONSTRAINT "core_admin_permissions_roleId_core_roles_id_fk" FOREIGN KEY ("roleId") REFERENCES "public"."core_roles"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "core_admin_permissions" ADD CONSTRAINT "core_admin_permissions_userId_core_users_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."core_users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "core_admin_sessions" ADD CONSTRAINT "core_admin_sessions_userId_core_users_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."core_users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "core_admin_sessions" ADD CONSTRAINT "core_admin_sessions_deviceId_core_sessions_known_devices_id_fk" FOREIGN KEY ("deviceId") REFERENCES "public"."core_sessions_known_devices"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "core_languages_words" ADD CONSTRAINT "core_languages_words_languageCode_core_languages_code_fk" FOREIGN KEY ("languageCode") REFERENCES "public"."core_languages"("code") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "core_moderators_permissions" ADD CONSTRAINT "core_moderators_permissions_roleId_core_roles_id_fk" FOREIGN KEY ("roleId") REFERENCES "public"."core_roles"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "core_moderators_permissions" ADD CONSTRAINT "core_moderators_permissions_userId_core_users_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."core_users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "core_sessions" ADD CONSTRAINT "core_sessions_userId_core_users_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."core_users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "core_sessions" ADD CONSTRAINT "core_sessions_deviceId_core_sessions_known_devices_id_fk" FOREIGN KEY ("deviceId") REFERENCES "public"."core_sessions_known_devices"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "core_users" ADD CONSTRAINT "core_users_roleId_core_roles_id_fk" FOREIGN KEY ("roleId") REFERENCES "public"."core_roles"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "core_users" ADD CONSTRAINT "core_users_language_core_languages_code_fk" FOREIGN KEY ("language") REFERENCES "public"."core_languages"("code") ON DELETE set default ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "core_users_confirm_emails" ADD CONSTRAINT "core_users_confirm_emails_userId_core_users_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."core_users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "core_users_forgot_password" ADD CONSTRAINT "core_users_forgot_password_userId_core_users_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."core_users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "core_users_sso" ADD CONSTRAINT "core_users_sso_userId_core_users_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."core_users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +CREATE INDEX "core_admin_permissions_role_id_idx" ON "core_admin_permissions" USING btree ("roleId");--> statement-breakpoint +CREATE INDEX "core_admin_permissions_user_id_idx" ON "core_admin_permissions" USING btree ("userId");--> statement-breakpoint +CREATE INDEX "core_admin_sessions_token_idx" ON "core_admin_sessions" USING btree ("token");--> statement-breakpoint +CREATE INDEX "core_admin_sessions_user_id_idx" ON "core_admin_sessions" USING btree ("userId");--> statement-breakpoint +CREATE INDEX "core_languages_code_idx" ON "core_languages" USING btree ("code");--> statement-breakpoint +CREATE INDEX "core_languages_name_idx" ON "core_languages" USING btree ("name");--> statement-breakpoint +CREATE INDEX "core_languages_words_lang_code_idx" ON "core_languages_words" USING btree ("languageCode");--> statement-breakpoint +CREATE INDEX "core_moderators_permissions_role_id_idx" ON "core_moderators_permissions" USING btree ("roleId");--> statement-breakpoint +CREATE INDEX "core_moderators_permissions_user_id_idx" ON "core_moderators_permissions" USING btree ("userId");--> statement-breakpoint +CREATE INDEX "core_sessions_user_id_idx" ON "core_sessions" USING btree ("userId");--> statement-breakpoint +CREATE INDEX "core_sessions_known_devices_ip_address_idx" ON "core_sessions_known_devices" USING btree ("ipAddress");--> statement-breakpoint +CREATE INDEX "core_users_name_code_idx" ON "core_users" USING btree ("nameCode");--> statement-breakpoint +CREATE INDEX "core_users_name_idx" ON "core_users" USING btree ("name");--> statement-breakpoint +CREATE INDEX "core_users_email_idx" ON "core_users" USING btree ("email");--> statement-breakpoint +CREATE INDEX "core_users_sso_user_id_idx" ON "core_users_sso" USING btree ("userId"); \ No newline at end of file diff --git a/apps/web/src/database/migrations/0001_smooth_grandmaster.sql b/apps/web/src/database/migrations/0001_smooth_grandmaster.sql deleted file mode 100644 index d2a46d7c7..000000000 --- a/apps/web/src/database/migrations/0001_smooth_grandmaster.sql +++ /dev/null @@ -1,13 +0,0 @@ -ALTER TABLE "core_admin_permissions" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint -ALTER TABLE "core_admin_sessions" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint -ALTER TABLE "core_config" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint -ALTER TABLE "core_languages" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint -ALTER TABLE "core_languages_words" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint -ALTER TABLE "core_moderators_permissions" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint -ALTER TABLE "core_roles" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint -ALTER TABLE "core_sessions" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint -ALTER TABLE "core_sessions_known_devices" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint -ALTER TABLE "core_users" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint -ALTER TABLE "core_users_confirm_emails" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint -ALTER TABLE "core_users_forgot_password" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint -ALTER TABLE "core_users_sso" ENABLE ROW LEVEL SECURITY; \ No newline at end of file diff --git a/apps/web/src/database/migrations/meta/0000_snapshot.json b/apps/web/src/database/migrations/meta/0000_snapshot.json index 035eeea22..a64e83598 100644 --- a/apps/web/src/database/migrations/meta/0000_snapshot.json +++ b/apps/web/src/database/migrations/meta/0000_snapshot.json @@ -1,5 +1,5 @@ { - "id": "f44bf16f-11ed-4e2c-be2c-08b60fcf720a", + "id": "95791a90-7337-433f-9510-8d6f9e4125ff", "prevId": "00000000-0000-0000-0000-000000000000", "version": "7", "dialect": "postgresql", @@ -10,32 +10,31 @@ "columns": { "id": { "name": "id", - "type": "uuid", + "type": "serial", "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" + "notNull": true }, - "role_id": { - "name": "role_id", - "type": "uuid", + "roleId": { + "name": "roleId", + "type": "integer", "primaryKey": false, "notNull": false }, - "user_id": { - "name": "user_id", - "type": "uuid", + "userId": { + "name": "userId", + "type": "integer", "primaryKey": false, "notNull": false }, - "created_at": { - "name": "created_at", + "createdAt": { + "name": "createdAt", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" }, - "updated_at": { - "name": "updated_at", + "updatedAt": { + "name": "updatedAt", "type": "timestamp", "primaryKey": false, "notNull": true @@ -53,7 +52,7 @@ "name": "core_admin_permissions_role_id_idx", "columns": [ { - "expression": "role_id", + "expression": "roleId", "isExpression": false, "asc": true, "nulls": "last" @@ -68,7 +67,7 @@ "name": "core_admin_permissions_user_id_idx", "columns": [ { - "expression": "user_id", + "expression": "userId", "isExpression": false, "asc": true, "nulls": "last" @@ -81,12 +80,12 @@ } }, "foreignKeys": { - "core_admin_permissions_role_id_core_roles_id_fk": { - "name": "core_admin_permissions_role_id_core_roles_id_fk", + "core_admin_permissions_roleId_core_roles_id_fk": { + "name": "core_admin_permissions_roleId_core_roles_id_fk", "tableFrom": "core_admin_permissions", "tableTo": "core_roles", "columnsFrom": [ - "role_id" + "roleId" ], "columnsTo": [ "id" @@ -94,12 +93,12 @@ "onDelete": "cascade", "onUpdate": "no action" }, - "core_admin_permissions_user_id_core_users_id_fk": { - "name": "core_admin_permissions_user_id_core_users_id_fk", + "core_admin_permissions_userId_core_users_id_fk": { + "name": "core_admin_permissions_userId_core_users_id_fk", "tableFrom": "core_admin_permissions", "tableTo": "core_users", "columnsFrom": [ - "user_id" + "userId" ], "columnsTo": [ "id" @@ -112,47 +111,53 @@ "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, - "isRLSEnabled": false + "isRLSEnabled": true }, "public.core_admin_sessions": { "name": "core_admin_sessions", "schema": "", "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, "token": { "name": "token", "type": "varchar(255)", - "primaryKey": true, + "primaryKey": false, "notNull": true }, - "user_id": { - "name": "user_id", - "type": "uuid", + "userId": { + "name": "userId", + "type": "integer", "primaryKey": false, "notNull": true }, - "created_at": { - "name": "created_at", + "createdAt": { + "name": "createdAt", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" }, - "last_seen": { - "name": "last_seen", + "lastSeen": { + "name": "lastSeen", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" }, - "expires_at": { - "name": "expires_at", + "expiresAt": { + "name": "expiresAt", "type": "timestamp", "primaryKey": false, "notNull": true }, - "device_id": { - "name": "device_id", - "type": "uuid", + "deviceId": { + "name": "deviceId", + "type": "integer", "primaryKey": false, "notNull": true } @@ -177,7 +182,7 @@ "name": "core_admin_sessions_user_id_idx", "columns": [ { - "expression": "user_id", + "expression": "userId", "isExpression": false, "asc": true, "nulls": "last" @@ -190,12 +195,12 @@ } }, "foreignKeys": { - "core_admin_sessions_user_id_core_users_id_fk": { - "name": "core_admin_sessions_user_id_core_users_id_fk", + "core_admin_sessions_userId_core_users_id_fk": { + "name": "core_admin_sessions_userId_core_users_id_fk", "tableFrom": "core_admin_sessions", "tableTo": "core_users", "columnsFrom": [ - "user_id" + "userId" ], "columnsTo": [ "id" @@ -203,12 +208,12 @@ "onDelete": "cascade", "onUpdate": "no action" }, - "core_admin_sessions_device_id_core_sessions_known_devices_id_fk": { - "name": "core_admin_sessions_device_id_core_sessions_known_devices_id_fk", + "core_admin_sessions_deviceId_core_sessions_known_devices_id_fk": { + "name": "core_admin_sessions_deviceId_core_sessions_known_devices_id_fk", "tableFrom": "core_admin_sessions", "tableTo": "core_sessions_known_devices", "columnsFrom": [ - "device_id" + "deviceId" ], "columnsTo": [ "id" @@ -218,107 +223,18 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.core_config": { - "name": "core_config", - "schema": "", - "columns": { - "app_type": { - "name": "app_type", - "type": "vitnode_core_app_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'website'" - }, - "restart_server": { - "name": "restart_server", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "editor_sticky": { - "name": "editor_sticky", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": true - }, - "site_name": { - "name": "site_name", - "type": "varchar(150)", - "primaryKey": false, - "notNull": true, - "default": "'VitNode'" - }, - "site_short_name": { - "name": "site_short_name", - "type": "varchar(75)", - "primaryKey": false, - "notNull": true, - "default": "'VitNode'" - }, - "contact_email": { - "name": "contact_email", - "type": "varchar", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "last_updated": { - "name": "last_updated", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "auth_force_login": { - "name": "auth_force_login", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "auth_lock_register": { - "name": "auth_lock_register", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "auth_require_confirm_email": { - "name": "auth_require_confirm_email", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "admin_note": { - "name": "admin_note", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'Enter your note here. :)'" - }, - "admin_note_updated_at": { - "name": "admin_note_updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true + "uniqueConstraints": { + "core_admin_sessions_token_unique": { + "name": "core_admin_sessions_token_unique", + "nullsNotDistinct": false, + "columns": [ + "token" + ] } }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, - "isRLSEnabled": false + "isRLSEnabled": true }, "public.core_languages": { "name": "core_languages", @@ -326,10 +242,9 @@ "columns": { "id": { "name": "id", - "type": "uuid", + "type": "serial", "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" + "notNull": true }, "code": { "name": "code", @@ -371,15 +286,15 @@ "notNull": true, "default": true }, - "created_at": { - "name": "created_at", + "createdAt": { + "name": "createdAt", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" }, - "updated_at": { - "name": "updated_at", + "updatedAt": { + "name": "updatedAt", "type": "timestamp", "primaryKey": false, "notNull": true @@ -444,7 +359,7 @@ }, "policies": {}, "checkConstraints": {}, - "isRLSEnabled": false + "isRLSEnabled": true }, "public.core_languages_words": { "name": "core_languages_words", @@ -452,26 +367,25 @@ "columns": { "id": { "name": "id", - "type": "uuid", + "type": "serial", "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" + "notNull": true }, - "language_code": { - "name": "language_code", + "languageCode": { + "name": "languageCode", "type": "varchar", "primaryKey": false, "notNull": true }, - "plugin_code": { - "name": "plugin_code", + "pluginCode": { + "name": "pluginCode", "type": "varchar(50)", "primaryKey": false, "notNull": true }, - "item_id": { - "name": "item_id", - "type": "varchar", + "itemId": { + "name": "itemId", + "type": "integer", "primaryKey": false, "notNull": true }, @@ -481,8 +395,8 @@ "primaryKey": false, "notNull": true }, - "table_name": { - "name": "table_name", + "tableName": { + "name": "tableName", "type": "varchar(255)", "primaryKey": false, "notNull": true @@ -499,7 +413,7 @@ "name": "core_languages_words_lang_code_idx", "columns": [ { - "expression": "language_code", + "expression": "languageCode", "isExpression": false, "asc": true, "nulls": "last" @@ -512,12 +426,12 @@ } }, "foreignKeys": { - "core_languages_words_language_code_core_languages_code_fk": { - "name": "core_languages_words_language_code_core_languages_code_fk", + "core_languages_words_languageCode_core_languages_code_fk": { + "name": "core_languages_words_languageCode_core_languages_code_fk", "tableFrom": "core_languages_words", "tableTo": "core_languages", "columnsFrom": [ - "language_code" + "languageCode" ], "columnsTo": [ "code" @@ -530,7 +444,7 @@ "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, - "isRLSEnabled": false + "isRLSEnabled": true }, "public.core_moderators_permissions": { "name": "core_moderators_permissions", @@ -538,32 +452,31 @@ "columns": { "id": { "name": "id", - "type": "uuid", + "type": "serial", "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" + "notNull": true }, - "role_id": { - "name": "role_id", - "type": "uuid", + "roleId": { + "name": "roleId", + "type": "integer", "primaryKey": false, "notNull": false }, - "user_id": { - "name": "user_id", - "type": "uuid", + "userId": { + "name": "userId", + "type": "integer", "primaryKey": false, "notNull": false }, - "created_at": { - "name": "created_at", + "createdAt": { + "name": "createdAt", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" }, - "updated_at": { - "name": "updated_at", + "updatedAt": { + "name": "updatedAt", "type": "timestamp", "primaryKey": false, "notNull": true @@ -581,7 +494,7 @@ "name": "core_moderators_permissions_role_id_idx", "columns": [ { - "expression": "role_id", + "expression": "roleId", "isExpression": false, "asc": true, "nulls": "last" @@ -596,7 +509,7 @@ "name": "core_moderators_permissions_user_id_idx", "columns": [ { - "expression": "user_id", + "expression": "userId", "isExpression": false, "asc": true, "nulls": "last" @@ -609,12 +522,12 @@ } }, "foreignKeys": { - "core_moderators_permissions_role_id_core_roles_id_fk": { - "name": "core_moderators_permissions_role_id_core_roles_id_fk", + "core_moderators_permissions_roleId_core_roles_id_fk": { + "name": "core_moderators_permissions_roleId_core_roles_id_fk", "tableFrom": "core_moderators_permissions", "tableTo": "core_roles", "columnsFrom": [ - "role_id" + "roleId" ], "columnsTo": [ "id" @@ -622,12 +535,12 @@ "onDelete": "cascade", "onUpdate": "no action" }, - "core_moderators_permissions_user_id_core_users_id_fk": { - "name": "core_moderators_permissions_user_id_core_users_id_fk", + "core_moderators_permissions_userId_core_users_id_fk": { + "name": "core_moderators_permissions_userId_core_users_id_fk", "tableFrom": "core_moderators_permissions", "tableTo": "core_users", "columnsFrom": [ - "user_id" + "userId" ], "columnsTo": [ "id" @@ -640,7 +553,7 @@ "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, - "isRLSEnabled": false + "isRLSEnabled": true }, "public.core_roles": { "name": "core_roles", @@ -648,20 +561,19 @@ "columns": { "id": { "name": "id", - "type": "uuid", + "type": "serial", "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" + "notNull": true }, - "created_at": { - "name": "created_at", + "createdAt": { + "name": "createdAt", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" }, - "updated_at": { - "name": "updated_at", + "updatedAt": { + "name": "updatedAt", "type": "timestamp", "primaryKey": false, "notNull": true @@ -699,27 +611,6 @@ "type": "varchar(19)", "primaryKey": false, "notNull": false - }, - "files_allow_upload": { - "name": "files_allow_upload", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": true - }, - "files_total_max_storage": { - "name": "files_total_max_storage", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 500000 - }, - "files_max_storage_for_submit": { - "name": "files_max_storage_for_submit", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 5000 } }, "indexes": {}, @@ -728,40 +619,46 @@ "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, - "isRLSEnabled": false + "isRLSEnabled": true }, "public.core_sessions": { "name": "core_sessions", "schema": "", "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, "token": { "name": "token", "type": "varchar(255)", "primaryKey": false, "notNull": true }, - "user_id": { - "name": "user_id", - "type": "uuid", + "userId": { + "name": "userId", + "type": "integer", "primaryKey": false, "notNull": true }, - "created_at": { - "name": "created_at", + "createdAt": { + "name": "createdAt", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" }, - "expires_at": { - "name": "expires_at", + "expiresAt": { + "name": "expiresAt", "type": "timestamp", "primaryKey": false, "notNull": true }, - "device_id": { - "name": "device_id", - "type": "uuid", + "deviceId": { + "name": "deviceId", + "type": "integer", "primaryKey": false, "notNull": true } @@ -771,7 +668,7 @@ "name": "core_sessions_user_id_idx", "columns": [ { - "expression": "user_id", + "expression": "userId", "isExpression": false, "asc": true, "nulls": "last" @@ -784,12 +681,12 @@ } }, "foreignKeys": { - "core_sessions_user_id_core_users_id_fk": { - "name": "core_sessions_user_id_core_users_id_fk", + "core_sessions_userId_core_users_id_fk": { + "name": "core_sessions_userId_core_users_id_fk", "tableFrom": "core_sessions", "tableTo": "core_users", "columnsFrom": [ - "user_id" + "userId" ], "columnsTo": [ "id" @@ -797,12 +694,12 @@ "onDelete": "cascade", "onUpdate": "no action" }, - "core_sessions_device_id_core_sessions_known_devices_id_fk": { - "name": "core_sessions_device_id_core_sessions_known_devices_id_fk", + "core_sessions_deviceId_core_sessions_known_devices_id_fk": { + "name": "core_sessions_deviceId_core_sessions_known_devices_id_fk", "tableFrom": "core_sessions", "tableTo": "core_sessions_known_devices", "columnsFrom": [ - "device_id" + "deviceId" ], "columnsTo": [ "id" @@ -823,7 +720,7 @@ }, "policies": {}, "checkConstraints": {}, - "isRLSEnabled": false + "isRLSEnabled": true }, "public.core_sessions_known_devices": { "name": "core_sessions_known_devices", @@ -831,25 +728,24 @@ "columns": { "id": { "name": "id", - "type": "uuid", + "type": "serial", "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" + "notNull": true }, - "ip_address": { - "name": "ip_address", + "ipAddress": { + "name": "ipAddress", "type": "varchar(40)", "primaryKey": false, "notNull": true }, - "user_agent": { - "name": "user_agent", + "userAgent": { + "name": "userAgent", "type": "text", "primaryKey": false, "notNull": true }, - "last_seen": { - "name": "last_seen", + "lastSeen": { + "name": "lastSeen", "type": "timestamp", "primaryKey": false, "notNull": true, @@ -861,7 +757,7 @@ "name": "core_sessions_known_devices_ip_address_idx", "columns": [ { - "expression": "ip_address", + "expression": "ipAddress", "isExpression": false, "asc": true, "nulls": "last" @@ -878,7 +774,39 @@ "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, - "isRLSEnabled": false + "isRLSEnabled": true + }, + "public.core_test": { + "name": "core_test", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "text": { + "name": "text", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": true }, "public.core_users": { "name": "core_users", @@ -886,13 +814,12 @@ "columns": { "id": { "name": "id", - "type": "uuid", + "type": "serial", "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" + "notNull": true }, - "name_code": { - "name": "name_code", + "nameCode": { + "name": "nameCode", "type": "varchar(255)", "primaryKey": false, "notNull": true @@ -915,8 +842,8 @@ "primaryKey": false, "notNull": false }, - "joined_at": { - "name": "joined_at", + "createdAt": { + "name": "createdAt", "type": "timestamp", "primaryKey": false, "notNull": true, @@ -929,22 +856,22 @@ "notNull": true, "default": false }, - "avatar_color": { - "name": "avatar_color", + "avatarColor": { + "name": "avatarColor", "type": "varchar(6)", "primaryKey": false, "notNull": true }, - "email_verified": { - "name": "email_verified", + "emailVerified": { + "name": "emailVerified", "type": "boolean", "primaryKey": false, "notNull": true, "default": false }, - "role_id": { - "name": "role_id", - "type": "uuid", + "roleId": { + "name": "roleId", + "type": "integer", "primaryKey": false, "notNull": true }, @@ -954,15 +881,15 @@ "primaryKey": false, "notNull": false }, - "ip_address": { - "name": "ip_address", + "ipAddress": { + "name": "ipAddress", "type": "varchar(40)", "primaryKey": false, "notNull": true }, "language": { "name": "language", - "type": "varchar(5)", + "type": "varchar(32)", "primaryKey": false, "notNull": true, "default": "'en'" @@ -973,7 +900,7 @@ "name": "core_users_name_code_idx", "columns": [ { - "expression": "name_code", + "expression": "nameCode", "isExpression": false, "asc": true, "nulls": "last" @@ -1016,12 +943,12 @@ } }, "foreignKeys": { - "core_users_role_id_core_roles_id_fk": { - "name": "core_users_role_id_core_roles_id_fk", + "core_users_roleId_core_roles_id_fk": { + "name": "core_users_roleId_core_roles_id_fk", "tableFrom": "core_users", "tableTo": "core_roles", "columnsFrom": [ - "role_id" + "roleId" ], "columnsTo": [ "id" @@ -1045,11 +972,11 @@ }, "compositePrimaryKeys": {}, "uniqueConstraints": { - "core_users_name_code_unique": { - "name": "core_users_name_code_unique", + "core_users_nameCode_unique": { + "name": "core_users_nameCode_unique", "nullsNotDistinct": false, "columns": [ - "name_code" + "nameCode" ] }, "core_users_name_unique": { @@ -1069,7 +996,7 @@ }, "policies": {}, "checkConstraints": {}, - "isRLSEnabled": false + "isRLSEnabled": true }, "public.core_users_confirm_emails": { "name": "core_users_confirm_emails", @@ -1077,14 +1004,13 @@ "columns": { "id": { "name": "id", - "type": "uuid", + "type": "serial", "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" + "notNull": true }, - "user_id": { - "name": "user_id", - "type": "uuid", + "userId": { + "name": "userId", + "type": "integer", "primaryKey": false, "notNull": true }, @@ -1094,8 +1020,8 @@ "primaryKey": false, "notNull": true }, - "created_at": { - "name": "created_at", + "createdAt": { + "name": "createdAt", "type": "timestamp", "primaryKey": false, "notNull": true, @@ -1110,12 +1036,12 @@ }, "indexes": {}, "foreignKeys": { - "core_users_confirm_emails_user_id_core_users_id_fk": { - "name": "core_users_confirm_emails_user_id_core_users_id_fk", + "core_users_confirm_emails_userId_core_users_id_fk": { + "name": "core_users_confirm_emails_userId_core_users_id_fk", "tableFrom": "core_users_confirm_emails", "tableTo": "core_users", "columnsFrom": [ - "user_id" + "userId" ], "columnsTo": [ "id" @@ -1136,7 +1062,7 @@ }, "policies": {}, "checkConstraints": {}, - "isRLSEnabled": false + "isRLSEnabled": true }, "public.core_users_forgot_password": { "name": "core_users_forgot_password", @@ -1144,14 +1070,13 @@ "columns": { "id": { "name": "id", - "type": "uuid", + "type": "serial", "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" + "notNull": true }, - "user_id": { - "name": "user_id", - "type": "uuid", + "userId": { + "name": "userId", + "type": "integer", "primaryKey": false, "notNull": true }, @@ -1167,15 +1092,15 @@ "primaryKey": false, "notNull": true }, - "created_at": { - "name": "created_at", + "createdAt": { + "name": "createdAt", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" }, - "expires_at": { - "name": "expires_at", + "expiresAt": { + "name": "expiresAt", "type": "timestamp", "primaryKey": false, "notNull": true @@ -1183,12 +1108,12 @@ }, "indexes": {}, "foreignKeys": { - "core_users_forgot_password_user_id_core_users_id_fk": { - "name": "core_users_forgot_password_user_id_core_users_id_fk", + "core_users_forgot_password_userId_core_users_id_fk": { + "name": "core_users_forgot_password_userId_core_users_id_fk", "tableFrom": "core_users_forgot_password", "tableTo": "core_users", "columnsFrom": [ - "user_id" + "userId" ], "columnsTo": [ "id" @@ -1199,11 +1124,11 @@ }, "compositePrimaryKeys": {}, "uniqueConstraints": { - "core_users_forgot_password_user_id_unique": { - "name": "core_users_forgot_password_user_id_unique", + "core_users_forgot_password_userId_unique": { + "name": "core_users_forgot_password_userId_unique", "nullsNotDistinct": false, "columns": [ - "user_id" + "userId" ] }, "core_users_forgot_password_token_unique": { @@ -1216,39 +1141,39 @@ }, "policies": {}, "checkConstraints": {}, - "isRLSEnabled": false + "isRLSEnabled": true }, "public.core_users_sso": { "name": "core_users_sso", "schema": "", "columns": { - "user_id": { - "name": "user_id", - "type": "uuid", + "userId": { + "name": "userId", + "type": "integer", "primaryKey": false, "notNull": true }, - "provider_id": { - "name": "provider_id", + "providerId": { + "name": "providerId", "type": "varchar(255)", "primaryKey": false, "notNull": true }, - "provider_account_id": { - "name": "provider_account_id", + "providerAccountId": { + "name": "providerAccountId", "type": "varchar(255)", "primaryKey": false, "notNull": true }, - "created_at": { - "name": "created_at", + "createdAt": { + "name": "createdAt", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" }, - "updated_at": { - "name": "updated_at", + "updatedAt": { + "name": "updatedAt", "type": "timestamp", "primaryKey": false, "notNull": true @@ -1259,7 +1184,7 @@ "name": "core_users_sso_user_id_idx", "columns": [ { - "expression": "user_id", + "expression": "userId", "isExpression": false, "asc": true, "nulls": "last" @@ -1272,12 +1197,12 @@ } }, "foreignKeys": { - "core_users_sso_user_id_core_users_id_fk": { - "name": "core_users_sso_user_id_core_users_id_fk", + "core_users_sso_userId_core_users_id_fk": { + "name": "core_users_sso_userId_core_users_id_fk", "tableFrom": "core_users_sso", "tableTo": "core_users", "columnsFrom": [ - "user_id" + "userId" ], "columnsTo": [ "id" @@ -1290,28 +1215,10 @@ "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.vitnode_core_app_type": { - "name": "vitnode_core_app_type", - "schema": "public", - "values": [ - "website", - "article", - "book", - "music.album", - "music.playlist", - "music.radio_station", - "music.song", - "profile", - "video.episode", - "video.movie", - "video.tv_show" - ] + "isRLSEnabled": true } }, + "enums": {}, "schemas": {}, "sequences": {}, "roles": {}, diff --git a/apps/web/src/database/migrations/meta/0001_snapshot.json b/apps/web/src/database/migrations/meta/0001_snapshot.json deleted file mode 100644 index db0c945cf..000000000 --- a/apps/web/src/database/migrations/meta/0001_snapshot.json +++ /dev/null @@ -1,1325 +0,0 @@ -{ - "id": "c0392ab0-dc3a-4740-9ede-a859832d60bb", - "prevId": "f44bf16f-11ed-4e2c-be2c-08b60fcf720a", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.core_admin_permissions": { - "name": "core_admin_permissions", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" - }, - "role_id": { - "name": "role_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "protected": { - "name": "protected", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - } - }, - "indexes": { - "core_admin_permissions_role_id_idx": { - "name": "core_admin_permissions_role_id_idx", - "columns": [ - { - "expression": "role_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "core_admin_permissions_user_id_idx": { - "name": "core_admin_permissions_user_id_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "core_admin_permissions_role_id_core_roles_id_fk": { - "name": "core_admin_permissions_role_id_core_roles_id_fk", - "tableFrom": "core_admin_permissions", - "tableTo": "core_roles", - "columnsFrom": [ - "role_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "core_admin_permissions_user_id_core_users_id_fk": { - "name": "core_admin_permissions_user_id_core_users_id_fk", - "tableFrom": "core_admin_permissions", - "tableTo": "core_users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - }, - "public.core_admin_sessions": { - "name": "core_admin_sessions", - "schema": "", - "columns": { - "token": { - "name": "token", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "last_seen": { - "name": "last_seen", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "device_id": { - "name": "device_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "core_admin_sessions_token_idx": { - "name": "core_admin_sessions_token_idx", - "columns": [ - { - "expression": "token", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "core_admin_sessions_user_id_idx": { - "name": "core_admin_sessions_user_id_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "core_admin_sessions_user_id_core_users_id_fk": { - "name": "core_admin_sessions_user_id_core_users_id_fk", - "tableFrom": "core_admin_sessions", - "tableTo": "core_users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "core_admin_sessions_device_id_core_sessions_known_devices_id_fk": { - "name": "core_admin_sessions_device_id_core_sessions_known_devices_id_fk", - "tableFrom": "core_admin_sessions", - "tableTo": "core_sessions_known_devices", - "columnsFrom": [ - "device_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - }, - "public.core_config": { - "name": "core_config", - "schema": "", - "columns": { - "app_type": { - "name": "app_type", - "type": "vitnode_core_app_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'website'" - }, - "restart_server": { - "name": "restart_server", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "editor_sticky": { - "name": "editor_sticky", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": true - }, - "site_name": { - "name": "site_name", - "type": "varchar(150)", - "primaryKey": false, - "notNull": true, - "default": "'VitNode'" - }, - "site_short_name": { - "name": "site_short_name", - "type": "varchar(75)", - "primaryKey": false, - "notNull": true, - "default": "'VitNode'" - }, - "contact_email": { - "name": "contact_email", - "type": "varchar", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "last_updated": { - "name": "last_updated", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "auth_force_login": { - "name": "auth_force_login", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "auth_lock_register": { - "name": "auth_lock_register", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "auth_require_confirm_email": { - "name": "auth_require_confirm_email", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "admin_note": { - "name": "admin_note", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'Enter your note here. :)'" - }, - "admin_note_updated_at": { - "name": "admin_note_updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - }, - "public.core_languages": { - "name": "core_languages", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" - }, - "code": { - "name": "code", - "type": "varchar(32)", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "timezone": { - "name": "timezone", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "default": "'UTC'" - }, - "protected": { - "name": "protected", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "default": { - "name": "default", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "time_24": { - "name": "time_24", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "allow_in_input": { - "name": "allow_in_input", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": true - } - }, - "indexes": { - "core_languages_code_idx": { - "name": "core_languages_code_idx", - "columns": [ - { - "expression": "code", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "core_languages_name_idx": { - "name": "core_languages_name_idx", - "columns": [ - { - "expression": "name", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "core_languages_code_unique": { - "name": "core_languages_code_unique", - "nullsNotDistinct": false, - "columns": [ - "code" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - }, - "public.core_languages_words": { - "name": "core_languages_words", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" - }, - "language_code": { - "name": "language_code", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "plugin_code": { - "name": "plugin_code", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true - }, - "item_id": { - "name": "item_id", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "value": { - "name": "value", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "table_name": { - "name": "table_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "variable": { - "name": "variable", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "core_languages_words_lang_code_idx": { - "name": "core_languages_words_lang_code_idx", - "columns": [ - { - "expression": "language_code", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "core_languages_words_language_code_core_languages_code_fk": { - "name": "core_languages_words_language_code_core_languages_code_fk", - "tableFrom": "core_languages_words", - "tableTo": "core_languages", - "columnsFrom": [ - "language_code" - ], - "columnsTo": [ - "code" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - }, - "public.core_moderators_permissions": { - "name": "core_moderators_permissions", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" - }, - "role_id": { - "name": "role_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "protected": { - "name": "protected", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - } - }, - "indexes": { - "core_moderators_permissions_role_id_idx": { - "name": "core_moderators_permissions_role_id_idx", - "columns": [ - { - "expression": "role_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "core_moderators_permissions_user_id_idx": { - "name": "core_moderators_permissions_user_id_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "core_moderators_permissions_role_id_core_roles_id_fk": { - "name": "core_moderators_permissions_role_id_core_roles_id_fk", - "tableFrom": "core_moderators_permissions", - "tableTo": "core_roles", - "columnsFrom": [ - "role_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "core_moderators_permissions_user_id_core_users_id_fk": { - "name": "core_moderators_permissions_user_id_core_users_id_fk", - "tableFrom": "core_moderators_permissions", - "tableTo": "core_users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - }, - "public.core_roles": { - "name": "core_roles", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "protected": { - "name": "protected", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "default": { - "name": "default", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "root": { - "name": "root", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "guest": { - "name": "guest", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "color": { - "name": "color", - "type": "varchar(19)", - "primaryKey": false, - "notNull": false - }, - "files_allow_upload": { - "name": "files_allow_upload", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": true - }, - "files_total_max_storage": { - "name": "files_total_max_storage", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 500000 - }, - "files_max_storage_for_submit": { - "name": "files_max_storage_for_submit", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 5000 - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - }, - "public.core_sessions": { - "name": "core_sessions", - "schema": "", - "columns": { - "token": { - "name": "token", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "device_id": { - "name": "device_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "core_sessions_user_id_idx": { - "name": "core_sessions_user_id_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "core_sessions_user_id_core_users_id_fk": { - "name": "core_sessions_user_id_core_users_id_fk", - "tableFrom": "core_sessions", - "tableTo": "core_users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "core_sessions_device_id_core_sessions_known_devices_id_fk": { - "name": "core_sessions_device_id_core_sessions_known_devices_id_fk", - "tableFrom": "core_sessions", - "tableTo": "core_sessions_known_devices", - "columnsFrom": [ - "device_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "core_sessions_token_unique": { - "name": "core_sessions_token_unique", - "nullsNotDistinct": false, - "columns": [ - "token" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - }, - "public.core_sessions_known_devices": { - "name": "core_sessions_known_devices", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" - }, - "ip_address": { - "name": "ip_address", - "type": "varchar(40)", - "primaryKey": false, - "notNull": true - }, - "user_agent": { - "name": "user_agent", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "last_seen": { - "name": "last_seen", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": { - "core_sessions_known_devices_ip_address_idx": { - "name": "core_sessions_known_devices_ip_address_idx", - "columns": [ - { - "expression": "ip_address", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - }, - "public.core_users": { - "name": "core_users", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" - }, - "name_code": { - "name": "name_code", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "joined_at": { - "name": "joined_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "newsletter": { - "name": "newsletter", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "avatar_color": { - "name": "avatar_color", - "type": "varchar(6)", - "primaryKey": false, - "notNull": true - }, - "email_verified": { - "name": "email_verified", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "role_id": { - "name": "role_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "birthday": { - "name": "birthday", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "ip_address": { - "name": "ip_address", - "type": "varchar(40)", - "primaryKey": false, - "notNull": true - }, - "language": { - "name": "language", - "type": "varchar(5)", - "primaryKey": false, - "notNull": true, - "default": "'en'" - } - }, - "indexes": { - "core_users_name_code_idx": { - "name": "core_users_name_code_idx", - "columns": [ - { - "expression": "name_code", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "core_users_name_idx": { - "name": "core_users_name_idx", - "columns": [ - { - "expression": "name", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "core_users_email_idx": { - "name": "core_users_email_idx", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "core_users_role_id_core_roles_id_fk": { - "name": "core_users_role_id_core_roles_id_fk", - "tableFrom": "core_users", - "tableTo": "core_roles", - "columnsFrom": [ - "role_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "core_users_language_core_languages_code_fk": { - "name": "core_users_language_core_languages_code_fk", - "tableFrom": "core_users", - "tableTo": "core_languages", - "columnsFrom": [ - "language" - ], - "columnsTo": [ - "code" - ], - "onDelete": "set default", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "core_users_name_code_unique": { - "name": "core_users_name_code_unique", - "nullsNotDistinct": false, - "columns": [ - "name_code" - ] - }, - "core_users_name_unique": { - "name": "core_users_name_unique", - "nullsNotDistinct": false, - "columns": [ - "name" - ] - }, - "core_users_email_unique": { - "name": "core_users_email_unique", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - }, - "public.core_users_confirm_emails": { - "name": "core_users_confirm_emails", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "token": { - "name": "token", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "expires": { - "name": "expires", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "core_users_confirm_emails_user_id_core_users_id_fk": { - "name": "core_users_confirm_emails_user_id_core_users_id_fk", - "tableFrom": "core_users_confirm_emails", - "tableTo": "core_users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "core_users_confirm_emails_token_unique": { - "name": "core_users_confirm_emails_token_unique", - "nullsNotDistinct": false, - "columns": [ - "token" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - }, - "public.core_users_forgot_password": { - "name": "core_users_forgot_password", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "token": { - "name": "token", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true - }, - "ip_address": { - "name": "ip_address", - "type": "varchar(40)", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "core_users_forgot_password_user_id_core_users_id_fk": { - "name": "core_users_forgot_password_user_id_core_users_id_fk", - "tableFrom": "core_users_forgot_password", - "tableTo": "core_users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "core_users_forgot_password_user_id_unique": { - "name": "core_users_forgot_password_user_id_unique", - "nullsNotDistinct": false, - "columns": [ - "user_id" - ] - }, - "core_users_forgot_password_token_unique": { - "name": "core_users_forgot_password_token_unique", - "nullsNotDistinct": false, - "columns": [ - "token" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - }, - "public.core_users_sso": { - "name": "core_users_sso", - "schema": "", - "columns": { - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "provider_id": { - "name": "provider_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "provider_account_id": { - "name": "provider_account_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "core_users_sso_user_id_idx": { - "name": "core_users_sso_user_id_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "core_users_sso_user_id_core_users_id_fk": { - "name": "core_users_sso_user_id_core_users_id_fk", - "tableFrom": "core_users_sso", - "tableTo": "core_users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - } - }, - "enums": { - "public.vitnode_core_app_type": { - "name": "vitnode_core_app_type", - "schema": "public", - "values": [ - "website", - "article", - "book", - "music.album", - "music.playlist", - "music.radio_station", - "music.song", - "profile", - "video.episode", - "video.movie", - "video.tv_show" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/apps/web/src/database/migrations/meta/_journal.json b/apps/web/src/database/migrations/meta/_journal.json index 0df0a540c..ce84836a6 100644 --- a/apps/web/src/database/migrations/meta/_journal.json +++ b/apps/web/src/database/migrations/meta/_journal.json @@ -5,15 +5,8 @@ { "idx": 0, "version": "7", - "when": 1744392720507, - "tag": "0000_clever_wrecker", - "breakpoints": true - }, - { - "idx": 1, - "version": "7", - "when": 1745350130388, - "tag": "0001_smooth_grandmaster", + "when": 1746105704858, + "tag": "0000_hesitant_sumo", "breakpoints": true } ] diff --git a/apps/web/src/database/schema/admins.ts b/apps/web/src/database/schema/admins.ts index f40a399ed..2773083c6 100644 --- a/apps/web/src/database/schema/admins.ts +++ b/apps/web/src/database/schema/admins.ts @@ -8,15 +8,15 @@ import { core_users } from './users'; export const core_admin_permissions = pgTable( 'core_admin_permissions', t => ({ - id: t.uuid().defaultRandom().primaryKey(), - role_id: t.uuid().references(() => core_roles.id, { + id: t.serial().primaryKey(), + roleId: t.integer().references(() => core_roles.id, { onDelete: 'cascade', }), - user_id: t.uuid().references(() => core_users.id, { + userId: t.integer().references(() => core_users.id, { onDelete: 'cascade', }), - created_at: t.timestamp().notNull().defaultNow(), - updated_at: t + createdAt: t.timestamp().notNull().defaultNow(), + updatedAt: t .timestamp() .notNull() .$onUpdate(() => new Date()), @@ -26,8 +26,8 @@ export const core_admin_permissions = pgTable( // }), }), t => [ - index('core_admin_permissions_role_id_idx').on(t.role_id), - index('core_admin_permissions_user_id_idx').on(t.user_id), + index('core_admin_permissions_role_id_idx').on(t.roleId), + index('core_admin_permissions_user_id_idx').on(t.userId), ], ).enableRLS(); @@ -35,11 +35,11 @@ export const core_admin_permissions_relations = relations( core_admin_permissions, ({ one }) => ({ group: one(core_roles, { - fields: [core_admin_permissions.role_id], + fields: [core_admin_permissions.roleId], references: [core_roles.id], }), user: one(core_users, { - fields: [core_admin_permissions.user_id], + fields: [core_admin_permissions.userId], references: [core_users.id], }), }), @@ -48,18 +48,19 @@ export const core_admin_permissions_relations = relations( export const core_admin_sessions = pgTable( 'core_admin_sessions', t => ({ - token: t.varchar({ length: 255 }).primaryKey(), - user_id: t - .uuid() + id: t.serial().primaryKey(), + token: t.varchar({ length: 255 }).notNull().unique(), + userId: t + .integer() .notNull() .references(() => core_users.id, { onDelete: 'cascade', }), - created_at: t.timestamp().notNull().defaultNow(), - last_seen: t.timestamp().notNull().defaultNow(), - expires_at: t.timestamp().notNull(), - device_id: t - .uuid() + createdAt: t.timestamp().notNull().defaultNow(), + lastSeen: t.timestamp().notNull().defaultNow(), + expiresAt: t.timestamp().notNull(), + deviceId: t + .integer() .references(() => core_sessions_known_devices.id, { onDelete: 'cascade', }) @@ -67,7 +68,7 @@ export const core_admin_sessions = pgTable( }), t => [ index('core_admin_sessions_token_idx').on(t.token), - index('core_admin_sessions_user_id_idx').on(t.user_id), + index('core_admin_sessions_user_id_idx').on(t.userId), ], ).enableRLS(); @@ -75,11 +76,11 @@ export const core_admin_sessions_relations = relations( core_admin_sessions, ({ one }) => ({ user: one(core_users, { - fields: [core_admin_sessions.user_id], + fields: [core_admin_sessions.userId], references: [core_users.id], }), device: one(core_sessions_known_devices, { - fields: [core_admin_sessions.device_id], + fields: [core_admin_sessions.deviceId], references: [core_sessions_known_devices.id], }), }), diff --git a/apps/web/src/database/schema/config.ts b/apps/web/src/database/schema/config.ts deleted file mode 100644 index c795acac8..000000000 --- a/apps/web/src/database/schema/config.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { pgEnum, pgTable } from 'drizzle-orm/pg-core'; - -export const appCoreTypeEnum = pgEnum('vitnode_core_app_type', [ - 'website', - 'article', - 'book', - 'music.album', - 'music.playlist', - 'music.radio_station', - 'music.song', - 'profile', - 'video.episode', - 'video.movie', - 'video.tv_show', -]); - -export const core_config = pgTable('core_config', t => ({ - app_type: appCoreTypeEnum().notNull().default('website'), - restart_server: t.boolean().notNull().default(false), - editor_sticky: t.boolean().notNull().default(true), - site_name: t.varchar({ length: 150 }).notNull().default('VitNode'), - site_short_name: t.varchar({ length: 75 }).notNull().default('VitNode'), - contact_email: t.varchar().notNull().default(''), - last_updated: t.timestamp().notNull().defaultNow(), - auth_force_login: t.boolean().notNull().default(false), - auth_lock_register: t.boolean().notNull().default(false), - auth_require_confirm_email: t.boolean().notNull().default(false), - admin_note: t.text().notNull().default('Enter your note here. :)'), - admin_note_updated_at: t - .timestamp() - .notNull() - .$onUpdate(() => new Date()), -})).enableRLS(); diff --git a/apps/web/src/database/schema/languages.ts b/apps/web/src/database/schema/languages.ts index e8b2b3907..7719c8ea7 100644 --- a/apps/web/src/database/schema/languages.ts +++ b/apps/web/src/database/schema/languages.ts @@ -4,15 +4,15 @@ import { index, pgTable } from 'drizzle-orm/pg-core'; export const core_languages = pgTable( 'core_languages', t => ({ - id: t.uuid().defaultRandom().primaryKey(), + id: t.serial().primaryKey(), code: t.varchar({ length: 32 }).notNull().unique(), name: t.varchar({ length: 255 }).notNull(), timezone: t.varchar({ length: 255 }).notNull().default('UTC'), protected: t.boolean().notNull().default(false), default: t.boolean().notNull().default(false), enabled: t.boolean().notNull().default(true), - created_at: t.timestamp().notNull().defaultNow(), - updated_at: t + createdAt: t.timestamp().notNull().defaultNow(), + updatedAt: t .timestamp() .notNull() .$onUpdate(() => new Date()), @@ -28,27 +28,27 @@ export const core_languages = pgTable( export const core_languages_words = pgTable( 'core_languages_words', t => ({ - id: t.uuid().defaultRandom().primaryKey(), - language_code: t + id: t.serial().primaryKey(), + languageCode: t .varchar() .notNull() .references(() => core_languages.code, { onDelete: 'cascade', }), - plugin_code: t.varchar({ length: 50 }).notNull(), - item_id: t.varchar().notNull(), + pluginCode: t.varchar({ length: 50 }).notNull(), + itemId: t.integer().notNull(), value: t.text().notNull(), - table_name: t.varchar({ length: 255 }).notNull(), + tableName: t.varchar({ length: 255 }).notNull(), variable: t.varchar({ length: 255 }).notNull(), }), - t => [index('core_languages_words_lang_code_idx').on(t.language_code)], + t => [index('core_languages_words_lang_code_idx').on(t.languageCode)], ).enableRLS(); export const core_languages_words_relations = relations( core_languages_words, ({ one }) => ({ language: one(core_languages, { - fields: [core_languages_words.language_code], + fields: [core_languages_words.languageCode], references: [core_languages.code], }), }), diff --git a/apps/web/src/database/schema/moderators.ts b/apps/web/src/database/schema/moderators.ts index 690d6f782..5337c5ca4 100644 --- a/apps/web/src/database/schema/moderators.ts +++ b/apps/web/src/database/schema/moderators.ts @@ -7,23 +7,23 @@ import { core_users } from './users'; export const core_moderators_permissions = pgTable( 'core_moderators_permissions', t => ({ - id: t.uuid().defaultRandom().primaryKey(), - role_id: t.uuid().references(() => core_roles.id, { + id: t.serial().primaryKey(), + roleId: t.integer().references(() => core_roles.id, { onDelete: 'cascade', }), - user_id: t.uuid().references(() => core_users.id, { + userId: t.integer().references(() => core_users.id, { onDelete: 'cascade', }), - created_at: t.timestamp().notNull().defaultNow(), - updated_at: t + createdAt: t.timestamp().notNull().defaultNow(), + updatedAt: t .timestamp() .notNull() .$onUpdate(() => new Date()), protected: t.boolean().notNull().default(false), }), t => [ - index('core_moderators_permissions_role_id_idx').on(t.role_id), - index('core_moderators_permissions_user_id_idx').on(t.user_id), + index('core_moderators_permissions_role_id_idx').on(t.roleId), + index('core_moderators_permissions_user_id_idx').on(t.userId), ], ).enableRLS(); @@ -31,11 +31,11 @@ export const core_moderators_permissions_relations = relations( core_moderators_permissions, ({ one }) => ({ group: one(core_roles, { - fields: [core_moderators_permissions.role_id], + fields: [core_moderators_permissions.roleId], references: [core_roles.id], }), user: one(core_users, { - fields: [core_moderators_permissions.user_id], + fields: [core_moderators_permissions.userId], references: [core_users.id], }), }), diff --git a/apps/web/src/database/schema/roles.ts b/apps/web/src/database/schema/roles.ts index a7be33623..50a71d510 100644 --- a/apps/web/src/database/schema/roles.ts +++ b/apps/web/src/database/schema/roles.ts @@ -1,9 +1,9 @@ import { pgTable } from 'drizzle-orm/pg-core'; export const core_roles = pgTable('core_roles', t => ({ - id: t.uuid().defaultRandom().primaryKey(), - created_at: t.timestamp().notNull().defaultNow(), - updated_at: t + id: t.serial().primaryKey(), + createdAt: t.timestamp().notNull().defaultNow(), + updatedAt: t .timestamp() .notNull() .$onUpdate(() => new Date()), @@ -12,7 +12,4 @@ export const core_roles = pgTable('core_roles', t => ({ root: t.boolean().notNull().default(false), guest: t.boolean().notNull().default(false), color: t.varchar({ length: 19 }), - files_allow_upload: t.boolean().notNull().default(true), - files_total_max_storage: t.integer().notNull().default(500000), - files_max_storage_for_submit: t.integer().notNull().default(5000), })).enableRLS(); diff --git a/apps/web/src/database/schema/sessions.ts b/apps/web/src/database/schema/sessions.ts index c1bd1c660..5506b2f4c 100644 --- a/apps/web/src/database/schema/sessions.ts +++ b/apps/web/src/database/schema/sessions.ts @@ -6,32 +6,33 @@ import { core_users } from './users'; export const core_sessions = pgTable( 'core_sessions', t => ({ + id: t.serial().primaryKey(), token: t.varchar({ length: 255 }).notNull().unique(), - user_id: t - .uuid() + userId: t + .integer() .notNull() .references(() => core_users.id, { onDelete: 'cascade', }), - created_at: t.timestamp().notNull().defaultNow(), - expires_at: t.timestamp().notNull(), - device_id: t - .uuid() + createdAt: t.timestamp().notNull().defaultNow(), + expiresAt: t.timestamp().notNull(), + deviceId: t + .integer() .references(() => core_sessions_known_devices.id, { onDelete: 'cascade', }) .notNull(), }), - t => [index('core_sessions_user_id_idx').on(t.user_id)], + t => [index('core_sessions_user_id_idx').on(t.userId)], ).enableRLS(); export const core_sessions_relations = relations(core_sessions, ({ one }) => ({ user: one(core_users, { - fields: [core_sessions.user_id], + fields: [core_sessions.userId], references: [core_users.id], }), device: one(core_sessions_known_devices, { - fields: [core_sessions.device_id], + fields: [core_sessions.deviceId], references: [core_sessions_known_devices.id], }), })); @@ -39,12 +40,12 @@ export const core_sessions_relations = relations(core_sessions, ({ one }) => ({ export const core_sessions_known_devices = pgTable( 'core_sessions_known_devices', t => ({ - id: t.uuid().defaultRandom().primaryKey(), - ip_address: t.varchar({ length: 40 }).notNull(), - user_agent: t.text().notNull(), - last_seen: t.timestamp().notNull().defaultNow(), + id: t.serial().primaryKey(), + ipAddress: t.varchar({ length: 40 }).notNull(), + userAgent: t.text().notNull(), + lastSeen: t.timestamp().notNull().defaultNow(), }), - t => [index('core_sessions_known_devices_ip_address_idx').on(t.ip_address)], + t => [index('core_sessions_known_devices_ip_address_idx').on(t.ipAddress)], ).enableRLS(); export const core_sessions_known_devices_relations = relations( @@ -52,7 +53,7 @@ export const core_sessions_known_devices_relations = relations( ({ one }) => ({ session: one(core_sessions, { fields: [core_sessions_known_devices.id], - references: [core_sessions.device_id], + references: [core_sessions.deviceId], }), }), ); diff --git a/apps/web/src/database/schema/test.ts b/apps/web/src/database/schema/test.ts new file mode 100644 index 000000000..0cbdbd526 --- /dev/null +++ b/apps/web/src/database/schema/test.ts @@ -0,0 +1,7 @@ +import { pgTable } from 'drizzle-orm/pg-core'; + +export const core_test = pgTable('core_test', t => ({ + id: t.serial().primaryKey(), + createdAt: t.timestamp().notNull().defaultNow(), + text: t.text().notNull(), +})).enableRLS(); diff --git a/apps/web/src/database/schema/users.ts b/apps/web/src/database/schema/users.ts index 87822373b..3c134fbf8 100644 --- a/apps/web/src/database/schema/users.ts +++ b/apps/web/src/database/schema/users.ts @@ -7,23 +7,23 @@ import { core_roles } from './roles'; export const core_users = pgTable( 'core_users', t => ({ - id: t.uuid().defaultRandom().primaryKey(), - name_code: t.varchar({ length: 255 }).notNull().unique(), + id: t.serial().primaryKey(), + nameCode: t.varchar({ length: 255 }).notNull().unique(), name: t.varchar({ length: 255 }).notNull().unique(), email: t.varchar({ length: 255 }).notNull().unique(), password: t.varchar(), - joined_at: t.timestamp().notNull().defaultNow(), + createdAt: t.timestamp().notNull().defaultNow(), newsletter: t.boolean().notNull().default(false), - avatar_color: t.varchar({ length: 6 }).notNull(), - email_verified: t.boolean().notNull().default(false), - role_id: t - .uuid() + avatarColor: t.varchar({ length: 6 }).notNull(), + emailVerified: t.boolean().notNull().default(false), + roleId: t + .integer() .references(() => core_roles.id) .notNull(), birthday: t.timestamp(), - ip_address: t.varchar({ length: 40 }).notNull(), + ipAddress: t.varchar({ length: 40 }).notNull(), language: t - .varchar({ length: 5 }) + .varchar({ length: 32 }) .notNull() .default('en') .references(() => core_languages.code, { @@ -31,7 +31,7 @@ export const core_users = pgTable( }), }), t => [ - index('core_users_name_code_idx').on(t.name_code), + index('core_users_name_code_idx').on(t.nameCode), index('core_users_name_idx').on(t.name), index('core_users_email_idx').on(t.email), ], @@ -39,7 +39,7 @@ export const core_users = pgTable( export const core_users_relations = relations(core_users, ({ one, many }) => ({ group: one(core_roles, { - fields: [core_users.role_id], + fields: [core_users.roleId], references: [core_roles.id], }), language: one(core_languages, { @@ -48,40 +48,40 @@ export const core_users_relations = relations(core_users, ({ one, many }) => ({ }), confirm_email: one(core_users_confirm_emails, { fields: [core_users.id], - references: [core_users_confirm_emails.user_id], + references: [core_users_confirm_emails.userId], }), sso: many(core_users_sso), forgot_password: one(core_users_forgot_password, { fields: [core_users.id], - references: [core_users_forgot_password.user_id], + references: [core_users_forgot_password.userId], }), })); export const core_users_sso = pgTable( 'core_users_sso', t => ({ - user_id: t - .uuid() + userId: t + .integer() .references(() => core_users.id, { onDelete: 'cascade', }) .notNull(), - provider_id: t.varchar({ length: 255 }).notNull(), - provider_account_id: t.varchar({ length: 255 }).notNull(), - created_at: t.timestamp().notNull().defaultNow(), - updated_at: t + providerId: t.varchar({ length: 255 }).notNull(), + providerAccountId: t.varchar({ length: 255 }).notNull(), + createdAt: t.timestamp().notNull().defaultNow(), + updatedAt: t .timestamp() .notNull() .$onUpdate(() => new Date()), }), - t => [index('core_users_sso_user_id_idx').on(t.user_id)], + t => [index('core_users_sso_user_id_idx').on(t.userId)], ).enableRLS(); export const core_users_sso_relations = relations( core_users_sso, ({ one }) => ({ user: one(core_users, { - fields: [core_users_sso.user_id], + fields: [core_users_sso.userId], references: [core_users.id], }), }), @@ -90,15 +90,15 @@ export const core_users_sso_relations = relations( export const core_users_confirm_emails = pgTable( 'core_users_confirm_emails', t => ({ - id: t.uuid().defaultRandom().primaryKey(), - user_id: t - .uuid() + id: t.serial().primaryKey(), + userId: t + .integer() .references(() => core_users.id, { onDelete: 'cascade', }) .notNull(), token: t.varchar({ length: 100 }).notNull().unique(), - created_at: t.timestamp().notNull().defaultNow(), + createdAt: t.timestamp().notNull().defaultNow(), expires: t.timestamp().notNull(), }), ).enableRLS(); @@ -107,7 +107,7 @@ export const core_users_confirm_emails_relations = relations( core_users_confirm_emails, ({ one }) => ({ user: one(core_users, { - fields: [core_users_confirm_emails.user_id], + fields: [core_users_confirm_emails.userId], references: [core_users.id], }), }), @@ -116,9 +116,9 @@ export const core_users_confirm_emails_relations = relations( export const core_users_forgot_password = pgTable( 'core_users_forgot_password', t => ({ - id: t.uuid().defaultRandom().primaryKey(), - user_id: t - .uuid() + id: t.serial().primaryKey(), + userId: t + .integer() .references(() => core_users.id, { onDelete: 'cascade', }) @@ -126,8 +126,8 @@ export const core_users_forgot_password = pgTable( .unique(), token: t.varchar({ length: 100 }).notNull().unique(), ip_address: t.varchar({ length: 40 }).notNull(), - created_at: t.timestamp().notNull().defaultNow(), - expires_at: t.timestamp().notNull(), + createdAt: t.timestamp().notNull().defaultNow(), + expiresAt: t.timestamp().notNull(), }), ).enableRLS(); @@ -135,7 +135,7 @@ export const core_users_forgot_password_relations = relations( core_users_forgot_password, ({ one }) => ({ user: one(core_users, { - fields: [core_users_forgot_password.user_id], + fields: [core_users_forgot_password.userId], references: [core_users.id], }), }), diff --git a/apps/web/src/plugins/core/langs/en.json b/apps/web/src/plugins/core/langs/en.json index 8f0e47b00..f0260800d 100644 --- a/apps/web/src/plugins/core/langs/en.json +++ b/apps/web/src/plugins/core/langs/en.json @@ -21,6 +21,8 @@ "go_back": "Go back", "select_option": "Select an option", "select_options": "Select options", + "go_to_prev_page": "Go to previous page", + "go_to_next_page": "Go to next page", "errors": { "title": "Oops! Something went wrong.", "internal_server_error": "Internal server error.", @@ -111,6 +113,10 @@ } }, "admin": { + "dashboard": { + "dev_mode": "Development Mode", + "version": "Version: {version}" + }, "global": { "nav": { "core": "Core", diff --git a/packages/create-vitnode-app/package.json b/packages/create-vitnode-app/package.json index b48f61380..706967c9a 100644 --- a/packages/create-vitnode-app/package.json +++ b/packages/create-vitnode-app/package.json @@ -1,6 +1,6 @@ { "name": "create-vitnode-app", - "version": "0.2.0", + "version": "2.0.0-canary.0", "description": "Create a new VitNode app in seconds.", "author": "VitNode Team", "license": "MIT", diff --git a/packages/eslint/package.json b/packages/eslint/package.json index d2ad07920..518b45494 100644 --- a/packages/eslint/package.json +++ b/packages/eslint/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-typescript-vitnode", - "version": "0.2.0", + "version": "2.0.0-canary.0", "description": "ESLint, TypeScript (TSConfig), Prettier config for VitNode", "author": "VitNode Team", "license": "MIT", diff --git a/packages/vitnode/.swcrc b/packages/vitnode/.swcrc index 82a219b11..fe119f4e9 100644 --- a/packages/vitnode/.swcrc +++ b/packages/vitnode/.swcrc @@ -1,6 +1,6 @@ { "$schema": "https://swc.rs/schema.json", - "minify": true, + "minify": false, "jsc": { "baseUrl": "./", "target": "esnext", diff --git a/packages/vitnode/config/next.config.ts b/packages/vitnode/config/next.config.ts index 570d8586b..724779720 100644 --- a/packages/vitnode/config/next.config.ts +++ b/packages/vitnode/config/next.config.ts @@ -12,9 +12,6 @@ dotenv.config({ export const vitNodeNextConfig = (config: NextConfig): NextConfig => withNextIntl({ ...config, - devIndicators: { - position: 'bottom-right', - }, env: { ...config.env, POSTGRES_URL: process.env.POSTGRES_URL ?? '', diff --git a/packages/vitnode/package.json b/packages/vitnode/package.json index 1f9785980..9cc9a3569 100644 --- a/packages/vitnode/package.json +++ b/packages/vitnode/package.json @@ -1,21 +1,21 @@ { "name": "vitnode", - "version": "0.2.0", + "version": "2.0.0-canary.0", "devDependencies": { "@hono/swagger-ui": "^0.5.1", "@hono/zod-openapi": "^0.19.6", "@hono/zod-validator": "^0.5.0", "@hookform/resolvers": "^5.0.1", - "@react-email/components": "0.0.36", - "@swc/cli": "^0.7.3", + "@react-email/components": "0.0.37", + "@swc/cli": "0.6.0", "@swc/core": "^1.11.24", - "@testing-library/react": "^14.2.1", - "@vitejs/plugin-react": "^4.2.1", - "@vitest/coverage-v8": "^1.2.1", + "@testing-library/react": "^16.3.0", "@types/node": "^22.15.3", "@types/nodemailer": "^6.4.17", "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.2", + "@types/react-dom": "^19.1.3", + "@vitejs/plugin-react": "^4.4.1", + "@vitest/coverage-v8": "^3.1.2", "chokidar": "^4.0.3", "concurrently": "^9.1.2", "dotenv": "^16.5.0", @@ -24,22 +24,22 @@ "eslint": "^9.25.1", "eslint-config-typescript-vitnode": "workspace:*", "hono": "^4.7.8", - "jsdom": "^23.2.0", + "jsdom": "^26.1.0", "lucide-react": "^0.503.0", "next": "^15.3.1", "next-intl": "^4.1.0", "react": "^19.1.0", "react-dom": "^19.1.0", - "react-email": "^4.0.7", + "react-email": "^4.0.11", "react-hook-form": "^7.56.1", "sonner": "^2.0.3", - "tailwindcss": "^4.1.4", + "tailwindcss": "^4.1.5", "tsc-alias": "^1.8.15", "tsup": "^8.4.0", "tw-animate-css": "^1.2.8", "typescript": "^5.8.3", - "vite-tsconfig-paths": "^4.3.1", - "vitest": "^1.2.1", + "vite-tsconfig-paths": "^5.1.4", + "vitest": "^3.1.2", "zod": "^3.24.3" }, "bin": { @@ -73,7 +73,7 @@ "type": "module", "dependencies": { "@dnd-kit/core": "^6.3.1", - "@tanstack/react-query": "^5.74.11", + "@tanstack/react-query": "^5.75.0", "cache-manager": "^6.4.2", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", @@ -84,7 +84,7 @@ "postgres": "^3.4.5", "radix-ui": "^1.3.4", "react-scan": "^0.3.3", - "resend": "^4.4.1", + "resend": "^4.5.0", "tailwind-merge": "^3.2.0", "vaul": "^1.1.2" } diff --git a/packages/vitnode/scripts/prepare-database.ts b/packages/vitnode/scripts/prepare-database.ts index 294c56636..151e24db1 100644 --- a/packages/vitnode/scripts/prepare-database.ts +++ b/packages/vitnode/scripts/prepare-database.ts @@ -2,7 +2,6 @@ import { dbClient } from '@/database/client.js'; import { core_admin_permissions } from '@/database/schema/admins.js'; -import { core_config } from '@/database/schema/config.js'; import { core_languages, core_languages_words, @@ -33,22 +32,12 @@ export const runMigrations = async () => { }; export const initialDataForDatabase = async () => { - const [[config], [roleCount]] = await Promise.all([ - dbClient.select().from(core_config).limit(1), - dbClient - .select({ - count: count(), - }) - .from(core_roles) - .limit(1), - ]); - if (!config) { - await dbClient.insert(core_config).values([{}]); - } else { - await dbClient.update(core_config).set({ - restart_server: false, - }); - } + const [roleCount] = await dbClient + .select({ + count: count(), + }) + .from(core_roles) + .limit(1); const [languageCount] = await dbClient .select({ @@ -68,85 +57,83 @@ export const initialDataForDatabase = async () => { } if (roleCount.count === 0) { - const [guestRole] = await dbClient + const roles = await dbClient .insert(core_roles) - .values({ - protected: true, - guest: true, - files_allow_upload: false, - }) + .values([ + { + // Guest role + protected: true, + guest: true, + }, + { + // Member role + protected: true, + default: true, + }, + { + // Moderator role + protected: true, + color: 'hsl(122, 80%, 45%)', + }, + { + // Administrator role + protected: true, + root: true, + color: 'hsl(0, 100%, 50%)', + }, + ]) .returning({ id: core_roles.id }); - await dbClient.insert(core_languages_words).values({ - language_code: 'en', - plugin_code: 'core', - item_id: guestRole.id, - value: 'Guest', - table_name: 'core_roles', - variable: 'name', - }); - - const [memberRole] = await dbClient - .insert(core_roles) - .values({ - protected: true, - default: true, - }) - .returning({ id: core_roles.id }); - - await dbClient.insert(core_languages_words).values({ - language_code: 'en', - plugin_code: 'core', - item_id: memberRole.id, - value: 'Member', - table_name: 'core_roles', - variable: 'name', - }); + await dbClient.insert(core_languages_words).values([ + { + // Guest role + languageCode: 'en', + pluginCode: 'core', + itemId: roles[0].id, + value: 'Guest', + tableName: 'core_roles', + variable: 'name', + }, + { + // Member role + languageCode: 'en', + pluginCode: 'core', + itemId: roles[1].id, + value: 'Member', + tableName: 'core_roles', + variable: 'name', + }, + { + // Moderator role + languageCode: 'en', + pluginCode: 'core', + itemId: roles[2].id, + value: 'Moderator', + tableName: 'core_roles', + variable: 'name', + }, + { + // Administrator role + languageCode: 'en', + pluginCode: 'core', + itemId: roles[3].id, + value: 'Administrator', + tableName: 'core_roles', + variable: 'name', + }, + ]); - const [moderatorRole] = await dbClient - .insert(core_roles) - .values({ + // Insert default permissions + await Promise.all([ + await dbClient.insert(core_moderators_permissions).values({ + roleId: roles[2].id, protected: true, - color: 'hsl(122, 80%, 45%)', - }) - .returning({ id: core_roles.id }); - - await dbClient.insert(core_moderators_permissions).values({ - role_id: moderatorRole.id, - protected: true, - }); - - await dbClient.insert(core_languages_words).values({ - language_code: 'en', - plugin_code: 'core', - item_id: moderatorRole.id, - value: 'Moderator', - table_name: 'core_roles', - variable: 'name', - }); - - const [adminRole] = await dbClient - .insert(core_roles) - .values({ + }), + await dbClient.insert(core_admin_permissions).values({ + roleId: roles[3].id, protected: true, - root: true, - color: 'hsl(0, 100%, 50%)', - }) - .returning({ id: core_roles.id }); - - await dbClient.insert(core_languages_words).values({ - language_code: 'en', - plugin_code: 'core', - item_id: adminRole.id, - value: 'Administrator', - table_name: 'core_roles', - variable: 'name', - }); - - await dbClient.insert(core_admin_permissions).values({ - role_id: adminRole.id, - protected: true, - }); + }), + ]); } }; diff --git a/packages/vitnode/src/api/lib/get-pacakge-json.ts b/packages/vitnode/src/api/lib/get-pacakge-json.ts new file mode 100644 index 000000000..4c08918e3 --- /dev/null +++ b/packages/vitnode/src/api/lib/get-pacakge-json.ts @@ -0,0 +1,21 @@ +import { existsSync } from 'fs'; +import { readFile } from 'fs/promises'; +import { dirname, join } from 'path'; +import { fileURLToPath } from 'url'; + +export const getPackageJson = async () => { + const __filename = fileURLToPath(import.meta.url); + const __dirname = dirname(__filename); + + const packageJSONPath = join(__dirname, '../../../../package.json'); + + if (!existsSync(packageJSONPath)) { + throw new Error(`package.json not found in ${packageJSONPath}`); + } + + const packageJSON: { version: string } = JSON.parse( + await readFile(packageJSONPath, 'utf8'), + ); + + return packageJSON; +}; diff --git a/packages/vitnode/src/api/lib/with-pagination.ts b/packages/vitnode/src/api/lib/with-pagination.ts new file mode 100644 index 000000000..bb898f36f --- /dev/null +++ b/packages/vitnode/src/api/lib/with-pagination.ts @@ -0,0 +1,161 @@ +import { dbClient } from '@/database/client'; +import { z } from '@hono/zod-openapi'; +import { + and, + asc, + ColumnBaseConfig, + count, + desc, + gt, + lt, + Placeholder, + SQL, +} from 'drizzle-orm'; +import { + PgColumn, + PgTable, + PgTableWithColumns, + TableConfig, +} from 'drizzle-orm/pg-core'; + +export async function withPagination< + QueryMin extends Record, + T extends TableConfig, + Primary extends ColumnBaseConfig<'number', string>, +>({ + query, + table, + params, + where: whereFromParams, + primaryCursor, + orderBy: orderByFromParams, +}: { + orderBy: { + column: PgColumn; + order: 'asc' | 'desc'; + }; + params: { + query: { + cursor?: string; + first?: string; + last?: string; + }; + }; + primaryCursor: PgColumn; + query: (args: { + limit: number | Placeholder; + orderBy: SQL; + where: SQL | undefined; + }) => Promise; + table: Omit, 'enableRLS'>; + where?: SQL; +}): Promise<{ + edges: QueryMin[]; + pageInfo: { + count: number; + endCursor: null | number; + hasNextPage: boolean; + hasPreviousPage: boolean; + startCursor: null | number; + totalCount: number; + }; +}> { + // Parse and validate pagination parameters + const cursor = params.query.cursor + ? parseInt(params.query.cursor, 10) + : undefined; + const first = params.query.first + ? Math.min(parseInt(params.query.first, 10), 100) + : undefined; + const last = params.query.last + ? Math.min(parseInt(params.query.last, 10), 100) + : undefined; + + if (first !== undefined && last !== undefined) { + throw new Error('Cannot specify both first and last'); + } + + if (first !== undefined && first < 0) { + throw new Error('first must be positive'); + } + + if (last !== undefined && last < 0) { + throw new Error('last must be positive'); + } + + // Determine sort direction based on pagination parameters + const isForward = last === undefined; + const orderFn = isForward + ? orderByFromParams.order === 'asc' + ? asc + : desc + : orderByFromParams.order === 'asc' + ? desc + : asc; + + const orderBy: SQL = orderFn(table[orderByFromParams.column.name]); + + // Build where clause with cursor + let where: SQL | undefined = whereFromParams; + if (cursor) { + const cursorFilter = isForward + ? orderByFromParams.order === 'asc' + ? gt + : lt + : orderByFromParams.order === 'asc' + ? lt + : gt; + + const cursorWhere = cursorFilter(table[primaryCursor.name], cursor); + where = where ? and(where, cursorWhere) : cursorWhere; + } + + // Get total count + const [{ count: totalCount }] = await dbClient + .select({ count: count() }) + .from(table as PgTable) + .where(whereFromParams); + + // Fetch one extra item to determine if there are more pages + const limit = (first ?? last ?? 50) + 1; + const edges = await query({ limit, where, orderBy }); + + // Process results + const hasMore = edges.length > (first ?? last ?? edges.length); + const slicedEdges = edges.slice(0, first ?? last ?? edges.length); + const finalEdges = isForward ? slicedEdges : slicedEdges.reverse(); + + // Prepare cursors + const startCursor: null | number = + (finalEdges[0]?.[primaryCursor.name] as number) ?? null; + + const endCursor: null | number = + (finalEdges[finalEdges.length - 1]?.[primaryCursor.name] as number) ?? null; + + return { + pageInfo: { + totalCount, + count: finalEdges.length, + hasNextPage: isForward ? hasMore : !!cursor, + hasPreviousPage: isForward ? !!cursor : hasMore, + startCursor, + endCursor, + }, + edges: finalEdges, + }; +} + +export const zodPaginationPageInfo = z.object({ + totalCount: z.number(), + count: z.number(), + hasNextPage: z.boolean(), + hasPreviousPage: z.boolean(), + startCursor: z.number().nullable(), + endCursor: z.number().nullable(), +}); + +export const zodPaginationQuery = z.object({ + cursor: z.string().optional(), + first: z.string().optional(), + last: z.string().optional(), +}); diff --git a/packages/vitnode/src/api/models/device.ts b/packages/vitnode/src/api/models/device.ts index d8e38b1b9..9a375b704 100644 --- a/packages/vitnode/src/api/models/device.ts +++ b/packages/vitnode/src/api/models/device.ts @@ -17,8 +17,8 @@ export class DeviceModel { const [device] = await dbClient .insert(core_sessions_known_devices) .values({ - ip_address: getUserIp(this.c.req), - user_agent: this.getUserAgent(), + ipAddress: getUserIp(this.c.req), + userAgent: this.getUserAgent(), }) .returning({ id: core_sessions_known_devices.id }); @@ -31,11 +31,11 @@ export class DeviceModel { return this.c.req.header('User-Agent') ?? 'node'; } - private setCookieDevice(deviceId: string) { + private setCookieDevice(deviceId: number) { setCookie( this.c, this.c.get('core').authorization.deviceCookieName, - deviceId, + deviceId.toString(), { httpOnly: true, secure: this.c.get('core').authorization.cookieSecure, @@ -49,9 +49,8 @@ export class DeviceModel { } async getDeviceId() { - const deviceIdFromCookie = getCookie( - this.c, - this.c.get('core').authorization.deviceCookieName, + const deviceIdFromCookie = Number( + getCookie(this.c, this.c.get('core').authorization.deviceCookieName), ); try { @@ -70,8 +69,8 @@ export class DeviceModel { await dbClient .update(core_sessions_known_devices) .set({ - ip_address: getUserIp(this.c.req), - user_agent: this.getUserAgent(), + ipAddress: getUserIp(this.c.req), + userAgent: this.getUserAgent(), }) .where(eq(core_sessions_known_devices.id, deviceIdFromCookie)); diff --git a/packages/vitnode/src/api/models/session-admin.ts b/packages/vitnode/src/api/models/session-admin.ts index b9c341dde..eb6acde14 100644 --- a/packages/vitnode/src/api/models/session-admin.ts +++ b/packages/vitnode/src/api/models/session-admin.ts @@ -18,7 +18,7 @@ export class SessionAdminModel extends DeviceModel { super(c); } - async checkIfUserIsAdmin(userId: string) { + async checkIfUserIsAdmin(userId: number) { const user = await new UserModel().getUserById(userId); if (!user) return false; @@ -27,8 +27,8 @@ export class SessionAdminModel extends DeviceModel { .from(core_admin_permissions) .where( or( - eq(core_admin_permissions.user_id, user.id), - eq(core_admin_permissions.role_id, user.role_id), + eq(core_admin_permissions.userId, user.id), + eq(core_admin_permissions.roleId, user.roleId), ), ) .limit(1); @@ -36,7 +36,7 @@ export class SessionAdminModel extends DeviceModel { return !!permission; } - async createSessionByUserId(userId: string) { + async createSessionByUserId(userId: number) { const isAdmin = await this.checkIfUserIsAdmin(userId); if (!isAdmin) throw new HTTPException(403); const token = crypto.randomBytes(64).toString('hex').normalize(); @@ -44,11 +44,11 @@ export class SessionAdminModel extends DeviceModel { await dbClient.insert(core_admin_sessions).values({ token, - user_id: userId, - expires_at: new Date( + userId, + expiresAt: new Date( Date.now() + this.c.get('core').authorization.adminCookieExpires, ), - device_id: deviceId, + deviceId, }); setCookie(this.c, this.c.get('core').authorization.adminCookieName, token, { @@ -95,13 +95,13 @@ export class SessionAdminModel extends DeviceModel { const [session] = await dbClient .select({ token: core_admin_sessions.token, - user_id: core_admin_sessions.user_id, + userId: core_admin_sessions.userId, }) .from(core_admin_sessions) .where( and( eq(core_admin_sessions.token, token), - gt(core_admin_sessions.expires_at, new Date()), + gt(core_admin_sessions.expiresAt, new Date()), ), ) .limit(1); @@ -109,7 +109,7 @@ export class SessionAdminModel extends DeviceModel { if (!session || session.token !== token) { throw new HTTPException(403); } - const user = await new UserModel().getUserById(session.user_id); + const user = await new UserModel().getUserById(session.userId); if (!user) throw new HTTPException(403); return user; diff --git a/packages/vitnode/src/api/models/session.ts b/packages/vitnode/src/api/models/session.ts index e3d06df0f..88ab01cc4 100644 --- a/packages/vitnode/src/api/models/session.ts +++ b/packages/vitnode/src/api/models/session.ts @@ -14,17 +14,17 @@ export class SessionModel extends DeviceModel { super(c); } - async createSessionByUserId(userId: string) { + async createSessionByUserId(userId: number) { const token = crypto.randomBytes(64).toString('hex').normalize(); const deviceId = await this.getDeviceId(); await dbClient.insert(core_sessions).values({ token, - user_id: userId, - expires_at: new Date( + userId, + expiresAt: new Date( Date.now() + this.c.get('core').authorization.cookie_expires, ), - device_id: deviceId, + deviceId, }); setCookie(this.c, this.c.get('core').authorization.cookieName, token, { @@ -69,13 +69,13 @@ export class SessionModel extends DeviceModel { const [session] = await dbClient .select({ token: core_sessions.token, - user_id: core_sessions.user_id, + userId: core_sessions.userId, }) .from(core_sessions) .where( and( eq(core_sessions.token, token), - gt(core_sessions.expires_at, new Date()), + gt(core_sessions.expiresAt, new Date()), ), ) .limit(1); @@ -83,7 +83,7 @@ export class SessionModel extends DeviceModel { if (!session || session.token !== token) { return null; } - const user = await new UserModel().getUserById(session.user_id); + const user = await new UserModel().getUserById(session.userId); if (!user) return null; return user; diff --git a/packages/vitnode/src/api/models/sso.ts b/packages/vitnode/src/api/models/sso.ts index 830b318fe..901bb49a1 100644 --- a/packages/vitnode/src/api/models/sso.ts +++ b/packages/vitnode/src/api/models/sso.ts @@ -58,9 +58,9 @@ export class SSOModel { c.req, ); await dbClient.insert(core_users_sso).values({ - user_id: data.id, - provider_id: providerId, - provider_account_id: user.id, + userId: data.id, + providerId: providerId, + providerAccountId: user.id, }); return { userId: data.id }; @@ -75,7 +75,7 @@ export class SSOModel { providerId: string; state: string; }): Promise<{ - userId: string; + userId: number; }> { await this.verifyState(state); const provider = this.plugins.find(p => p.id === providerId); @@ -89,14 +89,14 @@ export class SSOModel { return await dbClient.transaction(async tx => { const [dataSSOFromDb] = await tx .select({ - user_id: core_users_sso.user_id, + userId: core_users_sso.userId, }) .from(core_users_sso) - .leftJoin(core_users, eq(core_users.id, core_users_sso.user_id)) + .leftJoin(core_users, eq(core_users.id, core_users_sso.userId)) .where( and( - eq(core_users_sso.provider_id, providerId), - eq(core_users_sso.provider_account_id, userFromSSO.id), + eq(core_users_sso.providerId, providerId), + eq(core_users_sso.providerAccountId, userFromSSO.id), ), ) .limit(1); @@ -123,9 +123,9 @@ export class SSOModel { // If email exists, register SSO await tx.insert(core_users_sso).values({ - provider_id: providerId, - provider_account_id: userFromSSO.id, - user_id: userWithEmail.id, + providerId: providerId, + providerAccountId: userFromSSO.id, + userId: userWithEmail.id, }); return { @@ -134,7 +134,7 @@ export class SSOModel { } return { - userId: dataSSOFromDb.user_id, + userId: dataSSOFromDb.userId, }; }); } diff --git a/packages/vitnode/src/api/models/user/get-user-by-id.ts b/packages/vitnode/src/api/models/user/get-user-by-id.ts index b84f1479d..8befccb8b 100644 --- a/packages/vitnode/src/api/models/user/get-user-by-id.ts +++ b/packages/vitnode/src/api/models/user/get-user-by-id.ts @@ -2,18 +2,18 @@ import { dbClient } from '@/database/client'; import { core_users } from '@/database/schema/users'; import { eq } from 'drizzle-orm'; -export const getUserById = async (id: string) => { +export const getUserById = async (id: number) => { const [user] = await dbClient .select({ id: core_users.id, email: core_users.email, name: core_users.name, - name_code: core_users.name_code, - joined_at: core_users.joined_at, + nameCode: core_users.nameCode, + createdAt: core_users.createdAt, newsletter: core_users.newsletter, - avatar_color: core_users.avatar_color, - email_verified: core_users.email_verified, - role_id: core_users.role_id, + avatarColor: core_users.avatarColor, + emailVerified: core_users.emailVerified, + roleId: core_users.roleId, birthday: core_users.birthday, }) .from(core_users) diff --git a/packages/vitnode/src/api/models/user/sign-up.ts b/packages/vitnode/src/api/models/user/sign-up.ts index d40830c06..e48a92d41 100644 --- a/packages/vitnode/src/api/models/user/sign-up.ts +++ b/packages/vitnode/src/api/models/user/sign-up.ts @@ -9,8 +9,8 @@ import { HonoRequest } from 'hono'; import { HTTPException } from 'hono/http-exception'; const getDefaultData = async (): Promise<{ - email_verified: boolean; - role_id: string; + emailVerified: boolean; + roleId: number; }> => { const [countUsers] = await dbClient .select({ count: count() }) @@ -33,8 +33,8 @@ const getDefaultData = async (): Promise<{ } return { - role_id: defaultRole.id, - email_verified: true, + roleId: defaultRole.id, + emailVerified: true, }; } @@ -53,9 +53,9 @@ const getDefaultData = async (): Promise<{ } return { - role_id: defaultRole.id, + roleId: defaultRole.id, // TODO: Handle email verification - email_verified: false, + emailVerified: false, }; }; @@ -77,13 +77,13 @@ export const signUp = async ( const checkIfUserExist = await dbClient .select({ email: core_users.email, - name_code: core_users.name_code, + name_code: core_users.nameCode, }) .from(core_users) .where( or( eq(core_users.email, email), - eq(core_users.name_code, convertToNameSEO), + eq(core_users.nameCode, convertToNameSEO), ), ); @@ -102,20 +102,20 @@ export const signUp = async ( }); } - const { role_id, email_verified } = await getDefaultData(); + const { roleId, emailVerified } = await getDefaultData(); const [data] = await dbClient .insert(core_users) .values({ email, name, - name_code: convertToNameSEO, + nameCode: convertToNameSEO, // TODO: Handle newsletter only if email is allowed newsletter, password: hashedPassword, - avatar_color: generateAvatarColor(name), - role_id, - email_verified, - ip_address: getUserIp(req), + avatarColor: generateAvatarColor(name), + roleId, + emailVerified, + ipAddress: getUserIp(req), // TODO: Handle language // language: await this.getLanguage(req), }) diff --git a/packages/vitnode/src/api/modules/admin/routes/session.route.ts b/packages/vitnode/src/api/modules/admin/routes/session.route.ts index 7b87fb05d..0a0f496b4 100644 --- a/packages/vitnode/src/api/modules/admin/routes/session.route.ts +++ b/packages/vitnode/src/api/modules/admin/routes/session.route.ts @@ -2,6 +2,8 @@ import { buildRoute } from '@/api/lib/route'; import { SessionAdminModel } from '@/api/models/session-admin'; import { z } from 'zod'; +import { getPackageJson } from '../../../lib/get-pacakge-json'; + export const sessionAdminRoute = buildRoute({ route: { method: 'get', @@ -18,17 +20,18 @@ export const sessionAdminRoute = buildRoute({ 'application/json': { schema: z.object({ user: z.object({ - id: z.string(), + id: z.number(), email: z.string(), name: z.string(), - name_code: z.string(), - joined_at: z.date(), + nameCode: z.string(), + createdAt: z.date(), newsletter: z.boolean(), - avatar_color: z.string(), - email_verified: z.boolean(), - role_id: z.string(), + avatarColor: z.string(), + emailVerified: z.boolean(), + roleId: z.number(), birthday: z.date().nullable(), }), + vitnode_version: z.string(), }), }, }, @@ -44,6 +47,7 @@ export const sessionAdminRoute = buildRoute({ return c.json({ user, + vitnode_version: (await getPackageJson()).version, }); }, }); diff --git a/packages/vitnode/src/api/modules/middleware/middleware.module.ts b/packages/vitnode/src/api/modules/middleware/middleware.module.ts index 1d12c1bbd..923fe69bc 100644 --- a/packages/vitnode/src/api/modules/middleware/middleware.module.ts +++ b/packages/vitnode/src/api/modules/middleware/middleware.module.ts @@ -1,9 +1,10 @@ import { buildModule } from '@/api/lib/module'; import { routeMiddleware } from './route'; +import { routeTestMiddleware } from './test'; export const middlewareModule = buildModule({ plugin: 'core', name: 'middleware', - routes: [routeMiddleware], + routes: [routeMiddleware, routeTestMiddleware], }); diff --git a/packages/vitnode/src/api/modules/middleware/test.ts b/packages/vitnode/src/api/modules/middleware/test.ts new file mode 100644 index 000000000..2fcd357ba --- /dev/null +++ b/packages/vitnode/src/api/modules/middleware/test.ts @@ -0,0 +1,61 @@ +import { buildRoute } from '@/api/lib/route'; +import { dbClient } from '@/database/client'; +import { core_test } from '@/database/schema/test'; +import { z } from 'zod'; + +import { + withPagination, + zodPaginationPageInfo, + zodPaginationQuery, +} from '../../lib/with-pagination'; + +export const routeTestMiddleware = buildRoute({ + route: { + isAuth: true, + path: '/test', + method: 'get', + description: 'Testing', + request: { + query: zodPaginationQuery.extend({ + order: z.enum(['asc', 'desc']).optional(), + orderBy: z.enum(['id', 'createdAt']).optional(), + }), + }, + responses: { + 200: { + content: { + 'application/json': { + schema: z.object({ + edges: z.array(z.object({ id: z.number(), createdAt: z.date() })), + pageInfo: zodPaginationPageInfo, + }), + }, + }, + description: 'Middleware route', + }, + }, + }, + handler: async c => { + const query = c.req.valid('query'); + const data = await withPagination({ + params: { + query, + }, + primaryCursor: core_test.id, + query: async ({ limit, where, orderBy }) => + await dbClient + .select() + .from(core_test) + .where(where) + .orderBy(orderBy) + .limit(limit), + table: core_test, + orderBy: { + column: query.orderBy ? core_test[query.orderBy] : core_test.createdAt, + order: query.order ?? 'desc', + }, + }); + + return c.json(data); + }, +}); diff --git a/packages/vitnode/src/api/modules/users/routes/session.route.ts b/packages/vitnode/src/api/modules/users/routes/session.route.ts index 051a5716d..acdcac6f6 100644 --- a/packages/vitnode/src/api/modules/users/routes/session.route.ts +++ b/packages/vitnode/src/api/modules/users/routes/session.route.ts @@ -15,15 +15,15 @@ export const sessionRoute = buildRoute({ schema: z.object({ user: z .object({ - id: z.string(), + id: z.number(), email: z.string(), name: z.string(), - name_code: z.string(), - joined_at: z.date(), + nameCode: z.string(), + createdAt: z.date(), newsletter: z.boolean(), - avatar_color: z.string(), - email_verified: z.boolean(), - role_id: z.string(), + avatarColor: z.string(), + emailVerified: z.boolean(), + roleId: z.number(), birthday: z.date().nullable(), isAdmin: z.boolean(), }) diff --git a/packages/vitnode/src/api/modules/users/routes/sign-in.route.ts b/packages/vitnode/src/api/modules/users/routes/sign-in.route.ts index 3cafe6474..e156cfe5f 100644 --- a/packages/vitnode/src/api/modules/users/routes/sign-in.route.ts +++ b/packages/vitnode/src/api/modules/users/routes/sign-in.route.ts @@ -37,7 +37,7 @@ export const signInRoute = buildRoute({ content: { 'application/json': { schema: z.object({ - id: z.string(), + id: z.number(), token: z.string(), }), }, diff --git a/packages/vitnode/src/api/modules/users/routes/sign-up.route.ts b/packages/vitnode/src/api/modules/users/routes/sign-up.route.ts index 0569a2992..5fc7de2a7 100644 --- a/packages/vitnode/src/api/modules/users/routes/sign-up.route.ts +++ b/packages/vitnode/src/api/modules/users/routes/sign-up.route.ts @@ -40,7 +40,7 @@ export const signUpRoute = buildRoute({ content: { 'application/json': { schema: z.object({ - id: z.string(), + id: z.number(), }), }, }, diff --git a/packages/vitnode/src/api/modules/users/sso/routes/callback.route.ts b/packages/vitnode/src/api/modules/users/sso/routes/callback.route.ts index cf9a3b01a..28cd03c33 100644 --- a/packages/vitnode/src/api/modules/users/sso/routes/callback.route.ts +++ b/packages/vitnode/src/api/modules/users/sso/routes/callback.route.ts @@ -22,7 +22,7 @@ export const callbackRoute = buildRoute({ content: { 'application/json': { schema: z.object({ - id: z.string(), + id: z.number(), token: z.string(), }), }, diff --git a/packages/vitnode/src/components/avatar.tsx b/packages/vitnode/src/components/avatar.tsx index 247f70e2e..c506b545f 100644 --- a/packages/vitnode/src/components/avatar.tsx +++ b/packages/vitnode/src/components/avatar.tsx @@ -7,7 +7,7 @@ const generateLetterPhoto = (letter: string, color: string) => )}`; export const Avatar = ({ - user: { avatar_color, name }, + user: { avatarColor, name }, className, size, ...props @@ -16,14 +16,14 @@ export const Avatar = ({ 'alt' | 'height' | 'src' | 'width' > & { size: number; - user: { avatar_color: string; name: string; name_code: string }; + user: { avatarColor: string; name: string; nameCode: string }; }) => { return ( {name} diff --git a/packages/vitnode/src/components/table/content.tsx b/packages/vitnode/src/components/table/content.tsx new file mode 100644 index 000000000..ad60d9102 --- /dev/null +++ b/packages/vitnode/src/components/table/content.tsx @@ -0,0 +1,75 @@ +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from '../ui/table'; +import { DataTable, DataTableTMin } from './data-table'; +import { OrderTableHeadDataTable } from './order-table-head'; +import { PaginationDataTable } from './pagination'; + +export function ContentDataTable({ + columns, + edges, + pageInfo, + order, + ...props +}: React.ComponentProps>) { + return ( +
+
+
+ + + + {columns.map(column => ( + + {order.columns?.includes(column.id) ? ( + + {column.label} + + ) : ( + column.label + )} + + ))} + + + + + {edges.length ? ( + edges.map(row => ( + + {columns.map(column => { + const content = + column.cell?.({ + allData: edges, + row, + }) ?? String(row[column.id]); + + return ( + + {content} + + ); + })} + + )) + ) : ( + + + Not Found + + + )} + +
+
+
+ + +
+ ); +} diff --git a/packages/vitnode/src/components/table/data-table.tsx b/packages/vitnode/src/components/table/data-table.tsx index 49c93f1eb..2dddd5ab8 100644 --- a/packages/vitnode/src/components/table/data-table.tsx +++ b/packages/vitnode/src/components/table/data-table.tsx @@ -1,69 +1,42 @@ -import { - Table, - TableBody, - TableCell, - TableHead, - TableHeader, - TableRow, -} from '../ui/table'; +import React from 'react'; -interface TMin { - id: string; -} +import { Table } from '../ui/table'; +import { ContentDataTable } from './content'; +import { PaginationDataTable } from './pagination'; -export function DataTable({ - data, - columns, - ...props -}: Omit, 'columns'> & { - columns: { - cell?: (data: { allData: T[]; row: T }) => React.ReactNode; - id: keyof T; - label: string; - }[]; - data: T[]; -}) { - return ( -
-
- - - - {columns.map(column => ( - {column.label} - ))} - - +export interface DataTableTMin { + id: number; +} - - {data.length ? ( - data.map(row => ( - - {columns.map(column => { - const content = - column.cell?.({ - allData: data, - row, - }) ?? String(row[column.id]); +export interface SearchParamsDataTable { + cursor?: string; + first?: string; + last?: string; + order?: 'asc' | 'desc'; + orderBy?: keyof DataTableTMin; +} - return ( - - {content} - - ); - })} - - )) - ) : ( - - - Not Found - - - )} - -
-
-
+export function DataTable( + props: Omit, 'columns'> & + React.ComponentProps & { + columns: { + cell?: (data: { allData: T[]; row: T }) => React.ReactNode; + id: keyof T; + label: string; + }[]; + edges: T[]; + order: { + columns?: (keyof T)[]; + defaultOrder: { + column: keyof T; + order: 'asc' | 'desc'; + }; + }; + }, +) { + return ( + Loading...}> + {...props} /> + ); } diff --git a/packages/vitnode/src/components/table/order-table-head.tsx b/packages/vitnode/src/components/table/order-table-head.tsx new file mode 100644 index 000000000..e00ce3d10 --- /dev/null +++ b/packages/vitnode/src/components/table/order-table-head.tsx @@ -0,0 +1,62 @@ +'use client'; + +import { usePathname, useRouter } from '@/lib/navigation'; +import { ArrowDown, ArrowUp, ChevronsUpDown } from 'lucide-react'; +import { useSearchParams } from 'next/navigation'; +import React from 'react'; + +import { Button } from '../ui/button'; +import { Loader } from '../ui/loader'; +import { DataTable, DataTableTMin } from './data-table'; + +export function OrderTableHeadDataTable({ + id, + children, + order: { defaultOrder }, +}: Pick>, 'order'> & { + children: React.ReactNode; + id: React.ComponentProps>['columns'][0]['id']; +}) { + const [isPending, startTransition] = React.useTransition(); + const searchParams = useSearchParams(); + const pathname = usePathname(); + const { push } = useRouter(); + + const currentOrderBy = + searchParams.get('orderBy') ?? defaultOrder.column.toString(); + const currentOrder = searchParams.get('order') ?? defaultOrder.order; + + const isActive = currentOrderBy === id.toString(); + const nextOrder = isActive && currentOrder === 'asc' ? 'desc' : 'asc'; + + return ( + + ); +} diff --git a/packages/vitnode/src/components/table/pagination.tsx b/packages/vitnode/src/components/table/pagination.tsx new file mode 100644 index 000000000..6d5e81660 --- /dev/null +++ b/packages/vitnode/src/components/table/pagination.tsx @@ -0,0 +1,143 @@ +'use client'; + +import { usePathname, useRouter } from '@/lib/navigation'; +import { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react'; +import { useTranslations } from 'next-intl'; +import { useSearchParams } from 'next/navigation'; +import React from 'react'; + +import { Button } from '../ui/button'; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '../ui/select'; +import { Skeleton } from '../ui/skeleton'; + +const PAGE_SIZE_OPTIONS = [10, 20, 30, 40]; + +export const PaginationDataTable = ({ + pageInfo: { hasNextPage, hasPreviousPage, startCursor, endCursor }, +}: { + pageInfo: { + count: number; + endCursor: null | number; + hasNextPage: boolean; + hasPreviousPage: boolean; + startCursor: null | number; + totalCount: number; + }; +}) => { + const t = useTranslations('core.global'); + const { push } = useRouter(); + const [isPending, startTransition] = React.useTransition(); + const pathname = usePathname(); + const searchParams = useSearchParams(); + const pagination = { + first: searchParams.get('first'), + last: searchParams.get('last'), + cursor: searchParams.get('cursor'), + }; + const pageSize = pagination.first ?? pagination.last ?? 10; + + return ( +
+
test
+ +
+ + +
+ {isPending ? ( + + ) : ( + + )} + + {isPending ? ( + + ) : ( + + )} +
+
+
+ ); +}; diff --git a/packages/vitnode/src/components/ui/header-content.tsx b/packages/vitnode/src/components/ui/header-content.tsx new file mode 100644 index 000000000..f638b779a --- /dev/null +++ b/packages/vitnode/src/components/ui/header-content.tsx @@ -0,0 +1,56 @@ +import { cn } from '@/lib/utils'; + +interface HeaderContentH1Props extends HeaderContentProps { + h1: React.ReactNode | string; + h2?: never; +} + +interface HeaderContentH2Props extends HeaderContentProps { + h1?: never; + h2: React.ReactNode | string; +} + +interface HeaderContentProps { + children?: React.ReactNode; + className?: string; + desc?: React.ReactNode; + ref?: React.RefCallback; +} + +export const HeaderContent = ({ + children, + className, + desc, + h1, + h2, + ref, +}: HeaderContentH1Props | HeaderContentH2Props) => { + return ( +
+
+ {h1 ? ( +

{h1}

+ ) : ( +

{h2}

+ )} + {desc && ( +
+ {desc} +
+ )} +
+ + {children && ( +
+ {children} +
+ )} +
+ ); +}; diff --git a/packages/vitnode/src/components/ui/loader.tsx b/packages/vitnode/src/components/ui/loader.tsx index a8b129bda..d0ec4ae95 100644 --- a/packages/vitnode/src/components/ui/loader.tsx +++ b/packages/vitnode/src/components/ui/loader.tsx @@ -8,13 +8,13 @@ export const Loader = ({ className?: string; small?: boolean; }) => { + if (small) { + return ; + } + return (
- +
); }; diff --git a/packages/vitnode/src/database/schema/admins.ts b/packages/vitnode/src/database/schema/admins.ts index f40a399ed..2773083c6 100644 --- a/packages/vitnode/src/database/schema/admins.ts +++ b/packages/vitnode/src/database/schema/admins.ts @@ -8,15 +8,15 @@ import { core_users } from './users'; export const core_admin_permissions = pgTable( 'core_admin_permissions', t => ({ - id: t.uuid().defaultRandom().primaryKey(), - role_id: t.uuid().references(() => core_roles.id, { + id: t.serial().primaryKey(), + roleId: t.integer().references(() => core_roles.id, { onDelete: 'cascade', }), - user_id: t.uuid().references(() => core_users.id, { + userId: t.integer().references(() => core_users.id, { onDelete: 'cascade', }), - created_at: t.timestamp().notNull().defaultNow(), - updated_at: t + createdAt: t.timestamp().notNull().defaultNow(), + updatedAt: t .timestamp() .notNull() .$onUpdate(() => new Date()), @@ -26,8 +26,8 @@ export const core_admin_permissions = pgTable( // }), }), t => [ - index('core_admin_permissions_role_id_idx').on(t.role_id), - index('core_admin_permissions_user_id_idx').on(t.user_id), + index('core_admin_permissions_role_id_idx').on(t.roleId), + index('core_admin_permissions_user_id_idx').on(t.userId), ], ).enableRLS(); @@ -35,11 +35,11 @@ export const core_admin_permissions_relations = relations( core_admin_permissions, ({ one }) => ({ group: one(core_roles, { - fields: [core_admin_permissions.role_id], + fields: [core_admin_permissions.roleId], references: [core_roles.id], }), user: one(core_users, { - fields: [core_admin_permissions.user_id], + fields: [core_admin_permissions.userId], references: [core_users.id], }), }), @@ -48,18 +48,19 @@ export const core_admin_permissions_relations = relations( export const core_admin_sessions = pgTable( 'core_admin_sessions', t => ({ - token: t.varchar({ length: 255 }).primaryKey(), - user_id: t - .uuid() + id: t.serial().primaryKey(), + token: t.varchar({ length: 255 }).notNull().unique(), + userId: t + .integer() .notNull() .references(() => core_users.id, { onDelete: 'cascade', }), - created_at: t.timestamp().notNull().defaultNow(), - last_seen: t.timestamp().notNull().defaultNow(), - expires_at: t.timestamp().notNull(), - device_id: t - .uuid() + createdAt: t.timestamp().notNull().defaultNow(), + lastSeen: t.timestamp().notNull().defaultNow(), + expiresAt: t.timestamp().notNull(), + deviceId: t + .integer() .references(() => core_sessions_known_devices.id, { onDelete: 'cascade', }) @@ -67,7 +68,7 @@ export const core_admin_sessions = pgTable( }), t => [ index('core_admin_sessions_token_idx').on(t.token), - index('core_admin_sessions_user_id_idx').on(t.user_id), + index('core_admin_sessions_user_id_idx').on(t.userId), ], ).enableRLS(); @@ -75,11 +76,11 @@ export const core_admin_sessions_relations = relations( core_admin_sessions, ({ one }) => ({ user: one(core_users, { - fields: [core_admin_sessions.user_id], + fields: [core_admin_sessions.userId], references: [core_users.id], }), device: one(core_sessions_known_devices, { - fields: [core_admin_sessions.device_id], + fields: [core_admin_sessions.deviceId], references: [core_sessions_known_devices.id], }), }), diff --git a/packages/vitnode/src/database/schema/config.ts b/packages/vitnode/src/database/schema/config.ts deleted file mode 100644 index c795acac8..000000000 --- a/packages/vitnode/src/database/schema/config.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { pgEnum, pgTable } from 'drizzle-orm/pg-core'; - -export const appCoreTypeEnum = pgEnum('vitnode_core_app_type', [ - 'website', - 'article', - 'book', - 'music.album', - 'music.playlist', - 'music.radio_station', - 'music.song', - 'profile', - 'video.episode', - 'video.movie', - 'video.tv_show', -]); - -export const core_config = pgTable('core_config', t => ({ - app_type: appCoreTypeEnum().notNull().default('website'), - restart_server: t.boolean().notNull().default(false), - editor_sticky: t.boolean().notNull().default(true), - site_name: t.varchar({ length: 150 }).notNull().default('VitNode'), - site_short_name: t.varchar({ length: 75 }).notNull().default('VitNode'), - contact_email: t.varchar().notNull().default(''), - last_updated: t.timestamp().notNull().defaultNow(), - auth_force_login: t.boolean().notNull().default(false), - auth_lock_register: t.boolean().notNull().default(false), - auth_require_confirm_email: t.boolean().notNull().default(false), - admin_note: t.text().notNull().default('Enter your note here. :)'), - admin_note_updated_at: t - .timestamp() - .notNull() - .$onUpdate(() => new Date()), -})).enableRLS(); diff --git a/packages/vitnode/src/database/schema/languages.ts b/packages/vitnode/src/database/schema/languages.ts index e8b2b3907..7719c8ea7 100644 --- a/packages/vitnode/src/database/schema/languages.ts +++ b/packages/vitnode/src/database/schema/languages.ts @@ -4,15 +4,15 @@ import { index, pgTable } from 'drizzle-orm/pg-core'; export const core_languages = pgTable( 'core_languages', t => ({ - id: t.uuid().defaultRandom().primaryKey(), + id: t.serial().primaryKey(), code: t.varchar({ length: 32 }).notNull().unique(), name: t.varchar({ length: 255 }).notNull(), timezone: t.varchar({ length: 255 }).notNull().default('UTC'), protected: t.boolean().notNull().default(false), default: t.boolean().notNull().default(false), enabled: t.boolean().notNull().default(true), - created_at: t.timestamp().notNull().defaultNow(), - updated_at: t + createdAt: t.timestamp().notNull().defaultNow(), + updatedAt: t .timestamp() .notNull() .$onUpdate(() => new Date()), @@ -28,27 +28,27 @@ export const core_languages = pgTable( export const core_languages_words = pgTable( 'core_languages_words', t => ({ - id: t.uuid().defaultRandom().primaryKey(), - language_code: t + id: t.serial().primaryKey(), + languageCode: t .varchar() .notNull() .references(() => core_languages.code, { onDelete: 'cascade', }), - plugin_code: t.varchar({ length: 50 }).notNull(), - item_id: t.varchar().notNull(), + pluginCode: t.varchar({ length: 50 }).notNull(), + itemId: t.integer().notNull(), value: t.text().notNull(), - table_name: t.varchar({ length: 255 }).notNull(), + tableName: t.varchar({ length: 255 }).notNull(), variable: t.varchar({ length: 255 }).notNull(), }), - t => [index('core_languages_words_lang_code_idx').on(t.language_code)], + t => [index('core_languages_words_lang_code_idx').on(t.languageCode)], ).enableRLS(); export const core_languages_words_relations = relations( core_languages_words, ({ one }) => ({ language: one(core_languages, { - fields: [core_languages_words.language_code], + fields: [core_languages_words.languageCode], references: [core_languages.code], }), }), diff --git a/packages/vitnode/src/database/schema/moderators.ts b/packages/vitnode/src/database/schema/moderators.ts index 690d6f782..5337c5ca4 100644 --- a/packages/vitnode/src/database/schema/moderators.ts +++ b/packages/vitnode/src/database/schema/moderators.ts @@ -7,23 +7,23 @@ import { core_users } from './users'; export const core_moderators_permissions = pgTable( 'core_moderators_permissions', t => ({ - id: t.uuid().defaultRandom().primaryKey(), - role_id: t.uuid().references(() => core_roles.id, { + id: t.serial().primaryKey(), + roleId: t.integer().references(() => core_roles.id, { onDelete: 'cascade', }), - user_id: t.uuid().references(() => core_users.id, { + userId: t.integer().references(() => core_users.id, { onDelete: 'cascade', }), - created_at: t.timestamp().notNull().defaultNow(), - updated_at: t + createdAt: t.timestamp().notNull().defaultNow(), + updatedAt: t .timestamp() .notNull() .$onUpdate(() => new Date()), protected: t.boolean().notNull().default(false), }), t => [ - index('core_moderators_permissions_role_id_idx').on(t.role_id), - index('core_moderators_permissions_user_id_idx').on(t.user_id), + index('core_moderators_permissions_role_id_idx').on(t.roleId), + index('core_moderators_permissions_user_id_idx').on(t.userId), ], ).enableRLS(); @@ -31,11 +31,11 @@ export const core_moderators_permissions_relations = relations( core_moderators_permissions, ({ one }) => ({ group: one(core_roles, { - fields: [core_moderators_permissions.role_id], + fields: [core_moderators_permissions.roleId], references: [core_roles.id], }), user: one(core_users, { - fields: [core_moderators_permissions.user_id], + fields: [core_moderators_permissions.userId], references: [core_users.id], }), }), diff --git a/packages/vitnode/src/database/schema/roles.ts b/packages/vitnode/src/database/schema/roles.ts index a7be33623..50a71d510 100644 --- a/packages/vitnode/src/database/schema/roles.ts +++ b/packages/vitnode/src/database/schema/roles.ts @@ -1,9 +1,9 @@ import { pgTable } from 'drizzle-orm/pg-core'; export const core_roles = pgTable('core_roles', t => ({ - id: t.uuid().defaultRandom().primaryKey(), - created_at: t.timestamp().notNull().defaultNow(), - updated_at: t + id: t.serial().primaryKey(), + createdAt: t.timestamp().notNull().defaultNow(), + updatedAt: t .timestamp() .notNull() .$onUpdate(() => new Date()), @@ -12,7 +12,4 @@ export const core_roles = pgTable('core_roles', t => ({ root: t.boolean().notNull().default(false), guest: t.boolean().notNull().default(false), color: t.varchar({ length: 19 }), - files_allow_upload: t.boolean().notNull().default(true), - files_total_max_storage: t.integer().notNull().default(500000), - files_max_storage_for_submit: t.integer().notNull().default(5000), })).enableRLS(); diff --git a/packages/vitnode/src/database/schema/sessions.ts b/packages/vitnode/src/database/schema/sessions.ts index c1bd1c660..5506b2f4c 100644 --- a/packages/vitnode/src/database/schema/sessions.ts +++ b/packages/vitnode/src/database/schema/sessions.ts @@ -6,32 +6,33 @@ import { core_users } from './users'; export const core_sessions = pgTable( 'core_sessions', t => ({ + id: t.serial().primaryKey(), token: t.varchar({ length: 255 }).notNull().unique(), - user_id: t - .uuid() + userId: t + .integer() .notNull() .references(() => core_users.id, { onDelete: 'cascade', }), - created_at: t.timestamp().notNull().defaultNow(), - expires_at: t.timestamp().notNull(), - device_id: t - .uuid() + createdAt: t.timestamp().notNull().defaultNow(), + expiresAt: t.timestamp().notNull(), + deviceId: t + .integer() .references(() => core_sessions_known_devices.id, { onDelete: 'cascade', }) .notNull(), }), - t => [index('core_sessions_user_id_idx').on(t.user_id)], + t => [index('core_sessions_user_id_idx').on(t.userId)], ).enableRLS(); export const core_sessions_relations = relations(core_sessions, ({ one }) => ({ user: one(core_users, { - fields: [core_sessions.user_id], + fields: [core_sessions.userId], references: [core_users.id], }), device: one(core_sessions_known_devices, { - fields: [core_sessions.device_id], + fields: [core_sessions.deviceId], references: [core_sessions_known_devices.id], }), })); @@ -39,12 +40,12 @@ export const core_sessions_relations = relations(core_sessions, ({ one }) => ({ export const core_sessions_known_devices = pgTable( 'core_sessions_known_devices', t => ({ - id: t.uuid().defaultRandom().primaryKey(), - ip_address: t.varchar({ length: 40 }).notNull(), - user_agent: t.text().notNull(), - last_seen: t.timestamp().notNull().defaultNow(), + id: t.serial().primaryKey(), + ipAddress: t.varchar({ length: 40 }).notNull(), + userAgent: t.text().notNull(), + lastSeen: t.timestamp().notNull().defaultNow(), }), - t => [index('core_sessions_known_devices_ip_address_idx').on(t.ip_address)], + t => [index('core_sessions_known_devices_ip_address_idx').on(t.ipAddress)], ).enableRLS(); export const core_sessions_known_devices_relations = relations( @@ -52,7 +53,7 @@ export const core_sessions_known_devices_relations = relations( ({ one }) => ({ session: one(core_sessions, { fields: [core_sessions_known_devices.id], - references: [core_sessions.device_id], + references: [core_sessions.deviceId], }), }), ); diff --git a/packages/vitnode/src/database/schema/test.ts b/packages/vitnode/src/database/schema/test.ts new file mode 100644 index 000000000..0cbdbd526 --- /dev/null +++ b/packages/vitnode/src/database/schema/test.ts @@ -0,0 +1,7 @@ +import { pgTable } from 'drizzle-orm/pg-core'; + +export const core_test = pgTable('core_test', t => ({ + id: t.serial().primaryKey(), + createdAt: t.timestamp().notNull().defaultNow(), + text: t.text().notNull(), +})).enableRLS(); diff --git a/packages/vitnode/src/database/schema/users.ts b/packages/vitnode/src/database/schema/users.ts index 87822373b..3c134fbf8 100644 --- a/packages/vitnode/src/database/schema/users.ts +++ b/packages/vitnode/src/database/schema/users.ts @@ -7,23 +7,23 @@ import { core_roles } from './roles'; export const core_users = pgTable( 'core_users', t => ({ - id: t.uuid().defaultRandom().primaryKey(), - name_code: t.varchar({ length: 255 }).notNull().unique(), + id: t.serial().primaryKey(), + nameCode: t.varchar({ length: 255 }).notNull().unique(), name: t.varchar({ length: 255 }).notNull().unique(), email: t.varchar({ length: 255 }).notNull().unique(), password: t.varchar(), - joined_at: t.timestamp().notNull().defaultNow(), + createdAt: t.timestamp().notNull().defaultNow(), newsletter: t.boolean().notNull().default(false), - avatar_color: t.varchar({ length: 6 }).notNull(), - email_verified: t.boolean().notNull().default(false), - role_id: t - .uuid() + avatarColor: t.varchar({ length: 6 }).notNull(), + emailVerified: t.boolean().notNull().default(false), + roleId: t + .integer() .references(() => core_roles.id) .notNull(), birthday: t.timestamp(), - ip_address: t.varchar({ length: 40 }).notNull(), + ipAddress: t.varchar({ length: 40 }).notNull(), language: t - .varchar({ length: 5 }) + .varchar({ length: 32 }) .notNull() .default('en') .references(() => core_languages.code, { @@ -31,7 +31,7 @@ export const core_users = pgTable( }), }), t => [ - index('core_users_name_code_idx').on(t.name_code), + index('core_users_name_code_idx').on(t.nameCode), index('core_users_name_idx').on(t.name), index('core_users_email_idx').on(t.email), ], @@ -39,7 +39,7 @@ export const core_users = pgTable( export const core_users_relations = relations(core_users, ({ one, many }) => ({ group: one(core_roles, { - fields: [core_users.role_id], + fields: [core_users.roleId], references: [core_roles.id], }), language: one(core_languages, { @@ -48,40 +48,40 @@ export const core_users_relations = relations(core_users, ({ one, many }) => ({ }), confirm_email: one(core_users_confirm_emails, { fields: [core_users.id], - references: [core_users_confirm_emails.user_id], + references: [core_users_confirm_emails.userId], }), sso: many(core_users_sso), forgot_password: one(core_users_forgot_password, { fields: [core_users.id], - references: [core_users_forgot_password.user_id], + references: [core_users_forgot_password.userId], }), })); export const core_users_sso = pgTable( 'core_users_sso', t => ({ - user_id: t - .uuid() + userId: t + .integer() .references(() => core_users.id, { onDelete: 'cascade', }) .notNull(), - provider_id: t.varchar({ length: 255 }).notNull(), - provider_account_id: t.varchar({ length: 255 }).notNull(), - created_at: t.timestamp().notNull().defaultNow(), - updated_at: t + providerId: t.varchar({ length: 255 }).notNull(), + providerAccountId: t.varchar({ length: 255 }).notNull(), + createdAt: t.timestamp().notNull().defaultNow(), + updatedAt: t .timestamp() .notNull() .$onUpdate(() => new Date()), }), - t => [index('core_users_sso_user_id_idx').on(t.user_id)], + t => [index('core_users_sso_user_id_idx').on(t.userId)], ).enableRLS(); export const core_users_sso_relations = relations( core_users_sso, ({ one }) => ({ user: one(core_users, { - fields: [core_users_sso.user_id], + fields: [core_users_sso.userId], references: [core_users.id], }), }), @@ -90,15 +90,15 @@ export const core_users_sso_relations = relations( export const core_users_confirm_emails = pgTable( 'core_users_confirm_emails', t => ({ - id: t.uuid().defaultRandom().primaryKey(), - user_id: t - .uuid() + id: t.serial().primaryKey(), + userId: t + .integer() .references(() => core_users.id, { onDelete: 'cascade', }) .notNull(), token: t.varchar({ length: 100 }).notNull().unique(), - created_at: t.timestamp().notNull().defaultNow(), + createdAt: t.timestamp().notNull().defaultNow(), expires: t.timestamp().notNull(), }), ).enableRLS(); @@ -107,7 +107,7 @@ export const core_users_confirm_emails_relations = relations( core_users_confirm_emails, ({ one }) => ({ user: one(core_users, { - fields: [core_users_confirm_emails.user_id], + fields: [core_users_confirm_emails.userId], references: [core_users.id], }), }), @@ -116,9 +116,9 @@ export const core_users_confirm_emails_relations = relations( export const core_users_forgot_password = pgTable( 'core_users_forgot_password', t => ({ - id: t.uuid().defaultRandom().primaryKey(), - user_id: t - .uuid() + id: t.serial().primaryKey(), + userId: t + .integer() .references(() => core_users.id, { onDelete: 'cascade', }) @@ -126,8 +126,8 @@ export const core_users_forgot_password = pgTable( .unique(), token: t.varchar({ length: 100 }).notNull().unique(), ip_address: t.varchar({ length: 40 }).notNull(), - created_at: t.timestamp().notNull().defaultNow(), - expires_at: t.timestamp().notNull(), + createdAt: t.timestamp().notNull().defaultNow(), + expiresAt: t.timestamp().notNull(), }), ).enableRLS(); @@ -135,7 +135,7 @@ export const core_users_forgot_password_relations = relations( core_users_forgot_password, ({ one }) => ({ user: one(core_users, { - fields: [core_users_forgot_password.user_id], + fields: [core_users_forgot_password.userId], references: [core_users.id], }), }), diff --git a/packages/vitnode/src/lib/api/get-middleware-api.ts b/packages/vitnode/src/lib/api/get-middleware-api.ts index 821db5568..83ea23516 100644 --- a/packages/vitnode/src/lib/api/get-middleware-api.ts +++ b/packages/vitnode/src/lib/api/get-middleware-api.ts @@ -6,6 +6,9 @@ export const getMiddlewareApi = async () => { path: '/', method: 'get', module: 'middleware', + options: { + cache: 'force-cache', + }, }); return await res.json(); diff --git a/packages/vitnode/src/lib/api/get-session-admin-api.ts b/packages/vitnode/src/lib/api/get-session-admin-api.ts index 4496571aa..e10831c52 100644 --- a/packages/vitnode/src/lib/api/get-session-admin-api.ts +++ b/packages/vitnode/src/lib/api/get-session-admin-api.ts @@ -8,6 +8,9 @@ export const getSessionAdminApi = async () => { path: '/session', method: 'get', module: 'admin', + options: { + cache: 'force-cache', + }, }); if (res.status !== 200) { @@ -15,6 +18,7 @@ export const getSessionAdminApi = async () => { return; } + const data = await res.json(); return data; diff --git a/packages/vitnode/src/lib/fetcher/index.ts b/packages/vitnode/src/lib/fetcher/index.ts index 42002f6e9..ebf12b291 100644 --- a/packages/vitnode/src/lib/fetcher/index.ts +++ b/packages/vitnode/src/lib/fetcher/index.ts @@ -26,9 +26,11 @@ export async function fetcher< args, options, allowSaveCookies = false, + withPagination = false, }: FetcherParams & { allowSaveCookies?: boolean; options?: Omit; + withPagination?: boolean; }, ): Promise> { let currentPath: string = path; @@ -53,9 +55,14 @@ export async function fetcher< // Add query parameters if they exist if (args && 'query' in args && args.query) { - const searchParams = buildSearchParams( - args.query as Record, - ); + const queryParams = args.query as Record; + const searchParams = buildSearchParams({ + ...args.query, + ...(withPagination && { + first: !queryParams.last ? (queryParams.first ?? '10') : undefined, + search: queryParams.search ?? '', + }), + }); url.search = searchParams.toString(); } @@ -77,12 +84,7 @@ export async function fetcher< ...options, }); - if ( - response.status >= 200 && - response.status < 300 && - allowSaveCookies && - method !== 'get' - ) { + if (response.status >= 200 && response.status < 300 && allowSaveCookies) { await handleSetCookiesFetcher(response); } diff --git a/packages/vitnode/src/views/admin/dynamic-admin-view.tsx b/packages/vitnode/src/views/admin/dynamic-admin-view.tsx index a92e2616e..614355ebc 100644 --- a/packages/vitnode/src/views/admin/dynamic-admin-view.tsx +++ b/packages/vitnode/src/views/admin/dynamic-admin-view.tsx @@ -4,6 +4,7 @@ import { notFound } from 'next/navigation'; import { VitNodeConfig } from '../../vitnode.config'; import { DashboardAdminView } from './views/core/dashboard/dashboard-admin-view'; +import { TestView } from './views/core/test'; import { UsersAdminView } from './views/core/users/users-admin-view'; export interface DynamicAdminViewProps { @@ -11,6 +12,7 @@ export interface DynamicAdminViewProps { locale: string; rest: string[]; }>; + searchParams: Promise>; } export const generateMetadataDynamicAdminView = async ({ @@ -24,18 +26,19 @@ export const generateMetadataDynamicAdminView = async ({ return await views[path]; }; -export const DynamicAdminView = async ({ - params, -}: DynamicAdminViewProps & { - config: VitNodeConfig; -}) => { - const { rest, locale } = await params; +export const DynamicAdminView = async ( + props: DynamicAdminViewProps & { + config: VitNodeConfig; + }, +) => { + const { rest, locale } = await props.params; setRequestLocale(locale); const path = rest.join('/'); const views = { core: , - 'core/users': , + 'core/users': , + 'core/test': , }; const view = views[path]; @@ -48,5 +51,8 @@ export const DynamicAdminView = async ({ }; export const dynamicAdminViewGenerateStaticParams = (locales: string[]) => { - return locales.map(locale => ({ locale, rest: ['core', 'core/users'] })); + return locales.map(locale => ({ + locale, + rest: ['core', 'core/users', 'core/test'], + })); }; diff --git a/packages/vitnode/src/views/admin/layouts/sidebar/nav/item.tsx b/packages/vitnode/src/views/admin/layouts/sidebar/nav/item.tsx index c8413f455..9f33c0c7d 100644 --- a/packages/vitnode/src/views/admin/layouts/sidebar/nav/item.tsx +++ b/packages/vitnode/src/views/admin/layouts/sidebar/nav/item.tsx @@ -41,21 +41,21 @@ export const ItemNavAdmin = ({ return ( - {content} + + {content} + ); } return ( - + - - - {content} - - + + {content} + @@ -68,7 +68,9 @@ export const ItemNavAdmin = ({ {items.map(item => ( - {item.title} + + {item.title} + ))} diff --git a/packages/vitnode/src/views/admin/layouts/sidebar/nav/nav.tsx b/packages/vitnode/src/views/admin/layouts/sidebar/nav/nav.tsx index 889e94da9..f955d45d6 100644 --- a/packages/vitnode/src/views/admin/layouts/sidebar/nav/nav.tsx +++ b/packages/vitnode/src/views/admin/layouts/sidebar/nav/nav.tsx @@ -35,6 +35,10 @@ export const NavSidebarAdmin = async () => { title: t('users.list'), href: '/admin/core/users', }, + { + title: 'test', + href: '/admin/core/test', + }, ], }, ], diff --git a/packages/vitnode/src/views/admin/layouts/sidebar/sidebar.tsx b/packages/vitnode/src/views/admin/layouts/sidebar/sidebar.tsx index 99b42975e..55a2f0708 100644 --- a/packages/vitnode/src/views/admin/layouts/sidebar/sidebar.tsx +++ b/packages/vitnode/src/views/admin/layouts/sidebar/sidebar.tsx @@ -7,9 +7,9 @@ import { NavSidebarAdmin } from './nav/nav'; export const SidebarAdmin = () => { return ( - + - + diff --git a/packages/vitnode/src/views/admin/sign-in/sign-in-admin-view.tsx b/packages/vitnode/src/views/admin/sign-in/sign-in-admin-view.tsx index 56dbf6a20..e106e8d0e 100644 --- a/packages/vitnode/src/views/admin/sign-in/sign-in-admin-view.tsx +++ b/packages/vitnode/src/views/admin/sign-in/sign-in-admin-view.tsx @@ -1,14 +1,17 @@ +import { I18nProvider } from '@/components/i18n-provider'; import { LogoVitNode } from '@/components/logo-vitnode'; import { Card } from '@/components/ui/card'; import { FormSignIn } from '@/views/auth/sign-in/form/form'; export const SignInAdminView = () => { return ( -
- - - - -
+ +
+ + + + +
+
); }; diff --git a/packages/vitnode/src/views/admin/views/core/dashboard/dashboard-admin-view.tsx b/packages/vitnode/src/views/admin/views/core/dashboard/dashboard-admin-view.tsx index 324a10733..6b4056632 100644 --- a/packages/vitnode/src/views/admin/views/core/dashboard/dashboard-admin-view.tsx +++ b/packages/vitnode/src/views/admin/views/core/dashboard/dashboard-admin-view.tsx @@ -1,151 +1,35 @@ -'use client'; +import { Badge } from '@/components/ui/badge'; +import { HeaderContent } from '@/components/ui/header-content'; +import { getSessionAdminApi } from '@/lib/api/get-session-admin-api'; +import { CONFIG } from '@/lib/config'; +import { AlertTriangleIcon } from 'lucide-react'; +import { getTranslations } from 'next-intl/server'; -import { AutoForm } from '@/components/form/auto-form'; -import { AutoFormCheckbox } from '@/components/form/fields/checkbox'; -import { AutoFormCombobox } from '@/components/form/fields/combobox'; -import { AutoFormInput } from '@/components/form/fields/input'; -import { AutoFormRadioGroup } from '@/components/form/fields/radio-group'; -import { AutoFormSelect } from '@/components/form/fields/select'; -import { AutoFormSwitch } from '@/components/form/fields/switch'; -import { AutoFormTextarea } from '@/components/form/fields/textarea'; -import { z } from 'zod'; - -export const DashboardAdminView = () => { - const formSchema = z.object({ - provider: z.string().min(1, { message: 'Provider is required' }), - client_secret: z.string().min(1, { message: 'Client Secret is required' }), - terms: z.boolean().refine(val => val, { - message: 'You must accept the terms and conditions', - }), - options: z.enum(['option1', 'option2', 'option3']).default('option1'), - options_long: z.enum(['option1', 'option2', 'option3']).default('option2'), - switch: z.boolean().default(false), - type: z.enum(['option-one', 'option-two']), - }); +export const DashboardAdminView = async () => { + const session = await getSessionAdminApi(); + const t = await getTranslations('admin.dashboard'); + if (!session) return null; + const { vitnode_version } = session; return (
- ( - - ), - }, - { - id: 'client_secret', - component: props => ( - - ), - }, - { - id: 'terms', - component: props => ( - - ), - }, - { - id: 'options', - component: props => ( - - ), - }, - { - id: 'options_long', - component: props => ( - - ), - }, - { - id: 'switch', - component: props => ( - - ), - }, - { - id: 'type', - component: props => ( - - ), - }, - ]} - formSchema={formSchema} - onSubmit={values => { - // eslint-disable-next-line no-console - console.log('Form submitted', values); - }} + + VitNode + {CONFIG.node_development && ( + + {t('dev_mode')} + + )} + + } /> +
Dashboard Admin
); }; diff --git a/packages/vitnode/src/views/admin/views/core/test.tsx b/packages/vitnode/src/views/admin/views/core/test.tsx new file mode 100644 index 000000000..057f92547 --- /dev/null +++ b/packages/vitnode/src/views/admin/views/core/test.tsx @@ -0,0 +1,151 @@ +'use client'; + +import { AutoForm } from '@/components/form/auto-form'; +import { AutoFormCheckbox } from '@/components/form/fields/checkbox'; +import { AutoFormCombobox } from '@/components/form/fields/combobox'; +import { AutoFormInput } from '@/components/form/fields/input'; +import { AutoFormRadioGroup } from '@/components/form/fields/radio-group'; +import { AutoFormSelect } from '@/components/form/fields/select'; +import { AutoFormSwitch } from '@/components/form/fields/switch'; +import { AutoFormTextarea } from '@/components/form/fields/textarea'; +import { z } from 'zod'; + +export const TestView = () => { + const formSchema = z.object({ + provider: z.string().min(1, { message: 'Provider is required' }), + client_secret: z.string().min(1, { message: 'Client Secret is required' }), + terms: z.boolean().refine(val => val, { + message: 'You must accept the terms and conditions', + }), + options: z.enum(['option1', 'option2', 'option3']).default('option1'), + options_long: z.enum(['option1', 'option2', 'option3']).default('option2'), + switch: z.boolean().default(false), + type: z.enum(['option-one', 'option-two']), + }); + + return ( +
+ ( + + ), + }, + { + id: 'client_secret', + component: props => ( + + ), + }, + { + id: 'terms', + component: props => ( + + ), + }, + { + id: 'options', + component: props => ( + + ), + }, + { + id: 'options_long', + component: props => ( + + ), + }, + { + id: 'switch', + component: props => ( + + ), + }, + { + id: 'type', + component: props => ( + + ), + }, + ]} + formSchema={formSchema} + onSubmit={values => { + // eslint-disable-next-line no-console + console.log('Form submitted', values); + }} + /> +
+ ); +}; diff --git a/packages/vitnode/src/views/admin/views/core/users/users-admin-view.tsx b/packages/vitnode/src/views/admin/views/core/users/users-admin-view.tsx index 5c133f558..da282dd46 100644 --- a/packages/vitnode/src/views/admin/views/core/users/users-admin-view.tsx +++ b/packages/vitnode/src/views/admin/views/core/users/users-admin-view.tsx @@ -1,90 +1,51 @@ -'use client'; - -import { DataTable } from '@/components/table/data-table'; -import { Button } from '@/components/ui/button'; +import { middlewareModule } from '@/api/modules/middleware/middleware.module'; import { - DropdownMenu, - DropdownMenuContent, - DropdownMenuItem, - DropdownMenuSeparator, - DropdownMenuTrigger, -} from '@/components/ui/dropdown-menu'; -import { MoreVerticalIcon } from 'lucide-react'; + DataTable, + SearchParamsDataTable, +} from '@/components/table/data-table'; +import { fetcher } from '@/lib/fetcher'; + +export const UsersAdminView = async ({ + searchParams, +}: { + searchParams: Promise; +}) => { + const query = await searchParams; + const res = await fetcher(middlewareModule, { + path: '/test', + method: 'get', + module: 'middleware', + args: { + query, + }, + withPagination: true, + }); + const data = await res.json(); -export const UsersAdminView = () => { return (
{row.role}, - }, - { - id: 'status', - label: 'Status', - cell: ({ row }) => ( - - {row.status} - - ), - }, { id: 'id', - label: 'Actions', - cell: () => ( - - - - - - Edit - Make a copy - Favorite - - Delete - - + label: 'Id', + cell: ({ row, allData }) => ( + + {row.id} - all data {allData.length} + ), }, + { id: 'createdAt', label: 'Created at' }, ]} - data={[ - { - id: 'user1', - name: 'Alice Smith', - email: 'alice@example.com', - role: 'admin', - status: 'active', - }, - { - id: 'user2', - name: 'Bob Johnson', - email: 'bob@example.com', - role: 'editor', - status: 'inactive', + edges={data.edges} + order={{ + columns: ['createdAt', 'id'], + defaultOrder: { + column: 'createdAt', + order: 'desc', }, - { - id: 'user3', - name: 'Charlie Lee', - email: 'charlie@example.com', - role: 'viewer', - status: 'active', - }, - ]} + }} + pageInfo={data.pageInfo} />
); diff --git a/packages/vitnode/src/views/error/global-error-view.tsx b/packages/vitnode/src/views/error/global-error-view.tsx new file mode 100644 index 000000000..f5d983eeb --- /dev/null +++ b/packages/vitnode/src/views/error/global-error-view.tsx @@ -0,0 +1,46 @@ +import { LogoVitNode } from '@/components/logo-vitnode'; +import { Card, CardContent } from '@/components/ui/card'; +import { VitNodeConfig } from '@/vitnode.config'; +import { ThemeProvider } from 'next-themes'; +// eslint-disable-next-line no-restricted-imports +import Link from 'next/link'; + +export const GlobalErrorView = ({ + className, + config, +}: { + className?: string; + config: VitNodeConfig; +}) => { + return ( + + + Error 500! - {config.metadata.title} + + + +
+
+ + + + +

+ Oops! Something went wrong. +

+ + + +

+ An unexpected error occurred. Please try refreshing the page + or come back later. +

+
+
+
+
+
+ + + ); +}; diff --git a/plugins/blog/package.json b/plugins/blog/package.json index 96154e87d..70113e9fb 100644 --- a/plugins/blog/package.json +++ b/plugins/blog/package.json @@ -1,6 +1,6 @@ { "name": "vitnode-blog", - "version": "0.2.0", + "version": "2.0.0-canary.0", "description": "Backend wrapper for VitNode projects", "author": "VitNode", "homepage": "https://vitnode.com", @@ -32,7 +32,7 @@ "zod": "^3.24.3" }, "devDependencies": { - "@swc/cli": "^0.7.3", + "@swc/cli": "0.6.0", "@swc/core": "^1.11.24", "concurrently": "^9.1.2", "eslint": "^9.25.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1acae2581..314444d43 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,13 +37,13 @@ importers: version: 11.6.1(@fumadocs/mdx-remote@1.3.0(acorn@8.14.1)(fumadocs-core@15.2.12(@types/react@19.1.2)(next@15.3.1(@playwright/test@1.52.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0))(acorn@8.14.1)(fumadocs-core@15.2.12(@types/react@19.1.2)(next@15.3.1(@playwright/test@1.52.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(next@15.3.1(@playwright/test@1.52.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) fumadocs-ui: specifier: ^15.2.12 - version: 15.2.12(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(next@15.3.1(@playwright/test@1.52.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.1.4) + version: 15.2.12(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(next@15.3.1(@playwright/test@1.52.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.1.5) lucide-react: specifier: ^0.503.0 version: 0.503.0(react@19.1.0) motion: specifier: ^12.9.2 - version: 12.9.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 12.9.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) next: specifier: ^15.3.1 version: 15.3.1(@playwright/test@1.52.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -59,7 +59,7 @@ importers: devDependencies: '@tailwindcss/postcss': specifier: ^4.1.4 - version: 4.1.4 + version: 4.1.5 '@types/mdx': specifier: ^2.0.13 version: 2.0.13 @@ -71,7 +71,7 @@ importers: version: 19.1.2 '@types/react-dom': specifier: ^19.1.2 - version: 19.1.2(@types/react@19.1.2) + version: 19.1.3(@types/react@19.1.2) postcss: specifier: ^8.5.3 version: 8.5.3 @@ -80,7 +80,7 @@ importers: version: 3.3.0 tailwindcss: specifier: ^4.1.4 - version: 4.1.4 + version: 4.1.5 typescript: specifier: ^5.8.3 version: 5.8.3 @@ -150,7 +150,7 @@ importers: version: 1.52.0 '@tailwindcss/postcss': specifier: ^4.1.4 - version: 4.1.4 + version: 4.1.5 '@types/node': specifier: ^22.15.3 version: 22.15.3 @@ -159,7 +159,7 @@ importers: version: 19.1.2 '@types/react-dom': specifier: ^19.1.2 - version: 19.1.2(@types/react@19.1.2) + version: 19.1.3(@types/react@19.1.2) eslint: specifier: ^9.25.1 version: 9.25.1(jiti@2.4.2) @@ -171,10 +171,10 @@ importers: version: 3.5.3 react-email: specifier: ^4.0.7 - version: 4.0.7(@playwright/test@1.52.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 4.0.11(@playwright/test@1.52.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) tailwindcss: specifier: ^4.1.4 - version: 4.1.4 + version: 4.1.5 tw-animate-css: specifier: ^1.2.8 version: 1.2.8 @@ -252,8 +252,8 @@ importers: specifier: ^6.3.1 version: 6.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tanstack/react-query': - specifier: ^5.74.11 - version: 5.74.11(react@19.1.0) + specifier: ^5.75.0 + version: 5.75.0(react@19.1.0) cache-manager: specifier: ^6.4.2 version: 6.4.2 @@ -265,7 +265,7 @@ importers: version: 2.1.1 cmdk: specifier: ^1.1.1 - version: 1.1.1(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) input-otp: specifier: ^1.4.2 version: 1.4.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -280,19 +280,19 @@ importers: version: 3.4.5 radix-ui: specifier: ^1.3.4 - version: 1.3.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.3.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react-scan: specifier: ^0.3.3 - version: 0.3.3(@types/react@19.1.2)(next@15.3.1(@babel/core@7.26.10)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.40.1) + version: 0.3.3(@types/react@19.1.2)(next@15.3.1(@babel/core@7.27.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.40.1) resend: - specifier: ^4.4.1 - version: 4.4.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^4.5.0 + version: 4.5.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) tailwind-merge: specifier: ^3.2.0 version: 3.2.0 vaul: specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.2(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) devDependencies: '@hono/swagger-ui': specifier: ^0.5.1 @@ -307,17 +307,17 @@ importers: specifier: ^5.0.1 version: 5.0.1(react-hook-form@7.56.1(react@19.1.0)) '@react-email/components': - specifier: 0.0.36 - version: 0.0.36(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: 0.0.37 + version: 0.0.37(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@swc/cli': - specifier: ^0.7.3 - version: 0.7.3(@swc/core@1.11.24)(chokidar@4.0.3) + specifier: 0.6.0 + version: 0.6.0(@swc/core@1.11.24)(chokidar@4.0.3) '@swc/core': specifier: ^1.11.24 version: 1.11.24 '@testing-library/react': - specifier: ^14.2.1 - version: 14.3.1(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^16.3.0 + version: 16.3.0(@testing-library/dom@9.3.4)(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@types/node': specifier: ^22.15.3 version: 22.15.3 @@ -328,14 +328,14 @@ importers: specifier: ^19.1.2 version: 19.1.2 '@types/react-dom': - specifier: ^19.1.2 - version: 19.1.2(@types/react@19.1.2) + specifier: ^19.1.3 + version: 19.1.3(@types/react@19.1.2) '@vitejs/plugin-react': - specifier: ^4.2.1 - version: 4.4.1(vite@5.4.18(@types/node@22.15.3)(lightningcss@1.29.2)) + specifier: ^4.4.1 + version: 4.4.1(vite@5.4.19(@types/node@22.15.3)(lightningcss@1.29.2)) '@vitest/coverage-v8': - specifier: ^1.2.1 - version: 1.6.1(vitest@1.6.1(@types/node@22.15.3)(jsdom@23.2.0)(lightningcss@1.29.2)) + specifier: ^3.1.2 + version: 3.1.2(vitest@3.1.2(@types/debug@4.1.12)(@types/node@22.15.3)(jsdom@26.1.0)(lightningcss@1.29.2)) chokidar: specifier: ^4.0.3 version: 4.0.3 @@ -361,17 +361,17 @@ importers: specifier: ^4.7.8 version: 4.7.8 jsdom: - specifier: ^23.2.0 - version: 23.2.0 + specifier: ^26.1.0 + version: 26.1.0 lucide-react: specifier: ^0.503.0 version: 0.503.0(react@19.1.0) next: specifier: ^15.3.1 - version: 15.3.1(@babel/core@7.26.10)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 15.3.1(@babel/core@7.27.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) next-intl: specifier: ^4.1.0 - version: 4.1.0(next@15.3.1(@babel/core@7.26.10)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + version: 4.1.0(next@15.3.1(@babel/core@7.27.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(typescript@5.8.3) react: specifier: ^19.1.0 version: 19.1.0 @@ -379,8 +379,8 @@ importers: specifier: ^19.1.0 version: 19.1.0(react@19.1.0) react-email: - specifier: ^4.0.7 - version: 4.0.7(@babel/core@7.26.10)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^4.0.11 + version: 4.0.11(@babel/core@7.27.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react-hook-form: specifier: ^7.56.1 version: 7.56.1(react@19.1.0) @@ -388,8 +388,8 @@ importers: specifier: ^2.0.3 version: 2.0.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) tailwindcss: - specifier: ^4.1.4 - version: 4.1.4 + specifier: ^4.1.5 + version: 4.1.5 tsc-alias: specifier: ^1.8.15 version: 1.8.15 @@ -403,11 +403,11 @@ importers: specifier: ^5.8.3 version: 5.8.3 vite-tsconfig-paths: - specifier: ^4.3.1 - version: 4.3.2(typescript@5.8.3)(vite@5.4.18(@types/node@22.15.3)(lightningcss@1.29.2)) + specifier: ^5.1.4 + version: 5.1.4(typescript@5.8.3)(vite@5.4.19(@types/node@22.15.3)(lightningcss@1.29.2)) vitest: - specifier: ^1.2.1 - version: 1.6.1(@types/node@22.15.3)(jsdom@23.2.0)(lightningcss@1.29.2) + specifier: ^3.1.2 + version: 3.1.2(@types/debug@4.1.12)(@types/node@22.15.3)(jsdom@26.1.0)(lightningcss@1.29.2) zod: specifier: ^3.24.3 version: 3.24.3 @@ -449,8 +449,8 @@ importers: version: 3.24.3 devDependencies: '@swc/cli': - specifier: ^0.7.3 - version: 0.7.3(@swc/core@1.11.24)(chokidar@4.0.3) + specifier: 0.6.0 + version: 0.6.0(@swc/core@1.11.24)(chokidar@4.0.3) '@swc/core': specifier: ^1.11.24 version: 1.11.24 @@ -483,9 +483,6 @@ packages: '@asamuzakjp/css-color@3.1.5': resolution: {integrity: sha512-w7AmVyTTiU41fNLsFDf+gA2Dwtbx2EJtn2pbJNAGSRAg50loXy1uLXA3hEpD8+eydcomTurw09tq5/AyceCaGg==} - '@asamuzakjp/dom-selector@2.0.2': - resolution: {integrity: sha512-x1KXOatwofR6ZAYzXRBL5wrdV0vwNxlTCK9NCuLqAzQYARqGcvFwiJA6A1ERuh+dgeA4Dxm3JBYictIes+SqUQ==} - '@asteasolutions/zod-to-openapi@7.3.0': resolution: {integrity: sha512-7tE/r1gXwMIvGnXVUdIqUhCU1RevEFC4Jk6Bussa0fk1ecbnnINkZzj1EOAJyE/M3AI25DnHT/zKQL1/FPFi8Q==} peerDependencies: @@ -498,18 +495,34 @@ packages: resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + '@babel/compat-data@7.26.8': resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.27.1': + resolution: {integrity: sha512-Q+E+rd/yBzNQhXkG+zQnF58e4zoZfBedaxwzPmicKsiK3nt8iJYrSrDbjwFFDGC4f+rPafqRaPH6TsDoSvMf7A==} + engines: {node: '>=6.9.0'} + '@babel/core@7.26.10': resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} engines: {node: '>=6.9.0'} + '@babel/core@7.27.1': + resolution: {integrity: sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==} + engines: {node: '>=6.9.0'} + '@babel/generator@7.27.0': resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==} engines: {node: '>=6.9.0'} + '@babel/generator@7.27.1': + resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.25.9': resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} engines: {node: '>=6.9.0'} @@ -518,6 +531,10 @@ packages: resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.27.1': + resolution: {integrity: sha512-2YaDd/Rd9E598B5+WIc8wJPmWETiiJXFYVE60oX8FDohv7rAUU3CQj+A1MgeEmcsk2+dQuEjIe/GDvig0SqL4g==} + engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.27.0': resolution: {integrity: sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==} engines: {node: '>=6.9.0'} @@ -532,12 +549,22 @@ packages: resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.26.0': resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.27.1': + resolution: {integrity: sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.25.9': resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} engines: {node: '>=6.9.0'} @@ -546,6 +573,10 @@ packages: resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + engines: {node: '>=6.9.0'} + '@babel/helper-replace-supers@7.26.5': resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} engines: {node: '>=6.9.0'} @@ -560,28 +591,44 @@ packages: resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.25.9': resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.25.9': resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + '@babel/helpers@7.27.0': resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==} engines: {node: '>=6.9.0'} - '@babel/parser@7.24.5': - resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} - engines: {node: '>=6.0.0'} - hasBin: true + '@babel/helpers@7.27.1': + resolution: {integrity: sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==} + engines: {node: '>=6.9.0'} '@babel/parser@7.27.0': resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==} engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.27.1': + resolution: {integrity: sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-proposal-private-methods@7.18.6': resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} @@ -595,40 +642,45 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-self@7.25.9': - resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} + '@babel/plugin-transform-react-jsx-self@7.27.1': + resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-source@7.25.9': - resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} + '@babel/plugin-transform-react-jsx-source@7.27.1': + resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.27.0': - resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} + '@babel/runtime@7.27.1': + resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==} engines: {node: '>=6.9.0'} '@babel/template@7.27.0': resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.25.6': - resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} + '@babel/template@7.27.1': + resolution: {integrity: sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.27.0': - resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} + '@babel/traverse@7.27.1': + resolution: {integrity: sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==} engines: {node: '>=6.9.0'} '@babel/types@7.27.0': resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} engines: {node: '>=6.9.0'} - '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@babel/types@7.27.1': + resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@1.0.2': + resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} + engines: {node: '>=18'} '@clack/core@0.3.5': resolution: {integrity: sha512-5cfhQNH+1VQ2xLQlmzXMqUoiaH0lRBq9/CLW9lTyMbuKLC3+xEK01tHVvyut++mLOn5urSHmkm6I0Lg9MaJSTQ==} @@ -706,12 +758,6 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.0': - resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.25.3': resolution: {integrity: sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==} engines: {node: '>=18'} @@ -736,12 +782,6 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.0': - resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.25.3': resolution: {integrity: sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==} engines: {node: '>=18'} @@ -766,12 +806,6 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.0': - resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.25.3': resolution: {integrity: sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==} engines: {node: '>=18'} @@ -796,12 +830,6 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.0': - resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.25.3': resolution: {integrity: sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==} engines: {node: '>=18'} @@ -826,12 +854,6 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.0': - resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.25.3': resolution: {integrity: sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==} engines: {node: '>=18'} @@ -856,12 +878,6 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.0': - resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.25.3': resolution: {integrity: sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==} engines: {node: '>=18'} @@ -886,12 +902,6 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.0': - resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.25.3': resolution: {integrity: sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==} engines: {node: '>=18'} @@ -916,12 +926,6 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.0': - resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.25.3': resolution: {integrity: sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==} engines: {node: '>=18'} @@ -946,12 +950,6 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.0': - resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.25.3': resolution: {integrity: sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==} engines: {node: '>=18'} @@ -976,12 +974,6 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.0': - resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.25.3': resolution: {integrity: sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==} engines: {node: '>=18'} @@ -1006,12 +998,6 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.0': - resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.25.3': resolution: {integrity: sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==} engines: {node: '>=18'} @@ -1036,12 +1022,6 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.0': - resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.25.3': resolution: {integrity: sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==} engines: {node: '>=18'} @@ -1066,12 +1046,6 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.0': - resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.25.3': resolution: {integrity: sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==} engines: {node: '>=18'} @@ -1096,12 +1070,6 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.25.0': - resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.25.3': resolution: {integrity: sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==} engines: {node: '>=18'} @@ -1126,12 +1094,6 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.0': - resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.25.3': resolution: {integrity: sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==} engines: {node: '>=18'} @@ -1156,12 +1118,6 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.0': - resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.25.3': resolution: {integrity: sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==} engines: {node: '>=18'} @@ -1186,12 +1142,6 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.0': - resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.25.3': resolution: {integrity: sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==} engines: {node: '>=18'} @@ -1204,12 +1154,6 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.25.0': - resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-arm64@0.25.3': resolution: {integrity: sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==} engines: {node: '>=18'} @@ -1234,12 +1178,6 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.0': - resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.25.3': resolution: {integrity: sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==} engines: {node: '>=18'} @@ -1252,12 +1190,6 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.25.0': - resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-arm64@0.25.3': resolution: {integrity: sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==} engines: {node: '>=18'} @@ -1282,12 +1214,6 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.0': - resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.25.3': resolution: {integrity: sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==} engines: {node: '>=18'} @@ -1312,12 +1238,6 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.0': - resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.25.3': resolution: {integrity: sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==} engines: {node: '>=18'} @@ -1342,12 +1262,6 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.0': - resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.25.3': resolution: {integrity: sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==} engines: {node: '>=18'} @@ -1372,12 +1286,6 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.0': - resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.25.3': resolution: {integrity: sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==} engines: {node: '>=18'} @@ -1402,12 +1310,6 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.0': - resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.25.3': resolution: {integrity: sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==} engines: {node: '>=18'} @@ -1428,8 +1330,8 @@ packages: resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.2.1': - resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==} + '@eslint/config-helpers@0.2.2': + resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/core@0.13.0': @@ -1534,65 +1436,33 @@ packages: resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} engines: {node: '>=18.18'} - '@img/sharp-darwin-arm64@0.33.5': - resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [darwin] - '@img/sharp-darwin-arm64@0.34.1': resolution: {integrity: sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.33.5': - resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [darwin] - '@img/sharp-darwin-x64@0.34.1': resolution: {integrity: sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.0.4': - resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} - cpu: [arm64] - os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.1.0': resolution: {integrity: sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.0.4': - resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} - cpu: [x64] - os: [darwin] - '@img/sharp-libvips-darwin-x64@1.1.0': resolution: {integrity: sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.0.4': - resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} - cpu: [arm64] - os: [linux] - '@img/sharp-libvips-linux-arm64@1.1.0': resolution: {integrity: sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linux-arm@1.0.5': - resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} - cpu: [arm] - os: [linux] - '@img/sharp-libvips-linux-arm@1.1.0': resolution: {integrity: sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==} cpu: [arm] @@ -1603,146 +1473,73 @@ packages: cpu: [ppc64] os: [linux] - '@img/sharp-libvips-linux-s390x@1.0.4': - resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} - cpu: [s390x] - os: [linux] - '@img/sharp-libvips-linux-s390x@1.1.0': resolution: {integrity: sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==} cpu: [s390x] os: [linux] - '@img/sharp-libvips-linux-x64@1.0.4': - resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} - cpu: [x64] - os: [linux] - '@img/sharp-libvips-linux-x64@1.1.0': resolution: {integrity: sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==} cpu: [x64] os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} - cpu: [arm64] - os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.1.0': resolution: {integrity: sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} - cpu: [x64] - os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.1.0': resolution: {integrity: sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==} cpu: [x64] os: [linux] - '@img/sharp-linux-arm64@0.33.5': - resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - '@img/sharp-linux-arm64@0.34.1': resolution: {integrity: sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linux-arm@0.33.5': - resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm] - os: [linux] - '@img/sharp-linux-arm@0.34.1': resolution: {integrity: sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - '@img/sharp-linux-s390x@0.33.5': - resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [s390x] - os: [linux] - '@img/sharp-linux-s390x@0.34.1': resolution: {integrity: sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - '@img/sharp-linux-x64@0.33.5': - resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - '@img/sharp-linux-x64@0.34.1': resolution: {integrity: sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.33.5': - resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - '@img/sharp-linuxmusl-arm64@0.34.1': resolution: {integrity: sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-x64@0.33.5': - resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - '@img/sharp-linuxmusl-x64@0.34.1': resolution: {integrity: sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-wasm32@0.33.5': - resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [wasm32] - '@img/sharp-wasm32@0.34.1': resolution: {integrity: sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-win32-ia32@0.33.5': - resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ia32] - os: [win32] - '@img/sharp-win32-ia32@0.34.1': resolution: {integrity: sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.33.5': - resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [win32] - '@img/sharp-win32-x64@0.34.1': resolution: {integrity: sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -1878,10 +1675,6 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jridgewell/gen-mapping@0.3.8': resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} @@ -2009,102 +1802,51 @@ packages: '@neondatabase/serverless@0.10.4': resolution: {integrity: sha512-2nZuh3VUO9voBauuh+IGYRhGU/MskWHt1IuZvHcJw6GLjDgtqj/KViKo7SIrLdGLdot7vFbiRRw+BgEy3wT9HA==} - '@next/env@15.2.4': - resolution: {integrity: sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g==} - '@next/env@15.3.1': resolution: {integrity: sha512-cwK27QdzrMblHSn9DZRV+DQscHXRuJv6MydlJRpFSqJWZrTYMLzKDeyueJNN9MGd8NNiUKzDQADAf+dMLXX7YQ==} - '@next/swc-darwin-arm64@15.2.4': - resolution: {integrity: sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - '@next/swc-darwin-arm64@15.3.1': resolution: {integrity: sha512-hjDw4f4/nla+6wysBL07z52Gs55Gttp5Bsk5/8AncQLJoisvTBP0pRIBK/B16/KqQyH+uN4Ww8KkcAqJODYH3w==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.2.4': - resolution: {integrity: sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - '@next/swc-darwin-x64@15.3.1': resolution: {integrity: sha512-q+aw+cJ2ooVYdCEqZVk+T4Ni10jF6Fo5DfpEV51OupMaV5XL6pf3GCzrk6kSSZBsMKZtVC1Zm/xaNBFpA6bJ2g==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.2.4': - resolution: {integrity: sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - '@next/swc-linux-arm64-gnu@15.3.1': resolution: {integrity: sha512-wBQ+jGUI3N0QZyWmmvRHjXjTWFy8o+zPFLSOyAyGFI94oJi+kK/LIZFJXeykvgXUk1NLDAEFDZw/NVINhdk9FQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.2.4': - resolution: {integrity: sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - '@next/swc-linux-arm64-musl@15.3.1': resolution: {integrity: sha512-IIxXEXRti/AulO9lWRHiCpUUR8AR/ZYLPALgiIg/9ENzMzLn3l0NSxVdva7R/VDcuSEBo0eGVCe3evSIHNz0Hg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.2.4': - resolution: {integrity: sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - '@next/swc-linux-x64-gnu@15.3.1': resolution: {integrity: sha512-bfI4AMhySJbyXQIKH5rmLJ5/BP7bPwuxauTvVEiJ/ADoddaA9fgyNNCcsbu9SlqfHDoZmfI6g2EjzLwbsVTr5A==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.2.4': - resolution: {integrity: sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - '@next/swc-linux-x64-musl@15.3.1': resolution: {integrity: sha512-FeAbR7FYMWR+Z+M5iSGytVryKHiAsc0x3Nc3J+FD5NVbD5Mqz7fTSy8CYliXinn7T26nDMbpExRUI/4ekTvoiA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.2.4': - resolution: {integrity: sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - '@next/swc-win32-arm64-msvc@15.3.1': resolution: {integrity: sha512-yP7FueWjphQEPpJQ2oKmshk/ppOt+0/bB8JC8svPUZNy0Pi3KbPx2Llkzv1p8CoQa+D2wknINlJpHf3vtChVBw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.2.4': - resolution: {integrity: sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - '@next/swc-win32-x64-msvc@15.3.1': resolution: {integrity: sha512-3PMvF2zRJAifcRNni9uMk/gulWfWS+qVI/pagd+4yLF5bcXPZPPH2xlYRYOsUjmCJOXSTAC2PjRzbhsRzR2fDQ==} engines: {node: '>= 10'} @@ -2855,6 +2597,12 @@ packages: peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc + '@react-email/code-block@0.0.13': + resolution: {integrity: sha512-4DE4yPSgKEOnZMzcrDvRuD6mxsNxOex0hCYEG9F9q23geYgb2WCCeGBvIUXVzK69l703Dg4Vzrd5qUjl+JfcwA==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + '@react-email/code-inline@0.0.5': resolution: {integrity: sha512-MmAsOzdJpzsnY2cZoPHFPk6uDO/Ncpb4Kh1hAt9UZc1xOW3fIzpe1Pi9y9p6wwUmpaeeDalJxAxH6/fnTquinA==} engines: {node: '>=18.0.0'} @@ -2873,6 +2621,12 @@ packages: peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc + '@react-email/components@0.0.37': + resolution: {integrity: sha512-M4MKALwezAf9uVMQHsR6k/MvfQ9H3xyrOppGfOiznPnjcv+/7oWiHERzL7Ani5nrCsc+fhc70zybpwtVQ/NSHQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + '@react-email/container@0.0.15': resolution: {integrity: sha512-Qo2IQo0ru2kZq47REmHW3iXjAQaKu4tpeq/M8m1zHIVwKduL2vYOBQWbC2oDnMtWPmkBjej6XxgtZByxM6cCFg==} engines: {node: '>=18.0.0'} @@ -2926,6 +2680,12 @@ packages: peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc + '@react-email/markdown@0.0.15': + resolution: {integrity: sha512-UQA9pVm5sbflgtg3EX3FquUP4aMBzmLReLbGJ6DZQZnAskBF36aI56cRykDq1o+1jT+CKIK1CducPYziaXliag==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + '@react-email/preview@0.0.12': resolution: {integrity: sha512-g/H5fa9PQPDK6WUEG7iTlC19sAktI23qyoiJtMLqQiXFCfWeQMhqjLGKeLSKkfzszqmfJCjZtpSiKtBoOdxp3Q==} engines: {node: '>=18.0.0'} @@ -2939,6 +2699,13 @@ packages: react: ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^18.0 || ^19.0 || ^19.0.0-rc + '@react-email/render@1.1.0': + resolution: {integrity: sha512-X4CsHvXi5X7kTn5NgXNGg8Y5U1VtVJmlpNLlTc2E8RVHKFS3bpr+o/ZXhEPN4yRkdY+ZYN5eqVTV922Hujqsxw==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^18.0 || ^19.0 || ^19.0.0-rc + '@react-email/row@0.0.12': resolution: {integrity: sha512-HkCdnEjvK3o+n0y0tZKXYhIXUNPDx+2vq1dJTmqappVHXS5tXS6W5JOPZr5j+eoZ8gY3PShI2LWj5rWF7ZEtIQ==} engines: {node: '>=18.0.0'} @@ -2957,12 +2724,24 @@ packages: peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc + '@react-email/tailwind@1.0.5': + resolution: {integrity: sha512-BH00cZSeFfP9HiDASl+sPHi7Hh77W5nzDgdnxtsVr/m3uQD9g180UwxcE3PhOfx0vRdLzQUU8PtmvvDfbztKQg==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + '@react-email/text@0.1.1': resolution: {integrity: sha512-Zo9tSEzkO3fODLVH1yVhzVCiwETfeEL5wU93jXKWo2DHoMuiZ9Iabaso3T0D0UjhrCB1PBMeq2YiejqeToTyIQ==} engines: {node: '>=18.0.0'} peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc + '@react-email/text@0.1.2': + resolution: {integrity: sha512-B5xDDBxgYpu/j7K4PSXuGmXgEvTheMyvnVXf/Md2u9dhvBHq65CPvSqYxDM1vjDjKd39GQEI7dqT2QIjER2DGA==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + '@rollup/pluginutils@5.1.4': resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} engines: {node: '>=14.0.0'} @@ -3108,9 +2887,6 @@ packages: '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - '@sindresorhus/is@5.6.0': resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} engines: {node: '>=14.16'} @@ -3124,8 +2900,8 @@ packages: '@standard-schema/utils@0.3.0': resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} - '@swc/cli@0.7.3': - resolution: {integrity: sha512-rnVXNnlURjdOuPaBIwZ3TmBA44BF/eP0j154LanlgPEYfau74ige7cpKlKkZr1IBqMOG99lAnYNxQipDWA3hdg==} + '@swc/cli@0.6.0': + resolution: {integrity: sha512-Q5FsI3Cw0fGMXhmsg7c08i4EmXCrcl+WnAxb6LYOLHw4JFFC3yzmx9LaXZ7QMbA+JZXbigU2TirI7RAfO0Qlnw==} engines: {node: '>= 16.14.0'} hasBin: true peerDependencies: @@ -3217,65 +2993,65 @@ packages: resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} - '@tailwindcss/node@4.1.4': - resolution: {integrity: sha512-MT5118zaiO6x6hNA04OWInuAiP1YISXql8Z+/Y8iisV5nuhM8VXlyhRuqc2PEviPszcXI66W44bCIk500Oolhw==} + '@tailwindcss/node@4.1.5': + resolution: {integrity: sha512-CBhSWo0vLnWhXIvpD0qsPephiaUYfHUX3U9anwDaHZAeuGpTiB3XmsxPAN6qX7bFhipyGBqOa1QYQVVhkOUGxg==} - '@tailwindcss/oxide-android-arm64@4.1.4': - resolution: {integrity: sha512-xMMAe/SaCN/vHfQYui3fqaBDEXMu22BVwQ33veLc8ep+DNy7CWN52L+TTG9y1K397w9nkzv+Mw+mZWISiqhmlA==} + '@tailwindcss/oxide-android-arm64@4.1.5': + resolution: {integrity: sha512-LVvM0GirXHED02j7hSECm8l9GGJ1RfgpWCW+DRn5TvSaxVsv28gRtoL4aWKGnXqwvI3zu1GABeDNDVZeDPOQrw==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.1.4': - resolution: {integrity: sha512-JGRj0SYFuDuAGilWFBlshcexev2hOKfNkoX+0QTksKYq2zgF9VY/vVMq9m8IObYnLna0Xlg+ytCi2FN2rOL0Sg==} + '@tailwindcss/oxide-darwin-arm64@4.1.5': + resolution: {integrity: sha512-//TfCA3pNrgnw4rRJOqavW7XUk8gsg9ddi8cwcsWXp99tzdBAZW0WXrD8wDyNbqjW316Pk2hiN/NJx/KWHl8oA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.1.4': - resolution: {integrity: sha512-sdDeLNvs3cYeWsEJ4H1DvjOzaGios4QbBTNLVLVs0XQ0V95bffT3+scptzYGPMjm7xv4+qMhCDrkHwhnUySEzA==} + '@tailwindcss/oxide-darwin-x64@4.1.5': + resolution: {integrity: sha512-XQorp3Q6/WzRd9OalgHgaqgEbjP3qjHrlSUb5k1EuS1Z9NE9+BbzSORraO+ecW432cbCN7RVGGL/lSnHxcd+7Q==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.1.4': - resolution: {integrity: sha512-VHxAqxqdghM83HslPhRsNhHo91McsxRJaEnShJOMu8mHmEj9Ig7ToHJtDukkuLWLzLboh2XSjq/0zO6wgvykNA==} + '@tailwindcss/oxide-freebsd-x64@4.1.5': + resolution: {integrity: sha512-bPrLWbxo8gAo97ZmrCbOdtlz/Dkuy8NK97aFbVpkJ2nJ2Jo/rsCbu0TlGx8joCuA3q6vMWTSn01JY46iwG+clg==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.4': - resolution: {integrity: sha512-OTU/m/eV4gQKxy9r5acuesqaymyeSCnsx1cFto/I1WhPmi5HDxX1nkzb8KYBiwkHIGg7CTfo/AcGzoXAJBxLfg==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.5': + resolution: {integrity: sha512-1gtQJY9JzMAhgAfvd/ZaVOjh/Ju/nCoAsvOVJenWZfs05wb8zq+GOTnZALWGqKIYEtyNpCzvMk+ocGpxwdvaVg==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.1.4': - resolution: {integrity: sha512-hKlLNvbmUC6z5g/J4H+Zx7f7w15whSVImokLPmP6ff1QqTVE+TxUM9PGuNsjHvkvlHUtGTdDnOvGNSEUiXI1Ww==} + '@tailwindcss/oxide-linux-arm64-gnu@4.1.5': + resolution: {integrity: sha512-dtlaHU2v7MtdxBXoqhxwsWjav7oim7Whc6S9wq/i/uUMTWAzq/gijq1InSgn2yTnh43kR+SFvcSyEF0GCNu1PQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-arm64-musl@4.1.4': - resolution: {integrity: sha512-X3As2xhtgPTY/m5edUtddmZ8rCruvBvtxYLMw9OsZdH01L2gS2icsHRwxdU0dMItNfVmrBezueXZCHxVeeb7Aw==} + '@tailwindcss/oxide-linux-arm64-musl@4.1.5': + resolution: {integrity: sha512-fg0F6nAeYcJ3CriqDT1iVrqALMwD37+sLzXs8Rjy8Z1ZHshJoYceodfyUwGJEsQoTyWbliFNRs2wMQNXtT7MVA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-x64-gnu@4.1.4': - resolution: {integrity: sha512-2VG4DqhGaDSmYIu6C4ua2vSLXnJsb/C9liej7TuSO04NK+JJJgJucDUgmX6sn7Gw3Cs5ZJ9ZLrnI0QRDOjLfNQ==} + '@tailwindcss/oxide-linux-x64-gnu@4.1.5': + resolution: {integrity: sha512-SO+F2YEIAHa1AITwc8oPwMOWhgorPzzcbhWEb+4oLi953h45FklDmM8dPSZ7hNHpIk9p/SCZKUYn35t5fjGtHA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-linux-x64-musl@4.1.4': - resolution: {integrity: sha512-v+mxVgH2kmur/X5Mdrz9m7TsoVjbdYQT0b4Z+dr+I4RvreCNXyCFELZL/DO0M1RsidZTrm6O1eMnV6zlgEzTMQ==} + '@tailwindcss/oxide-linux-x64-musl@4.1.5': + resolution: {integrity: sha512-6UbBBplywkk/R+PqqioskUeXfKcBht3KU7juTi1UszJLx0KPXUo10v2Ok04iBJIaDPkIFkUOVboXms5Yxvaz+g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-wasm32-wasi@4.1.4': - resolution: {integrity: sha512-2TLe9ir+9esCf6Wm+lLWTMbgklIjiF0pbmDnwmhR9MksVOq+e8aP3TSsXySnBDDvTTVd/vKu1aNttEGj3P6l8Q==} + '@tailwindcss/oxide-wasm32-wasi@4.1.5': + resolution: {integrity: sha512-hwALf2K9FHuiXTPqmo1KeOb83fTRNbe9r/Ixv9ZNQ/R24yw8Ge1HOWDDgTdtzntIaIUJG5dfXCf4g9AD4RiyhQ==} engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: @@ -3286,30 +3062,30 @@ packages: - '@emnapi/wasi-threads' - tslib - '@tailwindcss/oxide-win32-arm64-msvc@4.1.4': - resolution: {integrity: sha512-VlnhfilPlO0ltxW9/BgfLI5547PYzqBMPIzRrk4W7uupgCt8z6Trw/tAj6QUtF2om+1MH281Pg+HHUJoLesmng==} + '@tailwindcss/oxide-win32-arm64-msvc@4.1.5': + resolution: {integrity: sha512-oDKncffWzaovJbkuR7/OTNFRJQVdiw/n8HnzaCItrNQUeQgjy7oUiYpsm9HUBgpmvmDpSSbGaCa2Evzvk3eFmA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.1.4': - resolution: {integrity: sha512-+7S63t5zhYjslUGb8NcgLpFXD+Kq1F/zt5Xv5qTv7HaFTG/DHyHD9GA6ieNAxhgyA4IcKa/zy7Xx4Oad2/wuhw==} + '@tailwindcss/oxide-win32-x64-msvc@4.1.5': + resolution: {integrity: sha512-WiR4dtyrFdbb+ov0LK+7XsFOsG+0xs0PKZKkt41KDn9jYpO7baE3bXiudPVkTqUEwNfiglCygQHl2jklvSBi7Q==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.1.4': - resolution: {integrity: sha512-p5wOpXyOJx7mKh5MXh5oKk+kqcz8T+bA3z/5VWWeQwFrmuBItGwz8Y2CHk/sJ+dNb9B0nYFfn0rj/cKHZyjahQ==} + '@tailwindcss/oxide@4.1.5': + resolution: {integrity: sha512-1n4br1znquEvyW/QuqMKQZlBen+jxAbvyduU87RS8R3tUSvByAkcaMTkJepNIrTlYhD+U25K4iiCIxE6BGdRYA==} engines: {node: '>= 10'} - '@tailwindcss/postcss@4.1.4': - resolution: {integrity: sha512-bjV6sqycCEa+AQSt2Kr7wpGF1bOZJ5wsqnLEkqSbM/JEHxx/yhMH8wHmdkPyApF9xhHeMSwnnkDUUMMM/hYnXw==} + '@tailwindcss/postcss@4.1.5': + resolution: {integrity: sha512-5lAC2/pzuyfhsFgk6I58HcNy6vPK3dV/PoPxSDuOTVbDvCddYHzHiJZZInGIY0venvzzfrTEUAXJFULAfFmObg==} - '@tanstack/query-core@5.74.9': - resolution: {integrity: sha512-qmjXpWyigDw4SfqdSBy24FzRvpBPXlaSbl92N77lcrL+yvVQLQkf0T6bQNbTxl9IEB/SvVFhhVZoIlQvFnNuuw==} + '@tanstack/query-core@5.75.0': + resolution: {integrity: sha512-rk8KQuCdhoRkzjRVF3QxLgAfFUyS0k7+GCQjlGEpEGco+qazJ0eMH6aO1DjDjibH7/ik383nnztua3BG+lOnwg==} - '@tanstack/react-query@5.74.11': - resolution: {integrity: sha512-FFhn9ZiYRUOsxLAWZYxVfQTpVE7UWRaAeHJIWVDHKlmZZGc16rMHW9KrFZ8peC4hA71QUf/shJD8dPSMqDnRmA==} + '@tanstack/react-query@5.75.0': + resolution: {integrity: sha512-H+TNgxmTbzH8qQ5MT5xsZEhQ8BG1tUYduDSfeAOzroVZgd/AEjg1rRYSP/9Tl9/hPobZ7iZzV401n77kStrbKw==} peerDependencies: react: ^18 || ^19 @@ -3317,12 +3093,20 @@ packages: resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} engines: {node: '>=14'} - '@testing-library/react@14.3.1': - resolution: {integrity: sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ==} - engines: {node: '>=14'} + '@testing-library/react@16.3.0': + resolution: {integrity: sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==} + engines: {node: '>=18'} peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 + '@testing-library/dom': ^10.0.0 + '@types/react': ^18.0.0 || ^19.0.0 + '@types/react-dom': ^18.0.0 || ^19.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} @@ -3393,13 +3177,8 @@ packages: '@types/prompts@2.4.9': resolution: {integrity: sha512-qTxFi6Buiu8+50/+3DGIWLHM6QuWsEKugJnnP6iv2Mc4ncxE4A/OJkjuVOA+5X0X1S/nq5VJRa8Lu+nwcvbrKA==} - '@types/react-dom@18.3.6': - resolution: {integrity: sha512-nf22//wEbKXusP6E9pfOCDwFdHAX4u172eaJI4YkDRQEZiorm6KfYnSC2SWLDMVWUOWPERmJnN0ujeAfTBLvrw==} - peerDependencies: - '@types/react': ^18.0.0 - - '@types/react-dom@19.1.2': - resolution: {integrity: sha512-XGJkWF41Qq305SKWEILa1O8vzhb3aOo3ogBlSmiqNko/WmRb6QIaweuZCXjKygVDXpzXb5wyxKTSOsmkuqj+Qw==} + '@types/react-dom@19.1.3': + resolution: {integrity: sha512-rJXC08OG0h3W6wDMFxQrZF00Kq6qQvw0djHRdzl3U5DnIERz0MRce3WVc7IS6JYBwtaP/DwYtRRjVlvivNveKg==} peerDependencies: '@types/react': ^19.0.0 @@ -3473,25 +3252,43 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 - '@vitest/coverage-v8@1.6.1': - resolution: {integrity: sha512-6YeRZwuO4oTGKxD3bijok756oktHSIm3eczVVzNe3scqzuhLwltIF3S9ZL/vwOVIpURmU6SnZhziXXAfw8/Qlw==} + '@vitest/coverage-v8@3.1.2': + resolution: {integrity: sha512-XDdaDOeaTMAMYW7N63AqoK32sYUWbXnTkC6tEbVcu3RlU1bB9of32T+PGf8KZvxqLNqeXhafDFqCkwpf2+dyaQ==} peerDependencies: - vitest: 1.6.1 + '@vitest/browser': 3.1.2 + vitest: 3.1.2 + peerDependenciesMeta: + '@vitest/browser': + optional: true - '@vitest/expect@1.6.1': - resolution: {integrity: sha512-jXL+9+ZNIJKruofqXuuTClf44eSpcHlgj3CiuNihUF3Ioujtmc0zIa3UJOW5RjDK1YLBJZnWBlPuqhYycLioog==} + '@vitest/expect@3.1.2': + resolution: {integrity: sha512-O8hJgr+zREopCAqWl3uCVaOdqJwZ9qaDwUP7vy3Xigad0phZe9APxKhPcDNqYYi0rX5oMvwJMSCAXY2afqeTSA==} - '@vitest/runner@1.6.1': - resolution: {integrity: sha512-3nSnYXkVkf3mXFfE7vVyPmi3Sazhb/2cfZGGs0JRzFsPFvAMBEcrweV1V1GsrstdXeKCTXlJbvnQwGWgEIHmOA==} + '@vitest/mocker@3.1.2': + resolution: {integrity: sha512-kOtd6K2lc7SQ0mBqYv/wdGedlqPdM/B38paPY+OwJ1XiNi44w3Fpog82UfOibmHaV9Wod18A09I9SCKLyDMqgw==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true - '@vitest/snapshot@1.6.1': - resolution: {integrity: sha512-WvidQuWAzU2p95u8GAKlRMqMyN1yOJkGHnx3M1PL9Raf7AQ1kwLKg04ADlCa3+OXUZE7BceOhVZiuWAbzCKcUQ==} + '@vitest/pretty-format@3.1.2': + resolution: {integrity: sha512-R0xAiHuWeDjTSB3kQ3OQpT8Rx3yhdOAIm/JM4axXxnG7Q/fS8XUwggv/A4xzbQA+drYRjzkMnpYnOGAc4oeq8w==} - '@vitest/spy@1.6.1': - resolution: {integrity: sha512-MGcMmpGkZebsMZhbQKkAf9CX5zGvjkBTqf8Zx3ApYWXr3wG+QvEu2eXWfnIIWYSJExIp4V9FCKDEeygzkYrXMw==} + '@vitest/runner@3.1.2': + resolution: {integrity: sha512-bhLib9l4xb4sUMPXnThbnhX2Yi8OutBMA8Yahxa7yavQsFDtwY/jrUZwpKp2XH9DhRFJIeytlyGpXCqZ65nR+g==} - '@vitest/utils@1.6.1': - resolution: {integrity: sha512-jOrrUvXM4Av9ZWiG1EajNto0u96kWAhJ1LmPmJhXXQx/32MecEKd10pOLYgS2BQx1TgkGhloPU1ArDW2vvaY6g==} + '@vitest/snapshot@3.1.2': + resolution: {integrity: sha512-Q1qkpazSF/p4ApZg1vfZSQ5Yw6OCQxVMVrLjslbLFA1hMDrT2uxtqMaw8Tc/jy5DLka1sNs1Y7rBcftMiaSH/Q==} + + '@vitest/spy@3.1.2': + resolution: {integrity: sha512-OEc5fSXMws6sHVe4kOFyDSj/+4MSwst0ib4un0DlcYgQvRuYQ0+M2HyqGaauUMnjq87tmUaMNDxKQx7wNfVqPA==} + + '@vitest/utils@3.1.2': + resolution: {integrity: sha512-5GGd0ytZ7BH3H6JTj9Kw7Prn1Nbg0wZVrIvou+UWxm54d+WoXXgAgjFJ8wn3LdagWLFSEfpPeyYrByZaGEZHLg==} '@xhmikosr/archive-type@7.0.0': resolution: {integrity: sha512-sIm84ZneCOJuiy3PpWR5bxkx3HaNt1pqaN+vncUBZIlPZCq8ASZH+hBVdu5H8znR7qYC6sKwx+ie2Q7qztJTxA==} @@ -3542,10 +3339,6 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} - acorn@8.14.1: resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} engines: {node: '>=0.4.0'} @@ -3641,8 +3434,9 @@ packages: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} - assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} @@ -3655,9 +3449,6 @@ packages: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -3692,9 +3483,6 @@ packages: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} - bidi-js@1.0.3: - resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} - bin-version-check@5.1.0: resolution: {integrity: sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g==} engines: {node: '>=12'} @@ -3712,9 +3500,6 @@ packages: peerDependencies: react: '>=17.0.1' - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -3783,15 +3568,15 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001715: - resolution: {integrity: sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw==} + caniuse-lite@1.0.30001716: + resolution: {integrity: sha512-49/c1+x3Kwz7ZIWt+4DvK3aMJy9oYXXG6/97JKsnjdCk/6n9vVyWL8NAwVt95Lwt9eigI10Hl782kDfZUUlRXw==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chai@4.5.0: - resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} - engines: {node: '>=4'} + chai@5.2.0: + resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} + engines: {node: '>=12'} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -3816,8 +3601,9 @@ packages: chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} @@ -3830,10 +3616,6 @@ packages: class-variance-authority@0.7.1: resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -3853,10 +3635,6 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} @@ -3884,17 +3662,9 @@ packages: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - commander@11.1.0: - resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} - engines: {node: '>=16'} - commander@13.1.0: resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} engines: {node: '>=18'} @@ -3926,9 +3696,6 @@ packages: engines: {node: '>=18'} hasBin: true - confbox@0.1.8: - resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - consola@3.4.2: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} @@ -3952,10 +3719,6 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - css-tree@2.3.1: - resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -3987,8 +3750,8 @@ packages: resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} - debounce@2.0.0: - resolution: {integrity: sha512-xRetU6gL1VJbs85Mc4FoEGSjQxzpdxRyFhe3lmWFyy2EzydIcD4xzUvRJMD+NPDfMwKNhxa3PvsIOU32luIWeA==} + debounce@2.2.0: + resolution: {integrity: sha512-Xks6RUDLZFdz8LIdR6q0MTH44k7FikOmnh5xkSjMig6ch45afc8sjTjRQf3P6ax8dMgcQrYO/AR2RGWURrruqw==} engines: {node: '>=18'} debug@4.3.7: @@ -4019,8 +3782,8 @@ packages: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} - deep-eql@4.1.4: - resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} deep-equal@2.2.3: @@ -4034,9 +3797,6 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - defaults@3.0.0: resolution: {integrity: sha512-RsqXDEAALjfRTro+IFNKpcPCt0/Cy2FqHSIlnomiJp9YGadpQnrtbRpSgN2+np21qHcIKiva4fiOQGjS9/qR/A==} engines: {node: '>=18'} @@ -4053,10 +3813,6 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -4071,10 +3827,6 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -4203,8 +3955,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.144: - resolution: {integrity: sha512-eJIaMRKeAzxfBSxtjYnoIAw/tdD6VIH6tHBZepZnAbE3Gyqqs5mGN87DvcldPUbVkIljTK8pY0CMcUljP64lfQ==} + electron-to-chromium@1.5.148: + resolution: {integrity: sha512-8uc1QXwwqayD4mblcsQYZqoi+cOc97A2XmKSBOIRbEAvbp6vrqmSYs4dHD2qVygUgn7Mi0qdKgPaJ9WC8cv63A==} emoji-regex@10.4.0: resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} @@ -4258,6 +4010,9 @@ packages: resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} engines: {node: '>= 0.4'} + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -4300,11 +4055,6 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.25.0: - resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} - engines: {node: '>=18'} - hasBin: true - esbuild@0.25.3: resolution: {integrity: sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==} engines: {node: '>=18'} @@ -4450,9 +4200,9 @@ packages: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} - execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} + expect-type@1.2.1: + resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} + engines: {node: '>=12.0.0'} ext-list@2.2.2: resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} @@ -4553,12 +4303,8 @@ packages: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} engines: {node: '>= 14.17'} - form-data@4.0.2: - resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} - engines: {node: '>= 6'} - - framer-motion@12.9.2: - resolution: {integrity: sha512-R0O3Jdqbfwywpm45obP+8sTgafmdEcUoShQTAV+rB5pi+Y1Px/FYL5qLLRe5tPtBdN1J4jos7M+xN2VV2oEAbQ==} + framer-motion@12.9.4: + resolution: {integrity: sha512-yaeGDmGQ3eCQEwZ95/pRQMaSh/Q4E2CK6JYOclG/PdjyQad0MULJ+JFVV8911Fl5a6tF6o0wgW8Dpl5Qx4Adjg==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 || ^19.0.0 @@ -4571,9 +4317,6 @@ packages: react-dom: optional: true - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -4653,9 +4396,6 @@ packages: resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} engines: {node: '>=18'} - get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -4672,10 +4412,6 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - get-stream@9.0.1: resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} engines: {node: '>=18'} @@ -4698,18 +4434,14 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@10.3.4: - resolution: {integrity: sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + glob@11.0.2: + resolution: {integrity: sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==} + engines: {node: 20 || >=22} + hasBin: true globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} @@ -4836,10 +4568,6 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -4868,13 +4596,6 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - 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. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - inline-style-parser@0.2.4: resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} @@ -4973,10 +4694,6 @@ packages: is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - is-interactive@2.0.0: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} @@ -5020,10 +4737,6 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-stream@4.0.1: resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} engines: {node: '>=18'} @@ -5040,10 +4753,6 @@ packages: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - is-unicode-supported@1.3.0: resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} engines: {node: '>=12'} @@ -5094,13 +4803,13 @@ packages: resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} engines: {node: '>= 0.4'} - jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} - jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jackspeak@4.1.0: + resolution: {integrity: sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==} + engines: {node: 20 || >=22} + jiti@2.4.2: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true @@ -5112,9 +4821,6 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true @@ -5123,11 +4829,11 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsdom@23.2.0: - resolution: {integrity: sha512-L88oL7D/8ufIES+Zjz7v0aes+oBMh2Xnh3ygWvL0OaICOomKEPKuPnIfBJekiXr+BHbbMjrWn/xqrDQuxFTeyA==} + jsdom@26.1.0: + resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==} engines: {node: '>=18'} peerDependencies: - canvas: ^2.11.2 + canvas: ^3.0.0 peerDependenciesMeta: canvas: optional: true @@ -5262,10 +4968,6 @@ packages: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - local-pkg@0.5.1: - resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} - engines: {node: '>=14'} - locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -5279,14 +4981,14 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - log-symbols@6.0.0: resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} engines: {node: '>=18'} + log-symbols@7.0.0: + resolution: {integrity: sha512-zrc91EDk2M+2AXo/9BTvK91pqb7qrPg2nX/Hy+u8a5qQlbaOflCKO+6SqgZ+M+xUFxGdKTgwnGiL96b1W3ikRA==} + engines: {node: '>=18'} + longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -5294,8 +4996,8 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@2.3.7: - resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + loupe@3.1.3: + resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} lowercase-keys@3.0.0: resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} @@ -5399,9 +5101,6 @@ packages: mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} - mdn-data@2.0.30: - resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -5530,14 +5229,14 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mime-types@3.0.1: + resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} + engines: {node: '>= 0.6'} + mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - mimic-function@5.0.1: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} @@ -5550,6 +5249,10 @@ packages: resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -5561,17 +5264,14 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - mlly@1.7.4: - resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} - - motion-dom@12.9.1: - resolution: {integrity: sha512-xqXEwRLDYDTzOgXobSoWtytRtGlf7zdkRfFbrrdP7eojaGQZ5Go4OOKtgnx7uF8sAkfr1ZjMvbCJSCIT2h6fkQ==} + motion-dom@12.9.4: + resolution: {integrity: sha512-25TWkQPj5I18m+qVjXGtCsxboY11DaRC5HMjd29tHKExazW4Zf4XtAagBdLpyKsVuAxEQ6cx5/E4AB21PFpLnQ==} - motion-utils@12.8.3: - resolution: {integrity: sha512-GYVauZEbca8/zOhEiYOY9/uJeedYQld6co/GJFKOy//0c/4lDqk0zB549sBYqqV2iMuX+uHrY1E5zd8A2L+1Lw==} + motion-utils@12.9.4: + resolution: {integrity: sha512-BW3I65zeM76CMsfh3kHid9ansEJk9Qvl+K5cu4DVHKGsI52n76OJ4z2CUJUV+Mn3uEP9k1JJA3tClG0ggSrRcg==} - motion@12.9.2: - resolution: {integrity: sha512-2hwi4wlOpt/zDHcDZATL2FFhYgj2n6t5Hd0UT91swMup6dx6KpFRkTydYJkkV0PUImT1QfC+WT5d0eRekTKpcg==} + motion@12.9.4: + resolution: {integrity: sha512-ZMKNnhWylaIbtFmU+scDxdldk//3Rn/8B+dcDhIpGlixAl7yhiLx1WXyGD4TSJZf3sDU6yrnu3L3FWGFo4fTEQ==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 || ^19.0.0 @@ -5638,27 +5338,6 @@ packages: react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - next@15.2.4: - resolution: {integrity: sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ==} - engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.41.2 - babel-plugin-react-compiler: '*' - react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - '@playwright/test': - optional: true - babel-plugin-react-compiler: - optional: true - sass: - optional: true - next@15.3.1: resolution: {integrity: sha512-8+dDV0xNLOgHlyBxP1GwHGVaNXsmp+2NhZEYrXr24GWLHtt27YrBPbPuHvzlhi7kZNYjeJNR93IF5zfFu5UL0g==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} @@ -5699,9 +5378,8 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} - npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + nwsapi@2.2.20: + resolution: {integrity: sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==} object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} @@ -5738,17 +5416,10 @@ packages: obuf@1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} - onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} - onetime@7.0.0: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} @@ -5766,10 +5437,6 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - ora@8.2.0: resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} engines: {node: '>=18'} @@ -5790,10 +5457,6 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-limit@5.0.0: - resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} - engines: {node: '>=18'} - p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} @@ -5818,18 +5481,10 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -5837,18 +5492,20 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} peberminta@0.9.0: resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} @@ -5920,9 +5577,6 @@ packages: piscina@4.9.2: resolution: {integrity: sha512-Fq0FERJWFEUpB4eSY59wSNwXD4RYqR+nR/WiEVcZW8IWfVBxJJafcgTEZDQo8k3w0sUarJ8RyVbbUF4GQ2LGbQ==} - pkg-types@1.3.1: - resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - playwright-core@1.52.0: resolution: {integrity: sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==} engines: {node: '>=18'} @@ -6094,10 +5748,6 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - prismjs@1.30.0: resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} engines: {node: '>=6'} @@ -6108,16 +5758,10 @@ packages: property-information@7.0.0: resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} - psl@1.15.0: - resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - queue-lit@1.5.2: resolution: {integrity: sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw==} engines: {node: '>=12'} @@ -6147,8 +5791,8 @@ packages: peerDependencies: react: ^19.1.0 - react-email@4.0.7: - resolution: {integrity: sha512-XCXlfZLKv9gHd/ZwUEhCpRGc/FJLZGYczeuG1kVR/be2PlkwEB4gjX9ARBbRFv86ncbtpOu/wI6jD6kadRyAKw==} + react-email@4.0.11: + resolution: {integrity: sha512-t/8ZlVSOXVlmtbLLAinTePYefdx1FipPiu9a4RmFar7vizevrDoTNz8mEzOBEMTJp/OhloP3UOkLJN0iCjBDrg==} engines: {node: '>=18.0.0'} hasBin: true @@ -6164,9 +5808,6 @@ packages: react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-medium-image-zoom@5.2.14: resolution: {integrity: sha512-nfTVYcAUnBzXQpPDcZL+cG/e6UceYUIG+zDcnemL7jtAqbJjVVkA85RgneGtJeni12dTyiRPZVM6Szkmwd/o8w==} peerDependencies: @@ -6234,10 +5875,6 @@ packages: resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} engines: {node: '>=0.10.0'} - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -6262,9 +5899,6 @@ packages: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - regex-recursion@6.0.2: resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} @@ -6303,15 +5937,8 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - - requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - - resend@4.4.1: - resolution: {integrity: sha512-FR22bzMW3VfoyZSBc8ScGo8ShrMWHmWB0G3FrispzWCnYSEEK5M7pyRvZtInKmM/09lsJETKc2q66mX+dXPSmg==} + resend@4.5.0: + resolution: {integrity: sha512-gUmfRaYlqJUVO0W29yibZatAhqEUtpE7ZWa2AMRpbIZVOgK+ONFI1Qf8a4VB3ItAWJSyF90VVRu3p3Jc01x2Rg==} engines: {node: '>=18'} resolve-alpn@1.2.1: @@ -6336,10 +5963,6 @@ packages: resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} engines: {node: '>=14.16'} - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - restore-cursor@5.1.0: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} @@ -6353,9 +5976,6 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rrweb-cssom@0.6.0: - resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} - rrweb-cssom@0.8.0: resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} @@ -6439,10 +6059,6 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} - sharp@0.33.5: - resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - sharp@0.34.1: resolution: {integrity: sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -6608,9 +6224,6 @@ packages: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} @@ -6633,17 +6246,10 @@ packages: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} - strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strip-literal@2.1.1: - resolution: {integrity: sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==} - strtok3@9.1.1: resolution: {integrity: sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw==} engines: {node: '>=16'} @@ -6701,8 +6307,8 @@ packages: tailwind-merge@3.2.0: resolution: {integrity: sha512-FQT/OVqCD+7edmmJpsgCsY820RTD5AkBryuG5IUqR5YQZSdj5xlH5nLgH7YPths7WsLPSpSBNneJdM8aS8aeFA==} - tailwindcss@4.1.4: - resolution: {integrity: sha512-1ZIUqtPITFbv/DxRmDr5/agPqJwF69d24m9qmM1939TJehgY539CtzeZRjbLt5G6fSy/7YqqYsfvoTEw9xUI2A==} + tailwindcss@4.1.5: + resolution: {integrity: sha512-nYtSPfWGDiWgCkwQG/m+aX83XCwf62sBgg3bIlNiiOcggnS1x3uVRDAuyelBFL+vJdOPPCGElxv9DjHJjRHiVA==} tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} @@ -6711,9 +6317,9 @@ packages: tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} + test-exclude@7.0.1: + resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} + engines: {node: '>=18'} text-decoder@1.2.3: resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} @@ -6738,14 +6344,25 @@ packages: resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} engines: {node: '>=12.0.0'} - tinypool@0.8.4: - resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==} + tinypool@1.0.2: + resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} - tinyspy@2.2.1: - resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} + tldts-core@6.1.86: + resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} + + tldts@6.1.86: + resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} + hasBin: true + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -6758,9 +6375,9 @@ packages: resolution: {integrity: sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==} engines: {node: '>=14.16'} - tough-cookie@4.1.4: - resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} - engines: {node: '>=6'} + tough-cookie@5.1.2: + resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} + engines: {node: '>=16'} tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} @@ -6871,10 +6488,6 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-detect@4.1.0: - resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} - engines: {node: '>=4'} - type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -6907,9 +6520,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - ufo@1.6.1: - resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} - uint8array-extras@1.4.0: resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==} engines: {node: '>=18'} @@ -6948,10 +6558,6 @@ packages: unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} - universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} - unplugin@2.1.0: resolution: {integrity: sha512-us4j03/499KhbGP8BU7Hrzrgseo+KdfJYWcbcajCOqsAyb8Gk0Yn2kiUIcZISYCb1JFaZfIuG3b42HmguVOKCQ==} engines: {node: '>=18.12.0'} @@ -6965,9 +6571,6 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - use-callback-ref@1.3.3: resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} @@ -7017,21 +6620,21 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite-node@1.6.1: - resolution: {integrity: sha512-YAXkfvGtuTzwWbDSACdJSg4A4DZiAqckWe90Zapc/sEX3XvHcw1NdurM/6od8J207tSDqNbSsgdCacBgvJKFuA==} - engines: {node: ^18.0.0 || >=20.0.0} + vite-node@3.1.2: + resolution: {integrity: sha512-/8iMryv46J3aK13iUXsei5G/A3CUlW4665THCPS+K8xAaqrVWiGB4RfXMQXCLjpK9P2eK//BczrVkn5JLAk6DA==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite-tsconfig-paths@4.3.2: - resolution: {integrity: sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==} + vite-tsconfig-paths@5.1.4: + resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} peerDependencies: vite: '*' peerDependenciesMeta: vite: optional: true - vite@5.4.18: - resolution: {integrity: sha512-1oDcnEp3lVyHCuQ2YFelM4Alm2o91xNoMncRm1U7S+JdYfYOvbiGZ3/CxGttrOu2M/KcGz7cRC2DoNUA6urmMA==} + vite@5.4.19: + resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -7061,20 +6664,23 @@ packages: terser: optional: true - vitest@1.6.1: - resolution: {integrity: sha512-Ljb1cnSJSivGN0LqXd/zmDbWEM0RNNg2t1QW/XUhYl/qPqyu7CsqeWtqQXHVaJsecLPuDoak2oJcZN2QoRIOag==} - engines: {node: ^18.0.0 || >=20.0.0} + vitest@3.1.2: + resolution: {integrity: sha512-WaxpJe092ID1C0mr+LH9MmNrhfzi8I65EX/NRU/Ld016KqQNRgxSOlGNP1hHN+a/F8L15Mh8klwaF77zR3GeDQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 1.6.1 - '@vitest/ui': 1.6.1 + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.1.2 + '@vitest/ui': 3.1.2 happy-dom: '*' jsdom: '*' peerDependenciesMeta: '@edge-runtime/vm': optional: true + '@types/debug': + optional: true '@types/node': optional: true '@vitest/browser': @@ -7090,9 +6696,6 @@ packages: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} @@ -7165,9 +6768,6 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.17.1: resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} engines: {node: '>=10.0.0'} @@ -7231,14 +6831,14 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yocto-queue@1.2.1: - resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} - engines: {node: '>=12.20'} - yoctocolors-cjs@2.1.2: resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} engines: {node: '>=18'} + yoctocolors@2.1.1: + resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} + engines: {node: '>=18'} + zod-validation-error@3.4.0: resolution: {integrity: sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==} engines: {node: '>=18.0.0'} @@ -7268,12 +6868,6 @@ snapshots: '@csstools/css-tokenizer': 3.0.3 lru-cache: 10.4.3 - '@asamuzakjp/dom-selector@2.0.2': - dependencies: - bidi-js: 1.0.3 - css-tree: 2.3.1 - is-potential-custom-element-name: 1.0.1 - '@asteasolutions/zod-to-openapi@7.3.0(zod@3.24.3)': dependencies: openapi3-ts: 4.4.0 @@ -7288,8 +6882,16 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + '@babel/compat-data@7.26.8': {} + '@babel/compat-data@7.27.1': {} + '@babel/core@7.26.10': dependencies: '@ampproject/remapping': 2.3.0 @@ -7300,7 +6902,7 @@ snapshots: '@babel/helpers': 7.27.0 '@babel/parser': 7.27.0 '@babel/template': 7.27.0 - '@babel/traverse': 7.27.0 + '@babel/traverse': 7.27.1 '@babel/types': 7.27.0 convert-source-map: 2.0.0 debug: 4.4.0 @@ -7310,17 +6912,45 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/core@7.27.1': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.1 + '@babel/helper-compilation-targets': 7.27.1 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/helpers': 7.27.1 + '@babel/parser': 7.27.1 + '@babel/template': 7.27.1 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/generator@7.27.0': dependencies: - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/parser': 7.27.1 + '@babel/types': 7.27.1 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/generator@7.27.1': + dependencies: + '@babel/parser': 7.27.1 + '@babel/types': 7.27.1 '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.25.9': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.27.1 '@babel/helper-compilation-targets@7.27.0': dependencies: @@ -7330,6 +6960,14 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-compilation-targets@7.27.1': + dependencies: + '@babel/compat-data': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 @@ -7338,22 +6976,29 @@ snapshots: '@babel/helper-optimise-call-expression': 7.25.9 '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.27.0 + '@babel/traverse': 7.27.1 semver: 6.3.1 transitivePeerDependencies: - supports-color '@babel/helper-member-expression-to-functions@7.25.9': dependencies: - '@babel/traverse': 7.27.0 - '@babel/types': 7.27.0 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/traverse': 7.27.0 - '@babel/types': 7.27.0 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.27.1': + dependencies: + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 transitivePeerDependencies: - supports-color @@ -7362,51 +7007,73 @@ snapshots: '@babel/core': 7.26.10 '@babel/helper-module-imports': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.27.0 + '@babel/traverse': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.27.1(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.25.9': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.27.1 '@babel/helper-plugin-utils@7.26.5': {} + '@babel/helper-plugin-utils@7.27.1': {} + '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.27.0 + '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: - '@babel/traverse': 7.27.0 - '@babel/types': 7.27.0 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 transitivePeerDependencies: - supports-color '@babel/helper-string-parser@7.25.9': {} + '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-validator-identifier@7.25.9': {} + '@babel/helper-validator-identifier@7.27.1': {} + '@babel/helper-validator-option@7.25.9': {} + '@babel/helper-validator-option@7.27.1': {} + '@babel/helpers@7.27.0': dependencies: '@babel/template': 7.27.0 - '@babel/types': 7.27.0 + '@babel/types': 7.27.1 - '@babel/parser@7.24.5': + '@babel/helpers@7.27.1': dependencies: - '@babel/types': 7.27.0 + '@babel/template': 7.27.1 + '@babel/types': 7.27.1 '@babel/parser@7.27.0': dependencies: '@babel/types': 7.27.0 + '@babel/parser@7.27.1': + dependencies: + '@babel/types': 7.27.1 + '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 @@ -7423,45 +7090,37 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/runtime@7.27.0': - dependencies: - regenerator-runtime: 0.14.1 + '@babel/runtime@7.27.1': {} '@babel/template@7.27.0': dependencies: '@babel/code-frame': 7.26.2 - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/parser': 7.27.1 + '@babel/types': 7.27.1 - '@babel/traverse@7.25.6': + '@babel/template@7.27.1': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.27.0 - '@babel/parser': 7.27.0 - '@babel/template': 7.27.0 - '@babel/types': 7.27.0 - debug: 4.4.0 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.27.1 + '@babel/types': 7.27.1 - '@babel/traverse@7.27.0': + '@babel/traverse@7.27.1': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.27.0 - '@babel/parser': 7.27.0 - '@babel/template': 7.27.0 - '@babel/types': 7.27.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.1 + '@babel/parser': 7.27.1 + '@babel/template': 7.27.1 + '@babel/types': 7.27.1 debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: @@ -7472,7 +7131,12 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@bcoe/v8-coverage@0.2.3': {} + '@babel/types@7.27.1': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + + '@bcoe/v8-coverage@1.0.2': {} '@clack/core@0.3.5': dependencies: @@ -7546,9 +7210,6 @@ snapshots: '@esbuild/aix-ppc64@0.24.2': optional: true - '@esbuild/aix-ppc64@0.25.0': - optional: true - '@esbuild/aix-ppc64@0.25.3': optional: true @@ -7561,9 +7222,6 @@ snapshots: '@esbuild/android-arm64@0.24.2': optional: true - '@esbuild/android-arm64@0.25.0': - optional: true - '@esbuild/android-arm64@0.25.3': optional: true @@ -7576,9 +7234,6 @@ snapshots: '@esbuild/android-arm@0.24.2': optional: true - '@esbuild/android-arm@0.25.0': - optional: true - '@esbuild/android-arm@0.25.3': optional: true @@ -7591,9 +7246,6 @@ snapshots: '@esbuild/android-x64@0.24.2': optional: true - '@esbuild/android-x64@0.25.0': - optional: true - '@esbuild/android-x64@0.25.3': optional: true @@ -7606,9 +7258,6 @@ snapshots: '@esbuild/darwin-arm64@0.24.2': optional: true - '@esbuild/darwin-arm64@0.25.0': - optional: true - '@esbuild/darwin-arm64@0.25.3': optional: true @@ -7621,9 +7270,6 @@ snapshots: '@esbuild/darwin-x64@0.24.2': optional: true - '@esbuild/darwin-x64@0.25.0': - optional: true - '@esbuild/darwin-x64@0.25.3': optional: true @@ -7636,9 +7282,6 @@ snapshots: '@esbuild/freebsd-arm64@0.24.2': optional: true - '@esbuild/freebsd-arm64@0.25.0': - optional: true - '@esbuild/freebsd-arm64@0.25.3': optional: true @@ -7651,9 +7294,6 @@ snapshots: '@esbuild/freebsd-x64@0.24.2': optional: true - '@esbuild/freebsd-x64@0.25.0': - optional: true - '@esbuild/freebsd-x64@0.25.3': optional: true @@ -7666,9 +7306,6 @@ snapshots: '@esbuild/linux-arm64@0.24.2': optional: true - '@esbuild/linux-arm64@0.25.0': - optional: true - '@esbuild/linux-arm64@0.25.3': optional: true @@ -7681,9 +7318,6 @@ snapshots: '@esbuild/linux-arm@0.24.2': optional: true - '@esbuild/linux-arm@0.25.0': - optional: true - '@esbuild/linux-arm@0.25.3': optional: true @@ -7696,9 +7330,6 @@ snapshots: '@esbuild/linux-ia32@0.24.2': optional: true - '@esbuild/linux-ia32@0.25.0': - optional: true - '@esbuild/linux-ia32@0.25.3': optional: true @@ -7711,9 +7342,6 @@ snapshots: '@esbuild/linux-loong64@0.24.2': optional: true - '@esbuild/linux-loong64@0.25.0': - optional: true - '@esbuild/linux-loong64@0.25.3': optional: true @@ -7726,9 +7354,6 @@ snapshots: '@esbuild/linux-mips64el@0.24.2': optional: true - '@esbuild/linux-mips64el@0.25.0': - optional: true - '@esbuild/linux-mips64el@0.25.3': optional: true @@ -7741,9 +7366,6 @@ snapshots: '@esbuild/linux-ppc64@0.24.2': optional: true - '@esbuild/linux-ppc64@0.25.0': - optional: true - '@esbuild/linux-ppc64@0.25.3': optional: true @@ -7756,9 +7378,6 @@ snapshots: '@esbuild/linux-riscv64@0.24.2': optional: true - '@esbuild/linux-riscv64@0.25.0': - optional: true - '@esbuild/linux-riscv64@0.25.3': optional: true @@ -7771,9 +7390,6 @@ snapshots: '@esbuild/linux-s390x@0.24.2': optional: true - '@esbuild/linux-s390x@0.25.0': - optional: true - '@esbuild/linux-s390x@0.25.3': optional: true @@ -7786,18 +7402,12 @@ snapshots: '@esbuild/linux-x64@0.24.2': optional: true - '@esbuild/linux-x64@0.25.0': - optional: true - '@esbuild/linux-x64@0.25.3': optional: true '@esbuild/netbsd-arm64@0.24.2': optional: true - '@esbuild/netbsd-arm64@0.25.0': - optional: true - '@esbuild/netbsd-arm64@0.25.3': optional: true @@ -7810,18 +7420,12 @@ snapshots: '@esbuild/netbsd-x64@0.24.2': optional: true - '@esbuild/netbsd-x64@0.25.0': - optional: true - '@esbuild/netbsd-x64@0.25.3': optional: true '@esbuild/openbsd-arm64@0.24.2': optional: true - '@esbuild/openbsd-arm64@0.25.0': - optional: true - '@esbuild/openbsd-arm64@0.25.3': optional: true @@ -7834,9 +7438,6 @@ snapshots: '@esbuild/openbsd-x64@0.24.2': optional: true - '@esbuild/openbsd-x64@0.25.0': - optional: true - '@esbuild/openbsd-x64@0.25.3': optional: true @@ -7849,9 +7450,6 @@ snapshots: '@esbuild/sunos-x64@0.24.2': optional: true - '@esbuild/sunos-x64@0.25.0': - optional: true - '@esbuild/sunos-x64@0.25.3': optional: true @@ -7864,9 +7462,6 @@ snapshots: '@esbuild/win32-arm64@0.24.2': optional: true - '@esbuild/win32-arm64@0.25.0': - optional: true - '@esbuild/win32-arm64@0.25.3': optional: true @@ -7879,9 +7474,6 @@ snapshots: '@esbuild/win32-ia32@0.24.2': optional: true - '@esbuild/win32-ia32@0.25.0': - optional: true - '@esbuild/win32-ia32@0.25.3': optional: true @@ -7894,9 +7486,6 @@ snapshots: '@esbuild/win32-x64@0.24.2': optional: true - '@esbuild/win32-x64@0.25.0': - optional: true - '@esbuild/win32-x64@0.25.3': optional: true @@ -7915,7 +7504,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.2.1': {} + '@eslint/config-helpers@0.2.2': {} '@eslint/core@0.13.0': dependencies: @@ -8037,156 +7626,81 @@ snapshots: '@humanwhocodes/retry@0.4.2': {} - '@img/sharp-darwin-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.0.4 - optional: true - '@img/sharp-darwin-arm64@0.34.1': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.1.0 optional: true - '@img/sharp-darwin-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.0.4 - optional: true - '@img/sharp-darwin-x64@0.34.1': optionalDependencies: '@img/sharp-libvips-darwin-x64': 1.1.0 optional: true - '@img/sharp-libvips-darwin-arm64@1.0.4': - optional: true - '@img/sharp-libvips-darwin-arm64@1.1.0': optional: true - '@img/sharp-libvips-darwin-x64@1.0.4': - optional: true - '@img/sharp-libvips-darwin-x64@1.1.0': optional: true - '@img/sharp-libvips-linux-arm64@1.0.4': - optional: true - '@img/sharp-libvips-linux-arm64@1.1.0': optional: true - '@img/sharp-libvips-linux-arm@1.0.5': - optional: true - '@img/sharp-libvips-linux-arm@1.1.0': optional: true '@img/sharp-libvips-linux-ppc64@1.1.0': optional: true - '@img/sharp-libvips-linux-s390x@1.0.4': - optional: true - '@img/sharp-libvips-linux-s390x@1.1.0': optional: true - '@img/sharp-libvips-linux-x64@1.0.4': - optional: true - '@img/sharp-libvips-linux-x64@1.1.0': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.1.0': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - optional: true - '@img/sharp-libvips-linuxmusl-x64@1.1.0': optional: true - '@img/sharp-linux-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.0.4 - optional: true - '@img/sharp-linux-arm64@0.34.1': optionalDependencies: '@img/sharp-libvips-linux-arm64': 1.1.0 optional: true - '@img/sharp-linux-arm@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.0.5 - optional: true - '@img/sharp-linux-arm@0.34.1': optionalDependencies: '@img/sharp-libvips-linux-arm': 1.1.0 optional: true - '@img/sharp-linux-s390x@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.0.4 - optional: true - '@img/sharp-linux-s390x@0.34.1': optionalDependencies: '@img/sharp-libvips-linux-s390x': 1.1.0 optional: true - '@img/sharp-linux-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.0.4 - optional: true - '@img/sharp-linux-x64@0.34.1': optionalDependencies: '@img/sharp-libvips-linux-x64': 1.1.0 optional: true - '@img/sharp-linuxmusl-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - optional: true - '@img/sharp-linuxmusl-arm64@0.34.1': optionalDependencies: '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 optional: true - '@img/sharp-linuxmusl-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - optional: true - '@img/sharp-linuxmusl-x64@0.34.1': optionalDependencies: '@img/sharp-libvips-linuxmusl-x64': 1.1.0 optional: true - '@img/sharp-wasm32@0.33.5': - dependencies: - '@emnapi/runtime': 1.4.3 - optional: true - '@img/sharp-wasm32@0.34.1': dependencies: '@emnapi/runtime': 1.4.3 optional: true - '@img/sharp-win32-ia32@0.33.5': - optional: true - '@img/sharp-win32-ia32@0.34.1': optional: true - '@img/sharp-win32-x64@0.33.5': - optional: true - '@img/sharp-win32-x64@0.34.1': optional: true @@ -8317,10 +7831,6 @@ snapshots: '@istanbuljs/schema@0.1.3': {} - '@jest/schemas@29.6.3': - dependencies: - '@sinclair/typebox': 0.27.8 - '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 @@ -8445,55 +7955,29 @@ snapshots: '@types/pg': 8.11.6 optional: true - '@next/env@15.2.4': {} - '@next/env@15.3.1': {} - '@next/swc-darwin-arm64@15.2.4': - optional: true - '@next/swc-darwin-arm64@15.3.1': optional: true - '@next/swc-darwin-x64@15.2.4': - optional: true - '@next/swc-darwin-x64@15.3.1': optional: true - '@next/swc-linux-arm64-gnu@15.2.4': - optional: true - '@next/swc-linux-arm64-gnu@15.3.1': optional: true - '@next/swc-linux-arm64-musl@15.2.4': - optional: true - '@next/swc-linux-arm64-musl@15.3.1': optional: true - '@next/swc-linux-x64-gnu@15.2.4': - optional: true - '@next/swc-linux-x64-gnu@15.3.1': optional: true - '@next/swc-linux-x64-musl@15.2.4': - optional: true - '@next/swc-linux-x64-musl@15.3.1': optional: true - '@next/swc-win32-arm64-msvc@15.2.4': - optional: true - '@next/swc-win32-arm64-msvc@15.3.1': optional: true - '@next/swc-win32-x64-msvc@15.2.4': - optional: true - '@next/swc-win32-x64-msvc@15.3.1': optional: true @@ -8542,68 +8026,68 @@ snapshots: '@radix-ui/primitive@1.1.2': {} - '@radix-ui/react-accessible-icon@1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-accessible-icon@1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-visually-hidden': 1.2.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-accordion@1.2.8(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-accordion@1.2.8(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collapsible': 1.1.8(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-collection': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collapsible': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collection': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-alert-dialog@1.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-alert-dialog@1.1.11(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-dialog': 1.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-dialog': 1.1.11(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-arrow@1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-arrow@1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-aspect-ratio@1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-aspect-ratio@1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-avatar@1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-avatar@1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) @@ -8611,15 +8095,15 @@ snapshots: react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-checkbox@1.2.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-checkbox@1.2.3(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.2)(react@19.1.0) @@ -8627,35 +8111,35 @@ snapshots: react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-collapsible@1.1.8(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-collapsible@1.1.8(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-collection@1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-collection@1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.2)(react@19.1.0)': dependencies: @@ -8663,19 +8147,19 @@ snapshots: optionalDependencies: '@types/react': 19.1.2 - '@radix-ui/react-context-menu@2.2.12(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-context-menu@2.2.12(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-menu': 2.1.12(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-menu': 2.1.12(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) '@radix-ui/react-context@1.1.2(@types/react@19.1.2)(react@19.1.0)': dependencies: @@ -8683,18 +8167,18 @@ snapshots: optionalDependencies: '@types/react': 19.1.2 - '@radix-ui/react-dialog@1.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dialog@1.1.11(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-portal': 1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) aria-hidden: 1.2.4 @@ -8703,7 +8187,7 @@ snapshots: react-remove-scroll: 2.6.3(@types/react@19.1.2)(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) '@radix-ui/react-direction@1.1.1(@types/react@19.1.2)(react@19.1.0)': dependencies: @@ -8711,33 +8195,33 @@ snapshots: optionalDependencies: '@types/react': 19.1.2 - '@radix-ui/react-dismissable-layer@1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dismissable-layer@1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.2)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-dropdown-menu@2.1.12(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dropdown-menu@2.1.12(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-menu': 2.1.12(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-menu': 2.1.12(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) '@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.2)(react@19.1.0)': dependencies: @@ -8745,47 +8229,47 @@ snapshots: optionalDependencies: '@types/react': 19.1.2 - '@radix-ui/react-focus-scope@1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-focus-scope@1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-form@0.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-form@0.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-label': 2.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-label': 2.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-hover-card@1.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-hover-card@1.1.11(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-popper': 1.2.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-popper': 1.2.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) '@radix-ui/react-id@1.1.1(@types/react@19.1.2)(react@19.1.0)': dependencies: @@ -8794,31 +8278,31 @@ snapshots: optionalDependencies: '@types/react': 19.1.2 - '@radix-ui/react-label@2.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-label@2.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-menu@2.1.12(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-menu@2.1.12(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collection': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-popper': 1.2.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-popper': 1.2.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) aria-hidden: 1.2.4 @@ -8827,58 +8311,58 @@ snapshots: react-remove-scroll: 2.6.3(@types/react@19.1.2)(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-menubar@1.1.12(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-menubar@1.1.12(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collection': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-menu': 2.1.12(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-menu': 2.1.12(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-navigation-menu@1.2.10(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-navigation-menu@1.2.10(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collection': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-one-time-password-field@0.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-one-time-password-field@0.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collection': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.2)(react@19.1.0) @@ -8887,21 +8371,21 @@ snapshots: react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-popover@1.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-popover@1.1.11(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-popper': 1.2.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-popper': 1.2.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) aria-hidden: 1.2.4 @@ -8910,15 +8394,15 @@ snapshots: react-remove-scroll: 2.6.3(@types/react@19.1.2)(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-popper@1.2.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-popper@1.2.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@floating-ui/react-dom': 2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-arrow': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-arrow': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.2)(react@19.1.0) @@ -8928,19 +8412,19 @@ snapshots: react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-portal@1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-portal@1.1.6(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-presence@1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-presence@1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) @@ -8948,36 +8432,36 @@ snapshots: react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-primitive@2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-primitive@2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-progress@1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-progress@1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-radio-group@1.3.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-radio-group@1.3.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.2)(react@19.1.0) @@ -8985,89 +8469,89 @@ snapshots: react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-roving-focus@1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-roving-focus@1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collection': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-scroll-area@1.2.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-scroll-area@1.2.6(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.2 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-select@2.2.2(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-select@2.2.2(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collection': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-popper': 1.2.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-popper': 1.2.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) aria-hidden: 1.2.4 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) react-remove-scroll: 2.6.3(@types/react@19.1.2)(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-separator@1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-separator@1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-slider@1.3.2(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-slider@1.3.2(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collection': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.2)(react@19.1.0) @@ -9076,7 +8560,7 @@ snapshots: react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) '@radix-ui/react-slot@1.2.0(@types/react@19.1.2)(react@19.1.0)': dependencies: @@ -9085,12 +8569,12 @@ snapshots: optionalDependencies: '@types/react': 19.1.2 - '@radix-ui/react-switch@1.2.2(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-switch@1.2.2(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.2)(react@19.1.0) @@ -9098,104 +8582,104 @@ snapshots: react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-tabs@1.1.9(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-tabs@1.1.9(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-toast@1.2.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-toast@1.2.11(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collection': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-toggle-group@1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-toggle-group@1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toggle': 1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-toggle': 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-toggle@1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-toggle@1.1.6(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-toolbar@1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-toolbar@1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-separator': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toggle-group': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-separator': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-toggle-group': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) - '@radix-ui/react-tooltip@1.2.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-tooltip@1.2.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.2 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-popper': 1.2.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-popper': 1.2.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.2)(react@19.1.0)': dependencies: @@ -9258,14 +8742,14 @@ snapshots: optionalDependencies: '@types/react': 19.1.2 - '@radix-ui/react-visually-hidden@1.2.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-visually-hidden@1.2.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) '@radix-ui/rect@1.1.1': {} @@ -9282,6 +8766,11 @@ snapshots: prismjs: 1.30.0 react: 19.1.0 + '@react-email/code-block@0.0.13(react@19.1.0)': + dependencies: + prismjs: 1.30.0 + react: 19.1.0 + '@react-email/code-inline@0.0.5(react@19.1.0)': dependencies: react: 19.1.0 @@ -9290,11 +8779,37 @@ snapshots: dependencies: react: 19.1.0 - '@react-email/components@0.0.36(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-email/components@0.0.36(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@react-email/body': 0.0.11(react@19.1.0) + '@react-email/button': 0.0.19(react@19.1.0) + '@react-email/code-block': 0.0.12(react@19.1.0) + '@react-email/code-inline': 0.0.5(react@19.1.0) + '@react-email/column': 0.0.13(react@19.1.0) + '@react-email/container': 0.0.15(react@19.1.0) + '@react-email/font': 0.0.9(react@19.1.0) + '@react-email/head': 0.0.12(react@19.1.0) + '@react-email/heading': 0.0.15(react@19.1.0) + '@react-email/hr': 0.0.11(react@19.1.0) + '@react-email/html': 0.0.11(react@19.1.0) + '@react-email/img': 0.0.11(react@19.1.0) + '@react-email/link': 0.0.12(react@19.1.0) + '@react-email/markdown': 0.0.14(react@19.1.0) + '@react-email/preview': 0.0.12(react@19.1.0) + '@react-email/render': 1.0.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-email/row': 0.0.12(react@19.1.0) + '@react-email/section': 0.0.16(react@19.1.0) + '@react-email/tailwind': 1.0.4(react@19.1.0) + '@react-email/text': 0.1.1(react@19.1.0) + react: 19.1.0 + transitivePeerDependencies: + - react-dom + + '@react-email/components@0.0.37(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@react-email/body': 0.0.11(react@19.1.0) '@react-email/button': 0.0.19(react@19.1.0) - '@react-email/code-block': 0.0.12(react@19.1.0) + '@react-email/code-block': 0.0.13(react@19.1.0) '@react-email/code-inline': 0.0.5(react@19.1.0) '@react-email/column': 0.0.13(react@19.1.0) '@react-email/container': 0.0.15(react@19.1.0) @@ -9305,13 +8820,13 @@ snapshots: '@react-email/html': 0.0.11(react@19.1.0) '@react-email/img': 0.0.11(react@19.1.0) '@react-email/link': 0.0.12(react@19.1.0) - '@react-email/markdown': 0.0.14(react@19.1.0) + '@react-email/markdown': 0.0.15(react@19.1.0) '@react-email/preview': 0.0.12(react@19.1.0) - '@react-email/render': 1.0.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-email/render': 1.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-email/row': 0.0.12(react@19.1.0) '@react-email/section': 0.0.16(react@19.1.0) - '@react-email/tailwind': 1.0.4(react@19.1.0) - '@react-email/text': 0.1.1(react@19.1.0) + '@react-email/tailwind': 1.0.5(react@19.1.0) + '@react-email/text': 0.1.2(react@19.1.0) react: 19.1.0 transitivePeerDependencies: - react-dom @@ -9353,6 +8868,11 @@ snapshots: md-to-react-email: 5.0.5(react@19.1.0) react: 19.1.0 + '@react-email/markdown@0.0.15(react@19.1.0)': + dependencies: + md-to-react-email: 5.0.5(react@19.1.0) + react: 19.1.0 + '@react-email/preview@0.0.12(react@19.1.0)': dependencies: react: 19.1.0 @@ -9365,6 +8885,14 @@ snapshots: react-dom: 19.1.0(react@19.1.0) react-promise-suspense: 0.3.4 + '@react-email/render@1.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + html-to-text: 9.0.5 + prettier: 3.5.3 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-promise-suspense: 0.3.4 + '@react-email/row@0.0.12(react@19.1.0)': dependencies: react: 19.1.0 @@ -9377,10 +8905,18 @@ snapshots: dependencies: react: 19.1.0 + '@react-email/tailwind@1.0.5(react@19.1.0)': + dependencies: + react: 19.1.0 + '@react-email/text@0.1.1(react@19.1.0)': dependencies: react: 19.1.0 + '@react-email/text@0.1.2(react@19.1.0)': + dependencies: + react: 19.1.0 + '@rollup/pluginutils@5.1.4(rollup@4.40.1)': dependencies: '@types/estree': 1.0.7 @@ -9505,8 +9041,6 @@ snapshots: '@shikijs/vscode-textmate@10.0.2': {} - '@sinclair/typebox@0.27.8': {} - '@sindresorhus/is@5.6.0': {} '@socket.io/component-emitter@3.1.2': {} @@ -9515,7 +9049,7 @@ snapshots: '@standard-schema/utils@0.3.0': {} - '@swc/cli@0.7.3(@swc/core@1.11.24)(chokidar@4.0.3)': + '@swc/cli@0.6.0(@swc/core@1.11.24)(chokidar@4.0.3)': dependencies: '@swc/core': 1.11.24 '@swc/counter': 0.1.3 @@ -9590,83 +9124,83 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tailwindcss/node@4.1.4': + '@tailwindcss/node@4.1.5': dependencies: enhanced-resolve: 5.18.1 jiti: 2.4.2 lightningcss: 1.29.2 - tailwindcss: 4.1.4 + tailwindcss: 4.1.5 - '@tailwindcss/oxide-android-arm64@4.1.4': + '@tailwindcss/oxide-android-arm64@4.1.5': optional: true - '@tailwindcss/oxide-darwin-arm64@4.1.4': + '@tailwindcss/oxide-darwin-arm64@4.1.5': optional: true - '@tailwindcss/oxide-darwin-x64@4.1.4': + '@tailwindcss/oxide-darwin-x64@4.1.5': optional: true - '@tailwindcss/oxide-freebsd-x64@4.1.4': + '@tailwindcss/oxide-freebsd-x64@4.1.5': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.4': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.5': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.1.4': + '@tailwindcss/oxide-linux-arm64-gnu@4.1.5': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.1.4': + '@tailwindcss/oxide-linux-arm64-musl@4.1.5': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.1.4': + '@tailwindcss/oxide-linux-x64-gnu@4.1.5': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.1.4': + '@tailwindcss/oxide-linux-x64-musl@4.1.5': optional: true - '@tailwindcss/oxide-wasm32-wasi@4.1.4': + '@tailwindcss/oxide-wasm32-wasi@4.1.5': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.1.4': + '@tailwindcss/oxide-win32-arm64-msvc@4.1.5': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.1.4': + '@tailwindcss/oxide-win32-x64-msvc@4.1.5': optional: true - '@tailwindcss/oxide@4.1.4': + '@tailwindcss/oxide@4.1.5': optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.4 - '@tailwindcss/oxide-darwin-arm64': 4.1.4 - '@tailwindcss/oxide-darwin-x64': 4.1.4 - '@tailwindcss/oxide-freebsd-x64': 4.1.4 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.4 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.4 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.4 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.4 - '@tailwindcss/oxide-linux-x64-musl': 4.1.4 - '@tailwindcss/oxide-wasm32-wasi': 4.1.4 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.4 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.4 - - '@tailwindcss/postcss@4.1.4': + '@tailwindcss/oxide-android-arm64': 4.1.5 + '@tailwindcss/oxide-darwin-arm64': 4.1.5 + '@tailwindcss/oxide-darwin-x64': 4.1.5 + '@tailwindcss/oxide-freebsd-x64': 4.1.5 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.5 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.5 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.5 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.5 + '@tailwindcss/oxide-linux-x64-musl': 4.1.5 + '@tailwindcss/oxide-wasm32-wasi': 4.1.5 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.5 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.5 + + '@tailwindcss/postcss@4.1.5': dependencies: '@alloc/quick-lru': 5.2.0 - '@tailwindcss/node': 4.1.4 - '@tailwindcss/oxide': 4.1.4 + '@tailwindcss/node': 4.1.5 + '@tailwindcss/oxide': 4.1.5 postcss: 8.5.3 - tailwindcss: 4.1.4 + tailwindcss: 4.1.5 - '@tanstack/query-core@5.74.9': {} + '@tanstack/query-core@5.75.0': {} - '@tanstack/react-query@5.74.11(react@19.1.0)': + '@tanstack/react-query@5.75.0(react@19.1.0)': dependencies: - '@tanstack/query-core': 5.74.9 + '@tanstack/query-core': 5.75.0 react: 19.1.0 '@testing-library/dom@9.3.4': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/runtime': 7.27.0 + '@babel/code-frame': 7.27.1 + '@babel/runtime': 7.27.1 '@types/aria-query': 5.0.4 aria-query: 5.1.3 chalk: 4.1.2 @@ -9674,15 +9208,15 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/react@14.3.1(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@testing-library/react@16.3.0(@testing-library/dom@9.3.4)(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@babel/runtime': 7.27.0 + '@babel/runtime': 7.27.1 '@testing-library/dom': 9.3.4 - '@types/react-dom': 18.3.6(@types/react@19.1.2) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - transitivePeerDependencies: - - '@types/react' + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.3(@types/react@19.1.2) '@tokenizer/token@0.3.0': {} @@ -9690,24 +9224,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/parser': 7.27.1 + '@babel/types': 7.27.1 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.7 '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.27.1 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/parser': 7.27.1 + '@babel/types': 7.27.1 '@types/babel__traverse@7.20.7': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.27.1 '@types/cors@2.8.17': dependencies: @@ -9776,11 +9310,7 @@ snapshots: '@types/node': 22.15.3 kleur: 3.0.3 - '@types/react-dom@18.3.6(@types/react@19.1.2)': - dependencies: - '@types/react': 19.1.2 - - '@types/react-dom@19.1.2(@types/react@19.1.2)': + '@types/react-dom@19.1.3(@types/react@19.1.2)': dependencies: '@types/react': 19.1.2 @@ -9875,21 +9405,21 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react@4.4.1(vite@5.4.18(@types/node@22.15.3)(lightningcss@1.29.2))': + '@vitejs/plugin-react@4.4.1(vite@5.4.19(@types/node@22.15.3)(lightningcss@1.29.2))': dependencies: - '@babel/core': 7.26.10 - '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) + '@babel/core': 7.27.1 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.27.1) '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 5.4.18(@types/node@22.15.3)(lightningcss@1.29.2) + vite: 5.4.19(@types/node@22.15.3)(lightningcss@1.29.2) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@1.6.1(vitest@1.6.1(@types/node@22.15.3)(jsdom@23.2.0)(lightningcss@1.29.2))': + '@vitest/coverage-v8@3.1.2(vitest@3.1.2(@types/debug@4.1.12)(@types/node@22.15.3)(jsdom@26.1.0)(lightningcss@1.29.2))': dependencies: '@ampproject/remapping': 2.3.0 - '@bcoe/v8-coverage': 0.2.3 + '@bcoe/v8-coverage': 1.0.2 debug: 4.4.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 @@ -9897,42 +9427,52 @@ snapshots: istanbul-reports: 3.1.7 magic-string: 0.30.17 magicast: 0.3.5 - picocolors: 1.1.1 std-env: 3.9.0 - strip-literal: 2.1.1 - test-exclude: 6.0.0 - vitest: 1.6.1(@types/node@22.15.3)(jsdom@23.2.0)(lightningcss@1.29.2) + test-exclude: 7.0.1 + tinyrainbow: 2.0.0 + vitest: 3.1.2(@types/debug@4.1.12)(@types/node@22.15.3)(jsdom@26.1.0)(lightningcss@1.29.2) transitivePeerDependencies: - supports-color - '@vitest/expect@1.6.1': + '@vitest/expect@3.1.2': + dependencies: + '@vitest/spy': 3.1.2 + '@vitest/utils': 3.1.2 + chai: 5.2.0 + tinyrainbow: 2.0.0 + + '@vitest/mocker@3.1.2(vite@5.4.19(@types/node@22.15.3)(lightningcss@1.29.2))': + dependencies: + '@vitest/spy': 3.1.2 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + vite: 5.4.19(@types/node@22.15.3)(lightningcss@1.29.2) + + '@vitest/pretty-format@3.1.2': dependencies: - '@vitest/spy': 1.6.1 - '@vitest/utils': 1.6.1 - chai: 4.5.0 + tinyrainbow: 2.0.0 - '@vitest/runner@1.6.1': + '@vitest/runner@3.1.2': dependencies: - '@vitest/utils': 1.6.1 - p-limit: 5.0.0 - pathe: 1.1.2 + '@vitest/utils': 3.1.2 + pathe: 2.0.3 - '@vitest/snapshot@1.6.1': + '@vitest/snapshot@3.1.2': dependencies: + '@vitest/pretty-format': 3.1.2 magic-string: 0.30.17 - pathe: 1.1.2 - pretty-format: 29.7.0 + pathe: 2.0.3 - '@vitest/spy@1.6.1': + '@vitest/spy@3.1.2': dependencies: - tinyspy: 2.2.1 + tinyspy: 3.0.2 - '@vitest/utils@1.6.1': + '@vitest/utils@3.1.2': dependencies: - diff-sequences: 29.6.3 - estree-walker: 3.0.3 - loupe: 2.3.7 - pretty-format: 29.7.0 + '@vitest/pretty-format': 3.1.2 + loupe: 3.1.3 + tinyrainbow: 2.0.0 '@xhmikosr/archive-type@7.0.0': dependencies: @@ -10011,10 +9551,6 @@ snapshots: dependencies: acorn: 8.14.1 - acorn-walk@8.3.4: - dependencies: - acorn: 8.14.1 - acorn@8.14.1: {} agent-base@7.1.3: {} @@ -10124,7 +9660,7 @@ snapshots: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 - assertion-error@1.1.0: {} + assertion-error@2.0.1: {} ast-types-flow@0.0.8: {} @@ -10132,8 +9668,6 @@ snapshots: async-function@1.0.0: {} - asynckit@0.4.0: {} - available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 @@ -10159,10 +9693,6 @@ snapshots: base64id@2.0.0: {} - bidi-js@1.0.3: - dependencies: - require-from-string: 2.0.2 - bin-version-check@5.1.0: dependencies: bin-version: 6.0.0 @@ -10183,12 +9713,6 @@ snapshots: transitivePeerDependencies: - '@types/react' - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -10204,8 +9728,8 @@ snapshots: browserslist@4.24.4: dependencies: - caniuse-lite: 1.0.30001715 - electron-to-chromium: 1.5.144 + caniuse-lite: 1.0.30001716 + electron-to-chromium: 1.5.148 node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.24.4) @@ -10269,19 +9793,17 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001715: {} + caniuse-lite@1.0.30001716: {} ccount@2.0.1: {} - chai@4.5.0: + chai@5.2.0: dependencies: - assertion-error: 1.1.0 - check-error: 1.0.3 - deep-eql: 4.1.4 - get-func-name: 2.0.2 - loupe: 2.3.7 - pathval: 1.1.1 - type-detect: 4.1.0 + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.3 + pathval: 2.0.0 chalk@4.1.2: dependencies: @@ -10300,9 +9822,7 @@ snapshots: chardet@0.7.0: {} - check-error@1.0.3: - dependencies: - get-func-name: 2.0.2 + check-error@2.1.1: {} chokidar@3.6.0: dependencies: @@ -10324,10 +9844,6 @@ snapshots: dependencies: clsx: 2.1.1 - cli-cursor@3.1.0: - dependencies: - restore-cursor: 3.1.0 - cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 @@ -10344,16 +9860,14 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - clone@1.0.4: {} - clsx@2.1.1: {} - cmdk@1.1.1(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + cmdk@1.1.1(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-dialog': 1.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-dialog': 1.1.11(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) transitivePeerDependencies: @@ -10380,14 +9894,8 @@ snapshots: color-string: 1.9.1 optional: true - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - comma-separated-tokens@2.0.3: {} - commander@11.1.0: {} - commander@13.1.0: {} commander@4.1.1: {} @@ -10412,8 +9920,6 @@ snapshots: tree-kill: 1.2.2 yargs: 17.7.2 - confbox@0.1.8: {} - consola@3.4.2: {} content-disposition@0.5.4: @@ -10435,11 +9941,6 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-tree@2.3.1: - dependencies: - mdn-data: 2.0.30 - source-map-js: 1.2.1 - cssesc@3.0.0: {} cssstyle@4.3.1: @@ -10474,7 +9975,7 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.2 - debounce@2.0.0: {} + debounce@2.2.0: {} debug@4.3.7: dependencies: @@ -10494,9 +9995,7 @@ snapshots: dependencies: mimic-response: 3.1.0 - deep-eql@4.1.4: - dependencies: - type-detect: 4.1.0 + deep-eql@5.0.2: {} deep-equal@2.2.3: dependencies: @@ -10523,10 +10022,6 @@ snapshots: deepmerge@4.3.1: {} - defaults@1.0.4: - dependencies: - clone: 1.0.4 - defaults@3.0.0: {} defer-to-connect@2.0.1: {} @@ -10543,8 +10038,6 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 - delayed-stream@1.0.0: {} - dequal@2.0.3: {} detect-libc@2.0.4: {} @@ -10555,8 +10048,6 @@ snapshots: dependencies: dequal: 2.0.3 - diff-sequences@29.6.3: {} - dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -10612,7 +10103,7 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.144: {} + electron-to-chromium@1.5.148: {} emoji-regex@10.4.0: {} @@ -10739,6 +10230,8 @@ snapshots: iterator.prototype: 1.1.5 safe-array-concat: 1.1.3 + es-module-lexer@1.7.0: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -10860,34 +10353,6 @@ snapshots: '@esbuild/win32-ia32': 0.24.2 '@esbuild/win32-x64': 0.24.2 - esbuild@0.25.0: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.0 - '@esbuild/android-arm': 0.25.0 - '@esbuild/android-arm64': 0.25.0 - '@esbuild/android-x64': 0.25.0 - '@esbuild/darwin-arm64': 0.25.0 - '@esbuild/darwin-x64': 0.25.0 - '@esbuild/freebsd-arm64': 0.25.0 - '@esbuild/freebsd-x64': 0.25.0 - '@esbuild/linux-arm': 0.25.0 - '@esbuild/linux-arm64': 0.25.0 - '@esbuild/linux-ia32': 0.25.0 - '@esbuild/linux-loong64': 0.25.0 - '@esbuild/linux-mips64el': 0.25.0 - '@esbuild/linux-ppc64': 0.25.0 - '@esbuild/linux-riscv64': 0.25.0 - '@esbuild/linux-s390x': 0.25.0 - '@esbuild/linux-x64': 0.25.0 - '@esbuild/netbsd-arm64': 0.25.0 - '@esbuild/netbsd-x64': 0.25.0 - '@esbuild/openbsd-arm64': 0.25.0 - '@esbuild/openbsd-x64': 0.25.0 - '@esbuild/sunos-x64': 0.25.0 - '@esbuild/win32-arm64': 0.25.0 - '@esbuild/win32-ia32': 0.25.0 - '@esbuild/win32-x64': 0.25.0 - esbuild@0.25.3: optionalDependencies: '@esbuild/aix-ppc64': 0.25.3 @@ -11025,7 +10490,7 @@ snapshots: '@eslint-community/eslint-utils': 4.6.1(eslint@9.25.1(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.20.0 - '@eslint/config-helpers': 0.2.1 + '@eslint/config-helpers': 0.2.2 '@eslint/core': 0.13.0 '@eslint/eslintrc': 3.3.1 '@eslint/js': 9.25.1 @@ -11133,17 +10598,7 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 - execa@8.0.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 + expect-type@1.2.1: {} ext-list@2.2.2: dependencies: @@ -11242,24 +10697,15 @@ snapshots: form-data-encoder@2.1.4: {} - form-data@4.0.2: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - mime-types: 2.1.35 - - framer-motion@12.9.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + framer-motion@12.9.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - motion-dom: 12.9.1 - motion-utils: 12.8.3 + motion-dom: 12.9.4 + motion-utils: 12.9.4 tslib: 2.8.1 optionalDependencies: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - fs.realpath@1.0.0: {} - fsevents@2.3.2: optional: true @@ -11313,17 +10759,17 @@ snapshots: - acorn - supports-color - fumadocs-ui@15.2.12(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(next@15.3.1(@playwright/test@1.52.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.1.4): + fumadocs-ui@15.2.12(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(next@15.3.1(@playwright/test@1.52.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.1.5): dependencies: - '@radix-ui/react-accordion': 1.2.8(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-collapsible': 1.1.8(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-dialog': 1.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-accordion': 1.2.8(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collapsible': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-dialog': 1.1.11(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-navigation-menu': 1.2.10(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-popover': 1.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-scroll-area': 1.2.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-navigation-menu': 1.2.10(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-popover': 1.1.11(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-scroll-area': 1.2.6(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-tabs': 1.1.9(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-tabs': 1.1.9(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) class-variance-authority: 0.7.1 fumadocs-core: 15.2.12(@types/react@19.1.2)(next@15.3.1(@playwright/test@1.52.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) lodash.merge: 4.6.2 @@ -11335,7 +10781,7 @@ snapshots: react-medium-image-zoom: 5.2.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0) tailwind-merge: 3.2.0 optionalDependencies: - tailwindcss: 4.1.4 + tailwindcss: 4.1.5 transitivePeerDependencies: - '@oramacloud/client' - '@types/react' @@ -11374,8 +10820,6 @@ snapshots: get-east-asian-width@1.3.0: {} - get-func-name@2.0.2: {} - get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -11398,8 +10842,6 @@ snapshots: get-stream@6.0.1: {} - get-stream@8.0.1: {} - get-stream@9.0.1: dependencies: '@sec-ant/readable-stream': 0.4.1 @@ -11425,14 +10867,6 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.3.4: - dependencies: - foreground-child: 3.3.1 - jackspeak: 2.3.6 - minimatch: 9.0.5 - minipass: 7.1.2 - path-scurry: 1.11.1 - glob@10.4.5: dependencies: foreground-child: 3.3.1 @@ -11442,14 +10876,14 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - glob@7.2.3: + glob@11.0.2: dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 + foreground-child: 3.3.1 + jackspeak: 4.1.0 + minimatch: 10.0.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.0 globals@11.12.0: {} @@ -11637,8 +11071,6 @@ snapshots: human-signals@2.1.0: {} - human-signals@5.0.0: {} - iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -11660,13 +11092,6 @@ snapshots: imurmurhash@0.1.4: {} - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - inline-style-parser@0.2.4: {} input-otp@1.4.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): @@ -11775,8 +11200,6 @@ snapshots: is-hexadecimal@2.0.1: {} - is-interactive@1.0.0: {} - is-interactive@2.0.0: {} is-map@2.0.3: {} @@ -11809,8 +11232,6 @@ snapshots: is-stream@2.0.1: {} - is-stream@3.0.0: {} - is-stream@4.0.1: {} is-string@1.1.1: @@ -11828,8 +11249,6 @@ snapshots: dependencies: which-typed-array: 1.1.19 - is-unicode-supported@0.1.0: {} - is-unicode-supported@1.3.0: {} is-unicode-supported@2.1.0: {} @@ -11882,17 +11301,15 @@ snapshots: has-symbols: 1.1.0 set-function-name: 2.0.2 - jackspeak@2.3.6: + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jackspeak@3.4.3: + jackspeak@4.1.0: dependencies: '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 jiti@2.4.2: {} @@ -11900,8 +11317,6 @@ snapshots: js-tokens@4.0.0: {} - js-tokens@9.0.1: {} - js-yaml@3.14.1: dependencies: argparse: 1.0.10 @@ -11911,22 +11326,21 @@ snapshots: dependencies: argparse: 2.0.1 - jsdom@23.2.0: + jsdom@26.1.0: dependencies: - '@asamuzakjp/dom-selector': 2.0.2 cssstyle: 4.3.1 data-urls: 5.0.0 decimal.js: 10.5.0 - form-data: 4.0.2 html-encoding-sniffer: 4.0.0 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.20 parse5: 7.3.0 - rrweb-cssom: 0.6.0 + rrweb-cssom: 0.8.0 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 4.1.4 + tough-cookie: 5.1.2 w3c-xmlserializer: 5.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 3.1.1 @@ -12034,11 +11448,6 @@ snapshots: load-tsconfig@0.2.5: {} - local-pkg@0.5.1: - dependencies: - mlly: 1.7.4 - pkg-types: 1.3.1 - locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -12049,25 +11458,23 @@ snapshots: lodash@4.17.21: {} - log-symbols@4.1.0: - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - log-symbols@6.0.0: dependencies: chalk: 5.4.1 is-unicode-supported: 1.3.0 + log-symbols@7.0.0: + dependencies: + is-unicode-supported: 2.1.0 + yoctocolors: 2.1.1 + longest-streak@3.1.0: {} loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 - loupe@2.3.7: - dependencies: - get-func-name: 2.0.2 + loupe@3.1.3: {} lowercase-keys@3.0.0: {} @@ -12091,8 +11498,8 @@ snapshots: magicast@0.3.5: dependencies: - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/parser': 7.27.1 + '@babel/types': 7.27.1 source-map-js: 1.2.1 make-dir@4.0.0: @@ -12275,8 +11682,6 @@ snapshots: dependencies: '@types/mdast': 4.0.4 - mdn-data@2.0.30: {} - merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -12558,9 +11963,11 @@ snapshots: dependencies: mime-db: 1.52.0 - mimic-fn@2.1.0: {} + mime-types@3.0.1: + dependencies: + mime-db: 1.54.0 - mimic-fn@4.0.0: {} + mimic-fn@2.1.0: {} mimic-function@5.0.1: {} @@ -12568,6 +11975,10 @@ snapshots: mimic-response@4.0.0: {} + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -12578,22 +11989,15 @@ snapshots: minipass@7.1.2: {} - mlly@1.7.4: - dependencies: - acorn: 8.14.1 - pathe: 2.0.3 - pkg-types: 1.3.1 - ufo: 1.6.1 - - motion-dom@12.9.1: + motion-dom@12.9.4: dependencies: - motion-utils: 12.8.3 + motion-utils: 12.9.4 - motion-utils@12.8.3: {} + motion-utils@12.9.4: {} - motion@12.9.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + motion@12.9.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - framer-motion: 12.9.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + framer-motion: 12.9.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) tslib: 2.8.1 optionalDependencies: react: 19.1.0 @@ -12623,11 +12027,11 @@ snapshots: negotiator@1.0.0: {} - next-intl@4.1.0(next@15.3.1(@babel/core@7.26.10)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(typescript@5.8.3): + next-intl@4.1.0(next@15.3.1(@babel/core@7.27.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(typescript@5.8.3): dependencies: '@formatjs/intl-localematcher': 0.5.10 negotiator: 1.0.0 - next: 15.3.1(@babel/core@7.26.10)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next: 15.3.1(@babel/core@7.27.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 use-intl: 4.1.0(react@19.1.0) optionalDependencies: @@ -12648,70 +12052,17 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - next@15.2.4(@babel/core@7.26.10)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): - dependencies: - '@next/env': 15.2.4 - '@swc/counter': 0.1.3 - '@swc/helpers': 0.5.15 - busboy: 1.6.0 - caniuse-lite: 1.0.30001715 - postcss: 8.4.31 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - styled-jsx: 5.1.6(@babel/core@7.26.10)(react@19.1.0) - optionalDependencies: - '@next/swc-darwin-arm64': 15.2.4 - '@next/swc-darwin-x64': 15.2.4 - '@next/swc-linux-arm64-gnu': 15.2.4 - '@next/swc-linux-arm64-musl': 15.2.4 - '@next/swc-linux-x64-gnu': 15.2.4 - '@next/swc-linux-x64-musl': 15.2.4 - '@next/swc-win32-arm64-msvc': 15.2.4 - '@next/swc-win32-x64-msvc': 15.2.4 - '@playwright/test': 1.52.0 - sharp: 0.33.5 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - - next@15.2.4(@playwright/test@1.52.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): - dependencies: - '@next/env': 15.2.4 - '@swc/counter': 0.1.3 - '@swc/helpers': 0.5.15 - busboy: 1.6.0 - caniuse-lite: 1.0.30001715 - postcss: 8.4.31 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - styled-jsx: 5.1.6(@babel/core@7.26.10)(react@19.1.0) - optionalDependencies: - '@next/swc-darwin-arm64': 15.2.4 - '@next/swc-darwin-x64': 15.2.4 - '@next/swc-linux-arm64-gnu': 15.2.4 - '@next/swc-linux-arm64-musl': 15.2.4 - '@next/swc-linux-x64-gnu': 15.2.4 - '@next/swc-linux-x64-musl': 15.2.4 - '@next/swc-win32-arm64-msvc': 15.2.4 - '@next/swc-win32-x64-msvc': 15.2.4 - '@playwright/test': 1.52.0 - babel-plugin-react-compiler: 19.1.0-rc.1 - sharp: 0.33.5 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - - next@15.3.1(@babel/core@7.26.10)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + next@15.3.1(@babel/core@7.27.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@next/env': 15.3.1 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 - caniuse-lite: 1.0.30001715 + caniuse-lite: 1.0.30001716 postcss: 8.4.31 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - styled-jsx: 5.1.6(@babel/core@7.26.10)(react@19.1.0) + styled-jsx: 5.1.6(@babel/core@7.27.1)(react@19.1.0) optionalDependencies: '@next/swc-darwin-arm64': 15.3.1 '@next/swc-darwin-x64': 15.3.1 @@ -12733,11 +12084,11 @@ snapshots: '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 - caniuse-lite: 1.0.30001715 + caniuse-lite: 1.0.30001716 postcss: 8.4.31 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - styled-jsx: 5.1.6(@babel/core@7.26.10)(react@19.1.0) + styled-jsx: 5.1.6(@babel/core@7.27.1)(react@19.1.0) optionalDependencies: '@next/swc-darwin-arm64': 15.3.1 '@next/swc-darwin-x64': 15.3.1 @@ -12766,9 +12117,7 @@ snapshots: dependencies: path-key: 3.1.1 - npm-run-path@5.3.0: - dependencies: - path-key: 4.0.0 + nwsapi@2.2.20: {} object-assign@4.1.1: {} @@ -12814,18 +12163,10 @@ snapshots: obuf@1.1.2: optional: true - once@1.4.0: - dependencies: - wrappy: 1.0.2 - onetime@5.1.2: dependencies: mimic-fn: 2.1.0 - onetime@6.0.0: - dependencies: - mimic-fn: 4.0.0 - onetime@7.0.0: dependencies: mimic-function: 5.0.1 @@ -12851,18 +12192,6 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - ora@5.4.1: - dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - ora@8.2.0: dependencies: chalk: 5.4.1 @@ -12889,10 +12218,6 @@ snapshots: dependencies: yocto-queue: 0.1.0 - p-limit@5.0.0: - dependencies: - yocto-queue: 1.2.1 - p-locate@5.0.0: dependencies: p-limit: 3.1.0 @@ -12924,12 +12249,8 @@ snapshots: path-exists@4.0.0: {} - path-is-absolute@1.0.1: {} - path-key@3.1.1: {} - path-key@4.0.0: {} - path-parse@1.0.7: {} path-scurry@1.11.1: @@ -12937,13 +12258,16 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - path-type@4.0.0: {} + path-scurry@2.0.0: + dependencies: + lru-cache: 11.1.0 + minipass: 7.1.2 - pathe@1.1.2: {} + path-type@4.0.0: {} pathe@2.0.3: {} - pathval@1.1.1: {} + pathval@2.0.0: {} peberminta@0.9.0: {} @@ -13019,12 +12343,6 @@ snapshots: optionalDependencies: '@napi-rs/nice': 1.0.1 - pkg-types@1.3.1: - dependencies: - confbox: 0.1.8 - mlly: 1.7.4 - pathe: 2.0.3 - playwright-core@1.52.0: {} playwright@1.52.0: @@ -13131,12 +12449,6 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 - pretty-format@29.7.0: - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.3.1 - prismjs@1.30.0: {} prop-types@15.8.1: @@ -13147,68 +12459,62 @@ snapshots: property-information@7.0.0: {} - psl@1.15.0: - dependencies: - punycode: 2.3.1 - punycode@2.3.1: {} - querystringify@2.2.0: {} - queue-lit@1.5.2: {} queue-microtask@1.2.3: {} quick-lru@5.1.1: {} - radix-ui@1.3.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + radix-ui@1.3.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-accessible-icon': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-accordion': 1.2.8(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-alert-dialog': 1.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-arrow': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-aspect-ratio': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-avatar': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-checkbox': 1.2.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-collapsible': 1.1.8(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-collection': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-accessible-icon': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-accordion': 1.2.8(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-alert-dialog': 1.1.11(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-arrow': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-aspect-ratio': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-avatar': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-checkbox': 1.2.3(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collapsible': 1.1.8(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collection': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-context-menu': 2.2.12(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-dialog': 1.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-context-menu': 2.2.12(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-dialog': 1.1.11(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-dropdown-menu': 2.1.12(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-dropdown-menu': 2.1.12(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-form': 0.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-hover-card': 1.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-label': 2.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-menu': 2.1.12(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-menubar': 1.1.12(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-navigation-menu': 1.2.10(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-one-time-password-field': 0.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-popover': 1.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-popper': 1.2.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-progress': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-radio-group': 1.3.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-scroll-area': 1.2.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-select': 2.2.2(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-separator': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slider': 1.3.2(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-form': 0.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-hover-card': 1.1.11(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-label': 2.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-menu': 2.1.12(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-menubar': 1.1.12(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-navigation-menu': 1.2.10(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-one-time-password-field': 0.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-popover': 1.1.11(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-popper': 1.2.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-progress': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-radio-group': 1.3.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-scroll-area': 1.2.6(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-select': 2.2.2(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-separator': 1.1.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slider': 1.3.2(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-switch': 1.2.2(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-tabs': 1.1.9(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toast': 1.2.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toggle': 1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toggle-group': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toolbar': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-tooltip': 1.2.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-switch': 1.2.2(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-tabs': 1.1.9(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-toast': 1.2.11(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-toggle': 1.1.6(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-toggle-group': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-toolbar': 1.1.7(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-tooltip': 1.2.4(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.2)(react@19.1.0) @@ -13216,33 +12522,33 @@ snapshots: '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.2)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.0(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.0(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.2 - '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@types/react-dom': 19.1.3(@types/react@19.1.2) react-dom@19.1.0(react@19.1.0): dependencies: react: 19.1.0 scheduler: 0.26.0 - react-email@4.0.7(@babel/core@7.26.10)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-email@4.0.11(@babel/core@7.27.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - '@babel/parser': 7.24.5 - '@babel/traverse': 7.25.6 - chalk: 4.1.2 + '@babel/parser': 7.27.1 + '@babel/traverse': 7.27.1 + chalk: 5.4.1 chokidar: 4.0.3 - commander: 11.1.0 - debounce: 2.0.0 - esbuild: 0.25.0 - glob: 10.3.4 - log-symbols: 4.1.0 - mime-types: 2.1.35 - next: 15.2.4(@babel/core@7.26.10)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + commander: 13.1.0 + debounce: 2.2.0 + esbuild: 0.25.3 + glob: 11.0.2 + log-symbols: 7.0.0 + mime-types: 3.0.1 + next: 15.3.1(@babel/core@7.27.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) normalize-path: 3.0.0 - ora: 5.4.1 + ora: 8.2.0 socket.io: 4.8.1 transitivePeerDependencies: - '@babel/core' @@ -13257,21 +12563,21 @@ snapshots: - supports-color - utf-8-validate - react-email@4.0.7(@playwright/test@1.52.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-email@4.0.11(@playwright/test@1.52.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - '@babel/parser': 7.24.5 - '@babel/traverse': 7.25.6 - chalk: 4.1.2 + '@babel/parser': 7.27.1 + '@babel/traverse': 7.27.1 + chalk: 5.4.1 chokidar: 4.0.3 - commander: 11.1.0 - debounce: 2.0.0 - esbuild: 0.25.0 - glob: 10.3.4 - log-symbols: 4.1.0 - mime-types: 2.1.35 - next: 15.2.4(@playwright/test@1.52.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + commander: 13.1.0 + debounce: 2.2.0 + esbuild: 0.25.3 + glob: 11.0.2 + log-symbols: 7.0.0 + mime-types: 3.0.1 + next: 15.3.1(@playwright/test@1.52.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) normalize-path: 3.0.0 - ora: 5.4.1 + ora: 8.2.0 socket.io: 4.8.1 transitivePeerDependencies: - '@babel/core' @@ -13294,8 +12600,6 @@ snapshots: react-is@17.0.2: {} - react-is@18.3.1: {} - react-medium-image-zoom@5.2.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: react: 19.1.0 @@ -13326,11 +12630,11 @@ snapshots: optionalDependencies: '@types/react': 19.1.2 - react-scan@0.3.3(@types/react@19.1.2)(next@15.3.1(@babel/core@7.26.10)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.40.1): + react-scan@0.3.3(@types/react@19.1.2)(next@15.3.1(@babel/core@7.27.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.40.1): dependencies: - '@babel/core': 7.26.10 - '@babel/generator': 7.27.0 - '@babel/types': 7.27.0 + '@babel/core': 7.27.1 + '@babel/generator': 7.27.1 + '@babel/types': 7.27.1 '@clack/core': 0.3.5 '@clack/prompts': 0.8.2 '@pivanov/utils': 0.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -13348,7 +12652,7 @@ snapshots: react-dom: 19.1.0(react@19.1.0) tsx: 4.19.4 optionalDependencies: - next: 15.3.1(@babel/core@7.26.10)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next: 15.3.1(@babel/core@7.27.1)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) unplugin: 2.1.0 transitivePeerDependencies: - '@types/react' @@ -13365,12 +12669,6 @@ snapshots: react@19.1.0: {} - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - readdirp@3.6.0: dependencies: picomatch: 2.3.1 @@ -13418,8 +12716,6 @@ snapshots: get-proto: 1.0.1 which-builtin-type: 1.2.1 - regenerator-runtime@0.14.1: {} - regex-recursion@6.0.2: dependencies: regex-utilities: 2.3.0 @@ -13499,11 +12795,7 @@ snapshots: require-directory@2.1.1: {} - require-from-string@2.0.2: {} - - requires-port@1.0.0: {} - - resend@4.4.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + resend@4.5.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@react-email/render': 1.0.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) transitivePeerDependencies: @@ -13528,11 +12820,6 @@ snapshots: dependencies: lowercase-keys: 3.0.0 - restore-cursor@3.1.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - restore-cursor@5.1.0: dependencies: onetime: 7.0.0 @@ -13566,8 +12853,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.40.1 fsevents: 2.3.3 - rrweb-cssom@0.6.0: {} - rrweb-cssom@0.8.0: {} run-parallel@1.2.0: @@ -13664,33 +12949,6 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.1 - sharp@0.33.5: - dependencies: - color: 4.2.3 - detect-libc: 2.0.4 - semver: 7.7.1 - optionalDependencies: - '@img/sharp-darwin-arm64': 0.33.5 - '@img/sharp-darwin-x64': 0.33.5 - '@img/sharp-libvips-darwin-arm64': 1.0.4 - '@img/sharp-libvips-darwin-x64': 1.0.4 - '@img/sharp-libvips-linux-arm': 1.0.5 - '@img/sharp-libvips-linux-arm64': 1.0.4 - '@img/sharp-libvips-linux-s390x': 1.0.4 - '@img/sharp-libvips-linux-x64': 1.0.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - '@img/sharp-linux-arm': 0.33.5 - '@img/sharp-linux-arm64': 0.33.5 - '@img/sharp-linux-s390x': 0.33.5 - '@img/sharp-linux-x64': 0.33.5 - '@img/sharp-linuxmusl-arm64': 0.33.5 - '@img/sharp-linuxmusl-x64': 0.33.5 - '@img/sharp-wasm32': 0.33.5 - '@img/sharp-win32-ia32': 0.33.5 - '@img/sharp-win32-x64': 0.33.5 - optional: true - sharp@0.34.1: dependencies: color: 4.2.3 @@ -13934,10 +13192,6 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 @@ -13960,14 +13214,8 @@ snapshots: strip-final-newline@2.0.0: {} - strip-final-newline@3.0.0: {} - strip-json-comments@3.1.1: {} - strip-literal@2.1.1: - dependencies: - js-tokens: 9.0.1 - strtok3@9.1.1: dependencies: '@tokenizer/token': 0.3.0 @@ -13981,12 +13229,12 @@ snapshots: dependencies: inline-style-parser: 0.2.4 - styled-jsx@5.1.6(@babel/core@7.26.10)(react@19.1.0): + styled-jsx@5.1.6(@babel/core@7.27.1)(react@19.1.0): dependencies: client-only: 0.0.1 react: 19.1.0 optionalDependencies: - '@babel/core': 7.26.10 + '@babel/core': 7.27.1 sucrase@3.35.0: dependencies: @@ -14028,7 +13276,7 @@ snapshots: tailwind-merge@3.2.0: {} - tailwindcss@4.1.4: {} + tailwindcss@4.1.5: {} tapable@2.2.1: {} @@ -14038,11 +13286,11 @@ snapshots: fast-fifo: 1.3.2 streamx: 2.22.0 - test-exclude@6.0.0: + test-exclude@7.0.1: dependencies: '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 + glob: 10.4.5 + minimatch: 9.0.5 text-decoder@1.2.3: dependencies: @@ -14067,9 +13315,17 @@ snapshots: fdir: 6.4.4(picomatch@4.0.2) picomatch: 4.0.2 - tinypool@0.8.4: {} + tinypool@1.0.2: {} + + tinyrainbow@2.0.0: {} + + tinyspy@3.0.2: {} - tinyspy@2.2.1: {} + tldts-core@6.1.86: {} + + tldts@6.1.86: + dependencies: + tldts-core: 6.1.86 tmp@0.0.33: dependencies: @@ -14084,12 +13340,9 @@ snapshots: '@tokenizer/token': 0.3.0 ieee754: 1.2.1 - tough-cookie@4.1.4: + tough-cookie@5.1.2: dependencies: - psl: 1.15.0 - punycode: 2.3.1 - universalify: 0.2.0 - url-parse: 1.5.10 + tldts: 6.1.86 tr46@1.0.1: dependencies: @@ -14195,8 +13448,6 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-detect@4.1.0: {} - type-fest@0.21.3: {} typed-array-buffer@1.0.3: @@ -14244,8 +13495,6 @@ snapshots: typescript@5.8.3: {} - ufo@1.6.1: {} - uint8array-extras@1.4.0: {} unbox-primitive@1.1.0: @@ -14301,8 +13550,6 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - universalify@0.2.0: {} - unplugin@2.1.0: dependencies: acorn: 8.14.1 @@ -14319,11 +13566,6 @@ snapshots: dependencies: punycode: 2.3.1 - url-parse@1.5.10: - dependencies: - querystringify: 2.2.0 - requires-port: 1.0.0 - use-callback-ref@1.3.3(@types/react@19.1.2)(react@19.1.0): dependencies: react: 19.1.0 @@ -14354,9 +13596,9 @@ snapshots: vary@1.1.2: {} - vaul@1.1.2(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + vaul@1.1.2(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - '@radix-ui/react-dialog': 1.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-dialog': 1.1.11(@types/react-dom@19.1.3(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) transitivePeerDependencies: @@ -14373,13 +13615,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@1.6.1(@types/node@22.15.3)(lightningcss@1.29.2): + vite-node@3.1.2(@types/node@22.15.3)(lightningcss@1.29.2): dependencies: cac: 6.7.14 debug: 4.4.0 - pathe: 1.1.2 - picocolors: 1.1.1 - vite: 5.4.18(@types/node@22.15.3)(lightningcss@1.29.2) + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 5.4.19(@types/node@22.15.3)(lightningcss@1.29.2) transitivePeerDependencies: - '@types/node' - less @@ -14391,18 +13633,18 @@ snapshots: - supports-color - terser - vite-tsconfig-paths@4.3.2(typescript@5.8.3)(vite@5.4.18(@types/node@22.15.3)(lightningcss@1.29.2)): + vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@5.4.19(@types/node@22.15.3)(lightningcss@1.29.2)): dependencies: debug: 4.4.0 globrex: 0.1.2 tsconfck: 3.1.5(typescript@5.8.3) optionalDependencies: - vite: 5.4.18(@types/node@22.15.3)(lightningcss@1.29.2) + vite: 5.4.19(@types/node@22.15.3)(lightningcss@1.29.2) transitivePeerDependencies: - supports-color - typescript - vite@5.4.18(@types/node@22.15.3)(lightningcss@1.29.2): + vite@5.4.19(@types/node@22.15.3)(lightningcss@1.29.2): dependencies: esbuild: 0.21.5 postcss: 8.5.3 @@ -14412,34 +13654,37 @@ snapshots: fsevents: 2.3.3 lightningcss: 1.29.2 - vitest@1.6.1(@types/node@22.15.3)(jsdom@23.2.0)(lightningcss@1.29.2): + vitest@3.1.2(@types/debug@4.1.12)(@types/node@22.15.3)(jsdom@26.1.0)(lightningcss@1.29.2): dependencies: - '@vitest/expect': 1.6.1 - '@vitest/runner': 1.6.1 - '@vitest/snapshot': 1.6.1 - '@vitest/spy': 1.6.1 - '@vitest/utils': 1.6.1 - acorn-walk: 8.3.4 - chai: 4.5.0 + '@vitest/expect': 3.1.2 + '@vitest/mocker': 3.1.2(vite@5.4.19(@types/node@22.15.3)(lightningcss@1.29.2)) + '@vitest/pretty-format': 3.1.2 + '@vitest/runner': 3.1.2 + '@vitest/snapshot': 3.1.2 + '@vitest/spy': 3.1.2 + '@vitest/utils': 3.1.2 + chai: 5.2.0 debug: 4.4.0 - execa: 8.0.1 - local-pkg: 0.5.1 + expect-type: 1.2.1 magic-string: 0.30.17 - pathe: 1.1.2 - picocolors: 1.1.1 + pathe: 2.0.3 std-env: 3.9.0 - strip-literal: 2.1.1 tinybench: 2.9.0 - tinypool: 0.8.4 - vite: 5.4.18(@types/node@22.15.3)(lightningcss@1.29.2) - vite-node: 1.6.1(@types/node@22.15.3)(lightningcss@1.29.2) + tinyexec: 0.3.2 + tinyglobby: 0.2.13 + tinypool: 1.0.2 + tinyrainbow: 2.0.0 + vite: 5.4.19(@types/node@22.15.3)(lightningcss@1.29.2) + vite-node: 3.1.2(@types/node@22.15.3)(lightningcss@1.29.2) why-is-node-running: 2.3.0 optionalDependencies: + '@types/debug': 4.1.12 '@types/node': 22.15.3 - jsdom: 23.2.0 + jsdom: 26.1.0 transitivePeerDependencies: - less - lightningcss + - msw - sass - sass-embedded - stylus @@ -14451,10 +13696,6 @@ snapshots: dependencies: xml-name-validator: 5.0.0 - wcwidth@1.0.1: - dependencies: - defaults: 1.0.4 - webidl-conversions@4.0.2: {} webidl-conversions@7.0.0: {} @@ -14554,8 +13795,6 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 - wrappy@1.0.2: {} - ws@8.17.1: {} ws@8.18.1: {} @@ -14592,10 +13831,10 @@ snapshots: yocto-queue@0.1.0: {} - yocto-queue@1.2.1: {} - yoctocolors-cjs@2.1.2: {} + yoctocolors@2.1.1: {} + zod-validation-error@3.4.0(zod@3.24.3): dependencies: zod: 3.24.3