diff --git a/app/admin/uploads/[uploadPath]/page.tsx b/app/admin/uploads/[uploadPath]/page.tsx
index 82614a73..34b37a1e 100644
--- a/app/admin/uploads/[uploadPath]/page.tsx
+++ b/app/admin/uploads/[uploadPath]/page.tsx
@@ -8,7 +8,6 @@ import {
} from '@/photo/cache';
import UploadPageClient from '@/photo/UploadPageClient';
import {
- AI_TEXT_AUTO_GENERATED_FIELDS,
AI_CONTENT_GENERATION_ENABLED,
BLUR_ENABLED,
} from '@/app/config';
@@ -16,6 +15,7 @@ import ErrorNote from '@/components/ErrorNote';
import { getRecipeTitleForData } from '@/photo/query';
import { getAlbumsWithMeta } from '@/album/query';
import { addAiTextToFormData } from '@/photo/ai/server';
+import AppGrid from '@/components/AppGrid';
export const maxDuration = 60;
@@ -28,17 +28,27 @@ export default async function UploadPage({ params, searchParams }: Params) {
const uploadPath = (await params).uploadPath;
const title = (await searchParams)[PARAM_UPLOAD_TITLE];
- const {
- blobId,
- formDataFromExif: _formDataFromExif,
- imageResizedBase64: imageThumbnailBase64,
- shouldStripGpsData,
- error,
- } = await extractImageDataFromBlobPath(uploadPath, {
- includeInitialPhotoFields: true,
- generateBlurData: BLUR_ENABLED,
- generateResizedImage: AI_CONTENT_GENERATION_ENABLED,
- });
+ const [
+ albums,
+ uniqueRecipes,
+ uniqueFilms,
+ uniqueTags, {
+ blobId,
+ formDataFromExif: _formDataFromExif,
+ imageResizedBase64: imageThumbnailBase64,
+ shouldStripGpsData,
+ error,
+ }] = await Promise.all([
+ getAlbumsWithMeta(),
+ getUniqueRecipesCached(),
+ getUniqueFilmsCached(),
+ getUniqueTagsCached(),
+ extractImageDataFromBlobPath(uploadPath, {
+ includeInitialPhotoFields: true,
+ generateBlurData: BLUR_ENABLED,
+ generateResizedImage: AI_CONTENT_GENERATION_ENABLED,
+ }),
+ ]);
const isDataMissing =
!_formDataFromExif ||
@@ -50,31 +60,23 @@ export default async function UploadPage({ params, searchParams }: Params) {
}
const [
- albums,
- uniqueTags,
- uniqueRecipes,
- uniqueFilms,
recipeTitle,
formDataFromExif,
] = await Promise.all([
- getAlbumsWithMeta(),
- getUniqueTagsCached(),
- getUniqueRecipesCached(),
- getUniqueFilmsCached(),
_formDataFromExif?.recipeData && _formDataFromExif.film
? getRecipeTitleForData(
- _formDataFromExif.recipeData,
+ _formDataFromExif.recipeData,
_formDataFromExif.film,
)
: undefined,
- addAiTextToFormData(
- _formDataFromExif,
- imageThumbnailBase64,
- ),
+ addAiTextToFormData({
+ formData: _formDataFromExif,
+ imageBase64: imageThumbnailBase64,
+ uniqueTags,
+ }),
]);
const hasAiTextGeneration = AI_CONTENT_GENERATION_ENABLED;
- let textFieldsToAutoGenerate = AI_TEXT_AUTO_GENERATED_FIELDS;
if (formDataFromExif) {
if (recipeTitle) {
@@ -82,8 +84,6 @@ export default async function UploadPage({ params, searchParams }: Params) {
}
if (typeof title === 'string') {
formDataFromExif.title = title;
- textFieldsToAutoGenerate = textFieldsToAutoGenerate
- .filter(field => field !== 'title');
}
}
@@ -97,12 +97,13 @@ export default async function UploadPage({ params, searchParams }: Params) {
uniqueRecipes,
uniqueFilms,
hasAiTextGeneration,
- textFieldsToAutoGenerate,
imageThumbnailBase64,
shouldStripGpsData,
}} />
- :
- {error ?? 'Unknown error'}
-
+ :
+ {error ?? 'Unknown error'}
+
+ }/>
);
};
diff --git a/package.json b/package.json
index e10d99a2..e57d7d27 100644
--- a/package.json
+++ b/package.json
@@ -8,12 +8,12 @@
"test": "jest --watch --transformIgnorePatterns 'node_modules/(?!my-library-dir)/'",
"analyze": "ANALYZE=true next build"
},
- "packageManager": "pnpm@10.17.0",
+ "packageManager": "pnpm@10.17.1",
"dependencies": {
- "@ai-sdk/openai": "^2.0.32",
- "@ai-sdk/rsc": "^1.0.48",
- "@aws-sdk/client-s3": "3.893.0",
- "@aws-sdk/s3-request-presigner": "3.893.0",
+ "@ai-sdk/openai": "^2.0.38",
+ "@ai-sdk/rsc": "^1.0.56",
+ "@aws-sdk/client-s3": "3.896.0",
+ "@aws-sdk/s3-request-presigner": "3.896.0",
"@radix-ui/react-dialog": "^1.1.15",
"@radix-ui/react-dropdown-menu": "^2.1.16",
"@radix-ui/react-tooltip": "^1.2.8",
@@ -24,7 +24,7 @@
"@vercel/analytics": "^1.5.0",
"@vercel/blob": "^2.0.0",
"@vercel/speed-insights": "^1.2.0",
- "ai": "^5.0.48",
+ "ai": "^5.0.56",
"camelcase-keys": "^10.0.0",
"clsx": "^2.1.1",
"cmdk": "^1.1.1",
@@ -35,9 +35,9 @@
"extract-colors": "^4.2.1",
"fast-average-color": "^9.5.0",
"fast-deep-equal": "^3.1.3",
- "framer-motion": "^12.23.16",
- "nanoid": "^5.1.5",
- "next": "15.5.3",
+ "framer-motion": "^12.23.22",
+ "nanoid": "^5.1.6",
+ "next": "15.5.4",
"next-auth": "5.0.0-beta.29",
"next-themes": "^0.4.6",
"pg": "^8.16.3",
@@ -51,12 +51,13 @@
"swr": "^2.3.6",
"ts-exif-parser": "^0.2.2",
"use-debounce": "^10.0.6",
- "viewerjs": "^1.11.7"
+ "viewerjs": "^1.11.7",
+ "zod": "^4.1.11"
},
"devDependencies": {
"@eslint/eslintrc": "^3.3.1",
- "@next/bundle-analyzer": "15.5.3",
- "@next/eslint-plugin-next": "^15.5.3",
+ "@next/bundle-analyzer": "15.5.4",
+ "@next/eslint-plugin-next": "^15.5.4",
"@stylistic/eslint-plugin": "^5.4.0",
"@tailwindcss/postcss": "^4.1.13",
"@testing-library/dom": "^10.4.1",
@@ -66,12 +67,12 @@
"@types/jest": "^30.0.0",
"@types/node": "^24.5.2",
"@types/pg": "^8.15.5",
- "@types/react": "19.1.13",
+ "@types/react": "19.1.14",
"@types/react-dom": "19.1.9",
"@types/sanitize-html": "^2.16.0",
"cross-fetch": "^4.1.0",
"eslint": "9.36.0",
- "eslint-config-next": "15.5.3",
+ "eslint-config-next": "15.5.4",
"eslint-plugin-react-hooks": "^5.2.0",
"jest": "^30.1.3",
"jest-environment-jsdom": "^30.1.2",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 5801c48b..23ee601c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -9,29 +9,29 @@ importers:
.:
dependencies:
'@ai-sdk/openai':
- specifier: ^2.0.32
- version: 2.0.32(zod@4.1.8)
+ specifier: ^2.0.38
+ version: 2.0.38(zod@4.1.11)
'@ai-sdk/rsc':
- specifier: ^1.0.48
- version: 1.0.48(react@19.1.1)(zod@4.1.8)
+ specifier: ^1.0.56
+ version: 1.0.56(react@19.1.1)(zod@4.1.11)
'@aws-sdk/client-s3':
- specifier: 3.893.0
- version: 3.893.0
+ specifier: 3.896.0
+ version: 3.896.0
'@aws-sdk/s3-request-presigner':
- specifier: 3.893.0
- version: 3.893.0
+ specifier: 3.896.0
+ version: 3.896.0
'@radix-ui/react-dialog':
specifier: ^1.1.15
- version: 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ version: 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@radix-ui/react-dropdown-menu':
specifier: ^2.1.16
- version: 2.1.16(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ version: 2.1.16(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@radix-ui/react-tooltip':
specifier: ^1.2.8
- version: 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ version: 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@radix-ui/react-visually-hidden':
specifier: ^1.2.3
- version: 1.2.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ version: 1.2.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@types/piexifjs':
specifier: ^1.0.0
version: 1.0.0
@@ -43,16 +43,16 @@ importers:
version: 1.35.4
'@vercel/analytics':
specifier: ^1.5.0
- version: 1.5.0(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)
+ version: 1.5.0(next@15.5.4(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)
'@vercel/blob':
specifier: ^2.0.0
version: 2.0.0
'@vercel/speed-insights':
specifier: ^1.2.0
- version: 1.2.0(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)
+ version: 1.2.0(next@15.5.4(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)
ai:
- specifier: ^5.0.48
- version: 5.0.48(zod@4.1.8)
+ specifier: ^5.0.56
+ version: 5.0.56(zod@4.1.11)
camelcase-keys:
specifier: ^10.0.0
version: 10.0.0
@@ -61,7 +61,7 @@ importers:
version: 2.1.1
cmdk:
specifier: ^1.1.1
- version: 1.1.1(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ version: 1.1.1(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
culori:
specifier: ^4.0.2
version: 4.0.2
@@ -84,17 +84,17 @@ importers:
specifier: ^3.1.3
version: 3.1.3
framer-motion:
- specifier: ^12.23.16
- version: 12.23.16(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: ^12.23.22
+ version: 12.23.22(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
nanoid:
- specifier: ^5.1.5
- version: 5.1.5
+ specifier: ^5.1.6
+ version: 5.1.6
next:
- specifier: 15.5.3
- version: 15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: 15.5.4
+ version: 15.5.4(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
next-auth:
specifier: 5.0.0-beta.29
- version: 5.0.0-beta.29(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)
+ version: 5.0.0-beta.29(next@15.5.4(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@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.1(react@19.1.1))(react@19.1.1)
@@ -134,16 +134,19 @@ importers:
viewerjs:
specifier: ^1.11.7
version: 1.11.7
+ zod:
+ specifier: ^4.1.11
+ version: 4.1.11
devDependencies:
'@eslint/eslintrc':
specifier: ^3.3.1
version: 3.3.1
'@next/bundle-analyzer':
- specifier: 15.5.3
- version: 15.5.3
+ specifier: 15.5.4
+ version: 15.5.4
'@next/eslint-plugin-next':
- specifier: ^15.5.3
- version: 15.5.3
+ specifier: ^15.5.4
+ version: 15.5.4
'@stylistic/eslint-plugin':
specifier: ^5.4.0
version: 5.4.0(eslint@9.36.0(jiti@2.5.1))
@@ -158,7 +161,7 @@ importers:
version: 6.8.0
'@testing-library/react':
specifier: ^16.3.0
- version: 16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ version: 16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@types/culori':
specifier: ^4.0.1
version: 4.0.1
@@ -172,11 +175,11 @@ importers:
specifier: ^8.15.5
version: 8.15.5
'@types/react':
- specifier: 19.1.13
- version: 19.1.13
+ specifier: 19.1.14
+ version: 19.1.14
'@types/react-dom':
specifier: 19.1.9
- version: 19.1.9(@types/react@19.1.13)
+ version: 19.1.9(@types/react@19.1.14)
'@types/sanitize-html':
specifier: ^2.16.0
version: 2.16.0
@@ -187,8 +190,8 @@ importers:
specifier: 9.36.0
version: 9.36.0(jiti@2.5.1)
eslint-config-next:
- specifier: 15.5.3
- version: 15.5.3(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
+ specifier: 15.5.4
+ version: 15.5.4(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
eslint-plugin-react-hooks:
specifier: ^5.2.0
version: 5.2.0(eslint@9.36.0(jiti@2.5.1))
@@ -216,34 +219,34 @@ packages:
'@adobe/css-tools@4.4.4':
resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==}
- '@ai-sdk/gateway@1.0.25':
- resolution: {integrity: sha512-eI/6LLmn1tWFzuhjxgcPEqUFXwLjyRuGFrwkCoqLaTKe/qMYBEAV3iddnGUM0AV+Hp4NEykzP4ly5tibOLDMXw==}
+ '@ai-sdk/gateway@1.0.30':
+ resolution: {integrity: sha512-QdrSUryr/CLcsCISokLHOImcHj1adGXk1yy4B3qipqLhcNc33Kj/O/3crI790Qp85oDx7sc4vm7R4raf9RA/kg==}
engines: {node: '>=18'}
peerDependencies:
- zod: ^3.25.76 || ^4
+ zod: ^3.25.76 || ^4.1.8
- '@ai-sdk/openai@2.0.32':
- resolution: {integrity: sha512-p7giSkCs66Q1qYO/NPYI41CrSg65mcm8R2uAdF86+Y1D1/q4mUrWMyf5UTOJ0bx/z4jIPiNgGDCg2Kabi5zrKQ==}
+ '@ai-sdk/openai@2.0.38':
+ resolution: {integrity: sha512-aPK5jSz5/UkbYnh59/Yy5ic3JsOrz7Gt6TJdB8ggYDYEUHJ9FHEKoRKz8DEHh3Zaf3yngxZLkdP4JSbroK3jsQ==}
engines: {node: '>=18'}
peerDependencies:
- zod: ^3.25.76 || ^4
+ zod: ^3.25.76 || ^4.1.8
- '@ai-sdk/provider-utils@3.0.9':
- resolution: {integrity: sha512-Pm571x5efqaI4hf9yW4KsVlDBDme8++UepZRnq+kqVBWWjgvGhQlzU8glaFq0YJEB9kkxZHbRRyVeHoV2sRYaQ==}
+ '@ai-sdk/provider-utils@3.0.10':
+ resolution: {integrity: sha512-T1gZ76gEIwffep6MWI0QNy9jgoybUHE7TRaHB5k54K8mF91ciGFlbtCGxDYhMH3nCRergKwYFIDeFF0hJSIQHQ==}
engines: {node: '>=18'}
peerDependencies:
- zod: ^3.25.76 || ^4
+ zod: ^3.25.76 || ^4.1.8
'@ai-sdk/provider@2.0.0':
resolution: {integrity: sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA==}
engines: {node: '>=18'}
- '@ai-sdk/rsc@1.0.48':
- resolution: {integrity: sha512-eS8ED8yxlAw6PNMZIoic5UDz3SxE+GvN2m6RtvVH+fA1Eze3LYuSrtU8uINZMLhV3CoYDMkm3aONFdjUctJ51Q==}
+ '@ai-sdk/rsc@1.0.56':
+ resolution: {integrity: sha512-RUkDVohaV40pR2PsA1kKoe/AVDyZrTtEV5YR5c1TZbHLOJyKsXqoje4jLqBDamZPq44cSdcc2Gwnh2CpJAIaYA==}
engines: {node: '>=18'}
peerDependencies:
react: ^18 || ^19 || ^19.0.0-rc
- zod: ^3.25.76 || ^4
+ zod: ^3.25.76 || ^4.1.8
peerDependenciesMeta:
zod:
optional: true
@@ -292,44 +295,44 @@ packages:
'@aws-crypto/util@5.2.0':
resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==}
- '@aws-sdk/client-s3@3.893.0':
- resolution: {integrity: sha512-/P74KDJhOijnIAQR93sq1DQn8vbU3WaPZDyy1XUMRJJIY6iEJnDo1toD9XY6AFDz5TRto8/8NbcXT30AMOUtJQ==}
+ '@aws-sdk/client-s3@3.896.0':
+ resolution: {integrity: sha512-UETVuMLQRqgrWxTnavotY0TlB/jaR9sL3hkIFPx4KtjmigNBdwRaiVfOuTnIXKd+w9RPINYG//nnrK+5gIyZkA==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/client-sso@3.893.0':
- resolution: {integrity: sha512-0+qRGq7H8UNfxI0F02ObyOgOiYxkN4DSlFfwQUQMPfqENDNYOrL++2H9X3EInyc1lUM/+aK8TZqSbh473gdxcg==}
+ '@aws-sdk/client-sso@3.896.0':
+ resolution: {integrity: sha512-mpE3mrNili1dcvEvxaYjyoib8HlRXkb2bY5a3WeK++KObFY+HUujKtgQmiNSRX5YwQszm//fTrmGMmv9zpMcKg==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/core@3.893.0':
- resolution: {integrity: sha512-E1NAWHOprBXIJ9CVb6oTsRD/tNOozrKBD/Sb4t7WZd3dpby6KpYfM6FaEGfRGcJBIcB4245hww8Rmg16qDMJWg==}
+ '@aws-sdk/core@3.896.0':
+ resolution: {integrity: sha512-uJaoyWKeGNyCyeI+cIJrD7LEB4iF/W8/x2ij7zg32OFpAAJx96N34/e+XSKp/xkJpO5FKiBOskKLnHeUsJsAPA==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/credential-provider-env@3.893.0':
- resolution: {integrity: sha512-h4sYNk1iDrSZQLqFfbuD1GWY6KoVCvourfqPl6JZCYj8Vmnox5y9+7taPxwlU2VVII0hiV8UUbO79P35oPBSyA==}
+ '@aws-sdk/credential-provider-env@3.896.0':
+ resolution: {integrity: sha512-Cnqhupdkp825ICySrz4QTI64Nq3AmUAscPW8dueanni0avYBDp7RBppX4H0+6icqN569B983XNfQ0YSImQhfhg==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/credential-provider-http@3.893.0':
- resolution: {integrity: sha512-xYoC7DRr++zWZ9jG7/hvd6YjCbGDQzsAu2fBHHf91RVmSETXUgdEaP9rOdfCM02iIK/MYlwiWEIVBcBxWY/GQw==}
+ '@aws-sdk/credential-provider-http@3.896.0':
+ resolution: {integrity: sha512-CN0fTCKCUA1OTSx1c76o8XyJCy2WoI/av3J8r8mL6GmxTerhLRyzDy/MwxzPjTYPoL+GLEg6V4a9fRkWj1hBUA==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/credential-provider-ini@3.893.0':
- resolution: {integrity: sha512-ZQWOl4jdLhJHHrHsOfNRjgpP98A5kw4YzkMOUoK+TgSQVLi7wjb957V0htvwpi6KmGr3f2F8J06D6u2OtIc62w==}
+ '@aws-sdk/credential-provider-ini@3.896.0':
+ resolution: {integrity: sha512-+rbYG98czzwZLTYHJasK+VBjnIeXk73mRpZXHvaa4kDNxBezdN2YsoGNpLlPSxPdbpq18LY3LRtkdFTaT6DIQA==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/credential-provider-node@3.893.0':
- resolution: {integrity: sha512-NjvDUXciC2+EaQnbL/u/ZuCXj9PZQ/9ciPhI62LGCoJ3ft91lI1Z58Dgut0OFPpV6i16GhpFxzmbuf40wTgDbA==}
+ '@aws-sdk/credential-provider-node@3.896.0':
+ resolution: {integrity: sha512-J0Jm+56MNngk1PIyqoJFf5FC2fjA4CYXlqODqNRDtid7yk7HB9W3UTtvxofmii5KJOLcHGNPdGnHWKkUc+xYgw==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/credential-provider-process@3.893.0':
- resolution: {integrity: sha512-5XitkZdiQhjWJV71qWqrH7hMXwuK/TvIRwiwKs7Pj0sapGSk3YgD3Ykdlolz7sQOleoKWYYqgoq73fIPpTTmFA==}
+ '@aws-sdk/credential-provider-process@3.896.0':
+ resolution: {integrity: sha512-UfWVMQPZy7dus40c4LWxh5vQ+I51z0q4vf09Eqas5848e9DrGRG46GYIuc/gy+4CqEypjbg/XNMjnZfGLHxVnQ==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/credential-provider-sso@3.893.0':
- resolution: {integrity: sha512-ms8v13G1r0aHZh5PLcJu6AnQZPs23sRm3Ph0A7+GdqbPvWewP8M7jgZTKyTXi+oYXswdYECU1zPVur8zamhtLg==}
+ '@aws-sdk/credential-provider-sso@3.896.0':
+ resolution: {integrity: sha512-77Te8WrVdLABKlv7QyetXP6aYEX1UORiahLA1PXQb/p66aFBw18Xc6JiN/6zJ4RqdyV1Xr9rwYBwGYua93ANIA==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/credential-provider-web-identity@3.893.0':
- resolution: {integrity: sha512-wWD8r2ot4jf/CoogdPTl13HbwNLW4UheGUCu6gW7n9GoHh1JImYyooPHK8K7kD42hihydIA7OW7iFAf7//JYTw==}
+ '@aws-sdk/credential-provider-web-identity@3.896.0':
+ resolution: {integrity: sha512-gwMwZWumo+V0xJplO8j2HIb1TfPsF9fbcRGXS0CanEvjg4fF2Xs1pOQl2oCw3biPZpxHB0plNZjqSF2eneGg9g==}
engines: {node: '>=18.0.0'}
'@aws-sdk/middleware-bucket-endpoint@3.893.0':
@@ -340,8 +343,8 @@ packages:
resolution: {integrity: sha512-PEZkvD6k0X9sacHkvkVF4t2QyQEAzd35OJ2bIrjWCfc862TwukMMJ1KErRmQ1WqKXHKF4L0ed5vtWaO/8jVLNA==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/middleware-flexible-checksums@3.893.0':
- resolution: {integrity: sha512-2swRPpyGK6xpZwIFmmFSFKp10iuyBLZEouhrt1ycBVA8iHGmPkuJSCim6Vb+JoRKqINp5tizWeQwdg9boIxJPw==}
+ '@aws-sdk/middleware-flexible-checksums@3.896.0':
+ resolution: {integrity: sha512-bB3W/IFG7HNNziACOp1aZVGGnrIahXc0PxZoU055JirEGQtDFIU1ZD7S9zLKmy9FFUvQsAeRL9nDFHbx8cwx/w==}
engines: {node: '>=18.0.0'}
'@aws-sdk/middleware-host-header@3.893.0':
@@ -360,36 +363,36 @@ packages:
resolution: {integrity: sha512-H7Zotd9zUHQAr/wr3bcWHULYhEeoQrF54artgsoUGIf/9emv6LzY89QUccKIxYd6oHKNTrTyXm9F0ZZrzXNxlg==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/middleware-sdk-s3@3.893.0':
- resolution: {integrity: sha512-J2v7jOoSlE4o416yQiuka6+cVJzyrU7mbJEQA9VFCb+TYT2cG3xQB0bDzE24QoHeonpeBDghbg/zamYMnt+GsQ==}
+ '@aws-sdk/middleware-sdk-s3@3.896.0':
+ resolution: {integrity: sha512-hlPu/AZ5Afa4ZafP+aXIjRtKm7BX57lurA+TJ+7nXm1Az8Du3Sg2tZXP2/GfqTztLIFQYj/Jy5smkJ0+1HNAPQ==}
engines: {node: '>=18.0.0'}
'@aws-sdk/middleware-ssec@3.893.0':
resolution: {integrity: sha512-e4ccCiAnczv9mMPheKjgKxZQN473mcup+3DPLVNnIw5GRbQoDqPSB70nUzfORKZvM7ar7xLMPxNR8qQgo1C8Rg==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/middleware-user-agent@3.893.0':
- resolution: {integrity: sha512-n1vHj7bdC4ycIAKkny0rmgvgvGOIgYnGBAqfPAFPR26WuGWmCxH2cT9nQTNA+li8ofxX9F9FIFBTKkW92Pc8iQ==}
+ '@aws-sdk/middleware-user-agent@3.896.0':
+ resolution: {integrity: sha512-so/3tZH34YIeqG/QJgn5ZinnmHRdXV1ehsj4wVUrezL/dVW86jfwIkQIwpw8roOC657UoUf91c9FDhCxs3J5aQ==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/nested-clients@3.893.0':
- resolution: {integrity: sha512-HIUCyNtWkxvc0BmaJPUj/A0/29OapT/dzBNxr2sjgKNZgO81JuDFp+aXCmnf7vQoA2D1RzCsAIgEtfTExNFZqA==}
+ '@aws-sdk/nested-clients@3.896.0':
+ resolution: {integrity: sha512-KaHALB6DIXScJL/ExmonADr3jtTV6dpOHoEeTRSskJ/aW+rhZo7kH8SLmrwOT/qX8d5tza17YyR/oRkIKY6Eaw==}
engines: {node: '>=18.0.0'}
'@aws-sdk/region-config-resolver@3.893.0':
resolution: {integrity: sha512-/cJvh3Zsa+Of0Zbg7vl9wp/kZtdb40yk/2+XcroAMVPO9hPvmS9r/UOm6tO7FeX4TtkRFwWaQJiTZTgSdsPY+Q==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/s3-request-presigner@3.893.0':
- resolution: {integrity: sha512-rLOxM1668NP8GTcoSvvI2fEkHjyv84UHWAanc9kbEBDvkRCNhRxz7pRs456PjB4Mprj7mKaJAex7T32nS8Corw==}
+ '@aws-sdk/s3-request-presigner@3.896.0':
+ resolution: {integrity: sha512-pAlxvB1UmbgyfW8JyJy30FXfsfcWAbtR5gCO25mR5PPwuBQgzQR6lf/L4zbp+ZsSNhlKsvroe537oW5EXYk6Dw==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/signature-v4-multi-region@3.893.0':
- resolution: {integrity: sha512-pp4Bn8dL4i68P/mHgZ7sgkm8OSIpwjtGxP73oGseu9Cli0JRyJ1asTSsT60hUz3sbo+3oKk3hEobD6UxLUeGRA==}
+ '@aws-sdk/signature-v4-multi-region@3.896.0':
+ resolution: {integrity: sha512-txiQDEZXL9tlNP8mbnNaDtuHBYc/FCqaZ8Y76qnfM3o6CTIn0t0tTAlnx1CyFe4EaikVBgQuZvj5KfNA8PmlzA==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/token-providers@3.893.0':
- resolution: {integrity: sha512-nkzuE910TxW4pnIwJ+9xDMx5m+A8iXGM16Oa838YKsds07cgkRp7sPnpH9B8NbGK2szskAAkXfj7t1f59EKd1Q==}
+ '@aws-sdk/token-providers@3.896.0':
+ resolution: {integrity: sha512-WBoD+RY7tUfW9M+wGrZ2vdveR+ziZOjGHWFY3lcGnDvI8KE+fcSccEOTxgJBNBS5Z8B+WHKU2sZjb+Z7QqGwjw==}
engines: {node: '>=18.0.0'}
'@aws-sdk/types@3.893.0':
@@ -400,8 +403,8 @@ packages:
resolution: {integrity: sha512-u8H4f2Zsi19DGnwj5FSZzDMhytYF/bCh37vAtBsn3cNDL3YG578X5oc+wSX54pM3tOxS+NY7tvOAo52SW7koUA==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/util-endpoints@3.893.0':
- resolution: {integrity: sha512-xeMcL31jXHKyxRwB3oeNjs8YEpyvMnSYWr2OwLydgzgTr0G349AHlJHwYGCF9xiJ2C27kDxVvXV/Hpdp0p7TWw==}
+ '@aws-sdk/util-endpoints@3.895.0':
+ resolution: {integrity: sha512-MhxBvWbwxmKknuggO2NeMwOVkHOYL98pZ+1ZRI5YwckoCL3AvISMnPJgfN60ww6AIXHGpkp+HhpFdKOe8RHSEg==}
engines: {node: '>=18.0.0'}
'@aws-sdk/util-format-url@3.893.0':
@@ -415,8 +418,8 @@ packages:
'@aws-sdk/util-user-agent-browser@3.893.0':
resolution: {integrity: sha512-PE9NtbDBW6Kgl1bG6A5fF3EPo168tnkj8TgMcT0sg4xYBWsBpq0bpJZRh+Jm5Bkwiw9IgTCLjEU7mR6xWaMB9w==}
- '@aws-sdk/util-user-agent-node@3.893.0':
- resolution: {integrity: sha512-tTRkJo/fth9NPJ2AO/XLuJWVsOhbhejQRLyP0WXG3z0Waa5IWK5YBxBC1tWWATUCwsN748JQXU03C1aF9cRD9w==}
+ '@aws-sdk/util-user-agent-node@3.896.0':
+ resolution: {integrity: sha512-jegizucAwoxyBddKl0kRGNEgRHcfGuMeyhP1Nf+wIUmHz/9CxobIajqcVk/KRNLdZY5mSn7YG2VtP3z0BcBb0w==}
engines: {node: '>=18.0.0'}
peerDependencies:
aws-crt: '>=1.0.0'
@@ -424,8 +427,8 @@ packages:
aws-crt:
optional: true
- '@aws-sdk/xml-builder@3.893.0':
- resolution: {integrity: sha512-qKkJ2E0hU60iq0o2+hBSIWS8sf34xhqiRRGw5nbRhwEnE2MsWsWBpRoysmr32uq9dHMWUzII0c/fS29+wOSdMA==}
+ '@aws-sdk/xml-builder@3.894.0':
+ resolution: {integrity: sha512-E6EAMc9dT1a2DOdo4zyOf3fp5+NJ2wI+mcm7RaW1baFIWDwcb99PpvWoV7YEiK7oaBDshuOEGWKUSYXdW+JYgA==}
engines: {node: '>=18.0.0'}
'@aws/lambda-invoke-store@0.0.1':
@@ -975,59 +978,59 @@ packages:
'@napi-rs/wasm-runtime@0.2.12':
resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
- '@next/bundle-analyzer@15.5.3':
- resolution: {integrity: sha512-l2NxnWHP2gWHbomAlz/wFnN2jNCx/dpr7P/XWeOLhULiyKkXSac8O8SjxRO/8FNhr2l4JNtWVKk82Uya4cZYTw==}
+ '@next/bundle-analyzer@15.5.4':
+ resolution: {integrity: sha512-wMtpIjEHi+B/wC34ZbEcacGIPgQTwTFjjp0+F742s9TxC6QwT0MwB/O0QEgalMe8s3SH/K09DO0gmTvUSJrLRA==}
- '@next/env@15.5.3':
- resolution: {integrity: sha512-RSEDTRqyihYXygx/OJXwvVupfr9m04+0vH8vyy0HfZ7keRto6VX9BbEk0J2PUk0VGy6YhklJUSrgForov5F9pw==}
+ '@next/env@15.5.4':
+ resolution: {integrity: sha512-27SQhYp5QryzIT5uO8hq99C69eLQ7qkzkDPsk3N+GuS2XgOgoYEeOav7Pf8Tn4drECOVDsDg8oj+/DVy8qQL2A==}
- '@next/eslint-plugin-next@15.5.3':
- resolution: {integrity: sha512-SdhaKdko6dpsSr0DldkESItVrnPYB1NS2NpShCSX5lc7SSQmLZt5Mug6t2xbiuVWEVDLZSuIAoQyYVBYp0dR5g==}
+ '@next/eslint-plugin-next@15.5.4':
+ resolution: {integrity: sha512-SR1vhXNNg16T4zffhJ4TS7Xn7eq4NfKfcOsRwea7RIAHrjRpI9ALYbamqIJqkAhowLlERffiwk0FMvTLNdnVtw==}
- '@next/swc-darwin-arm64@15.5.3':
- resolution: {integrity: sha512-nzbHQo69+au9wJkGKTU9lP7PXv0d1J5ljFpvb+LnEomLtSbJkbZyEs6sbF3plQmiOB2l9OBtN2tNSvCH1nQ9Jg==}
+ '@next/swc-darwin-arm64@15.5.4':
+ resolution: {integrity: sha512-nopqz+Ov6uvorej8ndRX6HlxCYWCO3AHLfKK2TYvxoSB2scETOcfm/HSS3piPqc3A+MUgyHoqE6je4wnkjfrOA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
- '@next/swc-darwin-x64@15.5.3':
- resolution: {integrity: sha512-w83w4SkOOhekJOcA5HBvHyGzgV1W/XvOfpkrxIse4uPWhYTTRwtGEM4v/jiXwNSJvfRvah0H8/uTLBKRXlef8g==}
+ '@next/swc-darwin-x64@15.5.4':
+ resolution: {integrity: sha512-QOTCFq8b09ghfjRJKfb68kU9k2K+2wsC4A67psOiMn849K9ZXgCSRQr0oVHfmKnoqCbEmQWG1f2h1T2vtJJ9mA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
- '@next/swc-linux-arm64-gnu@15.5.3':
- resolution: {integrity: sha512-+m7pfIs0/yvgVu26ieaKrifV8C8yiLe7jVp9SpcIzg7XmyyNE7toC1fy5IOQozmr6kWl/JONC51osih2RyoXRw==}
+ '@next/swc-linux-arm64-gnu@15.5.4':
+ resolution: {integrity: sha512-eRD5zkts6jS3VfE/J0Kt1VxdFqTnMc3QgO5lFE5GKN3KDI/uUpSyK3CjQHmfEkYR4wCOl0R0XrsjpxfWEA++XA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@next/swc-linux-arm64-musl@15.5.3':
- resolution: {integrity: sha512-u3PEIzuguSenoZviZJahNLgCexGFhso5mxWCrrIMdvpZn6lkME5vc/ADZG8UUk5K1uWRy4hqSFECrON6UKQBbQ==}
+ '@next/swc-linux-arm64-musl@15.5.4':
+ resolution: {integrity: sha512-TOK7iTxmXFc45UrtKqWdZ1shfxuL4tnVAOuuJK4S88rX3oyVV4ZkLjtMT85wQkfBrOOvU55aLty+MV8xmcJR8A==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@next/swc-linux-x64-gnu@15.5.3':
- resolution: {integrity: sha512-lDtOOScYDZxI2BENN9m0pfVPJDSuUkAD1YXSvlJF0DKwZt0WlA7T7o3wrcEr4Q+iHYGzEaVuZcsIbCps4K27sA==}
+ '@next/swc-linux-x64-gnu@15.5.4':
+ resolution: {integrity: sha512-7HKolaj+481FSW/5lL0BcTkA4Ueam9SPYWyN/ib/WGAFZf0DGAN8frNpNZYFHtM4ZstrHZS3LY3vrwlIQfsiMA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@next/swc-linux-x64-musl@15.5.3':
- resolution: {integrity: sha512-9vWVUnsx9PrY2NwdVRJ4dUURAQ8Su0sLRPqcCCxtX5zIQUBES12eRVHq6b70bbfaVaxIDGJN2afHui0eDm+cLg==}
+ '@next/swc-linux-x64-musl@15.5.4':
+ resolution: {integrity: sha512-nlQQ6nfgN0nCO/KuyEUwwOdwQIGjOs4WNMjEUtpIQJPR2NUfmGpW2wkJln1d4nJ7oUzd1g4GivH5GoEPBgfsdw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@next/swc-win32-arm64-msvc@15.5.3':
- resolution: {integrity: sha512-1CU20FZzY9LFQigRi6jM45oJMU3KziA5/sSG+dXeVaTm661snQP6xu3ykGxxwU5sLG3sh14teO/IOEPVsQMRfA==}
+ '@next/swc-win32-arm64-msvc@15.5.4':
+ resolution: {integrity: sha512-PcR2bN7FlM32XM6eumklmyWLLbu2vs+D7nJX8OAIoWy69Kef8mfiN4e8TUv2KohprwifdpFKPzIP1njuCjD0YA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
- '@next/swc-win32-x64-msvc@15.5.3':
- resolution: {integrity: sha512-JMoLAq3n3y5tKXPQwCK5c+6tmwkuFDa2XAxz8Wm4+IVthdBZdZGh+lmiLUHg9f9IDwIQpUjp+ysd6OkYTyZRZw==}
+ '@next/swc-win32-x64-msvc@15.5.4':
+ resolution: {integrity: sha512-1ur2tSHZj8Px/KMAthmuI9FMp/YFusMMGoRNJaRZMOlSkgvLjzosSdQI0cJAKogdHl3qXUQKL9MGaYvKwA7DXg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
@@ -1402,8 +1405,8 @@ packages:
resolution: {integrity: sha512-IT6MatgBWagLybZl1xQcURXRICvqz1z3APSCAI9IqdvfCkrA7RaQIEfgC6G/KvfxnDfQUDqFV+ZlixcuFznGBQ==}
engines: {node: '>=18.0.0'}
- '@smithy/core@3.11.1':
- resolution: {integrity: sha512-REH7crwORgdjSpYs15JBiIWOYjj0hJNC3aCecpJvAlMMaaqL5i2CLb1i6Hc4yevToTKSqslLMI9FKjhugEwALA==}
+ '@smithy/core@3.12.0':
+ resolution: {integrity: sha512-zJeAgogZfbwlPGL93y4Z/XNeIN37YCreRUd6YMIRvaq+6RnBK8PPYYIQ85Is/GglPh3kNImD5riDCXbVSDpCiQ==}
engines: {node: '>=18.0.0'}
'@smithy/credential-provider-imds@4.1.2':
@@ -1466,12 +1469,12 @@ packages:
resolution: {integrity: sha512-9wlfBBgTsRvC2JxLJxv4xDGNBrZuio3AgSl0lSFX7fneW2cGskXTYpFxCdRYD2+5yzmsiTuaAJD1Wp7gWt9y9w==}
engines: {node: '>=18.0.0'}
- '@smithy/middleware-endpoint@4.2.3':
- resolution: {integrity: sha512-+1H5A28DeffRVrqmVmtqtRraEjoaC6JVap3xEQdVoBh2EagCVY7noPmcBcG4y7mnr9AJitR1ZAse2l+tEtK5vg==}
+ '@smithy/middleware-endpoint@4.2.4':
+ resolution: {integrity: sha512-FZ4hzupOmthm8Q8ujYrd0I+/MHwVMuSTdkDtIQE0xVuvJt9pLT6Q+b0p4/t+slDyrpcf+Wj7SN+ZqT5OryaaZg==}
engines: {node: '>=18.0.0'}
- '@smithy/middleware-retry@4.2.4':
- resolution: {integrity: sha512-amyqYQFewnAviX3yy/rI/n1HqAgfvUdkEhc04kDjxsngAUREKuOI24iwqQUirrj6GtodWmR4iO5Zeyl3/3BwWg==}
+ '@smithy/middleware-retry@4.3.0':
+ resolution: {integrity: sha512-qhEX9745fAxZvtLM4bQJAVC98elWjiMO2OiHl1s6p7hUzS4QfZO1gXUYNwEK8m0J6NoCD5W52ggWxbIDHI0XSg==}
engines: {node: '>=18.0.0'}
'@smithy/middleware-serde@4.1.1':
@@ -1518,8 +1521,8 @@ packages:
resolution: {integrity: sha512-M9rZhWQLjlQVCCR37cSjHfhriGRN+FQ8UfgrYNufv66TJgk+acaggShl3KS5U/ssxivvZLlnj7QH2CUOKlxPyA==}
engines: {node: '>=18.0.0'}
- '@smithy/smithy-client@4.6.3':
- resolution: {integrity: sha512-K27LqywsaqKz4jusdUQYJh/YP2VbnbdskZ42zG8xfV+eovbTtMc2/ZatLWCfSkW0PDsTUXlpvlaMyu8925HsOw==}
+ '@smithy/smithy-client@4.6.4':
+ resolution: {integrity: sha512-qL7O3VDyfzCSN9r+sdbQXGhaHtrfSJL30En6Jboj0I3bobf2g1/T0eP2L4qxqrEW26gWhJ4THI4ElVVLjYyBHg==}
engines: {node: '>=18.0.0'}
'@smithy/types@4.5.0':
@@ -1554,12 +1557,12 @@ packages:
resolution: {integrity: sha512-swXz2vMjrP1ZusZWVTB/ai5gK+J8U0BWvP10v9fpcFvg+Xi/87LHvHfst2IgCs1i0v4qFZfGwCmeD/KNCdJZbQ==}
engines: {node: '>=18.0.0'}
- '@smithy/util-defaults-mode-browser@4.1.3':
- resolution: {integrity: sha512-5fm3i2laE95uhY6n6O6uGFxI5SVbqo3/RWEuS3YsT0LVmSZk+0eUqPhKd4qk0KxBRPaT5VNT/WEBUqdMyYoRgg==}
+ '@smithy/util-defaults-mode-browser@4.1.4':
+ resolution: {integrity: sha512-mLDJ1s4eA3vwOGaQOEPlg5LB4LdZUUMpB5UMOMofeGhWqiS7WR7dTpLiNi9zVn+YziKUd3Af5NLfxDs7NJqmIw==}
engines: {node: '>=18.0.0'}
- '@smithy/util-defaults-mode-node@4.1.3':
- resolution: {integrity: sha512-lwnMzlMslZ9GJNt+/wVjz6+fe9Wp5tqR1xAyQn+iywmP+Ymj0F6NhU/KfHM5jhGPQchRSCcau5weKhFdLIM4cA==}
+ '@smithy/util-defaults-mode-node@4.1.4':
+ resolution: {integrity: sha512-pjX2iMTcOASaSanAd7bu6i3fcMMezr3NTr8Rh64etB0uHRZi+Aw86DoCxPESjY4UTIuA06hhqtTtw95o//imYA==}
engines: {node: '>=18.0.0'}
'@smithy/util-endpoints@3.1.2':
@@ -1598,6 +1601,10 @@ packages:
resolution: {integrity: sha512-PJBmyayrlfxM7nbqjomF4YcT1sApQwZio0NHSsT0EzhJqljRmvhzqZua43TyEs80nJk2Cn2FGPg/N8phH6KeCQ==}
engines: {node: '>=18.0.0'}
+ '@smithy/uuid@1.0.0':
+ resolution: {integrity: sha512-OlA/yZHh0ekYFnbUkmYBDQPE6fGfdrvgz39ktp8Xf+FA6BfxLejPTMDOG0Nfk5/rDySAz1dRbFf24zaAFYVXlQ==}
+ engines: {node: '>=18.0.0'}
+
'@standard-schema/spec@1.0.0':
resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==}
@@ -1795,8 +1802,8 @@ packages:
peerDependencies:
'@types/react': ^19.0.0
- '@types/react@19.1.13':
- resolution: {integrity: sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ==}
+ '@types/react@19.1.14':
+ resolution: {integrity: sha512-ukd93VGzaNPMAUPy0gRDSC57UuQbnH9Kussp7HBjM06YFi9uZTFhOvMSO2OKqXm1rSgzOE+pVx1k1PYHGwlc8Q==}
'@types/sanitize-html@2.16.0':
resolution: {integrity: sha512-l6rX1MUXje5ztPT0cAFtUayXF06DqPhRyfVXareEN5gGCFaP/iwsxIyKODr9XDhfxPpN6vXUFNfo5kZMXCxBtw==}
@@ -1807,9 +1814,6 @@ packages:
'@types/tough-cookie@4.0.5':
resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==}
- '@types/uuid@9.0.8':
- resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==}
-
'@types/yargs-parser@21.0.3':
resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
@@ -2060,11 +2064,11 @@ packages:
resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
engines: {node: '>= 14'}
- ai@5.0.48:
- resolution: {integrity: sha512-+oYhbN3NGRXayGfTFI8k1Fu4rhiJcQ0mbgiAOJGFkzvCxunRRQu5cyDl7y6cHNTj1QvHmIBROK5u655Ss2oI0g==}
+ ai@5.0.56:
+ resolution: {integrity: sha512-Rl++Ogg6DxzFkVHAOJZzhqcqvqtBLGOP9mMxJOGr2EJWj5HH5zjqDcnRh6x5vBoca5kj/Gd0rvUZFMnyI+sRiw==}
engines: {node: '>=18'}
peerDependencies:
- zod: ^3.25.76 || ^4
+ zod: ^3.25.76 || ^4.1.8
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
@@ -2554,8 +2558,8 @@ packages:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
- eslint-config-next@15.5.3:
- resolution: {integrity: sha512-e6j+QhQFOr5pfsc8VJbuTD9xTXJaRvMHYjEeLPA2pFkheNlgPLCkxdvhxhfuM4KGcqSZj2qEnpHisdTVs3BxuQ==}
+ eslint-config-next@15.5.4:
+ resolution: {integrity: sha512-BzgVVuT3kfJes8i2GHenC1SRJ+W3BTML11lAOYFOOPzrk2xp66jBOAGEFRw+3LkYCln5UzvFsLhojrshb5Zfaw==}
peerDependencies:
eslint: ^7.23.0 || ^8.0.0 || ^9.0.0
typescript: '>=3.3.1'
@@ -2768,8 +2772,8 @@ packages:
resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
engines: {node: '>=14'}
- framer-motion@12.23.16:
- resolution: {integrity: sha512-N81A8hiHqVsexOzI3wzkibyLURW1nEJsZaRuctPhG4AdbbciYu+bKJq9I2lQFzAO4Bx3h4swI6pBbF/Hu7f7BA==}
+ framer-motion@12.23.22:
+ resolution: {integrity: sha512-ZgGvdxXCw55ZYvhoZChTlG6pUuehecgvEAJz0BHoC5pQKW1EC5xf1Mul1ej5+ai+pVY0pylyFfdl45qnM1/GsA==}
peerDependencies:
'@emotion/is-prop-valid': '*'
react: ^18.0.0 || ^19.0.0
@@ -3502,8 +3506,8 @@ packages:
engines: {node: '>=10'}
hasBin: true
- motion-dom@12.23.12:
- resolution: {integrity: sha512-RcR4fvMCTESQBD/uKQe49D5RUeDOokkGRmz4ceaJKDBgHYtZtntC/s2vLvY38gqGaytinij/yi3hMcWVcEF5Kw==}
+ motion-dom@12.23.21:
+ resolution: {integrity: sha512-5xDXx/AbhrfgsQmSE7YESMn4Dpo6x5/DTZ4Iyy4xqDvVHWvFVoV+V2Ri2S/ksx+D40wrZ7gPYiMWshkdoqNgNQ==}
motion-utils@12.23.6:
resolution: {integrity: sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==}
@@ -3520,8 +3524,8 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
- nanoid@5.1.5:
- resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==}
+ nanoid@5.1.6:
+ resolution: {integrity: sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==}
engines: {node: ^18 || >=20}
hasBin: true
@@ -3555,8 +3559,8 @@ packages:
react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
- next@15.5.3:
- resolution: {integrity: sha512-r/liNAx16SQj4D+XH/oI1dlpv9tdKJ6cONYPwwcCC46f2NjpaRWY+EKCzULfgQYV6YKXjHBchff2IZBSlZmJNw==}
+ next@15.5.4:
+ resolution: {integrity: sha512-xH4Yjhb82sFYQfY3vbkJfgSDgXvBB6a8xPs9i35k6oZJRoQRihZH+4s9Yo2qsWpzBmZ3lPXaJ2KPXLfkvW4LnA==}
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
hasBin: true
peerDependencies:
@@ -4345,10 +4349,6 @@ packages:
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- uuid@9.0.1:
- resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
- hasBin: true
-
v8-compile-cache-lib@3.0.1:
resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
@@ -4495,45 +4495,45 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
- zod@4.1.8:
- resolution: {integrity: sha512-5R1P+WwQqmmMIEACyzSvo4JXHY5WiAFHRMg+zBZKgKS+Q1viRa0C1hmUKtHltoIFKtIdki3pRxkmpP74jnNYHQ==}
+ zod@4.1.11:
+ resolution: {integrity: sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==}
snapshots:
'@adobe/css-tools@4.4.4': {}
- '@ai-sdk/gateway@1.0.25(zod@4.1.8)':
+ '@ai-sdk/gateway@1.0.30(zod@4.1.11)':
dependencies:
'@ai-sdk/provider': 2.0.0
- '@ai-sdk/provider-utils': 3.0.9(zod@4.1.8)
- zod: 4.1.8
+ '@ai-sdk/provider-utils': 3.0.10(zod@4.1.11)
+ zod: 4.1.11
- '@ai-sdk/openai@2.0.32(zod@4.1.8)':
+ '@ai-sdk/openai@2.0.38(zod@4.1.11)':
dependencies:
'@ai-sdk/provider': 2.0.0
- '@ai-sdk/provider-utils': 3.0.9(zod@4.1.8)
- zod: 4.1.8
+ '@ai-sdk/provider-utils': 3.0.10(zod@4.1.11)
+ zod: 4.1.11
- '@ai-sdk/provider-utils@3.0.9(zod@4.1.8)':
+ '@ai-sdk/provider-utils@3.0.10(zod@4.1.11)':
dependencies:
'@ai-sdk/provider': 2.0.0
'@standard-schema/spec': 1.0.0
eventsource-parser: 3.0.6
- zod: 4.1.8
+ zod: 4.1.11
'@ai-sdk/provider@2.0.0':
dependencies:
json-schema: 0.4.0
- '@ai-sdk/rsc@1.0.48(react@19.1.1)(zod@4.1.8)':
+ '@ai-sdk/rsc@1.0.56(react@19.1.1)(zod@4.1.11)':
dependencies:
'@ai-sdk/provider': 2.0.0
- '@ai-sdk/provider-utils': 3.0.9(zod@4.1.8)
- ai: 5.0.48(zod@4.1.8)
+ '@ai-sdk/provider-utils': 3.0.10(zod@4.1.11)
+ ai: 5.0.56(zod@4.1.11)
jsondiffpatch: 0.6.0
react: 19.1.1
optionalDependencies:
- zod: 4.1.8
+ zod: 4.1.11
'@alloc/quick-lru@5.2.0': {}
@@ -4600,32 +4600,32 @@ snapshots:
'@smithy/util-utf8': 2.3.0
tslib: 2.8.1
- '@aws-sdk/client-s3@3.893.0':
+ '@aws-sdk/client-s3@3.896.0':
dependencies:
'@aws-crypto/sha1-browser': 5.2.0
'@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0
- '@aws-sdk/core': 3.893.0
- '@aws-sdk/credential-provider-node': 3.893.0
+ '@aws-sdk/core': 3.896.0
+ '@aws-sdk/credential-provider-node': 3.896.0
'@aws-sdk/middleware-bucket-endpoint': 3.893.0
'@aws-sdk/middleware-expect-continue': 3.893.0
- '@aws-sdk/middleware-flexible-checksums': 3.893.0
+ '@aws-sdk/middleware-flexible-checksums': 3.896.0
'@aws-sdk/middleware-host-header': 3.893.0
'@aws-sdk/middleware-location-constraint': 3.893.0
'@aws-sdk/middleware-logger': 3.893.0
'@aws-sdk/middleware-recursion-detection': 3.893.0
- '@aws-sdk/middleware-sdk-s3': 3.893.0
+ '@aws-sdk/middleware-sdk-s3': 3.896.0
'@aws-sdk/middleware-ssec': 3.893.0
- '@aws-sdk/middleware-user-agent': 3.893.0
+ '@aws-sdk/middleware-user-agent': 3.896.0
'@aws-sdk/region-config-resolver': 3.893.0
- '@aws-sdk/signature-v4-multi-region': 3.893.0
+ '@aws-sdk/signature-v4-multi-region': 3.896.0
'@aws-sdk/types': 3.893.0
- '@aws-sdk/util-endpoints': 3.893.0
+ '@aws-sdk/util-endpoints': 3.895.0
'@aws-sdk/util-user-agent-browser': 3.893.0
- '@aws-sdk/util-user-agent-node': 3.893.0
- '@aws-sdk/xml-builder': 3.893.0
+ '@aws-sdk/util-user-agent-node': 3.896.0
+ '@aws-sdk/xml-builder': 3.894.0
'@smithy/config-resolver': 4.2.2
- '@smithy/core': 3.11.1
+ '@smithy/core': 3.12.0
'@smithy/eventstream-serde-browser': 4.1.1
'@smithy/eventstream-serde-config-resolver': 4.2.1
'@smithy/eventstream-serde-node': 4.1.1
@@ -4636,68 +4636,67 @@ snapshots:
'@smithy/invalid-dependency': 4.1.1
'@smithy/md5-js': 4.1.1
'@smithy/middleware-content-length': 4.1.1
- '@smithy/middleware-endpoint': 4.2.3
- '@smithy/middleware-retry': 4.2.4
+ '@smithy/middleware-endpoint': 4.2.4
+ '@smithy/middleware-retry': 4.3.0
'@smithy/middleware-serde': 4.1.1
'@smithy/middleware-stack': 4.1.1
'@smithy/node-config-provider': 4.2.2
'@smithy/node-http-handler': 4.2.1
'@smithy/protocol-http': 5.2.1
- '@smithy/smithy-client': 4.6.3
+ '@smithy/smithy-client': 4.6.4
'@smithy/types': 4.5.0
'@smithy/url-parser': 4.1.1
'@smithy/util-base64': 4.1.0
'@smithy/util-body-length-browser': 4.1.0
'@smithy/util-body-length-node': 4.1.0
- '@smithy/util-defaults-mode-browser': 4.1.3
- '@smithy/util-defaults-mode-node': 4.1.3
+ '@smithy/util-defaults-mode-browser': 4.1.4
+ '@smithy/util-defaults-mode-node': 4.1.4
'@smithy/util-endpoints': 3.1.2
'@smithy/util-middleware': 4.1.1
'@smithy/util-retry': 4.1.2
'@smithy/util-stream': 4.3.2
'@smithy/util-utf8': 4.1.0
'@smithy/util-waiter': 4.1.1
- '@types/uuid': 9.0.8
+ '@smithy/uuid': 1.0.0
tslib: 2.8.1
- uuid: 9.0.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/client-sso@3.893.0':
+ '@aws-sdk/client-sso@3.896.0':
dependencies:
'@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0
- '@aws-sdk/core': 3.893.0
+ '@aws-sdk/core': 3.896.0
'@aws-sdk/middleware-host-header': 3.893.0
'@aws-sdk/middleware-logger': 3.893.0
'@aws-sdk/middleware-recursion-detection': 3.893.0
- '@aws-sdk/middleware-user-agent': 3.893.0
+ '@aws-sdk/middleware-user-agent': 3.896.0
'@aws-sdk/region-config-resolver': 3.893.0
'@aws-sdk/types': 3.893.0
- '@aws-sdk/util-endpoints': 3.893.0
+ '@aws-sdk/util-endpoints': 3.895.0
'@aws-sdk/util-user-agent-browser': 3.893.0
- '@aws-sdk/util-user-agent-node': 3.893.0
+ '@aws-sdk/util-user-agent-node': 3.896.0
'@smithy/config-resolver': 4.2.2
- '@smithy/core': 3.11.1
+ '@smithy/core': 3.12.0
'@smithy/fetch-http-handler': 5.2.1
'@smithy/hash-node': 4.1.1
'@smithy/invalid-dependency': 4.1.1
'@smithy/middleware-content-length': 4.1.1
- '@smithy/middleware-endpoint': 4.2.3
- '@smithy/middleware-retry': 4.2.4
+ '@smithy/middleware-endpoint': 4.2.4
+ '@smithy/middleware-retry': 4.3.0
'@smithy/middleware-serde': 4.1.1
'@smithy/middleware-stack': 4.1.1
'@smithy/node-config-provider': 4.2.2
'@smithy/node-http-handler': 4.2.1
'@smithy/protocol-http': 5.2.1
- '@smithy/smithy-client': 4.6.3
+ '@smithy/smithy-client': 4.6.4
'@smithy/types': 4.5.0
'@smithy/url-parser': 4.1.1
'@smithy/util-base64': 4.1.0
'@smithy/util-body-length-browser': 4.1.0
'@smithy/util-body-length-node': 4.1.0
- '@smithy/util-defaults-mode-browser': 4.1.3
- '@smithy/util-defaults-mode-node': 4.1.3
+ '@smithy/util-defaults-mode-browser': 4.1.4
+ '@smithy/util-defaults-mode-node': 4.1.4
'@smithy/util-endpoints': 3.1.2
'@smithy/util-middleware': 4.1.1
'@smithy/util-retry': 4.1.2
@@ -4706,54 +4705,52 @@ snapshots:
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/core@3.893.0':
+ '@aws-sdk/core@3.896.0':
dependencies:
'@aws-sdk/types': 3.893.0
- '@aws-sdk/xml-builder': 3.893.0
- '@smithy/core': 3.11.1
+ '@aws-sdk/xml-builder': 3.894.0
+ '@smithy/core': 3.12.0
'@smithy/node-config-provider': 4.2.2
'@smithy/property-provider': 4.1.1
'@smithy/protocol-http': 5.2.1
'@smithy/signature-v4': 5.2.1
- '@smithy/smithy-client': 4.6.3
+ '@smithy/smithy-client': 4.6.4
'@smithy/types': 4.5.0
'@smithy/util-base64': 4.1.0
- '@smithy/util-body-length-browser': 4.1.0
'@smithy/util-middleware': 4.1.1
'@smithy/util-utf8': 4.1.0
- fast-xml-parser: 5.2.5
tslib: 2.8.1
- '@aws-sdk/credential-provider-env@3.893.0':
+ '@aws-sdk/credential-provider-env@3.896.0':
dependencies:
- '@aws-sdk/core': 3.893.0
+ '@aws-sdk/core': 3.896.0
'@aws-sdk/types': 3.893.0
'@smithy/property-provider': 4.1.1
'@smithy/types': 4.5.0
tslib: 2.8.1
- '@aws-sdk/credential-provider-http@3.893.0':
+ '@aws-sdk/credential-provider-http@3.896.0':
dependencies:
- '@aws-sdk/core': 3.893.0
+ '@aws-sdk/core': 3.896.0
'@aws-sdk/types': 3.893.0
'@smithy/fetch-http-handler': 5.2.1
'@smithy/node-http-handler': 4.2.1
'@smithy/property-provider': 4.1.1
'@smithy/protocol-http': 5.2.1
- '@smithy/smithy-client': 4.6.3
+ '@smithy/smithy-client': 4.6.4
'@smithy/types': 4.5.0
'@smithy/util-stream': 4.3.2
tslib: 2.8.1
- '@aws-sdk/credential-provider-ini@3.893.0':
+ '@aws-sdk/credential-provider-ini@3.896.0':
dependencies:
- '@aws-sdk/core': 3.893.0
- '@aws-sdk/credential-provider-env': 3.893.0
- '@aws-sdk/credential-provider-http': 3.893.0
- '@aws-sdk/credential-provider-process': 3.893.0
- '@aws-sdk/credential-provider-sso': 3.893.0
- '@aws-sdk/credential-provider-web-identity': 3.893.0
- '@aws-sdk/nested-clients': 3.893.0
+ '@aws-sdk/core': 3.896.0
+ '@aws-sdk/credential-provider-env': 3.896.0
+ '@aws-sdk/credential-provider-http': 3.896.0
+ '@aws-sdk/credential-provider-process': 3.896.0
+ '@aws-sdk/credential-provider-sso': 3.896.0
+ '@aws-sdk/credential-provider-web-identity': 3.896.0
+ '@aws-sdk/nested-clients': 3.896.0
'@aws-sdk/types': 3.893.0
'@smithy/credential-provider-imds': 4.1.2
'@smithy/property-provider': 4.1.1
@@ -4763,14 +4760,14 @@ snapshots:
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/credential-provider-node@3.893.0':
+ '@aws-sdk/credential-provider-node@3.896.0':
dependencies:
- '@aws-sdk/credential-provider-env': 3.893.0
- '@aws-sdk/credential-provider-http': 3.893.0
- '@aws-sdk/credential-provider-ini': 3.893.0
- '@aws-sdk/credential-provider-process': 3.893.0
- '@aws-sdk/credential-provider-sso': 3.893.0
- '@aws-sdk/credential-provider-web-identity': 3.893.0
+ '@aws-sdk/credential-provider-env': 3.896.0
+ '@aws-sdk/credential-provider-http': 3.896.0
+ '@aws-sdk/credential-provider-ini': 3.896.0
+ '@aws-sdk/credential-provider-process': 3.896.0
+ '@aws-sdk/credential-provider-sso': 3.896.0
+ '@aws-sdk/credential-provider-web-identity': 3.896.0
'@aws-sdk/types': 3.893.0
'@smithy/credential-provider-imds': 4.1.2
'@smithy/property-provider': 4.1.1
@@ -4780,20 +4777,20 @@ snapshots:
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/credential-provider-process@3.893.0':
+ '@aws-sdk/credential-provider-process@3.896.0':
dependencies:
- '@aws-sdk/core': 3.893.0
+ '@aws-sdk/core': 3.896.0
'@aws-sdk/types': 3.893.0
'@smithy/property-provider': 4.1.1
'@smithy/shared-ini-file-loader': 4.2.0
'@smithy/types': 4.5.0
tslib: 2.8.1
- '@aws-sdk/credential-provider-sso@3.893.0':
+ '@aws-sdk/credential-provider-sso@3.896.0':
dependencies:
- '@aws-sdk/client-sso': 3.893.0
- '@aws-sdk/core': 3.893.0
- '@aws-sdk/token-providers': 3.893.0
+ '@aws-sdk/client-sso': 3.896.0
+ '@aws-sdk/core': 3.896.0
+ '@aws-sdk/token-providers': 3.896.0
'@aws-sdk/types': 3.893.0
'@smithy/property-provider': 4.1.1
'@smithy/shared-ini-file-loader': 4.2.0
@@ -4802,10 +4799,10 @@ snapshots:
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/credential-provider-web-identity@3.893.0':
+ '@aws-sdk/credential-provider-web-identity@3.896.0':
dependencies:
- '@aws-sdk/core': 3.893.0
- '@aws-sdk/nested-clients': 3.893.0
+ '@aws-sdk/core': 3.896.0
+ '@aws-sdk/nested-clients': 3.896.0
'@aws-sdk/types': 3.893.0
'@smithy/property-provider': 4.1.1
'@smithy/shared-ini-file-loader': 4.2.0
@@ -4831,12 +4828,12 @@ snapshots:
'@smithy/types': 4.5.0
tslib: 2.8.1
- '@aws-sdk/middleware-flexible-checksums@3.893.0':
+ '@aws-sdk/middleware-flexible-checksums@3.896.0':
dependencies:
'@aws-crypto/crc32': 5.2.0
'@aws-crypto/crc32c': 5.2.0
'@aws-crypto/util': 5.2.0
- '@aws-sdk/core': 3.893.0
+ '@aws-sdk/core': 3.896.0
'@aws-sdk/types': 3.893.0
'@smithy/is-array-buffer': 4.1.0
'@smithy/node-config-provider': 4.2.2
@@ -4874,16 +4871,16 @@ snapshots:
'@smithy/types': 4.5.0
tslib: 2.8.1
- '@aws-sdk/middleware-sdk-s3@3.893.0':
+ '@aws-sdk/middleware-sdk-s3@3.896.0':
dependencies:
- '@aws-sdk/core': 3.893.0
+ '@aws-sdk/core': 3.896.0
'@aws-sdk/types': 3.893.0
'@aws-sdk/util-arn-parser': 3.893.0
- '@smithy/core': 3.11.1
+ '@smithy/core': 3.12.0
'@smithy/node-config-provider': 4.2.2
'@smithy/protocol-http': 5.2.1
'@smithy/signature-v4': 5.2.1
- '@smithy/smithy-client': 4.6.3
+ '@smithy/smithy-client': 4.6.4
'@smithy/types': 4.5.0
'@smithy/util-config-provider': 4.1.0
'@smithy/util-middleware': 4.1.1
@@ -4897,51 +4894,51 @@ snapshots:
'@smithy/types': 4.5.0
tslib: 2.8.1
- '@aws-sdk/middleware-user-agent@3.893.0':
+ '@aws-sdk/middleware-user-agent@3.896.0':
dependencies:
- '@aws-sdk/core': 3.893.0
+ '@aws-sdk/core': 3.896.0
'@aws-sdk/types': 3.893.0
- '@aws-sdk/util-endpoints': 3.893.0
- '@smithy/core': 3.11.1
+ '@aws-sdk/util-endpoints': 3.895.0
+ '@smithy/core': 3.12.0
'@smithy/protocol-http': 5.2.1
'@smithy/types': 4.5.0
tslib: 2.8.1
- '@aws-sdk/nested-clients@3.893.0':
+ '@aws-sdk/nested-clients@3.896.0':
dependencies:
'@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0
- '@aws-sdk/core': 3.893.0
+ '@aws-sdk/core': 3.896.0
'@aws-sdk/middleware-host-header': 3.893.0
'@aws-sdk/middleware-logger': 3.893.0
'@aws-sdk/middleware-recursion-detection': 3.893.0
- '@aws-sdk/middleware-user-agent': 3.893.0
+ '@aws-sdk/middleware-user-agent': 3.896.0
'@aws-sdk/region-config-resolver': 3.893.0
'@aws-sdk/types': 3.893.0
- '@aws-sdk/util-endpoints': 3.893.0
+ '@aws-sdk/util-endpoints': 3.895.0
'@aws-sdk/util-user-agent-browser': 3.893.0
- '@aws-sdk/util-user-agent-node': 3.893.0
+ '@aws-sdk/util-user-agent-node': 3.896.0
'@smithy/config-resolver': 4.2.2
- '@smithy/core': 3.11.1
+ '@smithy/core': 3.12.0
'@smithy/fetch-http-handler': 5.2.1
'@smithy/hash-node': 4.1.1
'@smithy/invalid-dependency': 4.1.1
'@smithy/middleware-content-length': 4.1.1
- '@smithy/middleware-endpoint': 4.2.3
- '@smithy/middleware-retry': 4.2.4
+ '@smithy/middleware-endpoint': 4.2.4
+ '@smithy/middleware-retry': 4.3.0
'@smithy/middleware-serde': 4.1.1
'@smithy/middleware-stack': 4.1.1
'@smithy/node-config-provider': 4.2.2
'@smithy/node-http-handler': 4.2.1
'@smithy/protocol-http': 5.2.1
- '@smithy/smithy-client': 4.6.3
+ '@smithy/smithy-client': 4.6.4
'@smithy/types': 4.5.0
'@smithy/url-parser': 4.1.1
'@smithy/util-base64': 4.1.0
'@smithy/util-body-length-browser': 4.1.0
'@smithy/util-body-length-node': 4.1.0
- '@smithy/util-defaults-mode-browser': 4.1.3
- '@smithy/util-defaults-mode-node': 4.1.3
+ '@smithy/util-defaults-mode-browser': 4.1.4
+ '@smithy/util-defaults-mode-node': 4.1.4
'@smithy/util-endpoints': 3.1.2
'@smithy/util-middleware': 4.1.1
'@smithy/util-retry': 4.1.2
@@ -4959,30 +4956,30 @@ snapshots:
'@smithy/util-middleware': 4.1.1
tslib: 2.8.1
- '@aws-sdk/s3-request-presigner@3.893.0':
+ '@aws-sdk/s3-request-presigner@3.896.0':
dependencies:
- '@aws-sdk/signature-v4-multi-region': 3.893.0
+ '@aws-sdk/signature-v4-multi-region': 3.896.0
'@aws-sdk/types': 3.893.0
'@aws-sdk/util-format-url': 3.893.0
- '@smithy/middleware-endpoint': 4.2.3
+ '@smithy/middleware-endpoint': 4.2.4
'@smithy/protocol-http': 5.2.1
- '@smithy/smithy-client': 4.6.3
+ '@smithy/smithy-client': 4.6.4
'@smithy/types': 4.5.0
tslib: 2.8.1
- '@aws-sdk/signature-v4-multi-region@3.893.0':
+ '@aws-sdk/signature-v4-multi-region@3.896.0':
dependencies:
- '@aws-sdk/middleware-sdk-s3': 3.893.0
+ '@aws-sdk/middleware-sdk-s3': 3.896.0
'@aws-sdk/types': 3.893.0
'@smithy/protocol-http': 5.2.1
'@smithy/signature-v4': 5.2.1
'@smithy/types': 4.5.0
tslib: 2.8.1
- '@aws-sdk/token-providers@3.893.0':
+ '@aws-sdk/token-providers@3.896.0':
dependencies:
- '@aws-sdk/core': 3.893.0
- '@aws-sdk/nested-clients': 3.893.0
+ '@aws-sdk/core': 3.896.0
+ '@aws-sdk/nested-clients': 3.896.0
'@aws-sdk/types': 3.893.0
'@smithy/property-provider': 4.1.1
'@smithy/shared-ini-file-loader': 4.2.0
@@ -5000,7 +4997,7 @@ snapshots:
dependencies:
tslib: 2.8.1
- '@aws-sdk/util-endpoints@3.893.0':
+ '@aws-sdk/util-endpoints@3.895.0':
dependencies:
'@aws-sdk/types': 3.893.0
'@smithy/types': 4.5.0
@@ -5026,17 +5023,18 @@ snapshots:
bowser: 2.12.1
tslib: 2.8.1
- '@aws-sdk/util-user-agent-node@3.893.0':
+ '@aws-sdk/util-user-agent-node@3.896.0':
dependencies:
- '@aws-sdk/middleware-user-agent': 3.893.0
+ '@aws-sdk/middleware-user-agent': 3.896.0
'@aws-sdk/types': 3.893.0
'@smithy/node-config-provider': 4.2.2
'@smithy/types': 4.5.0
tslib: 2.8.1
- '@aws-sdk/xml-builder@3.893.0':
+ '@aws-sdk/xml-builder@3.894.0':
dependencies:
'@smithy/types': 4.5.0
+ fast-xml-parser: 5.2.5
tslib: 2.8.1
'@aws/lambda-invoke-store@0.0.1': {}
@@ -5680,41 +5678,41 @@ snapshots:
'@tybys/wasm-util': 0.10.1
optional: true
- '@next/bundle-analyzer@15.5.3':
+ '@next/bundle-analyzer@15.5.4':
dependencies:
webpack-bundle-analyzer: 4.10.1
transitivePeerDependencies:
- bufferutil
- utf-8-validate
- '@next/env@15.5.3': {}
+ '@next/env@15.5.4': {}
- '@next/eslint-plugin-next@15.5.3':
+ '@next/eslint-plugin-next@15.5.4':
dependencies:
fast-glob: 3.3.1
- '@next/swc-darwin-arm64@15.5.3':
+ '@next/swc-darwin-arm64@15.5.4':
optional: true
- '@next/swc-darwin-x64@15.5.3':
+ '@next/swc-darwin-x64@15.5.4':
optional: true
- '@next/swc-linux-arm64-gnu@15.5.3':
+ '@next/swc-linux-arm64-gnu@15.5.4':
optional: true
- '@next/swc-linux-arm64-musl@15.5.3':
+ '@next/swc-linux-arm64-musl@15.5.4':
optional: true
- '@next/swc-linux-x64-gnu@15.5.3':
+ '@next/swc-linux-x64-gnu@15.5.4':
optional: true
- '@next/swc-linux-x64-musl@15.5.3':
+ '@next/swc-linux-x64-musl@15.5.4':
optional: true
- '@next/swc-win32-arm64-msvc@15.5.3':
+ '@next/swc-win32-arm64-msvc@15.5.4':
optional: true
- '@next/swc-win32-x64-msvc@15.5.3':
+ '@next/swc-win32-x64-msvc@15.5.4':
optional: true
'@nodelib/fs.scandir@2.1.5':
@@ -5744,292 +5742,292 @@ snapshots:
'@radix-ui/primitive@1.1.3': {}
- '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(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.9(@types/react@19.1.14))(@types/react@19.1.14)(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.9(@types/react@19.1.13))(@types/react@19.1.13)(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.9(@types/react@19.1.14))(@types/react@19.1.14)(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.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.1.14
+ '@types/react-dom': 19.1.9(@types/react@19.1.14)
- '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(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.9(@types/react@19.1.14))(@types/react@19.1.14)(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.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.1.14)(react@19.1.1)
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.1.14
+ '@types/react-dom': 19.1.9(@types/react@19.1.14)
- '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.14)(react@19.1.1)':
dependencies:
react: 19.1.1
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.1.14
- '@radix-ui/react-context@1.1.2(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-context@1.1.2(@types/react@19.1.14)(react@19.1.1)':
dependencies:
react: 19.1.1
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.1.14
- '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(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.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(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.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.14)(react@19.1.1)
aria-hidden: 1.2.6
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
- react-remove-scroll: 2.7.1(@types/react@19.1.13)(react@19.1.1)
+ react-remove-scroll: 2.7.1(@types/react@19.1.14)(react@19.1.1)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.1.14
+ '@types/react-dom': 19.1.9(@types/react@19.1.14)
- '@radix-ui/react-direction@1.1.1(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-direction@1.1.1(@types/react@19.1.14)(react@19.1.1)':
dependencies:
react: 19.1.1
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.1.14
- '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(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.13)(react@19.1.1)
- '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.13)(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(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.14)(react@19.1.1)
+ '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.14)(react@19.1.1)
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.1.14
+ '@types/react-dom': 19.1.9(@types/react@19.1.14)
- '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(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.9(@types/react@19.1.13))(@types/react@19.1.13)(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.13)(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(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.9(@types/react@19.1.14))(@types/react@19.1.14)(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.14)(react@19.1.1)
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.1.14
+ '@types/react-dom': 19.1.9(@types/react@19.1.14)
- '@radix-ui/react-focus-guards@1.1.3(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-focus-guards@1.1.3(@types/react@19.1.14)(react@19.1.1)':
dependencies:
react: 19.1.1
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.1.14
- '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(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.13)(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(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.13)(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(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.14)(react@19.1.1)
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.1.14
+ '@types/react-dom': 19.1.9(@types/react@19.1.14)
- '@radix-ui/react-id@1.1.1(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-id@1.1.1(@types/react@19.1.14)(react@19.1.1)':
dependencies:
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1)
react: 19.1.1
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.1.14
- '@radix-ui/react-menu@2.1.16(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-menu@2.1.16(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(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.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(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.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(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.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(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.14)(react@19.1.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(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.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(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.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.14)(react@19.1.1)
aria-hidden: 1.2.6
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
- react-remove-scroll: 2.7.1(@types/react@19.1.13)(react@19.1.1)
+ react-remove-scroll: 2.7.1(@types/react@19.1.14)(react@19.1.1)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.1.14
+ '@types/react-dom': 19.1.9(@types/react@19.1.14)
- '@radix-ui/react-popper@1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-popper@1.2.8(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
dependencies:
'@floating-ui/react-dom': 2.1.6(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.9(@types/react@19.1.13))(@types/react@19.1.13)(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.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(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.13)(react@19.1.1)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.13)(react@19.1.1)
+ '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(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.14)(react@19.1.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(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.14)(react@19.1.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.14)(react@19.1.1)
'@radix-ui/rect': 1.1.1
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.1.14
+ '@types/react-dom': 19.1.9(@types/react@19.1.14)
- '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(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.9(@types/react@19.1.14))(@types/react@19.1.14)(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.9(@types/react@19.1.13))(@types/react@19.1.13)(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.13)(react@19.1.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(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.14)(react@19.1.1)
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.1.14
+ '@types/react-dom': 19.1.9(@types/react@19.1.14)
- '@radix-ui/react-presence@1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-presence@1.1.5(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(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.13)(react@19.1.1)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1)
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.1.14
+ '@types/react-dom': 19.1.9(@types/react@19.1.14)
- '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(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.9(@types/react@19.1.14))(@types/react@19.1.14)(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.13)(react@19.1.1)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.1.14)(react@19.1.1)
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.1.14
+ '@types/react-dom': 19.1.9(@types/react@19.1.14)
- '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(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.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(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.13)(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(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.14)(react@19.1.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(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.14)(react@19.1.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.14)(react@19.1.1)
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.1.14
+ '@types/react-dom': 19.1.9(@types/react@19.1.14)
- '@radix-ui/react-slot@1.2.3(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-slot@1.2.3(@types/react@19.1.14)(react@19.1.1)':
dependencies:
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.14)(react@19.1.1)
react: 19.1.1
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.1.14
- '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(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.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(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.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(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.14)(react@19.1.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(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.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(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.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(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.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.1.14
+ '@types/react-dom': 19.1.9(@types/react@19.1.14)
- '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.14)(react@19.1.1)':
dependencies:
react: 19.1.1
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.1.14
- '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.14)(react@19.1.1)':
dependencies:
- '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1)
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1)
react: 19.1.1
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.1.14
- '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.14)(react@19.1.1)':
dependencies:
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1)
react: 19.1.1
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.1.14
- '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.14)(react@19.1.1)':
dependencies:
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.14)(react@19.1.1)
react: 19.1.1
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.1.14
- '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.14)(react@19.1.1)':
dependencies:
react: 19.1.1
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.1.14
- '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.14)(react@19.1.1)':
dependencies:
'@radix-ui/rect': 1.1.1
react: 19.1.1
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.1.14
- '@radix-ui/react-use-size@1.1.1(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-use-size@1.1.1(@types/react@19.1.14)(react@19.1.1)':
dependencies:
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.14)(react@19.1.1)
react: 19.1.1
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.1.14
- '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(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.9(@types/react@19.1.13))(@types/react@19.1.13)(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.9(@types/react@19.1.14))(@types/react@19.1.14)(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.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.1.14
+ '@types/react-dom': 19.1.9(@types/react@19.1.14)
'@radix-ui/rect@1.1.1': {}
@@ -6069,7 +6067,7 @@ snapshots:
'@smithy/util-middleware': 4.1.1
tslib: 2.8.1
- '@smithy/core@3.11.1':
+ '@smithy/core@3.12.0':
dependencies:
'@smithy/middleware-serde': 4.1.1
'@smithy/protocol-http': 5.2.1
@@ -6079,9 +6077,8 @@ snapshots:
'@smithy/util-middleware': 4.1.1
'@smithy/util-stream': 4.3.2
'@smithy/util-utf8': 4.1.0
- '@types/uuid': 9.0.8
+ '@smithy/uuid': 1.0.0
tslib: 2.8.1
- uuid: 9.0.1
'@smithy/credential-provider-imds@4.1.2':
dependencies:
@@ -6174,9 +6171,9 @@ snapshots:
'@smithy/types': 4.5.0
tslib: 2.8.1
- '@smithy/middleware-endpoint@4.2.3':
+ '@smithy/middleware-endpoint@4.2.4':
dependencies:
- '@smithy/core': 3.11.1
+ '@smithy/core': 3.12.0
'@smithy/middleware-serde': 4.1.1
'@smithy/node-config-provider': 4.2.2
'@smithy/shared-ini-file-loader': 4.2.0
@@ -6185,18 +6182,17 @@ snapshots:
'@smithy/util-middleware': 4.1.1
tslib: 2.8.1
- '@smithy/middleware-retry@4.2.4':
+ '@smithy/middleware-retry@4.3.0':
dependencies:
'@smithy/node-config-provider': 4.2.2
'@smithy/protocol-http': 5.2.1
'@smithy/service-error-classification': 4.1.2
- '@smithy/smithy-client': 4.6.3
+ '@smithy/smithy-client': 4.6.4
'@smithy/types': 4.5.0
'@smithy/util-middleware': 4.1.1
'@smithy/util-retry': 4.1.2
- '@types/uuid': 9.0.8
+ '@smithy/uuid': 1.0.0
tslib: 2.8.1
- uuid: 9.0.1
'@smithy/middleware-serde@4.1.1':
dependencies:
@@ -6265,10 +6261,10 @@ snapshots:
'@smithy/util-utf8': 4.1.0
tslib: 2.8.1
- '@smithy/smithy-client@4.6.3':
+ '@smithy/smithy-client@4.6.4':
dependencies:
- '@smithy/core': 3.11.1
- '@smithy/middleware-endpoint': 4.2.3
+ '@smithy/core': 3.12.0
+ '@smithy/middleware-endpoint': 4.2.4
'@smithy/middleware-stack': 4.1.1
'@smithy/protocol-http': 5.2.1
'@smithy/types': 4.5.0
@@ -6313,21 +6309,21 @@ snapshots:
dependencies:
tslib: 2.8.1
- '@smithy/util-defaults-mode-browser@4.1.3':
+ '@smithy/util-defaults-mode-browser@4.1.4':
dependencies:
'@smithy/property-provider': 4.1.1
- '@smithy/smithy-client': 4.6.3
+ '@smithy/smithy-client': 4.6.4
'@smithy/types': 4.5.0
bowser: 2.12.1
tslib: 2.8.1
- '@smithy/util-defaults-mode-node@4.1.3':
+ '@smithy/util-defaults-mode-node@4.1.4':
dependencies:
'@smithy/config-resolver': 4.2.2
'@smithy/credential-provider-imds': 4.1.2
'@smithy/node-config-provider': 4.2.2
'@smithy/property-provider': 4.1.1
- '@smithy/smithy-client': 4.6.3
+ '@smithy/smithy-client': 4.6.4
'@smithy/types': 4.5.0
tslib: 2.8.1
@@ -6383,6 +6379,10 @@ snapshots:
'@smithy/types': 4.5.0
tslib: 2.8.1
+ '@smithy/uuid@1.0.0':
+ dependencies:
+ tslib: 2.8.1
+
'@standard-schema/spec@1.0.0': {}
'@stylistic/eslint-plugin@5.4.0(eslint@9.36.0(jiti@2.5.1))':
@@ -6491,15 +6491,15 @@ snapshots:
picocolors: 1.1.1
redent: 3.0.0
- '@testing-library/react@16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@testing-library/react@16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
dependencies:
'@babel/runtime': 7.28.4
'@testing-library/dom': 10.4.1
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.1.14
+ '@types/react-dom': 19.1.9(@types/react@19.1.14)
'@tsconfig/node10@1.0.11': {}
@@ -6580,11 +6580,11 @@ snapshots:
'@types/piexifjs@1.0.0': {}
- '@types/react-dom@19.1.9(@types/react@19.1.13)':
+ '@types/react-dom@19.1.9(@types/react@19.1.14)':
dependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.1.14
- '@types/react@19.1.13':
+ '@types/react@19.1.14':
dependencies:
csstype: 3.1.3
@@ -6596,8 +6596,6 @@ snapshots:
'@types/tough-cookie@4.0.5': {}
- '@types/uuid@9.0.8': {}
-
'@types/yargs-parser@21.0.3': {}
'@types/yargs@17.0.33':
@@ -6636,7 +6634,7 @@ snapshots:
'@typescript-eslint/project-service@8.43.0(typescript@5.9.2)':
dependencies:
'@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.2)
- '@typescript-eslint/types': 8.43.0
+ '@typescript-eslint/types': 8.44.0
debug: 4.4.3
typescript: 5.9.2
transitivePeerDependencies:
@@ -6773,9 +6771,9 @@ snapshots:
dependencies:
uncrypto: 0.1.3
- '@vercel/analytics@1.5.0(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)':
+ '@vercel/analytics@1.5.0(next@15.5.4(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)':
optionalDependencies:
- next: 15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ next: 15.5.4(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
react: 19.1.1
'@vercel/blob@2.0.0':
@@ -6786,9 +6784,9 @@ snapshots:
throttleit: 2.1.0
undici: 5.29.0
- '@vercel/speed-insights@1.2.0(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)':
+ '@vercel/speed-insights@1.2.0(next@15.5.4(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)':
optionalDependencies:
- next: 15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ next: 15.5.4(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
react: 19.1.1
acorn-jsx@5.3.2(acorn@8.15.0):
@@ -6803,13 +6801,13 @@ snapshots:
agent-base@7.1.4: {}
- ai@5.0.48(zod@4.1.8):
+ ai@5.0.56(zod@4.1.11):
dependencies:
- '@ai-sdk/gateway': 1.0.25(zod@4.1.8)
+ '@ai-sdk/gateway': 1.0.30(zod@4.1.11)
'@ai-sdk/provider': 2.0.0
- '@ai-sdk/provider-utils': 3.0.9(zod@4.1.8)
+ '@ai-sdk/provider-utils': 3.0.10(zod@4.1.11)
'@opentelemetry/api': 1.9.0
- zod: 4.1.8
+ zod: 4.1.11
ajv@6.12.6:
dependencies:
@@ -7086,12 +7084,12 @@ snapshots:
clsx@2.1.1: {}
- cmdk@1.1.1(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
+ cmdk@1.1.1(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(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.13)(react@19.1.1)
- '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(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.14)(react@19.1.1)
+ '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.14)(react@19.1.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.14))(@types/react@19.1.14)(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:
@@ -7378,9 +7376,9 @@ snapshots:
escape-string-regexp@4.0.0: {}
- eslint-config-next@15.5.3(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2):
+ eslint-config-next@15.5.4(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2):
dependencies:
- '@next/eslint-plugin-next': 15.5.3
+ '@next/eslint-plugin-next': 15.5.4
'@rushstack/eslint-patch': 1.12.0
'@typescript-eslint/eslint-plugin': 8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/parser': 8.43.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
@@ -7680,9 +7678,9 @@ snapshots:
cross-spawn: 7.0.6
signal-exit: 4.1.0
- framer-motion@12.23.16(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
+ framer-motion@12.23.22(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
dependencies:
- motion-dom: 12.23.12
+ motion-dom: 12.23.21
motion-utils: 12.23.6
tslib: 2.8.1
optionalDependencies:
@@ -8583,7 +8581,7 @@ snapshots:
mkdirp@3.0.1: {}
- motion-dom@12.23.12:
+ motion-dom@12.23.21:
dependencies:
motion-utils: 12.23.6
@@ -8595,16 +8593,16 @@ snapshots:
nanoid@3.3.11: {}
- nanoid@5.1.5: {}
+ nanoid@5.1.6: {}
napi-postinstall@0.3.3: {}
natural-compare@1.4.0: {}
- next-auth@5.0.0-beta.29(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1):
+ next-auth@5.0.0-beta.29(next@15.5.4(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1):
dependencies:
'@auth/core': 0.40.0
- next: 15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ next: 15.5.4(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
react: 19.1.1
next-themes@0.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
@@ -8612,9 +8610,9 @@ snapshots:
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
- next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
+ next@15.5.4(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
dependencies:
- '@next/env': 15.5.3
+ '@next/env': 15.5.4
'@swc/helpers': 0.5.15
caniuse-lite: 1.0.30001741
postcss: 8.4.31
@@ -8622,14 +8620,14 @@ snapshots:
react-dom: 19.1.1(react@19.1.1)
styled-jsx: 5.1.6(@babel/core@7.28.4)(react@19.1.1)
optionalDependencies:
- '@next/swc-darwin-arm64': 15.5.3
- '@next/swc-darwin-x64': 15.5.3
- '@next/swc-linux-arm64-gnu': 15.5.3
- '@next/swc-linux-arm64-musl': 15.5.3
- '@next/swc-linux-x64-gnu': 15.5.3
- '@next/swc-linux-x64-musl': 15.5.3
- '@next/swc-win32-arm64-msvc': 15.5.3
- '@next/swc-win32-x64-msvc': 15.5.3
+ '@next/swc-darwin-arm64': 15.5.4
+ '@next/swc-darwin-x64': 15.5.4
+ '@next/swc-linux-arm64-gnu': 15.5.4
+ '@next/swc-linux-arm64-musl': 15.5.4
+ '@next/swc-linux-x64-gnu': 15.5.4
+ '@next/swc-linux-x64-musl': 15.5.4
+ '@next/swc-win32-arm64-msvc': 15.5.4
+ '@next/swc-win32-x64-msvc': 15.5.4
'@opentelemetry/api': 1.9.0
sharp: 0.34.4
transitivePeerDependencies:
@@ -8893,32 +8891,32 @@ snapshots:
react-is@18.3.1: {}
- react-remove-scroll-bar@2.3.8(@types/react@19.1.13)(react@19.1.1):
+ react-remove-scroll-bar@2.3.8(@types/react@19.1.14)(react@19.1.1):
dependencies:
react: 19.1.1
- react-style-singleton: 2.2.3(@types/react@19.1.13)(react@19.1.1)
+ react-style-singleton: 2.2.3(@types/react@19.1.14)(react@19.1.1)
tslib: 2.8.1
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.1.14
- react-remove-scroll@2.7.1(@types/react@19.1.13)(react@19.1.1):
+ react-remove-scroll@2.7.1(@types/react@19.1.14)(react@19.1.1):
dependencies:
react: 19.1.1
- react-remove-scroll-bar: 2.3.8(@types/react@19.1.13)(react@19.1.1)
- react-style-singleton: 2.2.3(@types/react@19.1.13)(react@19.1.1)
+ react-remove-scroll-bar: 2.3.8(@types/react@19.1.14)(react@19.1.1)
+ react-style-singleton: 2.2.3(@types/react@19.1.14)(react@19.1.1)
tslib: 2.8.1
- use-callback-ref: 1.3.3(@types/react@19.1.13)(react@19.1.1)
- use-sidecar: 1.1.3(@types/react@19.1.13)(react@19.1.1)
+ use-callback-ref: 1.3.3(@types/react@19.1.14)(react@19.1.1)
+ use-sidecar: 1.1.3(@types/react@19.1.14)(react@19.1.1)
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.1.14
- react-style-singleton@2.2.3(@types/react@19.1.13)(react@19.1.1):
+ react-style-singleton@2.2.3(@types/react@19.1.14)(react@19.1.1):
dependencies:
get-nonce: 1.0.1
react: 19.1.1
tslib: 2.8.1
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.1.14
react@19.1.1: {}
@@ -9446,31 +9444,29 @@ snapshots:
dependencies:
punycode: 2.3.1
- use-callback-ref@1.3.3(@types/react@19.1.13)(react@19.1.1):
+ use-callback-ref@1.3.3(@types/react@19.1.14)(react@19.1.1):
dependencies:
react: 19.1.1
tslib: 2.8.1
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.1.14
use-debounce@10.0.6(react@19.1.1):
dependencies:
react: 19.1.1
- use-sidecar@1.1.3(@types/react@19.1.13)(react@19.1.1):
+ use-sidecar@1.1.3(@types/react@19.1.14)(react@19.1.1):
dependencies:
detect-node-es: 1.1.0
react: 19.1.1
tslib: 2.8.1
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.1.14
use-sync-external-store@1.5.0(react@19.1.1):
dependencies:
react: 19.1.1
- uuid@9.0.1: {}
-
v8-compile-cache-lib@3.0.1: {}
v8-to-istanbul@9.3.0:
@@ -9626,4 +9622,4 @@ snapshots:
yocto-queue@0.1.0: {}
- zod@4.1.8: {}
+ zod@4.1.11: {}
diff --git a/src/photo/UploadPageClient.tsx b/src/photo/UploadPageClient.tsx
index 48b15055..5b1d13b7 100644
--- a/src/photo/UploadPageClient.tsx
+++ b/src/photo/UploadPageClient.tsx
@@ -10,7 +10,6 @@ import PhotoForm from './form/PhotoForm';
import { Tags } from '@/tag';
import usePhotoFormParent from './form/usePhotoFormParent';
import AiButton from './ai/AiButton';
-import { AiAutoGeneratedField } from './ai';
import { useMemo } from 'react';
import { Recipes } from '@/recipe';
import { Films } from '@/film';
@@ -24,7 +23,6 @@ export default function UploadPageClient({
uniqueRecipes,
uniqueFilms,
hasAiTextGeneration,
- textFieldsToAutoGenerate,
imageThumbnailBase64,
shouldStripGpsData,
}: {
@@ -35,7 +33,6 @@ export default function UploadPageClient({
uniqueRecipes: Recipes
uniqueFilms: Films
hasAiTextGeneration?: boolean
- textFieldsToAutoGenerate?: AiAutoGeneratedField[],
imageThumbnailBase64?: string
shouldStripGpsData?: boolean
}) {
@@ -49,7 +46,6 @@ export default function UploadPageClient({
aiContent,
} = usePhotoFormParent({
photoForm: formDataFromExif,
- textFieldsToAutoGenerate,
imageThumbnailBase64,
});
diff --git a/src/photo/actions.ts b/src/photo/actions.ts
index fce7ebc7..521a2846 100644
--- a/src/photo/actions.ts
+++ b/src/photo/actions.ts
@@ -47,7 +47,7 @@ import {
extractImageDataFromBlobPath,
propagateRecipeTitleIfNecessary,
} from './server';
-import { TAG_FAVS, isPhotoFav, isTagFavs } from '@/tag';
+import { TAG_FAVS, Tags, isPhotoFav, isTagFavs } from '@/tag';
import { convertPhotoToPhotoDbInsert, Photo } from '.';
import { runAuthenticatedAdminServerAction } from '@/auth/server';
import { AiImageQuery, getAiImageQuery, getAiTextFieldsToGenerate } from './ai';
@@ -115,6 +115,7 @@ const addUpload = async ({
excludeFromFeeds,
takenAtLocal,
takenAtNaiveLocal,
+ uniqueTags: _uniqueTags,
onStreamUpdate,
onFinish,
shouldRevalidateAllKeysAndPaths,
@@ -128,6 +129,7 @@ const addUpload = async ({
excludeFromFeeds?: string
takenAtLocal: string
takenAtNaiveLocal: string
+ uniqueTags?: Tags
onStreamUpdate?: (
statusMessage: string,
status?: UrlAddStatus['status'],
@@ -155,21 +157,24 @@ const addUpload = async ({
const caption = formDataFromExif.caption;
const tags = _tags || formDataFromExif.tags;
+ const uniqueTags = _uniqueTags || await getUniqueTags();
+
const {
title: aiTitle,
caption: aiCaption,
tags: aiTags,
- semanticDescription,
- } = await generateAiImageQueries(
- imageResizedBase64,
- getAiTextFieldsToGenerate(
+ semantic,
+ } = await generateAiImageQueries({
+ imageBase64: imageResizedBase64,
+ textFieldsToGenerate: getAiTextFieldsToGenerate(
AI_TEXT_AUTO_GENERATED_FIELDS,
Boolean(title),
Boolean(caption),
Boolean(tags),
),
- title,
- );
+ existingTitle: title,
+ uniqueTags,
+ });
const form: Partial = {
...formDataFromExif,
@@ -179,7 +184,7 @@ const addUpload = async ({
excludeFromFeeds,
hidden,
favorite,
- semanticDescription,
+ semanticDescription: semantic,
takenAt: formDataFromExif.takenAt || takenAtLocal,
takenAtNaive: formDataFromExif.takenAtNaive || takenAtNaiveLocal,
};
@@ -254,6 +259,8 @@ export const addUploadsAction = async ({
progress: ++progress / PROGRESS_TASK_COUNT,
});
+ const uniqueTags = await getUniqueTags();
+
const albumIds = albumTitles
? await createAlbumsAndGetIds(albumTitles)
: [];
@@ -276,6 +283,7 @@ export const addUploadsAction = async ({
excludeFromFeeds,
takenAtLocal,
takenAtNaiveLocal,
+ uniqueTags,
onStreamUpdate: streamUpdate,
onFinish: () => {
addedUploadUrls.push(url);
@@ -561,6 +569,8 @@ export const syncPhotoAction = async (
),
});
+ const uniqueTags = await getUniqueTags();
+
let urlToDelete: string | undefined;
if (formDataFromExif) {
if (await shouldBackfillPhotoStorage(photo) || shouldStripGpsData) {
@@ -582,13 +592,13 @@ export const syncPhotoAction = async (
title: atTitle,
caption: aiCaption,
tags: aiTags,
- semanticDescription: aiSemanticDescription,
- } = await generateAiImageQueries(
- imageResizedBase64,
- photo.updateStatus?.isMissingAiTextFields,
- undefined,
+ semantic: aiSemanticDescription,
+ } = await generateAiImageQueries({
+ imageBase64: imageResizedBase64,
+ textFieldsToGenerate: photo.updateStatus?.isMissingAiTextFields ?? [],
isBatch,
- );
+ uniqueTags,
+ });
const formDataFromPhoto = convertPhotoToFormData(photo);
@@ -646,7 +656,7 @@ export const streamAiImageQueryAction = async (
const existingTags = await getUniqueTags();
return streamOpenAiImageQuery(
imageBase64,
- getAiImageQuery(query, existingTags, existingTitle),
+ getAiImageQuery(query, existingTitle, existingTags),
);
});
diff --git a/src/photo/ai/index.ts b/src/photo/ai/index.ts
index b073850c..af2c1fba 100644
--- a/src/photo/ai/index.ts
+++ b/src/photo/ai/index.ts
@@ -2,6 +2,7 @@
import { Tags } from '@/tag';
import { parseCommaSeparatedKeyString } from '@/utility/key';
+import { z } from 'zod';
export type AiAutoGeneratedField =
'title' |
@@ -51,64 +52,72 @@ export type AiImageQuery =
'caption' |
'title-and-caption' |
'tags' |
- 'description-small' |
- 'description' |
- 'description-large' |
- 'description-semantic';
+ 'semantic';
export const getAiImageQuery = (
query: AiImageQuery,
- existingTags: Tags = [],
existingTitle?: string,
+ existingTags: Tags = [],
): string => {
switch (query) {
- case 'title': return 'Write a compelling title for this image in 3 words or less';
+ case 'title': return 'Write a compelling title for this image in 3 words or less.';
case 'caption': return existingTitle
- ? `Write a pithy caption for this image in 6 words or less and no punctuation that complements the existing title: "${existingTitle}"`
- : 'Write a pithy caption for this image in 6 words or less and no punctuation';
- case 'title-and-caption': return 'Write a compelling title and pithy caption of 8 words or less for this image, using the format Title: "title" Caption: "caption"';
+ ? `Write a pithy caption for this image in 6 words or less and no punctuation that complements the existing title: "${existingTitle}."`
+ : 'Write a pithy caption for this image in 6 words or less and no punctuation.';
+ case 'title-and-caption': return 'Write a compelling title and pithy caption of 8 words or less for this image, using the format Title: "title" Caption: "caption."';
case 'tags':
const tagQuery = 'Describe this image in 1-2 comma-separated unique keywords, with no adjective or adverbs. Avoid using general terms like "nature," "travel," "architecture," or "sky." Use terms that are highly specific to the image and not redundant.';
const tags = existingTags.map(({ tag }) => tag).join(', ');
return tags
? `${tagQuery}. Consider using some of these existing tags, but only if they are relevant: ${tags}.`
: tagQuery;
- case 'description-small': return 'Describe this image succinctly without the initial text "This image shows" or "This is a picture of"';
- case 'description': return 'Describe this image';
- case 'description-large': return 'Describe this image in detail';
- case 'description-semantic': return 'List up to 5 things in this image without description as a comma-separated list';
+ case 'semantic': return 'Describe this image succinctly without initial text like "This image shows" or "This is a picture of."';
}
};
const getAiImageQueryForField = (
field: AiAutoGeneratedField,
- existingTags: Tags = [],
existingTitle?: string,
+ existingTags?: Tags,
) => {
switch(field) {
- case 'title': return `TITLE: ${getAiImageQuery('title', existingTags, existingTitle)}`;
- case 'caption': return `CAPTION: ${getAiImageQuery('caption', existingTags, existingTitle)}`;
- case 'tags': return `TAGS: ${getAiImageQuery('tags', existingTags, existingTitle)}`;
- case 'semantic': return `SEMANTIC: ${getAiImageQuery('description-small', existingTags, existingTitle)}`;
+ case 'title': return `TITLE: ${getAiImageQuery('title', existingTitle, existingTags)}`;
+ case 'caption': return `CAPTION: ${getAiImageQuery('caption', existingTitle, existingTags)}`;
+ case 'tags': return `TAGS: ${getAiImageQuery('tags', existingTitle, existingTags)}`;
+ case 'semantic': return `SEMANTIC: ${getAiImageQuery('semantic', existingTitle, existingTags)}`;
}
};
-export const getAiImageryQuerySet = (
+export const getAiImageQuerySchema = (
fields: AiAutoGeneratedField[],
- existingTags: Tags = [],
existingTitle?: string,
+ existingTags?: Tags,
) => {
- const query = ['Generate a suite of structured meta content for the attached image:' + '\n'];
+ const queryLines = [
+ 'Generate a set of meta content for the attached image:\n',
+ ];
fields.forEach(field => {
- query.push(getAiImageQueryForField(field, existingTags, existingTitle));
+ queryLines.push(getAiImageQueryForField(field, existingTitle, existingTags));
});
+
+ const query = queryLines.join('\n');
+
+ let schema = z.object();
- query.push(`\nRespond with a valid JSON object with the following format: { ${fields.map(field => `${field}: 'string'`).join(', ')} }`);
+ if (fields.includes('title')) {
+ schema = schema.extend({ title: z.string() }); }
+ if (fields.includes('caption')) {
+ schema = schema.extend({ caption: z.string() }); }
+ if (fields.includes('tags')) {
+ schema = schema.extend({ tags: z.string() }); }
+ if (fields.includes('semantic')) {
+ schema = schema.extend({ semantic: z.string() }); }
- console.log(query.join('\n'));
-
- return query.join('\n');
+ return {
+ query,
+ schema,
+ };
};
export const parseTitleAndCaption = (text: string) => {
diff --git a/src/photo/ai/server.ts b/src/photo/ai/server.ts
index 7c4a3d18..e37258ed 100644
--- a/src/photo/ai/server.ts
+++ b/src/photo/ai/server.ts
@@ -1,133 +1,92 @@
-import { generateOpenAiImageQuery } from '@/platforms/openai';
+import { generateOpenAiImageObjectQuery } from '@/platforms/openai';
import {
AiAutoGeneratedField,
- getAiImageQuery,
+ getAiImageQuerySchema,
getAiTextFieldsToGenerate,
- parseTitleAndCaption,
} from '.';
-import { getUniqueTags } from '@/photo/query';
import { AI_TEXT_AUTO_GENERATED_FIELDS } from '@/app/config';
import { PhotoFormData } from '../form';
+import { Tags } from '@/tag';
-export const generateAiImageQueries = async (
- imageBase64?: string,
- textFieldsToGenerate: AiAutoGeneratedField[] = [],
- existingTitle?: string,
- isBatch?: boolean,
-): Promise<{
+export const generateAiImageQueries = async ({
+ imageBase64,
+ textFieldsToGenerate = [],
+ existingTitle,
+ uniqueTags,
+ isBatch,
+}: {
+ imageBase64?: string
+ textFieldsToGenerate: AiAutoGeneratedField[]
+ existingTitle?: string
+ uniqueTags: Tags
+ isBatch?: boolean
+}): Promise<{
title?: string
caption?: string
tags?: string
- semanticDescription?: string
+ semantic?: string
error?: string
}> => {
- let title: string | undefined;
- let caption: string | undefined;
- let tags: string | undefined;
- let semanticDescription: string | undefined;
- let error: string | undefined;
-
- try {
- if (imageBase64) {
- const shouldGenerateTitleAndCaption =
- textFieldsToGenerate.includes('title') &&
- textFieldsToGenerate.includes('caption');
- const shouldGenerateTitle =
- !shouldGenerateTitleAndCaption &&
- textFieldsToGenerate.includes('title');
- const shouldGenerateCaption =
- !shouldGenerateTitleAndCaption &&
- textFieldsToGenerate.includes('caption');
- const shouldGenerateTags = textFieldsToGenerate.includes('tags');
- const shouldGenerateSemantic = textFieldsToGenerate.includes('semantic');
-
- const [
- titleAndCaption,
- _title,
- _caption,
- _tags,
- _semanticDescription,
- ] = await Promise.all([
- shouldGenerateTitleAndCaption ? generateOpenAiImageQuery(
- imageBase64,
- getAiImageQuery('title-and-caption'),
- isBatch,
- ): undefined,
- shouldGenerateTitle ? generateOpenAiImageQuery(
- imageBase64,
- getAiImageQuery('title', undefined, existingTitle),
- isBatch,
- ): undefined,
- shouldGenerateCaption ? generateOpenAiImageQuery(
- imageBase64,
- getAiImageQuery('caption'),
- isBatch,
- ): undefined,
- shouldGenerateTags ? getUniqueTags()
- .then(existingTags => generateOpenAiImageQuery(
- imageBase64,
- getAiImageQuery('tags', existingTags),
- isBatch,
- )): undefined,
- shouldGenerateSemantic ? generateOpenAiImageQuery(
- imageBase64,
- getAiImageQuery('description-small'),
- isBatch,
- ): undefined,
- ]);
-
- if (titleAndCaption) {
- const titleAndCaptionParsed = parseTitleAndCaption(titleAndCaption);
- title = titleAndCaptionParsed.title;
- caption = titleAndCaptionParsed.caption;
- } else {
- title = _title;
- caption = _caption;
- }
- tags = _tags;
- semanticDescription = _semanticDescription;
+ if (imageBase64) {
+ try {
+ const { query, schema } = getAiImageQuerySchema(
+ textFieldsToGenerate,
+ existingTitle,
+ uniqueTags,
+ );
+ return generateOpenAiImageObjectQuery(
+ imageBase64,
+ query,
+ schema,
+ isBatch,
+ );
+ } catch (e: any) {
+ return {
+ error: e.message,
+ };
}
- } catch (e: any) {
- error = e.message;
- console.log('Error generating AI image text', e.message);
+ } else {
+ return {
+ error: 'No image provided',
+ };
}
-
- return {
- title,
- caption,
- tags,
- semanticDescription,
- error,
- };
};
-export const addAiTextToFormData = async (
- formData: Partial = {},
- imageBase64?: string,
- title?: string,
- tags?: string,
-): Promise> => {
+export const addAiTextToFormData = async ({
+ formData = {},
+ imageBase64,
+ existingTitle,
+ existingTags,
+ uniqueTags,
+}: {
+ formData?: Partial
+ imageBase64?: string
+ existingTitle?: string
+ existingTags?: string
+ uniqueTags: Tags
+}): Promise> => {
const {
title: aiTitle,
caption: aiCaption,
tags: aiTags,
- semanticDescription,
- } = await generateAiImageQueries(
+ semantic,
+ } = await generateAiImageQueries({
imageBase64,
- getAiTextFieldsToGenerate(
+ textFieldsToGenerate: getAiTextFieldsToGenerate(
AI_TEXT_AUTO_GENERATED_FIELDS,
- Boolean(title || formData?.title),
+ Boolean(existingTitle || formData?.title),
Boolean(formData?.caption),
- Boolean(tags || formData?.tags),
+ Boolean(existingTags || formData?.tags),
),
- title || formData?.title,
- );
+ existingTitle: existingTitle || formData?.title,
+ uniqueTags,
+ });
return {
...formData,
title: formData?.title || aiTitle,
caption: formData?.caption || aiCaption,
tags: formData?.tags || aiTags,
- semanticDescription,
+ semanticDescription: semantic,
};
};
diff --git a/src/photo/ai/useAiImageQueries.ts b/src/photo/ai/useAiImageQueries.ts
index d1b24d57..1fea05ab 100644
--- a/src/photo/ai/useAiImageQueries.ts
+++ b/src/photo/ai/useAiImageQueries.ts
@@ -43,7 +43,7 @@ export default function useAiImageQueries(
requestSemantic,
semanticDescription,
isLoadingSemantic,
- ] = useAiImageQuery(imageBase64, 'description-small');
+ ] = useAiImageQuery(imageBase64, 'semantic');
const title = _title || titleSolo;
const caption = _caption || captionSolo;
diff --git a/src/photo/form/usePhotoFormParent.ts b/src/photo/form/usePhotoFormParent.ts
index def379bb..d914bda8 100644
--- a/src/photo/form/usePhotoFormParent.ts
+++ b/src/photo/form/usePhotoFormParent.ts
@@ -1,15 +1,12 @@
import { useCallback, useState } from 'react';
import { PhotoFormData, formHasExistingAiTextContent } from '.';
import useAiImageQueries from '../ai/useAiImageQueries';
-import { AiAutoGeneratedField } from '../ai';
export default function usePhotoFormParent({
photoForm,
- textFieldsToAutoGenerate: _textFieldsToAutoGenerate = [],
imageThumbnailBase64,
}: {
photoForm?: Partial
- textFieldsToAutoGenerate?: AiAutoGeneratedField[]
imageThumbnailBase64?: string,
}) {
const [pending, setIsPending] = useState(false);
diff --git a/src/platforms/openai.ts b/src/platforms/openai.ts
index 6d47e774..26357104 100644
--- a/src/platforms/openai.ts
+++ b/src/platforms/openai.ts
@@ -1,4 +1,4 @@
-import { generateText, streamText } from 'ai';
+import { generateText, streamText, generateObject } from 'ai';
import { createStreamableValue } from '@ai-sdk/rsc';
import { createOpenAI } from '@ai-sdk/openai';
import { Ratelimit } from '@upstash/ratelimit';
@@ -6,6 +6,7 @@ import { AI_CONTENT_GENERATION_ENABLED, OPENAI_BASE_URL } from '@/app/config';
import { removeBase64Prefix } from '@/utility/image';
import { cleanUpAiTextResponse } from '@/photo/ai';
import { redis } from '@/platforms/redis';
+import { z } from 'zod';
const RATE_LIMIT_IDENTIFIER = 'openai-image-query';
const MODEL = 'gpt-4o';
@@ -107,6 +108,39 @@ export const generateOpenAiImageQuery = async (
}
};
+export const generateOpenAiImageObjectQuery = async (
+ imageBase64: string,
+ query: string,
+ schema: T,
+ isBatch?: boolean,
+): Promise> => {
+ await checkRateLimitAndThrow(isBatch);
+
+ if (openai) {
+ return generateObject({
+ model: openai(MODEL),
+ messages: [{
+ 'role': 'user',
+ 'content': [
+ {
+ 'type': 'text',
+ 'text': query,
+ }, {
+ 'type': 'image',
+ 'image': removeBase64Prefix(imageBase64),
+ },
+ ],
+ }],
+ schema,
+ }).then(result => Object.fromEntries(Object
+ .entries(result.object || {})
+ .map(([k, v]) => [k, cleanUpAiTextResponse(v as string)]),
+ ) as z.infer);
+ } else {
+ throw new Error('No OpenAI client');
+ }
+};
+
export const testOpenAiConnection = async () => {
await checkRateLimitAndThrow();