fix(web): show static template previews in gallery (#3302)

This commit is contained in:
Amruth Pillai
2026-08-10 12:18:47 +02:00
committed by GitHub
parent efd950bd93
commit 035d94183b
9 changed files with 141 additions and 255 deletions
+5 -5
View File
@@ -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"
}
+2 -2
View File
@@ -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",
@@ -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]) => (
<TemplateCard
key={template}
data={resume.data}
metadata={metadata}
id={template as Template}
isActive={template === selectedTemplate}
@@ -91,13 +80,12 @@ export function TemplateGalleryDialog(_: DialogProps<"resume.template.gallery">)
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 (
<CometCard translateDepth={3} rotateDepth={6} glareOpacity={0}>
<button
@@ -109,9 +97,7 @@ function TemplateCard({ id, data, metadata, isActive, onSelect }: TemplateCardPr
isActive && "ring-2 ring-ring ring-offset-4 ring-offset-background",
)}
>
<Suspense fallback={<img src={metadata.imageUrl} alt={metadata.name} className="size-full object-cover" />}>
<TemplateLivePreview data={data} template={id} fallbackSrc={metadata.imageUrl} alt={metadata.name} />
</Suspense>
<img src={metadata.imageUrl} alt={metadata.name} className="size-full object-cover" />
</button>
<div className="mt-1 flex items-center justify-center">
@@ -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<void> = 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<string | null>(() => 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 (
<div className={cn("relative aspect-page w-full overflow-hidden rounded-md bg-white", className)}>
<img src={imageUrl ?? fallbackSrc} alt={alt} className="size-full object-contain" />
{isLoading ? (
<div className="absolute inset-0 flex items-center justify-center bg-white/40">
<Spinner className="size-8" />
</div>
) : null}
</div>
);
}
+3 -3
View File
@@ -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",
+4 -4
View File
@@ -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",
+1 -1
View File
@@ -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"
}
}
+123 -117
View File
@@ -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
+1 -1
View File
@@ -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"
}
}