From 456467631ac5c76d37ade40ce9cc0578dbec0fae Mon Sep 17 00:00:00 2001 From: aXenDeveloper Date: Tue, 29 Jul 2025 08:49:44 +0200 Subject: [PATCH 1/6] feat: Add email template configuration --- .github/copilot-instructions.md | 15 +- apps/api/src/vitnode.api.config.ts | 4 + .../docs/content/docs/dev/email/templates.mdx | 26 ++- apps/docs/package.json | 2 +- apps/docs/public/logo_vitnode_dark.png | Bin 0 -> 44471 bytes apps/docs/src/vitnode.api.config.ts | 4 + .../src/api/middlewares/global.middleware.ts | 16 +- packages/vitnode/src/api/models/email.ts | 21 ++- .../vitnode/src/emails/default-template.tsx | 163 +++++++++++------- packages/vitnode/src/emails/test-template.tsx | 40 ++++- packages/vitnode/src/vitnode.config.ts | 3 + 11 files changed, 199 insertions(+), 95 deletions(-) create mode 100644 apps/docs/public/logo_vitnode_dark.png diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 0a13a63ca..89dac734b 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -1,5 +1,7 @@ # VitNode AI Coding Agent Guidelines (Extended) +The repository is a monorepo for the VitNode framework, which includes a backend API, frontend documentation site, and shared packages. The codebase uses modern web technologies and follows specific conventions for development based on Next.js 15 and Hono.js 4. + ## Architecture & Key Patterns - **Monorepo Structure:** @@ -8,7 +10,7 @@ - `plugins/` for extendable features - **Frontend:** - Next.js 15, App Router, Server Components - - Use `vitnode/lib/navigation` for navigation (not `next/navigation`) + - Avoid using `next/navigation` directly, use `vitnode/lib/navigation` - Forms: Use `react-hook-form@7`, server actions for mutations - UI: Shadcn UI, Tailwind CSS 4, dark/light mode with system detection - i18n: Use `next-intl`, `t('key')` for translations, `getTranslation` (server), `useTranslation` (client) @@ -61,3 +63,14 @@ --- For unclear or missing patterns, ask for clarification or request more examples from maintainers. + +## New Code + +If you add new code or change existing code, always verify that +everything still works by running _each_ of the following checks: + +1. `npm run lint` to run the linter. +2. `npm run lint:fix` to fix any linting issues. +3. `npm run test` to run the tests. + +Complete the task only after all checks pass. diff --git a/apps/api/src/vitnode.api.config.ts b/apps/api/src/vitnode.api.config.ts index b94db000f..b0e127a3c 100644 --- a/apps/api/src/vitnode.api.config.ts +++ b/apps/api/src/vitnode.api.config.ts @@ -25,6 +25,10 @@ export const vitNodeApiConfig = buildApiConfig({ password: process.env.NODE_MAILER_PASSWORD, user: process.env.NOD_EMAILER_USER, }), + logo: { + text: 'VitNode Email Test', + src: 'http://localhost:3000/logo_vitnode_dark.png', + }, }, metadata: { title: 'VitNode API', diff --git a/apps/docs/content/docs/dev/email/templates.mdx b/apps/docs/content/docs/dev/email/templates.mdx index 249dd4563..fd9f3356b 100644 --- a/apps/docs/content/docs/dev/email/templates.mdx +++ b/apps/docs/content/docs/dev/email/templates.mdx @@ -9,10 +9,6 @@ description: Template for email messages VitNode uses [React Email](https://react.email/) to create email templates. This allows us to create responsive and customizable email templates that can be used in various applications with React components. - - The current `TailwindCSS` version used for this component is **3.4.10** - - ## Usage Inside your: @@ -24,10 +20,20 @@ you can create your email templates. The templates should be React components th ```tsx title="src/emails/test-template.tsx" import { Text } from '@react-email/components'; +import DefaultTemplateEmail, { + type DefaultTemplateEmailProps, +} from '@vitnode/core/emails/default-template'; -export default function TestTemplateEmail() { - return This is a test email template.; +export default function TestTemplateEmail(props: DefaultTemplateEmailProps) { + return ( + + This is a test email template. + + ); } + +TestTemplateEmail.PreviewProps = + DefaultTemplateEmail.PreviewProps satisfies DefaultTemplateEmailProps; ``` ```ts title="src/api/modules/users/routes/test.route.ts" @@ -51,6 +57,14 @@ export const testRoute = buildRoute({ }); ``` +## TailwindCSS + +We implemented [TailwindCSS](https://react.email/docs/components/tailwind) in the email templates to allow you to use utility classes for styling. You can use Tailwind classes directly in your email components. + + + The current `TailwindCSS` version used is **3.4.10**. + + ## Components diff --git a/apps/docs/package.json b/apps/docs/package.json index f321f7180..0ab08ccc8 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -9,7 +9,7 @@ "init": "vitnode init", "dev": "vitnode init && next dev --turbopack", "dev:email": "email dev --dir src/emails", - "build": "next build", + "build": "next build --turbopack", "start": "next start", "lint": "eslint .", "lint:fix": "eslint . --fix", diff --git a/apps/docs/public/logo_vitnode_dark.png b/apps/docs/public/logo_vitnode_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..10b2c722e9439eca65113284b31e2a9a3d72cde9 GIT binary patch literal 44471 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['captcha']; - email?: { - adapter?: EmailApiPlugin; - options?: { - logo?: { - className?: string; - src: Blob | string; - }; - }; - }; + email?: VitNodeApiConfig['email']; metadata: { shortTitle?: string; title: string; diff --git a/packages/vitnode/src/api/models/email.ts b/packages/vitnode/src/api/models/email.ts index fbe61b3b8..1b109efaa 100644 --- a/packages/vitnode/src/api/models/email.ts +++ b/packages/vitnode/src/api/models/email.ts @@ -4,7 +4,7 @@ import type React from 'react'; import { render } from '@react-email/components'; import { HTTPException } from 'hono/http-exception'; -import DefaultTemplateEmail from '../../emails/default-template'; +import { type DefaultTemplateEmailProps } from '../../emails/default-template'; import { CONFIG } from '../../lib/config'; export interface EmailApiPlugin { @@ -19,7 +19,9 @@ export interface EmailApiPlugin { } export interface EmailModelSendArgs { - content: (props: { locale: string }) => React.ReactNode; + content: ( + props: Omit, + ) => React.ReactNode; html?: string; replyTo?: string; subject: string; @@ -67,14 +69,15 @@ export class EmailModel { const htmlContent = html ?? - DefaultTemplateEmail({ - children: content({ locale }), - metadata: { - ...core.metadata, - url: CONFIG.web.href, - }, - logo: core.email?.options?.logo, + content({ locale, + templateProps: { + metadata: { + ...core.metadata, + url: CONFIG.web.href, + }, + logo: core.email?.logo, + }, messages, }); diff --git a/packages/vitnode/src/emails/default-template.tsx b/packages/vitnode/src/emails/default-template.tsx index dfb6f3a72..896e7d66e 100644 --- a/packages/vitnode/src/emails/default-template.tsx +++ b/packages/vitnode/src/emails/default-template.tsx @@ -1,62 +1,114 @@ +/* eslint-disable @typescript-eslint/dot-notation */ import { Body, - Button, Container, Head, - Heading, Html, Img, Link, Preview, Section, Tailwind, + type TailwindConfig, Text, } from '@react-email/components'; -import { createTranslator } from 'use-intl'; import { CONFIG } from '../lib/config'; -interface DefaultTemplateEmailProps { - children: React.ReactNode; - head?: React.ReactNode; +export interface DefaultTemplateEmailProps { locale: string; - logo?: { - className?: string; - src: Blob | string; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + messages: Record; + templateProps: { + head?: React.ReactNode; + logo?: { + src?: string; + text?: string; + }; + metadata: { + shortTitle?: string; + title: string; + url: string; + }; + previewText?: string; + tailwindConfig?: TailwindConfig; }; - messages: Record; - metadata: { - shortTitle?: string; - title: string; - url: string; - }; - previewText?: string; } export default function DefaultTemplateEmail({ - previewText, - head, children, - logo, - metadata, - messages, locale, -}: DefaultTemplateEmailProps) { - const t = createTranslator({ locale, messages }); - + templateProps: { logo, metadata, previewText, head, tailwindConfig }, +}: DefaultTemplateEmailProps & { children: React.ReactNode }) { return ( {head} {previewText && {previewText}} -
- {logo ? ( +
+ {logo?.src ? ( {metadata.title} ) : ( - {metadata.title} + {logo?.text ?? metadata.title} )}
-
- - Join Us for an Exciting Event! - {t('core.auth.sign_in.desc')} - - - Hello - - - +
{children} +
-
- - {metadata.shortTitle ?? metadata.title} ©{' '} - {new Date().getFullYear()} - -
+
+ + {metadata.shortTitle ?? metadata.title} ©{' '} + {new Date().getFullYear()} +
@@ -110,14 +149,16 @@ export default function DefaultTemplateEmail({ DefaultTemplateEmail.PreviewProps = { children: 'This is a preview text for the email template.', - metadata: { - title: 'VitNode - Email Template', - shortTitle: 'VitNode', - url: CONFIG.web.href, - }, - logo: { - src: 'https://www.reactemailtemplate.com/_next/static/media/reactemailtemplate-logo.b3fb12d9.png', + templateProps: { + metadata: { + title: 'VitNode - Email Template', + shortTitle: 'VitNode', + url: CONFIG.web.href, + }, + logo: { + src: 'http://localhost:3000/logo_vitnode_dark.png', + }, }, messages: {}, locale: 'en', -} satisfies DefaultTemplateEmailProps; +} satisfies DefaultTemplateEmailProps & { children: React.ReactNode }; diff --git a/packages/vitnode/src/emails/test-template.tsx b/packages/vitnode/src/emails/test-template.tsx index 0bd45ffea..81eebce63 100644 --- a/packages/vitnode/src/emails/test-template.tsx +++ b/packages/vitnode/src/emails/test-template.tsx @@ -1,5 +1,39 @@ -import { Text } from '@react-email/components'; +import { Button, Text } from '@react-email/components'; +import { createTranslator } from 'use-intl'; -export default function TestTemplateEmail() { - return This is a test email template.; +import DefaultTemplateEmail, { + type DefaultTemplateEmailProps, +} from './default-template'; + +export default function TestTemplateEmail({ + messages, + locale, + ...props +}: DefaultTemplateEmailProps) { + const t = createTranslator({ locale, messages }); + + return ( + + Hello - {t('core.auth.sign_in.desc')} + + + ); } + +TestTemplateEmail.PreviewProps = { + ...DefaultTemplateEmail.PreviewProps, + messages: { + core: { + auth: { + sign_in: { + desc: 'Sign in to your account to access exclusive features and content.', + }, + }, + }, + }, +} satisfies DefaultTemplateEmailProps; diff --git a/packages/vitnode/src/vitnode.config.ts b/packages/vitnode/src/vitnode.config.ts index 8c9ba4dde..d4b8c1c93 100644 --- a/packages/vitnode/src/vitnode.config.ts +++ b/packages/vitnode/src/vitnode.config.ts @@ -5,6 +5,7 @@ import type { IRateLimiterOptions } from 'rate-limiter-flexible'; import type { BuildPluginApiReturn } from './api/lib/plugin'; import type { EmailApiPlugin } from './api/models/email'; import type { SSOApiPlugin } from './api/models/sso'; +import type { DefaultTemplateEmailProps } from './emails/default-template'; import type { BuildPluginReturn } from './lib/plugin'; export interface LocaleConfig { @@ -49,6 +50,8 @@ export interface VitNodeApiConfig { dbProvider: PostgresJsDatabase; email?: { adapter?: EmailApiPlugin; + logo?: DefaultTemplateEmailProps['templateProps']['logo']; + tailwindConfig?: DefaultTemplateEmailProps['templateProps']['tailwindConfig']; }; metadata: { shortTitle?: string; From 5945ae594df90026bb1c79f3e610737f3f5fc2f3 Mon Sep 17 00:00:00 2001 From: aXenDeveloper Date: Tue, 29 Jul 2025 09:51:56 +0200 Subject: [PATCH 2/6] =?UTF-8?q?chore(docs):=20=F0=9F=94=A7=20Remove=20`--t?= =?UTF-8?q?urbopack`=20flag=20from=20build=20script?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/docs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/package.json b/apps/docs/package.json index 0ab08ccc8..f321f7180 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -9,7 +9,7 @@ "init": "vitnode init", "dev": "vitnode init && next dev --turbopack", "dev:email": "email dev --dir src/emails", - "build": "next build --turbopack", + "build": "next build", "start": "next start", "lint": "eslint .", "lint:fix": "eslint . --fix", From 743c855d6055bd4a25ee6d4bcb57dcf4a4555536 Mon Sep 17 00:00:00 2001 From: aXenDeveloper Date: Sat, 2 Aug 2025 10:21:40 +0200 Subject: [PATCH 3/6] chore: Update packages --- .github/workflows/build-lint-test.yml | 2 +- .github/workflows/bump_publish.yml | 2 +- apps/api/package.json | 22 +- apps/docs/package.json | 34 +- package.json | 6 +- packages/create-vitnode-app/package.json | 4 +- .../src/create/create-package-json.ts | 32 +- packages/eslint/package.json | 2 +- packages/vitnode/package.json | 36 +- plugins/blog/package.json | 20 +- pnpm-lock.yaml | 3163 +++++++++-------- 11 files changed, 1680 insertions(+), 1643 deletions(-) diff --git a/.github/workflows/build-lint-test.yml b/.github/workflows/build-lint-test.yml index 1e73d61c5..0ad71f6c6 100644 --- a/.github/workflows/build-lint-test.yml +++ b/.github/workflows/build-lint-test.yml @@ -22,7 +22,7 @@ jobs: - uses: pnpm/action-setup@v4 name: Install pnpm with: - version: 10.13.1 + version: 10.14.0 - name: Install Node.js uses: actions/setup-node@v4 diff --git a/.github/workflows/bump_publish.yml b/.github/workflows/bump_publish.yml index 01eb480cc..66304f60c 100644 --- a/.github/workflows/bump_publish.yml +++ b/.github/workflows/bump_publish.yml @@ -52,7 +52,7 @@ jobs: - uses: pnpm/action-setup@v4 name: Install pnpm with: - version: 10.13.1 + version: 10.14.0 - name: Install Node.js uses: actions/setup-node@v4 diff --git a/apps/api/package.json b/apps/api/package.json index 6db1dcbf9..6fea6820d 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -17,27 +17,27 @@ "dependencies": { "@hono/zod-openapi": "^1.0.2", "@hono/zod-validator": "^0.7.2", - "@react-email/components": "^0.3.2", + "@react-email/components": "^0.3.3", "@vitnode/core": "workspace:*", "drizzle-kit": "^0.31.4", - "drizzle-orm": "^0.44.3", - "hono": "^4.8.9", + "drizzle-orm": "^0.44.4", + "hono": "^4.8.10", "next-intl": "^4.3.4", - "react": "^19.1.0", - "react-dom": "^19.1.0", - "zod": "^4.0.10" + "react": "^19.1.1", + "react-dom": "^19.1.1", + "zod": "^4.0.14" }, "devDependencies": { - "@hono/node-server": "^1.17.1", + "@hono/node-server": "^1.18.0", "@types/node": "^24.1.0", - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitnode/eslint-config": "workspace:*", "dotenv": "^17.2.1", "eslint": "^9.32.0", - "react-email": "^4.2.4", + "react-email": "^4.2.7", "tsc-alias": "^1.8.16", "tsx": "^4.20.3", - "typescript": "^5.8.3" + "typescript": "^5.9.2" } } diff --git a/apps/docs/package.json b/apps/docs/package.json index f321f7180..040078229 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -27,37 +27,37 @@ "@vitnode/core": "workspace:*", "babel-plugin-react-compiler": "19.1.0-rc.2", "drizzle-kit": "^0.31.4", - "drizzle-orm": "^0.44.3", - "fumadocs-core": "^15.6.6", - "fumadocs-mdx": "^11.7.1", - "fumadocs-ui": "^15.6.6", - "hono": "^4.8.9", - "lucide-react": "^0.526.0", - "motion": "^12.23.9", - "next": "^15.4.4", + "drizzle-orm": "^0.44.4", + "fumadocs-core": "^15.6.7", + "fumadocs-mdx": "^11.7.3", + "fumadocs-ui": "^15.6.7", + "hono": "^4.8.10", + "lucide-react": "^0.536.0", + "motion": "^12.23.12", + "next": "^15.4.5", "next-intl": "^4.3.4", - "react": "^19.1.0", - "react-dom": "^19.1.0", + "react": "^19.1.1", + "react-dom": "^19.1.1", "react-hook-form": "^7.61.1", "react-use": "^17.6.0", "sonner": "^2.0.6" }, "devDependencies": { - "@playwright/test": "^1.54.1", + "@playwright/test": "^1.54.2", "@tailwindcss/postcss": "^4.1.11", "@types/mdx": "^2.0.13", "@types/node": "^24.1.0", - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitnode/eslint-config": "workspace:*", "class-variance-authority": "^0.7.1", "eslint": "^9.32.0", "postcss": "^8.5.6", - "react-email": "^4.2.4", - "shiki": "^3.8.1", + "react-email": "^4.2.7", + "shiki": "^3.9.1", "tailwindcss": "^4.1.11", "tw-animate-css": "^1.3.6", - "typescript": "^5.8.3", - "zod": "^4.0.10" + "typescript": "^5.9.2", + "zod": "^4.0.14" } } diff --git a/package.json b/package.json index e8fa4463f..ec0775b99 100644 --- a/package.json +++ b/package.json @@ -24,13 +24,13 @@ "prettier-plugin-tailwindcss": "^0.6.14", "tsx": "^4.20.3", "turbo": "^2.5.5", - "typescript": "^5.8.3", - "zod": "^4.0.10" + "typescript": "^5.9.2", + "zod": "^4.0.14" }, "engines": { "node": ">=22" }, - "packageManager": "pnpm@10.13.1", + "packageManager": "pnpm@10.14.0", "workspaces": [ "apps/*", "packages/*", diff --git a/packages/create-vitnode-app/package.json b/packages/create-vitnode-app/package.json index 1e1b7e81d..8ef1048ae 100644 --- a/packages/create-vitnode-app/package.json +++ b/packages/create-vitnode-app/package.json @@ -28,7 +28,7 @@ "typescript" ], "dependencies": { - "@inquirer/prompts": "^7.7.1", + "@inquirer/prompts": "^7.8.0", "commander": "^14.0.0", "ora": "^8.2.0", "picocolors": "^1.1.1", @@ -40,6 +40,6 @@ "@types/validate-npm-package-name": "^4.0.2", "@vitnode/eslint-config": "workspace:*", "eslint": "^9.32.0", - "typescript": "^5.8.3" + "typescript": "^5.9.2" } } diff --git a/packages/create-vitnode-app/src/create/create-package-json.ts b/packages/create-vitnode-app/src/create/create-package-json.ts index d213bb749..376a7b211 100644 --- a/packages/create-vitnode-app/src/create/create-package-json.ts +++ b/packages/create-vitnode-app/src/create/create-package-json.ts @@ -71,7 +71,7 @@ export const createPackageJSON = async ({ : {}), turbo: '^2.5.5', typescript: '^5.8.3', - zod: '^4.0.10', + zod: '^4.0.14', }, packageManager: `${packageManager}@${availablePackageManagers[packageManager]}`, workspaces: ['apps/*', 'plugins/*'], @@ -118,18 +118,18 @@ export const createPackageJSON = async ({ dependencies: { '@hono/zod-openapi': '^1.0.2', '@hono/zod-validator': '^0.7.2', - '@react-email/components': '^0.3.2', + '@react-email/components': '^0.4.0', '@vitnode/core': pkgVitNodeVersion, 'drizzle-kit': '^0.31.3', - 'drizzle-orm': '^0.44.3', - hono: '^4.8.9', + 'drizzle-orm': '^0.44.4', + hono: '^4.8.10', 'next-intl': '^4.3.1', react: '^19.1', 'react-dom': '^19.1', - zod: '^4.0.10', + zod: '^4.0.14', }, devDependencies: { - '@hono/node-server': '^1.17.1', + '@hono/node-server': '^1.18.0', ...(packageManager === 'bun' ? { '@types/bun': 'latest', @@ -151,7 +151,7 @@ export const createPackageJSON = async ({ : {}), } : {}), - 'react-email': '^4.2.4', + 'react-email': '^4.2.7', 'tsc-alias': '^1.8.16', tsx: '^4.20.3', typescript: '^5.8.3', @@ -188,20 +188,20 @@ export const createPackageJSON = async ({ '@hono/zod-openapi': '^1.0.2', '@hono/zod-validator': '^0.7.2', '@hookform/resolvers': '^5.1.1', - '@react-email/components': '^0.3.2', + '@react-email/components': '^0.4.0', '@vitnode/core': pkgVitNodeVersion, 'babel-plugin-react-compiler': '19.1.0-rc.2', 'drizzle-kit': '^0.31.4', - 'drizzle-orm': '^0.44.3', - hono: '^4.8.9', - 'lucide-react': '^0.526.0', - next: '^15.4.4', + 'drizzle-orm': '^0.44.4', + hono: '^4.8.10', + 'lucide-react': '^0.536.0', + next: '^15.4.5', 'next-intl': '^4.3.4', react: '^19.1', 'react-dom': '^19.1', 'react-hook-form': '^7.61.1', sonner: '^2.0.6', - zod: '^4.0.10', + zod: '^4.0.14', }, devDependencies: { '@tailwindcss/postcss': '^4.1.11', @@ -216,7 +216,7 @@ export const createPackageJSON = async ({ prettier: '^3.6.2', } : {}), - 'react-email': '^4.2.4', + 'react-email': '^4.2.7', turbo: '^2.5.5', tailwindcss: '^4.1.11', 'tw-animate-css': '^1.3.6', @@ -255,7 +255,7 @@ export const createPackageJSON = async ({ dependencies: { '@vitnode/core': pkgVitNodeVersion, 'babel-plugin-react-compiler': '19.1.0-rc.2', - 'lucide-react': '^0.526.0', + 'lucide-react': '^0.536.0', next: '^15.4.4', 'next-intl': '^4.3.4', react: '^19.1', @@ -281,7 +281,7 @@ export const createPackageJSON = async ({ tailwindcss: '^4.1.11', 'tw-animate-css': '^1.3.6', typescript: '^5.8.3', - zod: '^4.0.10', + zod: '^4.0.14', }, }; diff --git a/packages/eslint/package.json b/packages/eslint/package.json index 6b1bb8ec9..09f9d2fbb 100644 --- a/packages/eslint/package.json +++ b/packages/eslint/package.json @@ -36,7 +36,7 @@ "peerDependencies": { "eslint": "^9.0.0", "prettier": "^3.0.0", - "typescript": "5.8.x" + "typescript": "5.9.x" }, "devDependencies": { "typescript": "^5.8.3" diff --git a/packages/vitnode/package.json b/packages/vitnode/package.json index 5d686ca2f..44c1d258f 100644 --- a/packages/vitnode/package.json +++ b/packages/vitnode/package.json @@ -33,23 +33,23 @@ "react": "19.1.x", "react-dom": "19.1.x", "react-hook-form": "^7.x.x", - "typescript": "^5.8.x", + "typescript": "^5.9.x", "zod": "4.x.x" }, "devDependencies": { "@hono/zod-openapi": "^1.0.2", "@hono/zod-validator": "^0.7.2", - "@hookform/resolvers": "^5.2.0", - "@react-email/components": "^0.3.2", - "@react-email/preview-server": "^4.2.4", + "@hookform/resolvers": "^5.2.1", + "@react-email/components": "^0.4.0", + "@react-email/preview-server": "^4.2.7", "@swc/cli": "0.6.0", - "@swc/core": "^1.13.2", + "@swc/core": "^1.13.3", "@testing-library/dom": "^10.4.1", "@testing-library/react": "^16.3.0", "@types/node": "^24.1.0", "@types/nodemailer": "^6.4.17", - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "^4.7.0", "@vitest/coverage-v8": "^3.2.4", "@vitnode/eslint-config": "workspace:*", @@ -57,16 +57,16 @@ "concurrently": "^9.2.0", "dotenv": "^17.2.1", "drizzle-kit": "^0.31.4", - "drizzle-orm": "^0.44.3", + "drizzle-orm": "^0.44.4", "eslint": "^9.32.0", - "hono": "^4.8.9", + "hono": "^4.8.10", "jsdom": "^26.1.0", - "lucide-react": "^0.526.0", - "next": "^15.4.4", + "lucide-react": "^0.536.0", + "next": "^15.4.5", "next-intl": "^4.3.4", - "react": "^19.1.0", - "react-dom": "^19.1.0", - "react-email": "^4.2.4", + "react": "^19.1.1", + "react-dom": "^19.1.1", + "react-email": "^4.2.7", "react-hook-form": "^7.61.1", "sonner": "^2.0.6", "tailwindcss": "^4.1.11", @@ -74,10 +74,10 @@ "tsup": "^8.5.0", "tsx": "^4.20.3", "tw-animate-css": "^1.3.6", - "typescript": "^5.8.3", + "typescript": "^5.9.2", "vite-tsconfig-paths": "^5.1.4", "vitest": "^3.2.4", - "zod": "^4.0.10" + "zod": "^4.0.14" }, "bin": { "vitnode": "./dist/scripts/scripts.js" @@ -112,12 +112,12 @@ "dependencies": { "@dnd-kit/core": "^6.3.1", "@hono/swagger-ui": "^0.5.2", - "@tanstack/react-query": "^5.83.0", + "@tanstack/react-query": "^5.84.1", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", "input-otp": "^1.4.2", - "motion": "^12.23.9", + "motion": "^12.23.12", "next-themes": "^0.4.6", "nodemailer": "^7.0.5", "postgres": "^3.4.7", diff --git a/plugins/blog/package.json b/plugins/blog/package.json index 24686fb10..72e131287 100644 --- a/plugins/blog/package.json +++ b/plugins/blog/package.json @@ -36,26 +36,26 @@ "@hono/zod-openapi": "^1.0.2", "@vitnode/core": "workspace:*", "drizzle-kit": "^0.31.4", - "drizzle-orm": "^0.44.3", - "hono": "^4.8.9", + "drizzle-orm": "^0.44.4", + "hono": "^4.8.10", "lucide-react": "^0.526.0", - "next": "^15.4.4", + "next": "^15.4.5", "next-intl": "^4.3.4", - "react": "^19.1.0", - "react-dom": "^19.1.0", + "react": "^19.1.1", + "react-dom": "^19.1.1", "react-hook-form": "^7.61.1", "sonner": "^2.0.6", - "zod": "^4.0.10" + "zod": "^4.0.14" }, "devDependencies": { "@swc/cli": "0.6.0", - "@swc/core": "^1.13.2", - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@swc/core": "^1.13.3", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitnode/eslint-config": "workspace:*", "concurrently": "^9.2.0", "eslint": "^9.32.0", "tsc-alias": "^1.8.16", - "typescript": "^5.8.3" + "typescript": "^5.9.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8b526d55d..30b41f55e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,23 +27,23 @@ importers: specifier: ^2.5.5 version: 2.5.5 typescript: - specifier: ^5.8.3 - version: 5.8.3 + specifier: ^5.9.2 + version: 5.9.2 zod: - specifier: ^4.0.10 - version: 4.0.10 + specifier: ^4.0.14 + version: 4.0.14 apps/api: dependencies: '@hono/zod-openapi': specifier: ^1.0.2 - version: 1.0.2(hono@4.8.9)(zod@4.0.10) + version: 1.0.2(hono@4.8.10)(zod@4.0.14) '@hono/zod-validator': specifier: ^0.7.2 - version: 0.7.2(hono@4.8.9)(zod@4.0.10) + version: 0.7.2(hono@4.8.10)(zod@4.0.14) '@react-email/components': - specifier: ^0.3.2 - version: 0.3.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^0.3.3 + version: 0.3.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@vitnode/core': specifier: workspace:* version: link:../../packages/vitnode @@ -51,36 +51,36 @@ importers: specifier: ^0.31.4 version: 0.31.4 drizzle-orm: - specifier: ^0.44.3 - version: 0.44.3(@neondatabase/serverless@0.10.4)(@types/pg@8.11.10)(gel@2.1.0)(pg@8.13.1)(postgres@3.4.7) + specifier: ^0.44.4 + version: 0.44.4(@neondatabase/serverless@0.10.4)(@types/pg@8.11.10)(gel@2.1.0)(pg@8.13.1)(postgres@3.4.7) hono: - specifier: ^4.8.9 - version: 4.8.9 + specifier: ^4.8.10 + version: 4.8.10 next-intl: specifier: ^4.3.4 - version: 4.3.4(next@15.4.4(@playwright/test@1.54.1)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + version: 4.3.4(next@15.4.5(@playwright/test@1.54.2)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)(typescript@5.9.2) react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) zod: - specifier: ^4.0.10 - version: 4.0.10 + specifier: ^4.0.14 + version: 4.0.14 devDependencies: '@hono/node-server': - specifier: ^1.17.1 - version: 1.17.1(hono@4.8.9) + specifier: ^1.18.0 + version: 1.18.0(hono@4.8.10) '@types/node': specifier: ^24.1.0 version: 24.1.0 '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitnode/eslint-config': specifier: workspace:* version: link:../../packages/eslint @@ -91,8 +91,8 @@ importers: specifier: ^9.32.0 version: 9.32.0(jiti@2.5.1) react-email: - specifier: ^4.2.4 - version: 4.2.4 + specifier: ^4.2.7 + version: 4.2.7 tsc-alias: specifier: ^1.8.16 version: 1.8.16 @@ -100,17 +100,17 @@ importers: specifier: ^4.20.3 version: 4.20.3 typescript: - specifier: ^5.8.3 - version: 5.8.3 + specifier: ^5.9.2 + version: 5.9.2 apps/docs: dependencies: '@hono/zod-openapi': specifier: ^1.0.2 - version: 1.0.2(hono@4.8.9)(zod@4.0.10) + version: 1.0.2(hono@4.8.10)(zod@4.0.14) '@hono/zod-validator': specifier: ^0.7.2 - version: 0.7.2(hono@4.8.9)(zod@4.0.10) + version: 0.7.2(hono@4.8.10)(zod@4.0.14) '@vitnode/blog': specifier: workspace:* version: link:../../plugins/blog @@ -124,51 +124,51 @@ importers: specifier: ^0.31.4 version: 0.31.4 drizzle-orm: - specifier: ^0.44.3 - version: 0.44.3(@neondatabase/serverless@0.10.4)(@types/pg@8.11.10)(gel@2.1.0)(pg@8.13.1)(postgres@3.4.7) + specifier: ^0.44.4 + version: 0.44.4(@neondatabase/serverless@0.10.4)(@types/pg@8.11.10)(gel@2.1.0)(pg@8.13.1)(postgres@3.4.7) fumadocs-core: - specifier: ^15.6.6 - version: 15.6.6(@types/react@19.1.8)(next@15.4.4(@playwright/test@1.54.1)(babel-plugin-react-compiler@19.1.0-rc.2)(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) + specifier: ^15.6.7 + version: 15.6.7(@types/react@19.1.9)(next@15.4.5(@playwright/test@1.54.2)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) fumadocs-mdx: - specifier: ^11.7.1 - version: 11.7.1(acorn@8.15.0)(fumadocs-core@15.6.6(@types/react@19.1.8)(next@15.4.4(@playwright/test@1.54.1)(babel-plugin-react-compiler@19.1.0-rc.2)(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.4.4(@playwright/test@1.54.1)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)) + specifier: ^11.7.3 + version: 11.7.3(acorn@8.15.0)(fumadocs-core@15.6.7(@types/react@19.1.9)(next@15.4.5(@playwright/test@1.54.2)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(next@15.4.5(@playwright/test@1.54.2)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)) fumadocs-ui: - specifier: ^15.6.6 - version: 15.6.6(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(next@15.4.4(@playwright/test@1.54.1)(babel-plugin-react-compiler@19.1.0-rc.2)(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.11) + specifier: ^15.6.7 + version: 15.6.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(next@15.4.5(@playwright/test@1.54.2)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.11) hono: - specifier: ^4.8.9 - version: 4.8.9 + specifier: ^4.8.10 + version: 4.8.10 lucide-react: - specifier: ^0.526.0 - version: 0.526.0(react@19.1.0) + specifier: ^0.536.0 + version: 0.536.0(react@19.1.1) motion: - specifier: ^12.23.9 - version: 12.23.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^12.23.12 + version: 12.23.12(react-dom@19.1.1(react@19.1.1))(react@19.1.1) next: - specifier: ^15.4.4 - version: 15.4.4(@playwright/test@1.54.1)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^15.4.5 + version: 15.4.5(@playwright/test@1.54.2)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) next-intl: specifier: ^4.3.4 - version: 4.3.4(next@15.4.4(@playwright/test@1.54.1)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + version: 4.3.4(next@15.4.5(@playwright/test@1.54.2)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)(typescript@5.9.2) react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) react-hook-form: specifier: ^7.61.1 - version: 7.61.1(react@19.1.0) + version: 7.61.1(react@19.1.1) react-use: specifier: ^17.6.0 - version: 17.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 17.6.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) sonner: specifier: ^2.0.6 - version: 2.0.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.0.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1) devDependencies: '@playwright/test': - specifier: ^1.54.1 - version: 1.54.1 + specifier: ^1.54.2 + version: 1.54.2 '@tailwindcss/postcss': specifier: ^4.1.11 version: 4.1.11 @@ -179,11 +179,11 @@ importers: specifier: ^24.1.0 version: 24.1.0 '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitnode/eslint-config': specifier: workspace:* version: link:../../packages/eslint @@ -197,11 +197,11 @@ importers: specifier: ^8.5.6 version: 8.5.6 react-email: - specifier: ^4.2.4 - version: 4.2.4 + specifier: ^4.2.7 + version: 4.2.7 shiki: - specifier: ^3.8.1 - version: 3.8.1 + specifier: ^3.9.1 + version: 3.9.1 tailwindcss: specifier: ^4.1.11 version: 4.1.11 @@ -209,17 +209,17 @@ importers: specifier: ^1.3.6 version: 1.3.6 typescript: - specifier: ^5.8.3 - version: 5.8.3 + specifier: ^5.9.2 + version: 5.9.2 zod: - specifier: ^4.0.10 - version: 4.0.10 + specifier: ^4.0.14 + version: 4.0.14 packages/create-vitnode-app: dependencies: '@inquirer/prompts': - specifier: ^7.7.1 - version: 7.7.1(@types/node@24.1.0) + specifier: ^7.8.0 + version: 7.8.0(@types/node@24.1.0) commander: specifier: ^14.0.0 version: 14.0.0 @@ -249,14 +249,14 @@ importers: specifier: ^9.32.0 version: 9.32.0(jiti@2.5.1) typescript: - specifier: ^5.8.3 - version: 5.8.3 + specifier: ^5.9.2 + version: 5.9.2 packages/eslint: dependencies: '@eslint-react/eslint-plugin': specifier: ^1.52.3 - version: 1.52.3(eslint@9.32.0(jiti@2.5.1))(ts-api-utils@2.1.0(typescript@5.8.3))(typescript@5.8.3) + version: 1.52.3(eslint@9.32.0(jiti@2.5.1))(ts-api-utils@2.1.0(typescript@5.9.2))(typescript@5.9.2) '@eslint/js': specifier: ^9.32.0 version: 9.32.0 @@ -271,7 +271,7 @@ importers: version: 6.10.2(eslint@9.32.0(jiti@2.5.1)) eslint-plugin-perfectionist: specifier: ^4.15.0 - version: 4.15.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + version: 4.15.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) eslint-plugin-prettier: specifier: ^5.5.3 version: 5.5.3(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.32.0(jiti@2.5.1)))(eslint@9.32.0(jiti@2.5.1))(prettier@3.6.2) @@ -292,23 +292,23 @@ importers: version: 0.6.14(prettier-plugin-astro@0.7.2)(prettier@3.6.2) typescript-eslint: specifier: ^8.38.0 - version: 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + version: 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) devDependencies: typescript: specifier: ^5.8.3 - version: 5.8.3 + version: 5.9.2 packages/vitnode: dependencies: '@dnd-kit/core': specifier: ^6.3.1 - version: 6.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 6.3.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@hono/swagger-ui': specifier: ^0.5.2 - version: 0.5.2(hono@4.8.9) + version: 0.5.2(hono@4.8.10) '@tanstack/react-query': - specifier: ^5.83.0 - version: 5.83.0(react@19.1.0) + specifier: ^5.84.1 + version: 5.84.1(react@19.1.1) class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -317,16 +317,16 @@ importers: version: 2.1.1 cmdk: specifier: ^1.1.1 - version: 1.1.1(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.1(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) input-otp: specifier: ^1.4.2 - version: 1.4.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.4.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1) motion: - specifier: ^12.23.9 - version: 12.23.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^12.23.12 + version: 12.23.12(react-dom@19.1.1(react@19.1.1))(react@19.1.1) next-themes: specifier: ^0.4.6 - version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 0.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1) nodemailer: specifier: ^7.0.5 version: 7.0.5 @@ -335,56 +335,56 @@ importers: version: 3.4.7 radix-ui: specifier: ^1.4.2 - version: 1.4.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.4.2(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) rate-limiter-flexible: specifier: ^7.2.0 version: 7.2.0 react-scan: specifier: ^0.4.3 - version: 0.4.3(@types/react@19.1.8)(next@15.4.4(@babel/core@7.28.0)(@playwright/test@1.54.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)(rollup@4.46.0) + version: 0.4.3(@types/react@19.1.9)(next@15.4.5(@babel/core@7.28.0)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(rollup@4.46.2) resend: specifier: ^4.7.0 - version: 4.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 4.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) tailwind-merge: specifier: ^3.3.1 version: 3.3.1 use-debounce: specifier: ^10.0.5 - version: 10.0.5(react@19.1.0) + version: 10.0.5(react@19.1.1) use-intl: specifier: ^4.3.4 - version: 4.3.4(react@19.1.0) + version: 4.3.4(react@19.1.1) vaul: specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.2(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) devDependencies: '@hono/zod-openapi': specifier: ^1.0.2 - version: 1.0.2(hono@4.8.9)(zod@4.0.10) + version: 1.0.2(hono@4.8.10)(zod@4.0.14) '@hono/zod-validator': specifier: ^0.7.2 - version: 0.7.2(hono@4.8.9)(zod@4.0.10) + version: 0.7.2(hono@4.8.10)(zod@4.0.14) '@hookform/resolvers': - specifier: ^5.2.0 - version: 5.2.0(react-hook-form@7.61.1(react@19.1.0)) + specifier: ^5.2.1 + version: 5.2.1(react-hook-form@7.61.1(react@19.1.1)) '@react-email/components': - specifier: ^0.3.2 - version: 0.3.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^0.4.0 + version: 0.4.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@react-email/preview-server': - specifier: ^4.2.4 - version: 4.2.4(@playwright/test@1.54.1)(@swc/core@1.13.2)(postcss@8.5.6) + specifier: ^4.2.7 + version: 4.2.7(@playwright/test@1.54.2)(@swc/core@1.13.3)(postcss@8.5.6) '@swc/cli': specifier: 0.6.0 - version: 0.6.0(@swc/core@1.13.2)(chokidar@4.0.3) + version: 0.6.0(@swc/core@1.13.3)(chokidar@4.0.3) '@swc/core': - specifier: ^1.13.2 - version: 1.13.2 + specifier: ^1.13.3 + version: 1.13.3 '@testing-library/dom': specifier: ^10.4.1 version: 10.4.1 '@testing-library/react': specifier: ^16.3.0 - version: 16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@types/node': specifier: ^24.1.0 version: 24.1.0 @@ -392,11 +392,11 @@ importers: specifier: ^6.4.17 version: 6.4.17 '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react': specifier: ^4.7.0 version: 4.7.0(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)) @@ -419,41 +419,41 @@ importers: specifier: ^0.31.4 version: 0.31.4 drizzle-orm: - specifier: ^0.44.3 - version: 0.44.3(@neondatabase/serverless@0.10.4)(@types/pg@8.11.10)(gel@2.1.0)(pg@8.13.1)(postgres@3.4.7) + specifier: ^0.44.4 + version: 0.44.4(@neondatabase/serverless@0.10.4)(@types/pg@8.11.10)(gel@2.1.0)(pg@8.13.1)(postgres@3.4.7) eslint: specifier: ^9.32.0 version: 9.32.0(jiti@2.5.1) hono: - specifier: ^4.8.9 - version: 4.8.9 + specifier: ^4.8.10 + version: 4.8.10 jsdom: specifier: ^26.1.0 version: 26.1.0 lucide-react: - specifier: ^0.526.0 - version: 0.526.0(react@19.1.0) + specifier: ^0.536.0 + version: 0.536.0(react@19.1.1) next: - specifier: ^15.4.4 - version: 15.4.4(@babel/core@7.28.0)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^15.4.5 + version: 15.4.5(@babel/core@7.28.0)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) next-intl: specifier: ^4.3.4 - version: 4.3.4(next@15.4.4(@babel/core@7.28.0)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + version: 4.3.4(next@15.4.5(@babel/core@7.28.0)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)(typescript@5.9.2) react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) react-email: - specifier: ^4.2.4 - version: 4.2.4 + specifier: ^4.2.7 + version: 4.2.7 react-hook-form: specifier: ^7.61.1 - version: 7.61.1(react@19.1.0) + version: 7.61.1(react@19.1.1) sonner: specifier: ^2.0.6 - version: 2.0.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.0.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1) tailwindcss: specifier: ^4.1.11 version: 4.1.11 @@ -462,7 +462,7 @@ importers: version: 1.8.16 tsup: specifier: ^8.5.0 - version: 8.5.0(@swc/core@1.13.2)(jiti@2.5.1)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.8.0) + version: 8.5.0(@swc/core@1.13.3)(jiti@2.5.1)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.0) tsx: specifier: ^4.20.3 version: 4.20.3 @@ -470,23 +470,23 @@ importers: specifier: ^1.3.6 version: 1.3.6 typescript: - specifier: ^5.8.3 - version: 5.8.3 + specifier: ^5.9.2 + version: 5.9.2 vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.8.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)) + version: 5.1.4(typescript@5.9.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)) vitest: specifier: ^3.2.4 version: 3.2.4(@types/debug@4.1.12)(@types/node@24.1.0)(jiti@2.5.1)(jsdom@26.1.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0) zod: - specifier: ^4.0.10 - version: 4.0.10 + specifier: ^4.0.14 + version: 4.0.14 plugins/blog: dependencies: '@hono/zod-openapi': specifier: ^1.0.2 - version: 1.0.2(hono@4.8.9)(zod@4.0.10) + version: 1.0.2(hono@4.8.10)(zod@4.0.14) '@vitnode/core': specifier: workspace:* version: link:../../packages/vitnode @@ -494,48 +494,48 @@ importers: specifier: ^0.31.4 version: 0.31.4 drizzle-orm: - specifier: ^0.44.3 - version: 0.44.3(@neondatabase/serverless@0.10.4)(@types/pg@8.11.10)(gel@2.1.0)(pg@8.13.1)(postgres@3.4.7) + specifier: ^0.44.4 + version: 0.44.4(@neondatabase/serverless@0.10.4)(@types/pg@8.11.10)(gel@2.1.0)(pg@8.13.1)(postgres@3.4.7) hono: - specifier: ^4.8.9 - version: 4.8.9 + specifier: ^4.8.10 + version: 4.8.10 lucide-react: specifier: ^0.526.0 - version: 0.526.0(react@19.1.0) + version: 0.526.0(react@19.1.1) next: - specifier: ^15.4.4 - version: 15.4.4(@playwright/test@1.54.1)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^15.4.5 + version: 15.4.5(@playwright/test@1.54.2)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) next-intl: specifier: ^4.3.4 - version: 4.3.4(next@15.4.4(@playwright/test@1.54.1)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + version: 4.3.4(next@15.4.5(@playwright/test@1.54.2)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)(typescript@5.9.2) react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) react-hook-form: specifier: ^7.61.1 - version: 7.61.1(react@19.1.0) + version: 7.61.1(react@19.1.1) sonner: specifier: ^2.0.6 - version: 2.0.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.0.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1) zod: - specifier: ^4.0.10 - version: 4.0.10 + specifier: ^4.0.14 + version: 4.0.14 devDependencies: '@swc/cli': specifier: 0.6.0 - version: 0.6.0(@swc/core@1.13.2)(chokidar@4.0.3) + version: 0.6.0(@swc/core@1.13.3)(chokidar@4.0.3) '@swc/core': - specifier: ^1.13.2 - version: 1.13.2 + specifier: ^1.13.3 + version: 1.13.3 '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitnode/eslint-config': specifier: workspace:* version: link:../../packages/eslint @@ -549,8 +549,8 @@ importers: specifier: ^1.8.16 version: 1.8.16 typescript: - specifier: ^5.8.3 - version: 5.8.3 + specifier: ^5.9.2 + version: 5.9.2 packages: @@ -565,8 +565,8 @@ packages: '@asamuzakjp/css-color@3.2.0': resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} - '@asteasolutions/zod-to-openapi@8.0.0': - resolution: {integrity: sha512-C56hBPiraeSWUNLz8mB5Z0/0LdfaFD5d6WB/+hdUg0MiC7egTgvWRGh3M3jZ3CRl03l/NJWnmv5D3OUAz+JGeg==} + '@asteasolutions/zod-to-openapi@8.1.0': + resolution: {integrity: sha512-tQFxVs05J/6QXXqIzj6rTRk3nj1HFs4pe+uThwE95jL5II2JfpVXkK+CqkO7aT0Do5AYqO6LDrKpleLUFXgY+g==} peerDependencies: zod: ^4.0.0 @@ -1292,14 +1292,14 @@ packages: resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@floating-ui/core@1.7.2': - resolution: {integrity: sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw==} + '@floating-ui/core@1.7.3': + resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} - '@floating-ui/dom@1.7.2': - resolution: {integrity: sha512-7cfaOQuCS27HD7DX+6ib2OrnW+b4ZBwDNnCcT0uTyidcmyWb03FnQqJybDBoCnpdxwBSfA94UAYlRCt7mV+TbA==} + '@floating-ui/dom@1.7.3': + resolution: {integrity: sha512-uZA413QEpNuhtb3/iIKoYMSK07keHPYeXF02Zhd6e213j+d1NamLix/mCLxBUDW/Gx52sPH2m+chlUsyaBs/Ag==} - '@floating-ui/react-dom@2.1.4': - resolution: {integrity: sha512-JbbpPhp38UmXDDAu60RJmbeme37Jbgsm7NrHGgzYYFKmblzRUh6Pa641dII6LsjwF4XlScDrde2UAzDo/b9KPw==} + '@floating-ui/react-dom@2.1.5': + resolution: {integrity: sha512-HDO/1/1oH9fjj4eLgegrlH3dklZpHtUYYFiVwMUwfGvk9jWDRWqkklA2/NFScknrcNSspbV868WjXORvreDX+Q==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -1325,8 +1325,8 @@ packages: '@formatjs/intl-localematcher@0.6.1': resolution: {integrity: sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg==} - '@hono/node-server@1.17.1': - resolution: {integrity: sha512-SY79W/C+2b1MyAzmIcV32Q47vO1b5XwLRwj8S9N6Jr5n1QCkIfAIH6umOSgqWZ4/v67hg6qq8Ha5vZonVidGsg==} + '@hono/node-server@1.18.0': + resolution: {integrity: sha512-CJ0H3/ouk/JWnyiuYOJLdpuWhO2D2BTNigHaFixnW3CrwZb+E+4s/KoFkcikHXcVmXoxaLJx1nlGa3JChEFtFA==} engines: {node: '>=18.14.1'} peerDependencies: hono: ^4 @@ -1349,8 +1349,8 @@ packages: hono: '>=3.9.0' zod: ^3.25.0 || ^4.0.0 - '@hookform/resolvers@5.2.0': - resolution: {integrity: sha512-3YI+VqxJQH6ryRWG+j3k+M19Wf37LeSKJDg6Vdjq6makLOqZGYn77iTaYLMLpVi/uHc1N6OTCmcxJwhOQV979g==} + '@hookform/resolvers@5.2.1': + resolution: {integrity: sha512-u0+6X58gkjMcxur1wRWokA7XsiiBJ6aK17aPZxhkoYiK5J+HcTx0Vhu9ovXe6H+dVpO6cjrn2FkJTryXEMlryQ==} peerDependencies: react-hook-form: ^7.55.0 @@ -1682,8 +1682,8 @@ packages: '@types/node': optional: true - '@inquirer/prompts@7.7.1': - resolution: {integrity: sha512-XDxPrEWeWUBy8scAXzXuFY45r/q49R0g72bUzgQXZ1DY/xEFX+ESDMkTQolcb5jRBzaNJX2W8XQl6krMNDTjaA==} + '@inquirer/prompts@7.8.0': + resolution: {integrity: sha512-JHwGbQ6wjf1dxxnalDYpZwZxUEosT+6CPGD9Zh4sm9WXdtUp9XODCQD3NjSTmu+0OAyxWXNOqf0spjIymJa2Tw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1700,8 +1700,8 @@ packages: '@types/node': optional: true - '@inquirer/search@3.0.17': - resolution: {integrity: sha512-CuBU4BAGFqRYors4TNCYzy9X3DpKtgIW4Boi0WNkm4Ei1hvY9acxKdBdyqzqBCEe4YxSdaQQsasJlFlUJNgojw==} + '@inquirer/search@3.1.0': + resolution: {integrity: sha512-PMk1+O/WBcYJDq2H7foV0aAZSmDdkzZB9Mw2v/DmONRJopwA/128cS9M/TXWLKKdEQKZnKwBzqu2G4x/2Nqx8Q==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1880,8 +1880,8 @@ packages: '@next/env@15.4.1': resolution: {integrity: sha512-DXQwFGAE2VH+f2TJsKepRXpODPU+scf5fDbKOME8MMyeyswe4XwgRdiiIYmBfkXU+2ssliLYznajTrOQdnLR5A==} - '@next/env@15.4.4': - resolution: {integrity: sha512-SJKOOkULKENyHSYXE5+KiFU6itcIb6wSBjgM92meK0HVKpo94dNOLZVdLLuS7/BxImROkGoPsjR4EnuDucqiiA==} + '@next/env@15.4.5': + resolution: {integrity: sha512-ruM+q2SCOVCepUiERoxOmZY9ZVoecR3gcXNwCYZRvQQWRjhOiPJGmQ2fAiLR6YKWXcSAh7G79KEFxN3rwhs4LQ==} '@next/swc-darwin-arm64@15.4.1': resolution: {integrity: sha512-L+81yMsiHq82VRXS2RVq6OgDwjvA4kDksGU8hfiDHEXP+ncKIUhUsadAVB+MRIp2FErs/5hpXR0u2eluWPAhig==} @@ -1889,8 +1889,8 @@ packages: cpu: [arm64] os: [darwin] - '@next/swc-darwin-arm64@15.4.4': - resolution: {integrity: sha512-eVG55dnGwfUuG+TtnUCt+mEJ+8TGgul6nHEvdb8HEH7dmJIFYOCApAaFrIrxwtEq2Cdf+0m5sG1Np8cNpw9EAw==} + '@next/swc-darwin-arm64@15.4.5': + resolution: {integrity: sha512-84dAN4fkfdC7nX6udDLz9GzQlMUwEMKD7zsseXrl7FTeIItF8vpk1lhLEnsotiiDt+QFu3O1FVWnqwcRD2U3KA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -1901,8 +1901,8 @@ packages: cpu: [x64] os: [darwin] - '@next/swc-darwin-x64@15.4.4': - resolution: {integrity: sha512-zqG+/8apsu49CltEj4NAmCGZvHcZbOOOsNoTVeIXphYWIbE4l6A/vuQHyqll0flU2o3dmYCXsBW5FmbrGDgljQ==} + '@next/swc-darwin-x64@15.4.5': + resolution: {integrity: sha512-CL6mfGsKuFSyQjx36p2ftwMNSb8PQog8y0HO/ONLdQqDql7x3aJb/wB+LA651r4we2pp/Ck+qoRVUeZZEvSurA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -1913,8 +1913,8 @@ packages: cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-gnu@15.4.4': - resolution: {integrity: sha512-LRD4l2lq4R+2QCHBQVC0wjxxkLlALGJCwigaJ5FSRSqnje+MRKHljQNZgDCaKUZQzO/TXxlmUdkZP/X3KNGZaw==} + '@next/swc-linux-arm64-gnu@15.4.5': + resolution: {integrity: sha512-1hTVd9n6jpM/thnDc5kYHD1OjjWYpUJrJxY4DlEacT7L5SEOXIifIdTye6SQNNn8JDZrcN+n8AWOmeJ8u3KlvQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -1925,8 +1925,8 @@ packages: cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.4.4': - resolution: {integrity: sha512-LsGUCTvuZ0690fFWerA4lnQvjkYg9gHo12A3wiPUR4kCxbx/d+SlwmonuTH2SWZI+RVGA9VL3N0S03WTYv6bYg==} + '@next/swc-linux-arm64-musl@15.4.5': + resolution: {integrity: sha512-4W+D/nw3RpIwGrqpFi7greZ0hjrCaioGErI7XHgkcTeWdZd146NNu1s4HnaHonLeNTguKnL2Urqvj28UJj6Gqw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -1937,8 +1937,8 @@ packages: cpu: [x64] os: [linux] - '@next/swc-linux-x64-gnu@15.4.4': - resolution: {integrity: sha512-aOy5yNRpLL3wNiJVkFYl6w22hdREERNjvegE6vvtix8LHRdsTHhWTpgvcYdCK7AIDCQW5ATmzr9XkPHvSoAnvg==} + '@next/swc-linux-x64-gnu@15.4.5': + resolution: {integrity: sha512-N6Mgdxe/Cn2K1yMHge6pclffkxzbSGOydXVKYOjYqQXZYjLCfN/CuFkaYDeDHY2VBwSHyM2fUjYBiQCIlxIKDA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -1949,8 +1949,8 @@ packages: cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.4.4': - resolution: {integrity: sha512-FL7OAn4UkR8hKQRGBmlHiHinzOb07tsfARdGh7v0Z0jEJ3sz8/7L5bR23ble9E6DZMabSStqlATHlSxv1fuzAg==} + '@next/swc-linux-x64-musl@15.4.5': + resolution: {integrity: sha512-YZ3bNDrS8v5KiqgWE0xZQgtXgCTUacgFtnEgI4ccotAASwSvcMPDLua7BWLuTfucoRv6mPidXkITJLd8IdJplQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -1961,8 +1961,8 @@ packages: cpu: [arm64] os: [win32] - '@next/swc-win32-arm64-msvc@15.4.4': - resolution: {integrity: sha512-eEdNW/TXwjYhOulQh0pffTMMItWVwKCQpbziSBmgBNFZIIRn2GTXrhrewevs8wP8KXWYMx8Z+mNU0X+AfvtrRg==} + '@next/swc-win32-arm64-msvc@15.4.5': + resolution: {integrity: sha512-9Wr4t9GkZmMNcTVvSloFtjzbH4vtT4a8+UHqDoVnxA5QyfWe6c5flTH1BIWPGNWSUlofc8dVJAE7j84FQgskvQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -1973,8 +1973,8 @@ packages: cpu: [x64] os: [win32] - '@next/swc-win32-x64-msvc@15.4.4': - resolution: {integrity: sha512-SE5pYNbn/xZKMy1RE3pAs+4xD32OI4rY6mzJa4XUkp/ItZY+OMjIgilskmErt8ls/fVJ+Ihopi2QIeW6O3TrMw==} + '@next/swc-win32-x64-msvc@15.4.5': + resolution: {integrity: sha512-voWk7XtGvlsP+w8VBz7lqp8Y+dYw/MTI4KeS0gTVtfdhdJ5QwhXLmNrndFOin/MDoCvUaLWMkYKATaCoUkt2/A==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -2016,8 +2016,8 @@ packages: resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@playwright/test@1.54.1': - resolution: {integrity: sha512-FS8hQ12acieG2dYSksmLOF7BNxnVf2afRJdCuM1eMSxj6QTSE6G4InGF7oApGgDb65MX7AwMVlIkpru0yZA4Xw==} + '@playwright/test@1.54.2': + resolution: {integrity: sha512-A+znathYxPf+72riFd1r1ovOLqsIIB0jKIoPjyK2kqEIe30/6jF6BC7QNluHuwUmsD2tv1XZVugN8GqfTMOxsA==} engines: {node: '>=18'} hasBin: true @@ -2970,6 +2970,11 @@ packages: peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc + '@react-email/body@0.1.0': + resolution: {integrity: sha512-o1bcSAmDYNNHECbkeyceCVPGmVsYvT+O3sSO/Ct7apKUu3JphTi31hu+0Nwqr/pgV5QFqdoT5vdS3SW5DJFHgQ==} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + '@react-email/button@0.2.0': resolution: {integrity: sha512-8i+v6cMxr2emz4ihCrRiYJPp2/sdYsNNsBzXStlcA+/B9Umpm5Jj3WJKYpgTPM+aeyiqlG/MMI1AucnBm4f1oQ==} engines: {node: '>=18.0.0'} @@ -2994,8 +2999,14 @@ packages: peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc - '@react-email/components@0.3.2': - resolution: {integrity: sha512-nVbo0KtBdZbj19lvfFpe0ZhjKPh6LE229+NyQLuTDt6dfaLzNRpSu/rHP+jlvdWBAk93slsoGyWDRldbqklpaA==} + '@react-email/components@0.3.3': + resolution: {integrity: sha512-MHs5HzWroICsZmnOqsQQIepMIjqV7X3k/UVQqdzbcLyIQ6L8l1cTODZutyyDDPK1th+AF1iSZtUnt7xr8dxKiw==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/components@0.4.0': + resolution: {integrity: sha512-JzEb6eVXizGfypXbr4jRj9wthywJUN62PrR7Q1Cz6TChi1FClIhIox0EpL9Asx0WpLHYB/XA7D6zjHASMeef3A==} engines: {node: '>=18.0.0'} peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc @@ -3053,8 +3064,8 @@ packages: peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc - '@react-email/preview-server@4.2.4': - resolution: {integrity: sha512-QRh7MUK9rG48lwIvwHoL8ByNCNkQzX9G7hl8T+IsleI55lGeAtlAzze/QHeLfoYZ7wl5LCG05ok/00DP06Xogw==} + '@react-email/preview-server@4.2.7': + resolution: {integrity: sha512-WwTCNR2upo8mcmILFx/HsZ5ZyxHRuwjxC27RcxcRvTRZOPRS3rngg8rcQUsd2h1hRP1GPYGB6nvmRBjrxBgevA==} '@react-email/preview@0.0.13': resolution: {integrity: sha512-F7j9FJ0JN/A4d7yr+aw28p4uX7VLWs7hTHtLo7WRyw4G+Lit6Zucq4UWKRxJC8lpsUdzVmG7aBJnKOT+urqs/w==} @@ -3069,8 +3080,8 @@ 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.3': - resolution: {integrity: sha512-TjjF1tdTmOqYEIWWg9wMx5q9JbQRbWmnG7owQbSGEHkNfc/c/vBu7hjfrki907lgQEAkYac9KPTyIjOKhvhJCg==} + '@react-email/render@1.1.4': + resolution: {integrity: sha512-9ZFRrDB8AiRpacWDDXC5q14D5uCE1uR7iStbxAOHsL5vvAj8JGfCwl8zZ/BubVwALlIhFQiyJPCvGbyfbkPVuw==} engines: {node: '>=18.0.0'} peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc @@ -3112,103 +3123,103 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.46.0': - resolution: {integrity: sha512-9f3nSTFI2ivfxc7/tHBHcJ8pRnp8ROrELvsVprlQPVvcZ+j5zztYd+PTJGpyIOAdTvNwNrpCXswKSeoQcyGjMQ==} + '@rollup/rollup-android-arm-eabi@4.46.2': + resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.46.0': - resolution: {integrity: sha512-tFZSEhqJ8Yrpe50TzOdeoYi72gi/jsnT7y8Qrozf3cNu28WX+s6I3XzEPUAqoaT9SAS8Xz9AzGTFlxxCH/w20w==} + '@rollup/rollup-android-arm64@4.46.2': + resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.46.0': - resolution: {integrity: sha512-+DikIIs+p6yU2hF51UaWG8BnHbq90X0QIOt5zqSKSZxY+G3qqdLih214e9InJal21af2PuuxkDectetGfbVPJw==} + '@rollup/rollup-darwin-arm64@4.46.2': + resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.46.0': - resolution: {integrity: sha512-5a+NofhdEB/WimSlFMskbFQn1vqz1FWryYpA99trmZGO6qEmiS0IsX6w4B3d91U878Q2ZQdiaFF1gxX4P147og==} + '@rollup/rollup-darwin-x64@4.46.2': + resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.46.0': - resolution: {integrity: sha512-igr/RlKPS3OCy4jD3XBmAmo3UAcNZkJSubRsw1JeM8bAbwf15k/3eMZXD91bnjheijJiOJcga3kfCLKjV8IXNg==} + '@rollup/rollup-freebsd-arm64@4.46.2': + resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.46.0': - resolution: {integrity: sha512-MdigWzPSHlQzB1xZ+MdFDWTAH+kcn7UxjEBoOKuaso7z1DRlnAnrknB1mTtNOQ+GdPI8xgExAGwHeqQjntR0Cg==} + '@rollup/rollup-freebsd-x64@4.46.2': + resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.46.0': - resolution: {integrity: sha512-dmZseE0ZwA/4yy1+BwFrDqFTjjNg24GO9xSrb1weVbt6AFkhp5pz1gVS7IMtfIvoWy8yp6q/zN0bKnefRUImvQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.46.2': + resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.46.0': - resolution: {integrity: sha512-fzhfn6p9Cfm3W8UrWKIa4l7Wfjs/KGdgaswMBBE3KY3Ta43jg2XsPrAtfezHpsRk0Nx+TFuS3hZk/To2N5kFPQ==} + '@rollup/rollup-linux-arm-musleabihf@4.46.2': + resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.46.0': - resolution: {integrity: sha512-vVDD+iPDPmJQ5nAQ5Tifq3ywdv60FartglFI8VOCK+hcU9aoG0qlQTsDJP97O5yiTaTqlneZWoARMcVC5nyUoQ==} + '@rollup/rollup-linux-arm64-gnu@4.46.2': + resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.46.0': - resolution: {integrity: sha512-0d0jx08fzDHCzXqrtCMEEyxKU0SvJrWmUjUDE2/KDQ2UDJql0tfiwYvEx1oHELClKO8CNdE+AGJj+RqXscZpdQ==} + '@rollup/rollup-linux-arm64-musl@4.46.2': + resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.46.0': - resolution: {integrity: sha512-XBYu9oW9eKJadWn8M7hkTZsD4yG+RrsTrVEgyKwb4L72cpJjRbRboTG9Lg9fec8MxJp/cfTHAocg4mnismQR8A==} + '@rollup/rollup-linux-loongarch64-gnu@4.46.2': + resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.46.0': - resolution: {integrity: sha512-wJaRvcT17PoOK6Ggcfo3nouFlybHvARBS4jzT0PC/lg17fIJHcDS2fZz3sD+iA4nRlho2zE6OGbU0HvwATdokQ==} + '@rollup/rollup-linux-ppc64-gnu@4.46.2': + resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.46.0': - resolution: {integrity: sha512-GZ5bkMFteAGkcmh8x0Ok4LSa+L62Ez0tMsHPX6JtR0wl4Xc3bQcrFHDiR5DGLEDFtGrXih4Nd/UDaFqs968/wA==} + '@rollup/rollup-linux-riscv64-gnu@4.46.2': + resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.46.0': - resolution: {integrity: sha512-7CjPw6FflFsVOUfWOrVrREiV3IYXG4RzZ1ZQUaT3BtSK8YXN6x286o+sruPZJESIaPebYuFowmg54ZdrkVBYog==} + '@rollup/rollup-linux-riscv64-musl@4.46.2': + resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.46.0': - resolution: {integrity: sha512-nmvnl0ZiuysltcB/cKjUh40Rx4FbSyueERDsl2FLvLYr6pCgSsvGr3SocUT84svSpmloS7f1DRWqtRha74Gi1w==} + '@rollup/rollup-linux-s390x-gnu@4.46.2': + resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.46.0': - resolution: {integrity: sha512-Cv+moII5C8RM6gZbR3cb21o6rquVDZrN2o81maROg1LFzBz2dZUwIQSxFA8GtGZ/F2KtsqQ2z3eFPBb6akvQNg==} + '@rollup/rollup-linux-x64-gnu@4.46.2': + resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.46.0': - resolution: {integrity: sha512-PHcMG8DZTM9RCIjp8QIfN0VYtX0TtBPnWOTRurFhoCDoi9zptUZL2k7pCs+5rgut7JAiUsYy+huyhVKPcmxoog==} + '@rollup/rollup-linux-x64-musl@4.46.2': + resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.46.0': - resolution: {integrity: sha512-1SI/Rd47e8aQJeFWMDg16ET+fjvCcD/CzeaRmIEPmb05hx+3cCcwIF4ebUag4yTt/D1peE+Mgp0+Po3M358cAA==} + '@rollup/rollup-win32-arm64-msvc@4.46.2': + resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.46.0': - resolution: {integrity: sha512-JwOCYxmumFDfDhx4kNyz6kTVK3gWzBIvVdMNzQMRDubcoGRDniOOmo6DDNP42qwZx3Bp9/6vWJ+kNzNqXoHmeA==} + '@rollup/rollup-win32-ia32-msvc@4.46.2': + resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.46.0': - resolution: {integrity: sha512-IPMIfrfkG1GaEXi+JSsQEx8x9b4b+hRZXO7KYc2pKio3zO2/VDXDs6B9Ts/nnO+25Fk1tdAVtUn60HKKPPzDig==} + '@rollup/rollup-win32-x64-msvc@4.46.2': + resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==} cpu: [x64] os: [win32] @@ -3218,29 +3229,29 @@ packages: '@selderee/plugin-htmlparser2@0.11.0': resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} - '@shikijs/core@3.8.1': - resolution: {integrity: sha512-uTSXzUBQ/IgFcUa6gmGShCHr4tMdR3pxUiiWKDm8pd42UKJdYhkAYsAmHX5mTwybQ5VyGDgTjW4qKSsRvGSang==} + '@shikijs/core@3.9.1': + resolution: {integrity: sha512-W5Vwen0KJCtR7KFRo+3JLGAqLUPsfW7e+wZ4yaRBGIogwI9ZlnkpRm9ZV8JtfzMxOkIwZwMmmN0hNErLtm3AYg==} - '@shikijs/engine-javascript@3.8.1': - resolution: {integrity: sha512-rZRp3BM1llrHkuBPAdYAzjlF7OqlM0rm/7EWASeCcY7cRYZIrOnGIHE9qsLz5TCjGefxBFnwgIECzBs2vmOyKA==} + '@shikijs/engine-javascript@3.9.1': + resolution: {integrity: sha512-4hGenxYpAmtALryKsdli2K58F0s7RBYpj/RSDcAAGfRM6eTEGI5cZnt86mr+d9/4BaZ5sH5s4p3VU5irIdhj9Q==} - '@shikijs/engine-oniguruma@3.8.1': - resolution: {integrity: sha512-KGQJZHlNY7c656qPFEQpIoqOuC4LrxjyNndRdzk5WKB/Ie87+NJCF1xo9KkOUxwxylk7rT6nhlZyTGTC4fCe1g==} + '@shikijs/engine-oniguruma@3.9.1': + resolution: {integrity: sha512-WPlL/xqviwS3te4unSGGGfflKsuHLMI6tPdNYvgz/IygcBT6UiwDFSzjBKyebwi5GGSlXsjjdoJLIBnAplmEZw==} - '@shikijs/langs@3.8.1': - resolution: {integrity: sha512-TjOFg2Wp1w07oKnXjs0AUMb4kJvujML+fJ1C5cmEj45lhjbUXtziT1x2bPQb9Db6kmPhkG5NI2tgYW1/DzhUuQ==} + '@shikijs/langs@3.9.1': + resolution: {integrity: sha512-Vyy2Yv9PP3Veh3VSsIvNncOR+O93wFsNYgN2B6cCCJlS7H9SKFYc55edsqernsg8WT/zam1cfB6llJsQWLnVhA==} - '@shikijs/rehype@3.8.1': - resolution: {integrity: sha512-ERs9IUaORBY8vu3OQfmB1L0nwGey0qhJi3NVSLwl22H+FPIg3dDyi2bHULY7pcyKC2qo5b1yiu5Vf3jp3ZkPvA==} + '@shikijs/rehype@3.9.1': + resolution: {integrity: sha512-zkwzC92w2MdmwIkT0E8lKYD4dPJxCmm7HNHBwyWgJN4P6wcxZKJDvgCgAOXjOtLfXuZl3hZjO1Q/9lIyjarD/g==} - '@shikijs/themes@3.8.1': - resolution: {integrity: sha512-Vu3t3BBLifc0GB0UPg2Pox1naTemrrvyZv2lkiSw3QayVV60me1ujFQwPZGgUTmwXl1yhCPW8Lieesm0CYruLQ==} + '@shikijs/themes@3.9.1': + resolution: {integrity: sha512-zAykkGECNICCMXpKeVvq04yqwaSuAIvrf8MjsU5bzskfg4XreU+O0B5wdNCYRixoB9snd3YlZ373WV5E/g5T9A==} - '@shikijs/transformers@3.8.1': - resolution: {integrity: sha512-nmTyFfBrhJk6HJi118jes0wuWdfKXeVUq1Nq+hm8h6wbk1KUfvtg+LY/uDfxZD2VDItHO3QoINIs3NtoKBmgxw==} + '@shikijs/transformers@3.9.1': + resolution: {integrity: sha512-QI4Bh565EhKGaefiDAyn5o7S8rQIUGXcOjZANSiQHa/KSGCyJTZP9UUiRbvdovVpaI/nagODX6mspFk/vcYOQQ==} - '@shikijs/types@3.8.1': - resolution: {integrity: sha512-5C39Q8/8r1I26suLh+5TPk1DTrbY/kn3IdWA5HdizR0FhlhD05zx5nKCqhzSfDHH3p4S0ZefxWd77DLV+8FhGg==} + '@shikijs/types@3.9.1': + resolution: {integrity: sha512-rqM3T7a0iM1oPKz9iaH/cVgNX9Vz1HERcUcXJ94/fulgVdwqfnhXzGxO4bLrAnh/o5CPLy3IcYedogfV+Ns0Qg==} '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -3269,68 +3280,68 @@ packages: chokidar: optional: true - '@swc/core-darwin-arm64@1.13.2': - resolution: {integrity: sha512-44p7ivuLSGFJ15Vly4ivLJjg3ARo4879LtEBAabcHhSZygpmkP8eyjyWxrH3OxkY1eRZSIJe8yRZPFw4kPXFPw==} + '@swc/core-darwin-arm64@1.13.3': + resolution: {integrity: sha512-ux0Ws4pSpBTqbDS9GlVP354MekB1DwYlbxXU3VhnDr4GBcCOimpocx62x7cFJkSpEBF8bmX8+/TTCGKh4PbyXw==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.13.2': - resolution: {integrity: sha512-Lb9EZi7X2XDAVmuUlBm2UvVAgSCbD3qKqDCxSI4jEOddzVOpNCnyZ/xEampdngUIyDDhhJLYU9duC+Mcsv5Y+A==} + '@swc/core-darwin-x64@1.13.3': + resolution: {integrity: sha512-p0X6yhxmNUOMZrbeZ3ZNsPige8lSlSe1llllXvpCLkKKxN/k5vZt1sULoq6Nj4eQ7KeHQVm81/+AwKZyf/e0TA==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.13.2': - resolution: {integrity: sha512-9TDe/92ee1x57x+0OqL1huG4BeljVx0nWW4QOOxp8CCK67Rpc/HHl2wciJ0Kl9Dxf2NvpNtkPvqj9+BUmM9WVA==} + '@swc/core-linux-arm-gnueabihf@1.13.3': + resolution: {integrity: sha512-OmDoiexL2fVWvQTCtoh0xHMyEkZweQAlh4dRyvl8ugqIPEVARSYtaj55TBMUJIP44mSUOJ5tytjzhn2KFxFcBA==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.13.2': - resolution: {integrity: sha512-KJUSl56DBk7AWMAIEcU83zl5mg3vlQYhLELhjwRFkGFMvghQvdqQ3zFOYa4TexKA7noBZa3C8fb24rI5sw9Exg==} + '@swc/core-linux-arm64-gnu@1.13.3': + resolution: {integrity: sha512-STfKku3QfnuUj6k3g9ld4vwhtgCGYIFQmsGPPgT9MK/dI3Lwnpe5Gs5t1inoUIoGNP8sIOLlBB4HV4MmBjQuhw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.13.2': - resolution: {integrity: sha512-teU27iG1oyWpNh9CzcGQ48ClDRt/RCem7mYO7ehd2FY102UeTws2+OzLESS1TS1tEZipq/5xwx3FzbVgiolCiQ==} + '@swc/core-linux-arm64-musl@1.13.3': + resolution: {integrity: sha512-bc+CXYlFc1t8pv9yZJGus372ldzOVscBl7encUBlU1m/Sig0+NDJLz6cXXRcFyl6ABNOApWeR4Yl7iUWx6C8og==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.13.2': - resolution: {integrity: sha512-dRPsyPyqpLD0HMRCRpYALIh4kdOir8pPg4AhNQZLehKowigRd30RcLXGNVZcc31Ua8CiPI4QSgjOIxK+EQe4LQ==} + '@swc/core-linux-x64-gnu@1.13.3': + resolution: {integrity: sha512-dFXoa0TEhohrKcxn/54YKs1iwNeW6tUkHJgXW33H381SvjKFUV53WR231jh1sWVJETjA3vsAwxKwR23s7UCmUA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.13.2': - resolution: {integrity: sha512-CCxETW+KkYEQDqz1SYC15YIWYheqFC+PJVOW76Maa/8yu8Biw+HTAcblKf2isrlUtK8RvrQN94v3UXkC2NzCEw==} + '@swc/core-linux-x64-musl@1.13.3': + resolution: {integrity: sha512-ieyjisLB+ldexiE/yD8uomaZuZIbTc8tjquYln9Quh5ykOBY7LpJJYBWvWtm1g3pHv6AXlBI8Jay7Fffb6aLfA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.13.2': - resolution: {integrity: sha512-Wv/QTA6PjyRLlmKcN6AmSI4jwSMRl0VTLGs57PHTqYRwwfwd7y4s2fIPJVBNbAlXd795dOEP6d/bGSQSyhOX3A==} + '@swc/core-win32-arm64-msvc@1.13.3': + resolution: {integrity: sha512-elTQpnaX5vESSbhCEgcwXjpMsnUbqqHfEpB7ewpkAsLzKEXZaK67ihSRYAuAx6ewRQTo7DS5iTT6X5aQD3MzMw==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.13.2': - resolution: {integrity: sha512-PuCdtNynEkUNbUXX/wsyUC+t4mamIU5y00lT5vJcAvco3/r16Iaxl5UCzhXYaWZSNVZMzPp9qN8NlSL8M5pPxw==} + '@swc/core-win32-ia32-msvc@1.13.3': + resolution: {integrity: sha512-nvehQVEOdI1BleJpuUgPLrclJ0TzbEMc+MarXDmmiRFwEUGqj+pnfkTSb7RZyS1puU74IXdK/YhTirHurtbI9w==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.13.2': - resolution: {integrity: sha512-qlmMkFZJus8cYuBURx1a3YAG2G7IW44i+FEYV5/32ylKkzGNAr9tDJSA53XNnNXkAB5EXSPsOz7bn5C3JlEtdQ==} + '@swc/core-win32-x64-msvc@1.13.3': + resolution: {integrity: sha512-A+JSKGkRbPLVV2Kwx8TaDAV0yXIXm/gc8m98hSkVDGlPBBmydgzNdWy3X7HTUBM7IDk7YlWE7w2+RUGjdgpTmg==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.13.2': - resolution: {integrity: sha512-YWqn+0IKXDhqVLKoac4v2tV6hJqB/wOh8/Br8zjqeqBkKa77Qb0Kw2i7LOFzjFNZbZaPH6AlMGlBwNrxaauaAg==} + '@swc/core@1.13.3': + resolution: {integrity: sha512-ZaDETVWnm6FE0fc+c2UE8MHYVS3Fe91o5vkmGfgwGXFbxYvAjKSqxM/j4cRc9T7VZNSJjriXq58XkfCp3Y6f+w==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '>=0.5.17' @@ -3439,11 +3450,11 @@ packages: '@tailwindcss/postcss@4.1.11': resolution: {integrity: sha512-q/EAIIpF6WpLhKEuQSEVMZNMIY8KhWoAemZ9eylNAih9jxMGAYPPWBn3I9QL/2jZ+e7OEz/tZkX5HwbBR4HohA==} - '@tanstack/query-core@5.83.0': - resolution: {integrity: sha512-0M8dA+amXUkyz5cVUm/B+zSk3xkQAcuXuz5/Q/LveT4ots2rBpPTZOzd7yJa2Utsf8D2Upl5KyjhHRY+9lB/XA==} + '@tanstack/query-core@5.83.1': + resolution: {integrity: sha512-OG69LQgT7jSp+5pPuCfzltq/+7l2xoweggjme9vlbCPa/d7D7zaqv5vN/S82SzSYZ4EDLTxNO1PWrv49RAS64Q==} - '@tanstack/react-query@5.83.0': - resolution: {integrity: sha512-/XGYhZ3foc5H0VM2jLSD/NyBRIOK4q9kfeml4+0x2DlL6xVuAcVEW+hTlTapAmejObg0i3eNqhkr2dT+eciwoQ==} + '@tanstack/react-query@5.84.1': + resolution: {integrity: sha512-zo7EUygcWJMQfFNWDSG7CBhy8irje/XY0RDVKKV4IQJAysb+ZJkkJPcnQi+KboyGUgT+SQebRFoTqLuTtfoDLw==} peerDependencies: react: ^18 || ^19 @@ -3485,8 +3496,8 @@ packages: '@types/babel__template@7.4.4': resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - '@types/babel__traverse@7.20.7': - resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} '@types/chai@5.2.2': resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} @@ -3565,8 +3576,8 @@ packages: peerDependencies: '@types/react': ^19.0.0 - '@types/react-dom@19.1.6': - resolution: {integrity: sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==} + '@types/react-dom@19.1.7': + resolution: {integrity: sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==} peerDependencies: '@types/react': ^19.0.0 @@ -3578,8 +3589,8 @@ packages: '@types/react@19.0.10': resolution: {integrity: sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==} - '@types/react@19.1.8': - resolution: {integrity: sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==} + '@types/react@19.1.9': + resolution: {integrity: sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==} '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} @@ -3752,8 +3763,8 @@ packages: resolution: {integrity: sha512-y1O95J4mnl+6MpVmKfMYXec17hMEwE/yeCglFNdx+QvLLtP0yN4rSYcbkXnth+lElBuKKek2NbvOfOGPpUXCvw==} engines: {node: '>=18'} - '@xhmikosr/bin-wrapper@13.1.1': - resolution: {integrity: sha512-93iXrknsWrP3G6QJBCJVz4xftMe5ZNJMWyOjtiug74k8dmQA4blfmaBcBgJUCYfSSQnjxjMNqxfincVuWbcGLA==} + '@xhmikosr/bin-wrapper@13.2.0': + resolution: {integrity: sha512-t9U9X0sDPRGDk5TGx4dv5xiOvniVJpXnfTuynVKwHgtib95NYEw4MkZdJqhoSiz820D9m0o6PCqOPMXz0N9fIw==} engines: {node: '>=18'} '@xhmikosr/decompress-tar@8.1.0': @@ -3772,12 +3783,12 @@ packages: resolution: {integrity: sha512-oqTYAcObqTlg8owulxFTqiaJkfv2SHsxxxz9Wg4krJAHVzGWlZsU8tAB30R6ow+aHrfv4Kub6WQ8u04NWVPUpA==} engines: {node: '>=18'} - '@xhmikosr/decompress@10.1.0': - resolution: {integrity: sha512-jmVnzuJYX4f89Ls63CRI5s0GrWpLUqo+vY+8YrXuFiebDcF3xFwiSVCie68LrJNltSYMLcDY60JN51H/lVTw6Q==} + '@xhmikosr/decompress@10.2.0': + resolution: {integrity: sha512-MmDBvu0+GmADyQWHolcZuIWffgfnuTo4xpr2I/Qw5Ox0gt+e1Be7oYqJM4te5ylL6mzlcoicnHVDvP27zft8tg==} engines: {node: '>=18'} - '@xhmikosr/downloader@15.1.1': - resolution: {integrity: sha512-zRj8cT8KbXigN5bJz9QszeyR1Jsc4HOizjLOB5FspQ0COvKpoAOq/OUYAI5b0Pt4pfeSyc6F5iHvdGCg8Him8Q==} + '@xhmikosr/downloader@15.2.0': + resolution: {integrity: sha512-lAqbig3uRGTt0sHNIM4vUG9HoM+mRl8K28WuYxyXLCUT6pyzl4Y4i0LZ3jMEsCYZ6zjPZbO9XkG91OSTd4si7g==} engines: {node: '>=18'} '@xhmikosr/os-filter-obj@3.0.0': @@ -4066,8 +4077,8 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - caniuse-lite@1.0.30001727: - resolution: {integrity: sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==} + caniuse-lite@1.0.30001731: + resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -4414,8 +4425,8 @@ packages: resolution: {integrity: sha512-tCPWVZWZqWVx2XUsVpJRnH9Mx0ClVOf5YUHerZ5so1OKSlqww4zy1R5ksEdGRcO3tM3zj0PYN6V48TbQCL1RfA==} hasBin: true - drizzle-orm@0.44.3: - resolution: {integrity: sha512-8nIiYQxOpgUicEL04YFojJmvC4DNO4KoyXsEIqN44+g6gNBr6hmVpWk3uyAt4CaTiRGDwoU+alfqNNeonLAFOQ==} + drizzle-orm@0.44.4: + resolution: {integrity: sha512-ZyzKFpTC/Ut3fIqc2c0dPZ6nhchQXriTsqTNs4ayRgl6sZcFlMs9QZKPSHXK4bdOf41GHGWf+FrpcDDYwW+W6Q==} peerDependencies: '@aws-sdk/client-rds-data': '>=3' '@cloudflare/workers-types': '>=4' @@ -4513,8 +4524,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.191: - resolution: {integrity: sha512-xcwe9ELcuxYLUFqZZxL19Z6HVKcvNkIwhbHUz7L3us6u12yR+7uY89dSl570f/IqNthx8dAw3tojG7i4Ni4tDA==} + electron-to-chromium@1.5.194: + resolution: {integrity: sha512-SdnWJwSUot04UR51I2oPD8kuP2VI37/CADR1OHsFOUzZIvfWJBO6q11k5P/uKNyTT3cdOsnyjkrZ+DDShqYqJA==} emoji-regex@10.4.0: resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} @@ -4946,22 +4957,8 @@ packages: fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - framer-motion@12.23.9: - resolution: {integrity: sha512-TqEHXj8LWfQSKqfdr5Y4mYltYLw96deu6/K9kGDd+ysqRJPNwF9nb5mZcrLmybHbU7gcJ+HQar41U3UTGanbbQ==} - peerDependencies: - '@emotion/is-prop-valid': '*' - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@emotion/is-prop-valid': - optional: true - react: - optional: true - react-dom: - optional: true - - framer-motion@12.7.5: - resolution: {integrity: sha512-iD+vBOLn8E8bwBAFUQ1DYXjivm+cGGPgQUQ4Doleq7YP/zHdozUVwAMBJwOOfCTbtM8uOooMi77noD261Kxiyw==} + framer-motion@12.23.12: + resolution: {integrity: sha512-6e78rdVtnBvlEVgu6eFEAgG9v3wLnYEboM8I5O5EXvfKC8gxGQB8wXJdhkMy10iVcn05jl6CNw7/HTsTCfwcWg==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 || ^19.0.0 @@ -4984,8 +4981,8 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - fumadocs-core@15.6.6: - resolution: {integrity: sha512-90sUbejUDevfDHykXXudw+3xTqYjuSZU1evhJiRBiZ0Oy0xQX4p5zPO48b5dhuVp44osvOH0ZKfHsVdkor6kZQ==} + fumadocs-core@15.6.7: + resolution: {integrity: sha512-+tAnCFoE2NZOZxaqwKc1HFbCoOOa/E6sJpXlviCE6JYDl6vvpmhC7CWjrzVzxmtLb5Y3wm89MdRR3opfPR79Uw==} peerDependencies: '@mixedbread/sdk': ^0.19.0 '@oramacloud/client': 1.x.x || 2.x.x @@ -5010,8 +5007,8 @@ packages: react-dom: optional: true - fumadocs-mdx@11.7.1: - resolution: {integrity: sha512-zY2s3OP0XsNhayp1ac3Qz/xSZLdfjFE3zCCt+LDlwAfRwlpP8WdwfUNsPzZSnnXYigLl0oEQNuL+SF4ZgXctfQ==} + fumadocs-mdx@11.7.3: + resolution: {integrity: sha512-EMuISWaUeImpd2KI9LdWfc1rMWv9qfIoJSAXsI3TDXph8v4FyQ7Nz+NRpeoNgv59gzwKbkMRcnZnrKXI/ybnoA==} hasBin: true peerDependencies: '@fumadocs/mdx-remote': ^1.4.0 @@ -5029,8 +5026,8 @@ packages: vite: optional: true - fumadocs-ui@15.6.6: - resolution: {integrity: sha512-Ft/F8yrea7Z1kcI6NDFxKUwLiE4b0elvMDGfmJ/EZJHTuHfl5niXUUCCfvgkTDcZRYjPJktnMxC2msr78wWrzA==} + fumadocs-ui@15.6.7: + resolution: {integrity: sha512-raj2iyglEj3Hi6pjZH6y7HJtizJ8yZVtEQNMxyrwpKrqOUHzAZ2lRvT3gCETBVbnF+Oa6PSLRJgL30XqO7LkBg==} peerDependencies: '@types/react': '*' next: 14.x.x || 15.x.x @@ -5203,8 +5200,8 @@ packages: hermes-parser@0.25.1: resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} - hono@4.8.9: - resolution: {integrity: sha512-ERIxkXMRhUxGV7nS/Af52+j2KL60B1eg+k6cPtgzrGughS+espS9KQ7QO0SMnevtmRlBfAcN0mf1jKtO6j/doA==} + hono@4.8.10: + resolution: {integrity: sha512-DRMYbR3aFk6YET1FCSAFbgF2cWYTz5j0YAFYPECx9fmrbKBDAYnWU+YCgRTpOaatxMYN6e68U/2IG39zRP4W/A==} engines: {node: '>=16.9.0'} html-encoding-sniffer@4.0.0: @@ -5741,6 +5738,11 @@ packages: peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + lucide-react@0.536.0: + resolution: {integrity: sha512-2PgvNa9v+qz4Jt/ni8vPLt4jwoFybXHuubQT8fv4iCW5TjDxkbZjNZZHa485ad73NSEn/jdsEtU57eE1g+ma8A==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true @@ -6005,14 +6007,14 @@ packages: mlly@1.7.4: resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} - motion-dom@12.23.9: - resolution: {integrity: sha512-6Sv++iWS8XMFCgU1qwKj9l4xuC47Hp4+2jvPfyTXkqDg2tTzSgX6nWKD4kNFXk0k7llO59LZTPuJigza4A2K1A==} + motion-dom@12.23.12: + resolution: {integrity: sha512-RcR4fvMCTESQBD/uKQe49D5RUeDOokkGRmz4ceaJKDBgHYtZtntC/s2vLvY38gqGaytinij/yi3hMcWVcEF5Kw==} motion-utils@12.23.6: resolution: {integrity: sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==} - motion@12.23.9: - resolution: {integrity: sha512-5PDgsbNtZ4cpfew3STYL0p06rIiy8vOveQuQBXUAa2+m1WMzjf65DXYn6eo88dM2s+XLxAQq3ZiOjcnKMACEtQ==} + motion@12.23.12: + resolution: {integrity: sha512-8jCD8uW5GD1csOoqh1WhH1A6j5APHVE15nuBkFeRiMzYBdRwyAHmSP/oXSuW0WJPZRXTFdBoG4hY9TFWNhhwng==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 || ^19.0.0 @@ -6109,8 +6111,8 @@ packages: sass: optional: true - next@15.4.4: - resolution: {integrity: sha512-kNcubvJjOL9yUOfwtZF3HfDhuhp+kVD+FM2A6Tyua1eI/xfmY4r/8ZS913MMz+oWKDlbps/dQOWdDricuIkXLw==} + next@15.4.5: + resolution: {integrity: sha512-nJ4v+IO9CPmbmcvsPebIoX3Q+S7f6Fu08/dEWu0Ttfa+wVwQRh9epcmsyCPjmL2b8MxC+CkBR97jgDhUUztI3g==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -6333,8 +6335,8 @@ packages: resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} engines: {node: '>=4'} - pg-types@4.0.2: - resolution: {integrity: sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==} + pg-types@4.1.0: + resolution: {integrity: sha512-o2XFanIMy/3+mThw69O8d4n1E5zsLhdO+OPqswezu7Z5ekP4hYDqlDjlmOpYMbzY2Br0ufCwJLdDIXeNVwcWFg==} engines: {node: '>=10'} pg@8.13.1: @@ -6377,13 +6379,13 @@ packages: pkg-types@2.2.0: resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==} - playwright-core@1.54.1: - resolution: {integrity: sha512-Nbjs2zjj0htNhzgiy5wu+3w09YetDx5pkrpI/kZotDlDUaYk0HVA5xrBVPdow4SAUIlhgKcJeJg4GRKW6xHusA==} + playwright-core@1.54.2: + resolution: {integrity: sha512-n5r4HFbMmWsB4twG7tJLDN9gmBUeSPcsBZiWSE4DnYz9mJMAFqr2ID7+eGC9kpEnxExJ1epttwR59LEWCk8mtA==} engines: {node: '>=18'} hasBin: true - playwright@1.54.1: - resolution: {integrity: sha512-peWpSwIBmSLi6aW2auvrUtf2DqY16YYcCMO8rTVx486jKmDTJg7UAhyrraP98GB8BoPURZP8+nxO7TSd4cPr5g==} + playwright@1.54.2: + resolution: {integrity: sha512-Hu/BMoA1NAdRUuulyvQC0pEqZ4vQbGfn8f7wPXcnqQmM+zct9UliKxsIkLNmz/ku7LElUNqmaiv1TG/aL5ACsw==} engines: {node: '>=18'} hasBin: true @@ -6501,8 +6503,8 @@ packages: resolution: {integrity: sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==} engines: {node: '>=12'} - preact@10.26.9: - resolution: {integrity: sha512-SSjF9vcnF27mJK1XyFMNJzFd5u3pQiATFqoaDy03XuN00u4ziveVVEGt5RKJrDR8MHE/wJo9Nnad56RLzS2RMA==} + preact@10.27.0: + resolution: {integrity: sha512-/DTYoB6mwwgPytiqQTh/7SFRL98ZdiD8Sk8zIUVOxtwq4oWcwrcd1uno9fE/zZmUaUrFNYzbH14CPebOz9tZQw==} prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -6653,13 +6655,13 @@ packages: peerDependencies: react: ^19.0.0 - react-dom@19.1.0: - resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} + react-dom@19.1.1: + resolution: {integrity: sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==} peerDependencies: - react: ^19.1.0 + react: ^19.1.1 - react-email@4.2.4: - resolution: {integrity: sha512-r5x1nlWUXKZWoIU7l9jx5jkq43RuDUlroH0FRA5MMrCOaLqAfg3vOsAxAadNkG47L0iTeDkkqTKzaV6dTaYf/A==} + react-email@4.2.7: + resolution: {integrity: sha512-zF1dIGTnG10Xls+6ViJydYEYbqqGTq0BWYwTqsp70sPG2eRME79MSq82akFBfdaM/XhLwh6PuNjeohso3aJowA==} engines: {node: '>=18.0.0'} hasBin: true @@ -6754,8 +6756,8 @@ packages: resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} engines: {node: '>=0.10.0'} - react@19.1.0: - resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} + react@19.1.1: + resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==} engines: {node: '>=0.10.0'} read-cache@1.0.0: @@ -6776,8 +6778,10 @@ packages: recma-build-jsx@1.0.0: resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} - recma-jsx@1.0.0: - resolution: {integrity: sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==} + recma-jsx@1.0.1: + resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 recma-parse@1.0.0: resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} @@ -6877,8 +6881,8 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rollup@4.46.0: - resolution: {integrity: sha512-ONmkT3Ud3IfW15nl7l4qAZko5/2iZ5ALVBDh02ZSZ5IGVLJSYkRcRa3iB58VyEIyoofs9m2xdVrm+lTi97+3pw==} + rollup@4.46.2: + resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -7002,8 +7006,8 @@ packages: resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} engines: {node: '>= 0.4'} - shiki@3.8.1: - resolution: {integrity: sha512-+MYIyjwGPCaegbpBeFN9+oOifI8CKiKG3awI/6h3JeT85c//H2wDW/xCJEGuQ5jPqtbboKNqNy+JyX9PYpGwNg==} + shiki@3.9.1: + resolution: {integrity: sha512-HogZ8nMnv9VAQMrG+P7BleJFhrKHm3fi6CYyHRbUu61gJ0lpqLr6ecYEui31IYG1Cn9Bad7N2vf332iXHnn0bQ==} side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} @@ -7098,6 +7102,7 @@ packages: source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} + deprecated: The work that was done in this beta branch won't be included in future versions space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} @@ -7542,8 +7547,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} engines: {node: '>=14.17'} hasBin: true @@ -7772,8 +7777,8 @@ packages: webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - webpack@5.100.2: - resolution: {integrity: sha512-QaNKAvGCDRh3wW1dsDjeMdDXwZm2vqq3zn6Pvq4rHOEOGSaUMgOOjG2Y9ZbIGzpfkJk9ZYTHpDqgDfeBDcnLaw==} + webpack@5.101.0: + resolution: {integrity: sha512-B4t+nJqytPeuZlHuIKTbalhljIFXeNRqrUGAQgTGlfOl2lXXKXw+yZu6bicycP+PUlM44CxBjCFD6aciKFT3LQ==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -7935,8 +7940,8 @@ packages: zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - zod@4.0.10: - resolution: {integrity: sha512-3vB+UU3/VmLL2lvwcY/4RV2i9z/YU0DTV/tDuYjrwmx5WeJ7hwy+rGEEx8glHp6Yxw7ibRbKSaIFBgReRPe5KA==} + zod@4.0.14: + resolution: {integrity: sha512-nGFJTnJN6cM2v9kXL+SOBq3AtjQby3Mv5ySGFof5UGRHrRioSJ5iG680cYNjE/yWk671nROcpPj4hAS8nyLhSw==} zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -7958,10 +7963,10 @@ snapshots: '@csstools/css-tokenizer': 3.0.4 lru-cache: 10.4.3 - '@asteasolutions/zod-to-openapi@8.0.0(zod@4.0.10)': + '@asteasolutions/zod-to-openapi@8.1.0(zod@4.0.14)': dependencies: openapi3-ts: 4.5.0 - zod: 4.0.10 + zod: 4.0.14 '@astrojs/compiler@0.31.4': optional: true @@ -7982,9 +7987,9 @@ snapshots: '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-module-transforms': 7.27.3(@babel/core@7.26.10) '@babel/helpers': 7.28.2 - '@babel/parser': 7.28.0 + '@babel/parser': 7.27.0 '@babel/template': 7.27.2 - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.27.0 '@babel/types': 7.28.2 convert-source-map: 2.0.0 debug: 4.4.1 @@ -8160,7 +8165,7 @@ snapshots: dependencies: '@babel/code-frame': 7.27.1 '@babel/generator': 7.28.0 - '@babel/parser': 7.28.0 + '@babel/parser': 7.27.0 '@babel/template': 7.27.2 '@babel/types': 7.28.2 debug: 4.4.1 @@ -8218,22 +8223,22 @@ snapshots: '@csstools/css-tokenizer@3.0.4': {} - '@dnd-kit/accessibility@3.1.1(react@19.1.0)': + '@dnd-kit/accessibility@3.1.1(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 tslib: 2.8.1 - '@dnd-kit/core@6.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@dnd-kit/core@6.3.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@dnd-kit/accessibility': 3.1.1(react@19.1.0) - '@dnd-kit/utilities': 3.2.2(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@dnd-kit/accessibility': 3.1.1(react@19.1.1) + '@dnd-kit/utilities': 3.2.2(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) tslib: 2.8.1 - '@dnd-kit/utilities@3.2.2(react@19.1.0)': + '@dnd-kit/utilities@3.2.2(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 tslib: 2.8.1 '@drizzle-team/brocli@0.10.2': {} @@ -8479,12 +8484,12 @@ snapshots: '@eslint-community/regexpp@4.12.1': {} - '@eslint-react/ast@1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3)': + '@eslint-react/ast@1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-react/eff': 1.52.3 '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) string-ts: 2.2.1 ts-pattern: 5.8.0 transitivePeerDependencies: @@ -8492,17 +8497,17 @@ snapshots: - supports-color - typescript - '@eslint-react/core@1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3)': + '@eslint-react/core@1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@eslint-react/ast': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/ast': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@eslint-react/eff': 1.52.3 - '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@eslint-react/shared': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@eslint-react/var': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@eslint-react/shared': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@eslint-react/var': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) birecord: 0.1.1 ts-pattern: 5.8.0 transitivePeerDependencies: @@ -8512,58 +8517,58 @@ snapshots: '@eslint-react/eff@1.52.3': {} - '@eslint-react/eslint-plugin@1.52.3(eslint@9.32.0(jiti@2.5.1))(ts-api-utils@2.1.0(typescript@5.8.3))(typescript@5.8.3)': + '@eslint-react/eslint-plugin@1.52.3(eslint@9.32.0(jiti@2.5.1))(ts-api-utils@2.1.0(typescript@5.9.2))(typescript@5.9.2)': dependencies: '@eslint-react/eff': 1.52.3 - '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@eslint-react/shared': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@eslint-react/shared': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.32.0(jiti@2.5.1) - eslint-plugin-react-debug: 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - eslint-plugin-react-dom: 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - eslint-plugin-react-hooks-extra: 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - eslint-plugin-react-naming-convention: 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - eslint-plugin-react-web-api: 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - eslint-plugin-react-x: 1.52.3(eslint@9.32.0(jiti@2.5.1))(ts-api-utils@2.1.0(typescript@5.8.3))(typescript@5.8.3) - optionalDependencies: - typescript: 5.8.3 + eslint-plugin-react-debug: 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-react-dom: 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-react-hooks-extra: 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-react-naming-convention: 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-react-web-api: 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + eslint-plugin-react-x: 1.52.3(eslint@9.32.0(jiti@2.5.1))(ts-api-utils@2.1.0(typescript@5.9.2))(typescript@5.9.2) + optionalDependencies: + typescript: 5.9.2 transitivePeerDependencies: - supports-color - ts-api-utils - '@eslint-react/kit@1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3)': + '@eslint-react/kit@1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-react/eff': 1.52.3 - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) ts-pattern: 5.8.0 - zod: 4.0.10 + zod: 4.0.14 transitivePeerDependencies: - eslint - supports-color - typescript - '@eslint-react/shared@1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3)': + '@eslint-react/shared@1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-react/eff': 1.52.3 - '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) ts-pattern: 5.8.0 - zod: 4.0.10 + zod: 4.0.14 transitivePeerDependencies: - eslint - supports-color - typescript - '@eslint-react/var@1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3)': + '@eslint-react/var@1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@eslint-react/ast': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/ast': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@eslint-react/eff': 1.52.3 '@typescript-eslint/scope-manager': 8.38.0 '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) string-ts: 2.2.1 ts-pattern: 5.8.0 transitivePeerDependencies: @@ -8608,26 +8613,26 @@ snapshots: '@eslint/core': 0.15.1 levn: 0.4.1 - '@floating-ui/core@1.7.2': + '@floating-ui/core@1.7.3': dependencies: '@floating-ui/utils': 0.2.10 - '@floating-ui/dom@1.7.2': + '@floating-ui/dom@1.7.3': dependencies: - '@floating-ui/core': 1.7.2 + '@floating-ui/core': 1.7.3 '@floating-ui/utils': 0.2.10 - '@floating-ui/react-dom@2.1.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@floating-ui/react-dom@2.1.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@floating-ui/dom': 1.7.2 + '@floating-ui/dom': 1.7.3 react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - '@floating-ui/react-dom@2.1.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@floating-ui/react-dom@2.1.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@floating-ui/dom': 1.7.2 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@floating-ui/dom': 1.7.3 + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) '@floating-ui/utils@0.2.10': {} @@ -8661,31 +8666,31 @@ snapshots: dependencies: tslib: 2.8.1 - '@hono/node-server@1.17.1(hono@4.8.9)': + '@hono/node-server@1.18.0(hono@4.8.10)': dependencies: - hono: 4.8.9 + hono: 4.8.10 - '@hono/swagger-ui@0.5.2(hono@4.8.9)': + '@hono/swagger-ui@0.5.2(hono@4.8.10)': dependencies: - hono: 4.8.9 + hono: 4.8.10 - '@hono/zod-openapi@1.0.2(hono@4.8.9)(zod@4.0.10)': + '@hono/zod-openapi@1.0.2(hono@4.8.10)(zod@4.0.14)': dependencies: - '@asteasolutions/zod-to-openapi': 8.0.0(zod@4.0.10) - '@hono/zod-validator': 0.7.2(hono@4.8.9)(zod@4.0.10) - hono: 4.8.9 + '@asteasolutions/zod-to-openapi': 8.1.0(zod@4.0.14) + '@hono/zod-validator': 0.7.2(hono@4.8.10)(zod@4.0.14) + hono: 4.8.10 openapi3-ts: 4.5.0 - zod: 4.0.10 + zod: 4.0.14 - '@hono/zod-validator@0.7.2(hono@4.8.9)(zod@4.0.10)': + '@hono/zod-validator@0.7.2(hono@4.8.10)(zod@4.0.14)': dependencies: - hono: 4.8.9 - zod: 4.0.10 + hono: 4.8.10 + zod: 4.0.14 - '@hookform/resolvers@5.2.0(react-hook-form@7.61.1(react@19.1.0))': + '@hookform/resolvers@5.2.1(react-hook-form@7.61.1(react@19.1.1))': dependencies: '@standard-schema/utils': 0.3.0 - react-hook-form: 7.61.1(react@19.1.0) + react-hook-form: 7.61.1(react@19.1.1) '@humanfs/core@0.19.1': {} @@ -8934,7 +8939,7 @@ snapshots: optionalDependencies: '@types/node': 24.1.0 - '@inquirer/prompts@7.7.1(@types/node@24.1.0)': + '@inquirer/prompts@7.8.0(@types/node@24.1.0)': dependencies: '@inquirer/checkbox': 4.2.0(@types/node@24.1.0) '@inquirer/confirm': 5.1.14(@types/node@24.1.0) @@ -8944,7 +8949,7 @@ snapshots: '@inquirer/number': 3.0.17(@types/node@24.1.0) '@inquirer/password': 4.0.17(@types/node@24.1.0) '@inquirer/rawlist': 4.1.5(@types/node@24.1.0) - '@inquirer/search': 3.0.17(@types/node@24.1.0) + '@inquirer/search': 3.1.0(@types/node@24.1.0) '@inquirer/select': 4.3.1(@types/node@24.1.0) optionalDependencies: '@types/node': 24.1.0 @@ -8957,7 +8962,7 @@ snapshots: optionalDependencies: '@types/node': 24.1.0 - '@inquirer/search@3.0.17(@types/node@24.1.0)': + '@inquirer/search@3.1.0(@types/node@24.1.0)': dependencies: '@inquirer/core': 10.1.15(@types/node@24.1.0) '@inquirer/figures': 1.0.13 @@ -9041,7 +9046,7 @@ snapshots: hast-util-to-jsx-runtime: 2.3.6 markdown-extensions: 2.0.0 recma-build-jsx: 1.0.0 - recma-jsx: 1.0.0(acorn@8.15.0) + recma-jsx: 1.0.1(acorn@8.15.0) recma-stringify: 1.0.0 rehype-recma: 1.0.0 remark-mdx: 3.1.0 @@ -9132,54 +9137,54 @@ snapshots: '@next/env@15.4.1': {} - '@next/env@15.4.4': {} + '@next/env@15.4.5': {} '@next/swc-darwin-arm64@15.4.1': optional: true - '@next/swc-darwin-arm64@15.4.4': + '@next/swc-darwin-arm64@15.4.5': optional: true '@next/swc-darwin-x64@15.4.1': optional: true - '@next/swc-darwin-x64@15.4.4': + '@next/swc-darwin-x64@15.4.5': optional: true '@next/swc-linux-arm64-gnu@15.4.1': optional: true - '@next/swc-linux-arm64-gnu@15.4.4': + '@next/swc-linux-arm64-gnu@15.4.5': optional: true '@next/swc-linux-arm64-musl@15.4.1': optional: true - '@next/swc-linux-arm64-musl@15.4.4': + '@next/swc-linux-arm64-musl@15.4.5': optional: true '@next/swc-linux-x64-gnu@15.4.1': optional: true - '@next/swc-linux-x64-gnu@15.4.4': + '@next/swc-linux-x64-gnu@15.4.5': optional: true '@next/swc-linux-x64-musl@15.4.1': optional: true - '@next/swc-linux-x64-musl@15.4.4': + '@next/swc-linux-x64-musl@15.4.5': optional: true '@next/swc-win32-arm64-msvc@15.4.1': optional: true - '@next/swc-win32-arm64-msvc@15.4.4': + '@next/swc-win32-arm64-msvc@15.4.5': optional: true '@next/swc-win32-x64-msvc@15.4.1': optional: true - '@next/swc-win32-x64-msvc@15.4.4': + '@next/swc-win32-x64-msvc@15.4.5': optional: true '@nodelib/fs.scandir@2.1.5': @@ -9199,10 +9204,10 @@ snapshots: '@petamoriken/float16@3.9.2': optional: true - '@pivanov/utils@0.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@pivanov/utils@0.0.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) '@pkgjs/parseargs@0.11.0': optional: true @@ -9212,16 +9217,16 @@ snapshots: '@pkgr/core@0.2.9': {} - '@playwright/test@1.54.1': + '@playwright/test@1.54.2': dependencies: - playwright: 1.54.1 + playwright: 1.54.2 '@preact/signals-core@1.11.0': {} - '@preact/signals@1.3.2(preact@10.26.9)': + '@preact/signals@1.3.2(preact@10.27.0)': dependencies: '@preact/signals-core': 1.11.0 - preact: 10.26.9 + preact: 10.27.0 '@radix-ui/colors@3.0.0': {} @@ -9229,45 +9234,45 @@ snapshots: '@radix-ui/primitive@1.1.2': {} - '@radix-ui/react-accessible-icon@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-accessible-icon@1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-accordion@1.2.11(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-accordion@1.2.11(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collapsible': 1.1.11(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) - - '@radix-ui/react-alert-dialog@1.1.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-collapsible': 1.1.11(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-alert-dialog@1.1.14(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) '@radix-ui/react-arrow@1.1.4(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: @@ -9278,68 +9283,68 @@ snapshots: '@types/react': 19.0.10 '@types/react-dom': 19.0.4(@types/react@19.0.10) - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-aspect-ratio@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-aspect-ratio@1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-checkbox@1.3.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-checkbox@1.3.2(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-collapsible@1.1.11(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-collapsible@1.1.11(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) '@radix-ui/react-collapsible@1.1.7(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: @@ -9369,17 +9374,17 @@ snapshots: '@types/react': 19.0.10 '@types/react-dom': 19.0.4(@types/react@19.0.10) - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) '@radix-ui/react-compose-refs@1.1.2(@types/react@19.0.10)(react@19.0.0)': dependencies: @@ -9387,25 +9392,25 @@ snapshots: optionalDependencies: '@types/react': 19.0.10 - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.9)(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 - '@radix-ui/react-context-menu@2.2.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-context-menu@2.2.15(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-menu': 2.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-menu': 2.1.15(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) '@radix-ui/react-context@1.1.2(@types/react@19.0.10)(react@19.0.0)': dependencies: @@ -9413,33 +9418,33 @@ snapshots: optionalDependencies: '@types/react': 19.0.10 - '@radix-ui/react-context@1.1.2(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-context@1.1.2(@types/react@19.1.9)(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 - '@radix-ui/react-dialog@1.1.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dialog@1.1.14(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.1) aria-hidden: 1.2.6 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.7.1(@types/react@19.1.8)(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + react-remove-scroll: 2.7.1(@types/react@19.1.9)(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) '@radix-ui/react-direction@1.1.1(@types/react@19.0.10)(react@19.0.0)': dependencies: @@ -9447,24 +9452,24 @@ snapshots: optionalDependencies: '@types/react': 19.0.10 - '@radix-ui/react-direction@1.1.1(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-direction@1.1.1(@types/react@19.1.9)(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 - '@radix-ui/react-dismissable-layer@1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dismissable-layer@1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) '@radix-ui/react-dismissable-layer@1.1.7(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: @@ -9494,20 +9499,20 @@ snapshots: '@types/react': 19.0.10 '@types/react-dom': 19.0.4(@types/react@19.0.10) - '@radix-ui/react-dropdown-menu@2.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dropdown-menu@2.1.15(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-menu': 2.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-menu': 2.1.15(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) '@radix-ui/react-focus-guards@1.1.2(@types/react@19.0.10)(react@19.0.0)': dependencies: @@ -9515,11 +9520,11 @@ snapshots: optionalDependencies: '@types/react': 19.0.10 - '@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.9)(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 '@radix-ui/react-focus-scope@1.1.4(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: @@ -9532,47 +9537,47 @@ snapshots: '@types/react': 19.0.10 '@types/react-dom': 19.0.4(@types/react@19.0.10) - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-form@0.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-form@0.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-label': 2.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-label': 2.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-hover-card@1.1.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-hover-card@1.1.14(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) '@radix-ui/react-id@1.1.1(@types/react@19.0.10)(react@19.0.0)': dependencies: @@ -9581,21 +9586,21 @@ snapshots: optionalDependencies: '@types/react': 19.0.10 - '@radix-ui/react-id@1.1.1(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-id@1.1.1(@types/react@19.1.9)(react@19.1.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 - '@radix-ui/react-label@2.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-label@2.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) '@radix-ui/react-menu@2.1.10(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: @@ -9623,107 +9628,107 @@ snapshots: '@types/react': 19.0.10 '@types/react-dom': 19.0.4(@types/react@19.0.10) - '@radix-ui/react-menu@2.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-menu@2.1.15(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.1) aria-hidden: 1.2.6 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.7.1(@types/react@19.1.8)(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + react-remove-scroll: 2.7.1(@types/react@19.1.9)(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-menubar@1.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-menubar@1.1.15(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-menu': 2.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) - - '@radix-ui/react-navigation-menu@1.2.13(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-menu': 2.1.15(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-navigation-menu@1.2.13(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) - - '@radix-ui/react-one-time-password-field@0.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-one-time-password-field@0.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) - - '@radix-ui/react-password-toggle-field@0.1.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-password-toggle-field@0.1.2(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) '@radix-ui/react-popover@1.1.10(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: @@ -9748,32 +9753,32 @@ snapshots: '@types/react': 19.0.10 '@types/react-dom': 19.0.4(@types/react@19.0.10) - '@radix-ui/react-popover@1.1.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-popover@1.1.14(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.1) aria-hidden: 1.2.6 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.7.1(@types/react@19.1.8)(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + react-remove-scroll: 2.7.1(@types/react@19.1.9)(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) '@radix-ui/react-popper@1.2.4(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@floating-ui/react-dom': 2.1.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@floating-ui/react-dom': 2.1.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-arrow': 1.1.4(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.10)(react@19.0.0) '@radix-ui/react-context': 1.1.2(@types/react@19.0.10)(react@19.0.0) @@ -9789,23 +9794,23 @@ snapshots: '@types/react': 19.0.10 '@types/react-dom': 19.0.4(@types/react@19.0.10) - '@radix-ui/react-popper@1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@floating-ui/react-dom': 2.1.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-popper@1.2.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@floating-ui/react-dom': 2.1.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.9)(react@19.1.1) '@radix-ui/rect': 1.1.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) '@radix-ui/react-portal@1.1.6(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: @@ -9817,15 +9822,15 @@ snapshots: '@types/react': 19.0.10 '@types/react-dom': 19.0.4(@types/react@19.0.10) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) '@radix-ui/react-presence@1.1.3(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: @@ -9837,15 +9842,15 @@ snapshots: '@types/react': 19.0.10 '@types/react-dom': 19.0.4(@types/react@19.0.10) - '@radix-ui/react-presence@1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) '@radix-ui/react-primitive@2.1.0(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: @@ -9856,59 +9861,59 @@ snapshots: '@types/react': 19.0.10 '@types/react-dom': 19.0.4(@types/react@19.0.10) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-progress@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-progress@1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-radio-group@1.3.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-radio-group@1.3.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) - - '@radix-ui/react-roving-focus@1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-roving-focus@1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) '@radix-ui/react-roving-focus@1.1.6(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: @@ -9927,79 +9932,79 @@ snapshots: '@types/react': 19.0.10 '@types/react-dom': 19.0.4(@types/react@19.0.10) - '@radix-ui/react-scroll-area@1.2.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-scroll-area@1.2.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': 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.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-select@2.2.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-select@2.2.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) aria-hidden: 1.2.6 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.7.1(@types/react@19.1.8)(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + react-remove-scroll: 2.7.1(@types/react@19.1.9)(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-separator@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-separator@1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-slider@1.3.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-slider@1.3.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) '@radix-ui/react-slot@1.2.0(@types/react@19.0.10)(react@19.0.0)': dependencies: @@ -10008,43 +10013,43 @@ snapshots: optionalDependencies: '@types/react': 19.0.10 - '@radix-ui/react-slot@1.2.3(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-slot@1.2.3(@types/react@19.1.9)(react@19.1.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 - '@radix-ui/react-switch@1.2.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-switch@1.2.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-tabs@1.1.12(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-tabs@1.1.12(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) '@radix-ui/react-tabs@1.1.7(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: @@ -10062,40 +10067,40 @@ snapshots: '@types/react': 19.0.10 '@types/react-dom': 19.0.4(@types/react@19.0.10) - '@radix-ui/react-toast@1.2.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-toast@1.2.14(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) - - '@radix-ui/react-toggle-group@1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-toggle-group@1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toggle': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-toggle': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) '@radix-ui/react-toggle-group@1.1.6(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: @@ -10123,31 +10128,31 @@ snapshots: '@types/react': 19.0.10 '@types/react-dom': 19.0.4(@types/react@19.0.10) - '@radix-ui/react-toggle@1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-toggle@1.1.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-toolbar@1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-toolbar@1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toggle-group': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-toggle-group': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) '@radix-ui/react-tooltip@1.2.3(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: @@ -10169,25 +10174,25 @@ snapshots: '@types/react': 19.0.10 '@types/react-dom': 19.0.4(@types/react@19.0.10) - '@radix-ui/react-tooltip@1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-tooltip@1.2.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.0.10)(react@19.0.0)': dependencies: @@ -10195,11 +10200,11 @@ snapshots: optionalDependencies: '@types/react': 19.0.10 - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.9)(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.0.10)(react@19.0.0)': dependencies: @@ -10209,13 +10214,13 @@ snapshots: optionalDependencies: '@types/react': 19.0.10 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.9)(react@19.1.1)': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.0.10)(react@19.0.0)': dependencies: @@ -10224,12 +10229,12 @@ snapshots: optionalDependencies: '@types/react': 19.0.10 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.9)(react@19.1.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.0.10)(react@19.0.0)': dependencies: @@ -10238,19 +10243,19 @@ snapshots: optionalDependencies: '@types/react': 19.0.10 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.9)(react@19.1.1)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 - '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.1.9)(react@19.1.1)': dependencies: - react: 19.1.0 - use-sync-external-store: 1.5.0(react@19.1.0) + react: 19.1.1 + use-sync-external-store: 1.5.0(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.0.10)(react@19.0.0)': dependencies: @@ -10258,17 +10263,17 @@ snapshots: optionalDependencies: '@types/react': 19.0.10 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.9)(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 - '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.9)(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 '@radix-ui/react-use-rect@1.1.1(@types/react@19.0.10)(react@19.0.0)': dependencies: @@ -10277,12 +10282,12 @@ snapshots: optionalDependencies: '@types/react': 19.0.10 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.9)(react@19.1.1)': dependencies: '@radix-ui/rect': 1.1.1 - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 '@radix-ui/react-use-size@1.1.1(@types/react@19.0.10)(react@19.0.0)': dependencies: @@ -10291,12 +10296,12 @@ snapshots: optionalDependencies: '@types/react': 19.0.10 - '@radix-ui/react-use-size@1.1.1(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-use-size@1.1.1(@types/react@19.1.9)(react@19.1.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.1) + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 '@radix-ui/react-visually-hidden@1.2.0(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: @@ -10307,102 +10312,132 @@ snapshots: '@types/react': 19.0.10 '@types/react-dom': 19.0.4(@types/react@19.0.10) - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) '@radix-ui/rect@1.1.1': {} - '@react-email/body@0.0.11(react@19.1.0)': + '@react-email/body@0.0.11(react@19.1.1)': + dependencies: + react: 19.1.1 + + '@react-email/body@0.1.0(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 - '@react-email/button@0.2.0(react@19.1.0)': + '@react-email/button@0.2.0(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 - '@react-email/code-block@0.1.0(react@19.1.0)': + '@react-email/code-block@0.1.0(react@19.1.1)': 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 - - '@react-email/column@0.0.13(react@19.1.0)': - dependencies: - react: 19.1.0 - - '@react-email/components@0.3.2(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.2.0(react@19.1.0) - '@react-email/code-block': 0.1.0(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.15(react@19.1.0) - '@react-email/preview': 0.0.13(react@19.1.0) - '@react-email/render': 1.1.3(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.2.2(react@19.1.0) - '@react-email/text': 0.1.5(react@19.1.0) - react: 19.1.0 + react: 19.1.1 + + '@react-email/code-inline@0.0.5(react@19.1.1)': + dependencies: + react: 19.1.1 + + '@react-email/column@0.0.13(react@19.1.1)': + dependencies: + react: 19.1.1 + + '@react-email/components@0.3.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@react-email/body': 0.0.11(react@19.1.1) + '@react-email/button': 0.2.0(react@19.1.1) + '@react-email/code-block': 0.1.0(react@19.1.1) + '@react-email/code-inline': 0.0.5(react@19.1.1) + '@react-email/column': 0.0.13(react@19.1.1) + '@react-email/container': 0.0.15(react@19.1.1) + '@react-email/font': 0.0.9(react@19.1.1) + '@react-email/head': 0.0.12(react@19.1.1) + '@react-email/heading': 0.0.15(react@19.1.1) + '@react-email/hr': 0.0.11(react@19.1.1) + '@react-email/html': 0.0.11(react@19.1.1) + '@react-email/img': 0.0.11(react@19.1.1) + '@react-email/link': 0.0.12(react@19.1.1) + '@react-email/markdown': 0.0.15(react@19.1.1) + '@react-email/preview': 0.0.13(react@19.1.1) + '@react-email/render': 1.1.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@react-email/row': 0.0.12(react@19.1.1) + '@react-email/section': 0.0.16(react@19.1.1) + '@react-email/tailwind': 1.2.2(react@19.1.1) + '@react-email/text': 0.1.5(react@19.1.1) + react: 19.1.1 transitivePeerDependencies: - react-dom - '@react-email/container@0.0.15(react@19.1.0)': + '@react-email/components@0.4.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@react-email/body': 0.1.0(react@19.1.1) + '@react-email/button': 0.2.0(react@19.1.1) + '@react-email/code-block': 0.1.0(react@19.1.1) + '@react-email/code-inline': 0.0.5(react@19.1.1) + '@react-email/column': 0.0.13(react@19.1.1) + '@react-email/container': 0.0.15(react@19.1.1) + '@react-email/font': 0.0.9(react@19.1.1) + '@react-email/head': 0.0.12(react@19.1.1) + '@react-email/heading': 0.0.15(react@19.1.1) + '@react-email/hr': 0.0.11(react@19.1.1) + '@react-email/html': 0.0.11(react@19.1.1) + '@react-email/img': 0.0.11(react@19.1.1) + '@react-email/link': 0.0.12(react@19.1.1) + '@react-email/markdown': 0.0.15(react@19.1.1) + '@react-email/preview': 0.0.13(react@19.1.1) + '@react-email/render': 1.1.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@react-email/row': 0.0.12(react@19.1.1) + '@react-email/section': 0.0.16(react@19.1.1) + '@react-email/tailwind': 1.2.2(react@19.1.1) + '@react-email/text': 0.1.5(react@19.1.1) + react: 19.1.1 + transitivePeerDependencies: + - react-dom + + '@react-email/container@0.0.15(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 - '@react-email/font@0.0.9(react@19.1.0)': + '@react-email/font@0.0.9(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 - '@react-email/head@0.0.12(react@19.1.0)': + '@react-email/head@0.0.12(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 - '@react-email/heading@0.0.15(react@19.1.0)': + '@react-email/heading@0.0.15(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 - '@react-email/hr@0.0.11(react@19.1.0)': + '@react-email/hr@0.0.11(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 - '@react-email/html@0.0.11(react@19.1.0)': + '@react-email/html@0.0.11(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 - '@react-email/img@0.0.11(react@19.1.0)': + '@react-email/img@0.0.11(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 - '@react-email/link@0.0.12(react@19.1.0)': + '@react-email/link@0.0.12(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 - '@react-email/markdown@0.0.15(react@19.1.0)': + '@react-email/markdown@0.0.15(react@19.1.1)': dependencies: - md-to-react-email: 5.0.5(react@19.1.0) - react: 19.1.0 + md-to-react-email: 5.0.5(react@19.1.1) + react: 19.1.1 - '@react-email/preview-server@4.2.4(@playwright/test@1.54.1)(@swc/core@1.13.2)(postcss@8.5.6)': + '@react-email/preview-server@4.2.7(@playwright/test@1.54.2)(@swc/core@1.13.3)(postcss@8.5.6)': dependencies: '@babel/core': 7.26.10 '@babel/parser': 7.27.0 @@ -10420,16 +10455,16 @@ snapshots: '@types/normalize-path': 3.0.2 '@types/react': 19.0.10 '@types/react-dom': 19.0.4(@types/react@19.0.10) - '@types/webpack': 5.28.5(@swc/core@1.13.2)(esbuild@0.25.0) + '@types/webpack': 5.28.5(@swc/core@1.13.3)(esbuild@0.25.0) autoprefixer: 10.4.21(postcss@8.5.6) chalk: 4.1.2 clsx: 2.1.1 esbuild: 0.25.0 - framer-motion: 12.7.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + framer-motion: 12.23.12(react-dom@19.0.0(react@19.0.0))(react@19.0.0) json5: 2.2.3 log-symbols: 4.1.0 module-punycode: punycode@2.3.1 - next: 15.4.1(@babel/core@7.26.10)(@playwright/test@1.54.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + next: 15.4.1(@babel/core@7.26.10)(@playwright/test@1.54.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) node-html-parser: 7.0.1 ora: 5.4.1 pretty-bytes: 6.1.1 @@ -10462,110 +10497,110 @@ snapshots: - utf-8-validate - webpack-cli - '@react-email/preview@0.0.13(react@19.1.0)': + '@react-email/preview@0.0.13(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 - '@react-email/render@1.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-email/render@1.1.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: html-to-text: 9.0.5 prettier: 3.6.2 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) react-promise-suspense: 0.3.4 - '@react-email/render@1.1.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-email/render@1.1.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: html-to-text: 9.0.5 prettier: 3.6.2 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) react-promise-suspense: 0.3.4 - '@react-email/row@0.0.12(react@19.1.0)': + '@react-email/row@0.0.12(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 - '@react-email/section@0.0.16(react@19.1.0)': + '@react-email/section@0.0.16(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 - '@react-email/tailwind@1.2.2(react@19.1.0)': + '@react-email/tailwind@1.2.2(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 - '@react-email/text@0.1.5(react@19.1.0)': + '@react-email/text@0.1.5(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 '@rolldown/pluginutils@1.0.0-beta.27': {} - '@rollup/pluginutils@5.2.0(rollup@4.46.0)': + '@rollup/pluginutils@5.2.0(rollup@4.46.2)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.46.0 + rollup: 4.46.2 - '@rollup/rollup-android-arm-eabi@4.46.0': + '@rollup/rollup-android-arm-eabi@4.46.2': optional: true - '@rollup/rollup-android-arm64@4.46.0': + '@rollup/rollup-android-arm64@4.46.2': optional: true - '@rollup/rollup-darwin-arm64@4.46.0': + '@rollup/rollup-darwin-arm64@4.46.2': optional: true - '@rollup/rollup-darwin-x64@4.46.0': + '@rollup/rollup-darwin-x64@4.46.2': optional: true - '@rollup/rollup-freebsd-arm64@4.46.0': + '@rollup/rollup-freebsd-arm64@4.46.2': optional: true - '@rollup/rollup-freebsd-x64@4.46.0': + '@rollup/rollup-freebsd-x64@4.46.2': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.46.0': + '@rollup/rollup-linux-arm-gnueabihf@4.46.2': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.46.0': + '@rollup/rollup-linux-arm-musleabihf@4.46.2': optional: true - '@rollup/rollup-linux-arm64-gnu@4.46.0': + '@rollup/rollup-linux-arm64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-arm64-musl@4.46.0': + '@rollup/rollup-linux-arm64-musl@4.46.2': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.46.0': + '@rollup/rollup-linux-loongarch64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.46.0': + '@rollup/rollup-linux-ppc64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.46.0': + '@rollup/rollup-linux-riscv64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-riscv64-musl@4.46.0': + '@rollup/rollup-linux-riscv64-musl@4.46.2': optional: true - '@rollup/rollup-linux-s390x-gnu@4.46.0': + '@rollup/rollup-linux-s390x-gnu@4.46.2': optional: true - '@rollup/rollup-linux-x64-gnu@4.46.0': + '@rollup/rollup-linux-x64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-x64-musl@4.46.0': + '@rollup/rollup-linux-x64-musl@4.46.2': optional: true - '@rollup/rollup-win32-arm64-msvc@4.46.0': + '@rollup/rollup-win32-arm64-msvc@4.46.2': optional: true - '@rollup/rollup-win32-ia32-msvc@4.46.0': + '@rollup/rollup-win32-ia32-msvc@4.46.2': optional: true - '@rollup/rollup-win32-x64-msvc@4.46.0': + '@rollup/rollup-win32-x64-msvc@4.46.2': optional: true '@schummar/icu-type-parser@1.21.5': {} @@ -10575,47 +10610,47 @@ snapshots: domhandler: 5.0.3 selderee: 0.11.0 - '@shikijs/core@3.8.1': + '@shikijs/core@3.9.1': dependencies: - '@shikijs/types': 3.8.1 + '@shikijs/types': 3.9.1 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 - '@shikijs/engine-javascript@3.8.1': + '@shikijs/engine-javascript@3.9.1': dependencies: - '@shikijs/types': 3.8.1 + '@shikijs/types': 3.9.1 '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 4.3.3 - '@shikijs/engine-oniguruma@3.8.1': + '@shikijs/engine-oniguruma@3.9.1': dependencies: - '@shikijs/types': 3.8.1 + '@shikijs/types': 3.9.1 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/langs@3.8.1': + '@shikijs/langs@3.9.1': dependencies: - '@shikijs/types': 3.8.1 + '@shikijs/types': 3.9.1 - '@shikijs/rehype@3.8.1': + '@shikijs/rehype@3.9.1': dependencies: - '@shikijs/types': 3.8.1 + '@shikijs/types': 3.9.1 '@types/hast': 3.0.4 hast-util-to-string: 3.0.1 - shiki: 3.8.1 + shiki: 3.9.1 unified: 11.0.5 unist-util-visit: 5.0.0 - '@shikijs/themes@3.8.1': + '@shikijs/themes@3.9.1': dependencies: - '@shikijs/types': 3.8.1 + '@shikijs/types': 3.9.1 - '@shikijs/transformers@3.8.1': + '@shikijs/transformers@3.9.1': dependencies: - '@shikijs/core': 3.8.1 - '@shikijs/types': 3.8.1 + '@shikijs/core': 3.9.1 + '@shikijs/types': 3.9.1 - '@shikijs/types@3.8.1': + '@shikijs/types@3.9.1': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -10630,11 +10665,11 @@ snapshots: '@standard-schema/utils@0.3.0': {} - '@swc/cli@0.6.0(@swc/core@1.13.2)(chokidar@4.0.3)': + '@swc/cli@0.6.0(@swc/core@1.13.3)(chokidar@4.0.3)': dependencies: - '@swc/core': 1.13.2 + '@swc/core': 1.13.3 '@swc/counter': 0.1.3 - '@xhmikosr/bin-wrapper': 13.1.1 + '@xhmikosr/bin-wrapper': 13.2.0 commander: 8.3.0 fast-glob: 3.3.3 minimatch: 9.0.5 @@ -10647,51 +10682,51 @@ snapshots: transitivePeerDependencies: - supports-color - '@swc/core-darwin-arm64@1.13.2': + '@swc/core-darwin-arm64@1.13.3': optional: true - '@swc/core-darwin-x64@1.13.2': + '@swc/core-darwin-x64@1.13.3': optional: true - '@swc/core-linux-arm-gnueabihf@1.13.2': + '@swc/core-linux-arm-gnueabihf@1.13.3': optional: true - '@swc/core-linux-arm64-gnu@1.13.2': + '@swc/core-linux-arm64-gnu@1.13.3': optional: true - '@swc/core-linux-arm64-musl@1.13.2': + '@swc/core-linux-arm64-musl@1.13.3': optional: true - '@swc/core-linux-x64-gnu@1.13.2': + '@swc/core-linux-x64-gnu@1.13.3': optional: true - '@swc/core-linux-x64-musl@1.13.2': + '@swc/core-linux-x64-musl@1.13.3': optional: true - '@swc/core-win32-arm64-msvc@1.13.2': + '@swc/core-win32-arm64-msvc@1.13.3': optional: true - '@swc/core-win32-ia32-msvc@1.13.2': + '@swc/core-win32-ia32-msvc@1.13.3': optional: true - '@swc/core-win32-x64-msvc@1.13.2': + '@swc/core-win32-x64-msvc@1.13.3': optional: true - '@swc/core@1.13.2': + '@swc/core@1.13.3': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.23 optionalDependencies: - '@swc/core-darwin-arm64': 1.13.2 - '@swc/core-darwin-x64': 1.13.2 - '@swc/core-linux-arm-gnueabihf': 1.13.2 - '@swc/core-linux-arm64-gnu': 1.13.2 - '@swc/core-linux-arm64-musl': 1.13.2 - '@swc/core-linux-x64-gnu': 1.13.2 - '@swc/core-linux-x64-musl': 1.13.2 - '@swc/core-win32-arm64-msvc': 1.13.2 - '@swc/core-win32-ia32-msvc': 1.13.2 - '@swc/core-win32-x64-msvc': 1.13.2 + '@swc/core-darwin-arm64': 1.13.3 + '@swc/core-darwin-x64': 1.13.3 + '@swc/core-linux-arm-gnueabihf': 1.13.3 + '@swc/core-linux-arm64-gnu': 1.13.3 + '@swc/core-linux-arm64-musl': 1.13.3 + '@swc/core-linux-x64-gnu': 1.13.3 + '@swc/core-linux-x64-musl': 1.13.3 + '@swc/core-win32-arm64-msvc': 1.13.3 + '@swc/core-win32-ia32-msvc': 1.13.3 + '@swc/core-win32-x64-msvc': 1.13.3 '@swc/counter@0.1.3': {} @@ -10779,12 +10814,12 @@ snapshots: postcss: 8.5.6 tailwindcss: 4.1.11 - '@tanstack/query-core@5.83.0': {} + '@tanstack/query-core@5.83.1': {} - '@tanstack/react-query@5.83.0(react@19.1.0)': + '@tanstack/react-query@5.84.1(react@19.1.1)': dependencies: - '@tanstack/query-core': 5.83.0 - react: 19.1.0 + '@tanstack/query-core': 5.83.1 + react: 19.1.1 '@testing-library/dom@10.4.1': dependencies: @@ -10797,15 +10832,15 @@ snapshots: picocolors: 1.1.1 pretty-format: 27.5.1 - '@testing-library/react@16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@testing-library/react@16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@babel/runtime': 7.28.2 '@testing-library/dom': 10.4.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) '@tokenizer/inflate@0.2.7': dependencies: @@ -10825,7 +10860,7 @@ snapshots: '@babel/types': 7.28.2 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.7 + '@types/babel__traverse': 7.28.0 '@types/babel__generator@7.27.0': dependencies: @@ -10836,7 +10871,7 @@ snapshots: '@babel/parser': 7.28.0 '@babel/types': 7.28.2 - '@types/babel__traverse@7.20.7': + '@types/babel__traverse@7.28.0': dependencies: '@babel/types': 7.28.2 @@ -10910,14 +10945,14 @@ snapshots: dependencies: '@types/node': 24.1.0 pg-protocol: 1.10.3 - pg-types: 4.0.2 + pg-types: 4.1.0 optional: true '@types/pg@8.11.6': dependencies: '@types/node': 24.1.0 pg-protocol: 1.10.3 - pg-types: 4.0.2 + pg-types: 4.1.0 optional: true '@types/prismjs@1.26.5': {} @@ -10931,19 +10966,19 @@ snapshots: dependencies: '@types/react': 19.0.10 - '@types/react-dom@19.1.6(@types/react@19.1.8)': + '@types/react-dom@19.1.7(@types/react@19.1.9)': dependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 - '@types/react-reconciler@0.28.9(@types/react@19.1.8)': + '@types/react-reconciler@0.28.9(@types/react@19.1.9)': dependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 '@types/react@19.0.10': dependencies: csstype: 3.1.3 - '@types/react@19.1.8': + '@types/react@19.1.9': dependencies: csstype: 3.1.3 @@ -10953,52 +10988,52 @@ snapshots: '@types/validate-npm-package-name@4.0.2': {} - '@types/webpack@5.28.5(@swc/core@1.13.2)(esbuild@0.25.0)': + '@types/webpack@5.28.5(@swc/core@1.13.3)(esbuild@0.25.0)': dependencies: '@types/node': 24.1.0 tapable: 2.2.2 - webpack: 5.100.2(@swc/core@1.13.2)(esbuild@0.25.0) + webpack: 5.101.0(@swc/core@1.13.3)(esbuild@0.25.0) transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpack-cli - '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.38.0 eslint: 9.32.0(jiti@2.5.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3)': + '@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 8.38.0 '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1 eslint: 9.32.0(jiti@2.5.1) - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.38.0(typescript@5.8.3)': + '@typescript-eslint/project-service@8.38.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2) '@typescript-eslint/types': 8.38.0 debug: 4.4.1 - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -11007,28 +11042,28 @@ snapshots: '@typescript-eslint/types': 8.38.0 '@typescript-eslint/visitor-keys': 8.38.0 - '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.9.2)': dependencies: - typescript: 5.8.3 + typescript: 5.9.2 - '@typescript-eslint/type-utils@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) debug: 4.4.1 eslint: 9.32.0(jiti@2.5.1) - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color '@typescript-eslint/types@8.38.0': {} - '@typescript-eslint/typescript-estree@8.38.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.38.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/project-service': 8.38.0(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/project-service': 8.38.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2) '@typescript-eslint/types': 8.38.0 '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1 @@ -11036,19 +11071,19 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3)': + '@typescript-eslint/utils@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.5.1)) '@typescript-eslint/scope-manager': 8.38.0 '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) eslint: 9.32.0(jiti@2.5.1) - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -11219,10 +11254,10 @@ snapshots: execa: 5.1.1 isexe: 2.0.0 - '@xhmikosr/bin-wrapper@13.1.1': + '@xhmikosr/bin-wrapper@13.2.0': dependencies: '@xhmikosr/bin-check': 7.1.0 - '@xhmikosr/downloader': 15.1.1 + '@xhmikosr/downloader': 15.2.0 '@xhmikosr/os-filter-obj': 3.0.0 bin-version-check: 5.1.0 transitivePeerDependencies: @@ -11262,22 +11297,21 @@ snapshots: transitivePeerDependencies: - supports-color - '@xhmikosr/decompress@10.1.0': + '@xhmikosr/decompress@10.2.0': dependencies: '@xhmikosr/decompress-tar': 8.1.0 '@xhmikosr/decompress-tarbz2': 8.1.0 '@xhmikosr/decompress-targz': 8.1.0 '@xhmikosr/decompress-unzip': 7.1.0 graceful-fs: 4.2.11 - make-dir: 4.0.0 strip-dirs: 3.0.0 transitivePeerDependencies: - supports-color - '@xhmikosr/downloader@15.1.1': + '@xhmikosr/downloader@15.2.0': dependencies: '@xhmikosr/archive-type': 7.1.0 - '@xhmikosr/decompress': 10.1.0 + '@xhmikosr/decompress': 10.2.0 content-disposition: 0.5.4 defaults: 2.0.2 ext-name: 5.0.0 @@ -11453,7 +11487,7 @@ snapshots: autoprefixer@10.4.21(postcss@8.5.6): dependencies: browserslist: 4.25.1 - caniuse-lite: 1.0.30001727 + caniuse-lite: 1.0.30001731 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -11498,10 +11532,10 @@ snapshots: binary-extensions@2.3.0: {} - bippy@0.3.17(@types/react@19.1.8)(react@19.1.0): + bippy@0.3.17(@types/react@19.1.9)(react@19.1.1): dependencies: - '@types/react-reconciler': 0.28.9(@types/react@19.1.8) - react: 19.1.0 + '@types/react-reconciler': 0.28.9(@types/react@19.1.9) + react: 19.1.1 transitivePeerDependencies: - '@types/react' @@ -11530,8 +11564,8 @@ snapshots: browserslist@4.25.1: dependencies: - caniuse-lite: 1.0.30001727 - electron-to-chromium: 1.5.191 + caniuse-lite: 1.0.30001731 + electron-to-chromium: 1.5.194 node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.1) @@ -11584,7 +11618,7 @@ snapshots: camelcase-css@2.0.1: {} - caniuse-lite@1.0.30001727: {} + caniuse-lite@1.0.30001731: {} ccount@2.0.1: {} @@ -11667,14 +11701,14 @@ snapshots: clsx@2.1.1: {} - cmdk@1.1.1(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + cmdk@1.1.1(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) transitivePeerDependencies: - '@types/react' - '@types/react-dom' @@ -11910,7 +11944,7 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.44.3(@neondatabase/serverless@0.10.4)(@types/pg@8.11.10)(gel@2.1.0)(pg@8.13.1)(postgres@3.4.7): + drizzle-orm@0.44.4(@neondatabase/serverless@0.10.4)(@types/pg@8.11.10)(gel@2.1.0)(pg@8.13.1)(postgres@3.4.7): optionalDependencies: '@neondatabase/serverless': 0.10.4 '@types/pg': 8.11.10 @@ -11926,7 +11960,7 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.191: {} + electron-to-chromium@1.5.194: {} emoji-regex@10.4.0: {} @@ -12215,10 +12249,10 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-perfectionist@4.15.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3): + eslint-plugin-perfectionist@4.15.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2): dependencies: '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.32.0(jiti@2.5.1) natural-orderby: 5.0.0 transitivePeerDependencies: @@ -12247,63 +12281,63 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-react-debug@1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3): + eslint-plugin-react-debug@1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@eslint-react/ast': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@eslint-react/core': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/ast': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@eslint-react/core': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@eslint-react/eff': 1.52.3 - '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@eslint-react/shared': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@eslint-react/var': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@eslint-react/shared': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@eslint-react/var': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.32.0(jiti@2.5.1) string-ts: 2.2.1 ts-pattern: 5.8.0 optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - eslint-plugin-react-dom@1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3): + eslint-plugin-react-dom@1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@eslint-react/ast': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@eslint-react/core': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/ast': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@eslint-react/core': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@eslint-react/eff': 1.52.3 - '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@eslint-react/shared': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@eslint-react/var': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@eslint-react/shared': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@eslint-react/var': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.38.0 '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) compare-versions: 6.1.1 eslint: 9.32.0(jiti@2.5.1) string-ts: 2.2.1 ts-pattern: 5.8.0 optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - eslint-plugin-react-hooks-extra@1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3): + eslint-plugin-react-hooks-extra@1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@eslint-react/ast': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@eslint-react/core': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/ast': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@eslint-react/core': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@eslint-react/eff': 1.52.3 - '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@eslint-react/shared': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@eslint-react/var': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@eslint-react/shared': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@eslint-react/var': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.32.0(jiti@2.5.1) string-ts: 2.2.1 ts-pattern: 5.8.0 optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -12319,65 +12353,65 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-react-naming-convention@1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3): + eslint-plugin-react-naming-convention@1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@eslint-react/ast': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@eslint-react/core': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/ast': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@eslint-react/core': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@eslint-react/eff': 1.52.3 - '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@eslint-react/shared': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@eslint-react/var': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@eslint-react/shared': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@eslint-react/var': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.32.0(jiti@2.5.1) string-ts: 2.2.1 ts-pattern: 5.8.0 optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - eslint-plugin-react-web-api@1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3): + eslint-plugin-react-web-api@1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@eslint-react/ast': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@eslint-react/core': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/ast': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@eslint-react/core': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@eslint-react/eff': 1.52.3 - '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@eslint-react/shared': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@eslint-react/var': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@eslint-react/shared': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@eslint-react/var': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.38.0 '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.32.0(jiti@2.5.1) string-ts: 2.2.1 ts-pattern: 5.8.0 optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - eslint-plugin-react-x@1.52.3(eslint@9.32.0(jiti@2.5.1))(ts-api-utils@2.1.0(typescript@5.8.3))(typescript@5.8.3): + eslint-plugin-react-x@1.52.3(eslint@9.32.0(jiti@2.5.1))(ts-api-utils@2.1.0(typescript@5.9.2))(typescript@5.9.2): dependencies: - '@eslint-react/ast': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@eslint-react/core': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/ast': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@eslint-react/core': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@eslint-react/eff': 1.52.3 - '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@eslint-react/shared': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@eslint-react/var': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@eslint-react/shared': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@eslint-react/var': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) compare-versions: 6.1.1 eslint: 9.32.0(jiti@2.5.1) - is-immutable-type: 5.0.1(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + is-immutable-type: 5.0.1(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) string-ts: 2.2.1 ts-pattern: 5.8.0 optionalDependencies: - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -12625,7 +12659,7 @@ snapshots: dependencies: magic-string: 0.30.17 mlly: 1.7.4 - rollup: 4.46.0 + rollup: 4.46.2 flat-cache@4.0.1: dependencies: @@ -12647,23 +12681,23 @@ snapshots: fraction.js@4.3.7: {} - framer-motion@12.23.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + framer-motion@12.23.12(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: - motion-dom: 12.23.9 + motion-dom: 12.23.12 motion-utils: 12.23.6 tslib: 2.8.1 optionalDependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - framer-motion@12.7.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + framer-motion@12.23.12(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - motion-dom: 12.23.9 + motion-dom: 12.23.12 motion-utils: 12.23.6 tslib: 2.8.1 optionalDependencies: - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) fsevents@2.3.2: optional: true @@ -12671,81 +12705,81 @@ snapshots: fsevents@2.3.3: optional: true - fumadocs-core@15.6.6(@types/react@19.1.8)(next@15.4.4(@playwright/test@1.54.1)(babel-plugin-react-compiler@19.1.0-rc.2)(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): + fumadocs-core@15.6.7(@types/react@19.1.9)(next@15.4.5(@playwright/test@1.54.2)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: '@formatjs/intl-localematcher': 0.6.1 '@orama/orama': 3.1.11 - '@shikijs/rehype': 3.8.1 - '@shikijs/transformers': 3.8.1 + '@shikijs/rehype': 3.9.1 + '@shikijs/transformers': 3.9.1 github-slugger: 2.0.0 hast-util-to-estree: 3.1.3 hast-util-to-jsx-runtime: 2.3.6 image-size: 2.0.2 negotiator: 1.0.0 npm-to-yarn: 3.0.1 - react-remove-scroll: 2.7.1(@types/react@19.1.8)(react@19.1.0) + react-remove-scroll: 2.7.1(@types/react@19.1.9)(react@19.1.1) remark: 15.0.1 remark-gfm: 4.0.1 remark-rehype: 11.1.2 scroll-into-view-if-needed: 3.1.0 - shiki: 3.8.1 + shiki: 3.9.1 unist-util-visit: 5.0.0 optionalDependencies: - '@types/react': 19.1.8 - next: 15.4.4(@playwright/test@1.54.1)(babel-plugin-react-compiler@19.1.0-rc.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) + '@types/react': 19.1.9 + next: 15.4.5(@playwright/test@1.54.2)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) transitivePeerDependencies: - supports-color - fumadocs-mdx@11.7.1(acorn@8.15.0)(fumadocs-core@15.6.6(@types/react@19.1.8)(next@15.4.4(@playwright/test@1.54.1)(babel-plugin-react-compiler@19.1.0-rc.2)(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.4.4(@playwright/test@1.54.1)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)): + fumadocs-mdx@11.7.3(acorn@8.15.0)(fumadocs-core@15.6.7(@types/react@19.1.9)(next@15.4.5(@playwright/test@1.54.2)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(next@15.4.5(@playwright/test@1.54.2)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)): dependencies: '@mdx-js/mdx': 3.1.0(acorn@8.15.0) '@standard-schema/spec': 1.0.0 chokidar: 4.0.3 esbuild: 0.25.8 estree-util-value-to-estree: 3.4.0 - fumadocs-core: 15.6.6(@types/react@19.1.8)(next@15.4.4(@playwright/test@1.54.1)(babel-plugin-react-compiler@19.1.0-rc.2)(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) + fumadocs-core: 15.6.7(@types/react@19.1.9)(next@15.4.5(@playwright/test@1.54.2)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) js-yaml: 4.1.0 lru-cache: 11.1.0 picocolors: 1.1.1 tinyexec: 1.0.1 tinyglobby: 0.2.14 unist-util-visit: 5.0.0 - zod: 4.0.10 + zod: 4.0.14 optionalDependencies: - next: 15.4.4(@playwright/test@1.54.1)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 + next: 15.4.5(@playwright/test@1.54.2)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 vite: 7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0) transitivePeerDependencies: - acorn - supports-color - fumadocs-ui@15.6.6(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(next@15.4.4(@playwright/test@1.54.1)(babel-plugin-react-compiler@19.1.0-rc.2)(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.11): - dependencies: - '@radix-ui/react-accordion': 1.2.11(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-collapsible': 1.1.11(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-navigation-menu': 1.2.13(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-popover': 1.1.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-scroll-area': 1.2.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-tabs': 1.1.12(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + fumadocs-ui@15.6.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(next@15.4.5(@playwright/test@1.54.2)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(tailwindcss@4.1.11): + dependencies: + '@radix-ui/react-accordion': 1.2.11(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-collapsible': 1.1.11(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-navigation-menu': 1.2.13(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-popover': 1.1.14(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-scroll-area': 1.2.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-tabs': 1.1.12(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) class-variance-authority: 0.7.1 - fumadocs-core: 15.6.6(@types/react@19.1.8)(next@15.4.4(@playwright/test@1.54.1)(babel-plugin-react-compiler@19.1.0-rc.2)(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) + fumadocs-core: 15.6.7(@types/react@19.1.9)(next@15.4.5(@playwright/test@1.54.2)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) lodash.merge: 4.6.2 - next-themes: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next-themes: 0.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1) postcss-selector-parser: 7.1.0 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-medium-image-zoom: 5.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + react-medium-image-zoom: 5.3.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) scroll-into-view-if-needed: 3.1.0 tailwind-merge: 3.3.1 optionalDependencies: - '@types/react': 19.1.8 - next: 15.4.4(@playwright/test@1.54.1)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@types/react': 19.1.9 + next: 15.4.5(@playwright/test@1.54.2)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) tailwindcss: 4.1.11 transitivePeerDependencies: - '@mixedbread/sdk' @@ -12980,7 +13014,7 @@ snapshots: dependencies: hermes-estree: 0.25.1 - hono@4.8.9: {} + hono@4.8.10: {} html-encoding-sniffer@4.0.0: dependencies: @@ -13061,10 +13095,10 @@ snapshots: dependencies: css-in-js-utils: 3.1.0 - input-otp@1.4.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + input-otp@1.4.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) inspect-with-kind@1.0.5: dependencies: @@ -13159,13 +13193,13 @@ snapshots: is-hexadecimal@2.0.1: {} - is-immutable-type@5.0.1(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3): + is-immutable-type@5.0.1(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.32.0(jiti@2.5.1) - ts-api-utils: 2.1.0(typescript@5.8.3) - ts-declaration-location: 1.0.7(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.9.2) + ts-declaration-location: 1.0.7(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -13477,9 +13511,13 @@ snapshots: dependencies: yallist: 3.1.1 - lucide-react@0.526.0(react@19.1.0): + lucide-react@0.526.0(react@19.1.1): + dependencies: + react: 19.1.1 + + lucide-react@0.536.0(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 lz-string@1.5.0: {} @@ -13505,10 +13543,10 @@ snapshots: math-intrinsics@1.1.0: {} - md-to-react-email@5.0.5(react@19.1.0): + md-to-react-email@5.0.5(react@19.1.1): dependencies: marked: 7.0.4 - react: 19.1.0 + react: 19.1.1 mdast-util-find-and-replace@3.0.2: dependencies: @@ -13997,19 +14035,19 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.1 - motion-dom@12.23.9: + motion-dom@12.23.12: dependencies: motion-utils: 12.23.6 motion-utils@12.23.6: {} - motion@12.23.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + motion@12.23.12(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - framer-motion: 12.23.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + framer-motion: 12.23.12(react-dom@19.1.1(react@19.1.1))(react@19.1.1) tslib: 2.8.1 optionalDependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) mri@1.2.0: {} @@ -14025,15 +14063,15 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nano-css@5.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + nano-css@5.6.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: '@jridgewell/sourcemap-codec': 1.5.4 css-tree: 1.1.3 csstype: 3.1.3 fastest-stable-stringify: 2.0.2 inline-style-prefixer: 7.0.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) rtl-css-js: 1.16.1 stacktrace-js: 2.0.2 stylis: 4.3.6 @@ -14050,36 +14088,36 @@ snapshots: neo-async@2.6.2: {} - next-intl@4.3.4(next@15.4.4(@babel/core@7.28.0)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(typescript@5.8.3): + next-intl@4.3.4(next@15.4.5(@babel/core@7.28.0)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)(typescript@5.9.2): dependencies: '@formatjs/intl-localematcher': 0.5.10 negotiator: 1.0.0 - next: 15.4.4(@babel/core@7.28.0)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - use-intl: 4.3.4(react@19.1.0) + next: 15.4.5(@babel/core@7.28.0)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + use-intl: 4.3.4(react@19.1.1) optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 - next-intl@4.3.4(next@15.4.4(@playwright/test@1.54.1)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(typescript@5.8.3): + next-intl@4.3.4(next@15.4.5(@playwright/test@1.54.2)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)(typescript@5.9.2): dependencies: '@formatjs/intl-localematcher': 0.5.10 negotiator: 1.0.0 - next: 15.4.4(@playwright/test@1.54.1)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - use-intl: 4.3.4(react@19.1.0) + next: 15.4.5(@playwright/test@1.54.2)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + use-intl: 4.3.4(react@19.1.1) optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 - next-themes@0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + next-themes@0.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) - next@15.4.1(@babel/core@7.26.10)(@playwright/test@1.54.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + next@15.4.1(@babel/core@7.26.10)(@playwright/test@1.54.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: '@next/env': 15.4.1 '@swc/helpers': 0.5.15 - caniuse-lite: 1.0.30001727 + caniuse-lite: 1.0.30001731 postcss: 8.4.31 react: 19.0.0 react-dom: 19.0.0(react@19.0.0) @@ -14093,55 +14131,55 @@ snapshots: '@next/swc-linux-x64-musl': 15.4.1 '@next/swc-win32-arm64-msvc': 15.4.1 '@next/swc-win32-x64-msvc': 15.4.1 - '@playwright/test': 1.54.1 + '@playwright/test': 1.54.2 sharp: 0.34.3 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - next@15.4.4(@babel/core@7.28.0)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + next@15.4.5(@babel/core@7.28.0)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - '@next/env': 15.4.4 + '@next/env': 15.4.5 '@swc/helpers': 0.5.15 - caniuse-lite: 1.0.30001727 + caniuse-lite: 1.0.30001731 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.28.0)(react@19.1.0) - optionalDependencies: - '@next/swc-darwin-arm64': 15.4.4 - '@next/swc-darwin-x64': 15.4.4 - '@next/swc-linux-arm64-gnu': 15.4.4 - '@next/swc-linux-arm64-musl': 15.4.4 - '@next/swc-linux-x64-gnu': 15.4.4 - '@next/swc-linux-x64-musl': 15.4.4 - '@next/swc-win32-arm64-msvc': 15.4.4 - '@next/swc-win32-x64-msvc': 15.4.4 - '@playwright/test': 1.54.1 + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + styled-jsx: 5.1.6(@babel/core@7.28.0)(react@19.1.1) + optionalDependencies: + '@next/swc-darwin-arm64': 15.4.5 + '@next/swc-darwin-x64': 15.4.5 + '@next/swc-linux-arm64-gnu': 15.4.5 + '@next/swc-linux-arm64-musl': 15.4.5 + '@next/swc-linux-x64-gnu': 15.4.5 + '@next/swc-linux-x64-musl': 15.4.5 + '@next/swc-win32-arm64-msvc': 15.4.5 + '@next/swc-win32-x64-msvc': 15.4.5 + '@playwright/test': 1.54.2 sharp: 0.34.3 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - next@15.4.4(@playwright/test@1.54.1)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + next@15.4.5(@playwright/test@1.54.2)(babel-plugin-react-compiler@19.1.0-rc.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - '@next/env': 15.4.4 + '@next/env': 15.4.5 '@swc/helpers': 0.5.15 - caniuse-lite: 1.0.30001727 + caniuse-lite: 1.0.30001731 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.28.0)(react@19.1.0) - optionalDependencies: - '@next/swc-darwin-arm64': 15.4.4 - '@next/swc-darwin-x64': 15.4.4 - '@next/swc-linux-arm64-gnu': 15.4.4 - '@next/swc-linux-arm64-musl': 15.4.4 - '@next/swc-linux-x64-gnu': 15.4.4 - '@next/swc-linux-x64-musl': 15.4.4 - '@next/swc-win32-arm64-msvc': 15.4.4 - '@next/swc-win32-x64-msvc': 15.4.4 - '@playwright/test': 1.54.1 + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + styled-jsx: 5.1.6(@babel/core@7.28.0)(react@19.1.1) + optionalDependencies: + '@next/swc-darwin-arm64': 15.4.5 + '@next/swc-darwin-x64': 15.4.5 + '@next/swc-linux-arm64-gnu': 15.4.5 + '@next/swc-linux-arm64-musl': 15.4.5 + '@next/swc-linux-x64-gnu': 15.4.5 + '@next/swc-linux-x64-musl': 15.4.5 + '@next/swc-win32-arm64-msvc': 15.4.5 + '@next/swc-win32-x64-msvc': 15.4.5 + '@playwright/test': 1.54.2 babel-plugin-react-compiler: 19.1.0-rc.2 sharp: 0.34.3 transitivePeerDependencies: @@ -14375,7 +14413,7 @@ snapshots: postgres-interval: 1.2.0 optional: true - pg-types@4.0.2: + pg-types@4.1.0: dependencies: pg-int8: 1.0.1 pg-numeric: 1.0.2 @@ -14428,11 +14466,11 @@ snapshots: exsolve: 1.0.7 pathe: 2.0.3 - playwright-core@1.54.1: {} + playwright-core@1.54.2: {} - playwright@1.54.1: + playwright@1.54.2: dependencies: - playwright-core: 1.54.1 + playwright-core: 1.54.2 optionalDependencies: fsevents: 2.3.2 @@ -14532,7 +14570,7 @@ snapshots: postgres@3.4.7: {} - preact@10.26.9: {} + preact@10.27.0: {} prelude-ls@1.2.1: {} @@ -14596,68 +14634,68 @@ snapshots: quick-lru@5.1.1: {} - radix-ui@1.4.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + radix-ui@1.4.2(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-accessible-icon': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-accordion': 1.2.11(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-alert-dialog': 1.1.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-aspect-ratio': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-avatar': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-checkbox': 1.3.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-collapsible': 1.1.11(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context-menu': 2.2.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-dropdown-menu': 2.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-form': 0.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-hover-card': 1.1.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-label': 2.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-menu': 2.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-menubar': 1.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-navigation-menu': 1.2.13(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-one-time-password-field': 0.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-password-toggle-field': 0.1.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-popover': 1.1.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-progress': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-radio-group': 1.3.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-scroll-area': 1.2.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-select': 2.2.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slider': 1.3.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-switch': 1.2.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-tabs': 1.1.12(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toast': 1.2.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toggle': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toggle-group': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toolbar': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-tooltip': 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-accessible-icon': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-accordion': 1.2.11(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-alert-dialog': 1.1.14(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-aspect-ratio': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-avatar': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-checkbox': 1.3.2(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-collapsible': 1.1.11(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-context-menu': 2.2.15(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-dropdown-menu': 2.1.15(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-form': 0.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-hover-card': 1.1.14(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-label': 2.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-menu': 2.1.15(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-menubar': 1.1.15(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-navigation-menu': 1.2.13(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-one-time-password-field': 0.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-password-toggle-field': 0.1.2(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-popover': 1.1.14(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-progress': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-radio-group': 1.3.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-scroll-area': 1.2.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-select': 2.2.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slider': 1.3.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-switch': 1.2.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-tabs': 1.1.12(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-toast': 1.2.14(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-toggle': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-toggle-group': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-toolbar': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-tooltip': 1.2.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.9)(react@19.1.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) randombytes@2.1.0: dependencies: @@ -14670,12 +14708,12 @@ snapshots: react: 19.0.0 scheduler: 0.25.0 - react-dom@19.1.0(react@19.1.0): + react-dom@19.1.1(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 scheduler: 0.26.0 - react-email@4.2.4: + react-email@4.2.7: dependencies: '@babel/parser': 7.28.0 '@babel/traverse': 7.28.0 @@ -14699,18 +14737,18 @@ snapshots: - supports-color - utf-8-validate - react-hook-form@7.61.1(react@19.1.0): + react-hook-form@7.61.1(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 react-is@16.13.1: {} react-is@17.0.2: {} - react-medium-image-zoom@5.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-medium-image-zoom@5.3.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) react-promise-suspense@0.3.4: dependencies: @@ -14726,13 +14764,13 @@ snapshots: optionalDependencies: '@types/react': 19.0.10 - react-remove-scroll-bar@2.3.8(@types/react@19.1.8)(react@19.1.0): + react-remove-scroll-bar@2.3.8(@types/react@19.1.9)(react@19.1.1): dependencies: - react: 19.1.0 - react-style-singleton: 2.2.3(@types/react@19.1.8)(react@19.1.0) + react: 19.1.1 + react-style-singleton: 2.2.3(@types/react@19.1.9)(react@19.1.1) tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 react-remove-scroll@2.7.1(@types/react@19.0.10)(react@19.0.0): dependencies: @@ -14745,40 +14783,40 @@ snapshots: optionalDependencies: '@types/react': 19.0.10 - react-remove-scroll@2.7.1(@types/react@19.1.8)(react@19.1.0): + react-remove-scroll@2.7.1(@types/react@19.1.9)(react@19.1.1): dependencies: - react: 19.1.0 - react-remove-scroll-bar: 2.3.8(@types/react@19.1.8)(react@19.1.0) - react-style-singleton: 2.2.3(@types/react@19.1.8)(react@19.1.0) + react: 19.1.1 + react-remove-scroll-bar: 2.3.8(@types/react@19.1.9)(react@19.1.1) + react-style-singleton: 2.2.3(@types/react@19.1.9)(react@19.1.1) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.1.8)(react@19.1.0) - use-sidecar: 1.1.3(@types/react@19.1.8)(react@19.1.0) + use-callback-ref: 1.3.3(@types/react@19.1.9)(react@19.1.1) + use-sidecar: 1.1.3(@types/react@19.1.9)(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 - react-scan@0.4.3(@types/react@19.1.8)(next@15.4.4(@babel/core@7.28.0)(@playwright/test@1.54.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)(rollup@4.46.0): + react-scan@0.4.3(@types/react@19.1.9)(next@15.4.5(@babel/core@7.28.0)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(rollup@4.46.2): dependencies: '@babel/core': 7.28.0 '@babel/generator': 7.28.0 '@babel/types': 7.28.2 '@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) - '@preact/signals': 1.3.2(preact@10.26.9) - '@rollup/pluginutils': 5.2.0(rollup@4.46.0) + '@pivanov/utils': 0.0.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@preact/signals': 1.3.2(preact@10.27.0) + '@rollup/pluginutils': 5.2.0(rollup@4.46.2) '@types/node': 20.19.9 - bippy: 0.3.17(@types/react@19.1.8)(react@19.1.0) + bippy: 0.3.17(@types/react@19.1.9)(react@19.1.1) esbuild: 0.25.8 estree-walker: 3.0.3 kleur: 4.1.5 mri: 1.2.0 - playwright: 1.54.1 - preact: 10.26.9 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + playwright: 1.54.2 + preact: 10.27.0 + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) tsx: 4.20.3 optionalDependencies: - next: 15.4.4(@babel/core@7.28.0)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next: 15.4.5(@babel/core@7.28.0)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) unplugin: 2.1.0 transitivePeerDependencies: - '@types/react' @@ -14793,20 +14831,20 @@ snapshots: optionalDependencies: '@types/react': 19.0.10 - react-style-singleton@2.2.3(@types/react@19.1.8)(react@19.1.0): + react-style-singleton@2.2.3(@types/react@19.1.9)(react@19.1.1): dependencies: get-nonce: 1.0.1 - react: 19.1.0 + react: 19.1.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 - react-universal-interface@0.6.2(react@19.1.0)(tslib@2.8.1): + react-universal-interface@0.6.2(react@19.1.1)(tslib@2.8.1): dependencies: - react: 19.1.0 + react: 19.1.1 tslib: 2.8.1 - react-use@17.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-use@17.6.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: '@types/js-cookie': 2.2.7 '@xobotyi/scrollbar-width': 1.9.5 @@ -14814,10 +14852,10 @@ snapshots: fast-deep-equal: 3.1.3 fast-shallow-equal: 1.0.0 js-cookie: 2.2.1 - nano-css: 5.6.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) - react-universal-interface: 0.6.2(react@19.1.0)(tslib@2.8.1) + nano-css: 5.6.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + react-universal-interface: 0.6.2(react@19.1.1)(tslib@2.8.1) resize-observer-polyfill: 1.5.1 screenfull: 5.2.0 set-harmonic-interval: 1.0.1 @@ -14827,7 +14865,7 @@ snapshots: react@19.0.0: {} - react@19.1.0: {} + react@19.1.1: {} read-cache@1.0.0: dependencies: @@ -14851,15 +14889,14 @@ snapshots: estree-util-build-jsx: 3.0.1 vfile: 6.0.3 - recma-jsx@1.0.0(acorn@8.15.0): + recma-jsx@1.0.1(acorn@8.15.0): dependencies: + acorn: 8.15.0 acorn-jsx: 5.3.2(acorn@8.15.0) estree-util-to-js: 2.0.0 recma-parse: 1.0.0 recma-stringify: 1.0.0 unified: 11.0.5 - transitivePeerDependencies: - - acorn recma-parse@1.0.0: dependencies: @@ -14967,9 +15004,9 @@ snapshots: require-from-string@2.0.2: {} - resend@4.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + resend@4.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - '@react-email/render': 1.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-email/render': 1.1.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1) transitivePeerDependencies: - react - react-dom @@ -15012,30 +15049,30 @@ snapshots: reusify@1.1.0: {} - rollup@4.46.0: + rollup@4.46.2: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.46.0 - '@rollup/rollup-android-arm64': 4.46.0 - '@rollup/rollup-darwin-arm64': 4.46.0 - '@rollup/rollup-darwin-x64': 4.46.0 - '@rollup/rollup-freebsd-arm64': 4.46.0 - '@rollup/rollup-freebsd-x64': 4.46.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.46.0 - '@rollup/rollup-linux-arm-musleabihf': 4.46.0 - '@rollup/rollup-linux-arm64-gnu': 4.46.0 - '@rollup/rollup-linux-arm64-musl': 4.46.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.46.0 - '@rollup/rollup-linux-ppc64-gnu': 4.46.0 - '@rollup/rollup-linux-riscv64-gnu': 4.46.0 - '@rollup/rollup-linux-riscv64-musl': 4.46.0 - '@rollup/rollup-linux-s390x-gnu': 4.46.0 - '@rollup/rollup-linux-x64-gnu': 4.46.0 - '@rollup/rollup-linux-x64-musl': 4.46.0 - '@rollup/rollup-win32-arm64-msvc': 4.46.0 - '@rollup/rollup-win32-ia32-msvc': 4.46.0 - '@rollup/rollup-win32-x64-msvc': 4.46.0 + '@rollup/rollup-android-arm-eabi': 4.46.2 + '@rollup/rollup-android-arm64': 4.46.2 + '@rollup/rollup-darwin-arm64': 4.46.2 + '@rollup/rollup-darwin-x64': 4.46.2 + '@rollup/rollup-freebsd-arm64': 4.46.2 + '@rollup/rollup-freebsd-x64': 4.46.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.46.2 + '@rollup/rollup-linux-arm-musleabihf': 4.46.2 + '@rollup/rollup-linux-arm64-gnu': 4.46.2 + '@rollup/rollup-linux-arm64-musl': 4.46.2 + '@rollup/rollup-linux-loongarch64-gnu': 4.46.2 + '@rollup/rollup-linux-ppc64-gnu': 4.46.2 + '@rollup/rollup-linux-riscv64-gnu': 4.46.2 + '@rollup/rollup-linux-riscv64-musl': 4.46.2 + '@rollup/rollup-linux-s390x-gnu': 4.46.2 + '@rollup/rollup-linux-x64-gnu': 4.46.2 + '@rollup/rollup-linux-x64-musl': 4.46.2 + '@rollup/rollup-win32-arm64-msvc': 4.46.2 + '@rollup/rollup-win32-ia32-msvc': 4.46.2 + '@rollup/rollup-win32-x64-msvc': 4.46.2 fsevents: 2.3.3 rrweb-cssom@0.8.0: {} @@ -15215,14 +15252,14 @@ snapshots: shell-quote@1.8.3: {} - shiki@3.8.1: + shiki@3.9.1: dependencies: - '@shikijs/core': 3.8.1 - '@shikijs/engine-javascript': 3.8.1 - '@shikijs/engine-oniguruma': 3.8.1 - '@shikijs/langs': 3.8.1 - '@shikijs/themes': 3.8.1 - '@shikijs/types': 3.8.1 + '@shikijs/core': 3.9.1 + '@shikijs/engine-javascript': 3.9.1 + '@shikijs/engine-oniguruma': 3.9.1 + '@shikijs/langs': 3.9.1 + '@shikijs/themes': 3.9.1 + '@shikijs/types': 3.9.1 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -15314,10 +15351,10 @@ snapshots: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - sonner@2.0.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + sonner@2.0.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) sort-keys-length@1.0.1: dependencies: @@ -15511,10 +15548,10 @@ snapshots: optionalDependencies: '@babel/core': 7.26.10 - styled-jsx@5.1.6(@babel/core@7.28.0)(react@19.1.0): + styled-jsx@5.1.6(@babel/core@7.28.0)(react@19.1.1): dependencies: client-only: 0.0.1 - react: 19.1.0 + react: 19.1.1 optionalDependencies: '@babel/core': 7.28.0 @@ -15607,16 +15644,16 @@ snapshots: mkdirp: 3.0.1 yallist: 5.0.0 - terser-webpack-plugin@5.3.14(@swc/core@1.13.2)(esbuild@0.25.0)(webpack@5.100.2(@swc/core@1.13.2)(esbuild@0.25.8)): + terser-webpack-plugin@5.3.14(@swc/core@1.13.3)(esbuild@0.25.0)(webpack@5.101.0(@swc/core@1.13.3)(esbuild@0.25.8)): dependencies: '@jridgewell/trace-mapping': 0.3.29 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 terser: 5.43.1 - webpack: 5.100.2(@swc/core@1.13.2)(esbuild@0.25.0) + webpack: 5.101.0(@swc/core@1.13.3)(esbuild@0.25.0) optionalDependencies: - '@swc/core': 1.13.2 + '@swc/core': 1.13.3 esbuild: 0.25.0 terser@5.43.1: @@ -15704,14 +15741,14 @@ snapshots: trough@2.2.0: {} - ts-api-utils@2.1.0(typescript@5.8.3): + ts-api-utils@2.1.0(typescript@5.9.2): dependencies: - typescript: 5.8.3 + typescript: 5.9.2 - ts-declaration-location@1.0.7(typescript@5.8.3): + ts-declaration-location@1.0.7(typescript@5.9.2): dependencies: picomatch: 4.0.3 - typescript: 5.8.3 + typescript: 5.9.2 ts-easing@0.2.0: {} @@ -15729,9 +15766,9 @@ snapshots: normalize-path: 3.0.0 plimit-lit: 1.6.1 - tsconfck@3.1.6(typescript@5.8.3): + tsconfck@3.1.6(typescript@5.9.2): optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 tsconfig-paths@4.2.0: dependencies: @@ -15741,7 +15778,7 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.0(@swc/core@1.13.2)(jiti@2.5.1)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.8.0): + tsup@8.5.0(@swc/core@1.13.3)(jiti@2.5.1)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.0): dependencies: bundle-require: 5.1.0(esbuild@0.25.8) cac: 6.7.14 @@ -15754,16 +15791,16 @@ snapshots: picocolors: 1.1.1 postcss-load-config: 6.0.1(jiti@2.5.1)(postcss@8.5.6)(tsx@4.20.3)(yaml@2.8.0) resolve-from: 5.0.0 - rollup: 4.46.0 + rollup: 4.46.2 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tinyexec: 0.3.2 tinyglobby: 0.2.14 tree-kill: 1.2.2 optionalDependencies: - '@swc/core': 1.13.2 + '@swc/core': 1.13.3 postcss: 8.5.6 - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - jiti - supports-color @@ -15847,18 +15884,18 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3): + typescript-eslint@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.32.0(jiti@2.5.1) - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - typescript@5.8.3: {} + typescript@5.9.2: {} ufo@1.6.1: {} @@ -15940,27 +15977,27 @@ snapshots: optionalDependencies: '@types/react': 19.0.10 - use-callback-ref@1.3.3(@types/react@19.1.8)(react@19.1.0): + use-callback-ref@1.3.3(@types/react@19.1.9)(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 use-debounce@10.0.4(react@19.0.0): dependencies: react: 19.0.0 - use-debounce@10.0.5(react@19.1.0): + use-debounce@10.0.5(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 - use-intl@4.3.4(react@19.1.0): + use-intl@4.3.4(react@19.1.1): dependencies: '@formatjs/fast-memoize': 2.2.7 '@schummar/icu-type-parser': 1.21.5 intl-messageformat: 10.7.16 - react: 19.1.0 + react: 19.1.1 use-sidecar@1.1.3(@types/react@19.0.10)(react@19.0.0): dependencies: @@ -15970,17 +16007,17 @@ snapshots: optionalDependencies: '@types/react': 19.0.10 - use-sidecar@1.1.3(@types/react@19.1.8)(react@19.1.0): + use-sidecar@1.1.3(@types/react@19.1.9)(react@19.1.1): dependencies: detect-node-es: 1.1.0 - react: 19.1.0 + react: 19.1.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 - use-sync-external-store@1.5.0(react@19.1.0): + use-sync-external-store@1.5.0(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 util-deprecate@1.0.2: {} @@ -15988,11 +16025,11 @@ snapshots: vary@1.1.2: {} - vaul@1.1.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + vaul@1.1.2(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - '@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(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) + '@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) transitivePeerDependencies: - '@types/react' - '@types/react-dom' @@ -16028,11 +16065,11 @@ snapshots: - tsx - yaml - vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)): + vite-tsconfig-paths@5.1.4(typescript@5.9.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)): dependencies: debug: 4.4.1 globrex: 0.1.2 - tsconfck: 3.1.6(typescript@5.8.3) + tsconfck: 3.1.6(typescript@5.9.2) optionalDependencies: vite: 7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0) transitivePeerDependencies: @@ -16045,7 +16082,7 @@ snapshots: fdir: 6.4.6(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.46.0 + rollup: 4.46.2 tinyglobby: 0.2.14 optionalDependencies: '@types/node': 24.1.0 @@ -16121,7 +16158,7 @@ snapshots: webpack-virtual-modules@0.6.2: optional: true - webpack@5.100.2(@swc/core@1.13.2)(esbuild@0.25.0): + webpack@5.101.0(@swc/core@1.13.3)(esbuild@0.25.0): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -16145,7 +16182,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.2 tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(@swc/core@1.13.2)(esbuild@0.25.0)(webpack@5.100.2(@swc/core@1.13.2)(esbuild@0.25.8)) + terser-webpack-plugin: 5.3.14(@swc/core@1.13.3)(esbuild@0.25.0)(webpack@5.101.0(@swc/core@1.13.3)(esbuild@0.25.8)) watchpack: 2.4.4 webpack-sources: 3.3.3 transitivePeerDependencies: @@ -16297,6 +16334,6 @@ snapshots: zod@3.25.76: {} - zod@4.0.10: {} + zod@4.0.14: {} zwitch@2.0.4: {} From c7e01c3c5d2f2bac65e99e3a79fe264aa7e5cc7c Mon Sep 17 00:00:00 2001 From: aXenDeveloper Date: Mon, 4 Aug 2025 20:27:57 +0200 Subject: [PATCH 4/6] feat: Add components UI for emails --- .../dev/email/components/button-preview.png | Bin 0 -> 67758 bytes .../docs/dev/email/components/button.mdx | 40 ++++++++++++ .../dev/email/components/card-preview.png | Bin 0 -> 65301 bytes .../docs/dev/email/components/card.mdx | 42 ++++++++++++ .../docs/dev/email/components/meta.json | 4 ++ apps/docs/content/docs/dev/email/meta.json | 2 +- .../docs/content/docs/dev/email/templates.mdx | 14 +++- apps/docs/src/app/global.css | 2 +- apps/docs/src/components/fumadocs/img.tsx | 9 ++- .../root/src/app/global.css | 2 +- .../vitnode/src/emails/default-template.tsx | 6 +- packages/vitnode/src/emails/test-template.tsx | 50 ++++++++++++--- packages/vitnode/src/emails/ui/button.tsx | 45 +++++++++++++ packages/vitnode/src/emails/ui/card.tsx | 60 ++++++++++++++++++ 14 files changed, 256 insertions(+), 20 deletions(-) create mode 100644 apps/docs/content/docs/dev/email/components/button-preview.png create mode 100644 apps/docs/content/docs/dev/email/components/button.mdx create mode 100644 apps/docs/content/docs/dev/email/components/card-preview.png create mode 100644 apps/docs/content/docs/dev/email/components/card.mdx create mode 100644 apps/docs/content/docs/dev/email/components/meta.json create mode 100644 packages/vitnode/src/emails/ui/button.tsx create mode 100644 packages/vitnode/src/emails/ui/card.tsx diff --git a/apps/docs/content/docs/dev/email/components/button-preview.png b/apps/docs/content/docs/dev/email/components/button-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..88ac4a860aa17d9a1b972829da2e770e5f6da019 GIT binary patch literal 67758 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 + +## Usage + +```ts +import { Button } from '@vitnode/core/emails/ui/button'; +``` + +```tsx + +``` + +## Props + +import { TypeTable } from 'fumadocs-ui/components/type-table'; + + diff --git a/apps/docs/content/docs/dev/email/components/card-preview.png b/apps/docs/content/docs/dev/email/components/card-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..0e569f96b34c75dcb79f79f1b1eedf81e3efe6c8 GIT binary patch literal 65301 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
!g4$XzpGzDwilZ`Pwa_h|VuI_X(aOk03p3c)d~e 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 + +## Usage + +```tsx +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from '@vitnode/core/emails/ui/card'; +import { Text } from '@react-email/components'; +``` + +```tsx + + + Card Title + Card Description + + + + This is the content of the card. You can put any content here. + + + + Footer + + +``` diff --git a/apps/docs/content/docs/dev/email/components/meta.json b/apps/docs/content/docs/dev/email/components/meta.json new file mode 100644 index 000000000..1d13535e0 --- /dev/null +++ b/apps/docs/content/docs/dev/email/components/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Components", + "pages": ["...", "[More Components](https://react.email/components)"] +} diff --git a/apps/docs/content/docs/dev/email/meta.json b/apps/docs/content/docs/dev/email/meta.json index a0fbd5951..28bc4adfa 100644 --- a/apps/docs/content/docs/dev/email/meta.json +++ b/apps/docs/content/docs/dev/email/meta.json @@ -1,4 +1,4 @@ { "title": "Email", - "pages": ["overview", "templates", "---Adapters---", "..."] + "pages": ["overview", "templates", "components", "---Adapters---", "..."] } diff --git a/apps/docs/content/docs/dev/email/templates.mdx b/apps/docs/content/docs/dev/email/templates.mdx index fd9f3356b..6bff57b52 100644 --- a/apps/docs/content/docs/dev/email/templates.mdx +++ b/apps/docs/content/docs/dev/email/templates.mdx @@ -70,7 +70,17 @@ We implemented [TailwindCSS](https://react.email/docs/components/tailwind) in th + + diff --git a/apps/docs/src/app/global.css b/apps/docs/src/app/global.css index a32f861e8..833c6fb10 100644 --- a/apps/docs/src/app/global.css +++ b/apps/docs/src/app/global.css @@ -20,7 +20,7 @@ --secondary: oklch(0.94 0.02 254.94); --secondary-foreground: oklch(0.25 0.01 250); --muted: oklch(0.95 0.01 250); - --muted-foreground: oklch(0.35 0.01 250); + --muted-foreground: oklch(0.53 0.01 250); --accent: oklch(0.92 0.01 250); --accent-foreground: oklch(0.25 0.01 250); --destructive: oklch(0.6 0.2 24.45); diff --git a/apps/docs/src/components/fumadocs/img.tsx b/apps/docs/src/components/fumadocs/img.tsx index dabff1d56..ddc66c543 100644 --- a/apps/docs/src/components/fumadocs/img.tsx +++ b/apps/docs/src/components/fumadocs/img.tsx @@ -4,16 +4,19 @@ import React from 'react'; export const ImgDocs = ({ className, + imgClassName, ...props -}: React.ComponentProps) => { +}: React.ComponentProps & { + imgClassName?: string; +}) => { return (
- +
); }; diff --git a/packages/create-vitnode-app/copy-of-vitnode-app/root/src/app/global.css b/packages/create-vitnode-app/copy-of-vitnode-app/root/src/app/global.css index 58ef0849a..eee3b4ddf 100644 --- a/packages/create-vitnode-app/copy-of-vitnode-app/root/src/app/global.css +++ b/packages/create-vitnode-app/copy-of-vitnode-app/root/src/app/global.css @@ -17,7 +17,7 @@ --secondary: oklch(0.94 0.02 254.94); --secondary-foreground: oklch(0.25 0.01 250); --muted: oklch(0.95 0.01 250); - --muted-foreground: oklch(0.35 0.01 250); + --muted-foreground: oklch(0.53 0.01 250); --accent: oklch(0.92 0.01 250); --accent-foreground: oklch(0.25 0.01 250); --destructive: oklch(0.6 0.2 24.45); diff --git a/packages/vitnode/src/emails/default-template.tsx b/packages/vitnode/src/emails/default-template.tsx index 896e7d66e..13fbbdc8b 100644 --- a/packages/vitnode/src/emails/default-template.tsx +++ b/packages/vitnode/src/emails/default-template.tsx @@ -89,7 +89,7 @@ export default function DefaultTemplateEmail({ tailwindConfig?.theme?.extend?.colors?.['muted'] ?? '#eaeff5', 'muted-foreground': tailwindConfig?.theme?.extend?.colors?.['muted-foreground'] ?? - '#373b40', + '#686c72', accent: tailwindConfig?.theme?.extend?.colors?.['accent'] ?? '#e0e5eb', @@ -130,9 +130,7 @@ export default function DefaultTemplateEmail({ )}
-
- {children} -
+ {children}
diff --git a/packages/vitnode/src/emails/test-template.tsx b/packages/vitnode/src/emails/test-template.tsx index 81eebce63..b3043d0b8 100644 --- a/packages/vitnode/src/emails/test-template.tsx +++ b/packages/vitnode/src/emails/test-template.tsx @@ -1,9 +1,18 @@ -import { Button, Text } from '@react-email/components'; +import { Section, Text } from '@react-email/components'; import { createTranslator } from 'use-intl'; import DefaultTemplateEmail, { type DefaultTemplateEmailProps, } from './default-template'; +import { Button } from './ui/button'; +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from './ui/card'; export default function TestTemplateEmail({ messages, @@ -14,13 +23,38 @@ export default function TestTemplateEmail({ return ( - Hello - {t('core.auth.sign_in.desc')} - + + {( + [ + { variant: 'default', label: 'Default', size: 'lg' as const }, + { variant: 'secondary', label: 'Secondary' }, + { variant: 'outline', label: 'Outline' }, + { variant: 'ghost', label: 'Ghost' }, + { variant: 'link', label: 'Link' }, + { + variant: 'destructive', + label: 'Destructive', + size: 'sm' as const, + }, + ] as { + label: string; + size?: 'lg' | 'sm'; + variant: + | 'default' + | 'destructive' + | 'ghost' + | 'link' + | 'outline' + | 'secondary'; + }[] + ).map(({ variant, label, size }) => ( +
+ +
+ ))} +
); } diff --git a/packages/vitnode/src/emails/ui/button.tsx b/packages/vitnode/src/emails/ui/button.tsx new file mode 100644 index 000000000..c24f1ce86 --- /dev/null +++ b/packages/vitnode/src/emails/ui/button.tsx @@ -0,0 +1,45 @@ +import { Button as ButtonReactEmail } from '@react-email/components'; +import { cva, type VariantProps } from 'class-variance-authority'; + +import { cn } from '@/lib/utils'; + +const buttonVariants = cva( + 'cursor-pointer whitespace-nowrap rounded-md text-sm font-medium outline-none transition-all', + { + variants: { + variant: { + default: 'bg-primary text-primary-foreground shadow-xs', + destructive: 'bg-destructive text-white shadow-xs', + destructiveGhost: 'text-destructive', + outline: 'border bg-background shadow-xs', + secondary: 'bg-secondary text-secondary-foreground shadow-xs', + ghost: '', + link: 'text-primary underline-offset-4', + }, + size: { + default: 'px-4 py-2', + sm: 'rounded-md gap-1.5 px-3 py-1.5', + lg: 'rounded-md px-6 py-2.5', + }, + }, + defaultVariants: { + variant: 'default', + size: 'default', + }, + }, +); + +export const Button = ({ + className, + variant, + size, + ...props +}: React.ComponentProps & + VariantProps) => { + return ( + + ); +}; diff --git a/packages/vitnode/src/emails/ui/card.tsx b/packages/vitnode/src/emails/ui/card.tsx new file mode 100644 index 000000000..4716a69ca --- /dev/null +++ b/packages/vitnode/src/emails/ui/card.tsx @@ -0,0 +1,60 @@ +import { Section, Text } from '@react-email/components'; + +import { cn } from '@/lib/utils'; + +export const Card = ({ + className, + ...props +}: React.ComponentProps) => { + return ( +
+ ); +}; + +export const CardHeader = ({ + className, + ...props +}: React.ComponentProps) => { + return
; +}; + +export const CardTitle = ({ + className, + ...props +}: React.ComponentProps) => { + return ( + + ); +}; + +export const CardDescription = ({ + className, + ...props +}: React.ComponentProps) => { + return ( + + ); +}; + +export const CardContent = ({ + className, + ...props +}: React.ComponentProps) => { + return
; +}; + +export const CardFooter = ({ + className, + ...props +}: React.ComponentProps) => { + return
; +}; From 9149e9f93b61f10a491b24dc111bea75c9acd85b Mon Sep 17 00:00:00 2001 From: aXenDeveloper Date: Tue, 5 Aug 2025 08:26:53 +0200 Subject: [PATCH 5/6] feat: Add email preview server --- apps/api/package.json | 3 +- .../docs/dev/email/components/button.mdx | 7 +- .../dev/email/default_template_preview.png | Bin 0 -> 40778 bytes .../docs/content/docs/dev/email/templates.mdx | 41 ++- apps/docs/package.json | 1 + .../src/create/create-package-json.ts | 2 + packages/eslint/package.json | 4 +- packages/vitnode/package.json | 2 +- .../api/modules/users/routes/test.route.ts | 2 +- packages/vitnode/src/components/ui/form.tsx | 2 +- packages/vitnode/src/emails/test-template.tsx | 17 +- plugins/blog/package.json | 3 + .../modules/categories/categories.module.ts | 3 +- .../src/api/modules/categories/test.route.ts | 43 +++ plugins/blog/src/emails/test-template.tsx | 15 + pnpm-lock.yaml | 289 ++++++++++-------- 16 files changed, 281 insertions(+), 153 deletions(-) create mode 100644 apps/docs/content/docs/dev/email/default_template_preview.png create mode 100644 plugins/blog/src/api/modules/categories/test.route.ts create mode 100644 plugins/blog/src/emails/test-template.tsx diff --git a/apps/api/package.json b/apps/api/package.json index 6fea6820d..7bd5a54cb 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -8,6 +8,7 @@ "db:migrate": "vitnode migrate", "init": "vitnode init --api", "dev": "vitnode init --api && tsx watch src/index.ts", + "dev:email": "email dev --dir src/emails", "build": "tsc && tsc-alias -p tsconfig.json", "start": "node dist/index.js", "lint": "eslint .", @@ -17,7 +18,6 @@ "dependencies": { "@hono/zod-openapi": "^1.0.2", "@hono/zod-validator": "^0.7.2", - "@react-email/components": "^0.3.3", "@vitnode/core": "workspace:*", "drizzle-kit": "^0.31.4", "drizzle-orm": "^0.44.4", @@ -29,6 +29,7 @@ }, "devDependencies": { "@hono/node-server": "^1.18.0", + "@react-email/components": "^0.3.3", "@types/node": "^24.1.0", "@types/react": "^19.1.9", "@types/react-dom": "^19.1.7", diff --git a/apps/docs/content/docs/dev/email/components/button.mdx b/apps/docs/content/docs/dev/email/components/button.mdx index e92a1294d..c78ebc283 100644 --- a/apps/docs/content/docs/dev/email/components/button.mdx +++ b/apps/docs/content/docs/dev/email/components/button.mdx @@ -17,7 +17,7 @@ import { Button } from '@vitnode/core/emails/ui/button'; ``` ```tsx - + ``` ## Props @@ -36,5 +36,10 @@ import { TypeTable } from 'fumadocs-ui/components/type-table'; type: 'default | sm | lg', default: 'default', }, + href: { + description: 'The URL the button links to.', + type: 'string', + default: '', + }, }} /> diff --git a/apps/docs/content/docs/dev/email/default_template_preview.png b/apps/docs/content/docs/dev/email/default_template_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..fc7793f2c0479623d496a5dc72e45fe8f10c8983 GIT binary patch literal 40778 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 z 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

1oE(yruN~U%7gfTvmgQpta!~dY+W!2bnMh(0 zn$uTIF9T0;IMY)df2V}T#(00+p|omx5#H7~zT{sjfm|=BmLt8eqnb^um{wA&)$j%M54b3;F*MZhGP zKC?dqbbEZ0exoh?F`td{pyB;69uc*SPXZFf-FI0A%97>F{d!11v92>*vy`Lki*Jyo zYT`})dL|N>!UTiaXra~Az@pfR5ATzzXI(N>dYd?ceE?%!+%K?D-dh_wu;z&tr)#Wg zT1~%8GShDNesL<*r8-D}-0tLP&zT;+)OeM_2(a83`LM+=zER8B0SJgsRkzsERAVT> za|x(G{oGRm^ep@NN5K-fje5<{#kuUBLWP8px%XkZtXAJ*HhY9f?SxJ#VO>CKdh#Q~ zb7gM!;yh`1%(YMzd2qJ7BEZT{j%w=~CoL$s1-e%C+H&NT*YuRyH?5>7y$HSK9NGEZ*gVu17VsqE_~&NzD_g2iv1GqoES-rAjH>Zl@x2y$_YLMi6)^5k2=}$E+4h z(l8fqV_U#27dW9jR31MH11^z3bT%?}fD&vjaGI6pOk}r5<1UE7 zTj%>vosxhcwi#9EeddlOue>?xJr>XCcyf(*968TQ|`%rbKdv$>a z$pe#iXz}9xyKmk%f*r1vvAGS((FSSJ>4h=qD5r!a>40*YB4^D*b#g8HY%*2|Vy|8m z%XoaT1@6D4&D|hU%RD3(VR{Yeq-$C8t_aaScV&|O01@FZk(Uk>;1LiONh<3% zF)6*h&mw!b_6CqMctsxl%qF9vAuPp2NxABtfRi4`h#A63$nc|P#k)+Czqv)7#^Z=o z&T5oTwO@{V&Ii$I-}|_J+bv!7z+g~xUm2fk>VzFhiB_(@qo~1n`;M~^4t1L1nl6f2 z4P1#c{}H-^SURz|lrZ(G4QMnWf70BZd}DWIF@mcn#ucqb#BQ+?pC5?fFdfk4VTa2} zu1@OOa5P#eU6s4AnUZ2O!t%}5&1r2i#Uy=v27o`&qiXo0Df<1O3}=C2{!*)Ur+H;pRDk6fr);%(&FDP|Lk!hf_Z z#aaR#ViV!JOqJUGaqg>wgMG5^62GM_LKtsT7Wml=W@jDFIaXOfbpP0$90UsLj^kNW z=ZmQQ=HC12Bw zg1mr7=+6sytj|@@-AVZAYnqo2{&(-aoWN3P6>uHR;_Hw3TGp zq+OVi6lh|Ujo$5(j~6dnF}YtRK9&bLRo`_AC8JzYF~#?ku2_bWMbI;wp&9Gz$*rJgRCz)*JI% zkP>}C_$$k*oSh5j3-p;2;Mh1LT355L0S7pDkPt|4I?`gl;?ND78ci*{#|8dIp&{^2 z!MKwey=?wsJ0nkXG!s{8!`_r-OdZ?>idn7jUsLolJ;(%8aABxBJMUD_CtZE(scR$p zva+1dqU~dSsJ2{>G}ffs{Vl2lW%x>KnY|<#grnT;67YuWidA}u$-bA?PxKHrE$}@B zP;en1kV^?nRB)Po^@DhHcRH~+yC(qQl|ot!hWNu9*w8%KI``{+of1&(2*88se2R-UV29TdFVx?l|fJn-0d#ZZc9g=`_=9y3_gmPuK?X)m2)4@&pbqc$;Y{>NRQYQiA;oJ64?&5O?3xlLDFIN_u~rr zWaXv9He_WiX1knUW{uqSlLV!(xI`h-Lc~X@`pLS*neIC#jzg9qN-r5-Blr0RogQmb zGbu&)$!6AO9BR?3JayC=?6z9)->R7CN(O-9XJ!{QbQ2qzbaL9Wt=Qhod;WKXwjbk@ z@h0h-se7dSD|w+vWAvPdT6o;!>*vVuQ^IRf2B71u^SRsOBCK9iJV_Gof#~l>SO94= zHPK+OsTM3LLFGTy$TH*G0s!@(!)8hkcZ6PkoJ|ABa zOMj_(B4z8khOXt6cOz-9TRPqWAxTV+)LeHSMdQ|g^1j;N<{PBQ*q>ApFpk}_>OkG! z_*Fu(*83a!WdFS-DxzF-OqY`U@9s+bc**X)z+&TlK#W8~e=jn^M$0 zbHj4#Z<^LbcHi-LNn#<6vicPFinW4uf9kiUJd;qYg@Kd&!uMMOqF6$~VkfVlB5$cX z)kL8$D&q#$wB?$$z`35{TyWis3?Yzuv=+sIxPPd`i7)BnL-}Z>NI?!3eLSb6(rO*6jJm^4UFdQP<0tY0t!9oG z3B0f4WS0xFq>TU|27q=iy}C=X;@-S>CP?>*k6)wzyfV#kR1GmeZ5L4Oc)qiOLE-=|rJVf1@!y{Ovq@`mkq+FDK4KKwY~n z!eWxKRTb#4H19bYg%RQjXMRgRK1?fS>@>EnQ8C{z$J?Y`rNbzvupGqR)1|Q@)L!pv zJcs?L{c0C>3Kfm@Y!5b$Thl5rX)ws)DNuHzE_n4vsGu%*2GtHe9iBrq!#8?vMQku! zziYU|jQ2I!%WX0`_Zk_bY{%&Rmg9W&x9>1%c;m*v{$jxy)hozap6872=AK+`+<^ah z;kZBL+$%Zw+5CsWtZVOEDWLC&b1U~FpE-~m#{-+{ierP;(6TCMsq-w;k=rIaxL6bP zJLCimX6GMwloO+y1N6?92=err`Qu{-()hqX%-xhZgQ*L6OIeb8#jx9u{ahs{2_Ta4 z?@M|q)?g4LoeRV6xbCaO1@afSwyho1N$*DG&-txoRoLqR(~rvJmH{QJ2u#=R9HgMc z>!)p;@NqnMR>CT`A=Nk3h@mDzh+7s@t$13FNfL;pMUF ziuL^Z=8BCbb!8uSFdnl8jw_HY9xjjrgQibaa>T_{G6X6PhJip&4W!oo!D~XFm8AAA zLHs@TYW@1_s*&QUIgh7>tv3@&egg0ZDC6_2}>0YA0dULT*D zEfcGYi`X2%Tr>|dv4&$KGih^rbQqg{9dBtWlVKVVr-sMdYvQx!2PunFiwAj5Ua3l4 z80#$$AGmc&?JwCI@jod#Q7c|EKSoE2U?hS;?U9HhiXtEnAvh#SP55) z71!1+V?m`MfHsO>(F&6^(D0tK2g{^aYGtk^ovriLz$t*55Z@MC#-AZvvy!XQ7Jc_F zX)M3{7!eJKkHV^GNgB~MOqT#ZjC38O^R`6x40qBb2*7=p0j%j3Nf-6)=g6obag@SO|n)KUAV~ILPFHMsL4ke0X<@!ger0X9w7_#Kv zZYMvE@&`Bw?*Mw9@4r^`xz|Vrd72sMR?A3G?V++(ll0xjIzQGn3JrWY%o00c0fMO~Kz!_2w`W)lmnkCA@uJc4lF z7aIMhIlai(HZ?Wtu2?T&BFV)m9LX~Vu`D6ESkB1GKH0!FwKZf@2#HHZp_lz!CqOl= z^&ZH^KH7bt^P>4EKSFrnIUWQqS3?gH8vg0M3tqE7@!HmQW;_d8>j}rlO%@4+;yn&^ z7#TDYK}r7Ak7WaB+?M0SE{lW{mAk0|&9TBYTY{o!D0yDyvdw4lfliK|f?zlUrFn|Z zPDkY%(?DoG3Wh9~?kEzyd#Icm%Q$U!fDiW|!I!}ld8mrm#*?(eo%g8FO=xkfX8?&? zFqv9vYQ^`Ls^q2F3n~80FLA4ausDHf&(V|Lz?TRWZcJZIaeSzvxMr&~s+#WUMR&sf zmi|X5iQ2-+gdnBJ5h?x49W->#(r2yBD_Z<`z4ir*kmG?r&!Y{PHSS4$20N?LmN=tr z@4`v{HNUT)jxjP~(2Lb?qkqahSUlfBn`}d_6OOKZRhB<$!~WP(Lxk1LJ0h;IgeyWi z2KGfH+e>Qz?;RDGniWn%UHx1^8Me-4H;n0EB(>#iKL)gUtD0{qYz@>8=oUSgbUU!- zw+nRWe1EIp#9EVdlnY= zI1bI?o)#F(0tNFht~5E-caW~?= zeGb3>aYa%EI2;Z$)#)<-lZ#IThADbabq?YFlc`qM1dMsQcexGefBtqpTG3f&%skou z8DtDl6&4oLmg%3{zyDm6WC!~28GQQRLHNmUUnsHfbfEa(y8_WdB89{M4)X7#|GVn{ rZkT_M>Ax1{U*q_%OZq>&>Cvg(U7 + +```bash tab="bun" +bun dev:email +``` + +```bash tab="pnpm" +pnpm dev:email +``` + +```bash tab="npm" +npm run dev:email +``` + + + ## Usage Inside your: @@ -57,6 +79,19 @@ export const testRoute = buildRoute({ }); ``` +### Preview + +Here is how `DefaultTemplateEmail` component looks like in the preview server: + +import { ImgDocs } from '@/components/fumadocs/img'; +import defaultTemplatePreviewImg from './default_template_preview.png'; + + + +Of course, you can customize the `DefaultTemplateEmail` component to fit your needs like for example changing the logo, colors etc. + +The `DefaultTemplateEmail` component is a wrapper around your email content that provides a consistent layout and styling. + ## TailwindCSS We implemented [TailwindCSS](https://react.email/docs/components/tailwind) in the email templates to allow you to use utility classes for styling. You can use Tailwind classes directly in your email components. @@ -65,7 +100,7 @@ We implemented [TailwindCSS](https://react.email/docs/components/tailwind) in th The current `TailwindCSS` version used is **3.4.10**. -## Components +### Components + +## Internationalization (I18n) + +TODO diff --git a/apps/docs/package.json b/apps/docs/package.json index 040078229..ad2630657 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -44,6 +44,7 @@ }, "devDependencies": { "@playwright/test": "^1.54.2", + "@react-email/components": "^0.4.0", "@tailwindcss/postcss": "^4.1.11", "@types/mdx": "^2.0.13", "@types/node": "^24.1.0", diff --git a/packages/create-vitnode-app/src/create/create-package-json.ts b/packages/create-vitnode-app/src/create/create-package-json.ts index 376a7b211..27027c2b2 100644 --- a/packages/create-vitnode-app/src/create/create-package-json.ts +++ b/packages/create-vitnode-app/src/create/create-package-json.ts @@ -102,6 +102,7 @@ export const createPackageJSON = async ({ build: 'tsc && tsc-alias -p tsconfig.json', start: 'node dist/index.js', }), + 'dev:email': 'email dev --dir src/emails', ...(eslint ? { lint: 'eslint .', @@ -169,6 +170,7 @@ export const createPackageJSON = async ({ 'db:migrate': 'vitnode migrate', init: 'vitnode init', dev: 'vitnode init && next dev --turbopack', + 'dev:email': 'email dev --dir src/emails', build: 'next build', start: 'next start', ...(eslint diff --git a/packages/eslint/package.json b/packages/eslint/package.json index 09f9d2fbb..5c371afdb 100644 --- a/packages/eslint/package.json +++ b/packages/eslint/package.json @@ -39,7 +39,7 @@ "typescript": "5.9.x" }, "devDependencies": { - "typescript": "^5.8.3" + "typescript": "^5.9.2" }, "dependencies": { "@eslint-react/eslint-plugin": "^1.52.3", @@ -52,6 +52,6 @@ "eslint-plugin-react-compiler": "19.1.0-rc.2", "eslint-plugin-react-hooks": "6.0.0-rc1", "prettier-plugin-tailwindcss": "^0.6.14", - "typescript-eslint": "^8.38.0" + "typescript-eslint": "^8.39.0" } } diff --git a/packages/vitnode/package.json b/packages/vitnode/package.json index 44c1d258f..58b59172a 100644 --- a/packages/vitnode/package.json +++ b/packages/vitnode/package.json @@ -41,7 +41,6 @@ "@hono/zod-validator": "^0.7.2", "@hookform/resolvers": "^5.2.1", "@react-email/components": "^0.4.0", - "@react-email/preview-server": "^4.2.7", "@swc/cli": "0.6.0", "@swc/core": "^1.13.3", "@testing-library/dom": "^10.4.1", @@ -112,6 +111,7 @@ "dependencies": { "@dnd-kit/core": "^6.3.1", "@hono/swagger-ui": "^0.5.2", + "@react-email/preview-server": "^4.2.7", "@tanstack/react-query": "^5.84.1", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", diff --git a/packages/vitnode/src/api/modules/users/routes/test.route.ts b/packages/vitnode/src/api/modules/users/routes/test.route.ts index ba1979275..0bf2e4e65 100644 --- a/packages/vitnode/src/api/modules/users/routes/test.route.ts +++ b/packages/vitnode/src/api/modules/users/routes/test.route.ts @@ -31,7 +31,7 @@ export const testRoute = buildRoute({ }, handler: async c => { await c.get('email').send({ - to: 'ithereplay@gmail.com', + to: 'axendeveloper@gmail.com', subject: 'Test Email', content: TestTemplateEmail, }); diff --git a/packages/vitnode/src/components/ui/form.tsx b/packages/vitnode/src/components/ui/form.tsx index 1c888c708..08dca7814 100644 --- a/packages/vitnode/src/components/ui/form.tsx +++ b/packages/vitnode/src/components/ui/form.tsx @@ -204,7 +204,7 @@ function FormDescription({ className, ...props }: React.ComponentProps<'p'>) { function FormMessage({ className, ...props }: React.ComponentProps<'p'>) { const { error, formMessageId } = useFormField(); - const body = error ? String(error?.message ?? '') : props.children; + const body = error ? (error?.message ?? '') : props.children; if (!body) { return null; diff --git a/packages/vitnode/src/emails/test-template.tsx b/packages/vitnode/src/emails/test-template.tsx index b3043d0b8..c64c776ad 100644 --- a/packages/vitnode/src/emails/test-template.tsx +++ b/packages/vitnode/src/emails/test-template.tsx @@ -1,18 +1,11 @@ -import { Section, Text } from '@react-email/components'; +import { Section } from '@react-email/components'; import { createTranslator } from 'use-intl'; import DefaultTemplateEmail, { type DefaultTemplateEmailProps, } from './default-template'; import { Button } from './ui/button'; -import { - Card, - CardContent, - CardDescription, - CardFooter, - CardHeader, - CardTitle, -} from './ui/card'; +import { Card } from './ui/card'; export default function TestTemplateEmail({ messages, @@ -49,7 +42,11 @@ export default function TestTemplateEmail({ }[] ).map(({ variant, label, size }) => (

-
diff --git a/plugins/blog/package.json b/plugins/blog/package.json index 72e131287..81b6e9416 100644 --- a/plugins/blog/package.json +++ b/plugins/blog/package.json @@ -29,6 +29,7 @@ "scripts": { "build:plugins": "tsc && swc src -d dist --config-file .swcrc && tsc-alias -p tsconfig.json", "dev": "concurrently \"tsc -w --preserveWatchOutput\" \"swc src -d dist --config-file .swcrc -w\" \"tsc-alias -w\" \"vitnode plugin --w\"", + "dev:email": "email dev --dir src/emails", "lint": "eslint .", "lint:fix": "eslint . --fix" }, @@ -43,11 +44,13 @@ "next-intl": "^4.3.4", "react": "^19.1.1", "react-dom": "^19.1.1", + "react-email": "^4.2.7", "react-hook-form": "^7.61.1", "sonner": "^2.0.6", "zod": "^4.0.14" }, "devDependencies": { + "@react-email/components": "^0.4.0", "@swc/cli": "0.6.0", "@swc/core": "^1.13.3", "@types/react": "^19.1.9", diff --git a/plugins/blog/src/api/modules/categories/categories.module.ts b/plugins/blog/src/api/modules/categories/categories.module.ts index 9868128b0..024e8f199 100644 --- a/plugins/blog/src/api/modules/categories/categories.module.ts +++ b/plugins/blog/src/api/modules/categories/categories.module.ts @@ -3,9 +3,10 @@ import { buildModule } from '@vitnode/core/api/lib/module'; import { CONFIG_PLUGIN } from '@/const'; import { categoriesRoute } from './routes/get.route'; +import { testRoute } from './test.route'; export const categoriesModule = buildModule({ ...CONFIG_PLUGIN, name: 'categories', - routes: [categoriesRoute], + routes: [categoriesRoute, testRoute], }); diff --git a/plugins/blog/src/api/modules/categories/test.route.ts b/plugins/blog/src/api/modules/categories/test.route.ts new file mode 100644 index 000000000..bfef6e815 --- /dev/null +++ b/plugins/blog/src/api/modules/categories/test.route.ts @@ -0,0 +1,43 @@ +import { buildRoute } from '@vitnode/core/api/lib/route'; +import { z } from 'zod'; + +import { CONFIG_PLUGIN } from '@/const'; +import TestTemplateEmail from '@/emails/test-template'; + +export const testRoute = buildRoute({ + ...CONFIG_PLUGIN, + route: { + method: 'post', + description: 'Test route', + path: '/test', + responses: { + 200: { + content: { + 'text/plain': { + schema: z.string(), + }, + }, + description: 'User', + }, + 201: { + content: { + 'text/plain': { + schema: z.string(), + }, + }, + description: 'User', + }, + }, + }, + handler: async c => { + await c.get('email').send({ + to: 'axendeveloper@gmail.com', + subject: 'Test Email', + content: TestTemplateEmail, + }); + + await c.get('log').warn('This is a test warn log'); + + return c.text('test'); + }, +}); diff --git a/plugins/blog/src/emails/test-template.tsx b/plugins/blog/src/emails/test-template.tsx new file mode 100644 index 000000000..259a53fb1 --- /dev/null +++ b/plugins/blog/src/emails/test-template.tsx @@ -0,0 +1,15 @@ +import { Text } from '@react-email/components'; +import DefaultTemplateEmail, { + type DefaultTemplateEmailProps, +} from '@vitnode/core/emails/default-template'; + +export default function TestTemplateEmail(props: DefaultTemplateEmailProps) { + return ( + + This is a test email template. + + ); +} + +TestTemplateEmail.PreviewProps = + DefaultTemplateEmail.PreviewProps satisfies DefaultTemplateEmailProps; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 30b41f55e..86a112178 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,9 +41,6 @@ importers: '@hono/zod-validator': specifier: ^0.7.2 version: 0.7.2(hono@4.8.10)(zod@4.0.14) - '@react-email/components': - specifier: ^0.3.3 - version: 0.3.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@vitnode/core': specifier: workspace:* version: link:../../packages/vitnode @@ -72,6 +69,9 @@ importers: '@hono/node-server': specifier: ^1.18.0 version: 1.18.0(hono@4.8.10) + '@react-email/components': + specifier: ^0.3.3 + version: 0.3.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@types/node': specifier: ^24.1.0 version: 24.1.0 @@ -169,6 +169,9 @@ importers: '@playwright/test': specifier: ^1.54.2 version: 1.54.2 + '@react-email/components': + specifier: ^0.4.0 + version: 0.4.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@tailwindcss/postcss': specifier: ^4.1.11 version: 4.1.11 @@ -291,11 +294,11 @@ importers: specifier: ^0.6.14 version: 0.6.14(prettier-plugin-astro@0.7.2)(prettier@3.6.2) typescript-eslint: - specifier: ^8.38.0 - version: 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + specifier: ^8.39.0 + version: 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) devDependencies: typescript: - specifier: ^5.8.3 + specifier: ^5.9.2 version: 5.9.2 packages/vitnode: @@ -306,6 +309,9 @@ importers: '@hono/swagger-ui': specifier: ^0.5.2 version: 0.5.2(hono@4.8.10) + '@react-email/preview-server': + specifier: ^4.2.7 + version: 4.2.7(@playwright/test@1.54.2)(@swc/core@1.13.3)(postcss@8.5.6) '@tanstack/react-query': specifier: ^5.84.1 version: 5.84.1(react@19.1.1) @@ -370,9 +376,6 @@ importers: '@react-email/components': specifier: ^0.4.0 version: 0.4.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@react-email/preview-server': - specifier: ^4.2.7 - version: 4.2.7(@playwright/test@1.54.2)(@swc/core@1.13.3)(postcss@8.5.6) '@swc/cli': specifier: 0.6.0 version: 0.6.0(@swc/core@1.13.3)(chokidar@4.0.3) @@ -514,6 +517,9 @@ importers: react-dom: specifier: ^19.1.1 version: 19.1.1(react@19.1.1) + react-email: + specifier: ^4.2.7 + version: 4.2.7 react-hook-form: specifier: ^7.61.1 version: 7.61.1(react@19.1.1) @@ -524,6 +530,9 @@ importers: specifier: ^4.0.14 version: 4.0.14 devDependencies: + '@react-email/components': + specifier: ^0.4.0 + version: 0.4.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@swc/cli': specifier: 0.6.0 version: 0.6.0(@swc/core@1.13.3)(chokidar@4.0.3) @@ -3553,6 +3562,9 @@ packages: '@types/node@24.1.0': resolution: {integrity: sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==} + '@types/node@24.2.0': + resolution: {integrity: sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw==} + '@types/nodemailer@6.4.17': resolution: {integrity: sha512-I9CCaIp6DTldEg7vyUTZi8+9Vo0hi1/T8gv3C89yk1rSAAzoKQ8H8ki/jBYJSFoH/BisgLP8tkZMlQ91CIquww==} @@ -3604,63 +3616,63 @@ packages: '@types/webpack@5.28.5': resolution: {integrity: sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw==} - '@typescript-eslint/eslint-plugin@8.38.0': - resolution: {integrity: sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==} + '@typescript-eslint/eslint-plugin@8.39.0': + resolution: {integrity: sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.38.0 + '@typescript-eslint/parser': ^8.39.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.38.0': - resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==} + '@typescript-eslint/parser@8.39.0': + resolution: {integrity: sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.38.0': - resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==} + '@typescript-eslint/project-service@8.39.0': + resolution: {integrity: sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.38.0': - resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==} + '@typescript-eslint/scope-manager@8.39.0': + resolution: {integrity: sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.38.0': - resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==} + '@typescript-eslint/tsconfig-utils@8.39.0': + resolution: {integrity: sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.38.0': - resolution: {integrity: sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==} + '@typescript-eslint/type-utils@8.39.0': + resolution: {integrity: sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.38.0': - resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} + '@typescript-eslint/types@8.39.0': + resolution: {integrity: sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.38.0': - resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==} + '@typescript-eslint/typescript-estree@8.39.0': + resolution: {integrity: sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.38.0': - resolution: {integrity: sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==} + '@typescript-eslint/utils@8.39.0': + resolution: {integrity: sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.38.0': - resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==} + '@typescript-eslint/visitor-keys@8.39.0': + resolution: {integrity: sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.0': @@ -7540,12 +7552,12 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript-eslint@8.38.0: - resolution: {integrity: sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==} + typescript-eslint@8.39.0: + resolution: {integrity: sha512-lH8FvtdtzcHJCkMOKnN73LIn6SLTpoojgJqDAxPm1jCR14eWSGPX8ul/gggBdPMk/d5+u9V854vTYQ8T5jF/1Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' typescript@5.9.2: resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} @@ -7569,6 +7581,9 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.10.0: + resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} + undici-types@7.8.0: resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} @@ -7987,9 +8002,9 @@ snapshots: '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-module-transforms': 7.27.3(@babel/core@7.26.10) '@babel/helpers': 7.28.2 - '@babel/parser': 7.27.0 + '@babel/parser': 7.28.0 '@babel/template': 7.27.2 - '@babel/traverse': 7.27.0 + '@babel/traverse': 7.28.0 '@babel/types': 7.28.2 convert-source-map: 2.0.0 debug: 4.4.1 @@ -8165,7 +8180,7 @@ snapshots: dependencies: '@babel/code-frame': 7.27.1 '@babel/generator': 7.28.0 - '@babel/parser': 7.27.0 + '@babel/parser': 7.28.0 '@babel/template': 7.27.2 '@babel/types': 7.28.2 debug: 4.4.1 @@ -8487,9 +8502,9 @@ snapshots: '@eslint-react/ast@1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-react/eff': 1.52.3 - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) string-ts: 2.2.1 ts-pattern: 5.8.0 transitivePeerDependencies: @@ -8504,10 +8519,10 @@ snapshots: '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@eslint-react/shared': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@eslint-react/var': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.39.0 + '@typescript-eslint/type-utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) birecord: 0.1.1 ts-pattern: 5.8.0 transitivePeerDependencies: @@ -8522,10 +8537,10 @@ snapshots: '@eslint-react/eff': 1.52.3 '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@eslint-react/shared': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.39.0 + '@typescript-eslint/type-utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.32.0(jiti@2.5.1) eslint-plugin-react-debug: 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) eslint-plugin-react-dom: 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) @@ -8542,7 +8557,7 @@ snapshots: '@eslint-react/kit@1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-react/eff': 1.52.3 - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) ts-pattern: 5.8.0 zod: 4.0.14 transitivePeerDependencies: @@ -8554,7 +8569,7 @@ snapshots: dependencies: '@eslint-react/eff': 1.52.3 '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) ts-pattern: 5.8.0 zod: 4.0.14 transitivePeerDependencies: @@ -8566,9 +8581,9 @@ snapshots: dependencies: '@eslint-react/ast': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@eslint-react/eff': 1.52.3 - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.39.0 + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) string-ts: 2.2.1 ts-pattern: 5.8.0 transitivePeerDependencies: @@ -10881,7 +10896,7 @@ snapshots: '@types/cors@2.8.19': dependencies: - '@types/node': 24.1.0 + '@types/node': 24.2.0 '@types/debug@4.1.12': dependencies: @@ -10935,6 +10950,10 @@ snapshots: dependencies: undici-types: 7.8.0 + '@types/node@24.2.0': + dependencies: + undici-types: 7.10.0 + '@types/nodemailer@6.4.17': dependencies: '@types/node': 24.1.0 @@ -10943,14 +10962,14 @@ snapshots: '@types/pg@8.11.10': dependencies: - '@types/node': 24.1.0 + '@types/node': 24.2.0 pg-protocol: 1.10.3 pg-types: 4.1.0 optional: true '@types/pg@8.11.6': dependencies: - '@types/node': 24.1.0 + '@types/node': 24.2.0 pg-protocol: 1.10.3 pg-types: 4.1.0 optional: true @@ -10990,23 +11009,23 @@ snapshots: '@types/webpack@5.28.5(@swc/core@1.13.3)(esbuild@0.25.0)': dependencies: - '@types/node': 24.1.0 + '@types/node': 24.2.0 tapable: 2.2.2 - webpack: 5.101.0(@swc/core@1.13.3)(esbuild@0.25.0) + webpack: 5.101.0(@swc/core@1.13.3)(esbuild@0.25.8) transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpack-cli - '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.39.0(@typescript-eslint/parser@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.38.0 + '@typescript-eslint/parser': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.39.0 + '@typescript-eslint/type-utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.39.0 eslint: 9.32.0(jiti@2.5.1) graphemer: 1.4.0 ignore: 7.0.5 @@ -11016,41 +11035,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/parser@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.38.0 + '@typescript-eslint/scope-manager': 8.39.0 + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.39.0 debug: 4.4.1 eslint: 9.32.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.38.0(typescript@5.9.2)': + '@typescript-eslint/project-service@8.39.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2) - '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.9.2) + '@typescript-eslint/types': 8.39.0 debug: 4.4.1 typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.38.0': + '@typescript-eslint/scope-manager@8.39.0': dependencies: - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/visitor-keys': 8.38.0 + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/visitor-keys': 8.39.0 - '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.9.2)': + '@typescript-eslint/tsconfig-utils@8.39.0(typescript@5.9.2)': dependencies: typescript: 5.9.2 - '@typescript-eslint/type-utils@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/type-utils@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) debug: 4.4.1 eslint: 9.32.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.9.2) @@ -11058,14 +11077,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.38.0': {} + '@typescript-eslint/types@8.39.0': {} - '@typescript-eslint/typescript-estree@8.38.0(typescript@5.9.2)': + '@typescript-eslint/typescript-estree@8.39.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/project-service': 8.38.0(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2) - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/visitor-keys': 8.38.0 + '@typescript-eslint/project-service': 8.39.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.9.2) + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/visitor-keys': 8.39.0 debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -11076,20 +11095,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/utils@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.5.1)) - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.39.0 + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) eslint: 9.32.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.38.0': + '@typescript-eslint/visitor-keys@8.39.0': dependencies: - '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/types': 8.39.0 eslint-visitor-keys: 4.2.1 '@ungap/structured-clone@1.3.0': {} @@ -11985,7 +12004,7 @@ snapshots: engine.io@6.6.4: dependencies: '@types/cors': 2.8.19 - '@types/node': 24.1.0 + '@types/node': 24.2.0 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -12251,8 +12270,8 @@ snapshots: eslint-plugin-perfectionist@4.15.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.32.0(jiti@2.5.1) natural-orderby: 5.0.0 transitivePeerDependencies: @@ -12289,10 +12308,10 @@ snapshots: '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@eslint-react/shared': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@eslint-react/var': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.39.0 + '@typescript-eslint/type-utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.32.0(jiti@2.5.1) string-ts: 2.2.1 ts-pattern: 5.8.0 @@ -12309,9 +12328,9 @@ snapshots: '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@eslint-react/shared': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@eslint-react/var': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.39.0 + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) compare-versions: 6.1.1 eslint: 9.32.0(jiti@2.5.1) string-ts: 2.2.1 @@ -12329,10 +12348,10 @@ snapshots: '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@eslint-react/shared': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@eslint-react/var': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.39.0 + '@typescript-eslint/type-utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.32.0(jiti@2.5.1) string-ts: 2.2.1 ts-pattern: 5.8.0 @@ -12361,10 +12380,10 @@ snapshots: '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@eslint-react/shared': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@eslint-react/var': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.39.0 + '@typescript-eslint/type-utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.32.0(jiti@2.5.1) string-ts: 2.2.1 ts-pattern: 5.8.0 @@ -12381,9 +12400,9 @@ snapshots: '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@eslint-react/shared': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@eslint-react/var': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.39.0 + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.32.0(jiti@2.5.1) string-ts: 2.2.1 ts-pattern: 5.8.0 @@ -12400,10 +12419,10 @@ snapshots: '@eslint-react/kit': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@eslint-react/shared': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) '@eslint-react/var': 1.52.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.39.0 + '@typescript-eslint/type-utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) compare-versions: 6.1.1 eslint: 9.32.0(jiti@2.5.1) is-immutable-type: 5.0.1(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) @@ -13195,7 +13214,7 @@ snapshots: is-immutable-type@5.0.1(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/type-utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.32.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.9.2) ts-declaration-location: 1.0.7(typescript@5.9.2) @@ -13320,7 +13339,7 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 24.1.0 + '@types/node': 24.2.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -15644,14 +15663,14 @@ snapshots: mkdirp: 3.0.1 yallist: 5.0.0 - terser-webpack-plugin@5.3.14(@swc/core@1.13.3)(esbuild@0.25.0)(webpack@5.101.0(@swc/core@1.13.3)(esbuild@0.25.8)): + terser-webpack-plugin@5.3.14(@swc/core@1.13.3)(esbuild@0.25.0)(webpack@5.101.0(@swc/core@1.13.3)(esbuild@0.25.0)): dependencies: '@jridgewell/trace-mapping': 0.3.29 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 terser: 5.43.1 - webpack: 5.101.0(@swc/core@1.13.3)(esbuild@0.25.0) + webpack: 5.101.0(@swc/core@1.13.3)(esbuild@0.25.8) optionalDependencies: '@swc/core': 1.13.3 esbuild: 0.25.0 @@ -15884,12 +15903,12 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2): + typescript-eslint@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.39.0(@typescript-eslint/parser@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.32.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: @@ -15915,6 +15934,8 @@ snapshots: undici-types@6.21.0: {} + undici-types@7.10.0: {} + undici-types@7.8.0: {} unified@11.0.5: @@ -16158,7 +16179,7 @@ snapshots: webpack-virtual-modules@0.6.2: optional: true - webpack@5.101.0(@swc/core@1.13.3)(esbuild@0.25.0): + webpack@5.101.0(@swc/core@1.13.3)(esbuild@0.25.8): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -16182,7 +16203,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.2 tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(@swc/core@1.13.3)(esbuild@0.25.0)(webpack@5.101.0(@swc/core@1.13.3)(esbuild@0.25.8)) + terser-webpack-plugin: 5.3.14(@swc/core@1.13.3)(esbuild@0.25.0)(webpack@5.101.0(@swc/core@1.13.3)(esbuild@0.25.0)) watchpack: 2.4.4 webpack-sources: 3.3.3 transitivePeerDependencies: From ba862a067f2c93a62233626f6867ecb568bac407 Mon Sep 17 00:00:00 2001 From: aXenDeveloper Date: Tue, 5 Aug 2025 22:22:48 +0200 Subject: [PATCH 6/6] feat: Add i18n in email template --- .../migrations/0001_chemical_tomorrow_man.sql | 2 - apps/api/migrations/meta/0000_snapshot.json | 1442 ----------------- apps/api/migrations/meta/0001_snapshot.json | 1311 --------------- apps/api/migrations/meta/_journal.json | 20 - apps/api/package.json | 2 +- apps/docs/content/docs/dev/email/overview.mdx | 31 +- .../docs/content/docs/dev/email/templates.mdx | 79 +- apps/docs/content/docs/dev/meta.json | 8 +- .../docs/docker-compose.yml | 2 +- apps/docs/migrations/0000_old_warbird.sql | 211 --- .../migrations/0000_serious_nightcrawler.sql} | 0 apps/docs/migrations/meta/0000_snapshot.json | 2 +- apps/docs/migrations/meta/_journal.json | 4 +- apps/docs/package.json | 1 + .../[locale]/(docs)/docs/[[...slug]]/page.tsx | 10 +- apps/docs/src/app/global.css | 6 +- package.json | 2 +- .../root/src/app/global.css | 4 +- packages/vitnode/src/api/models/email.ts | 50 +- .../src/api/models/user/get-user-by-id.ts | 1 + .../api/modules/users/routes/test.route.ts | 1 + .../vitnode/src/emails/default-template.tsx | 7 +- packages/vitnode/src/emails/test-template.tsx | 2 +- plugins/blog/package.json | 1 + .../src/api/modules/categories/test.route.ts | 10 +- plugins/blog/src/emails/test-template.tsx | 13 +- pnpm-lock.yaml | 37 +- turbo.json | 7 + 28 files changed, 226 insertions(+), 3040 deletions(-) delete mode 100644 apps/api/migrations/0001_chemical_tomorrow_man.sql delete mode 100644 apps/api/migrations/meta/0000_snapshot.json delete mode 100644 apps/api/migrations/meta/0001_snapshot.json delete mode 100644 apps/api/migrations/meta/_journal.json rename docker-compose.yml => apps/docs/docker-compose.yml (88%) delete mode 100644 apps/docs/migrations/0000_old_warbird.sql rename apps/{api/migrations/0000_old_warbird.sql => docs/migrations/0000_serious_nightcrawler.sql} (100%) diff --git a/apps/api/migrations/0001_chemical_tomorrow_man.sql b/apps/api/migrations/0001_chemical_tomorrow_man.sql deleted file mode 100644 index d7684b3a1..000000000 --- a/apps/api/migrations/0001_chemical_tomorrow_man.sql +++ /dev/null @@ -1,2 +0,0 @@ -DROP TABLE "blog_categories" CASCADE;--> statement-breakpoint -DROP TABLE "blog_posts" CASCADE; \ No newline at end of file diff --git a/apps/api/migrations/meta/0000_snapshot.json b/apps/api/migrations/meta/0000_snapshot.json deleted file mode 100644 index c10daf935..000000000 --- a/apps/api/migrations/meta/0000_snapshot.json +++ /dev/null @@ -1,1442 +0,0 @@ -{ - "id": "5b8bbb47-7354-434d-9fdb-c95d4adc0981", - "prevId": "00000000-0000-0000-0000-000000000000", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.core_admin_permissions": { - "name": "core_admin_permissions", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "roleId": { - "name": "roleId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "userId": { - "name": "userId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "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": "roleId", - "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": "userId", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "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": [ - "roleId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "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": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "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": false, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "lastSeen": { - "name": "lastSeen", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "expiresAt": { - "name": "expiresAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "deviceId": { - "name": "deviceId", - "type": "integer", - "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": "userId", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "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": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "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": [ - "deviceId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "core_admin_sessions_token_unique": { - "name": "core_admin_sessions_token_unique", - "nullsNotDistinct": false, - "columns": [ - "token" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - }, - "public.core_languages": { - "name": "core_languages", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "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 - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "time24": { - "name": "time24", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - } - }, - "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": "serial", - "primaryKey": true, - "notNull": true - }, - "languageCode": { - "name": "languageCode", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "pluginCode": { - "name": "pluginCode", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true - }, - "itemId": { - "name": "itemId", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "value": { - "name": "value", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "tableName": { - "name": "tableName", - "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": "languageCode", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "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": [ - "languageCode" - ], - "columnsTo": [ - "code" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - }, - "public.core_logs": { - "name": "core_logs", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "pluginId": { - "name": "pluginId", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "varchar(10)", - "primaryKey": false, - "notNull": true - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "ipAddress": { - "name": "ipAddress", - "type": "varchar(45)", - "primaryKey": false, - "notNull": true - }, - "method": { - "name": "method", - "type": "varchar(10)", - "primaryKey": false, - "notNull": true, - "default": "'GET'" - }, - "path": { - "name": "path", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'localhost'" - }, - "userAgent": { - "name": "userAgent", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "statusCode": { - "name": "statusCode", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 500 - }, - "userId": { - "name": "userId", - "type": "bigint", - "primaryKey": false, - "notNull": false - }, - "test123": { - "name": "test123", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - } - }, - "indexes": {}, - "foreignKeys": { - "core_logs_userId_core_users_id_fk": { - "name": "core_logs_userId_core_users_id_fk", - "tableFrom": "core_logs", - "tableTo": "core_users", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - }, - "public.core_moderators_permissions": { - "name": "core_moderators_permissions", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "roleId": { - "name": "roleId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "userId": { - "name": "userId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "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": "roleId", - "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": "userId", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "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": [ - "roleId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "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": [ - "userId" - ], - "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": "serial", - "primaryKey": true, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "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 - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "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 - }, - "userId": { - "name": "userId", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "expiresAt": { - "name": "expiresAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "deviceId": { - "name": "deviceId", - "type": "integer", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "core_sessions_user_id_idx": { - "name": "core_sessions_user_id_idx", - "columns": [ - { - "expression": "userId", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "core_sessions_userId_core_users_id_fk": { - "name": "core_sessions_userId_core_users_id_fk", - "tableFrom": "core_sessions", - "tableTo": "core_users", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "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": [ - "deviceId" - ], - "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": "serial", - "primaryKey": true, - "notNull": true - }, - "publicId": { - "name": "publicId", - "type": "varchar(32)", - "primaryKey": false, - "notNull": true - }, - "ipAddress": { - "name": "ipAddress", - "type": "varchar(40)", - "primaryKey": false, - "notNull": true - }, - "userAgent": { - "name": "userAgent", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "lastSeen": { - "name": "lastSeen", - "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": "ipAddress", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "core_sessions_known_devices_publicId_unique": { - "name": "core_sessions_known_devices_publicId_unique", - "nullsNotDistinct": false, - "columns": [ - "publicId" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - }, - "public.core_users": { - "name": "core_users", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "nameCode": { - "name": "nameCode", - "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 - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "newsletter": { - "name": "newsletter", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "avatarColor": { - "name": "avatarColor", - "type": "varchar(6)", - "primaryKey": false, - "notNull": true - }, - "emailVerified": { - "name": "emailVerified", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "roleId": { - "name": "roleId", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "birthday": { - "name": "birthday", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "ipAddress": { - "name": "ipAddress", - "type": "varchar(40)", - "primaryKey": false, - "notNull": true - }, - "language": { - "name": "language", - "type": "varchar(32)", - "primaryKey": false, - "notNull": true, - "default": "'en'" - } - }, - "indexes": { - "core_users_name_code_idx": { - "name": "core_users_name_code_idx", - "columns": [ - { - "expression": "nameCode", - "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_roleId_core_roles_id_fk": { - "name": "core_users_roleId_core_roles_id_fk", - "tableFrom": "core_users", - "tableTo": "core_roles", - "columnsFrom": [ - "roleId" - ], - "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_nameCode_unique": { - "name": "core_users_nameCode_unique", - "nullsNotDistinct": false, - "columns": [ - "nameCode" - ] - }, - "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": "serial", - "primaryKey": true, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "token": { - "name": "token", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "expires": { - "name": "expires", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "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": [ - "userId" - ], - "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": "serial", - "primaryKey": true, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "integer", - "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 - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "expiresAt": { - "name": "expiresAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "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": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "core_users_forgot_password_userId_unique": { - "name": "core_users_forgot_password_userId_unique", - "nullsNotDistinct": false, - "columns": [ - "userId" - ] - }, - "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": { - "userId": { - "name": "userId", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "providerId": { - "name": "providerId", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "providerAccountId": { - "name": "providerAccountId", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "core_users_sso_user_id_idx": { - "name": "core_users_sso_user_id_idx", - "columns": [ - { - "expression": "userId", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "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": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - }, - "public.blog_categories": { - "name": "blog_categories", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "titleSeo": { - "name": "titleSeo", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "default": "''" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "blog_categories_titleSeo_unique": { - "name": "blog_categories_titleSeo_unique", - "nullsNotDistinct": false, - "columns": [ - "titleSeo" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - }, - "public.blog_posts": { - "name": "blog_posts", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "titleSeo": { - "name": "titleSeo", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "categoryId": { - "name": "categoryId", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "blog_posts_categoryId_blog_categories_id_fk": { - "name": "blog_posts_categoryId_blog_categories_id_fk", - "tableFrom": "blog_posts", - "tableTo": "blog_categories", - "columnsFrom": [ - "categoryId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "blog_posts_titleSeo_unique": { - "name": "blog_posts_titleSeo_unique", - "nullsNotDistinct": false, - "columns": [ - "titleSeo" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - } - }, - "enums": {}, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/apps/api/migrations/meta/0001_snapshot.json b/apps/api/migrations/meta/0001_snapshot.json deleted file mode 100644 index 7bfafb588..000000000 --- a/apps/api/migrations/meta/0001_snapshot.json +++ /dev/null @@ -1,1311 +0,0 @@ -{ - "id": "f3c1dfa2-3cfa-4f01-91d0-13af459af18b", - "prevId": "5b8bbb47-7354-434d-9fdb-c95d4adc0981", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.core_admin_permissions": { - "name": "core_admin_permissions", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "roleId": { - "name": "roleId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "userId": { - "name": "userId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "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": "roleId", - "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": "userId", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "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": [ - "roleId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "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": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "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": false, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "lastSeen": { - "name": "lastSeen", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "expiresAt": { - "name": "expiresAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "deviceId": { - "name": "deviceId", - "type": "integer", - "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": "userId", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "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": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "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": [ - "deviceId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "core_admin_sessions_token_unique": { - "name": "core_admin_sessions_token_unique", - "nullsNotDistinct": false, - "columns": [ - "token" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - }, - "public.core_languages": { - "name": "core_languages", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "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 - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "time24": { - "name": "time24", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - } - }, - "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": "serial", - "primaryKey": true, - "notNull": true - }, - "languageCode": { - "name": "languageCode", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "pluginCode": { - "name": "pluginCode", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true - }, - "itemId": { - "name": "itemId", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "value": { - "name": "value", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "tableName": { - "name": "tableName", - "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": "languageCode", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "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": [ - "languageCode" - ], - "columnsTo": [ - "code" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - }, - "public.core_logs": { - "name": "core_logs", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "pluginId": { - "name": "pluginId", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "varchar(10)", - "primaryKey": false, - "notNull": true - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "ipAddress": { - "name": "ipAddress", - "type": "varchar(45)", - "primaryKey": false, - "notNull": true - }, - "method": { - "name": "method", - "type": "varchar(10)", - "primaryKey": false, - "notNull": true, - "default": "'GET'" - }, - "path": { - "name": "path", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'localhost'" - }, - "userAgent": { - "name": "userAgent", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "statusCode": { - "name": "statusCode", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 500 - }, - "userId": { - "name": "userId", - "type": "bigint", - "primaryKey": false, - "notNull": false - }, - "test123": { - "name": "test123", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - } - }, - "indexes": {}, - "foreignKeys": { - "core_logs_userId_core_users_id_fk": { - "name": "core_logs_userId_core_users_id_fk", - "tableFrom": "core_logs", - "tableTo": "core_users", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - }, - "public.core_moderators_permissions": { - "name": "core_moderators_permissions", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "roleId": { - "name": "roleId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "userId": { - "name": "userId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "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": "roleId", - "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": "userId", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "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": [ - "roleId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "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": [ - "userId" - ], - "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": "serial", - "primaryKey": true, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "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 - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "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 - }, - "userId": { - "name": "userId", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "expiresAt": { - "name": "expiresAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "deviceId": { - "name": "deviceId", - "type": "integer", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "core_sessions_user_id_idx": { - "name": "core_sessions_user_id_idx", - "columns": [ - { - "expression": "userId", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "core_sessions_userId_core_users_id_fk": { - "name": "core_sessions_userId_core_users_id_fk", - "tableFrom": "core_sessions", - "tableTo": "core_users", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "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": [ - "deviceId" - ], - "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": "serial", - "primaryKey": true, - "notNull": true - }, - "publicId": { - "name": "publicId", - "type": "varchar(32)", - "primaryKey": false, - "notNull": true - }, - "ipAddress": { - "name": "ipAddress", - "type": "varchar(40)", - "primaryKey": false, - "notNull": true - }, - "userAgent": { - "name": "userAgent", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "lastSeen": { - "name": "lastSeen", - "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": "ipAddress", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "core_sessions_known_devices_publicId_unique": { - "name": "core_sessions_known_devices_publicId_unique", - "nullsNotDistinct": false, - "columns": [ - "publicId" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - }, - "public.core_users": { - "name": "core_users", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "nameCode": { - "name": "nameCode", - "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 - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "newsletter": { - "name": "newsletter", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "avatarColor": { - "name": "avatarColor", - "type": "varchar(6)", - "primaryKey": false, - "notNull": true - }, - "emailVerified": { - "name": "emailVerified", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "roleId": { - "name": "roleId", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "birthday": { - "name": "birthday", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "ipAddress": { - "name": "ipAddress", - "type": "varchar(40)", - "primaryKey": false, - "notNull": true - }, - "language": { - "name": "language", - "type": "varchar(32)", - "primaryKey": false, - "notNull": true, - "default": "'en'" - } - }, - "indexes": { - "core_users_name_code_idx": { - "name": "core_users_name_code_idx", - "columns": [ - { - "expression": "nameCode", - "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_roleId_core_roles_id_fk": { - "name": "core_users_roleId_core_roles_id_fk", - "tableFrom": "core_users", - "tableTo": "core_roles", - "columnsFrom": [ - "roleId" - ], - "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_nameCode_unique": { - "name": "core_users_nameCode_unique", - "nullsNotDistinct": false, - "columns": [ - "nameCode" - ] - }, - "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": "serial", - "primaryKey": true, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "token": { - "name": "token", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "expires": { - "name": "expires", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "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": [ - "userId" - ], - "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": "serial", - "primaryKey": true, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "integer", - "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 - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "expiresAt": { - "name": "expiresAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "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": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "core_users_forgot_password_userId_unique": { - "name": "core_users_forgot_password_userId_unique", - "nullsNotDistinct": false, - "columns": [ - "userId" - ] - }, - "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": { - "userId": { - "name": "userId", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "providerId": { - "name": "providerId", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "providerAccountId": { - "name": "providerAccountId", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updatedAt": { - "name": "updatedAt", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "core_users_sso_user_id_idx": { - "name": "core_users_sso_user_id_idx", - "columns": [ - { - "expression": "userId", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "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": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": true - } - }, - "enums": {}, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/apps/api/migrations/meta/_journal.json b/apps/api/migrations/meta/_journal.json deleted file mode 100644 index 05a4c29c5..000000000 --- a/apps/api/migrations/meta/_journal.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": "7", - "dialect": "postgresql", - "entries": [ - { - "idx": 0, - "version": "7", - "when": 1751572135054, - "tag": "0000_old_warbird", - "breakpoints": true - }, - { - "idx": 1, - "version": "7", - "when": 1752313124508, - "tag": "0001_chemical_tomorrow_man", - "breakpoints": true - } - ] -} \ No newline at end of file diff --git a/apps/api/package.json b/apps/api/package.json index 7bd5a54cb..f66e10ede 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -7,7 +7,7 @@ "db:push": "vitnode push", "db:migrate": "vitnode migrate", "init": "vitnode init --api", - "dev": "vitnode init --api && tsx watch src/index.ts", + "dev": "tsx watch src/index.ts", "dev:email": "email dev --dir src/emails", "build": "tsc && tsc-alias -p tsconfig.json", "start": "node dist/index.js", diff --git a/apps/docs/content/docs/dev/email/overview.mdx b/apps/docs/content/docs/dev/email/overview.mdx index f9272745a..2d2b4d1ca 100644 --- a/apps/docs/content/docs/dev/email/overview.mdx +++ b/apps/docs/content/docs/dev/email/overview.mdx @@ -12,7 +12,7 @@ Before you can use email functionality, you need to provide an adapter to your a -or create your own custom email adapter... +or create your own [custom email adapter](/docs/dev/email/overview#custom-email-adapter)... ## Usage @@ -21,14 +21,43 @@ To send an email, you can use the context `c.get('email').send()` in your route ```ts import { z } from 'zod'; import { buildRoute } from '@vitnode/core/api/lib/route'; +import { UserModel } from '@vitnode/core/api/models/user'; export const testRoute = buildRoute({ handler: async c => { + const user = await new UserModel().getUserById({ + id: 3, + c, + }); + + if (!user) throw new Error('User not found'); + // [!code ++:5] + await c.get('email').send({ + subject: 'Test Email', + content: () => 'This is a test email.', + user, + }); + + return c.text('test'); + }, +}); +``` + +or if you don't want to use `user` then you can just pass `to` field with `locale`: + +```ts +import { z } from 'zod'; +import { buildRoute } from '@vitnode/core/api/lib/route'; + +export const testRoute = buildRoute({ + handler: async c => { + // [!code ++:6] await c.get('email').send({ to: 'test@test.com', subject: 'Test Email', content: () => 'This is a test email.', + locale: 'en', }); return c.text('test'); diff --git a/apps/docs/content/docs/dev/email/templates.mdx b/apps/docs/content/docs/dev/email/templates.mdx index 6730017fb..52a5f301f 100644 --- a/apps/docs/content/docs/dev/email/templates.mdx +++ b/apps/docs/content/docs/dev/email/templates.mdx @@ -61,17 +61,25 @@ TestTemplateEmail.PreviewProps = ```ts title="src/api/modules/users/routes/test.route.ts" import { z } from 'zod'; import { buildRoute } from '@vitnode/core/api/lib/route'; +import { UserModel } from '@vitnode/core/api/models/user'; // [!code ++] import TestTemplateEmail from '@/emails/test-template'; export const testRoute = buildRoute({ handler: async c => { + const user = await new UserModel().getUserById({ + id: 3, + c, + }); + + if (!user) throw new Error('User not found'); + await c.get('email').send({ - to: 'test@test.com', subject: 'Test Email', // [!code ++] content: TestTemplateEmail, + user, }); return c.text('test'); @@ -122,4 +130,71 @@ We implemented [TailwindCSS](https://react.email/docs/components/tailwind) in th ## Internationalization (I18n) -TODO +VitNode supports internationalization (I18n) in email templates thanks to [use-intl](https://next-intl.dev/docs/environments/core-library). + +```json title="src/locales/@vitnode/blog/en.json" +{ + "@vitnode/blog": { + "title": "Blog" + } +} +``` + +Read more about messages in [Internationalization (I18n) - Messages Docs](/docs/dev/i18n/messages). + +Use the `createTranslator` function to create a translator instance that can be used to translate messages in your email templates. + +```tsx title="src/emails/test-template.tsx" +import { Text } from '@react-email/components'; +import DefaultTemplateEmail, { + type DefaultTemplateEmailProps, +} from '@vitnode/core/emails/default-template'; +import { createTranslator } from 'use-intl'; // [!code ++] + +export default function TestTemplateEmail({ + locale, + messages, + ...props +}: DefaultTemplateEmailProps) { + const t = createTranslator({ locale, messages }); // [!code ++] + + // [!code ++:5] + return ( + + {t('@vitnode/blog.title')} + + ); +} + +TestTemplateEmail.PreviewProps = + DefaultTemplateEmail.PreviewProps satisfies DefaultTemplateEmailProps; +``` + +## User in Email + +If you pass `user` to the `send` method, it will be available in the email template as a prop. This allows you to personalize the email content based on the user data. + +```tsx title="src/emails/test-template.tsx" +import { Text } from '@react-email/components'; +import DefaultTemplateEmail, { + type DefaultTemplateEmailProps, +} from '@vitnode/core/emails/default-template'; + +export default function TestTemplateEmail({ + locale, + messages, + user, // [!code ++] + ...props +}: DefaultTemplateEmailProps) { + if (!user) return null; + + return ( + + This message is for {user.name} + + ); +} + +TestTemplateEmail.PreviewProps = + DefaultTemplateEmail.PreviewProps satisfies DefaultTemplateEmailProps; +``` diff --git a/apps/docs/content/docs/dev/meta.json b/apps/docs/content/docs/dev/meta.json index f771cd0dc..2dc38745c 100644 --- a/apps/docs/content/docs/dev/meta.json +++ b/apps/docs/content/docs/dev/meta.json @@ -14,15 +14,15 @@ "rest-api", "fetcher", "database", - "---Integrations---", - "sso", - "captcha", - "email", "---UI---", "layouts-and-pages", "admin-page", "i18n", "advanced", + "---Integrations---", + "sso", + "captcha", + "email", "..." ] } diff --git a/docker-compose.yml b/apps/docs/docker-compose.yml similarity index 88% rename from docker-compose.yml rename to apps/docs/docker-compose.yml index 43e51d8ba..7b59f0e56 100644 --- a/docker-compose.yml +++ b/apps/docs/docker-compose.yml @@ -10,7 +10,7 @@ services: POSTGRES_PASSWORD: ${POSTGRES_PASSWORD-root} POSTGRES_DB: ${POSTGRES_NAME-vitnode} volumes: - - ./docker/dev:/var/lib/postgresql/data + - ../../docker/dev:/var/lib/postgresql/data ports: - '5432:5432' networks: diff --git a/apps/docs/migrations/0000_old_warbird.sql b/apps/docs/migrations/0000_old_warbird.sql deleted file mode 100644 index 0cf929755..000000000 --- a/apps/docs/migrations/0000_old_warbird.sql +++ /dev/null @@ -1,211 +0,0 @@ -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, - "time24" boolean DEFAULT false 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_logs" ( - "id" serial PRIMARY KEY NOT NULL, - "pluginId" varchar(255) NOT NULL, - "type" varchar(10) NOT NULL, - "content" text NOT NULL, - "createdAt" timestamp DEFAULT now() NOT NULL, - "ipAddress" varchar(45) NOT NULL, - "method" varchar(10) DEFAULT 'GET' NOT NULL, - "path" text DEFAULT 'localhost' NOT NULL, - "userAgent" text, - "statusCode" integer DEFAULT 500 NOT NULL, - "userId" bigint, - "test123" boolean DEFAULT false NOT NULL -); ---> statement-breakpoint -ALTER TABLE "core_logs" 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, - "publicId" varchar(32) NOT NULL, - "ipAddress" varchar(40) NOT NULL, - "userAgent" text NOT NULL, - "lastSeen" timestamp DEFAULT now() NOT NULL, - CONSTRAINT "core_sessions_known_devices_publicId_unique" UNIQUE("publicId") -); ---> statement-breakpoint -ALTER TABLE "core_sessions_known_devices" 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 -CREATE TABLE "blog_categories" ( - "id" serial PRIMARY KEY NOT NULL, - "title" varchar(100) NOT NULL, - "createdAt" timestamp DEFAULT now() NOT NULL, - "updatedAt" timestamp NOT NULL, - "titleSeo" varchar(100) DEFAULT '' NOT NULL, - CONSTRAINT "blog_categories_titleSeo_unique" UNIQUE("titleSeo") -); ---> statement-breakpoint -ALTER TABLE "blog_categories" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint -CREATE TABLE "blog_posts" ( - "id" serial PRIMARY KEY NOT NULL, - "title" varchar(255) NOT NULL, - "titleSeo" varchar(255) NOT NULL, - "content" text NOT NULL, - "categoryId" integer NOT NULL, - "createdAt" timestamp DEFAULT now() NOT NULL, - "updatedAt" timestamp NOT NULL, - CONSTRAINT "blog_posts_titleSeo_unique" UNIQUE("titleSeo") -); ---> statement-breakpoint -ALTER TABLE "blog_posts" 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_logs" ADD CONSTRAINT "core_logs_userId_core_users_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."core_users"("id") ON DELETE set null ON UPDATE cascade;--> 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 -ALTER TABLE "blog_posts" ADD CONSTRAINT "blog_posts_categoryId_blog_categories_id_fk" FOREIGN KEY ("categoryId") REFERENCES "public"."blog_categories"("id") ON DELETE no action 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/api/migrations/0000_old_warbird.sql b/apps/docs/migrations/0000_serious_nightcrawler.sql similarity index 100% rename from apps/api/migrations/0000_old_warbird.sql rename to apps/docs/migrations/0000_serious_nightcrawler.sql diff --git a/apps/docs/migrations/meta/0000_snapshot.json b/apps/docs/migrations/meta/0000_snapshot.json index c10daf935..b92d2f949 100644 --- a/apps/docs/migrations/meta/0000_snapshot.json +++ b/apps/docs/migrations/meta/0000_snapshot.json @@ -1,5 +1,5 @@ { - "id": "5b8bbb47-7354-434d-9fdb-c95d4adc0981", + "id": "53f6fec6-1c5b-4344-8806-8d2cfc773fe0", "prevId": "00000000-0000-0000-0000-000000000000", "version": "7", "dialect": "postgresql", diff --git a/apps/docs/migrations/meta/_journal.json b/apps/docs/migrations/meta/_journal.json index 2a676df42..509512a43 100644 --- a/apps/docs/migrations/meta/_journal.json +++ b/apps/docs/migrations/meta/_journal.json @@ -5,8 +5,8 @@ { "idx": 0, "version": "7", - "when": 1751572135054, - "tag": "0000_old_warbird", + "when": 1754424977539, + "tag": "0000_serious_nightcrawler", "breakpoints": true } ] diff --git a/apps/docs/package.json b/apps/docs/package.json index ad2630657..51861f904 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -6,6 +6,7 @@ "scripts": { "db:push": "vitnode push", "db:migrate": "vitnode migrate", + "docker:dev": "docker compose -f ./docker-compose.yml -p vitnode-dev-dun up -d", "init": "vitnode init", "dev": "vitnode init && next dev --turbopack", "dev:email": "email dev --dir src/emails", diff --git a/apps/docs/src/app/[locale]/(docs)/docs/[[...slug]]/page.tsx b/apps/docs/src/app/[locale]/(docs)/docs/[[...slug]]/page.tsx index 627049e0e..8184cbe18 100644 --- a/apps/docs/src/app/[locale]/(docs)/docs/[[...slug]]/page.tsx +++ b/apps/docs/src/app/[locale]/(docs)/docs/[[...slug]]/page.tsx @@ -31,17 +31,17 @@ export default async function Page(props: { toc={page.data.toc} >
-

- {page.data.title} -

-

{page.data.description}

+
+

+ {page.data.title} +

-
+

{page.data.description}

diff --git a/apps/docs/src/app/global.css b/apps/docs/src/app/global.css index 833c6fb10..40301e73d 100644 --- a/apps/docs/src/app/global.css +++ b/apps/docs/src/app/global.css @@ -9,7 +9,7 @@ @source "../../node_modules/@vitnode/core/dist/src/views"; :root:not(.dark) { - --background: oklch(0.96 0.01 250); + --background: oklch(0.99 0.01 250); --foreground: oklch(0.18 0.01 250); --card: oklch(1 0 0); --card-foreground: oklch(0.22 0.01 250); @@ -17,7 +17,7 @@ --popover-foreground: oklch(0.22 0.01 250); --primary: oklch(0.51 0.16 262.61); --primary-foreground: oklch(0.985 0 0); - --secondary: oklch(0.94 0.02 254.94); + --secondary: oklch(0.98 0.01 250); --secondary-foreground: oklch(0.25 0.01 250); --muted: oklch(0.95 0.01 250); --muted-foreground: oklch(0.53 0.01 250); @@ -56,7 +56,7 @@ --popover-foreground: oklch(0.96 0.01 250); --primary: oklch(0.6 0.18 262.65); --primary-foreground: oklch(0.98 0 0); - --secondary: oklch(0.29 0.03 264.9); + --secondary: oklch(0.2 0.01 250); --secondary-foreground: oklch(0.96 0.01 250); --muted: oklch(0.24 0.01 250); --muted-foreground: oklch(0.7 0.01 250); diff --git a/package.json b/package.json index ec0775b99..d48efe3e8 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "release": "tsx ./scripts/bump-version.ts", "db:migrate": "turbo db:migrate", "db:push": "turbo db:push", - "docker:dev": "docker compose -f ./docker-compose.yml -p vitnode-dev-dun up -d", + "docker:dev": "turbo docker:dev", "build:scripts": "turbo build:scripts && pnpm i", "build:plugins": "turbo build:plugins", "build": "turbo build", diff --git a/packages/create-vitnode-app/copy-of-vitnode-app/root/src/app/global.css b/packages/create-vitnode-app/copy-of-vitnode-app/root/src/app/global.css index eee3b4ddf..d90ff72f6 100644 --- a/packages/create-vitnode-app/copy-of-vitnode-app/root/src/app/global.css +++ b/packages/create-vitnode-app/copy-of-vitnode-app/root/src/app/global.css @@ -6,7 +6,7 @@ @source "../../node_modules/@vitnode/core/dist/src/views"; :root:not(.dark) { - --background: oklch(0.96 0.01 250); + --background: oklch(0.99 0.01 250); --foreground: oklch(0.18 0.01 250); --card: oklch(1 0 0); --card-foreground: oklch(0.22 0.01 250); @@ -49,7 +49,7 @@ --popover-foreground: oklch(0.96 0.01 250); --primary: oklch(0.6 0.18 262.65); --primary-foreground: oklch(0.98 0 0); - --secondary: oklch(0.29 0.03 264.9); + --secondary: oklch(0.2 0.01 250); --secondary-foreground: oklch(0.96 0.01 250); --muted: oklch(0.24 0.01 250); --muted-foreground: oklch(0.7 0.01 250); diff --git a/packages/vitnode/src/api/models/email.ts b/packages/vitnode/src/api/models/email.ts index 1b109efaa..f684162cc 100644 --- a/packages/vitnode/src/api/models/email.ts +++ b/packages/vitnode/src/api/models/email.ts @@ -18,15 +18,35 @@ export interface EmailApiPlugin { }) => Promise; } -export interface EmailModelSendArgs { +interface EmailModelSendArgsWithUser { + locale?: never; + to?: never; + user: { + email: string; + id: number; + language: string; + name?: string; + nameCode?: string; + }; +} + +interface EmailModelSendArgsWithEmail { + locale: string; + to: string; + user?: never; +} + +export type EmailModelSendArgs = { content: ( - props: Omit, + props: Omit & + Pick, ) => React.ReactNode; html?: string; + locale?: string; replyTo?: string; subject: string; - to: string; -} + // eslint-disable-next-line perfectionist/sort-intersection-types +} & (EmailModelSendArgsWithEmail | EmailModelSendArgsWithUser); export class EmailModel { constructor(c: Context) { @@ -35,7 +55,15 @@ export class EmailModel { protected readonly c: Context; - async send({ html, replyTo, subject, to, content }: EmailModelSendArgs) { + async send({ + html, + replyTo, + subject, + to, + user, + content, + locale: localeFromArgs, + }: EmailModelSendArgs) { const core = this.c.get('core'); const provider = core.email?.adapter; if (!provider) { @@ -44,7 +72,7 @@ export class EmailModel { }); } - const locale = 'en'; + const locale = localeFromArgs ?? user?.language ?? 'en'; const pluginIds: string[] = [ '@vitnode/core', ...this.c.get('core').plugins.map(plugin => plugin.id), @@ -79,12 +107,20 @@ export class EmailModel { logo: core.email?.logo, }, messages, + user, }); + const emailTo = user?.email ?? to; + if (!emailTo) { + throw new HTTPException(400, { + message: 'Email address is required', + }); + } + try { await provider.sendEmail({ html: await render(htmlContent), - to, + to: emailTo, subject, replyTo, metadata: core.metadata, 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 310b40bdd..2f9e37b4d 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 @@ -18,6 +18,7 @@ export const getUserById = async ({ id, c }: { c: Context; id: number }) => { emailVerified: core_users.emailVerified, roleId: core_users.roleId, birthday: core_users.birthday, + language: core_users.language, }) .from(core_users) .where(eq(core_users.id, id)) diff --git a/packages/vitnode/src/api/modules/users/routes/test.route.ts b/packages/vitnode/src/api/modules/users/routes/test.route.ts index 0bf2e4e65..83d432794 100644 --- a/packages/vitnode/src/api/modules/users/routes/test.route.ts +++ b/packages/vitnode/src/api/modules/users/routes/test.route.ts @@ -33,6 +33,7 @@ export const testRoute = buildRoute({ await c.get('email').send({ to: 'axendeveloper@gmail.com', subject: 'Test Email', + locale: 'en', content: TestTemplateEmail, }); diff --git a/packages/vitnode/src/emails/default-template.tsx b/packages/vitnode/src/emails/default-template.tsx index 13fbbdc8b..ce5aec1a7 100644 --- a/packages/vitnode/src/emails/default-template.tsx +++ b/packages/vitnode/src/emails/default-template.tsx @@ -13,9 +13,12 @@ import { Text, } from '@react-email/components'; +import type { EmailModelSendArgs } from '@/api/models/email'; + import { CONFIG } from '../lib/config'; -export interface DefaultTemplateEmailProps { +export interface DefaultTemplateEmailProps + extends Pick { locale: string; // eslint-disable-next-line @typescript-eslint/no-explicit-any messages: Record; @@ -80,7 +83,7 @@ export default function DefaultTemplateEmail({ ] ?? '#fafafa', secondary: tailwindConfig?.theme?.extend?.colors?.['secondary'] ?? - '#e2ecf9', + '#f4f9ff', 'secondary-foreground': tailwindConfig?.theme?.extend?.colors?.[ 'secondary-foreground' diff --git a/packages/vitnode/src/emails/test-template.tsx b/packages/vitnode/src/emails/test-template.tsx index c64c776ad..dd5b42eff 100644 --- a/packages/vitnode/src/emails/test-template.tsx +++ b/packages/vitnode/src/emails/test-template.tsx @@ -47,7 +47,7 @@ export default function TestTemplateEmail({ size={size} variant={variant} > - {label} + {label} - {t('core.global.no_results.desc')}
))} diff --git a/plugins/blog/package.json b/plugins/blog/package.json index 81b6e9416..489e841e2 100644 --- a/plugins/blog/package.json +++ b/plugins/blog/package.json @@ -47,6 +47,7 @@ "react-email": "^4.2.7", "react-hook-form": "^7.61.1", "sonner": "^2.0.6", + "use-intl": "^4.3.4", "zod": "^4.0.14" }, "devDependencies": { diff --git a/plugins/blog/src/api/modules/categories/test.route.ts b/plugins/blog/src/api/modules/categories/test.route.ts index bfef6e815..cd50d2f44 100644 --- a/plugins/blog/src/api/modules/categories/test.route.ts +++ b/plugins/blog/src/api/modules/categories/test.route.ts @@ -1,4 +1,5 @@ import { buildRoute } from '@vitnode/core/api/lib/route'; +import { UserModel } from '@vitnode/core/api/models/user'; import { z } from 'zod'; import { CONFIG_PLUGIN } from '@/const'; @@ -30,10 +31,17 @@ export const testRoute = buildRoute({ }, }, handler: async c => { + const user = await new UserModel().getUserById({ + id: 3, + c, + }); + + if (!user) throw new Error('User not found'); + await c.get('email').send({ - to: 'axendeveloper@gmail.com', subject: 'Test Email', content: TestTemplateEmail, + user, }); await c.get('log').warn('This is a test warn log'); diff --git a/plugins/blog/src/emails/test-template.tsx b/plugins/blog/src/emails/test-template.tsx index 259a53fb1..87962bbf8 100644 --- a/plugins/blog/src/emails/test-template.tsx +++ b/plugins/blog/src/emails/test-template.tsx @@ -3,10 +3,17 @@ import DefaultTemplateEmail, { type DefaultTemplateEmailProps, } from '@vitnode/core/emails/default-template'; -export default function TestTemplateEmail(props: DefaultTemplateEmailProps) { +export default function TestTemplateEmail({ + locale, + messages, + user, + ...props +}: DefaultTemplateEmailProps) { + if (!user) return null; + return ( - - This is a test email template. + + This message is for {user.name} ); } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 86a112178..29442e02e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -347,7 +347,7 @@ importers: version: 7.2.0 react-scan: specifier: ^0.4.3 - version: 0.4.3(@types/react@19.1.9)(next@15.4.5(@babel/core@7.28.0)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(rollup@4.46.2) + version: 0.4.3(@types/react@19.1.9)(next@15.4.5(@babel/core@7.26.10)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(rollup@4.46.2) resend: specifier: ^4.7.0 version: 4.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) @@ -438,10 +438,10 @@ importers: version: 0.536.0(react@19.1.1) next: specifier: ^15.4.5 - version: 15.4.5(@babel/core@7.28.0)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 15.4.5(@babel/core@7.26.10)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) next-intl: specifier: ^4.3.4 - version: 4.3.4(next@15.4.5(@babel/core@7.28.0)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + version: 4.3.4(next@15.4.5(@babel/core@7.26.10)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)(typescript@5.9.2) react: specifier: ^19.1.1 version: 19.1.1 @@ -526,6 +526,9 @@ importers: sonner: specifier: ^2.0.6 version: 2.0.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + use-intl: + specifier: ^4.3.4 + version: 4.3.4(react@19.1.1) zod: specifier: ^4.0.14 version: 4.0.14 @@ -11011,7 +11014,7 @@ snapshots: dependencies: '@types/node': 24.2.0 tapable: 2.2.2 - webpack: 5.101.0(@swc/core@1.13.3)(esbuild@0.25.8) + webpack: 5.101.0(@swc/core@1.13.3)(esbuild@0.25.0) transitivePeerDependencies: - '@swc/core' - esbuild @@ -14107,11 +14110,11 @@ snapshots: neo-async@2.6.2: {} - next-intl@4.3.4(next@15.4.5(@babel/core@7.28.0)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)(typescript@5.9.2): + next-intl@4.3.4(next@15.4.5(@babel/core@7.26.10)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)(typescript@5.9.2): dependencies: '@formatjs/intl-localematcher': 0.5.10 negotiator: 1.0.0 - next: 15.4.5(@babel/core@7.28.0)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + next: 15.4.5(@babel/core@7.26.10)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 use-intl: 4.3.4(react@19.1.1) optionalDependencies: @@ -14156,7 +14159,7 @@ snapshots: - '@babel/core' - babel-plugin-macros - next@15.4.5(@babel/core@7.28.0)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1): + next@15.4.5(@babel/core@7.26.10)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: '@next/env': 15.4.5 '@swc/helpers': 0.5.15 @@ -14164,7 +14167,7 @@ snapshots: postcss: 8.4.31 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - styled-jsx: 5.1.6(@babel/core@7.28.0)(react@19.1.1) + styled-jsx: 5.1.6(@babel/core@7.26.10)(react@19.1.1) optionalDependencies: '@next/swc-darwin-arm64': 15.4.5 '@next/swc-darwin-x64': 15.4.5 @@ -14188,7 +14191,7 @@ snapshots: postcss: 8.4.31 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - styled-jsx: 5.1.6(@babel/core@7.28.0)(react@19.1.1) + styled-jsx: 5.1.6(@babel/core@7.26.10)(react@19.1.1) optionalDependencies: '@next/swc-darwin-arm64': 15.4.5 '@next/swc-darwin-x64': 15.4.5 @@ -14813,7 +14816,7 @@ snapshots: optionalDependencies: '@types/react': 19.1.9 - react-scan@0.4.3(@types/react@19.1.9)(next@15.4.5(@babel/core@7.28.0)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(rollup@4.46.2): + react-scan@0.4.3(@types/react@19.1.9)(next@15.4.5(@babel/core@7.26.10)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(rollup@4.46.2): dependencies: '@babel/core': 7.28.0 '@babel/generator': 7.28.0 @@ -14835,7 +14838,7 @@ snapshots: react-dom: 19.1.1(react@19.1.1) tsx: 4.20.3 optionalDependencies: - next: 15.4.5(@babel/core@7.28.0)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + next: 15.4.5(@babel/core@7.26.10)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) unplugin: 2.1.0 transitivePeerDependencies: - '@types/react' @@ -15567,12 +15570,12 @@ snapshots: optionalDependencies: '@babel/core': 7.26.10 - styled-jsx@5.1.6(@babel/core@7.28.0)(react@19.1.1): + styled-jsx@5.1.6(@babel/core@7.26.10)(react@19.1.1): dependencies: client-only: 0.0.1 react: 19.1.1 optionalDependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.26.10 stylis@4.3.6: {} @@ -15663,14 +15666,14 @@ snapshots: mkdirp: 3.0.1 yallist: 5.0.0 - terser-webpack-plugin@5.3.14(@swc/core@1.13.3)(esbuild@0.25.0)(webpack@5.101.0(@swc/core@1.13.3)(esbuild@0.25.0)): + terser-webpack-plugin@5.3.14(@swc/core@1.13.3)(esbuild@0.25.0)(webpack@5.101.0(@swc/core@1.13.3)(esbuild@0.25.8)): dependencies: '@jridgewell/trace-mapping': 0.3.29 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 terser: 5.43.1 - webpack: 5.101.0(@swc/core@1.13.3)(esbuild@0.25.8) + webpack: 5.101.0(@swc/core@1.13.3)(esbuild@0.25.0) optionalDependencies: '@swc/core': 1.13.3 esbuild: 0.25.0 @@ -16179,7 +16182,7 @@ snapshots: webpack-virtual-modules@0.6.2: optional: true - webpack@5.101.0(@swc/core@1.13.3)(esbuild@0.25.8): + webpack@5.101.0(@swc/core@1.13.3)(esbuild@0.25.0): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -16203,7 +16206,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.2 tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(@swc/core@1.13.3)(esbuild@0.25.0)(webpack@5.101.0(@swc/core@1.13.3)(esbuild@0.25.0)) + terser-webpack-plugin: 5.3.14(@swc/core@1.13.3)(esbuild@0.25.0)(webpack@5.101.0(@swc/core@1.13.3)(esbuild@0.25.8)) watchpack: 2.4.4 webpack-sources: 3.3.3 transitivePeerDependencies: diff --git a/turbo.json b/turbo.json index e32ff95a3..1d7c81fc3 100644 --- a/turbo.json +++ b/turbo.json @@ -6,6 +6,13 @@ "dependsOn": ["^test"], "cache": false }, + "docker:dev": { + "dependsOn": ["^docker:dev"], + "cache": false, + "persistent": true, + "inputs": ["$TURBO_DEFAULT$", ".env*"], + "env": ["POSTGRES_URL", "NEXT_PUBLIC_API_URL", "NEXT_PUBLIC_WEB_URL"] + }, "db:migrate": { "dependsOn": ["^db:migrate"], "persistent": true,