From 035d94183b8a654e179f796bd915b521c8370931 Mon Sep 17 00:00:00 2001 From: Amruth Pillai Date: Mon, 10 Aug 2026 12:18:47 +0200 Subject: [PATCH] fix(web): show static template previews in gallery (#3302) --- apps/server/package.json | 10 +- apps/web/package.json | 4 +- .../src/dialogs/resume/template/gallery.tsx | 18 +- .../resume/preview/template-live-preview.tsx | 106 -------- package.json | 6 +- packages/api/package.json | 8 +- packages/resume/package.json | 2 +- pnpm-lock.yaml | 240 +++++++++--------- tooling/package.json | 2 +- 9 files changed, 141 insertions(+), 255 deletions(-) delete mode 100644 apps/web/src/features/resume/preview/template-live-preview.tsx diff --git a/apps/server/package.json b/apps/server/package.json index 6dfc62620..54551e9e1 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -19,17 +19,17 @@ }, "dependencies": { "@ai-sdk/anthropic": "^4.0.36", - "@ai-sdk/cerebras": "^3.0.27", + "@ai-sdk/cerebras": "^3.0.28", "@ai-sdk/cohere": "^4.0.25", "@ai-sdk/deepseek": "^3.0.26", - "@ai-sdk/fireworks": "^3.0.29", + "@ai-sdk/fireworks": "^3.0.30", "@ai-sdk/google": "^4.0.39", "@ai-sdk/groq": "^4.0.26", "@ai-sdk/mistral": "^4.0.27", "@ai-sdk/openai": "^4.0.36", - "@ai-sdk/openai-compatible": "^3.0.27", + "@ai-sdk/openai-compatible": "^3.0.28", "@ai-sdk/perplexity": "^4.0.27", - "@ai-sdk/togetherai": "^3.0.28", + "@ai-sdk/togetherai": "^3.0.29", "@ai-sdk/xai": "^4.0.33", "@aws-sdk/client-s3": "^3.1106.0", "@better-auth/api-key": "^1.6.26", @@ -94,7 +94,7 @@ "@types/react": "^19.2.18", "@typescript/native-preview": "7.0.0-dev.20260707.2", "tsdown": "^0.22.14", - "tsx": "^4.23.11", + "tsx": "^4.23.12", "typescript": "^7.0.2", "vitest": "^4.1.10" } diff --git a/apps/web/package.json b/apps/web/package.json index 028f9f734..310f3860a 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -55,7 +55,7 @@ "@tanstack/react-form": "^1.33.4", "@tanstack/react-hotkeys": "^0.10.0", "@tanstack/react-query": "^5.101.4", - "@tanstack/react-router": "^1.170.24", + "@tanstack/react-router": "^1.170.25", "@tiptap/extension-color": "^3.29.2", "@tiptap/extension-highlight": "^3.29.2", "@tiptap/extension-text-align": "^3.29.2", @@ -106,7 +106,7 @@ "@tanstack/react-devtools": "^0.10.9", "@tanstack/react-query-devtools": "^5.101.4", "@tanstack/react-router-devtools": "^1.167.1", - "@tanstack/router-plugin": "^1.168.28", + "@tanstack/router-plugin": "^1.168.29", "@types/babel__core": "^7.20.5", "@types/pg": "^8.21.0", "@types/react": "^19.2.18", diff --git a/apps/web/src/dialogs/resume/template/gallery.tsx b/apps/web/src/dialogs/resume/template/gallery.tsx index 4de51dddf..a5beda4be 100644 --- a/apps/web/src/dialogs/resume/template/gallery.tsx +++ b/apps/web/src/dialogs/resume/template/gallery.tsx @@ -1,11 +1,9 @@ -import type { ResumeData } from "@reactive-resume/schema/resume/data"; import type { Template } from "@reactive-resume/schema/templates"; import type { DialogProps } from "@/dialogs/store"; import type { TemplateMetadata } from "./data"; import { t } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { SlideshowIcon } from "@phosphor-icons/react"; -import { lazy, Suspense } from "react"; import { toast } from "sonner"; import { Badge } from "@reactive-resume/ui/components/badge"; import { DialogContent, DialogDescription, DialogHeader, DialogTitle } from "@reactive-resume/ui/components/dialog"; @@ -16,14 +14,6 @@ import { useDialogStore } from "@/dialogs/store"; import { useCurrentResume, useUpdateResumeData } from "@/features/resume/builder/draft"; import { templates } from "./data"; -// Lazy so the browser PDF pipeline (pdf.js) loads only when the gallery opens. -// All visible tiles share the same lazy chunk; only one PDF renders at a time via the shared serial queue. -const TemplateLivePreview = lazy(() => - import("@/features/resume/preview/template-live-preview").then((module) => ({ - default: module.TemplateLivePreview, - })), -); - export function TemplateGalleryDialog(_: DialogProps<"resume.template.gallery">) { const closeDialog = useDialogStore((state) => state.closeDialog); const resume = useCurrentResume(); @@ -76,7 +66,6 @@ export function TemplateGalleryDialog(_: DialogProps<"resume.template.gallery">) {Object.entries(templates).map(([template, metadata]) => ( ) type TemplateCardProps = { id: Template; - data: ResumeData; isActive?: boolean; metadata: TemplateMetadata; onSelect: (template: Template) => void; }; -function TemplateCard({ id, data, metadata, isActive, onSelect }: TemplateCardProps) { +function TemplateCard({ id, metadata, isActive, onSelect }: TemplateCardProps) { return (
diff --git a/apps/web/src/features/resume/preview/template-live-preview.tsx b/apps/web/src/features/resume/preview/template-live-preview.tsx deleted file mode 100644 index d844c0f5b..000000000 --- a/apps/web/src/features/resume/preview/template-live-preview.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import type { ResumeData } from "@reactive-resume/schema/resume/data"; -import type { Template } from "@reactive-resume/schema/templates"; -import { useEffect, useRef, useState } from "react"; -import { Spinner } from "@reactive-resume/ui/components/spinner"; -import { cn } from "@reactive-resume/utils/style"; -import { createResumePdfBlob } from "@/features/resume/export/pdf-document"; -import { createPdfFirstPageImageUrl } from "./pdf-thumbnail"; - -// Bounded FIFO cache of generated object URLs keyed by (data, template) reference. Evicted entries are -// revoked so blobs don't leak; stale-data entries (a new `data` object after an edit) age out via the cap. -// ponytail: cap-24 linear scan — gallery can show ~20 templates at once. -const PREVIEW_CACHE_LIMIT = 24; -type PreviewCacheEntry = { data: ResumeData; template: Template; url: string }; -const previewCache: PreviewCacheEntry[] = []; - -const getCachedPreview = (data: ResumeData, template: Template) => - previewCache.find((entry) => entry.data === data && entry.template === template)?.url; - -const setCachedPreview = (data: ResumeData, template: Template, url: string) => { - previewCache.push({ data, template, url }); - while (previewCache.length > PREVIEW_CACHE_LIMIT) { - const evicted = previewCache.shift(); - if (evicted) URL.revokeObjectURL(evicted.url); - } -}; - -// Serial render pipeline shared across all instances: PDFs generate one-at-a-time on the main thread -// (serialized through `renderQueue`) so the gallery doesn't spike CPU/memory when all tiles mount at once. -// Per-instance `latestRenderRequestId` ref (not global) ensures that if a component re-renders with new -// props it discards its own superseded work without cancelling renders for other tiles. -let renderQueue: Promise = Promise.resolve(); - -type TemplateLivePreviewProps = { - alt: string; - className?: string; - data: ResumeData; - fallbackSrc: string; - template: Template; -}; - -/** - * Renders the first page of the user's actual resume data through a given template, lazily. - * Reuses the browser PDF pipeline (`createResumePdfBlob` + pdf.js first-page render). Falls back to the - * static template image while generating or if generation fails. Intended to be mounted on demand (e.g. - * inside a hover/preview card) so the render stays off the hover critical path. - */ -export function TemplateLivePreview({ alt, className, data, fallbackSrc, template }: TemplateLivePreviewProps) { - const [imageUrl, setImageUrl] = useState(() => getCachedPreview(data, template) ?? null); - const [hasError, setHasError] = useState(false); - // Per-instance counter: only the latest render request for THIS tile commits its result. - const latestRequestId = useRef(0); - - useEffect(() => { - const cached = getCachedPreview(data, template); - if (cached) { - setImageUrl(cached); - return; - } - - let cancelled = false; - const requestId = ++latestRequestId.current; - - renderQueue = renderQueue.then(async () => { - if (cancelled || requestId !== latestRequestId.current) return; - - // Another instance may have cached this exact preview while we were queued. - const existing = getCachedPreview(data, template); - if (existing) { - setImageUrl(existing); - return; - } - - try { - const blob = await createResumePdfBlob(data, template); - const url = await createPdfFirstPageImageUrl(blob); - - if (cancelled || requestId !== latestRequestId.current) { - URL.revokeObjectURL(url); - return; - } - - setCachedPreview(data, template, url); - setImageUrl(url); - } catch { - if (!cancelled) setHasError(true); - } - }); - - return () => { - cancelled = true; - }; - }, [data, template]); - - const isLoading = !imageUrl && !hasError; - - return ( -
- {alt} - {isLoading ? ( -
- -
- ) : null} -
- ); -} diff --git a/package.json b/package.json index 007684aa8..167498eb1 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "type": "git", "url": "https://github.com/amruthpillai/reactive-resume.git" }, - "packageManager": "pnpm@11.20.0", + "packageManager": "pnpm@11.21.0", "workspaces": [ "apps/*", "packages/*", @@ -48,7 +48,7 @@ "@playwright/test": "^1.62.1", "@reactive-resume/config": "workspace:*", "@testing-library/dom": "^10.4.1", - "@testing-library/jest-dom": "^7.0.0", + "@testing-library/jest-dom": "^7.0.1", "@testing-library/react": "^16.3.2", "@testing-library/user-event": "^14.6.3", "@types/node": "^26.2.0", @@ -56,7 +56,7 @@ "@vitest/coverage-v8": "^4.1.10", "github-actionlint": "1.7.12", "happy-dom": "^20.11.2", - "knip": "^6.32.0", + "knip": "^6.32.1", "lefthook": "^2.1.10", "markdownlint-cli2": "0.23.2", "pg": "^8.23.0", diff --git a/packages/api/package.json b/packages/api/package.json index 2a647fede..3c5f5fcb2 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -20,17 +20,17 @@ }, "dependencies": { "@ai-sdk/anthropic": "^4.0.36", - "@ai-sdk/cerebras": "^3.0.27", + "@ai-sdk/cerebras": "^3.0.28", "@ai-sdk/cohere": "^4.0.25", "@ai-sdk/deepseek": "^3.0.26", - "@ai-sdk/fireworks": "^3.0.29", + "@ai-sdk/fireworks": "^3.0.30", "@ai-sdk/google": "^4.0.39", "@ai-sdk/groq": "^4.0.26", "@ai-sdk/mistral": "^4.0.27", "@ai-sdk/openai": "^4.0.36", - "@ai-sdk/openai-compatible": "^3.0.27", + "@ai-sdk/openai-compatible": "^3.0.28", "@ai-sdk/perplexity": "^4.0.27", - "@ai-sdk/togetherai": "^3.0.28", + "@ai-sdk/togetherai": "^3.0.29", "@ai-sdk/xai": "^4.0.33", "@aws-sdk/client-s3": "^3.1106.0", "@orpc/client": "^1.15.0", diff --git a/packages/resume/package.json b/packages/resume/package.json index 084615ed7..56583bd0b 100644 --- a/packages/resume/package.json +++ b/packages/resume/package.json @@ -32,7 +32,7 @@ "@reactive-resume/config": "workspace:*", "@typescript/native-preview": "7.0.0-dev.20260707.2", "fast-check": "^4.9.0", - "tsx": "^4.23.11", + "tsx": "^4.23.12", "typescript": "^7.0.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9ba32faab..b00e25a53 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,8 +37,8 @@ importers: specifier: ^10.4.1 version: 10.4.1 '@testing-library/jest-dom': - specifier: ^7.0.0 - version: 7.0.0(@testing-library/dom@10.4.1) + specifier: ^7.0.1 + version: 7.0.1(@testing-library/dom@10.4.1)(vitest@4.1.10) '@testing-library/react': specifier: ^16.3.2 version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) @@ -61,8 +61,8 @@ importers: specifier: ^20.11.2 version: 20.11.2 knip: - specifier: ^6.32.0 - version: 6.32.0 + specifier: ^6.32.1 + version: 6.32.1 lefthook: specifier: ^2.1.10 version: 2.1.10 @@ -80,7 +80,7 @@ importers: version: 7.0.2 vitest: specifier: ^4.1.10 - version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.2.0)(@vitest/coverage-v8@4.1.10)(happy-dom@20.11.2)(msw@2.14.6(@types/node@26.2.0)(typescript@7.0.2))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.2.0)(@vitest/coverage-v8@4.1.10)(happy-dom@20.11.2)(msw@2.14.6(@types/node@26.2.0)(typescript@7.0.2))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) apps/server: dependencies: @@ -88,8 +88,8 @@ importers: specifier: ^4.0.36 version: 4.0.36(zod@4.4.3) '@ai-sdk/cerebras': - specifier: ^3.0.27 - version: 3.0.27(zod@4.4.3) + specifier: ^3.0.28 + version: 3.0.28(zod@4.4.3) '@ai-sdk/cohere': specifier: ^4.0.25 version: 4.0.25(zod@4.4.3) @@ -97,8 +97,8 @@ importers: specifier: ^3.0.26 version: 3.0.26(zod@4.4.3) '@ai-sdk/fireworks': - specifier: ^3.0.29 - version: 3.0.29(zod@4.4.3) + specifier: ^3.0.30 + version: 3.0.30(zod@4.4.3) '@ai-sdk/google': specifier: ^4.0.39 version: 4.0.39(zod@4.4.3) @@ -112,14 +112,14 @@ importers: specifier: ^4.0.36 version: 4.0.36(zod@4.4.3) '@ai-sdk/openai-compatible': - specifier: ^3.0.27 - version: 3.0.27(zod@4.4.3) + specifier: ^3.0.28 + version: 3.0.28(zod@4.4.3) '@ai-sdk/perplexity': specifier: ^4.0.27 version: 4.0.27(zod@4.4.3) '@ai-sdk/togetherai': - specifier: ^3.0.28 - version: 3.0.28(zod@4.4.3) + specifier: ^3.0.29 + version: 3.0.29(zod@4.4.3) '@ai-sdk/xai': specifier: ^4.0.33 version: 4.0.33(zod@4.4.3) @@ -306,16 +306,16 @@ importers: version: 7.0.0-dev.20260707.2 tsdown: specifier: ^0.22.14 - version: 0.22.14(@typescript/native-preview@7.0.0-dev.20260707.2)(oxc-resolver@11.24.2)(tsx@4.23.11)(typescript@7.0.2) + version: 0.22.14(@typescript/native-preview@7.0.0-dev.20260707.2)(oxc-resolver@11.24.2)(tsx@4.23.12)(typescript@7.0.2) tsx: - specifier: ^4.23.11 - version: 4.23.11 + specifier: ^4.23.12 + version: 4.23.12 typescript: specifier: ^7.0.2 version: 7.0.2 vitest: specifier: ^4.1.10 - version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.2.0)(@vitest/coverage-v8@4.1.10)(happy-dom@20.11.2)(msw@2.14.6(@types/node@26.2.0)(typescript@7.0.2))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.2.0)(@vitest/coverage-v8@4.1.10)(happy-dom@20.11.2)(msw@2.14.6(@types/node@26.2.0)(typescript@7.0.2))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) apps/web: dependencies: @@ -426,7 +426,7 @@ importers: version: link:../../packages/utils '@tailwindcss/vite': specifier: ^4.3.3 - version: 4.3.3(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0)) + version: 4.3.3(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) '@tanstack/react-form': specifier: ^1.33.4 version: 1.33.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8) @@ -437,8 +437,8 @@ importers: specifier: ^5.101.4 version: 5.101.4(react@19.2.8) '@tanstack/react-router': - specifier: ^1.170.24 - version: 1.170.24(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + specifier: ^1.170.25 + version: 1.170.25(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@tiptap/extension-color': specifier: ^3.29.2 version: 3.29.2(@tiptap/extension-text-style@3.29.2(@tiptap/core@3.29.2(@tiptap/pm@3.29.2))) @@ -565,16 +565,16 @@ importers: version: 6.6.0 '@lingui/vite-plugin': specifier: ^6.6.0 - version: 6.6.0(@babel/core@8.0.1)(@lingui/babel-plugin-lingui-macro@6.6.0(@babel/core@8.0.1)(@babel/types@7.29.8))(@rolldown/plugin-babel@0.2.3(@babel/core@8.0.1)(@babel/runtime@7.29.7)(rolldown@1.2.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0)))(babel-plugin-macros@3.1.0)(esbuild@0.28.2)(rolldown@1.2.3)(supports-color@7.2.0)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0)) + version: 6.6.0(@babel/core@8.0.1)(@lingui/babel-plugin-lingui-macro@6.6.0(@babel/core@8.0.1)(@babel/types@7.29.8))(@rolldown/plugin-babel@0.2.3(@babel/core@8.0.1)(@babel/runtime@7.29.7)(rolldown@1.2.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)))(babel-plugin-macros@3.1.0)(esbuild@0.28.2)(rolldown@1.2.3)(supports-color@7.2.0)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) '@reactive-resume/config': specifier: workspace:* version: link:../../packages/config '@rolldown/plugin-babel': specifier: ^0.2.3 - version: 0.2.3(@babel/core@8.0.1)(@babel/runtime@7.29.7)(rolldown@1.2.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0)) + version: 0.2.3(@babel/core@8.0.1)(@babel/runtime@7.29.7)(rolldown@1.2.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) '@tanstack/devtools-vite': specifier: ^0.8.3 - version: 0.8.3(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0)) + version: 0.8.3(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) '@tanstack/react-devtools': specifier: ^0.10.9 version: 0.10.9(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(csstype@3.2.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(solid-js@1.9.14) @@ -583,10 +583,10 @@ importers: version: 5.101.4(@tanstack/react-query@5.101.4(react@19.2.8))(react@19.2.8) '@tanstack/react-router-devtools': specifier: ^1.167.1 - version: 1.167.1(@tanstack/react-router@1.170.24(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@tanstack/router-core@1.171.20)(csstype@3.2.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + version: 1.167.1(@tanstack/react-router@1.170.25(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@tanstack/router-core@1.171.21)(csstype@3.2.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@tanstack/router-plugin': - specifier: ^1.168.28 - version: 1.168.28(@tanstack/react-router@1.170.24(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(esbuild@0.28.2)(rolldown@1.2.3)(supports-color@7.2.0)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0)) + specifier: ^1.168.29 + version: 1.168.29(@tanstack/react-router@1.170.25(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(esbuild@0.28.2)(rolldown@1.2.3)(supports-color@7.2.0)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) '@types/babel__core': specifier: ^7.20.5 version: 7.20.5 @@ -604,7 +604,7 @@ importers: version: 7.0.0-dev.20260707.2 '@vitejs/plugin-react': specifier: ^6.0.5 - version: 6.0.5(@rolldown/plugin-babel@0.2.3(@babel/core@8.0.1)(@babel/runtime@7.29.7)(rolldown@1.2.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0)))(babel-plugin-react-compiler@1.0.0)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0)) + version: 6.0.5(@rolldown/plugin-babel@0.2.3(@babel/core@8.0.1)(@babel/runtime@7.29.7)(rolldown@1.2.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)))(babel-plugin-react-compiler@1.0.0)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) babel-plugin-macros: specifier: ^3.1.0 version: 3.1.0 @@ -619,7 +619,7 @@ importers: version: 7.0.2 vite: specifier: ^8.2.1 - version: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0) + version: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0) packages/ai: dependencies: @@ -658,8 +658,8 @@ importers: specifier: ^4.0.36 version: 4.0.36(zod@4.4.3) '@ai-sdk/cerebras': - specifier: ^3.0.27 - version: 3.0.27(zod@4.4.3) + specifier: ^3.0.28 + version: 3.0.28(zod@4.4.3) '@ai-sdk/cohere': specifier: ^4.0.25 version: 4.0.25(zod@4.4.3) @@ -667,8 +667,8 @@ importers: specifier: ^3.0.26 version: 3.0.26(zod@4.4.3) '@ai-sdk/fireworks': - specifier: ^3.0.29 - version: 3.0.29(zod@4.4.3) + specifier: ^3.0.30 + version: 3.0.30(zod@4.4.3) '@ai-sdk/google': specifier: ^4.0.39 version: 4.0.39(zod@4.4.3) @@ -682,14 +682,14 @@ importers: specifier: ^4.0.36 version: 4.0.36(zod@4.4.3) '@ai-sdk/openai-compatible': - specifier: ^3.0.27 - version: 3.0.27(zod@4.4.3) + specifier: ^3.0.28 + version: 3.0.28(zod@4.4.3) '@ai-sdk/perplexity': specifier: ^4.0.27 version: 4.0.27(zod@4.4.3) '@ai-sdk/togetherai': - specifier: ^3.0.28 - version: 3.0.28(zod@4.4.3) + specifier: ^3.0.29 + version: 3.0.29(zod@4.4.3) '@ai-sdk/xai': specifier: ^4.0.33 version: 4.0.33(zod@4.4.3) @@ -1036,7 +1036,7 @@ importers: version: 7.0.2 vitest: specifier: ^4.1.10 - version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.2.0)(@vitest/coverage-v8@4.1.10)(happy-dom@20.11.2)(msw@2.14.6(@types/node@26.2.0)(typescript@7.0.2))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.2.0)(@vitest/coverage-v8@4.1.10)(happy-dom@20.11.2)(msw@2.14.6(@types/node@26.2.0)(typescript@7.0.2))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) packages/pdf: dependencies: @@ -1127,8 +1127,8 @@ importers: specifier: ^4.9.0 version: 4.9.0 tsx: - specifier: ^4.23.11 - version: 4.23.11 + specifier: ^4.23.12 + version: 4.23.12 typescript: specifier: ^7.0.2 version: 7.0.2 @@ -1290,11 +1290,11 @@ importers: specifier: ^8.23.0 version: 8.23.0 tsx: - specifier: ^4.23.11 - version: 4.23.11 + specifier: ^4.23.12 + version: 4.23.12 vitest: specifier: ^4.1.10 - version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.2.0)(@vitest/coverage-v8@4.1.10)(happy-dom@20.11.2)(msw@2.14.6(@types/node@26.2.0)(typescript@7.0.2))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.2.0)(@vitest/coverage-v8@4.1.10)(happy-dom@20.11.2)(msw@2.14.6(@types/node@26.2.0)(typescript@7.0.2))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) packages: @@ -1307,8 +1307,8 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/cerebras@3.0.27': - resolution: {integrity: sha512-DogkySI8n+x7nHaNgNGFH6GmCvOQLx2Tzfvr+EkJPT0bPN5z4eKdwFue3AOzRhZx0lU4bcIVBtPO5qYHBlZnhQ==} + '@ai-sdk/cerebras@3.0.28': + resolution: {integrity: sha512-tjRovnoOBCjG3q4OoOVhZgmj3R6/4MeiNksU9bluWkDRKgtk6iTzHqIUcJFJoTp2Z58Xjdfb/nMgg2yobdOdkQ==} engines: {node: '>=22'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -1325,8 +1325,8 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/fireworks@3.0.29': - resolution: {integrity: sha512-2pZgi/iS0Oqgo73VXG1wOXiJo2XOFpBqp8nXlJgdNQx0ZeI5BAkpJWrrR+9vVqRIgv50GHFnc+qvN2IbuYiVnA==} + '@ai-sdk/fireworks@3.0.30': + resolution: {integrity: sha512-hLv8LSAvbiS4GgJawUMW6juetNNMtCu87RTaqZRkbk7fR5MjosZU2owYI5tHltzYt5CJLQ/ZAKd777oQdGnS2g==} engines: {node: '>=22'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -1361,8 +1361,8 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/openai-compatible@3.0.27': - resolution: {integrity: sha512-icGSoBDbFKZotUwehg7h/JjtD7arweeKfeDcsT9UsPY+YdwiT94JciD59bqAOAdNA3wlS+klW2vsaVLxTUUhbA==} + '@ai-sdk/openai-compatible@3.0.28': + resolution: {integrity: sha512-vF/852mCFiASq2fAPE1mA0E0w78NH68/X2Gukuh4TeJrMIp+CJfoR5QLuY2+pTx7UiLmuYWDpCQhWaupuM7+Xg==} engines: {node: '>=22'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -1395,8 +1395,8 @@ packages: peerDependencies: react: ^18 || ~19.0.1 || ~19.1.2 || ^19.2.1 - '@ai-sdk/togetherai@3.0.28': - resolution: {integrity: sha512-VP0d4Z58eKnjQxK+wwbj3B59ISdBApoox+3flqdpZAS/kPIenKPbToLqpxxazDx1ex8o5g+Dlvjt7Ib6Ieo8Dw==} + '@ai-sdk/togetherai@3.0.29': + resolution: {integrity: sha512-xmbjtJu52IwfIztYwW0QI8NDPu9H88n2zyFPjtqbTr3RCv3C6oO+wWssD+48TjlqaDLIrEMmSiBHt6lAjoTVuw==} engines: {node: '>=22'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -4109,8 +4109,8 @@ packages: '@tanstack/router-core': optional: true - '@tanstack/react-router@1.170.24': - resolution: {integrity: sha512-gCeAtUAepQa1sncLUk6BxfH0oeGmHOHkx1ZsQeLnyZFNhRm19YIr3HfNQ7BFOLXpD8IeFm2o76WM6rCjyAQkyQ==} + '@tanstack/react-router@1.170.25': + resolution: {integrity: sha512-XiWYvkLAGhcZHhV2xUvicpF/VfTVSnewP6CqviDONAjmD50tBob5x/93u2W8QZAc/JgkPd+jijCmu6t4NCzmew==} engines: {node: '>=20.19'} peerDependencies: react: '>=18.0.0 || >=19.0.0' @@ -4128,8 +4128,8 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/router-core@1.171.20': - resolution: {integrity: sha512-zkqjM/AuC8ps6bKPlxp3jbSE8ZBeTRuqFg+mYPXzp+5lYiZBd1ppY/c5yM8y/SIxOGvKQjn3K+AmA/PDh2XzZg==} + '@tanstack/router-core@1.171.21': + resolution: {integrity: sha512-t6xUHBO94nQDrPHPh6ag5UuKHWIkVjq9s63q2ctbxgzq3vtSoGKmAIdLD5o+NU6JUS1ppXRHgL0YGzEHvH32Ng==} engines: {node: '>=20.19'} '@tanstack/router-devtools-core@1.168.1': @@ -4142,16 +4142,16 @@ packages: csstype: optional: true - '@tanstack/router-generator@1.167.26': - resolution: {integrity: sha512-zanvGiOGPt3AOsUyBwfgPY/UV3wBuSFQOS/v8plE/KUKcZu8mztqqNevWcRUntDWul9WGEZ3SMIIuUehR6/ZKQ==} + '@tanstack/router-generator@1.167.27': + resolution: {integrity: sha512-bfV44Nyy7XeSCCuvQWGc3qudqXfOqAwKiWXNymAuK+hy24vs3E75Aw1zMz97ajHXMjxm4nFVVjEnwZ/cDR74ug==} engines: {node: '>=20.19'} - '@tanstack/router-plugin@1.168.28': - resolution: {integrity: sha512-4Tx5QHud3TbXa55E/6vqPc+7ymMHagzbA4LW7L+sQXEOaUkiP21iP9RIZIW04vX8LmY85OjbsBYHt09onkNgnQ==} + '@tanstack/router-plugin@1.168.29': + resolution: {integrity: sha512-h1ZbnIvbAKIFeQ6JBRJ/xBP17tBdwjwzPBKVKUdVNYiob07SkrQLhqz+s41WtbNmHey5kQWN3HqP16Vl062bqg==} engines: {node: '>=20.19'} peerDependencies: '@rsbuild/core': '>=1.0.2 || ^2.0.0' - '@tanstack/react-router': ^1.170.24 + '@tanstack/react-router': ^1.170.25 vite: '>=5.0.0 || >=6.0.0 || >=7.0.0 || >=8.0.0' vite-plugin-solid: ^2.11.10 || ^3.0.0-0 webpack: '>=5.92.0' @@ -4185,11 +4185,15 @@ packages: resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} engines: {node: '>=18'} - '@testing-library/jest-dom@7.0.0': - resolution: {integrity: sha512-HKAH9C6mBo5yBG6yRO5i43L2iisencAo5z+o5P/saHUoY+miC5ivXRxHBJcFyB5ypPNxHJdK3BoF/3O4DIptMg==} + '@testing-library/jest-dom@7.0.1': + resolution: {integrity: sha512-oMDTC3oA+6CXSO2JZnvOI7CA6oVub6kij5ggk9ohwye5slmkwxYDXcPOVxgMw/RQlticjtO0C1RZkR97HgrWMw==} engines: {node: '>=22', npm: '>=6', yarn: '>=1'} peerDependencies: '@testing-library/dom': '>=10 <11' + vitest: '>= 0.32' + peerDependenciesMeta: + vitest: + optional: true '@testing-library/react@16.3.2': resolution: {integrity: sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==} @@ -6497,8 +6501,8 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - knip@6.32.0: - resolution: {integrity: sha512-KDX9OmmOFmlvmxTkrx6Z0GHISMut+pXMSKR8eg84bovaxJKx2NdQD4JYCXveSbvieRe107W6vCD2xCpmz0qBYA==} + knip@6.32.1: + resolution: {integrity: sha512-mIiIHMTJVUgSlz0mxEgPt7wg8DmfbCp1Txqab3WpbMCJF7YHvHtC9jeAHHXfISMl72N8WzhyG71SQlaqCOGZtg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -8239,8 +8243,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.23.11: - resolution: {integrity: sha512-Ry2oTEUnhBdeEdWIztY8kf3/nBGnPnjMLVGL0YfdRXMORuPER5NlKmayqxtxRxwB1xBN+RivRaJfe7PM1rtiyw==} + tsx@4.23.12: + resolution: {integrity: sha512-FDf4L4sYzKtzWYhU/Xm0AQFdTjdIxNo9ElTf2mxXM6k8YMHXzYUe4yODVaXP4V9uMFbVg8c0qyBccK2OOxb45Q==} engines: {node: '>=18.0.0'} hasBin: true @@ -8697,9 +8701,9 @@ snapshots: '@ai-sdk/provider-utils': 5.0.25(zod@4.4.3) zod: 4.4.3 - '@ai-sdk/cerebras@3.0.27(zod@4.4.3)': + '@ai-sdk/cerebras@3.0.28(zod@4.4.3)': dependencies: - '@ai-sdk/openai-compatible': 3.0.27(zod@4.4.3) + '@ai-sdk/openai-compatible': 3.0.28(zod@4.4.3) '@ai-sdk/provider': 4.0.7 '@ai-sdk/provider-utils': 5.0.25(zod@4.4.3) zod: 4.4.3 @@ -8716,9 +8720,9 @@ snapshots: '@ai-sdk/provider-utils': 5.0.25(zod@4.4.3) zod: 4.4.3 - '@ai-sdk/fireworks@3.0.29(zod@4.4.3)': + '@ai-sdk/fireworks@3.0.30(zod@4.4.3)': dependencies: - '@ai-sdk/openai-compatible': 3.0.27(zod@4.4.3) + '@ai-sdk/openai-compatible': 3.0.28(zod@4.4.3) '@ai-sdk/provider': 4.0.7 '@ai-sdk/provider-utils': 5.0.25(zod@4.4.3) zod: 4.4.3 @@ -8755,7 +8759,7 @@ snapshots: '@ai-sdk/provider-utils': 5.0.25(zod@4.4.3) zod: 4.4.3 - '@ai-sdk/openai-compatible@3.0.27(zod@4.4.3)': + '@ai-sdk/openai-compatible@3.0.28(zod@4.4.3)': dependencies: '@ai-sdk/provider': 4.0.7 '@ai-sdk/provider-utils': 5.0.25(zod@4.4.3) @@ -8798,9 +8802,9 @@ snapshots: transitivePeerDependencies: - zod - '@ai-sdk/togetherai@3.0.28(zod@4.4.3)': + '@ai-sdk/togetherai@3.0.29(zod@4.4.3)': dependencies: - '@ai-sdk/openai-compatible': 3.0.27(zod@4.4.3) + '@ai-sdk/openai-compatible': 3.0.28(zod@4.4.3) '@ai-sdk/provider': 4.0.7 '@ai-sdk/provider-utils': 5.0.25(zod@4.4.3) zod: 4.4.3 @@ -10152,15 +10156,15 @@ snapshots: - '@babel/core' - '@babel/types' - '@lingui/vite-plugin@6.6.0(@babel/core@8.0.1)(@lingui/babel-plugin-lingui-macro@6.6.0(@babel/core@8.0.1)(@babel/types@7.29.8))(@rolldown/plugin-babel@0.2.3(@babel/core@8.0.1)(@babel/runtime@7.29.7)(rolldown@1.2.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0)))(babel-plugin-macros@3.1.0)(esbuild@0.28.2)(rolldown@1.2.3)(supports-color@7.2.0)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0))': + '@lingui/vite-plugin@6.6.0(@babel/core@8.0.1)(@lingui/babel-plugin-lingui-macro@6.6.0(@babel/core@8.0.1)(@babel/types@7.29.8))(@rolldown/plugin-babel@0.2.3(@babel/core@8.0.1)(@babel/runtime@7.29.7)(rolldown@1.2.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)))(babel-plugin-macros@3.1.0)(esbuild@0.28.2)(rolldown@1.2.3)(supports-color@7.2.0)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0))': dependencies: '@lingui/cli': 6.6.0(babel-plugin-macros@3.1.0)(esbuild@0.28.2)(rolldown@1.2.3)(supports-color@7.2.0) '@lingui/conf': 6.6.0 - vite: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0) + vite: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0) optionalDependencies: '@babel/core': 8.0.1 '@lingui/babel-plugin-lingui-macro': 6.6.0(@babel/core@8.0.1)(@babel/types@7.29.8) - '@rolldown/plugin-babel': 0.2.3(@babel/core@8.0.1)(@babel/runtime@7.29.7)(rolldown@1.2.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0)) + '@rolldown/plugin-babel': 0.2.3(@babel/core@8.0.1)(@babel/runtime@7.29.7)(rolldown@1.2.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) rolldown: 1.2.3 transitivePeerDependencies: - babel-plugin-macros @@ -11141,14 +11145,14 @@ snapshots: '@rolldown/binding-win32-x64-msvc@1.2.3': optional: true - '@rolldown/plugin-babel@0.2.3(@babel/core@8.0.1)(@babel/runtime@7.29.7)(rolldown@1.2.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0))': + '@rolldown/plugin-babel@0.2.3(@babel/core@8.0.1)(@babel/runtime@7.29.7)(rolldown@1.2.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0))': dependencies: '@babel/core': 8.0.1 picomatch: 4.0.5 rolldown: 1.2.3 optionalDependencies: '@babel/runtime': 7.29.7 - vite: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0) + vite: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0) '@rolldown/pluginutils@1.0.1': {} @@ -11352,12 +11356,12 @@ snapshots: postcss-selector-parser: 6.0.10 tailwindcss: 4.3.3 - '@tailwindcss/vite@4.3.3(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0))': + '@tailwindcss/vite@4.3.3(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0))': dependencies: '@tailwindcss/node': 4.3.3 '@tailwindcss/oxide': 4.3.3 tailwindcss: 4.3.3 - vite: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0) + vite: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0) '@tanstack/devtools-bundler-core@0.1.1(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)': dependencies: @@ -11398,13 +11402,13 @@ snapshots: transitivePeerDependencies: - csstype - '@tanstack/devtools-vite@0.8.3(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0))': + '@tanstack/devtools-vite@0.8.3(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0))': dependencies: '@tanstack/devtools-bundler-core': 0.1.1(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3) '@tanstack/devtools-client': 0.0.8 '@tanstack/devtools-event-bus': 0.4.2 chalk: 5.6.2 - vite: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0) + vite: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -11484,22 +11488,22 @@ snapshots: '@tanstack/query-core': 5.101.4 react: 19.2.8 - '@tanstack/react-router-devtools@1.167.1(@tanstack/react-router@1.170.24(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@tanstack/router-core@1.171.20)(csstype@3.2.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@tanstack/react-router-devtools@1.167.1(@tanstack/react-router@1.170.25(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@tanstack/router-core@1.171.21)(csstype@3.2.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: - '@tanstack/react-router': 1.170.24(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@tanstack/router-devtools-core': 1.168.1(@tanstack/router-core@1.171.20)(csstype@3.2.3) + '@tanstack/react-router': 1.170.25(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@tanstack/router-devtools-core': 1.168.1(@tanstack/router-core@1.171.21)(csstype@3.2.3) react: 19.2.8 react-dom: 19.2.8(react@19.2.8) optionalDependencies: - '@tanstack/router-core': 1.171.20 + '@tanstack/router-core': 1.171.21 transitivePeerDependencies: - csstype - '@tanstack/react-router@1.170.24(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@tanstack/react-router@1.170.25(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@tanstack/history': 1.162.1 '@tanstack/react-store': 0.9.3(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@tanstack/router-core': 1.171.20 + '@tanstack/router-core': 1.171.21 isbot: 5.2.1 react: 19.2.8 react-dom: 19.2.8(react@19.2.8) @@ -11518,25 +11522,25 @@ snapshots: react-dom: 19.2.8(react@19.2.8) use-sync-external-store: 1.6.0(react@19.2.8) - '@tanstack/router-core@1.171.20': + '@tanstack/router-core@1.171.21': dependencies: '@tanstack/history': 1.162.1 cookie-es: 3.1.1 seroval: 1.6.2 seroval-plugins: 1.6.2(seroval@1.6.2) - '@tanstack/router-devtools-core@1.168.1(@tanstack/router-core@1.171.20)(csstype@3.2.3)': + '@tanstack/router-devtools-core@1.168.1(@tanstack/router-core@1.171.21)(csstype@3.2.3)': dependencies: - '@tanstack/router-core': 1.171.20 + '@tanstack/router-core': 1.171.21 clsx: 2.1.1 goober: 2.1.19(csstype@3.2.3) optionalDependencies: csstype: 3.2.3 - '@tanstack/router-generator@1.167.26(supports-color@7.2.0)': + '@tanstack/router-generator@1.167.27(supports-color@7.2.0)': dependencies: '@babel/types': 7.29.8 - '@tanstack/router-core': 1.171.20 + '@tanstack/router-core': 1.171.21 '@tanstack/router-utils': 1.162.2(supports-color@7.2.0) '@tanstack/virtual-file-routes': 1.162.0 jiti: 2.7.0 @@ -11546,20 +11550,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.168.28(@tanstack/react-router@1.170.24(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(esbuild@0.28.2)(rolldown@1.2.3)(supports-color@7.2.0)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0))': + '@tanstack/router-plugin@1.168.29(@tanstack/react-router@1.170.25(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(esbuild@0.28.2)(rolldown@1.2.3)(supports-color@7.2.0)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0))': dependencies: '@babel/core': 7.29.7(supports-color@7.2.0) '@babel/template': 7.29.7 '@babel/types': 7.29.8 - '@tanstack/router-core': 1.171.20 - '@tanstack/router-generator': 1.167.26(supports-color@7.2.0) + '@tanstack/router-core': 1.171.21 + '@tanstack/router-generator': 1.167.27(supports-color@7.2.0) '@tanstack/router-utils': 1.162.2(supports-color@7.2.0) chokidar: 5.0.0 - unplugin: 3.3.0(esbuild@0.28.2)(rolldown@1.2.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0)) + unplugin: 3.3.0(esbuild@0.28.2)(rolldown@1.2.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) zod: 4.4.3 optionalDependencies: - '@tanstack/react-router': 1.170.24(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - vite: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0) + '@tanstack/react-router': 1.170.25(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + vite: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0) transitivePeerDependencies: - '@farmfe/core' - '@rspack/core' @@ -11600,7 +11604,7 @@ snapshots: picocolors: 1.1.1 pretty-format: 27.5.1 - '@testing-library/jest-dom@7.0.0(@testing-library/dom@10.4.1)': + '@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@4.1.10)': dependencies: '@adobe/css-tools': 4.5.0 '@testing-library/dom': 10.4.1 @@ -11609,6 +11613,8 @@ snapshots: dom-accessibility-api: 0.6.3 picocolors: 1.1.1 redent: 3.0.0 + optionalDependencies: + vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.2.0)(@vitest/coverage-v8@4.1.10)(happy-dom@20.11.2)(msw@2.14.6(@types/node@26.2.0)(typescript@7.0.2))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: @@ -12113,12 +12119,12 @@ snapshots: '@vercel/oidc@3.2.0': {} - '@vitejs/plugin-react@6.0.5(@rolldown/plugin-babel@0.2.3(@babel/core@8.0.1)(@babel/runtime@7.29.7)(rolldown@1.2.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0)))(babel-plugin-react-compiler@1.0.0)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0))': + '@vitejs/plugin-react@6.0.5(@rolldown/plugin-babel@0.2.3(@babel/core@8.0.1)(@babel/runtime@7.29.7)(rolldown@1.2.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)))(babel-plugin-react-compiler@1.0.0)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0))': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0) + vite: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0) optionalDependencies: - '@rolldown/plugin-babel': 0.2.3(@babel/core@8.0.1)(@babel/runtime@7.29.7)(rolldown@1.2.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0)) + '@rolldown/plugin-babel': 0.2.3(@babel/core@8.0.1)(@babel/runtime@7.29.7)(rolldown@1.2.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) babel-plugin-react-compiler: 1.0.0 '@vitest/coverage-v8@4.1.10(vitest@4.1.10)': @@ -12133,7 +12139,7 @@ snapshots: obug: 2.1.4 std-env: 4.2.0 tinyrainbow: 3.1.1 - vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.2.0)(@vitest/coverage-v8@4.1.10)(happy-dom@20.11.2)(msw@2.14.6(@types/node@26.2.0)(typescript@7.0.2))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0)) + vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.2.0)(@vitest/coverage-v8@4.1.10)(happy-dom@20.11.2)(msw@2.14.6(@types/node@26.2.0)(typescript@7.0.2))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) '@vitest/expect@4.1.10': dependencies: @@ -12144,14 +12150,14 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.1 - '@vitest/mocker@4.1.10(msw@2.14.6(@types/node@26.2.0)(typescript@7.0.2))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0))': + '@vitest/mocker@4.1.10(msw@2.14.6(@types/node@26.2.0)(typescript@7.0.2))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.10 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: msw: 2.14.6(@types/node@26.2.0)(typescript@7.0.2) - vite: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0) + vite: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0) '@vitest/pretty-format@4.1.10': dependencies: @@ -12406,7 +12412,7 @@ snapshots: react: 19.2.8 react-dom: 19.2.8(react@19.2.8) solid-js: 1.9.14 - vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.2.0)(@vitest/coverage-v8@4.1.10)(happy-dom@20.11.2)(msw@2.14.6(@types/node@26.2.0)(typescript@7.0.2))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0)) + vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.2.0)(@vitest/coverage-v8@4.1.10)(happy-dom@20.11.2)(msw@2.14.6(@types/node@26.2.0)(typescript@7.0.2))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) transitivePeerDependencies: - '@cloudflare/workers-types' - '@opentelemetry/api' @@ -13614,7 +13620,7 @@ snapshots: kleur@4.1.5: {} - knip@6.32.0: + knip@6.32.1: dependencies: fdir: 6.5.0(picomatch@4.0.5) formatly: 0.3.0 @@ -15650,7 +15656,7 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tsdown@0.22.14(@typescript/native-preview@7.0.0-dev.20260707.2)(oxc-resolver@11.24.2)(tsx@4.23.11)(typescript@7.0.2): + tsdown@0.22.14(@typescript/native-preview@7.0.0-dev.20260707.2)(oxc-resolver@11.24.2)(tsx@4.23.12)(typescript@7.0.2): dependencies: ansis: 4.3.1 cac: 7.0.0 @@ -15668,7 +15674,7 @@ snapshots: unconfig-core: 7.5.0 verkit: 0.3.2 optionalDependencies: - tsx: 4.23.11 + tsx: 4.23.12 typescript: 7.0.2 transitivePeerDependencies: - '@typescript/native-preview' @@ -15680,7 +15686,7 @@ snapshots: tslib@2.8.1: {} - tsx@4.23.11: + tsx@4.23.12: dependencies: esbuild: 0.28.2 optionalDependencies: @@ -15808,7 +15814,7 @@ snapshots: unpipe@1.0.0: {} - unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0)): + unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)): dependencies: '@jridgewell/remapping': 2.3.5 picomatch: 4.0.5 @@ -15816,7 +15822,7 @@ snapshots: optionalDependencies: esbuild: 0.28.2 rolldown: 1.2.3 - vite: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0) + vite: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0) until-async@3.0.2: optional: true @@ -15877,7 +15883,7 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0): + vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0): dependencies: lightningcss: 1.33.0 picomatch: 4.0.5 @@ -15889,13 +15895,13 @@ snapshots: esbuild: 0.28.2 fsevents: 2.3.3 jiti: 2.7.0 - tsx: 4.23.11 + tsx: 4.23.12 yaml: 2.9.0 - vitest@4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.2.0)(@vitest/coverage-v8@4.1.10)(happy-dom@20.11.2)(msw@2.14.6(@types/node@26.2.0)(typescript@7.0.2))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0)): + vitest@4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.2.0)(@vitest/coverage-v8@4.1.10)(happy-dom@20.11.2)(msw@2.14.6(@types/node@26.2.0)(typescript@7.0.2))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.10 - '@vitest/mocker': 4.1.10(msw@2.14.6(@types/node@26.2.0)(typescript@7.0.2))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0)) + '@vitest/mocker': 4.1.10(msw@2.14.6(@types/node@26.2.0)(typescript@7.0.2))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.10 '@vitest/runner': 4.1.10 '@vitest/snapshot': 4.1.10 @@ -15912,7 +15918,7 @@ snapshots: tinyexec: 1.3.0 tinyglobby: 0.2.17 tinyrainbow: 3.1.1 - vite: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.11)(yaml@2.9.0) + vite: 8.2.1(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.1 diff --git a/tooling/package.json b/tooling/package.json index d9a8e15b0..17d068919 100644 --- a/tooling/package.json +++ b/tooling/package.json @@ -22,7 +22,7 @@ "@typescript/native-preview": "7.0.0-dev.20260707.2", "drizzle-orm": "1.0.0-rc.4", "pg": "^8.23.0", - "tsx": "^4.23.11", + "tsx": "^4.23.12", "vitest": "^4.1.10" } }