From 29378e885e49b335dc7f1514d12d86e7b8c3e9c1 Mon Sep 17 00:00:00 2001 From: krokosik Date: Wed, 14 Oct 2026 21:33:18 +0200 Subject: [PATCH 01/59] Run the nextjs 16 codemod --- .gitignore | 2 + AGENTS.md | 2 + package.json | 14 +- pnpm-lock.yaml | 2272 ++++++++++++++++++------------- src/{middleware.ts => proxy.ts} | 2 +- 5 files changed, 1314 insertions(+), 978 deletions(-) rename src/{middleware.ts => proxy.ts} (93%) diff --git a/.gitignore b/.gitignore index 9121487df..1250587ed 100644 --- a/.gitignore +++ b/.gitignore @@ -67,3 +67,5 @@ SEED_STATISTICS.md # Agents .worktrees/ docs/superpowers/ +# next-agents-md +.next-docs/ diff --git a/AGENTS.md b/AGENTS.md index 487b5075a..5a7a2943f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -372,3 +372,5 @@ For version-specific docs, use `/org/project/version` from the `library` output If a command fails with a quota error, inform the user and suggest `npx ctx7@latest login` or setting `CONTEXT7_API_KEY` env var for higher limits. Do not silently fall back to training data. + +[Next.js Docs Index]|root: ./.next-docs|STOP. What you remember about Next.js is WRONG for this project. Always search docs and read before any task.|If docs missing, run this command from this file's directory: npx @next/codemod agents-md --output AGENTS.md|01-app/01-getting-started:{01-installation.mdx,02-project-structure.mdx,03-layouts-and-pages.mdx,04-linking-and-navigating.mdx,05-server-and-client-components.mdx,06-partial-prerendering.mdx,07-fetching-data.mdx,08-updating-data.mdx,09-caching-and-revalidating.mdx,10-error-handling.mdx,11-css.mdx,12-images.mdx,13-fonts.mdx,14-metadata-and-og-images.mdx,15-route-handlers-and-middleware.mdx,16-deploying.mdx,17-upgrading.mdx}|01-app/02-guides:{analytics.mdx,authentication.mdx,backend-for-frontend.mdx,caching.mdx,ci-build-caching.mdx,content-security-policy.mdx,css-in-js.mdx,custom-server.mdx,data-security.mdx,debugging.mdx,draft-mode.mdx,environment-variables.mdx,forms.mdx,incremental-static-regeneration.mdx,instrumentation.mdx,internationalization.mdx,json-ld.mdx,lazy-loading.mdx,local-development.mdx,mdx.mdx,memory-usage.mdx,multi-tenant.mdx,multi-zones.mdx,open-telemetry.mdx,package-bundling.mdx,prefetching.mdx,production-checklist.mdx,progressive-web-apps.mdx,redirecting.mdx,sass.mdx,scripts.mdx,self-hosting.mdx,single-page-applications.mdx,static-exports.mdx,tailwind-v3-css.mdx,third-party-libraries.mdx,videos.mdx}|01-app/02-guides/migrating:{app-router-migration.mdx,from-create-react-app.mdx,from-vite.mdx}|01-app/02-guides/testing:{cypress.mdx,jest.mdx,playwright.mdx,vitest.mdx}|01-app/02-guides/upgrading:{codemods.mdx,version-14.mdx,version-15.mdx}|01-app/03-api-reference:{07-edge.mdx,08-turbopack.mdx}|01-app/03-api-reference/01-directives:{use-cache.mdx,use-client.mdx,use-server.mdx}|01-app/03-api-reference/02-components:{font.mdx,form.mdx,image.mdx,link.mdx,script.mdx}|01-app/03-api-reference/03-file-conventions/01-metadata:{app-icons.mdx,manifest.mdx,opengraph-image.mdx,robots.mdx,sitemap.mdx}|01-app/03-api-reference/03-file-conventions:{default.mdx,dynamic-routes.mdx,error.mdx,forbidden.mdx,instrumentation-client.mdx,instrumentation.mdx,intercepting-routes.mdx,layout.mdx,loading.mdx,mdx-components.mdx,middleware.mdx,not-found.mdx,page.mdx,parallel-routes.mdx,public-folder.mdx,route-groups.mdx,route-segment-config.mdx,route.mdx,src-folder.mdx,template.mdx,unauthorized.mdx}|01-app/03-api-reference/04-functions:{after.mdx,cacheLife.mdx,cacheTag.mdx,connection.mdx,cookies.mdx,draft-mode.mdx,fetch.mdx,forbidden.mdx,generate-image-metadata.mdx,generate-metadata.mdx,generate-sitemaps.mdx,generate-static-params.mdx,generate-viewport.mdx,headers.mdx,image-response.mdx,next-request.mdx,next-response.mdx,not-found.mdx,permanentRedirect.mdx,redirect.mdx,revalidatePath.mdx,revalidateTag.mdx,unauthorized.mdx,unstable_cache.mdx,unstable_noStore.mdx,unstable_rethrow.mdx,use-link-status.mdx,use-params.mdx,use-pathname.mdx,use-report-web-vitals.mdx,use-router.mdx,use-search-params.mdx,use-selected-layout-segment.mdx,use-selected-layout-segments.mdx,userAgent.mdx}|01-app/03-api-reference/05-config/01-next-config-js:{allowedDevOrigins.mdx,appDir.mdx,assetPrefix.mdx,authInterrupts.mdx,basePath.mdx,browserDebugInfoInTerminal.mdx,cacheComponents.mdx,cacheLife.mdx,compress.mdx,crossOrigin.mdx,cssChunking.mdx,devIndicators.mdx,distDir.mdx,env.mdx,eslint.mdx,expireTime.mdx,exportPathMap.mdx,generateBuildId.mdx,generateEtags.mdx,headers.mdx,htmlLimitedBots.mdx,httpAgentOptions.mdx,images.mdx,incrementalCacheHandlerPath.mdx,inlineCss.mdx,logging.mdx,mdxRs.mdx,middlewareClientMaxBodySize.mdx,onDemandEntries.mdx,optimizePackageImports.mdx,output.mdx,pageExtensions.mdx,poweredByHeader.mdx,ppr.mdx,productionBrowserSourceMaps.mdx,reactCompiler.mdx,reactMaxHeadersLength.mdx,reactStrictMode.mdx,redirects.mdx,rewrites.mdx,sassOptions.mdx,serverActions.mdx,serverComponentsHmrCache.mdx,serverExternalPackages.mdx,staleTimes.mdx,staticGeneration.mdx,taint.mdx,trailingSlash.mdx,transpilePackages.mdx,turbopack.mdx,turbopackPersistentCaching.mdx,typedRoutes.mdx,typescript.mdx,urlImports.mdx,useCache.mdx,useLightningcss.mdx,viewTransition.mdx,webVitalsAttribution.mdx,webpack.mdx}|01-app/03-api-reference/05-config:{02-typescript.mdx,03-eslint.mdx}|01-app/03-api-reference/06-cli:{create-next-app.mdx,next.mdx}|02-pages/01-getting-started:{01-installation.mdx,02-project-structure.mdx,04-images.mdx,05-fonts.mdx,06-css.mdx,11-deploying.mdx}|02-pages/02-guides:{amp.mdx,analytics.mdx,authentication.mdx,babel.mdx,ci-build-caching.mdx,content-security-policy.mdx,css-in-js.mdx,custom-server.mdx,debugging.mdx,draft-mode.mdx,environment-variables.mdx,forms.mdx,incremental-static-regeneration.mdx,instrumentation.mdx,internationalization.mdx,lazy-loading.mdx,mdx.mdx,multi-zones.mdx,open-telemetry.mdx,package-bundling.mdx,post-css.mdx,preview-mode.mdx,production-checklist.mdx,redirecting.mdx,sass.mdx,scripts.mdx,self-hosting.mdx,static-exports.mdx,tailwind-v3-css.mdx,third-party-libraries.mdx}|02-pages/02-guides/migrating:{app-router-migration.mdx,from-create-react-app.mdx,from-vite.mdx}|02-pages/02-guides/testing:{cypress.mdx,jest.mdx,playwright.mdx,vitest.mdx}|02-pages/02-guides/upgrading:{codemods.mdx,version-10.mdx,version-11.mdx,version-12.mdx,version-13.mdx,version-14.mdx,version-9.mdx}|02-pages/03-building-your-application/01-routing:{01-pages-and-layouts.mdx,02-dynamic-routes.mdx,03-linking-and-navigating.mdx,05-custom-app.mdx,06-custom-document.mdx,07-api-routes.mdx,08-custom-error.mdx}|02-pages/03-building-your-application/02-rendering:{01-server-side-rendering.mdx,02-static-site-generation.mdx,04-automatic-static-optimization.mdx,05-client-side-rendering.mdx}|02-pages/03-building-your-application/03-data-fetching:{01-get-static-props.mdx,02-get-static-paths.mdx,03-forms-and-mutations.mdx,03-get-server-side-props.mdx,05-client-side.mdx}|02-pages/03-building-your-application/06-configuring:{12-error-handling.mdx}|02-pages/04-api-reference:{06-edge.mdx,08-turbopack.mdx}|02-pages/04-api-reference/01-components:{font.mdx,form.mdx,head.mdx,image-legacy.mdx,image.mdx,link.mdx,script.mdx}|02-pages/04-api-reference/02-file-conventions:{instrumentation.mdx,middleware.mdx,public-folder.mdx,src-folder.mdx}|02-pages/04-api-reference/03-functions:{get-initial-props.mdx,get-server-side-props.mdx,get-static-paths.mdx,get-static-props.mdx,next-request.mdx,next-response.mdx,use-amp.mdx,use-report-web-vitals.mdx,use-router.mdx,userAgent.mdx}|02-pages/04-api-reference/04-config/01-next-config-js:{allowedDevOrigins.mdx,assetPrefix.mdx,basePath.mdx,bundlePagesRouterDependencies.mdx,compress.mdx,crossOrigin.mdx,devIndicators.mdx,distDir.mdx,env.mdx,eslint.mdx,exportPathMap.mdx,generateBuildId.mdx,generateEtags.mdx,headers.mdx,httpAgentOptions.mdx,images.mdx,middlewareClientMaxBodySize.mdx,onDemandEntries.mdx,optimizePackageImports.mdx,output.mdx,pageExtensions.mdx,poweredByHeader.mdx,productionBrowserSourceMaps.mdx,reactStrictMode.mdx,redirects.mdx,rewrites.mdx,runtime-configuration.mdx,serverExternalPackages.mdx,trailingSlash.mdx,transpilePackages.mdx,turbo.mdx,typescript.mdx,urlImports.mdx,useLightningcss.mdx,webVitalsAttribution.mdx,webpack.mdx}|02-pages/04-api-reference/04-config:{01-typescript.mdx,02-eslint.mdx}|02-pages/04-api-reference/05-cli:{create-next-app.mdx,next.mdx}|03-architecture:{accessibility.mdx,fast-refresh.mdx,nextjs-compiler.mdx,supported-browsers.mdx}|04-community:{01-contribution-guide.mdx,02-rspack.mdx} diff --git a/package.json b/package.json index b33b7b175..6ab333eb4 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "intl-messageformat": "^10.7.18", "lucide-react": "^0.544.0", "nanoid": "^5.0.6", - "next": "15.5.18", + "next": "16.4.1", "next-auth": "^4.24.14", "next-i18next": "^15.4.3", "next-themes": "^0.4.6", @@ -71,9 +71,9 @@ "nordigen-node": "^1.4.1", "plaid": "^38.1.0", "radix-ui": "^1.4.2", - "react": "19.2.1", + "react": "19.3.1", "react-day-picker": "^9.7.0", - "react-dom": "19.2.1", + "react-dom": "19.3.1", "react-easy-crop": "^5.5.7", "react-hook-form": "^7.50.1", "react-i18next": "^15.5.3", @@ -97,8 +97,8 @@ "@types/jest": "^30.0.0", "@types/node": "^22.15.21", "@types/nodemailer": "^8.0.0", - "@types/react": "19.2.1", - "@types/react-dom": "19.2.1", + "@types/react": "19.3.0", + "@types/react-dom": "19.3.0", "@types/web-push": "^3.6.3", "@typescript/native-preview": "7.0.0-dev.20251016.1", "husky": "^9.1.7", @@ -149,7 +149,9 @@ "ajv@>=7.0.0-alpha.0 <8.18.0": ">=8.18.0", "effect@<3.20.0": ">=3.20.0", "picomatch@<2.3.2": ">=2.3.2", - "serialize-javascript@<7.0.5": ">=7.0.5" + "serialize-javascript@<7.0.5": ">=7.0.5", + "@types/react": "19.3.0", + "@types/react-dom": "19.3.0" } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 712dc6ab3..745787d76 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,8 @@ overrides: effect@<3.20.0: '>=3.20.0' picomatch@<2.3.2: '>=2.3.2' serialize-javascript@<7.0.5: '>=7.0.5' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 importers: @@ -27,37 +29,37 @@ importers: dependencies: '@heroicons/react': specifier: ^2.1.1 - version: 2.2.0(react@19.2.1) + version: 2.2.0(react@19.3.1) '@hookform/resolvers': specifier: ^3.3.4 - version: 3.10.0(react-hook-form@7.68.0(react@19.2.1)) + version: 3.10.0(react-hook-form@7.68.0(react@19.3.1)) '@icons-pack/react-simple-icons': specifier: ^13.7.0 - version: 13.8.0(react@19.2.1) + version: 13.8.0(react@19.3.1) '@next-auth/prisma-adapter': specifier: ^1.0.7 - version: 1.0.7(@prisma/client@6.19.1(prisma@6.19.3(typescript@5.7.3))(typescript@5.7.3))(next-auth@4.24.14(next@15.5.18(@babel/core@7.28.3)(@playwright/test@1.62.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(nodemailer@9.0.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)) + version: 1.0.7(@prisma/client@6.19.1(prisma@6.19.3(typescript@5.7.3))(typescript@5.7.3))(next-auth@4.24.14(next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(nodemailer@9.0.1)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)) '@prisma/client': specifier: ^6.16.2 version: 6.19.1(prisma@6.19.3(typescript@5.7.3))(typescript@5.7.3) '@serwist/next': specifier: ^9.2.1 - version: 9.2.3(next@15.5.18(@babel/core@7.28.3)(@playwright/test@1.62.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(typescript@5.7.3) + version: 9.2.3(next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(typescript@5.7.3) '@t3-oss/env-nextjs': specifier: ^0.13.8 version: 0.13.10(typescript@5.7.3)(zod@3.25.76) '@tanstack/react-query': specifier: ^5.79.2 - version: 5.90.12(react@19.2.1) + version: 5.90.12(react@19.3.1) '@trpc/client': specifier: ^11.2.0 version: 11.8.0(@trpc/server@11.8.0(typescript@5.7.3))(typescript@5.7.3) '@trpc/next': specifier: ^11.2.0 - version: 11.8.0(@tanstack/react-query@5.90.12(react@19.2.1))(@trpc/client@11.8.0(@trpc/server@11.8.0(typescript@5.7.3))(typescript@5.7.3))(@trpc/react-query@11.8.0(@tanstack/react-query@5.90.12(react@19.2.1))(@trpc/client@11.8.0(@trpc/server@11.8.0(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.8.0(typescript@5.7.3))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.7.3))(@trpc/server@11.8.0(typescript@5.7.3))(next@15.5.18(@babel/core@7.28.3)(@playwright/test@1.62.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.7.3) + version: 11.8.0(@tanstack/react-query@5.90.12(react@19.3.1))(@trpc/client@11.8.0(@trpc/server@11.8.0(typescript@5.7.3))(typescript@5.7.3))(@trpc/react-query@11.8.0(@tanstack/react-query@5.90.12(react@19.3.1))(@trpc/client@11.8.0(@trpc/server@11.8.0(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.8.0(typescript@5.7.3))(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(typescript@5.7.3))(@trpc/server@11.8.0(typescript@5.7.3))(next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(typescript@5.7.3) '@trpc/react-query': specifier: ^11.2.0 - version: 11.8.0(@tanstack/react-query@5.90.12(react@19.2.1))(@trpc/client@11.8.0(@trpc/server@11.8.0(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.8.0(typescript@5.7.3))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.7.3) + version: 11.8.0(@tanstack/react-query@5.90.12(react@19.3.1))(@trpc/client@11.8.0(@trpc/server@11.8.0(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.8.0(typescript@5.7.3))(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(typescript@5.7.3) '@trpc/server': specifier: ^11.2.0 version: 11.8.0(typescript@5.7.3) @@ -75,7 +77,7 @@ importers: version: 2.1.1 cmdk: specifier: ^1.1.1 - version: 1.1.1(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + version: 1.1.1(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) cron-parser: specifier: ^4.9.0 version: 4.9.0 @@ -102,28 +104,28 @@ importers: version: 2.4.4(intl-messageformat@10.7.18) input-otp: specifier: ^1.2.3 - version: 1.4.2(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + version: 1.4.2(react-dom@19.3.1(react@19.3.1))(react@19.3.1) intl-messageformat: specifier: ^10.7.18 version: 10.7.18 lucide-react: specifier: ^0.544.0 - version: 0.544.0(react@19.2.1) + version: 0.544.0(react@19.3.1) nanoid: specifier: ^5.0.6 version: 5.1.6 next: - specifier: 15.5.18 - version: 15.5.18(@babel/core@7.28.3)(@playwright/test@1.62.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + specifier: 16.4.1 + version: 16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) next-auth: specifier: ^4.24.14 - version: 4.24.14(next@15.5.18(@babel/core@7.28.3)(@playwright/test@1.62.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(nodemailer@9.0.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + version: 4.24.14(next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(nodemailer@9.0.1)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) next-i18next: specifier: ^15.4.3 - version: 15.4.3(i18next@25.10.10(typescript@5.7.3))(next@15.5.18(@babel/core@7.28.3)(@playwright/test@1.62.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(react-i18next@15.7.4(i18next@25.10.10(typescript@5.7.3))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.7.3))(react@19.2.1) + version: 15.4.3(i18next@25.10.10(typescript@5.7.3))(next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(react-i18next@15.7.4(i18next@25.10.10(typescript@5.7.3))(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(typescript@5.7.3))(react@19.3.1) next-themes: specifier: ^0.4.6 - version: 0.4.6(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + version: 0.4.6(react-dom@19.3.1(react@19.3.1))(react@19.3.1) nodemailer: specifier: ^9.0.1 version: 9.0.1 @@ -135,40 +137,40 @@ importers: version: 38.1.0 radix-ui: specifier: ^1.4.2 - version: 1.4.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + version: 1.4.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) react: - specifier: 19.2.1 - version: 19.2.1 + specifier: 19.3.1 + version: 19.3.1 react-day-picker: specifier: ^9.7.0 - version: 9.12.0(react@19.2.1) + version: 9.12.0(react@19.3.1) react-dom: - specifier: 19.2.1 - version: 19.2.1(react@19.2.1) + specifier: 19.3.1 + version: 19.3.1(react@19.3.1) react-easy-crop: specifier: ^5.5.7 - version: 5.5.7(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + version: 5.5.7(react-dom@19.3.1(react@19.3.1))(react@19.3.1) react-hook-form: specifier: ^7.50.1 - version: 7.68.0(react@19.2.1) + version: 7.68.0(react@19.3.1) react-i18next: specifier: ^15.5.3 - version: 15.7.4(i18next@25.10.10(typescript@5.7.3))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.7.3) + version: 15.7.4(i18next@25.10.10(typescript@5.7.3))(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(typescript@5.7.3) react-plaid-link: specifier: 4.1.1 - version: 4.1.1(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + version: 4.1.1(react-dom@19.3.1(react@19.3.1))(react@19.3.1) sharp: specifier: ^0.34.5 version: 0.34.5 sonner: specifier: ^1.4.0 - version: 1.7.4(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + version: 1.7.4(react-dom@19.3.1(react@19.3.1))(react@19.3.1) superjson: specifier: ^2.2.1 version: 2.2.6 vaul: specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + version: 1.1.2(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) web-push: specifier: ^3.6.7 version: 3.6.7 @@ -177,7 +179,7 @@ importers: version: 3.25.76 zustand: specifier: ^4.5.0 - version: 4.5.7(@types/react@19.2.1)(react@19.2.1) + version: 4.5.7(@types/react@19.3.0)(react@19.3.1) devDependencies: '@faker-js/faker': specifier: 10.1.0 @@ -193,7 +195,7 @@ importers: version: 6.10.0(@testing-library/dom@10.4.1) '@testing-library/react': specifier: ^16.3.0 - version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.4(@testing-library/dom@10.4.1) @@ -210,11 +212,11 @@ importers: specifier: ^8.0.0 version: 8.0.0 '@types/react': - specifier: 19.2.1 - version: 19.2.1 + specifier: 19.3.0 + version: 19.3.0 '@types/react-dom': - specifier: 19.2.1 - version: 19.2.1(@types/react@19.2.1) + specifier: 19.3.0 + version: 19.3.0(@types/react@19.3.0) '@types/web-push': specifier: ^3.6.3 version: 3.6.4 @@ -504,6 +506,9 @@ packages: '@emnapi/core@1.4.5': resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==} + '@emnapi/runtime@1.11.3': + resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==} + '@emnapi/runtime@1.7.1': resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} @@ -719,139 +724,285 @@ packages: resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} engines: {node: '>=18'} + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} + '@img/sharp-darwin-arm64@0.34.5': resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] + '@img/sharp-darwin-arm64@0.35.5': + resolution: {integrity: sha512-QRUlFQ0WxvdWyqqG/WtI3iupfD5rBzmCHXSdPsY91sAtVtTo7Q4cb6zOccZ3gqEqkr0f1As1ehLqmEpDsRf+lg==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [darwin] + '@img/sharp-darwin-x64@0.34.5': resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] + '@img/sharp-darwin-x64@0.35.5': + resolution: {integrity: sha512-+BR255RhDlpygUpOc/Jdt1nT6DQ3XG/ERo5wbcdOf5Q320dKtPCKPLR1LJs9VGXRaMa8l1uUa0tkCNOXiAxZUw==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [darwin] + + '@img/sharp-freebsd-wasm32@0.35.5': + resolution: {integrity: sha512-Y/z91nEZ4uIBX5X3nfTovjU9lHNKFYbL2lpHCLVNmXQK03VIZvXBBt0KxbPGp2SdGSF+2mQU4e+hQaWOt86iAw==} + engines: {node: '>=20.9.0'} + os: [freebsd] + '@img/sharp-libvips-darwin-arm64@1.2.4': resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} cpu: [arm64] os: [darwin] + '@img/sharp-libvips-darwin-arm64@1.3.4': + resolution: {integrity: sha512-5R89nBYiRdUlSWJxPhO+GVtaXzXSxKnRu/xqMn3KTA3L9EB9Oy/P+Nn2f2vlhPuUdy/Zusb2DarbyTpGCfEDuw==} + cpu: [arm64] + os: [darwin] + '@img/sharp-libvips-darwin-x64@1.2.4': resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} cpu: [x64] os: [darwin] + '@img/sharp-libvips-darwin-x64@1.3.4': + resolution: {integrity: sha512-iR2OKH80yi0U+dUplyh3/xdpFvps6YkCwsXenIJxqxR1v9o+xtKTGbS9H7cps+2Vxjc8B1j96p75NmTGjIhtpQ==} + cpu: [x64] + os: [darwin] + '@img/sharp-libvips-linux-arm64@1.2.4': resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] + '@img/sharp-libvips-linux-arm64@1.3.4': + resolution: {integrity: sha512-Y3dgX/6lE2QhQb+Gxy0WZxfg9MEm/JBjamZpS2IklP7xIQoKN4hzAm7KcMVGtaVDt3neE9OKBC7vAfonA/Lr1A==} + cpu: [arm64] + os: [linux] + '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] + '@img/sharp-libvips-linux-arm@1.3.4': + resolution: {integrity: sha512-LmRtTsOHuvM2+wlO2Db37dx5MiZhB0FvSunciw48YjdOkZz9KAiRbm8ujeMOA1INqmei5NapFxYEK1D1ZSidmw==} + cpu: [arm] + os: [linux] + '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] + '@img/sharp-libvips-linux-ppc64@1.3.4': + resolution: {integrity: sha512-Le6boB8Tai0Nis+gIxIpKx68UDVVIqdR8Tin5Yf1z2LJJQLDJvCDRqRu+jC2qCoD+eIomonmOwB4smBRxfVpYQ==} + cpu: [ppc64] + os: [linux] + '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] + '@img/sharp-libvips-linux-riscv64@1.3.4': + resolution: {integrity: sha512-aHkkIEHPRdQEegJN20MLmGtxYD9R2wQr3Cwpddnu5+YKMt6Uzax7S9h5gpZTo8wyrGuZSlfQ63OevL5mTyOC7Q==} + cpu: [riscv64] + os: [linux] + '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] + '@img/sharp-libvips-linux-s390x@1.3.4': + resolution: {integrity: sha512-ra/mB6MikESDUO7Yg+Mi95bFBb9GsObURuhnOv3OqknjGe9sZrG8tCe9q0xSIGrtLgvgw0gKnFWcK4blSgQOuQ==} + cpu: [s390x] + os: [linux] + '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] + '@img/sharp-libvips-linux-x64@1.3.4': + resolution: {integrity: sha512-GJ//SSXbnwSDes02umB3nDJLFcQzw8a18V8fyhqr6tV515tOEMdImjjxj1AoafMRz56F3PHgftnj1QEKSU1zkw==} + cpu: [x64] + os: [linux] + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] + '@img/sharp-libvips-linuxmusl-arm64@1.3.4': + resolution: {integrity: sha512-hvulFwtjUcagsis6BBxHwGFwWoNZjgYmULGVrZcyfNbjA8hKILbRxGg15/7w5HDyXHXUos/j6baAWqnCyQ2DWA==} + cpu: [arm64] + os: [linux] + '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] + '@img/sharp-libvips-linuxmusl-x64@1.3.4': + resolution: {integrity: sha512-6zXKeE/p39I1AmA3cJG35eyBGNqNddLnUXjhwBnsGjFPWqf5VKkDBEqaEkPDoTEtkxwi2vv8Tcr2mDyP4So7Fg==} + cpu: [x64] + os: [linux] + '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + '@img/sharp-linux-arm64@0.35.5': + resolution: {integrity: sha512-LYVx5JTsOM2CBzmxreh+nl64/3H6Xb09iSLknqH47z2T2DFFxDeFLP5y4dJwe6H7uGQlHPyEEtIqyo3DYsRwdQ==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [linux] + '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + '@img/sharp-linux-arm@0.35.5': + resolution: {integrity: sha512-LEaXK2WdXVK5ykcw0buWyPMsmLLL2vpHLD6yrNSW+JGEL3BZPA4tpKN6iaMc4AxTTAoaX/sU1rOL51lcIz48ZQ==} + engines: {node: '>=20.9.0'} + cpu: [arm] + os: [linux] + '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] + '@img/sharp-linux-ppc64@0.35.5': + resolution: {integrity: sha512-QVxAAq8evVRI9ia2vqgwrmWucn5Dfv+JdWzj75pD8omHLPSP7f8p20O8jxzjCcuCEQEOtYOZUmX1hkiZ0kdevA==} + engines: {node: '>=20.9.0'} + cpu: [ppc64] + os: [linux] + '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] + '@img/sharp-linux-riscv64@0.35.5': + resolution: {integrity: sha512-LtdreXguaavKODPIfzJ4kffx7UNt1omwtK0rch4EBbbSTXPnxWmYSayXdLJw0fJzQ97kHt1gL/yh4tvU+nCyRQ==} + engines: {node: '>=20.9.0'} + cpu: [riscv64] + os: [linux] + '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + '@img/sharp-linux-s390x@0.35.5': + resolution: {integrity: sha512-UZasTOFiYzotTsGOCu42BfUzP6Tu6Do/947iRm1RsLKvlllxwGcn4RN27LibGWceix4Y+Pmw3jsnTcCQIgWjqA==} + engines: {node: '>=20.9.0'} + cpu: [s390x] + os: [linux] + '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + '@img/sharp-linux-x64@0.35.5': + resolution: {integrity: sha512-SxFtLTeJInhAA9Q836kux2vZNeOBQEx658qvbboZScr0wIARym3IcGmW7KpVD5sbVg0Ojy+udFQdayYIZyoNog==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [linux] + '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + '@img/sharp-linuxmusl-arm64@0.35.5': + resolution: {integrity: sha512-9HbMclmI1zlNkFRs3z9/eBtDjfD0sGlrX1z6b1qwmiFY5ElDLh4BC0LPBdVp7z1DXFiKlIcznf+ZlsuZzLxQqg==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [linux] + '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + '@img/sharp-linuxmusl-x64@0.35.5': + resolution: {integrity: sha512-4KOphqB035HrVdqLZfCgMzzERrQkkzOwRhl4OAkRO1YCldbaFjySXMaK534Mo0V+LndnlJk+sbUyLeU0ULyD1A==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [linux] + '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] + '@img/sharp-wasm32@0.35.5': + resolution: {integrity: sha512-Ptsga1su4tQx+LLF1ECS9U6nz5kmrXKo6XVbtR48Ke3ZRxxgaWBu7IDtEe1quo8hiupwm6WFqxVlXaSf7IINGQ==} + engines: {node: '>=20.9.0'} + + '@img/sharp-webcontainers-wasm32@0.35.5': + resolution: {integrity: sha512-hfhF/FmoQyTUkA0bIKFOtw536BQSeBMe6BF6QyWlrPxT754+TFLaZ7sKKTfvvM0yJgKgaYTwnFCIZ/GuDw5SUA==} + engines: {node: '>=20.9.0'} + cpu: [wasm32] + '@img/sharp-win32-arm64@0.34.5': resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [win32] + '@img/sharp-win32-arm64@0.35.5': + resolution: {integrity: sha512-X4t7g+7ZA5DKblCBEXGjUqqemj4vczING/5viFwAL8h4N3qYeyjwdCvRLHi4EdOUI+2Z7UFlp1VM+p/AuEtm6Q==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [win32] + '@img/sharp-win32-ia32@0.34.5': resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] + '@img/sharp-win32-ia32@0.35.5': + resolution: {integrity: sha512-5Zm82LoBc43nhwNybZlG7Y1KO//Zhsn306fQl29ZOuStHLGTo3BWL83q3cznX0poxSAMuYL1On/BHBxkBeKr6A==} + engines: {node: ^20.9.0} + cpu: [ia32] + os: [win32] + '@img/sharp-win32-x64@0.34.5': resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] + '@img/sharp-win32-x64@0.35.5': + resolution: {integrity: sha512-x76eH0vEiHlcMQu8Y8IenntaACtddpT6W0wmXtWrnKcnKI7ME5DdgqhAD6SEWOEl1v2zDvkZDhFA9KnURwpfqg==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [win32] + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -987,53 +1138,53 @@ packages: '@prisma/client': '>=2.26.0 || >=3' next-auth: ^4 - '@next/env@15.5.18': - resolution: {integrity: sha512-hAV85Ckd9QR6RvH04MEKwsfLTksvFpO47j9xwtoIuvuPnlwecpSi+uZTtm8HirVbtlI2Fnz//xpcSTjFdyJk+g==} + '@next/env@16.4.1': + resolution: {integrity: sha512-5sUUrrSvs/2/2LnLoesybMGx12EtPB46fdZ6RhAw0XDGSPxU2LFyQBB7yuEiOFFJPKmBY6+q2jTr1/AMbnp0/g==} - '@next/swc-darwin-arm64@15.5.18': - resolution: {integrity: sha512-w0WvQf1n+txiwns/9pwIQteCJpZTbxzO2SE0FLcwuD4v0WEh1JPOjdyxWL21XwJsdpx8cFRjyzxzCS/siP7HcQ==} + '@next/swc-darwin-arm64@16.4.1': + resolution: {integrity: sha512-U+hQ5Gj3fpzf4fveTIF3dpUFYhaSW8vHhdAnbiIomzXzg7boreYFgBqprepXFtW4sw+aTttiNmg0gew/iFNhbg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.5.18': - resolution: {integrity: sha512-znn71QmDuxm+BOaglihMZfvyySMnNljkVIY5Z2TCssBmm+WqL6c19VhtH5ktFkHa8EZ2bnTUpcNcmNSQsg67og==} + '@next/swc-darwin-x64@16.4.1': + resolution: {integrity: sha512-/hqC3V1XLUjhMASf/WridKdO9FXoEgN3HBWmtKbj00MPgnltutfraWJ3bYTpCRIgEIpbjJyOVLpYgAhh/BkdcQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.5.18': - resolution: {integrity: sha512-yPPe5MNL+igZUa+OsqQJisqSfh6oarIuA1Q0BDxljGJhRQyZeP+WRHh7rs/jZUGMh5aY0YdIjXZG0VohkKkUdw==} + '@next/swc-linux-arm64-gnu@16.4.1': + resolution: {integrity: sha512-GHzncHbcaS9g95kcvTNtKQW3aCLoR+xc3Jm7qrkpk1R+D2BjMHIPyvQGRPKCdMX95BsH/421jBUK06q9tEwzjw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.5.18': - resolution: {integrity: sha512-glaCczEWIrHsokFZ3pP08U4BpKxwIdnT+txdOM32OBgpL9Yw4aqx8NejmgtZQZOdstQ5f0L3CasIZudzCuD+nw==} + '@next/swc-linux-arm64-musl@16.4.1': + resolution: {integrity: sha512-1SuJyDxW/PR9dHJat/ZRgcYLhuSZ+1psP4DlKb2tKIuXbjygqpLrJWRSq+onZQBv8LcmU67EIrmb6c3XTaJLjw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.5.18': - resolution: {integrity: sha512-oUfg2EgJmU3R0OCOWiokGFUTvZiPfXtriXiuF3YNxRoROCdgvTedHIzYoeKH34gsZxS/V7mHbfq2hpAHwhH1/A==} + '@next/swc-linux-x64-gnu@16.4.1': + resolution: {integrity: sha512-Istng1hMGp9TGO4lUqeKLd70MPN/OOkucVTP2Nmj+gLkwBgmPqUw8CJYBCC7nbl/B/23bBCcjCI5Hsh6hazC1A==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.5.18': - resolution: {integrity: sha512-JLxSP3KTd9iu/bvUMQxH7RJo9xKSHf55/6RPE4a6FTSZygGn7uvZbCej0AHXydwkggQGSD9UddSjwv6Xz5ESfA==} + '@next/swc-linux-x64-musl@16.4.1': + resolution: {integrity: sha512-aSC9wMNiZRRFVpPkPWBzRwLQxIGm/CiQcXyFF1XNcgodb+uMxdk7aSSGGpDXCbnvZdf4itjHxpOd5h7i7zaiYw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.5.18': - resolution: {integrity: sha512-ir1v7enP52K2HNz3tQQvwF+x7VNxBk1ciiZ18WBPvxf4C59IqdfmHPJYK3vH7rSxpuCVw/8C712wTXNAtEp+NA==} + '@next/swc-win32-arm64-msvc@16.4.1': + resolution: {integrity: sha512-t/myvwFDlypMUjRvbBf8qLPyuaB0iXYYdBtwMt6DM6f+60wtGr4bSYholdPqNeV5VUXZhrpMwfza829kmhS3iA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.5.18': - resolution: {integrity: sha512-LIu5me6QTANCd25E7I5uIEfvgQ06RK7tvHAbYo3zCb3VpxQEPvMcSpd87NwUABDT6MbGPdEGR5VRiK4PPTJhQg==} + '@next/swc-win32-x64-msvc@16.4.1': + resolution: {integrity: sha512-6ICqPo9awCkrtYNPhwkx1uU7rlFWrZRrIboDHS2LU+jv088UBYQtmJ25h6pCp27/+FZjF6BQ4Te4ErugyMeuBg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1247,8 +1398,8 @@ packages: '@radix-ui/react-accessible-icon@1.1.7': resolution: {integrity: sha512-XM+E4WXl0OqUJFovy6GjmxxFyx9opfCAIUku4dlKRd5YEPqt4kALOkQOp0Of6reHuUkJuiPBEc5k0o4z4lTC8A==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1260,8 +1411,8 @@ packages: '@radix-ui/react-accordion@1.2.12': resolution: {integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1273,8 +1424,8 @@ packages: '@radix-ui/react-alert-dialog@1.1.15': resolution: {integrity: sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1286,8 +1437,8 @@ packages: '@radix-ui/react-arrow@1.1.7': resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1299,8 +1450,8 @@ packages: '@radix-ui/react-aspect-ratio@1.1.7': resolution: {integrity: sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1312,8 +1463,8 @@ packages: '@radix-ui/react-avatar@1.1.10': resolution: {integrity: sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1325,8 +1476,8 @@ packages: '@radix-ui/react-checkbox@1.3.3': resolution: {integrity: sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1338,8 +1489,8 @@ packages: '@radix-ui/react-collapsible@1.1.12': resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1351,8 +1502,8 @@ packages: '@radix-ui/react-collection@1.1.7': resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1364,7 +1515,7 @@ packages: '@radix-ui/react-compose-refs@1.1.2': resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} peerDependencies: - '@types/react': '*' + '@types/react': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1373,8 +1524,8 @@ packages: '@radix-ui/react-context-menu@2.2.16': resolution: {integrity: sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1386,7 +1537,7 @@ packages: '@radix-ui/react-context@1.1.2': resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} peerDependencies: - '@types/react': '*' + '@types/react': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1395,8 +1546,8 @@ packages: '@radix-ui/react-dialog@1.1.14': resolution: {integrity: sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1408,8 +1559,8 @@ packages: '@radix-ui/react-dialog@1.1.15': resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1421,7 +1572,7 @@ packages: '@radix-ui/react-direction@1.1.1': resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} peerDependencies: - '@types/react': '*' + '@types/react': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1430,8 +1581,8 @@ packages: '@radix-ui/react-dismissable-layer@1.1.10': resolution: {integrity: sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1443,8 +1594,8 @@ packages: '@radix-ui/react-dismissable-layer@1.1.11': resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1456,8 +1607,8 @@ packages: '@radix-ui/react-dropdown-menu@2.1.16': resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1469,7 +1620,7 @@ packages: '@radix-ui/react-focus-guards@1.1.2': resolution: {integrity: sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==} peerDependencies: - '@types/react': '*' + '@types/react': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1478,7 +1629,7 @@ packages: '@radix-ui/react-focus-guards@1.1.3': resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} peerDependencies: - '@types/react': '*' + '@types/react': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1487,8 +1638,8 @@ packages: '@radix-ui/react-focus-scope@1.1.7': resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1500,8 +1651,8 @@ packages: '@radix-ui/react-form@0.1.8': resolution: {integrity: sha512-QM70k4Zwjttifr5a4sZFts9fn8FzHYvQ5PiB19O2HsYibaHSVt9fH9rzB0XZo/YcM+b7t/p7lYCT/F5eOeF5yQ==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1513,8 +1664,8 @@ packages: '@radix-ui/react-hover-card@1.1.15': resolution: {integrity: sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1526,7 +1677,7 @@ packages: '@radix-ui/react-id@1.1.1': resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} peerDependencies: - '@types/react': '*' + '@types/react': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1535,8 +1686,8 @@ packages: '@radix-ui/react-label@2.1.7': resolution: {integrity: sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1548,8 +1699,8 @@ packages: '@radix-ui/react-menu@2.1.16': resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1561,8 +1712,8 @@ packages: '@radix-ui/react-menubar@1.1.16': resolution: {integrity: sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1574,8 +1725,8 @@ packages: '@radix-ui/react-navigation-menu@1.2.14': resolution: {integrity: sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1587,8 +1738,8 @@ packages: '@radix-ui/react-one-time-password-field@0.1.8': resolution: {integrity: sha512-ycS4rbwURavDPVjCb5iS3aG4lURFDILi6sKI/WITUMZ13gMmn/xGjpLoqBAalhJaDk8I3UbCM5GzKHrnzwHbvg==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1600,8 +1751,8 @@ packages: '@radix-ui/react-password-toggle-field@0.1.3': resolution: {integrity: sha512-/UuCrDBWravcaMix4TdT+qlNdVwOM1Nck9kWx/vafXsdfj1ChfhOdfi3cy9SGBpWgTXwYCuboT/oYpJy3clqfw==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1613,8 +1764,8 @@ packages: '@radix-ui/react-popover@1.1.15': resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1626,8 +1777,8 @@ packages: '@radix-ui/react-popper@1.2.8': resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1639,8 +1790,8 @@ packages: '@radix-ui/react-portal@1.1.9': resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1652,8 +1803,8 @@ packages: '@radix-ui/react-presence@1.1.4': resolution: {integrity: sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1665,8 +1816,8 @@ packages: '@radix-ui/react-presence@1.1.5': resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1678,8 +1829,8 @@ packages: '@radix-ui/react-primitive@2.1.3': resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1691,8 +1842,8 @@ packages: '@radix-ui/react-progress@1.1.7': resolution: {integrity: sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1704,8 +1855,8 @@ packages: '@radix-ui/react-radio-group@1.3.8': resolution: {integrity: sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1717,8 +1868,8 @@ packages: '@radix-ui/react-roving-focus@1.1.11': resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1730,8 +1881,8 @@ packages: '@radix-ui/react-scroll-area@1.2.10': resolution: {integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1743,8 +1894,8 @@ packages: '@radix-ui/react-select@2.2.6': resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1756,8 +1907,8 @@ packages: '@radix-ui/react-separator@1.1.7': resolution: {integrity: sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1769,8 +1920,8 @@ packages: '@radix-ui/react-slider@1.3.6': resolution: {integrity: sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1782,7 +1933,7 @@ packages: '@radix-ui/react-slot@1.2.3': resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} peerDependencies: - '@types/react': '*' + '@types/react': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1791,8 +1942,8 @@ packages: '@radix-ui/react-switch@1.2.6': resolution: {integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1804,8 +1955,8 @@ packages: '@radix-ui/react-tabs@1.1.13': resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1817,8 +1968,8 @@ packages: '@radix-ui/react-toast@1.2.15': resolution: {integrity: sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1830,8 +1981,8 @@ packages: '@radix-ui/react-toggle-group@1.1.11': resolution: {integrity: sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1843,8 +1994,8 @@ packages: '@radix-ui/react-toggle@1.1.10': resolution: {integrity: sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1856,8 +2007,8 @@ packages: '@radix-ui/react-toolbar@1.1.11': resolution: {integrity: sha512-4ol06/1bLoFu1nwUqzdD4Y5RZ9oDdKeiHIsntug54Hcr1pgaHiPqHFEaXI1IFP/EsOfROQZ8Mig9VTIRza6Tjg==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1869,8 +2020,8 @@ packages: '@radix-ui/react-tooltip@1.2.8': resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1882,7 +2033,7 @@ packages: '@radix-ui/react-use-callback-ref@1.1.1': resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} peerDependencies: - '@types/react': '*' + '@types/react': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1891,7 +2042,7 @@ packages: '@radix-ui/react-use-controllable-state@1.2.2': resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} peerDependencies: - '@types/react': '*' + '@types/react': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1900,7 +2051,7 @@ packages: '@radix-ui/react-use-effect-event@0.0.2': resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} peerDependencies: - '@types/react': '*' + '@types/react': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1909,7 +2060,7 @@ packages: '@radix-ui/react-use-escape-keydown@1.1.1': resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} peerDependencies: - '@types/react': '*' + '@types/react': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1918,7 +2069,7 @@ packages: '@radix-ui/react-use-is-hydrated@0.1.0': resolution: {integrity: sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==} peerDependencies: - '@types/react': '*' + '@types/react': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1927,7 +2078,7 @@ packages: '@radix-ui/react-use-layout-effect@1.1.1': resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} peerDependencies: - '@types/react': '*' + '@types/react': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1936,7 +2087,7 @@ packages: '@radix-ui/react-use-previous@1.1.1': resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} peerDependencies: - '@types/react': '*' + '@types/react': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1945,7 +2096,7 @@ packages: '@radix-ui/react-use-rect@1.1.1': resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} peerDependencies: - '@types/react': '*' + '@types/react': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1954,7 +2105,7 @@ packages: '@radix-ui/react-use-size@1.1.1': resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} peerDependencies: - '@types/react': '*' + '@types/react': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1963,8 +2114,8 @@ packages: '@radix-ui/react-visually-hidden@1.2.3': resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2027,8 +2178,8 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@swc/helpers@0.5.15': - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@swc/helpers@0.5.23': + resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==} '@t3-oss/env-core@0.13.10': resolution: {integrity: sha512-NNFfdlJ+HmPHkLi2HKy7nwuat9SIYOxei9K10lO2YlcSObDILY7mHZNSHsieIM3A0/5OOzw/P/b+yLvPdaG52g==} @@ -2176,8 +2327,8 @@ packages: engines: {node: '>=18'} peerDependencies: '@testing-library/dom': ^10.0.0 - '@types/react': ^18.0.0 || ^19.0.0 - '@types/react-dom': ^18.0.0 || ^19.0.0 + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 peerDependenciesMeta: @@ -2287,13 +2438,13 @@ packages: '@types/nodemailer@8.0.0': resolution: {integrity: sha512-fyf8jWULsCo0d0BuoQ75i6IeoHs47qcqxWc7yUdUcV0pOZGjUTTOvwdG1PRXUDqN/8A64yQdQdnA2pZgcdi+cA==} - '@types/react-dom@19.2.1': - resolution: {integrity: sha512-/EEvYBdT3BflCWvTMO7YkYBHVE9Ci6XdqZciZANQgKpaiDRGOLIlRo91jbTNRQjgPFWVaRxcYc0luVNFitz57A==} + '@types/react-dom@19.3.0': + resolution: {integrity: sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==} peerDependencies: - '@types/react': ^19.2.0 + '@types/react': 19.3.0 - '@types/react@19.2.1': - resolution: {integrity: sha512-1U5NQWh/GylZQ50ZMnnPjkYHEaGhg6t5i/KI0LDDh3t4E3h3T3vzm+GLY2BRzMfIjSBwzm6tginoZl5z0O/qsA==} + '@types/react@19.3.0': + resolution: {integrity: sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==} '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} @@ -2552,6 +2703,11 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + baseline-browser-mapping@2.11.28: + resolution: {integrity: sha512-br0LOmjJqr6Rt4AEkadbcNf67Zpo7EPwKsWbjnRrJIa1QYFHQBqM4C7F2WTbV8ahTEcg1Eo+Y0aWjjORInYFyA==} + engines: {node: '>=6.0.0'} + hasBin: true + baseline-browser-mapping@2.9.9: resolution: {integrity: sha512-V8fbOCSeOFvlDj7LLChUcqbZrdKD9RU/VR260piF1790vT0mfLSwGc/Qzxv3IqiTukOpNtItePa0HBpMAj7MDg==} hasBin: true @@ -2738,8 +2894,8 @@ packages: resolution: {integrity: sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==} engines: {node: '>=18'} - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} data-urls@5.0.0: resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} @@ -3558,6 +3714,11 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@3.3.20: + resolution: {integrity: sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + nanoid@5.1.6: resolution: {integrity: sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==} engines: {node: ^18 || >=20} @@ -3600,9 +3761,9 @@ 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.18: - resolution: {integrity: sha512-eKL8zUJkX9Y5lE+RX/2YJoItVdGlIscyVyboeD9wSpp0PaGqjoA4tTpT2qPqz9ax+5IzGESyLSeZ/RCwbSZ2uQ==} - engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + next@16.4.1: + resolution: {integrity: sha512-uc657V62E34fOI6W5NtG9IzwsPcms0Z60grz2MJGtglgD+pTFnNt4Yw2PzaU622tfX4vhrDgLZzicE2YlhI20Q==} + engines: {node: '>=20.9.0'} hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 @@ -3791,14 +3952,14 @@ packages: engines: {node: '>=20'} hasBin: true - postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.5.14: resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.23: + resolution: {integrity: sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==} + engines: {node: ^10 || ^12 || >=14} + preact-render-to-string@5.2.6: resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==} peerDependencies: @@ -3918,8 +4079,8 @@ packages: radix-ui@1.4.3: resolution: {integrity: sha512-aWizCQiyeAenIdUbqEpXgRA1ya65P13NKn/W8rWkcN0OPkRDxdBVLWnIEDsS2RpwCK2nobI7oMUSmexzTDyAmA==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -3937,10 +4098,10 @@ packages: peerDependencies: react: '>=16.8.0' - react-dom@19.2.1: - resolution: {integrity: sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==} + react-dom@19.3.1: + resolution: {integrity: sha512-Y0bARz53lhEC1NMCASs0/j+faB/zqt3R8hpvg1e8+61ZVJ4UL0UdC4cBbXfZMcIuhrfgeILTLe+ZeBCavQPtKQ==} peerDependencies: - react: ^19.2.1 + react: ^19.3.1 react-easy-crop@5.5.7: resolution: {integrity: sha512-kYo4NtMeXFQB7h1U+h5yhUkE46WQbQdq7if54uDlbMdZHdRgNehfvaFrXnFw5NR1PNoUOJIfTwLnWmEx/MaZnA==} @@ -3989,7 +4150,7 @@ packages: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} peerDependencies: - '@types/react': '*' + '@types/react': 19.3.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': @@ -3999,7 +4160,7 @@ packages: resolution: {integrity: sha512-sGsQtcjMqdQyijAHytfGEELB8FufGbfXIsvUTe+NLx1GDRJCXtCFLBLUI1eyZCKXXvbEU2C6gai0PZKoIE9Vbg==} engines: {node: '>=10'} peerDependencies: - '@types/react': '*' + '@types/react': 19.3.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -4009,7 +4170,7 @@ packages: resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} engines: {node: '>=10'} peerDependencies: - '@types/react': '*' + '@types/react': 19.3.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -4019,14 +4180,14 @@ packages: resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} engines: {node: '>=10'} peerDependencies: - '@types/react': '*' + '@types/react': 19.3.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - react@19.2.1: - resolution: {integrity: sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==} + react@19.3.1: + resolution: {integrity: sha512-QNhWdt7nrgVWWQG58QuGsAR3jv3Hbe4mb4vz7w2csnHavciZJgda1CPNaldF6eVxv90ud3jUXpKlHL69gO38yw==} engines: {node: '>=0.10.0'} readdirp@4.1.2: @@ -4072,8 +4233,8 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} - scheduler@0.27.0: - resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + scheduler@0.28.0: + resolution: {integrity: sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==} semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} @@ -4084,6 +4245,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + serwist@9.2.3: resolution: {integrity: sha512-menorUH09SpLvU7R25TvG0TuQ12MUDpQ5NKGohbtREF8YI+0D++Abn59XCmvvMp2n740rBizIkeqWq0m6U+++g==} peerDependencies: @@ -4096,6 +4262,15 @@ packages: resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + sharp@0.35.5: + resolution: {integrity: sha512-Ywn4OnzGukp7CDMrp08RQ50YKmuwG47brZgIVPTvBaaAfQlRlygrRqSrxdCiL9M+LlzLBiJ68IR1QqvzHyjC7g==} + engines: {node: '>=20.9.0'} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -4321,7 +4496,7 @@ packages: resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} peerDependencies: - '@types/react': '*' + '@types/react': 19.3.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -4331,7 +4506,7 @@ packages: resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} engines: {node: '>=10'} peerDependencies: - '@types/react': '*' + '@types/react': 19.3.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -4492,7 +4667,7 @@ packages: resolution: {integrity: sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==} engines: {node: '>=12.7.0'} peerDependencies: - '@types/react': '>=16.8' + '@types/react': 19.3.0 immer: '>=9.0.6' react: '>=16.8' peerDependenciesMeta: @@ -4749,6 +4924,11 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.11.3': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.7.1': dependencies: tslib: 2.8.1 @@ -4848,11 +5028,11 @@ snapshots: '@floating-ui/core': 1.7.3 '@floating-ui/utils': 0.2.10 - '@floating-ui/react-dom@2.1.6(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@floating-ui/react-dom@2.1.6(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@floating-ui/dom': 1.7.4 - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) '@floating-ui/utils@0.2.10': {} @@ -4882,114 +5062,221 @@ snapshots: dependencies: tslib: 2.8.1 - '@heroicons/react@2.2.0(react@19.2.1)': + '@heroicons/react@2.2.0(react@19.3.1)': dependencies: - react: 19.2.1 + react: 19.3.1 - '@hookform/resolvers@3.10.0(react-hook-form@7.68.0(react@19.2.1))': + '@hookform/resolvers@3.10.0(react-hook-form@7.68.0(react@19.3.1))': dependencies: - react-hook-form: 7.68.0(react@19.2.1) + react-hook-form: 7.68.0(react@19.3.1) - '@icons-pack/react-simple-icons@13.8.0(react@19.2.1)': + '@icons-pack/react-simple-icons@13.8.0(react@19.3.1)': dependencies: - react: 19.2.1 + react: 19.3.1 '@img/colour@1.0.0': {} + '@img/colour@1.1.0': + optional: true + '@img/sharp-darwin-arm64@0.34.5': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.2.4 optional: true + '@img/sharp-darwin-arm64@0.35.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.3.4 + optional: true + '@img/sharp-darwin-x64@0.34.5': optionalDependencies: '@img/sharp-libvips-darwin-x64': 1.2.4 optional: true + '@img/sharp-darwin-x64@0.35.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.3.4 + optional: true + + '@img/sharp-freebsd-wasm32@0.35.5': + dependencies: + '@img/sharp-wasm32': 0.35.5 + optional: true + '@img/sharp-libvips-darwin-arm64@1.2.4': optional: true + '@img/sharp-libvips-darwin-arm64@1.3.4': + optional: true + '@img/sharp-libvips-darwin-x64@1.2.4': optional: true + '@img/sharp-libvips-darwin-x64@1.3.4': + optional: true + '@img/sharp-libvips-linux-arm64@1.2.4': optional: true + '@img/sharp-libvips-linux-arm64@1.3.4': + optional: true + '@img/sharp-libvips-linux-arm@1.2.4': optional: true + '@img/sharp-libvips-linux-arm@1.3.4': + optional: true + '@img/sharp-libvips-linux-ppc64@1.2.4': optional: true + '@img/sharp-libvips-linux-ppc64@1.3.4': + optional: true + '@img/sharp-libvips-linux-riscv64@1.2.4': optional: true + '@img/sharp-libvips-linux-riscv64@1.3.4': + optional: true + '@img/sharp-libvips-linux-s390x@1.2.4': optional: true + '@img/sharp-libvips-linux-s390x@1.3.4': + optional: true + '@img/sharp-libvips-linux-x64@1.2.4': optional: true + '@img/sharp-libvips-linux-x64@1.3.4': + optional: true + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': optional: true + '@img/sharp-libvips-linuxmusl-arm64@1.3.4': + optional: true + '@img/sharp-libvips-linuxmusl-x64@1.2.4': optional: true + '@img/sharp-libvips-linuxmusl-x64@1.3.4': + optional: true + '@img/sharp-linux-arm64@0.34.5': optionalDependencies: '@img/sharp-libvips-linux-arm64': 1.2.4 optional: true + '@img/sharp-linux-arm64@0.35.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.3.4 + optional: true + '@img/sharp-linux-arm@0.34.5': optionalDependencies: '@img/sharp-libvips-linux-arm': 1.2.4 optional: true + '@img/sharp-linux-arm@0.35.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.3.4 + optional: true + '@img/sharp-linux-ppc64@0.34.5': optionalDependencies: '@img/sharp-libvips-linux-ppc64': 1.2.4 optional: true + '@img/sharp-linux-ppc64@0.35.5': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.3.4 + optional: true + '@img/sharp-linux-riscv64@0.34.5': optionalDependencies: '@img/sharp-libvips-linux-riscv64': 1.2.4 optional: true + '@img/sharp-linux-riscv64@0.35.5': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.3.4 + optional: true + '@img/sharp-linux-s390x@0.34.5': optionalDependencies: '@img/sharp-libvips-linux-s390x': 1.2.4 optional: true + '@img/sharp-linux-s390x@0.35.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.3.4 + optional: true + '@img/sharp-linux-x64@0.34.5': optionalDependencies: '@img/sharp-libvips-linux-x64': 1.2.4 optional: true + '@img/sharp-linux-x64@0.35.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.3.4 + optional: true + '@img/sharp-linuxmusl-arm64@0.34.5': optionalDependencies: '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 optional: true + '@img/sharp-linuxmusl-arm64@0.35.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.3.4 + optional: true + '@img/sharp-linuxmusl-x64@0.34.5': optionalDependencies: '@img/sharp-libvips-linuxmusl-x64': 1.2.4 optional: true + '@img/sharp-linuxmusl-x64@0.35.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.3.4 + optional: true + '@img/sharp-wasm32@0.34.5': dependencies: '@emnapi/runtime': 1.7.1 optional: true + '@img/sharp-wasm32@0.35.5': + dependencies: + '@emnapi/runtime': 1.11.3 + optional: true + + '@img/sharp-webcontainers-wasm32@0.35.5': + dependencies: + '@img/sharp-wasm32': 0.35.5 + optional: true + '@img/sharp-win32-arm64@0.34.5': optional: true + '@img/sharp-win32-arm64@0.35.5': + optional: true + '@img/sharp-win32-ia32@0.34.5': optional: true + '@img/sharp-win32-ia32@0.35.5': + optional: true + '@img/sharp-win32-x64@0.34.5': optional: true + '@img/sharp-win32-x64@0.35.5': + optional: true + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -5230,35 +5517,35 @@ snapshots: '@tybys/wasm-util': 0.10.0 optional: true - '@next-auth/prisma-adapter@1.0.7(@prisma/client@6.19.1(prisma@6.19.3(typescript@5.7.3))(typescript@5.7.3))(next-auth@4.24.14(next@15.5.18(@babel/core@7.28.3)(@playwright/test@1.62.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(nodemailer@9.0.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))': + '@next-auth/prisma-adapter@1.0.7(@prisma/client@6.19.1(prisma@6.19.3(typescript@5.7.3))(typescript@5.7.3))(next-auth@4.24.14(next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(nodemailer@9.0.1)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))': dependencies: '@prisma/client': 6.19.1(prisma@6.19.3(typescript@5.7.3))(typescript@5.7.3) - next-auth: 4.24.14(next@15.5.18(@babel/core@7.28.3)(@playwright/test@1.62.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(nodemailer@9.0.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + next-auth: 4.24.14(next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(nodemailer@9.0.1)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) - '@next/env@15.5.18': {} + '@next/env@16.4.1': {} - '@next/swc-darwin-arm64@15.5.18': + '@next/swc-darwin-arm64@16.4.1': optional: true - '@next/swc-darwin-x64@15.5.18': + '@next/swc-darwin-x64@16.4.1': optional: true - '@next/swc-linux-arm64-gnu@15.5.18': + '@next/swc-linux-arm64-gnu@16.4.1': optional: true - '@next/swc-linux-arm64-musl@15.5.18': + '@next/swc-linux-arm64-musl@16.4.1': optional: true - '@next/swc-linux-x64-gnu@15.5.18': + '@next/swc-linux-x64-gnu@16.4.1': optional: true - '@next/swc-linux-x64-musl@15.5.18': + '@next/swc-linux-x64-musl@16.4.1': optional: true - '@next/swc-win32-arm64-msvc@15.5.18': + '@next/swc-win32-arm64-msvc@16.4.1': optional: true - '@next/swc-win32-x64-msvc@15.5.18': + '@next/swc-win32-x64-msvc@16.4.1': optional: true '@noble/hashes@1.8.0': {} @@ -5394,797 +5681,797 @@ snapshots: '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-accessible-icon@1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-accessible-icon@1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-aspect-ratio@1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-aspect-ratio@1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) - - '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': - dependencies: - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) + + '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': + dependencies: + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.1)(react@19.2.1)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.3.0)(react@19.3.1)': dependencies: - react: 19.2.1 + react: 19.3.1 optionalDependencies: - '@types/react': 19.2.1 + '@types/react': 19.3.0 - '@radix-ui/react-context-menu@2.2.16(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-context-menu@2.2.16(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-context@1.1.2(@types/react@19.2.1)(react@19.2.1)': + '@radix-ui/react-context@1.1.2(@types/react@19.3.0)(react@19.3.1)': dependencies: - react: 19.2.1 + react: 19.3.1 optionalDependencies: - '@types/react': 19.2.1 + '@types/react': 19.3.0 - '@radix-ui/react-dialog@1.1.14(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-dialog@1.1.14(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.1)(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.3.0)(react@19.3.1) aria-hidden: 1.2.6 - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) - react-remove-scroll: 2.7.0(@types/react@19.2.1)(react@19.2.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) + react-remove-scroll: 2.7.0(@types/react@19.3.0)(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.1)(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.3.0)(react@19.3.1) aria-hidden: 1.2.6 - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) - react-remove-scroll: 2.7.2(@types/react@19.2.1)(react@19.2.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) + react-remove-scroll: 2.7.2(@types/react@19.3.0)(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-direction@1.1.1(@types/react@19.2.1)(react@19.2.1)': + '@radix-ui/react-direction@1.1.1(@types/react@19.3.0)(react@19.3.1)': dependencies: - react: 19.2.1 + react: 19.3.1 optionalDependencies: - '@types/react': 19.2.1 + '@types/react': 19.3.0 - '@radix-ui/react-dismissable-layer@1.1.10(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-dismissable-layer@1.1.10(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-focus-guards@1.1.2(@types/react@19.2.1)(react@19.2.1)': + '@radix-ui/react-focus-guards@1.1.2(@types/react@19.3.0)(react@19.3.1)': dependencies: - react: 19.2.1 + react: 19.3.1 optionalDependencies: - '@types/react': 19.2.1 + '@types/react': 19.3.0 - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.1)(react@19.2.1)': + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.3.0)(react@19.3.1)': dependencies: - react: 19.2.1 + react: 19.3.1 optionalDependencies: - '@types/react': 19.2.1 + '@types/react': 19.3.0 - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-form@0.1.8(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-form@0.1.8(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-label': 2.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-label': 2.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-hover-card@1.1.15(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-hover-card@1.1.15(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-id@1.1.1(@types/react@19.2.1)(react@19.2.1)': + '@radix-ui/react-id@1.1.1(@types/react@19.3.0)(react@19.3.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 optionalDependencies: - '@types/react': 19.2.1 + '@types/react': 19.3.0 - '@radix-ui/react-label@2.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-label@2.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-menu@2.1.16(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.1)(react@19.2.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.3.0)(react@19.3.1) aria-hidden: 1.2.6 - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) - react-remove-scroll: 2.7.2(@types/react@19.2.1)(react@19.2.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) + react-remove-scroll: 2.7.2(@types/react@19.3.0)(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-menubar@1.1.16(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-menubar@1.1.16(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-one-time-password-field@0.1.8(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-one-time-password-field@0.1.8(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-password-toggle-field@0.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-password-toggle-field@0.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-popover@1.1.15(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.1)(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.3.0)(react@19.3.1) aria-hidden: 1.2.6 - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) - react-remove-scroll: 2.7.2(@types/react@19.2.1)(react@19.2.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) + react-remove-scroll: 2.7.2(@types/react@19.3.0)(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) - - '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': - dependencies: - '@floating-ui/react-dom': 2.1.6(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.1)(react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) + + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': + dependencies: + '@floating-ui/react-dom': 2.1.6(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.3.0)(react@19.3.1) '@radix-ui/rect': 1.1.1 - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-presence@1.1.4(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-presence@1.1.4(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-progress@1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-progress@1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-select@2.2.6(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) aria-hidden: 1.2.6 - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) - react-remove-scroll: 2.7.2(@types/react@19.2.1)(react@19.2.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) + react-remove-scroll: 2.7.2(@types/react@19.3.0)(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-separator@1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-separator@1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-slider@1.3.6(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-slider@1.3.6(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-slot@1.2.3(@types/react@19.2.1)(react@19.2.1)': + '@radix-ui/react-slot@1.2.3(@types/react@19.3.0)(react@19.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 optionalDependencies: - '@types/react': 19.2.1 + '@types/react': 19.3.0 - '@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-switch@1.2.6(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-toast@1.2.15(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-toast@1.2.15(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-toolbar@1.1.11(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-toolbar@1.1.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.1)(react@19.2.1)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.3.0)(react@19.3.1)': dependencies: - react: 19.2.1 + react: 19.3.1 optionalDependencies: - '@types/react': 19.2.1 + '@types/react': 19.3.0 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.1)(react@19.2.1)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.3.0)(react@19.3.1)': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 optionalDependencies: - '@types/react': 19.2.1 + '@types/react': 19.3.0 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.1)(react@19.2.1)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.3.0)(react@19.3.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 optionalDependencies: - '@types/react': 19.2.1 + '@types/react': 19.3.0 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.1)(react@19.2.1)': + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.3.0)(react@19.3.1)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 optionalDependencies: - '@types/react': 19.2.1 + '@types/react': 19.3.0 - '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.2.1)(react@19.2.1)': + '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.3.0)(react@19.3.1)': dependencies: - react: 19.2.1 - use-sync-external-store: 1.5.0(react@19.2.1) + react: 19.3.1 + use-sync-external-store: 1.5.0(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 + '@types/react': 19.3.0 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.1)(react@19.2.1)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.3.0)(react@19.3.1)': dependencies: - react: 19.2.1 + react: 19.3.1 optionalDependencies: - '@types/react': 19.2.1 + '@types/react': 19.3.0 - '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.1)(react@19.2.1)': + '@radix-ui/react-use-previous@1.1.1(@types/react@19.3.0)(react@19.3.1)': dependencies: - react: 19.2.1 + react: 19.3.1 optionalDependencies: - '@types/react': 19.2.1 + '@types/react': 19.3.0 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.1)(react@19.2.1)': + '@radix-ui/react-use-rect@1.1.1(@types/react@19.3.0)(react@19.3.1)': dependencies: '@radix-ui/rect': 1.1.1 - react: 19.2.1 + react: 19.3.1 optionalDependencies: - '@types/react': 19.2.1 + '@types/react': 19.3.0 - '@radix-ui/react-use-size@1.1.1(@types/react@19.2.1)(react@19.2.1)': + '@radix-ui/react-use-size@1.1.1(@types/react@19.3.0)(react@19.3.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.1)(react@19.2.1) - react: 19.2.1 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.3.0)(react@19.3.1) + react: 19.3.1 optionalDependencies: - '@types/react': 19.2.1 + '@types/react': 19.3.0 - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) '@radix-ui/rect@1.1.1': {} @@ -6198,14 +6485,14 @@ snapshots: optionalDependencies: typescript: 5.7.3 - '@serwist/next@9.2.3(next@15.5.18(@babel/core@7.28.3)(@playwright/test@1.62.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(typescript@5.7.3)': + '@serwist/next@9.2.3(next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(typescript@5.7.3)': dependencies: '@serwist/build': 9.2.3(typescript@5.7.3) '@serwist/webpack-plugin': 9.2.3(typescript@5.7.3) '@serwist/window': 9.2.3(typescript@5.7.3) chalk: 5.6.2 glob: 10.5.0 - next: 15.5.18(@babel/core@7.28.3)(@playwright/test@1.62.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + next: 16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) serwist: 9.2.3(typescript@5.7.3) zod: 4.1.12 optionalDependencies: @@ -6240,7 +6527,7 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@swc/helpers@0.5.15': + '@swc/helpers@0.5.23': dependencies: tslib: 2.8.1 @@ -6327,10 +6614,10 @@ snapshots: '@tanstack/query-core@5.90.12': {} - '@tanstack/react-query@5.90.12(react@19.2.1)': + '@tanstack/react-query@5.90.12(react@19.3.1)': dependencies: '@tanstack/query-core': 5.90.12 - react: 19.2.1 + react: 19.3.1 '@testing-library/dom@10.4.1': dependencies: @@ -6353,15 +6640,15 @@ snapshots: picocolors: 1.1.1 redent: 3.0.0 - '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)': dependencies: '@babel/runtime': 7.29.2 '@testing-library/dom': 10.4.1 - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) '@testing-library/user-event@14.6.4(@testing-library/dom@10.4.1)': dependencies: @@ -6372,25 +6659,25 @@ snapshots: '@trpc/server': 11.8.0(typescript@5.7.3) typescript: 5.7.3 - '@trpc/next@11.8.0(@tanstack/react-query@5.90.12(react@19.2.1))(@trpc/client@11.8.0(@trpc/server@11.8.0(typescript@5.7.3))(typescript@5.7.3))(@trpc/react-query@11.8.0(@tanstack/react-query@5.90.12(react@19.2.1))(@trpc/client@11.8.0(@trpc/server@11.8.0(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.8.0(typescript@5.7.3))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.7.3))(@trpc/server@11.8.0(typescript@5.7.3))(next@15.5.18(@babel/core@7.28.3)(@playwright/test@1.62.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.7.3)': + '@trpc/next@11.8.0(@tanstack/react-query@5.90.12(react@19.3.1))(@trpc/client@11.8.0(@trpc/server@11.8.0(typescript@5.7.3))(typescript@5.7.3))(@trpc/react-query@11.8.0(@tanstack/react-query@5.90.12(react@19.3.1))(@trpc/client@11.8.0(@trpc/server@11.8.0(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.8.0(typescript@5.7.3))(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(typescript@5.7.3))(@trpc/server@11.8.0(typescript@5.7.3))(next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(typescript@5.7.3)': dependencies: '@trpc/client': 11.8.0(@trpc/server@11.8.0(typescript@5.7.3))(typescript@5.7.3) '@trpc/server': 11.8.0(typescript@5.7.3) - next: 15.5.18(@babel/core@7.28.3)(@playwright/test@1.62.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + next: 16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) typescript: 5.7.3 optionalDependencies: - '@tanstack/react-query': 5.90.12(react@19.2.1) - '@trpc/react-query': 11.8.0(@tanstack/react-query@5.90.12(react@19.2.1))(@trpc/client@11.8.0(@trpc/server@11.8.0(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.8.0(typescript@5.7.3))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.7.3) + '@tanstack/react-query': 5.90.12(react@19.3.1) + '@trpc/react-query': 11.8.0(@tanstack/react-query@5.90.12(react@19.3.1))(@trpc/client@11.8.0(@trpc/server@11.8.0(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.8.0(typescript@5.7.3))(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(typescript@5.7.3) - '@trpc/react-query@11.8.0(@tanstack/react-query@5.90.12(react@19.2.1))(@trpc/client@11.8.0(@trpc/server@11.8.0(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.8.0(typescript@5.7.3))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.7.3)': + '@trpc/react-query@11.8.0(@tanstack/react-query@5.90.12(react@19.3.1))(@trpc/client@11.8.0(@trpc/server@11.8.0(typescript@5.7.3))(typescript@5.7.3))(@trpc/server@11.8.0(typescript@5.7.3))(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(typescript@5.7.3)': dependencies: - '@tanstack/react-query': 5.90.12(react@19.2.1) + '@tanstack/react-query': 5.90.12(react@19.3.1) '@trpc/client': 11.8.0(@trpc/server@11.8.0(typescript@5.7.3))(typescript@5.7.3) '@trpc/server': 11.8.0(typescript@5.7.3) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) typescript: 5.7.3 '@trpc/server@11.8.0(typescript@5.7.3)': @@ -6439,7 +6726,7 @@ snapshots: '@types/hoist-non-react-statics@3.3.6': dependencies: - '@types/react': 19.2.1 + '@types/react': 19.3.0 hoist-non-react-statics: 3.3.2 '@types/istanbul-lib-coverage@2.0.6': {} @@ -6471,13 +6758,13 @@ snapshots: dependencies: '@types/node': 22.19.3 - '@types/react-dom@19.2.1(@types/react@19.2.1)': + '@types/react-dom@19.3.0(@types/react@19.3.0)': dependencies: - '@types/react': 19.2.1 + '@types/react': 19.3.0 - '@types/react@19.2.1': + '@types/react@19.3.0': dependencies: - csstype: 3.1.3 + csstype: 3.2.3 '@types/stack-utils@2.0.3': {} @@ -6709,6 +6996,8 @@ snapshots: balanced-match@1.0.2: {} + baseline-browser-mapping@2.11.28: {} + baseline-browser-mapping@2.9.9: {} bn.js@5.2.3: {} @@ -6811,14 +7100,14 @@ snapshots: clsx@2.1.1: {} - cmdk@1.1.1(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1): + cmdk@1.1.1(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1): dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) transitivePeerDependencies: - '@types/react' - '@types/react-dom' @@ -6884,7 +7173,7 @@ snapshots: '@asamuzakjp/css-color': 3.2.0 rrweb-cssom: 0.8.0 - csstype@3.1.3: {} + csstype@3.2.3: {} data-urls@5.0.0: dependencies: @@ -7258,10 +7547,10 @@ snapshots: inherits@2.0.4: {} - input-otp@1.4.2(react-dom@19.2.1(react@19.2.1))(react@19.2.1): + input-otp@1.4.2(react-dom@19.3.1(react@19.3.1))(react@19.3.1): dependencies: - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) intl-messageformat@10.7.18: dependencies: @@ -7800,9 +8089,9 @@ snapshots: dependencies: yallist: 4.0.0 - lucide-react@0.544.0(react@19.2.1): + lucide-react@0.544.0(react@19.3.1): dependencies: - react: 19.2.1 + react: 19.3.1 luxon@3.7.2: {} @@ -7852,30 +8141,32 @@ snapshots: nanoid@3.3.11: {} + nanoid@3.3.20: {} + nanoid@5.1.6: {} napi-postinstall@0.3.3: {} natural-compare@1.4.0: {} - next-auth@4.24.14(next@15.5.18(@babel/core@7.28.3)(@playwright/test@1.62.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(nodemailer@9.0.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1): + next-auth@4.24.14(next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(nodemailer@9.0.1)(react-dom@19.3.1(react@19.3.1))(react@19.3.1): dependencies: '@babel/runtime': 7.29.2 '@panva/hkdf': 1.2.1 cookie: 0.7.2 jose: 4.15.9 - next: 15.5.18(@babel/core@7.28.3)(@playwright/test@1.62.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + next: 16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) oauth: 0.9.15 openid-client: 5.7.1 preact: 10.28.3 preact-render-to-string: 5.2.6(preact@10.28.3) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) uuid: 8.3.2 optionalDependencies: nodemailer: 9.0.1 - next-i18next@15.4.3(i18next@25.10.10(typescript@5.7.3))(next@15.5.18(@babel/core@7.28.3)(@playwright/test@1.62.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(react-i18next@15.7.4(i18next@25.10.10(typescript@5.7.3))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.7.3))(react@19.2.1): + next-i18next@15.4.3(i18next@25.10.10(typescript@5.7.3))(next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(react-i18next@15.7.4(i18next@25.10.10(typescript@5.7.3))(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(typescript@5.7.3))(react@19.3.1): dependencies: '@babel/runtime': 7.28.4 '@types/hoist-non-react-statics': 3.3.6 @@ -7883,37 +8174,39 @@ snapshots: hoist-non-react-statics: 3.3.2 i18next: 25.10.10(typescript@5.7.3) i18next-fs-backend: 2.6.0 - next: 15.5.18(@babel/core@7.28.3)(@playwright/test@1.62.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - react: 19.2.1 - react-i18next: 15.7.4(i18next@25.10.10(typescript@5.7.3))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.7.3) + next: 16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + react: 19.3.1 + react-i18next: 15.7.4(i18next@25.10.10(typescript@5.7.3))(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(typescript@5.7.3) - next-themes@0.4.6(react-dom@19.2.1(react@19.2.1))(react@19.2.1): + next-themes@0.4.6(react-dom@19.3.1(react@19.3.1))(react@19.3.1): dependencies: - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) - next@15.5.18(@babel/core@7.28.3)(@playwright/test@1.62.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1): + next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1): dependencies: - '@next/env': 15.5.18 - '@swc/helpers': 0.5.15 + '@next/env': 16.4.1 + '@swc/helpers': 0.5.23 + baseline-browser-mapping: 2.11.28 caniuse-lite: 1.0.30001760 - postcss: 8.4.31 - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) - styled-jsx: 5.1.6(@babel/core@7.28.3)(react@19.2.1) + postcss: 8.5.23 + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) + styled-jsx: 5.1.6(@babel/core@7.28.3)(react@19.3.1) optionalDependencies: - '@next/swc-darwin-arm64': 15.5.18 - '@next/swc-darwin-x64': 15.5.18 - '@next/swc-linux-arm64-gnu': 15.5.18 - '@next/swc-linux-arm64-musl': 15.5.18 - '@next/swc-linux-x64-gnu': 15.5.18 - '@next/swc-linux-x64-musl': 15.5.18 - '@next/swc-win32-arm64-msvc': 15.5.18 - '@next/swc-win32-x64-msvc': 15.5.18 + '@next/swc-darwin-arm64': 16.4.1 + '@next/swc-darwin-x64': 16.4.1 + '@next/swc-linux-arm64-gnu': 16.4.1 + '@next/swc-linux-arm64-musl': 16.4.1 + '@next/swc-linux-x64-gnu': 16.4.1 + '@next/swc-linux-x64-musl': 16.4.1 + '@next/swc-win32-arm64-msvc': 16.4.1 + '@next/swc-win32-x64-msvc': 16.4.1 '@playwright/test': 1.62.1 - sharp: 0.34.5 + sharp: 0.35.5(@types/node@22.19.3) transitivePeerDependencies: - '@babel/core' + - '@types/node' - babel-plugin-macros node-fetch-native@1.6.7: {} @@ -8086,15 +8379,15 @@ snapshots: optionalDependencies: fsevents: 2.3.2 - postcss@8.4.31: + postcss@8.5.14: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.14: + postcss@8.5.23: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.20 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -8150,105 +8443,105 @@ snapshots: pure-rand@7.0.1: {} - radix-ui@1.4.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1): + radix-ui@1.4.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1): dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-accessible-icon': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-alert-dialog': 1.1.15(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-aspect-ratio': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-avatar': 1.1.10(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-checkbox': 1.3.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-context-menu': 2.2.16(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-form': 0.1.8(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-hover-card': 1.1.15(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-label': 2.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-menubar': 1.1.16(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-one-time-password-field': 0.1.8(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-password-toggle-field': 0.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-progress': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-radio-group': 1.3.8(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-select': 2.2.6(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-slider': 1.3.6(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-switch': 1.2.6(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-toast': 1.2.15(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-toolbar': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.1)(react@19.2.1) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-accessible-icon': 1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-alert-dialog': 1.1.15(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-aspect-ratio': 1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-avatar': 1.1.10(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-checkbox': 1.3.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-context-menu': 2.2.16(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-form': 0.1.8(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-hover-card': 1.1.15(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-label': 2.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-menubar': 1.1.16(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-one-time-password-field': 0.1.8(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-password-toggle-field': 0.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-progress': 1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-radio-group': 1.3.8(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-select': 2.2.6(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-slider': 1.3.6(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-switch': 1.2.6(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-toast': 1.2.15(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-toolbar': 1.1.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.3.0)(react@19.3.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - '@types/react-dom': 19.2.1(@types/react@19.2.1) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) rc9@2.1.2: dependencies: defu: 6.1.4 destr: 2.0.5 - react-day-picker@9.12.0(react@19.2.1): + react-day-picker@9.12.0(react@19.3.1): dependencies: '@date-fns/tz': 1.4.1 date-fns: 4.1.0 date-fns-jalali: 4.1.0-0 - react: 19.2.1 + react: 19.3.1 - react-dom@19.2.1(react@19.2.1): + react-dom@19.3.1(react@19.3.1): dependencies: - react: 19.2.1 - scheduler: 0.27.0 + react: 19.3.1 + scheduler: 0.28.0 - react-easy-crop@5.5.7(react-dom@19.2.1(react@19.2.1))(react@19.2.1): + react-easy-crop@5.5.7(react-dom@19.3.1(react@19.3.1))(react@19.3.1): dependencies: normalize-wheel: 1.0.1 - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) tslib: 2.8.1 - react-hook-form@7.68.0(react@19.2.1): + react-hook-form@7.68.0(react@19.3.1): dependencies: - react: 19.2.1 + react: 19.3.1 - react-i18next@15.7.4(i18next@25.10.10(typescript@5.7.3))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.7.3): + react-i18next@15.7.4(i18next@25.10.10(typescript@5.7.3))(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(typescript@5.7.3): dependencies: '@babel/runtime': 7.27.6 html-parse-stringify: 3.0.1 i18next: 25.10.10(typescript@5.7.3) - react: 19.2.1 + react: 19.3.1 optionalDependencies: - react-dom: 19.2.1(react@19.2.1) + react-dom: 19.3.1(react@19.3.1) typescript: 5.7.3 react-is@16.13.1: {} @@ -8257,51 +8550,51 @@ snapshots: react-is@18.3.1: {} - react-plaid-link@4.1.1(react-dom@19.2.1(react@19.2.1))(react@19.2.1): + react-plaid-link@4.1.1(react-dom@19.3.1(react@19.3.1))(react@19.3.1): dependencies: prop-types: 15.8.1 - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) - react-remove-scroll-bar@2.3.8(@types/react@19.2.1)(react@19.2.1): + react-remove-scroll-bar@2.3.8(@types/react@19.3.0)(react@19.3.1): dependencies: - react: 19.2.1 - react-style-singleton: 2.2.3(@types/react@19.2.1)(react@19.2.1) + react: 19.3.1 + react-style-singleton: 2.2.3(@types/react@19.3.0)(react@19.3.1) tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.1 + '@types/react': 19.3.0 - react-remove-scroll@2.7.0(@types/react@19.2.1)(react@19.2.1): + react-remove-scroll@2.7.0(@types/react@19.3.0)(react@19.3.1): dependencies: - react: 19.2.1 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.1)(react@19.2.1) - react-style-singleton: 2.2.3(@types/react@19.2.1)(react@19.2.1) + react: 19.3.1 + react-remove-scroll-bar: 2.3.8(@types/react@19.3.0)(react@19.3.1) + react-style-singleton: 2.2.3(@types/react@19.3.0)(react@19.3.1) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.1)(react@19.2.1) - use-sidecar: 1.1.3(@types/react@19.2.1)(react@19.2.1) + use-callback-ref: 1.3.3(@types/react@19.3.0)(react@19.3.1) + use-sidecar: 1.1.3(@types/react@19.3.0)(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 + '@types/react': 19.3.0 - react-remove-scroll@2.7.2(@types/react@19.2.1)(react@19.2.1): + react-remove-scroll@2.7.2(@types/react@19.3.0)(react@19.3.1): dependencies: - react: 19.2.1 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.1)(react@19.2.1) - react-style-singleton: 2.2.3(@types/react@19.2.1)(react@19.2.1) + react: 19.3.1 + react-remove-scroll-bar: 2.3.8(@types/react@19.3.0)(react@19.3.1) + react-style-singleton: 2.2.3(@types/react@19.3.0)(react@19.3.1) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.1)(react@19.2.1) - use-sidecar: 1.1.3(@types/react@19.2.1)(react@19.2.1) + use-callback-ref: 1.3.3(@types/react@19.3.0)(react@19.3.1) + use-sidecar: 1.1.3(@types/react@19.3.0)(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 + '@types/react': 19.3.0 - react-style-singleton@2.2.3(@types/react@19.2.1)(react@19.2.1): + react-style-singleton@2.2.3(@types/react@19.3.0)(react@19.3.1): dependencies: get-nonce: 1.0.1 - react: 19.2.1 + react: 19.3.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.1 + '@types/react': 19.3.0 - react@19.2.1: {} + react@19.3.1: {} readdirp@4.1.2: {} @@ -8337,12 +8630,15 @@ snapshots: dependencies: xmlchars: 2.2.0 - scheduler@0.27.0: {} + scheduler@0.28.0: {} semver@6.3.1: {} semver@7.7.3: {} + semver@7.8.5: + optional: true + serwist@9.2.3(typescript@5.7.3): dependencies: idb: 8.0.3 @@ -8380,6 +8676,40 @@ snapshots: '@img/sharp-win32-ia32': 0.34.5 '@img/sharp-win32-x64': 0.34.5 + sharp@0.35.5(@types/node@22.19.3): + dependencies: + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.8.5 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.35.5 + '@img/sharp-darwin-x64': 0.35.5 + '@img/sharp-freebsd-wasm32': 0.35.5 + '@img/sharp-libvips-darwin-arm64': 1.3.4 + '@img/sharp-libvips-darwin-x64': 1.3.4 + '@img/sharp-libvips-linux-arm': 1.3.4 + '@img/sharp-libvips-linux-arm64': 1.3.4 + '@img/sharp-libvips-linux-ppc64': 1.3.4 + '@img/sharp-libvips-linux-riscv64': 1.3.4 + '@img/sharp-libvips-linux-s390x': 1.3.4 + '@img/sharp-libvips-linux-x64': 1.3.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.4 + '@img/sharp-libvips-linuxmusl-x64': 1.3.4 + '@img/sharp-linux-arm': 0.35.5 + '@img/sharp-linux-arm64': 0.35.5 + '@img/sharp-linux-ppc64': 0.35.5 + '@img/sharp-linux-riscv64': 0.35.5 + '@img/sharp-linux-s390x': 0.35.5 + '@img/sharp-linux-x64': 0.35.5 + '@img/sharp-linuxmusl-arm64': 0.35.5 + '@img/sharp-linuxmusl-x64': 0.35.5 + '@img/sharp-webcontainers-wasm32': 0.35.5 + '@img/sharp-win32-arm64': 0.35.5 + '@img/sharp-win32-ia32': 0.35.5 + '@img/sharp-win32-x64': 0.35.5 + '@types/node': 22.19.3 + optional: true + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -8397,10 +8727,10 @@ snapshots: ansi-styles: 6.2.3 is-fullwidth-code-point: 5.1.0 - sonner@1.7.4(react-dom@19.2.1(react@19.2.1))(react@19.2.1): + sonner@1.7.4(react-dom@19.3.1(react@19.3.1))(react@19.3.1): dependencies: - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) source-map-js@1.2.1: {} @@ -8469,10 +8799,10 @@ snapshots: strip-json-comments@3.1.1: {} - styled-jsx@5.1.6(@babel/core@7.28.3)(react@19.2.1): + styled-jsx@5.1.6(@babel/core@7.28.3)(react@19.3.1): dependencies: client-only: 0.0.1 - react: 19.2.1 + react: 19.3.1 optionalDependencies: '@babel/core': 7.28.3 @@ -8595,24 +8925,24 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - use-callback-ref@1.3.3(@types/react@19.2.1)(react@19.2.1): + use-callback-ref@1.3.3(@types/react@19.3.0)(react@19.3.1): dependencies: - react: 19.2.1 + react: 19.3.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.1 + '@types/react': 19.3.0 - use-sidecar@1.1.3(@types/react@19.2.1)(react@19.2.1): + use-sidecar@1.1.3(@types/react@19.3.0)(react@19.3.1): dependencies: detect-node-es: 1.1.0 - react: 19.2.1 + react: 19.3.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.1 + '@types/react': 19.3.0 - use-sync-external-store@1.5.0(react@19.2.1): + use-sync-external-store@1.5.0(react@19.3.1): dependencies: - react: 19.2.1 + react: 19.3.1 uuid@8.3.2: {} @@ -8626,11 +8956,11 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 - vaul@1.1.2(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1): + vaul@1.1.2(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1): dependencies: - '@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.2.1(@types/react@19.2.1))(@types/react@19.2.1)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) + '@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) transitivePeerDependencies: - '@types/react' - '@types/react-dom' @@ -8746,9 +9076,9 @@ snapshots: zod@4.1.12: {} - zustand@4.5.7(@types/react@19.2.1)(react@19.2.1): + zustand@4.5.7(@types/react@19.3.0)(react@19.3.1): dependencies: - use-sync-external-store: 1.5.0(react@19.2.1) + use-sync-external-store: 1.5.0(react@19.3.1) optionalDependencies: - '@types/react': 19.2.1 - react: 19.2.1 + '@types/react': 19.3.0 + react: 19.3.1 diff --git a/src/middleware.ts b/src/proxy.ts similarity index 93% rename from src/middleware.ts rename to src/proxy.ts index 4286bda75..9fab98795 100644 --- a/src/middleware.ts +++ b/src/proxy.ts @@ -2,7 +2,7 @@ import { type NextRequest, NextResponse } from 'next/server'; const PUBLIC_FILE = /\.(.*)$/; -export function middleware(req: NextRequest) { +export function proxy(req: NextRequest) { if ( req.nextUrl.pathname.startsWith('/_next') || req.nextUrl.pathname.includes('/api/') || From 83c382f1ee83e18bcd65eac4ed665c9fa3a043fe Mon Sep 17 00:00:00 2001 From: krokosik Date: Wed, 14 Oct 2026 21:58:46 +0200 Subject: [PATCH 02/59] Update deps with compat for i18next --- .gitignore | 1 + jest.shared.ts | 6 +- package.json | 38 +- pnpm-lock.yaml | 1051 ++++++++-------------- src/utils/i18n/pages.ts | 2 + src/utils/i18n/serverSideTranslations.ts | 1 + tsconfig.json | 15 +- 7 files changed, 426 insertions(+), 688 deletions(-) create mode 100644 src/utils/i18n/pages.ts create mode 100644 src/utils/i18n/serverSideTranslations.ts diff --git a/.gitignore b/.gitignore index 1250587ed..c73a5bed8 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ /node_modules /.pnp .pnp.js +.swc/ # testing /coverage diff --git a/jest.shared.ts b/jest.shared.ts index cf53cde7f..b2a2da636 100644 --- a/jest.shared.ts +++ b/jest.shared.ts @@ -5,7 +5,11 @@ export const configureJest = async (config: Config): Promise => { const resolved = await nextJest({ dir: './' })({ coverageProvider: 'v8', cacheDirectory: '/node_modules/.cache/jest', - moduleNameMapper: { '^~/(.*)$': '/src/$1' }, + moduleNameMapper: { + '^~/(.*)$': '/src/$1', + '^next-i18next$': '/src/utils/i18n/pages.ts', + '^next-i18next/serverSideTranslations$': '/src/utils/i18n/serverSideTranslations.ts', + }, clearMocks: true, ...config, })(); diff --git a/package.json b/package.json index 6ab333eb4..74ee2ef0a 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "db:seed": "prisma db seed", "db:verify-seed-hash": "tsx src/dummies/index.ts --strict", "prisma:prod": "prisma migrate deploy", - "dev": "next dev --turbopack", + "dev": "next dev", "postinstall": "prisma generate", "generate": "prisma generate", "lint": "oxlint --type-aware", @@ -34,12 +34,12 @@ "prepare": "husky" }, "dependencies": { - "@heroicons/react": "^2.1.1", + "@heroicons/react": "^2.2.0", "@hookform/resolvers": "^3.3.4", "@icons-pack/react-simple-icons": "^13.7.0", "@next-auth/prisma-adapter": "^1.0.7", "@prisma/client": "^6.16.2", - "@serwist/next": "^9.2.1", + "@serwist/next": "^9.5.13", "@t3-oss/env-nextjs": "^0.13.8", "@tanstack/react-query": "^5.79.2", "@trpc/client": "^11.2.0", @@ -55,17 +55,17 @@ "cronstrue": "^3.3.0", "date-fns": "^3.3.1", "formidable": "^3.5.4", - "i18next": "^25.10.10", + "i18next": "^26.4.5", "i18next-browser-languagedetector": "^8.2.1", - "i18next-http-backend": "^3.0.6", + "i18next-http-backend": "^4.0.2", "i18next-icu": "^2.4.1", "input-otp": "^1.2.3", "intl-messageformat": "^10.7.18", - "lucide-react": "^0.544.0", + "lucide-react": "^1.57.0", "nanoid": "^5.0.6", "next": "16.4.1", "next-auth": "^4.24.14", - "next-i18next": "^15.4.3", + "next-i18next": "^16.3.1", "next-themes": "^0.4.6", "nodemailer": "^9.0.1", "nordigen-node": "^1.4.1", @@ -78,7 +78,7 @@ "react-hook-form": "^7.50.1", "react-i18next": "^15.5.3", "react-plaid-link": "4.1.1", - "sharp": "^0.34.5", + "sharp": "^0.35.5", "sonner": "^1.4.0", "superjson": "^2.2.1", "vaul": "^1.1.2", @@ -100,7 +100,6 @@ "@types/react": "19.3.0", "@types/react-dom": "19.3.0", "@types/web-push": "^3.6.3", - "@typescript/native-preview": "7.0.0-dev.20251016.1", "husky": "^9.1.7", "jest": "30.3.0", "jest-environment-jsdom": "30.3.0", @@ -133,25 +132,6 @@ "prisma", "sharp", "unrs-resolver" - ], - "overrides": { - "axios": "1.16.0", - "form-data": "^4.0.5", - "jws": "^4.0.1", - "preact": "^10.26.10", - "minimatch": "^9.0.6", - "diff": "^4.0.4", - "js-yaml": "^3.14.2", - "webpack@>=5.49.0 <=5.104.0": ">=5.104.1", - "webpack@>=5.49.0 <5.104.0": ">=5.104.0", - "bn.js@<4.12.3": ">=4.12.3", - "serialize-javascript@<=7.0.2": ">=7.0.3", - "ajv@>=7.0.0-alpha.0 <8.18.0": ">=8.18.0", - "effect@<3.20.0": ">=3.20.0", - "picomatch@<2.3.2": ">=2.3.2", - "serialize-javascript@<7.0.5": ">=7.0.5", - "@types/react": "19.3.0", - "@types/react-dom": "19.3.0" - } + ] } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 745787d76..a57c37aac 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,31 +4,12 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -overrides: - axios: 1.16.0 - form-data: ^4.0.5 - jws: ^4.0.1 - preact: ^10.26.10 - minimatch: ^9.0.6 - diff: ^4.0.4 - js-yaml: ^3.14.2 - webpack@>=5.49.0 <=5.104.0: '>=5.104.1' - webpack@>=5.49.0 <5.104.0: '>=5.104.0' - bn.js@<4.12.3: '>=4.12.3' - serialize-javascript@<=7.0.2: '>=7.0.3' - ajv@>=7.0.0-alpha.0 <8.18.0: '>=8.18.0' - effect@<3.20.0: '>=3.20.0' - picomatch@<2.3.2: '>=2.3.2' - serialize-javascript@<7.0.5: '>=7.0.5' - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 - importers: .: dependencies: '@heroicons/react': - specifier: ^2.1.1 + specifier: ^2.2.0 version: 2.2.0(react@19.3.1) '@hookform/resolvers': specifier: ^3.3.4 @@ -43,8 +24,8 @@ importers: specifier: ^6.16.2 version: 6.19.1(prisma@6.19.3(typescript@5.7.3))(typescript@5.7.3) '@serwist/next': - specifier: ^9.2.1 - version: 9.2.3(next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(typescript@5.7.3) + specifier: ^9.5.13 + version: 9.5.13(next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(react@19.3.1)(typescript@5.7.3) '@t3-oss/env-nextjs': specifier: ^0.13.8 version: 0.13.10(typescript@5.7.3)(zod@3.25.76) @@ -91,14 +72,14 @@ importers: specifier: ^3.5.4 version: 3.5.4 i18next: - specifier: ^25.10.10 - version: 25.10.10(typescript@5.7.3) + specifier: ^26.4.5 + version: 26.4.5(typescript@5.7.3) i18next-browser-languagedetector: specifier: ^8.2.1 version: 8.2.1 i18next-http-backend: - specifier: ^3.0.6 - version: 3.0.6 + specifier: ^4.0.2 + version: 4.0.2 i18next-icu: specifier: ^2.4.1 version: 2.4.4(intl-messageformat@10.7.18) @@ -109,8 +90,8 @@ importers: specifier: ^10.7.18 version: 10.7.18 lucide-react: - specifier: ^0.544.0 - version: 0.544.0(react@19.3.1) + specifier: ^1.57.0 + version: 1.57.0(@types/react@19.3.0)(react@19.3.1) nanoid: specifier: ^5.0.6 version: 5.1.6 @@ -121,8 +102,8 @@ importers: specifier: ^4.24.14 version: 4.24.14(next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(nodemailer@9.0.1)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) next-i18next: - specifier: ^15.4.3 - version: 15.4.3(i18next@25.10.10(typescript@5.7.3))(next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(react-i18next@15.7.4(i18next@25.10.10(typescript@5.7.3))(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(typescript@5.7.3))(react@19.3.1) + specifier: ^16.3.1 + version: 16.3.1(@types/react@19.3.0)(i18next@26.4.5(typescript@5.7.3))(next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(react-i18next@15.7.4(i18next@26.4.5(typescript@5.7.3))(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(typescript@5.7.3))(react@19.3.1) next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@19.3.1(react@19.3.1))(react@19.3.1) @@ -155,13 +136,13 @@ importers: version: 7.68.0(react@19.3.1) react-i18next: specifier: ^15.5.3 - version: 15.7.4(i18next@25.10.10(typescript@5.7.3))(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(typescript@5.7.3) + version: 15.7.4(i18next@26.4.5(typescript@5.7.3))(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(typescript@5.7.3) react-plaid-link: specifier: 4.1.1 version: 4.1.1(react-dom@19.3.1(react@19.3.1))(react@19.3.1) sharp: - specifier: ^0.34.5 - version: 0.34.5 + specifier: ^0.35.5 + version: 0.35.5(@types/node@22.19.3) sonner: specifier: ^1.4.0 version: 1.7.4(react-dom@19.3.1(react@19.3.1))(react@19.3.1) @@ -220,9 +201,6 @@ importers: '@types/web-push': specifier: ^3.6.3 version: 3.6.4 - '@typescript/native-preview': - specifier: 7.0.0-dev.20251016.1 - version: 7.0.0-dev.20251016.1 husky: specifier: ^9.1.7 version: 9.1.7 @@ -720,32 +698,16 @@ packages: peerDependencies: react: ^16.13 || ^17 || ^18 || ^19 - '@img/colour@1.0.0': - resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} - engines: {node: '>=18'} - '@img/colour@1.1.0': resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} engines: {node: '>=18'} - '@img/sharp-darwin-arm64@0.34.5': - resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [darwin] - '@img/sharp-darwin-arm64@0.35.5': resolution: {integrity: sha512-QRUlFQ0WxvdWyqqG/WtI3iupfD5rBzmCHXSdPsY91sAtVtTo7Q4cb6zOccZ3gqEqkr0f1As1ehLqmEpDsRf+lg==} engines: {node: '>=20.9.0'} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.34.5': - resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [darwin] - '@img/sharp-darwin-x64@0.35.5': resolution: {integrity: sha512-+BR255RhDlpygUpOc/Jdt1nT6DQ3XG/ERo5wbcdOf5Q320dKtPCKPLR1LJs9VGXRaMa8l1uUa0tkCNOXiAxZUw==} engines: {node: '>=20.9.0'} @@ -757,207 +719,104 @@ packages: engines: {node: '>=20.9.0'} os: [freebsd] - '@img/sharp-libvips-darwin-arm64@1.2.4': - resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} - cpu: [arm64] - os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.3.4': resolution: {integrity: sha512-5R89nBYiRdUlSWJxPhO+GVtaXzXSxKnRu/xqMn3KTA3L9EB9Oy/P+Nn2f2vlhPuUdy/Zusb2DarbyTpGCfEDuw==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.2.4': - resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} - cpu: [x64] - os: [darwin] - '@img/sharp-libvips-darwin-x64@1.3.4': resolution: {integrity: sha512-iR2OKH80yi0U+dUplyh3/xdpFvps6YkCwsXenIJxqxR1v9o+xtKTGbS9H7cps+2Vxjc8B1j96p75NmTGjIhtpQ==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.2.4': - resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} - cpu: [arm64] - os: [linux] - '@img/sharp-libvips-linux-arm64@1.3.4': resolution: {integrity: sha512-Y3dgX/6lE2QhQb+Gxy0WZxfg9MEm/JBjamZpS2IklP7xIQoKN4hzAm7KcMVGtaVDt3neE9OKBC7vAfonA/Lr1A==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linux-arm@1.2.4': - resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} - cpu: [arm] - os: [linux] - '@img/sharp-libvips-linux-arm@1.3.4': resolution: {integrity: sha512-LmRtTsOHuvM2+wlO2Db37dx5MiZhB0FvSunciw48YjdOkZz9KAiRbm8ujeMOA1INqmei5NapFxYEK1D1ZSidmw==} cpu: [arm] os: [linux] - '@img/sharp-libvips-linux-ppc64@1.2.4': - resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} - cpu: [ppc64] - os: [linux] - '@img/sharp-libvips-linux-ppc64@1.3.4': resolution: {integrity: sha512-Le6boB8Tai0Nis+gIxIpKx68UDVVIqdR8Tin5Yf1z2LJJQLDJvCDRqRu+jC2qCoD+eIomonmOwB4smBRxfVpYQ==} cpu: [ppc64] os: [linux] - '@img/sharp-libvips-linux-riscv64@1.2.4': - resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} - cpu: [riscv64] - os: [linux] - '@img/sharp-libvips-linux-riscv64@1.3.4': resolution: {integrity: sha512-aHkkIEHPRdQEegJN20MLmGtxYD9R2wQr3Cwpddnu5+YKMt6Uzax7S9h5gpZTo8wyrGuZSlfQ63OevL5mTyOC7Q==} cpu: [riscv64] os: [linux] - '@img/sharp-libvips-linux-s390x@1.2.4': - resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} - cpu: [s390x] - os: [linux] - '@img/sharp-libvips-linux-s390x@1.3.4': resolution: {integrity: sha512-ra/mB6MikESDUO7Yg+Mi95bFBb9GsObURuhnOv3OqknjGe9sZrG8tCe9q0xSIGrtLgvgw0gKnFWcK4blSgQOuQ==} cpu: [s390x] os: [linux] - '@img/sharp-libvips-linux-x64@1.2.4': - resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} - cpu: [x64] - os: [linux] - '@img/sharp-libvips-linux-x64@1.3.4': resolution: {integrity: sha512-GJ//SSXbnwSDes02umB3nDJLFcQzw8a18V8fyhqr6tV515tOEMdImjjxj1AoafMRz56F3PHgftnj1QEKSU1zkw==} cpu: [x64] os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': - resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} - cpu: [arm64] - os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.3.4': resolution: {integrity: sha512-hvulFwtjUcagsis6BBxHwGFwWoNZjgYmULGVrZcyfNbjA8hKILbRxGg15/7w5HDyXHXUos/j6baAWqnCyQ2DWA==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.2.4': - resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} - cpu: [x64] - os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.3.4': resolution: {integrity: sha512-6zXKeE/p39I1AmA3cJG35eyBGNqNddLnUXjhwBnsGjFPWqf5VKkDBEqaEkPDoTEtkxwi2vv8Tcr2mDyP4So7Fg==} cpu: [x64] os: [linux] - '@img/sharp-linux-arm64@0.34.5': - resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - '@img/sharp-linux-arm64@0.35.5': resolution: {integrity: sha512-LYVx5JTsOM2CBzmxreh+nl64/3H6Xb09iSLknqH47z2T2DFFxDeFLP5y4dJwe6H7uGQlHPyEEtIqyo3DYsRwdQ==} engines: {node: '>=20.9.0'} cpu: [arm64] os: [linux] - '@img/sharp-linux-arm@0.34.5': - resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm] - os: [linux] - '@img/sharp-linux-arm@0.35.5': resolution: {integrity: sha512-LEaXK2WdXVK5ykcw0buWyPMsmLLL2vpHLD6yrNSW+JGEL3BZPA4tpKN6iaMc4AxTTAoaX/sU1rOL51lcIz48ZQ==} engines: {node: '>=20.9.0'} cpu: [arm] os: [linux] - '@img/sharp-linux-ppc64@0.34.5': - resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ppc64] - os: [linux] - '@img/sharp-linux-ppc64@0.35.5': resolution: {integrity: sha512-QVxAAq8evVRI9ia2vqgwrmWucn5Dfv+JdWzj75pD8omHLPSP7f8p20O8jxzjCcuCEQEOtYOZUmX1hkiZ0kdevA==} engines: {node: '>=20.9.0'} cpu: [ppc64] os: [linux] - '@img/sharp-linux-riscv64@0.34.5': - resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [riscv64] - os: [linux] - '@img/sharp-linux-riscv64@0.35.5': resolution: {integrity: sha512-LtdreXguaavKODPIfzJ4kffx7UNt1omwtK0rch4EBbbSTXPnxWmYSayXdLJw0fJzQ97kHt1gL/yh4tvU+nCyRQ==} engines: {node: '>=20.9.0'} cpu: [riscv64] os: [linux] - '@img/sharp-linux-s390x@0.34.5': - resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [s390x] - os: [linux] - '@img/sharp-linux-s390x@0.35.5': resolution: {integrity: sha512-UZasTOFiYzotTsGOCu42BfUzP6Tu6Do/947iRm1RsLKvlllxwGcn4RN27LibGWceix4Y+Pmw3jsnTcCQIgWjqA==} engines: {node: '>=20.9.0'} cpu: [s390x] os: [linux] - '@img/sharp-linux-x64@0.34.5': - resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - '@img/sharp-linux-x64@0.35.5': resolution: {integrity: sha512-SxFtLTeJInhAA9Q836kux2vZNeOBQEx658qvbboZScr0wIARym3IcGmW7KpVD5sbVg0Ojy+udFQdayYIZyoNog==} engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.34.5': - resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - '@img/sharp-linuxmusl-arm64@0.35.5': resolution: {integrity: sha512-9HbMclmI1zlNkFRs3z9/eBtDjfD0sGlrX1z6b1qwmiFY5ElDLh4BC0LPBdVp7z1DXFiKlIcznf+ZlsuZzLxQqg==} engines: {node: '>=20.9.0'} cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-x64@0.34.5': - resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - '@img/sharp-linuxmusl-x64@0.35.5': resolution: {integrity: sha512-4KOphqB035HrVdqLZfCgMzzERrQkkzOwRhl4OAkRO1YCldbaFjySXMaK534Mo0V+LndnlJk+sbUyLeU0ULyD1A==} engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] - '@img/sharp-wasm32@0.34.5': - resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [wasm32] - '@img/sharp-wasm32@0.35.5': resolution: {integrity: sha512-Ptsga1su4tQx+LLF1ECS9U6nz5kmrXKo6XVbtR48Ke3ZRxxgaWBu7IDtEe1quo8hiupwm6WFqxVlXaSf7IINGQ==} engines: {node: '>=20.9.0'} @@ -967,36 +826,18 @@ packages: engines: {node: '>=20.9.0'} cpu: [wasm32] - '@img/sharp-win32-arm64@0.34.5': - resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [win32] - '@img/sharp-win32-arm64@0.35.5': resolution: {integrity: sha512-X4t7g+7ZA5DKblCBEXGjUqqemj4vczING/5viFwAL8h4N3qYeyjwdCvRLHi4EdOUI+2Z7UFlp1VM+p/AuEtm6Q==} engines: {node: '>=20.9.0'} cpu: [arm64] os: [win32] - '@img/sharp-win32-ia32@0.34.5': - resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ia32] - os: [win32] - '@img/sharp-win32-ia32@0.35.5': resolution: {integrity: sha512-5Zm82LoBc43nhwNybZlG7Y1KO//Zhsn306fQl29ZOuStHLGTo3BWL83q3cznX0poxSAMuYL1On/BHBxkBeKr6A==} engines: {node: ^20.9.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.34.5': - resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [win32] - '@img/sharp-win32-x64@0.35.5': resolution: {integrity: sha512-x76eH0vEiHlcMQu8Y8IenntaACtddpT6W0wmXtWrnKcnKI7ME5DdgqhAD6SEWOEl1v2zDvkZDhFA9KnURwpfqg==} engines: {node: '>=20.9.0'} @@ -1398,8 +1239,8 @@ packages: '@radix-ui/react-accessible-icon@1.1.7': resolution: {integrity: sha512-XM+E4WXl0OqUJFovy6GjmxxFyx9opfCAIUku4dlKRd5YEPqt4kALOkQOp0Of6reHuUkJuiPBEc5k0o4z4lTC8A==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1411,8 +1252,8 @@ packages: '@radix-ui/react-accordion@1.2.12': resolution: {integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1424,8 +1265,8 @@ packages: '@radix-ui/react-alert-dialog@1.1.15': resolution: {integrity: sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1437,8 +1278,8 @@ packages: '@radix-ui/react-arrow@1.1.7': resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1450,8 +1291,8 @@ packages: '@radix-ui/react-aspect-ratio@1.1.7': resolution: {integrity: sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1463,8 +1304,8 @@ packages: '@radix-ui/react-avatar@1.1.10': resolution: {integrity: sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1476,8 +1317,8 @@ packages: '@radix-ui/react-checkbox@1.3.3': resolution: {integrity: sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1489,8 +1330,8 @@ packages: '@radix-ui/react-collapsible@1.1.12': resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1502,8 +1343,8 @@ packages: '@radix-ui/react-collection@1.1.7': resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1515,7 +1356,7 @@ packages: '@radix-ui/react-compose-refs@1.1.2': resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} peerDependencies: - '@types/react': 19.3.0 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1524,8 +1365,8 @@ packages: '@radix-ui/react-context-menu@2.2.16': resolution: {integrity: sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1537,7 +1378,7 @@ packages: '@radix-ui/react-context@1.1.2': resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} peerDependencies: - '@types/react': 19.3.0 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1546,8 +1387,8 @@ packages: '@radix-ui/react-dialog@1.1.14': resolution: {integrity: sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1559,8 +1400,8 @@ packages: '@radix-ui/react-dialog@1.1.15': resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1572,7 +1413,7 @@ packages: '@radix-ui/react-direction@1.1.1': resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} peerDependencies: - '@types/react': 19.3.0 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1581,8 +1422,8 @@ packages: '@radix-ui/react-dismissable-layer@1.1.10': resolution: {integrity: sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1594,8 +1435,8 @@ packages: '@radix-ui/react-dismissable-layer@1.1.11': resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1607,8 +1448,8 @@ packages: '@radix-ui/react-dropdown-menu@2.1.16': resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1620,7 +1461,7 @@ packages: '@radix-ui/react-focus-guards@1.1.2': resolution: {integrity: sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==} peerDependencies: - '@types/react': 19.3.0 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1629,7 +1470,7 @@ packages: '@radix-ui/react-focus-guards@1.1.3': resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} peerDependencies: - '@types/react': 19.3.0 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1638,8 +1479,8 @@ packages: '@radix-ui/react-focus-scope@1.1.7': resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1651,8 +1492,8 @@ packages: '@radix-ui/react-form@0.1.8': resolution: {integrity: sha512-QM70k4Zwjttifr5a4sZFts9fn8FzHYvQ5PiB19O2HsYibaHSVt9fH9rzB0XZo/YcM+b7t/p7lYCT/F5eOeF5yQ==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1664,8 +1505,8 @@ packages: '@radix-ui/react-hover-card@1.1.15': resolution: {integrity: sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1677,7 +1518,7 @@ packages: '@radix-ui/react-id@1.1.1': resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} peerDependencies: - '@types/react': 19.3.0 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1686,8 +1527,8 @@ packages: '@radix-ui/react-label@2.1.7': resolution: {integrity: sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1699,8 +1540,8 @@ packages: '@radix-ui/react-menu@2.1.16': resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1712,8 +1553,8 @@ packages: '@radix-ui/react-menubar@1.1.16': resolution: {integrity: sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1725,8 +1566,8 @@ packages: '@radix-ui/react-navigation-menu@1.2.14': resolution: {integrity: sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1738,8 +1579,8 @@ packages: '@radix-ui/react-one-time-password-field@0.1.8': resolution: {integrity: sha512-ycS4rbwURavDPVjCb5iS3aG4lURFDILi6sKI/WITUMZ13gMmn/xGjpLoqBAalhJaDk8I3UbCM5GzKHrnzwHbvg==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1751,8 +1592,8 @@ packages: '@radix-ui/react-password-toggle-field@0.1.3': resolution: {integrity: sha512-/UuCrDBWravcaMix4TdT+qlNdVwOM1Nck9kWx/vafXsdfj1ChfhOdfi3cy9SGBpWgTXwYCuboT/oYpJy3clqfw==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1764,8 +1605,8 @@ packages: '@radix-ui/react-popover@1.1.15': resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1777,8 +1618,8 @@ packages: '@radix-ui/react-popper@1.2.8': resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1790,8 +1631,8 @@ packages: '@radix-ui/react-portal@1.1.9': resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1803,8 +1644,8 @@ packages: '@radix-ui/react-presence@1.1.4': resolution: {integrity: sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1816,8 +1657,8 @@ packages: '@radix-ui/react-presence@1.1.5': resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1829,8 +1670,8 @@ packages: '@radix-ui/react-primitive@2.1.3': resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1842,8 +1683,8 @@ packages: '@radix-ui/react-progress@1.1.7': resolution: {integrity: sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1855,8 +1696,8 @@ packages: '@radix-ui/react-radio-group@1.3.8': resolution: {integrity: sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1868,8 +1709,8 @@ packages: '@radix-ui/react-roving-focus@1.1.11': resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1881,8 +1722,8 @@ packages: '@radix-ui/react-scroll-area@1.2.10': resolution: {integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1894,8 +1735,8 @@ packages: '@radix-ui/react-select@2.2.6': resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1907,8 +1748,8 @@ packages: '@radix-ui/react-separator@1.1.7': resolution: {integrity: sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1920,8 +1761,8 @@ packages: '@radix-ui/react-slider@1.3.6': resolution: {integrity: sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1933,7 +1774,7 @@ packages: '@radix-ui/react-slot@1.2.3': resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} peerDependencies: - '@types/react': 19.3.0 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1942,8 +1783,8 @@ packages: '@radix-ui/react-switch@1.2.6': resolution: {integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1955,8 +1796,8 @@ packages: '@radix-ui/react-tabs@1.1.13': resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1968,8 +1809,8 @@ packages: '@radix-ui/react-toast@1.2.15': resolution: {integrity: sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1981,8 +1822,8 @@ packages: '@radix-ui/react-toggle-group@1.1.11': resolution: {integrity: sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1994,8 +1835,8 @@ packages: '@radix-ui/react-toggle@1.1.10': resolution: {integrity: sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2007,8 +1848,8 @@ packages: '@radix-ui/react-toolbar@1.1.11': resolution: {integrity: sha512-4ol06/1bLoFu1nwUqzdD4Y5RZ9oDdKeiHIsntug54Hcr1pgaHiPqHFEaXI1IFP/EsOfROQZ8Mig9VTIRza6Tjg==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2020,8 +1861,8 @@ packages: '@radix-ui/react-tooltip@1.2.8': resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2033,7 +1874,7 @@ packages: '@radix-ui/react-use-callback-ref@1.1.1': resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} peerDependencies: - '@types/react': 19.3.0 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2042,7 +1883,7 @@ packages: '@radix-ui/react-use-controllable-state@1.2.2': resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} peerDependencies: - '@types/react': 19.3.0 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2051,7 +1892,7 @@ packages: '@radix-ui/react-use-effect-event@0.0.2': resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} peerDependencies: - '@types/react': 19.3.0 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2060,7 +1901,7 @@ packages: '@radix-ui/react-use-escape-keydown@1.1.1': resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} peerDependencies: - '@types/react': 19.3.0 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2069,7 +1910,7 @@ packages: '@radix-ui/react-use-is-hydrated@0.1.0': resolution: {integrity: sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==} peerDependencies: - '@types/react': 19.3.0 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2078,7 +1919,7 @@ packages: '@radix-ui/react-use-layout-effect@1.1.1': resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} peerDependencies: - '@types/react': 19.3.0 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2087,7 +1928,7 @@ packages: '@radix-ui/react-use-previous@1.1.1': resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} peerDependencies: - '@types/react': 19.3.0 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2096,7 +1937,7 @@ packages: '@radix-ui/react-use-rect@1.1.1': resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} peerDependencies: - '@types/react': 19.3.0 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2105,7 +1946,7 @@ packages: '@radix-ui/react-use-size@1.1.1': resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} peerDependencies: - '@types/react': 19.3.0 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2114,8 +1955,8 @@ packages: '@radix-ui/react-visually-hidden@1.2.3': resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2127,8 +1968,8 @@ packages: '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} - '@serwist/build@9.2.3': - resolution: {integrity: sha512-UU38GDsTerzoCRDIT5v62W/CcTMLfGZm/tAa+u8XLBU0y0f2aJ2GCfsHnI1eXhEuWvt4Y7Imx/uG2ww2KWIBWQ==} + '@serwist/build@9.5.13': + resolution: {integrity: sha512-3seu43B26paWNKixMJTJWXBJx8c07e+WZvPOUH5V/AByYfAoL4TKh9vMri8zukyj52shDyChs2Qjji5NObprMQ==} engines: {node: '>=18.0.0'} peerDependencies: typescript: '>=5.0.0' @@ -2136,30 +1977,42 @@ packages: typescript: optional: true - '@serwist/next@9.2.3': - resolution: {integrity: sha512-sbStIaen8H6ZhNCtfxAuZ2haujJe8nPFRBiq5KQFYYi5iyFrDGLpYICmRTBP6Oc1pQBmsAqbBZzIjjC60d+7zg==} + '@serwist/next@9.5.13': + resolution: {integrity: sha512-NyRUmZIhfN+8p/rWLWRlULt+0YGN6G90R2WKbYj8cq0/4VDhDaOrFXyI458Ym98ApQHrNwkUhgPzZMxQoxxWWA==} engines: {node: '>=18.0.0'} peerDependencies: + '@serwist/cli': ^9.5.13 next: '>=14.0.0' + react: '>=18.0.0' typescript: '>=5.0.0' peerDependenciesMeta: + '@serwist/cli': + optional: true typescript: optional: true - '@serwist/webpack-plugin@9.2.3': - resolution: {integrity: sha512-y1Ag1a7LARo/LtPVRSrfGO5PG4BZdc1NiMGAq+CGlBH/PJa7RQimo4iq9C94pjxusEsP4yHnsDQ06+GVTQ6gww==} + '@serwist/utils@9.5.13': + resolution: {integrity: sha512-jJJSvl0pSc6udJ7pN2u0oduOfQqSY6oJNjbIc82YcVnkpzj1O+qFHYdrR6tu9bspa30Nc8ZVV+VncOcyguvk5w==} + peerDependencies: + browserslist: '>=4' + peerDependenciesMeta: + browserslist: + optional: true + + '@serwist/webpack-plugin@9.5.13': + resolution: {integrity: sha512-pXfrV0kVUjoXGOu7D+1xEz06tsDgBNiqV5YXvvBpVLQrIsXOnUTs5H4VLZ2p7OjfuPt8Ho5QFrS6xt08hTPxRA==} engines: {node: '>=18.0.0'} peerDependencies: typescript: '>=5.0.0' - webpack: '>=5.104.0' + webpack: 4.4.0 || ^5.9.0 peerDependenciesMeta: typescript: optional: true webpack: optional: true - '@serwist/window@9.2.3': - resolution: {integrity: sha512-6bK01QAaFI+oXTmDSQHvsw0kTTNlj79PFkox+0Z9XYNqTVLoXY9C6BFmZNvxNxEinOqCSm7cms4I5V54E9/1XA==} + '@serwist/window@9.5.13': + resolution: {integrity: sha512-1xOBy3Cpe1qZ33GwQSeQk8fyklYc7wZsYzpmHq37RowRMaHvrKQkUFTUoZPyQG5YWwmvDbFVgOGba7UbXNhHfQ==} peerDependencies: typescript: '>=5.0.0' peerDependenciesMeta: @@ -2327,8 +2180,8 @@ packages: engines: {node: '>=18'} peerDependencies: '@testing-library/dom': ^10.0.0 - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': ^18.0.0 || ^19.0.0 + '@types/react-dom': ^18.0.0 || ^19.0.0 react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 peerDependenciesMeta: @@ -2414,8 +2267,10 @@ packages: '@types/formidable@3.4.6': resolution: {integrity: sha512-LI4Hk+KNsM5q7br4oMVoaWeb+gUqJpz1N8+Y2Q6Cz9cVH33ybahRKUWaRmMboVlkwSbOUGgwc/pEkS7yMSzoWg==} - '@types/hoist-non-react-statics@3.3.6': - resolution: {integrity: sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==} + '@types/hoist-non-react-statics@3.3.7': + resolution: {integrity: sha512-PQTyIulDkIDro8P+IHbKCsw7U2xxBYflVzW/FgWdCAePD9xGSidgA76/GeJ6lBKoblyhf9pBY763gbrN+1dI8g==} + peerDependencies: + '@types/react': '*' '@types/istanbul-lib-coverage@2.0.6': resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} @@ -2441,7 +2296,7 @@ packages: '@types/react-dom@19.3.0': resolution: {integrity: sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==} peerDependencies: - '@types/react': 19.3.0 + '@types/react': ^19.3.0 '@types/react@19.3.0': resolution: {integrity: sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==} @@ -2464,45 +2319,6 @@ packages: '@types/yargs@17.0.33': resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20251016.1': - resolution: {integrity: sha512-TBSMWAhEaHGMwDRYxY5Lpjgr0JMdtdYEr/ha1pdvAP7g+D23EnKNsIpf2bv2FoBkWb5gsh33tT6GcZV0N2bICg==} - cpu: [arm64] - os: [darwin] - - '@typescript/native-preview-darwin-x64@7.0.0-dev.20251016.1': - resolution: {integrity: sha512-NRoRafU+2T0PvfpXjxSb99tw1Qu+KrWTiq5i8AdTjGNU2nvD7yB5YeXzEn5L1vylATpxs8oxKbJ5WSHFAZkvXw==} - cpu: [x64] - os: [darwin] - - '@typescript/native-preview-linux-arm64@7.0.0-dev.20251016.1': - resolution: {integrity: sha512-GCwepKA//bh1BX/VDk5Wzo8NQTe4NHcATSQyNqJo+cO1xKEYC4kZFf+0gmjUIo7QnwoHDVlK7tissY3FYIIx2Q==} - cpu: [arm64] - os: [linux] - - '@typescript/native-preview-linux-arm@7.0.0-dev.20251016.1': - resolution: {integrity: sha512-4A4q5LUXUluG1vNaU6QqbflPPXxqcMYMMJstgvpz0SJ+pEKzFOeZXYhW254Qdliho6obqB0FHG9IlnQNAvorFw==} - cpu: [arm] - os: [linux] - - '@typescript/native-preview-linux-x64@7.0.0-dev.20251016.1': - resolution: {integrity: sha512-qmeugyy+02ipEBWevwJrlg6lpIhrziUF5dT0LZp4Qr4moojX/yZIPAelaWzgfe092NOgbTw2bFSzaJk1KK0s6g==} - cpu: [x64] - os: [linux] - - '@typescript/native-preview-win32-arm64@7.0.0-dev.20251016.1': - resolution: {integrity: sha512-7FwP4aMgHx1hcZtFT5WGyyjTliDj2jF2cG1gQcBX+GR2d+DcRUoF41E7WtaPBkBfrfrgjYdxgpliCmDLF4WHMg==} - cpu: [arm64] - os: [win32] - - '@typescript/native-preview-win32-x64@7.0.0-dev.20251016.1': - resolution: {integrity: sha512-Q9FeuI8pPmCmpONwc0/mClxHZCzQVvDYbD21lZKoT/yILvtEwRL4HD5VnlTve7fzjhXCkj9R+8I+Nk+Y33n9ug==} - cpu: [x64] - os: [win32] - - '@typescript/native-preview@7.0.0-dev.20251016.1': - resolution: {integrity: sha512-OMnnupqcqdcbf4lryAKyIDWNJHc1dP13OcKmV5aPUY2dJIYBD0ud4xgOkp/zdOoLBCpdRMIMjzziI6PYATMWdw==} - hasBin: true - '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -2703,6 +2519,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + baseline-browser-mapping@2.11.28: resolution: {integrity: sha512-br0LOmjJqr6Rt4AEkadbcNf67Zpo7EPwKsWbjnRrJIa1QYFHQBqM4C7F2WTbV8ahTEcg1Eo+Y0aWjjORInYFyA==} engines: {node: '>=6.0.0'} @@ -2712,15 +2532,22 @@ packages: resolution: {integrity: sha512-V8fbOCSeOFvlDj7LLChUcqbZrdKD9RU/VR260piF1790vT0mfLSwGc/Qzxv3IqiTukOpNtItePa0HBpMAj7MDg==} hasBin: true - bn.js@5.2.3: - resolution: {integrity: sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==} + bn.js@4.12.5: + resolution: {integrity: sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==} boring-avatars@1.11.2: resolution: {integrity: sha512-3+wkwPeObwS4R37FGXMYViqc4iTrIRj5yzfX9Qy4mnpZ26sX41dGMhsAgmKks1r/uufY1pl4vpgzMWHYfJRb2A==} + brace-expansion@1.1.21: + resolution: {integrity: sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==} + brace-expansion@2.0.3: resolution: {integrity: sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==} + brace-expansion@5.0.12: + resolution: {integrity: sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==} + engines: {node: 20 || >=22} + browser-image-compression@2.0.2: resolution: {integrity: sha512-pBLlQyUf6yB8SmmngrcOw3EoS4RpQ1BcylI3T9Yqn7+4nrQTXJD4sJDe5ODnJdrvNMaio5OicFo75rDyJD2Ucw==} @@ -2729,6 +2556,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.29.3: + resolution: {integrity: sha512-1R4kiYKXGViqEN0CnoDrXc1StD9niAwu+j2dukWzrD4bJgsD4lDmEp0CRbc6E/vYJIfTHwPmwyaKtVSudICdPA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -2765,14 +2597,13 @@ packages: caniuse-lite@1.0.30001760: resolution: {integrity: sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==} + caniuse-lite@1.0.30001816: + resolution: {integrity: sha512-+8Yx7BXCoqk6IF8yTicjfUR6D/ldJzdlsodlEOiOSPmhK844WIgk67/zIQaGAOxNkZyyvBlrRFnLvqKIoqbAFw==} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.6.2: - resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} @@ -2848,6 +2679,9 @@ packages: resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} engines: {node: '>=4.0.0'} + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + confbox@0.2.2: resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} @@ -2866,9 +2700,6 @@ packages: resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==} engines: {node: '>=18'} - core-js@3.43.0: - resolution: {integrity: sha512-N6wEbTTZSYOY2rYAn85CuvWWkCK6QweMn7/4Nr3w+gDBeBhk/x4EJeY6FPo4QzDoJZxVTv8U7CMvgWk6pOHHqA==} - create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} @@ -2880,9 +2711,6 @@ packages: resolution: {integrity: sha512-T3S35zmD0Ai2B4ko6+mEM+k9C6tipe2nB9RLiGT6QL2Wn0Vsn2cCZAC8Oeuf4CaE00GZWVdpYitbpWCNlIWqdA==} hasBin: true - cross-fetch@4.1.0: - resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==} - cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -3000,6 +2828,9 @@ packages: electron-to-chromium@1.5.267: resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==} + electron-to-chromium@1.5.456: + resolution: {integrity: sha512-8hboqI6xesozteFb8aa7OGknvxUtTeRJLz0FoePysUEh/oWbddykIGdgpEJRbPRg/nIMfBf2DFos+H2MtvJl2A==} + emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} @@ -3178,6 +3009,10 @@ packages: resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} hasBin: true + glob@13.0.6: + resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} + engines: {node: 18 || 20 || >=22} + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me @@ -3242,21 +3077,22 @@ packages: i18next-browser-languagedetector@8.2.1: resolution: {integrity: sha512-bZg8+4bdmaOiApD7N7BPT9W8MLZG+nPTOFlLiJiT8uzKXFjhxw4v2ierCXOwB5sFDMtuA5G4kgYZ0AznZxQ/cw==} - i18next-fs-backend@2.6.0: - resolution: {integrity: sha512-3ZlhNoF9yxnM8pa8bWp5120/Ob6t4lVl1l/tbLmkml/ei3ud8IWySCHt2lrY5xWRlSU5D9IV2sm5bEbGuTqwTw==} - - i18next-http-backend@3.0.6: - resolution: {integrity: sha512-mBOqy8993jtqAoj6XaI1XeC/8/9v6EPS+681ziegrPvTB0DoaCY7PpTS0SpY56qLMoS4OI1TZEM2Zf59zNh05w==} + i18next-http-backend@4.0.2: + resolution: {integrity: sha512-oay62dIB2kL7+WHzoUXBjWfL3+mwijD3pQkQkIEaRLhy6kjXxUhrRenV0gInwlCASAaJaDy94+XvYizK+cAGdA==} + engines: {node: '>=18'} i18next-icu@2.4.4: resolution: {integrity: sha512-yfYdGTftClNUnZAQG1cu0yHHLaMVsrqfcgQHHchGDufkunBLKHuw2wXTCDuE+8mWMMcdePl8UBR0EUUA/3+FDw==} peerDependencies: intl-messageformat: '>=10.3.3 <12.0.0' - i18next@25.10.10: - resolution: {integrity: sha512-cqUW2Z3EkRx7NqSyywjkgCLK7KLCL6IFVFcONG7nVYIJ3ekZ1/N5jUsihHV6Bq37NfhgtczxJcxduELtjTwkuQ==} + i18next-resources-to-backend@1.2.3: + resolution: {integrity: sha512-8Y/LLAm5fqZc2ckQxtTWbu75ndjNLzF7mcYl6rhc4g+WBopIsG3YhdYqF5qhJy64tlYhlU2KSSnEgW3gGHLqwg==} + + i18next@26.4.5: + resolution: {integrity: sha512-CY9xqbWNQ+eLGDhFX3eNl1kDO1amJixszVKjC4Nd0tvfxUFLKqarN0VUHRt+2b88U7bkNIhnL84dRKQ5mFI+fg==} peerDependencies: - typescript: ^5 || ^6 + typescript: ^5 || ^6 || ^7 peerDependenciesMeta: typescript: optional: true @@ -3528,6 +3364,9 @@ packages: jws@4.0.1: resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -3618,9 +3457,6 @@ packages: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} - lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - log-update@6.1.0: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} @@ -3632,6 +3468,10 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.5.3: + resolution: {integrity: sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -3639,10 +3479,14 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} - lucide-react@0.544.0: - resolution: {integrity: sha512-t5tS44bqd825zAW45UQxpG2CvcC4urOwn2TrwSH8u+MjeE+1NnWl6QqeQ/6NdjMqdOygyiT9p3Ev0p1NJykxjw==} + lucide-react@1.57.0: + resolution: {integrity: sha512-bXFZEucYhAzLD62Jse76AbTR6LiSLTn3Tqir2f1n8rZrWAdLodYy7jnRZSPIT89dRLk/IseMOUWG82wJtTyTTw==} peerDependencies: + '@types/react': '*' react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true luxon@3.7.2: resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==} @@ -3695,6 +3539,13 @@ packages: minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + minimatch@10.2.6: + resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} + engines: {node: 18 || 20 || >=22} + + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + minimatch@9.0.9: resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} @@ -3706,6 +3557,10 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} + engines: {node: '>=16 || 14 >=14.17'} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -3746,14 +3601,14 @@ packages: nodemailer: optional: true - next-i18next@15.4.3: - resolution: {integrity: sha512-ZRmiz72o1Jvh2ZghCUQX1Ua5F/f2W1/Ila/L1ZeKVuSWiH7J4zfUedfDxNBEhj9lajREC7aoJuPXMFtKi2bdIg==} - engines: {node: '>=14'} + next-i18next@16.3.1: + resolution: {integrity: sha512-VVtXI4TYqsKPr5sVq5/kSpNWdjvlMwu2HpgLX4cvXBVB+t3LsjYMH2O8bs7xthBRREv+FIE3ihUg5ijmomzySA==} + engines: {node: '>=20'} peerDependencies: i18next: '>= 23.7.13' - next: '>= 12.0.0' - react: '>= 17.0.2' - react-i18next: '>= 13.5.0' + next: '>= 14.1.0' + react: '>= 18.0.0' + react-i18next: '>= 14.0.0' next-themes@0.4.6: resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} @@ -3785,21 +3640,16 @@ packages: node-fetch-native@1.6.7: resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} - node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} node-releases@2.0.27: resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + node-releases@2.0.58: + resolution: {integrity: sha512-BdiKAgbfRlvfMq/XzO/AF9NPmaA8a+YpLAyAFTVFBj3gARrAIfWvNq7Q7NE4se3KgFu0KkrvQMxTS0XVnsGzHg==} + engines: {node: '>=18'} + nodemailer@9.0.1: resolution: {integrity: sha512-Gwv8SQewT616ZM/URn0H54b8PWo/Wum7md3EW2aWy1lO27+WZCX+Xyak3J+NlmHUjDh5ME+uesJUDRbR3Ye8Bw==} engines: {node: '>=6.0.0'} @@ -3914,6 +3764,10 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} + path-scurry@2.0.2: + resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} + engines: {node: 18 || 20 || >=22} + pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} @@ -3923,6 +3777,10 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} + picomatch@4.0.4: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} @@ -3963,7 +3821,7 @@ packages: preact-render-to-string@5.2.6: resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==} peerDependencies: - preact: ^10.26.10 + preact: '>=10' preact@10.28.3: resolution: {integrity: sha512-tCmoRkPQLpBeWzpmbhryairGnhW9tKV6c6gr/w+RhoRoKEJwsjzipwp//1oCpGPOchvSLaAPlpcJi9MwMmoPyA==} @@ -4079,8 +3937,8 @@ packages: radix-ui@1.4.3: resolution: {integrity: sha512-aWizCQiyeAenIdUbqEpXgRA1ya65P13NKn/W8rWkcN0OPkRDxdBVLWnIEDsS2RpwCK2nobI7oMUSmexzTDyAmA==} peerDependencies: - '@types/react': 19.3.0 - '@types/react-dom': 19.3.0 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -4150,7 +4008,7 @@ packages: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} peerDependencies: - '@types/react': 19.3.0 + '@types/react': '*' react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': @@ -4160,7 +4018,7 @@ packages: resolution: {integrity: sha512-sGsQtcjMqdQyijAHytfGEELB8FufGbfXIsvUTe+NLx1GDRJCXtCFLBLUI1eyZCKXXvbEU2C6gai0PZKoIE9Vbg==} engines: {node: '>=10'} peerDependencies: - '@types/react': 19.3.0 + '@types/react': '*' react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -4170,7 +4028,7 @@ packages: resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} engines: {node: '>=10'} peerDependencies: - '@types/react': 19.3.0 + '@types/react': '*' react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -4180,7 +4038,7 @@ packages: resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} engines: {node: '>=10'} peerDependencies: - '@types/react': 19.3.0 + '@types/react': '*' react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -4258,9 +4116,13 @@ packages: typescript: optional: true - sharp@0.34.5: - resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + serwist@9.5.13: + resolution: {integrity: sha512-ZpskCei2d5Zcljeb6QvYP94pV5xY3GCdbOk0hOzMSEPFOqJDwJvMpQq7i1r/psuR1WQCsKX6p7UpLle6sTPYjw==} + peerDependencies: + typescript: '>=5.0.0' + peerDependenciesMeta: + typescript: + optional: true sharp@0.35.5: resolution: {integrity: sha512-Ywn4OnzGukp7CDMrp08RQ50YKmuwG47brZgIVPTvBaaAfQlRlygrRqSrxdCiL9M+LlzLBiJ68IR1QqvzHyjC7g==} @@ -4311,10 +4173,9 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} - deprecated: The work that was done in this beta branch won't be included in future versions + source-map@0.8.0: + resolution: {integrity: sha512-d8EqvL+k/SOXCreS/SUzg2ciyHqBBLcN/yuRjFsbvVhHTE2pgei7oAhmPM7kWFbkX6OSMQfUq4KbkF3au9lhYQ==} + engines: {node: '>= 12'} sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -4403,6 +4264,10 @@ packages: resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} engines: {node: ^14.18.0 || >=16.0.0} + tagged-tag@1.0.0: + resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} + engines: {node: '>=20'} + tailwind-merge@2.6.0: resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} @@ -4435,12 +4300,6 @@ packages: resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} engines: {node: '>=16'} - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - - tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - tr46@5.1.1: resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} engines: {node: '>=18'} @@ -4475,6 +4334,10 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} + type-fest@5.10.0: + resolution: {integrity: sha512-NoSdpq/WEiAg5sjmBkmV/hfxv6HJH4NqPNrqjtSO5CwRmpsDfaf4begxW34KdJykH/l1yHtwBWQkCRdoXO8mPA==} + engines: {node: '>=20'} + typescript@5.7.3: resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} engines: {node: '>=14.17'} @@ -4492,11 +4355,17 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.3.4: + resolution: {integrity: sha512-t8wonIOdQyOjtPd2VktlBu6QjTVTks6v8bSi7kd0r2Vll8TK1JYDZtRRdbmCHOAMphkZgrzK+L+vXK4pyZ8t4A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + use-callback-ref@1.3.3: resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} peerDependencies: - '@types/react': 19.3.0 + '@types/react': '*' react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -4506,7 +4375,7 @@ packages: resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} engines: {node: '>=10'} peerDependencies: - '@types/react': 19.3.0 + '@types/react': '*' react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -4554,12 +4423,6 @@ packages: engines: {node: '>= 16'} hasBin: true - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - - webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} @@ -4577,12 +4440,6 @@ packages: resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} engines: {node: '>=18'} - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - - whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -4660,14 +4517,14 @@ packages: zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - zod@4.1.12: - resolution: {integrity: sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==} + zod@4.6.5: + resolution: {integrity: sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==} zustand@4.5.7: resolution: {integrity: sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==} engines: {node: '>=12.7.0'} peerDependencies: - '@types/react': 19.3.0 + '@types/react': '>=16.8' immer: '>=9.0.6' react: '>=16.8' peerDependenciesMeta: @@ -5074,26 +4931,13 @@ snapshots: dependencies: react: 19.3.1 - '@img/colour@1.0.0': {} - - '@img/colour@1.1.0': - optional: true - - '@img/sharp-darwin-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.4 - optional: true + '@img/colour@1.1.0': {} '@img/sharp-darwin-arm64@0.35.5': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.3.4 optional: true - '@img/sharp-darwin-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.4 - optional: true - '@img/sharp-darwin-x64@0.35.5': optionalDependencies: '@img/sharp-libvips-darwin-x64': 1.3.4 @@ -5104,151 +4948,76 @@ snapshots: '@img/sharp-wasm32': 0.35.5 optional: true - '@img/sharp-libvips-darwin-arm64@1.2.4': - optional: true - '@img/sharp-libvips-darwin-arm64@1.3.4': optional: true - '@img/sharp-libvips-darwin-x64@1.2.4': - optional: true - '@img/sharp-libvips-darwin-x64@1.3.4': optional: true - '@img/sharp-libvips-linux-arm64@1.2.4': - optional: true - '@img/sharp-libvips-linux-arm64@1.3.4': optional: true - '@img/sharp-libvips-linux-arm@1.2.4': - optional: true - '@img/sharp-libvips-linux-arm@1.3.4': optional: true - '@img/sharp-libvips-linux-ppc64@1.2.4': - optional: true - '@img/sharp-libvips-linux-ppc64@1.3.4': optional: true - '@img/sharp-libvips-linux-riscv64@1.2.4': - optional: true - '@img/sharp-libvips-linux-riscv64@1.3.4': optional: true - '@img/sharp-libvips-linux-s390x@1.2.4': - optional: true - '@img/sharp-libvips-linux-s390x@1.3.4': optional: true - '@img/sharp-libvips-linux-x64@1.2.4': - optional: true - '@img/sharp-libvips-linux-x64@1.3.4': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': - optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.3.4': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.2.4': - optional: true - '@img/sharp-libvips-linuxmusl-x64@1.3.4': optional: true - '@img/sharp-linux-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.4 - optional: true - '@img/sharp-linux-arm64@0.35.5': optionalDependencies: '@img/sharp-libvips-linux-arm64': 1.3.4 optional: true - '@img/sharp-linux-arm@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.2.4 - optional: true - '@img/sharp-linux-arm@0.35.5': optionalDependencies: '@img/sharp-libvips-linux-arm': 1.3.4 optional: true - '@img/sharp-linux-ppc64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.2.4 - optional: true - '@img/sharp-linux-ppc64@0.35.5': optionalDependencies: '@img/sharp-libvips-linux-ppc64': 1.3.4 optional: true - '@img/sharp-linux-riscv64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-riscv64': 1.2.4 - optional: true - '@img/sharp-linux-riscv64@0.35.5': optionalDependencies: '@img/sharp-libvips-linux-riscv64': 1.3.4 optional: true - '@img/sharp-linux-s390x@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.2.4 - optional: true - '@img/sharp-linux-s390x@0.35.5': optionalDependencies: '@img/sharp-libvips-linux-s390x': 1.3.4 optional: true - '@img/sharp-linux-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.2.4 - optional: true - '@img/sharp-linux-x64@0.35.5': optionalDependencies: '@img/sharp-libvips-linux-x64': 1.3.4 optional: true - '@img/sharp-linuxmusl-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 - optional: true - '@img/sharp-linuxmusl-arm64@0.35.5': optionalDependencies: '@img/sharp-libvips-linuxmusl-arm64': 1.3.4 optional: true - '@img/sharp-linuxmusl-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 - optional: true - '@img/sharp-linuxmusl-x64@0.35.5': optionalDependencies: '@img/sharp-libvips-linuxmusl-x64': 1.3.4 optional: true - '@img/sharp-wasm32@0.34.5': - dependencies: - '@emnapi/runtime': 1.7.1 - optional: true - '@img/sharp-wasm32@0.35.5': dependencies: '@emnapi/runtime': 1.11.3 @@ -5259,21 +5028,12 @@ snapshots: '@img/sharp-wasm32': 0.35.5 optional: true - '@img/sharp-win32-arm64@0.34.5': - optional: true - '@img/sharp-win32-arm64@0.35.5': optional: true - '@img/sharp-win32-ia32@0.34.5': - optional: true - '@img/sharp-win32-ia32@0.35.5': optional: true - '@img/sharp-win32-x64@0.34.5': - optional: true - '@img/sharp-win32-x64@0.35.5': optional: true @@ -6475,45 +6235,62 @@ snapshots: '@radix-ui/rect@1.1.1': {} - '@serwist/build@9.2.3(typescript@5.7.3)': + '@serwist/build@9.5.13(browserslist@4.29.3)(typescript@5.7.3)': dependencies: + '@serwist/utils': 9.5.13(browserslist@4.29.3) common-tags: 1.8.2 - glob: 10.5.0 + glob: 13.0.6 pretty-bytes: 6.1.1 - source-map: 0.8.0-beta.0 - zod: 4.1.12 + source-map: 0.8.0 + type-fest: 5.10.0 + zod: 4.6.5 optionalDependencies: typescript: 5.7.3 + transitivePeerDependencies: + - browserslist - '@serwist/next@9.2.3(next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(typescript@5.7.3)': + '@serwist/next@9.5.13(next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(react@19.3.1)(typescript@5.7.3)': dependencies: - '@serwist/build': 9.2.3(typescript@5.7.3) - '@serwist/webpack-plugin': 9.2.3(typescript@5.7.3) - '@serwist/window': 9.2.3(typescript@5.7.3) - chalk: 5.6.2 - glob: 10.5.0 + '@serwist/build': 9.5.13(browserslist@4.29.3)(typescript@5.7.3) + '@serwist/utils': 9.5.13(browserslist@4.29.3) + '@serwist/webpack-plugin': 9.5.13(browserslist@4.29.3)(typescript@5.7.3) + '@serwist/window': 9.5.13(browserslist@4.29.3)(typescript@5.7.3) + browserslist: 4.29.3 + glob: 13.0.6 + kolorist: 1.8.0 next: 16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) - serwist: 9.2.3(typescript@5.7.3) - zod: 4.1.12 + react: 19.3.1 + semver: 7.8.5 + serwist: 9.5.13(browserslist@4.29.3)(typescript@5.7.3) + zod: 4.6.5 optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - webpack - '@serwist/webpack-plugin@9.2.3(typescript@5.7.3)': + '@serwist/utils@9.5.13(browserslist@4.29.3)': + optionalDependencies: + browserslist: 4.29.3 + + '@serwist/webpack-plugin@9.5.13(browserslist@4.29.3)(typescript@5.7.3)': dependencies: - '@serwist/build': 9.2.3(typescript@5.7.3) + '@serwist/build': 9.5.13(browserslist@4.29.3)(typescript@5.7.3) + '@serwist/utils': 9.5.13(browserslist@4.29.3) pretty-bytes: 6.1.1 - zod: 4.1.12 + zod: 4.6.5 optionalDependencies: typescript: 5.7.3 + transitivePeerDependencies: + - browserslist - '@serwist/window@9.2.3(typescript@5.7.3)': + '@serwist/window@9.5.13(browserslist@4.29.3)(typescript@5.7.3)': dependencies: '@types/trusted-types': 2.0.7 - serwist: 9.2.3(typescript@5.7.3) + serwist: 9.5.13(browserslist@4.29.3)(typescript@5.7.3) optionalDependencies: typescript: 5.7.3 + transitivePeerDependencies: + - browserslist '@sinclair/typebox@0.34.40': {} @@ -6724,7 +6501,7 @@ snapshots: dependencies: '@types/node': 22.19.3 - '@types/hoist-non-react-statics@3.3.6': + '@types/hoist-non-react-statics@3.3.7(@types/react@19.3.0)': dependencies: '@types/react': 19.3.0 hoist-non-react-statics: 3.3.2 @@ -6782,37 +6559,6 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20251016.1': - optional: true - - '@typescript/native-preview-darwin-x64@7.0.0-dev.20251016.1': - optional: true - - '@typescript/native-preview-linux-arm64@7.0.0-dev.20251016.1': - optional: true - - '@typescript/native-preview-linux-arm@7.0.0-dev.20251016.1': - optional: true - - '@typescript/native-preview-linux-x64@7.0.0-dev.20251016.1': - optional: true - - '@typescript/native-preview-win32-arm64@7.0.0-dev.20251016.1': - optional: true - - '@typescript/native-preview-win32-x64@7.0.0-dev.20251016.1': - optional: true - - '@typescript/native-preview@7.0.0-dev.20251016.1': - optionalDependencies: - '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20251016.1 - '@typescript/native-preview-darwin-x64': 7.0.0-dev.20251016.1 - '@typescript/native-preview-linux-arm': 7.0.0-dev.20251016.1 - '@typescript/native-preview-linux-arm64': 7.0.0-dev.20251016.1 - '@typescript/native-preview-linux-x64': 7.0.0-dev.20251016.1 - '@typescript/native-preview-win32-arm64': 7.0.0-dev.20251016.1 - '@typescript/native-preview-win32-x64': 7.0.0-dev.20251016.1 - '@ungap/structured-clone@1.3.0': {} '@unrs/resolver-binding-android-arm-eabi@1.11.1': @@ -6905,7 +6651,7 @@ snapshots: anymatch@3.1.3: dependencies: normalize-path: 3.0.0 - picomatch: 4.0.4 + picomatch: 2.3.2 arg@4.1.3: {} @@ -6927,7 +6673,7 @@ snapshots: asn1.js@5.4.1: dependencies: - bn.js: 5.2.3 + bn.js: 4.12.5 inherits: 2.0.4 minimalistic-assert: 1.0.1 safer-buffer: 2.1.2 @@ -6996,18 +6742,29 @@ snapshots: balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + baseline-browser-mapping@2.11.28: {} baseline-browser-mapping@2.9.9: {} - bn.js@5.2.3: {} + bn.js@4.12.5: {} boring-avatars@1.11.2: {} + brace-expansion@1.1.21: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + brace-expansion@2.0.3: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.12: + dependencies: + balanced-match: 4.0.4 + browser-image-compression@2.0.2: dependencies: uzip: 0.20201231.0 @@ -7020,6 +6777,14 @@ snapshots: node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) + browserslist@4.29.3: + dependencies: + baseline-browser-mapping: 2.11.28 + caniuse-lite: 1.0.30001816 + electron-to-chromium: 1.5.456 + node-releases: 2.0.58 + update-browserslist-db: 1.3.4(browserslist@4.29.3) + bser@2.1.1: dependencies: node-int64: 0.4.0 @@ -7056,13 +6821,13 @@ snapshots: caniuse-lite@1.0.30001760: {} + caniuse-lite@1.0.30001816: {} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.6.2: {} - char-regex@1.0.2: {} chokidar@4.0.3: @@ -7132,6 +6897,8 @@ snapshots: common-tags@1.8.2: {} + concat-map@0.0.1: {} + confbox@0.2.2: {} consola@3.4.2: {} @@ -7144,8 +6911,6 @@ snapshots: dependencies: is-what: 5.5.0 - core-js@3.43.0: {} - create-require@1.1.1: {} cron-parser@4.9.0: @@ -7154,12 +6919,6 @@ snapshots: cronstrue@3.9.0: {} - cross-fetch@4.1.0: - dependencies: - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -7246,6 +7005,8 @@ snapshots: electron-to-chromium@1.5.267: {} + electron-to-chromium@1.5.456: {} + emittery@0.13.1: {} emoji-regex@10.6.0: {} @@ -7444,12 +7205,18 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + glob@13.0.6: + dependencies: + minimatch: 10.2.6 + minipass: 7.1.3 + path-scurry: 2.0.2 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 9.0.9 + minimatch: 3.1.5 once: 1.4.0 path-is-absolute: 1.0.1 @@ -7507,21 +7274,17 @@ snapshots: dependencies: '@babel/runtime': 7.28.4 - i18next-fs-backend@2.6.0: {} - - i18next-http-backend@3.0.6: - dependencies: - cross-fetch: 4.1.0 - transitivePeerDependencies: - - encoding + i18next-http-backend@4.0.2: {} i18next-icu@2.4.4(intl-messageformat@10.7.18): dependencies: intl-messageformat: 10.7.18 - i18next@25.10.10(typescript@5.7.3): + i18next-resources-to-backend@1.2.3: dependencies: '@babel/runtime': 7.29.2 + + i18next@26.4.5(typescript@5.7.3): optionalDependencies: typescript: 5.7.3 @@ -7990,6 +7753,8 @@ snapshots: jwa: 2.0.1 safe-buffer: 5.2.1 + kolorist@1.8.0: {} + leven@3.1.0: {} lightningcss-android-arm64@1.30.2: @@ -8065,8 +7830,6 @@ snapshots: dependencies: p-locate: 4.1.0 - lodash.sortby@4.7.0: {} - log-update@6.1.0: dependencies: ansi-escapes: 7.2.0 @@ -8081,6 +7844,8 @@ snapshots: lru-cache@10.4.3: {} + lru-cache@11.5.3: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -8089,9 +7854,11 @@ snapshots: dependencies: yallist: 4.0.0 - lucide-react@0.544.0(react@19.3.1): + lucide-react@1.57.0(@types/react@19.3.0)(react@19.3.1): dependencies: react: 19.3.1 + optionalDependencies: + '@types/react': 19.3.0 luxon@3.7.2: {} @@ -8103,7 +7870,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.7.3 + semver: 7.8.5 make-error@1.3.6: {} @@ -8129,6 +7896,14 @@ snapshots: minimalistic-assert@1.0.1: {} + minimatch@10.2.6: + dependencies: + brace-expansion: 5.0.12 + + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.21 + minimatch@9.0.9: dependencies: brace-expansion: 2.0.3 @@ -8137,6 +7912,8 @@ snapshots: minipass@7.1.2: {} + minipass@7.1.3: {} + ms@2.1.3: {} nanoid@3.3.11: {} @@ -8166,17 +7943,17 @@ snapshots: optionalDependencies: nodemailer: 9.0.1 - next-i18next@15.4.3(i18next@25.10.10(typescript@5.7.3))(next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(react-i18next@15.7.4(i18next@25.10.10(typescript@5.7.3))(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(typescript@5.7.3))(react@19.3.1): + next-i18next@16.3.1(@types/react@19.3.0)(i18next@26.4.5(typescript@5.7.3))(next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(react-i18next@15.7.4(i18next@26.4.5(typescript@5.7.3))(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(typescript@5.7.3))(react@19.3.1): dependencies: - '@babel/runtime': 7.28.4 - '@types/hoist-non-react-statics': 3.3.6 - core-js: 3.43.0 + '@types/hoist-non-react-statics': 3.3.7(@types/react@19.3.0) hoist-non-react-statics: 3.3.2 - i18next: 25.10.10(typescript@5.7.3) - i18next-fs-backend: 2.6.0 + i18next: 26.4.5(typescript@5.7.3) + i18next-resources-to-backend: 1.2.3 next: 16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) react: 19.3.1 - react-i18next: 15.7.4(i18next@25.10.10(typescript@5.7.3))(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(typescript@5.7.3) + react-i18next: 15.7.4(i18next@26.4.5(typescript@5.7.3))(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(typescript@5.7.3) + transitivePeerDependencies: + - '@types/react' next-themes@0.4.6(react-dom@19.3.1(react@19.3.1))(react@19.3.1): dependencies: @@ -8211,14 +7988,12 @@ snapshots: node-fetch-native@1.6.7: {} - node-fetch@2.7.0: - dependencies: - whatwg-url: 5.0.0 - node-int64@0.4.0: {} node-releases@2.0.27: {} + node-releases@2.0.58: {} + nodemailer@9.0.1: {} nordigen-node@1.4.1: @@ -8345,12 +8120,19 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 + path-scurry@2.0.2: + dependencies: + lru-cache: 11.5.3 + minipass: 7.1.3 + pathe@2.0.3: {} perfect-debounce@1.0.0: {} picocolors@1.1.1: {} + picomatch@2.3.2: {} + picomatch@4.0.4: {} pirates@4.0.7: {} @@ -8534,11 +8316,11 @@ snapshots: dependencies: react: 19.3.1 - react-i18next@15.7.4(i18next@25.10.10(typescript@5.7.3))(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(typescript@5.7.3): + react-i18next@15.7.4(i18next@26.4.5(typescript@5.7.3))(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(typescript@5.7.3): dependencies: '@babel/runtime': 7.27.6 html-parse-stringify: 3.0.1 - i18next: 25.10.10(typescript@5.7.3) + i18next: 26.4.5(typescript@5.7.3) react: 19.3.1 optionalDependencies: react-dom: 19.3.1(react@19.3.1) @@ -8636,8 +8418,7 @@ snapshots: semver@7.7.3: {} - semver@7.8.5: - optional: true + semver@7.8.5: {} serwist@9.2.3(typescript@5.7.3): dependencies: @@ -8645,36 +8426,14 @@ snapshots: optionalDependencies: typescript: 5.7.3 - sharp@0.34.5: + serwist@9.5.13(browserslist@4.29.3)(typescript@5.7.3): dependencies: - '@img/colour': 1.0.0 - detect-libc: 2.1.2 - semver: 7.7.3 + '@serwist/utils': 9.5.13(browserslist@4.29.3) + idb: 8.0.3 optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.5 - '@img/sharp-darwin-x64': 0.34.5 - '@img/sharp-libvips-darwin-arm64': 1.2.4 - '@img/sharp-libvips-darwin-x64': 1.2.4 - '@img/sharp-libvips-linux-arm': 1.2.4 - '@img/sharp-libvips-linux-arm64': 1.2.4 - '@img/sharp-libvips-linux-ppc64': 1.2.4 - '@img/sharp-libvips-linux-riscv64': 1.2.4 - '@img/sharp-libvips-linux-s390x': 1.2.4 - '@img/sharp-libvips-linux-x64': 1.2.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 - '@img/sharp-linux-arm': 0.34.5 - '@img/sharp-linux-arm64': 0.34.5 - '@img/sharp-linux-ppc64': 0.34.5 - '@img/sharp-linux-riscv64': 0.34.5 - '@img/sharp-linux-s390x': 0.34.5 - '@img/sharp-linux-x64': 0.34.5 - '@img/sharp-linuxmusl-arm64': 0.34.5 - '@img/sharp-linuxmusl-x64': 0.34.5 - '@img/sharp-wasm32': 0.34.5 - '@img/sharp-win32-arm64': 0.34.5 - '@img/sharp-win32-ia32': 0.34.5 - '@img/sharp-win32-x64': 0.34.5 + typescript: 5.7.3 + transitivePeerDependencies: + - browserslist sharp@0.35.5(@types/node@22.19.3): dependencies: @@ -8708,7 +8467,6 @@ snapshots: '@img/sharp-win32-ia32': 0.35.5 '@img/sharp-win32-x64': 0.35.5 '@types/node': 22.19.3 - optional: true shebang-command@2.0.0: dependencies: @@ -8741,9 +8499,7 @@ snapshots: source-map@0.6.1: {} - source-map@0.8.0-beta.0: - dependencies: - whatwg-url: 7.1.0 + source-map@0.8.0: {} sprintf-js@1.0.3: {} @@ -8824,6 +8580,8 @@ snapshots: dependencies: '@pkgr/core': 0.2.9 + tagged-tag@1.0.0: {} + tailwind-merge@2.6.0: {} tailwindcss@4.1.18: {} @@ -8834,7 +8592,7 @@ snapshots: dependencies: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 - minimatch: 9.0.9 + minimatch: 3.1.5 tinyexec@1.0.4: {} @@ -8850,12 +8608,6 @@ snapshots: dependencies: tldts: 6.1.86 - tr46@0.0.3: {} - - tr46@1.0.1: - dependencies: - punycode: 2.3.1 - tr46@5.1.1: dependencies: punycode: 2.3.1 @@ -8891,6 +8643,10 @@ snapshots: type-fest@0.21.3: {} + type-fest@5.10.0: + dependencies: + tagged-tag: 1.0.0 + typescript@5.7.3: {} undici-types@6.21.0: {} @@ -8925,6 +8681,12 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + update-browserslist-db@1.3.4(browserslist@4.29.3): + dependencies: + browserslist: 4.29.3 + escalade: 3.2.0 + picocolors: 1.1.1 + use-callback-ref@1.3.3(@types/react@19.3.0)(react@19.3.1): dependencies: react: 19.3.1 @@ -8985,10 +8747,6 @@ snapshots: transitivePeerDependencies: - supports-color - webidl-conversions@3.0.1: {} - - webidl-conversions@4.0.2: {} - webidl-conversions@7.0.0: {} whatwg-encoding@3.1.1: @@ -9002,17 +8760,6 @@ snapshots: tr46: 5.1.1 webidl-conversions: 7.0.0 - whatwg-url@5.0.0: - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - - whatwg-url@7.1.0: - dependencies: - lodash.sortby: 4.7.0 - tr46: 1.0.1 - webidl-conversions: 4.0.2 - which@2.0.2: dependencies: isexe: 2.0.0 @@ -9074,7 +8821,7 @@ snapshots: zod@3.25.76: {} - zod@4.1.12: {} + zod@4.6.5: {} zustand@4.5.7(@types/react@19.3.0)(react@19.3.1): dependencies: diff --git a/src/utils/i18n/pages.ts b/src/utils/i18n/pages.ts new file mode 100644 index 000000000..832043897 --- /dev/null +++ b/src/utils/i18n/pages.ts @@ -0,0 +1,2 @@ +// Keep legacy imports compatible with next-i18next v16's Pages Router entry point. +export * from 'next-i18next/pages'; diff --git a/src/utils/i18n/serverSideTranslations.ts b/src/utils/i18n/serverSideTranslations.ts new file mode 100644 index 000000000..bdfcc126d --- /dev/null +++ b/src/utils/i18n/serverSideTranslations.ts @@ -0,0 +1 @@ +export * from 'next-i18next/pages/serverSideTranslations'; diff --git a/tsconfig.json b/tsconfig.json index 02c202013..309ca6a42 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,26 +8,29 @@ "resolveJsonModule": true, "moduleDetection": "force", "isolatedModules": true, - /* Strictness */ "strict": true, "noUncheckedIndexedAccess": true, "checkJs": true, - /* Bundled projects */ "lib": ["dom", "dom.iterable", "ES2023", "WebWorker"], "noEmit": true, "allowImportingTsExtensions": true, "module": "ESNext", "moduleResolution": "Bundler", - "jsx": "preserve", - "plugins": [{ "name": "next" }], + "jsx": "react-jsx", + "plugins": [ + { + "name": "next" + } + ], "incremental": true, - /* Path Aliases */ "paths": { "~/*": ["./src/*"], - "@/*": ["./*"] + "@/*": ["./*"], + "next-i18next": ["./src/utils/i18n/pages.ts"], + "next-i18next/serverSideTranslations": ["./src/utils/i18n/serverSideTranslations.ts"] } }, "include": [ From ab21e1029cb3327437324132d591040e6c0fde9b Mon Sep 17 00:00:00 2001 From: krokosik Date: Wed, 14 Oct 2026 22:00:00 +0200 Subject: [PATCH 03/59] Clean up opencode deps --- .../skills/find-docs/SKILL.md | 0 .../skills/playwright-cli/SKILL.md | 0 .../references/request-mocking.md | 0 .../playwright-cli/references/running-code.md | 0 .../references/session-management.md | 0 .../references/storage-state.md | 0 .../references/test-generation.md | 0 .../playwright-cli/references/tracing.md | 0 .../references/video-recording.md | 0 {.opencode => .agents}/skills/shadcn/SKILL.md | 0 .../skills/shadcn/agents/openai.yml | 0 .../skills/shadcn/assets/shadcn-small.png | Bin .../skills/shadcn/assets/shadcn.png | Bin {.opencode => .agents}/skills/shadcn/cli.md | 0 .../skills/shadcn/customization.md | 0 .../skills/shadcn/evals/evals.json | 0 {.opencode => .agents}/skills/shadcn/mcp.md | 0 .../skills/shadcn/rules/base-vs-radix.md | 0 .../skills/shadcn/rules/composition.md | 0 .../skills/shadcn/rules/forms.md | 0 .../skills/shadcn/rules/icons.md | 0 .../skills/shadcn/rules/styling.md | 0 .github/copilot-instructions.md | 271 ------------------ .opencode/package-lock.json | 115 -------- .opencode/opencode.json => opencode.jsonc | 8 +- 25 files changed, 4 insertions(+), 390 deletions(-) rename {.opencode => .agents}/skills/find-docs/SKILL.md (100%) rename {.opencode => .agents}/skills/playwright-cli/SKILL.md (100%) rename {.opencode => .agents}/skills/playwright-cli/references/request-mocking.md (100%) rename {.opencode => .agents}/skills/playwright-cli/references/running-code.md (100%) rename {.opencode => .agents}/skills/playwright-cli/references/session-management.md (100%) rename {.opencode => .agents}/skills/playwright-cli/references/storage-state.md (100%) rename {.opencode => .agents}/skills/playwright-cli/references/test-generation.md (100%) rename {.opencode => .agents}/skills/playwright-cli/references/tracing.md (100%) rename {.opencode => .agents}/skills/playwright-cli/references/video-recording.md (100%) rename {.opencode => .agents}/skills/shadcn/SKILL.md (100%) rename {.opencode => .agents}/skills/shadcn/agents/openai.yml (100%) rename {.opencode => .agents}/skills/shadcn/assets/shadcn-small.png (100%) rename {.opencode => .agents}/skills/shadcn/assets/shadcn.png (100%) rename {.opencode => .agents}/skills/shadcn/cli.md (100%) rename {.opencode => .agents}/skills/shadcn/customization.md (100%) rename {.opencode => .agents}/skills/shadcn/evals/evals.json (100%) rename {.opencode => .agents}/skills/shadcn/mcp.md (100%) rename {.opencode => .agents}/skills/shadcn/rules/base-vs-radix.md (100%) rename {.opencode => .agents}/skills/shadcn/rules/composition.md (100%) rename {.opencode => .agents}/skills/shadcn/rules/forms.md (100%) rename {.opencode => .agents}/skills/shadcn/rules/icons.md (100%) rename {.opencode => .agents}/skills/shadcn/rules/styling.md (100%) delete mode 100644 .github/copilot-instructions.md delete mode 100644 .opencode/package-lock.json rename .opencode/opencode.json => opencode.jsonc (80%) diff --git a/.opencode/skills/find-docs/SKILL.md b/.agents/skills/find-docs/SKILL.md similarity index 100% rename from .opencode/skills/find-docs/SKILL.md rename to .agents/skills/find-docs/SKILL.md diff --git a/.opencode/skills/playwright-cli/SKILL.md b/.agents/skills/playwright-cli/SKILL.md similarity index 100% rename from .opencode/skills/playwright-cli/SKILL.md rename to .agents/skills/playwright-cli/SKILL.md diff --git a/.opencode/skills/playwright-cli/references/request-mocking.md b/.agents/skills/playwright-cli/references/request-mocking.md similarity index 100% rename from .opencode/skills/playwright-cli/references/request-mocking.md rename to .agents/skills/playwright-cli/references/request-mocking.md diff --git a/.opencode/skills/playwright-cli/references/running-code.md b/.agents/skills/playwright-cli/references/running-code.md similarity index 100% rename from .opencode/skills/playwright-cli/references/running-code.md rename to .agents/skills/playwright-cli/references/running-code.md diff --git a/.opencode/skills/playwright-cli/references/session-management.md b/.agents/skills/playwright-cli/references/session-management.md similarity index 100% rename from .opencode/skills/playwright-cli/references/session-management.md rename to .agents/skills/playwright-cli/references/session-management.md diff --git a/.opencode/skills/playwright-cli/references/storage-state.md b/.agents/skills/playwright-cli/references/storage-state.md similarity index 100% rename from .opencode/skills/playwright-cli/references/storage-state.md rename to .agents/skills/playwright-cli/references/storage-state.md diff --git a/.opencode/skills/playwright-cli/references/test-generation.md b/.agents/skills/playwright-cli/references/test-generation.md similarity index 100% rename from .opencode/skills/playwright-cli/references/test-generation.md rename to .agents/skills/playwright-cli/references/test-generation.md diff --git a/.opencode/skills/playwright-cli/references/tracing.md b/.agents/skills/playwright-cli/references/tracing.md similarity index 100% rename from .opencode/skills/playwright-cli/references/tracing.md rename to .agents/skills/playwright-cli/references/tracing.md diff --git a/.opencode/skills/playwright-cli/references/video-recording.md b/.agents/skills/playwright-cli/references/video-recording.md similarity index 100% rename from .opencode/skills/playwright-cli/references/video-recording.md rename to .agents/skills/playwright-cli/references/video-recording.md diff --git a/.opencode/skills/shadcn/SKILL.md b/.agents/skills/shadcn/SKILL.md similarity index 100% rename from .opencode/skills/shadcn/SKILL.md rename to .agents/skills/shadcn/SKILL.md diff --git a/.opencode/skills/shadcn/agents/openai.yml b/.agents/skills/shadcn/agents/openai.yml similarity index 100% rename from .opencode/skills/shadcn/agents/openai.yml rename to .agents/skills/shadcn/agents/openai.yml diff --git a/.opencode/skills/shadcn/assets/shadcn-small.png b/.agents/skills/shadcn/assets/shadcn-small.png similarity index 100% rename from .opencode/skills/shadcn/assets/shadcn-small.png rename to .agents/skills/shadcn/assets/shadcn-small.png diff --git a/.opencode/skills/shadcn/assets/shadcn.png b/.agents/skills/shadcn/assets/shadcn.png similarity index 100% rename from .opencode/skills/shadcn/assets/shadcn.png rename to .agents/skills/shadcn/assets/shadcn.png diff --git a/.opencode/skills/shadcn/cli.md b/.agents/skills/shadcn/cli.md similarity index 100% rename from .opencode/skills/shadcn/cli.md rename to .agents/skills/shadcn/cli.md diff --git a/.opencode/skills/shadcn/customization.md b/.agents/skills/shadcn/customization.md similarity index 100% rename from .opencode/skills/shadcn/customization.md rename to .agents/skills/shadcn/customization.md diff --git a/.opencode/skills/shadcn/evals/evals.json b/.agents/skills/shadcn/evals/evals.json similarity index 100% rename from .opencode/skills/shadcn/evals/evals.json rename to .agents/skills/shadcn/evals/evals.json diff --git a/.opencode/skills/shadcn/mcp.md b/.agents/skills/shadcn/mcp.md similarity index 100% rename from .opencode/skills/shadcn/mcp.md rename to .agents/skills/shadcn/mcp.md diff --git a/.opencode/skills/shadcn/rules/base-vs-radix.md b/.agents/skills/shadcn/rules/base-vs-radix.md similarity index 100% rename from .opencode/skills/shadcn/rules/base-vs-radix.md rename to .agents/skills/shadcn/rules/base-vs-radix.md diff --git a/.opencode/skills/shadcn/rules/composition.md b/.agents/skills/shadcn/rules/composition.md similarity index 100% rename from .opencode/skills/shadcn/rules/composition.md rename to .agents/skills/shadcn/rules/composition.md diff --git a/.opencode/skills/shadcn/rules/forms.md b/.agents/skills/shadcn/rules/forms.md similarity index 100% rename from .opencode/skills/shadcn/rules/forms.md rename to .agents/skills/shadcn/rules/forms.md diff --git a/.opencode/skills/shadcn/rules/icons.md b/.agents/skills/shadcn/rules/icons.md similarity index 100% rename from .opencode/skills/shadcn/rules/icons.md rename to .agents/skills/shadcn/rules/icons.md diff --git a/.opencode/skills/shadcn/rules/styling.md b/.agents/skills/shadcn/rules/styling.md similarity index 100% rename from .opencode/skills/shadcn/rules/styling.md rename to .agents/skills/shadcn/rules/styling.md diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md deleted file mode 100644 index 4d0f4a9f4..000000000 --- a/.github/copilot-instructions.md +++ /dev/null @@ -1,271 +0,0 @@ -# SplitPro AI Coding Agent Instructions - -## Architecture Overview - -SplitPro is a **Next.js PWA** expense-splitting app (Splitwise alternative). Core architecture: - -- **Frontend**: Next.js 15, React 19, Tailwind + ShadcnUI, Zustand for state -- **Backend**: tRPC routers with Prisma ORM, NextAuth for auth -- **Database**: PostgreSQL with BigInt for numerical precision -- **Key Services**: `src/server/api/services/splitService.ts` (core business logic) - -## Critical Design Principles - -### 1. **BigInt for All Financial Values** -- **All amounts are stored and computed as `BigInt`, never floats** to prevent rounding errors -- Use `getCurrencyHelpers({ currency, locale })` from `src/utils/numbers.ts` to get currency-aware helpers: - - `toUIString(value)` - Display BigInt as formatted currency (divides by 100 for cents) - - `toSafeBigInt(input)` - Parse user input to BigInt (multiplies by 100) - - Access these via `CurrencyHelpersContext` in React components -- `BigMath` utility (`src/utils/numbers.ts`) provides safe arithmetic: `abs`, `sign`, `min`, `max`, `roundDiv` -- **Jest setup**: `jest.shared.ts` configures real SuperJSON/ESM transforms; monetary values remain BigInts - -### 2. **Double-Entry Balance Accounting** -Every expense creates **two balance records** (bidirectional): -```typescript -// User A pays $100, User B owes $50: -Balance: A -> B: -50 (A is owed) -Balance: B -> A: +50 (B owes) -``` -- For **groups**: `GroupBalance` tracks intra-group debts separately -- Always update both directions when modifying expenses -- See: `src/server/api/services/splitService.ts` (`createExpense`, `editExpense`) - -### 3. **Transaction Batching with Prisma** -- Use `db.$transaction(operations)` for expense mutations to ensure atomicity -- Common pattern: collect `operations` array, execute once -- Example: `createExpense()` batches 10-15 upserts in single transaction - -### 4. **Split Types** -From `@prisma/client` SplitType enum: `EQUAL`, `PERCENTAGE`, `SHARE`, `EXACT`, `ADJUSTMENT`, `SETTLEMENT`, `CURRENCY_CONVERSION` -- Each split type has unique calculation logic in `addStore.ts`, except `SETTLEMENT` and `CURRENCY_CONVERSION` which are handled specially -- Use `calculateParticipantSplit()` to compute amounts based on type - -## File Structure & Key Patterns - -| Path | Purpose | -|------|---------| -| `src/server/api/services/splitService.ts` | Core: expense CRUD, balance updates | -| `src/server/api/routers/` | tRPC endpoints (expense, group, user, bankTransactions) | -| `src/store/addStore.ts` | Client-side form state + split calculations (Zustand) | -| `src/components/AddExpense/` | Form UI for adding/editing expenses | -| `src/lib/category.ts` | Expense categories (food, travel, etc.) | -| `src/lib/currency.ts` | Currency utilities and conversion | -| `prisma/schema.prisma` | Data model (2 schemas: `public`, `cron`) | - -## Common Workflows - -### Adding/Editing Expenses -1. Collect input in `addStore.ts` (amounts, participants, split type) -2. Call `expenseRouter.addOrEditExpense` tRPC endpoint -3. Endpoint validates with `createExpenseSchema` and calls `splitService.createExpense()` or `editExpense()` -4. Service batches balance upserts + sends push notifications - -### Deleting Expenses -- Call `deleteExpense()` → reverses all balances (negates participant amounts) -- Soft-deletes: sets `deletedAt` timestamp, expenses remain visible in history - -### Recalculating Balances -- Call `recalculateGroupBalances(groupId)` to rebuild group debts from scratch -- Used after imports or data repairs -- Resets all group balances to 0, then replays all non-deleted expenses - -## Testing & Build - -**Use `pnpm` (not npm)** - this project uses pnpm for dependency management. - -```bash -pnpm install # Install dependencies -pnpm dev # Next.js + turbopack dev server -pnpm dx # Full setup: install, docker up, migrations -pnpm test # Jest (BigInt.prototype.toJSON already defined) -pnpm test:watch # Jest in watch mode -pnpm lint # oxlint with type checking -pnpm build # Production build (no lint) -pnpm db:push # Sync schema changes to DB -pnpm db:studio # Open Prisma Studio GUI -pnpm db:seed # Seed database with dummy data -``` - -**Pre-commit hooks** (Husky): -```bash -pnpm lint-staged # Runs prettier on staged files -pnpm tsgo --noEmit # TypeScript type checking without emit -``` -Override with `git commit --no-verify` if needed. - -## Environment Setup - -Environment variables are validated via `@t3-oss/env-nextjs` in `src/env.ts`. Required variables: -- **Database**: `DATABASE_URL` or separate `POSTGRES_*` vars -- **Auth**: `NEXTAUTH_URL`, `NEXTAUTH_SECRET`, OAuth provider credentials (Google/Email SMTP) -- **Optional**: Bank integration (Plaid/GoCardless), currency rate API keys, push notification VAPID keys - -For local dev: run `pnpm d` to start PostgreSQL + MinIO in Docker. Access MinIO console at `http://localhost:9001` (user: `splitpro`, pass: `password`) to create access keys. - -## Data Flow Specifics - -### User Balance → Friend Balance -``` -Balance(userId, currency, friendId) -- userId owes/is-owed by friendId -- amount > 0: userId is owed (friend owes userId) -- amount < 0: userId owes (userId owes friend) -``` - -### Group Balance → Group Friend Balance -``` -GroupBalance(groupId, currency, userId, firendId) // note: typo "firendId" -- Within a specific group, userId's balance with firendId -- Isolated from general friend balances -``` - -## Integration Points - -- **Authentication**: NextAuth + custom session enrichment (adds `user.currency`, `preferredLanguage`) -- **Bank Integration**: Plaid + GoCardless via `bankTransactionHelper.ts` -- **Notifications**: Push via `service-notification.ts`, additionally poll the database for missed notifications -- **Currency Rates**: Pluggable providers (Frankfurter, OXR, NBP) in `currencyRateService.ts` -- **i18n**: next-i18next with Weblate; always add English keys first, let community translate -- **Dates**: Use `date-fns` for formatting/parsing, store all dates in UTC -- **PWA**: Serwist service worker (`worker/index.ts` → `public/sw.js`), disabled in dev mode - - -## Avoiding Common Pitfalls - -1. **Don't use floats**: All amounts must be BigInt before DB -2. **Participant amounts must be non-zero** (filtered on create): `participants.filter(p => 0n !== p.amount)` -3. **Always update both balance directions** when modifying expenses -4. **Test transactions**: Use `db.$transaction()` so failures rollback all operations -5. **For new languages**: Add to config after community translates on Weblate -6. **Currency precision**: Some currencies have 0 decimals (JPY) or 3 (BHD)—handle in display/input -7. **Typo in schema**: `firendId` (not `friendId`) in GroupBalance—maintain for consistency - -## tRPC API Endpoints - -The backend uses **tRPC** for type-safe API communication. Routers are in `src/server/api/routers/`: - -### `expenseRouter` -- `getBalances` (query) - Get user's balances with all friends/groups -- `addOrEditExpense` (mutation) - Create/update expense, handles split calculations -- `addOrEditCurrencyConversion` (mutation) - Convert between currencies -- `getExpenseDetails` (query) - Fetch full expense with participants -- `getGroupExpenseDetails` (query) - Get expenses within a group -- `getCurrencyRate` (query) - Fetch rate between two currencies -- `getAllExpenses` (query) - Get all expenses for current user -- `getRecurringExpenses` (query) - Get recurring expense jobs -- `deleteExpense` (mutation) - Soft-delete expense (sets deletedAt) - -### `groupRouter` -- `create` (mutation) - Create new group -- `getAllGroups` (query) - Get all groups user belongs to -- `getAllGroupsWithBalances` (query) - Get groups with balances + recent expenses -- `getGroupDetails` (query) - Get detailed group info with members and expenses -- `getGroupTotals` (query) - Get totals per currency within group -- `updateGroupName` (mutation) - Rename group -- `addMember` (mutation) - Add user to group -- `removeMember` (mutation) - Remove user from group -- `simplifyDebts` (mutation) - Simplify group debts algorithmically -- `archiveGroup` (mutation) - Soft-delete group -- `leave` (mutation) - Current user leaves group -- `recalculateBalances` (mutation) - Rebuild all group balances - -### `userRouter` -- `me` (query) - Get current authenticated user with preferences -- `getFriends` (query) - Get all friends (people user has balances with) -- `getOwnExpenses` (query) - Get expenses paid by current user -- `updateCurrency` (mutation) - Set user's default currency -- `getUserDetails` (query) - Get public user info (name, image) -- `importFromSplitwise` (mutation) - Import balances/groups from Splitwise -- `getImportProgress` (query) - Check Splitwise import status -- `downloadData` (mutation) - Export all user data as JSON -- `updateLanguage` (mutation) - Set user's preferred language -- `getWebPushPublicKey` (query) - Get VAPID key for push notifications - -### `bankTransactionsRouter` -- `linkInstitution` (mutation) - Connect bank account (Plaid/GoCardless) -- `getInstitutions` (query) - List available banking integrations -- `exchangeToken` (mutation) - Exchange public token for access -- `getTransactions` (query) - Fetch and cache bank transactions -- `importTransaction` (mutation) - Create expense from bank transaction - -## Component Architecture - -**Large legacy components** exist (e.g., `AddExpensePage.tsx`, `SplitTypeSection.tsx`, `BalanceList.tsx`). These should be refactored incrementally into smaller, reusable pieces. **Multiple components per file are encouraged** to keep related logic co-located. - -### Code Style -- Use **TypeScript** with strict types -- Use `as const` for fixed arrays/objects (e.g., categories, currencies) -- Use `React.FC` for component typing -- Use `satisfies` operator for fixed arrays/objects that somehow use other types -- Prefer code that is easy to read and self documenting over extensive comments - -### Component Organization - -**AddExpense flow** (`src/components/AddExpense/`): -- `AddExpensePage.tsx` - Main form container (becoming monolithic, candidate for splitting) -- `SplitTypeSection.tsx` - Handles split type selection + amount distribution -- `SelectUserOrGroup.tsx` - User/group picker with participant management -- `CategoryPicker.tsx`, `CurrencyPicker.tsx`, `DateSelector.tsx` - Reusable pickers -- `RecurrenceInput.tsx` - Cron expression builder -- `UploadFile.tsx` - Receipt/bill upload -- `UserInput.tsx` - Individual user participant with amount input - -**Friend/Balance components** (`src/components/Friend/`): -- `FriendBalance.tsx` - Shows balance summary between two users -- `Settleup.tsx` - Create settlement expense for friend -- `GroupSettleup.tsx` - Settle up within a group -- `CurrencyConversion.tsx` - UI for currency conversion -- `Export.tsx` - Download friend transaction history - -**Expense components** (`src/components/Expense/`): -- `ExpenseList.tsx` - Lists expenses with conditional rendering for types (settlement, currency conversion, regular) -- `BalanceList.tsx` - Displays group/friend balances in accordion -- `ExpenseDetails.tsx` - Full expense view with participants -- `DeleteExpense.tsx` - Confirmation + deletion logic -- `Receipt.tsx` - Render uploaded bill image - -### Refactoring Guidelines - -1. **Extract presentational components** - If a component has calculation logic + rendering, split into: - - Container component (state, tRPC queries, logic) - - Presentational component (UI only, receives props) - -2. **Keep related components co-located** - Multiple small exports in one file is fine: - ```typescript - // Good: Related logic in one file - export const CurrencyPicker = () => {...} - export const CurrencyInput = () => {...} - export const CurrencyDisplay = () => {...} - ``` - -3. **Avoid deep nesting** - If JSX has 3+ levels of nesting, extract sub-components - -4. **Use client components strategically** - Mark only interactive components with `'use client'`, let parents be server components when possible - -## External References - -- Numeric stability: `README.md` FAQ section -- Split logic details: `src/store/addStore.ts` `calculateParticipantSplit()` -- tRPC context: `src/server/api/trpc.ts` (context, procedures, middleware) -- Formatting: Prettier (100 char line, single quotes, tailwind class order) -- pnpm docs: https://pnpm.io/ - -## Copilot Instructions - -Always use context7 when I need code generation, setup or configuration steps, or -library/API documentation. This means you should automatically use the Context7 MCP -tools to resolve library id and get library docs without me having to explicitly ask. - -Do not generate documentation or tests if not explicitly requested. - -## Testing Harness Rules - -- Keep fast checks independent from PostgreSQL integration and Chromium E2E jobs. -- Select unit/component tests with `pnpm test`; select database tests with - `pnpm test:integration`; select browser tests with `pnpm exec playwright test --project=chromium`. -- Integration and E2E commands may only use a disposable local database whose name ends in - `_test`. Never run reset, push, or destructive test setup against shared or production data. -- Read `docs/testing-strategy.md` before changing test selection, CI workflows, or database setup. -- When browser tests fail, inspect `test-results/e2e` and `playwright-report` artifacts before - changing application code. diff --git a/.opencode/package-lock.json b/.opencode/package-lock.json deleted file mode 100644 index abded7b2a..000000000 --- a/.opencode/package-lock.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "name": ".opencode", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "dependencies": { - "@opencode-ai/plugin": "1.4.3" - } - }, - "node_modules/@opencode-ai/plugin": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@opencode-ai/plugin/-/plugin-1.4.3.tgz", - "integrity": "sha512-Ob/3tVSIeuMRJBr2O23RtrnC5djRe01Lglx+TwGEmjrH9yDBJ2tftegYLnNEjRoMuzITgq9LD8168p4pzv+U/A==", - "license": "MIT", - "dependencies": { - "@opencode-ai/sdk": "1.4.3", - "zod": "4.1.8" - }, - "peerDependencies": { - "@opentui/core": ">=0.1.97", - "@opentui/solid": ">=0.1.97" - }, - "peerDependenciesMeta": { - "@opentui/core": { - "optional": true - }, - "@opentui/solid": { - "optional": true - } - } - }, - "node_modules/@opencode-ai/sdk": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@opencode-ai/sdk/-/sdk-1.4.3.tgz", - "integrity": "sha512-X0CAVbwoGAjTY2iecpWkx2B+GAa2jSaQKYpJ+xILopeF/OGKZUN15mjqci+L7cEuwLHV5wk3x2TStUOVCa5p0A==", - "license": "MIT", - "dependencies": { - "cross-spawn": "7.0.6" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/zod": { - "version": "4.1.8", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - } -} diff --git a/.opencode/opencode.json b/opencode.jsonc similarity index 80% rename from .opencode/opencode.json rename to opencode.jsonc index 758b52450..891513261 100644 --- a/.opencode/opencode.json +++ b/opencode.jsonc @@ -4,12 +4,12 @@ "context7": { "type": "remote", "url": "https://mcp.context7.com/mcp", - "enabled": true + "enabled": true, }, "shadcn": { "type": "local", "command": ["npx", "shadcn@latest", "mcp"], - "enabled": true - } - } + "enabled": true, + }, + }, } From 4f1dbb3e4e8ee37a85537bb72b604ae6a31eefaa Mon Sep 17 00:00:00 2001 From: krokosik Date: Wed, 14 Oct 2026 22:03:04 +0200 Subject: [PATCH 04/59] Use tsc now that we use official ts7 --- .github/workflows/check.yml | 2 +- .husky/pre-commit | 2 +- AGENTS.md | 8 ++++---- CONTRIBUTING.md | 4 ++-- docs/testing-strategy.md | 2 +- flake.nix | 2 +- src/tests/helpers/i18n.ts | 6 ++---- 7 files changed, 12 insertions(+), 14 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 2129167ef..e205e45de 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -36,7 +36,7 @@ jobs: run: pnpm lint - name: Run tsc - run: pnpm tsgo --noEmit + run: pnpm tsc --noEmit - name: Run tests run: pnpm test diff --git a/.husky/pre-commit b/.husky/pre-commit index ae3950b2e..30c811308 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,2 +1,2 @@ pnpm lint-staged -pnpm tsgo --noEmit +pnpm tsc --noEmit diff --git a/AGENTS.md b/AGENTS.md index 5a7a2943f..7eabe93a4 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -51,7 +51,7 @@ pnpm test -- -t "test name pattern" # Run tests matching pattern pnpm lint # Run oxlint with type-aware checking pnpm prettier --write . # Format all files pnpm prettier --check . # Check formatting without changes -pnpm tsgo --noEmit # Type check (used in pre-commit) +pnpm tsc --noEmit # Type check (used in pre-commit) ``` ### Building @@ -64,7 +64,7 @@ pnpm build # Build for production 1. `pnpm prettier --check .` - Format check 2. `pnpm lint` - Linting -3. `pnpm tsgo --noEmit` - Type checking +3. `pnpm tsc --noEmit` - Type checking 4. `pnpm test` - Unit tests 5. `pnpm build --no-lint` - Build verification @@ -319,13 +319,13 @@ Husky runs on commit: 1. Prettier formatting 2. oxlint with auto-fix 3. Prisma format (for .prisma files) -4. Type checking with tsgo +4. Type checking with tsc Override with `git commit --no-verify` if needed. ## Testing Harness Workflow -Keep the fast checks (`pnpm prettier --check .`, `pnpm lint`, `pnpm tsgo --noEmit`, +Keep the fast checks (`pnpm prettier --check .`, `pnpm lint`, `pnpm tsc --noEmit`, `pnpm test`, and `pnpm build --no-lint`) independent from the disposable database and browser jobs. CI runs PostgreSQL integration tests with `pnpm test:integration` and Chromium E2E tests with `pnpm exec playwright test --project=chromium` in separate jobs. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5b90cf8b6..f64e51189 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -66,7 +66,7 @@ The development branch is main. All pull requests should be made ag The flake supports x86_64 and aarch64 Linux, including NixOS. It provides Node.js 22, pnpm 10.11.0, PostgreSQL 18 with `pg_cron`, Git, OpenSSL, and `nixfmt`. Node and pnpm run in an FHS runtime so the project's native npm dependencies -(including Prisma, Next.js, oxlint, and `tsgo`) work without patching `node_modules`. +(including Prisma, Next.js, oxlint, and `tsc`) work without patching `node_modules`. The runtime requires unprivileged user namespaces, as used by Bubblewrap. 1. Install Nix with the `nix-command` and `flakes` experimental features enabled. @@ -119,7 +119,7 @@ pnpm db:dev pnpm db:studio pnpm prettier --check . pnpm lint -pnpm tsgo --noEmit +pnpm tsc --noEmit pnpm test pnpm build ``` diff --git a/docs/testing-strategy.md b/docs/testing-strategy.md index 8df9fb0c2..58fef8d51 100644 --- a/docs/testing-strategy.md +++ b/docs/testing-strategy.md @@ -10,7 +10,7 @@ PostgreSQL with the same launcher used locally. | ---------------------------- | ------------------------------------------------------------------------- | | Formatting | `pnpm prettier --check .` | | Lint | `pnpm lint` | -| Types | `pnpm tsgo --noEmit` | +| Types | `pnpm tsc --noEmit` | | Unit/component tests | `pnpm test` | | One unit file | `pnpm test src/tests/simplify.test.ts` | | Prepare integration database | `pnpm test:db:up` | diff --git a/flake.nix b/flake.nix index b92bffd2c..36e8cd575 100644 --- a/flake.nix +++ b/flake.nix @@ -36,7 +36,7 @@ --add-flags "$out/lib/pnpm/bin/pnpx.cjs" ''; }; - # npm downloads standard Linux binaries (Prisma, SWC, tsgo, oxlint, etc.). + # npm downloads standard Linux binaries (Prisma, SWC, tsc, oxlint, etc.). # Run Node commands in an FHS environment instead of modifying node_modules # or substituting a different version of Prisma's engines. runtime = pkgs.buildFHSEnv { diff --git a/src/tests/helpers/i18n.ts b/src/tests/helpers/i18n.ts index cfaeb3b20..669fa13de 100644 --- a/src/tests/helpers/i18n.ts +++ b/src/tests/helpers/i18n.ts @@ -1,17 +1,15 @@ -import i18next from 'i18next'; +import { createInstance } from 'i18next'; import categories from '../../../public/locales/en/categories.json'; import common from '../../../public/locales/en/common.json'; import currencies from '../../../public/locales/en/currencies.json'; import home from '../../../public/locales/en/home.json'; -export const testI18n = i18next.createInstance(); +export const testI18n = createInstance(); void testI18n.init({ lng: 'en', fallbackLng: 'en', defaultNS: 'common', - initImmediate: false, - showSupportNotice: false, interpolation: { escapeValue: false }, resources: { en: { categories, common, currencies, home } }, }); From c8307b59bfdfeed498d7f7a7677e60fdbdb6820f Mon Sep 17 00:00:00 2001 From: krokosik Date: Wed, 14 Oct 2026 22:07:55 +0200 Subject: [PATCH 05/59] Use official serwist turbopack support --- .github/workflows/check.yml | 2 +- next.config.js | 9 +- package.json | 9 +- pnpm-lock.yaml | 511 ++++++++++++++++++++++++++++---- src/app/serwist/[path]/route.ts | 11 + src/pages/_app.tsx | 27 +- tsconfig.json | 3 +- worker/index.ts | 7 +- 8 files changed, 488 insertions(+), 91 deletions(-) create mode 100644 src/app/serwist/[path]/route.ts diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index e205e45de..cd32fdeb2 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -46,4 +46,4 @@ jobs: # run: pnpm db:verify-seed-hash - name: Run build - run: pnpm build --no-lint + run: pnpm build diff --git a/next.config.js b/next.config.js index 2b98da871..be9bed697 100644 --- a/next.config.js +++ b/next.config.js @@ -1,9 +1,8 @@ -import { PHASE_DEVELOPMENT_SERVER, PHASE_PRODUCTION_BUILD } from 'next/constants.js'; +import { withSerwist } from '@serwist/turbopack'; import i18nConfig from './next-i18next.config.js'; import { fileURLToPath } from 'node:url'; import { createJiti } from 'jiti'; const jiti = createJiti(fileURLToPath(import.meta.url)); -import withSerwistInit from '@serwist/next'; /** @type {typeof import('./src/utils/env')} */ const envUtils = await jiti.import('./src/utils/env'); @@ -40,10 +39,4 @@ const nextConfig = { }, }; -const withSerwist = withSerwistInit({ - swSrc: 'worker/index.ts', - swDest: 'public/sw.js', - disable: process.env.NODE_ENV === 'development', // Incompatible with Turbopack https://github.com/serwist/serwist/issues/54 -}); - export default withSerwist(nextConfig); diff --git a/package.json b/package.json index 74ee2ef0a..a8d9388da 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,8 @@ "private": true, "type": "module", "scripts": { - "build": "next build --no-lint", - "just-build": "next build --no-lint", + "build": "next build", + "just-build": "next build", "db:push": "prisma db push", "db:studio": "prisma studio", "db:dev": "prisma migrate dev", @@ -39,7 +39,7 @@ "@icons-pack/react-simple-icons": "^13.7.0", "@next-auth/prisma-adapter": "^1.0.7", "@prisma/client": "^6.16.2", - "@serwist/next": "^9.5.13", + "@serwist/turbopack": "^9.5.13", "@t3-oss/env-nextjs": "^0.13.8", "@tanstack/react-query": "^5.79.2", "@trpc/client": "^11.2.0", @@ -100,6 +100,7 @@ "@types/react": "19.3.0", "@types/react-dom": "19.3.0", "@types/web-push": "^3.6.3", + "esbuild": "^0.25.12", "husky": "^9.1.7", "jest": "30.3.0", "jest-environment-jsdom": "30.3.0", @@ -111,7 +112,7 @@ "prettier": "^3.2.4", "prettier-plugin-tailwindcss": "^0.6.12", "prisma": "^6.19.3", - "serwist": "^9.2.1", + "serwist": "^9.5.13", "tailwind-merge": "^2.2.0", "tailwindcss": "^4.1.10", "ts-node": "^10.9.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a57c37aac..78fb5c749 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,9 +23,9 @@ importers: '@prisma/client': specifier: ^6.16.2 version: 6.19.1(prisma@6.19.3(typescript@5.7.3))(typescript@5.7.3) - '@serwist/next': + '@serwist/turbopack': specifier: ^9.5.13 - version: 9.5.13(next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(react@19.3.1)(typescript@5.7.3) + version: 9.5.13(@swc/helpers@0.5.23)(esbuild@0.25.12)(next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(react@19.3.1)(typescript@5.7.3) '@t3-oss/env-nextjs': specifier: ^0.13.8 version: 0.13.10(typescript@5.7.3)(zod@3.25.76) @@ -201,12 +201,15 @@ importers: '@types/web-push': specifier: ^3.6.3 version: 3.6.4 + esbuild: + specifier: ^0.25.12 + version: 0.25.12 husky: specifier: ^9.1.7 version: 9.1.7 jest: specifier: 30.3.0 - version: 30.3.0(@types/node@22.19.3)(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.7.3)) + version: 30.3.0(@types/node@22.19.3)(ts-node@10.9.2(@swc/core@1.16.13(@swc/helpers@0.5.23))(@types/node@22.19.3)(typescript@5.7.3)) jest-environment-jsdom: specifier: 30.3.0 version: 30.3.0 @@ -235,8 +238,8 @@ importers: specifier: ^6.19.3 version: 6.19.3(typescript@5.7.3) serwist: - specifier: ^9.2.1 - version: 9.2.3(typescript@5.7.3) + specifier: ^9.5.13 + version: 9.5.13(browserslist@4.29.3)(typescript@5.7.3) tailwind-merge: specifier: ^2.2.0 version: 2.6.0 @@ -245,7 +248,7 @@ importers: version: 4.1.18 ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@22.19.3)(typescript@5.7.3) + version: 10.9.2(@swc/core@1.16.13(@swc/helpers@0.5.23))(@types/node@22.19.3)(typescript@5.7.3) tsx: specifier: ^4.7.1 version: 4.21.0 @@ -493,156 +496,312 @@ packages: '@emnapi/wasi-threads@1.0.4': resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==} + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.27.2': resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.27.2': resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} engines: {node: '>=18'} cpu: [arm64] os: [android] + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.27.2': resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} engines: {node: '>=18'} cpu: [arm] os: [android] + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.27.2': resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} engines: {node: '>=18'} cpu: [x64] os: [android] + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.27.2': resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.27.2': resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.27.2': resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.27.2': resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.27.2': resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} engines: {node: '>=18'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.27.2': resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} engines: {node: '>=18'} cpu: [arm] os: [linux] + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.27.2': resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} engines: {node: '>=18'} cpu: [ia32] os: [linux] + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.27.2': resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.27.2': resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.27.2': resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.27.2': resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.27.2': resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} engines: {node: '>=18'} cpu: [s390x] os: [linux] + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.27.2': resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} engines: {node: '>=18'} cpu: [x64] os: [linux] + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-arm64@0.27.2': resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.27.2': resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-arm64@0.27.2': resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.27.2': resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/openharmony-arm64@0.27.2': resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.27.2': resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} engines: {node: '>=18'} cpu: [x64] os: [sunos] + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.27.2': resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} engines: {node: '>=18'} cpu: [arm64] os: [win32] + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.27.2': resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.27.2': resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} engines: {node: '>=18'} @@ -1977,16 +2136,19 @@ packages: typescript: optional: true - '@serwist/next@9.5.13': - resolution: {integrity: sha512-NyRUmZIhfN+8p/rWLWRlULt+0YGN6G90R2WKbYj8cq0/4VDhDaOrFXyI458Ym98ApQHrNwkUhgPzZMxQoxxWWA==} + '@serwist/turbopack@9.5.13': + resolution: {integrity: sha512-7QfoFoXdU+HL7mUHwnnSYmJMK0vJo1WEyr+7jIXfgPkdEvol4BlrgWg1PrbGqWqLZkud5IhMiQm7gbfx7N44MQ==} engines: {node: '>=18.0.0'} peerDependencies: - '@serwist/cli': ^9.5.13 + esbuild: '>=0.25.0 <1.0.0' + esbuild-wasm: '>=0.25.0 <1.0.0' next: '>=14.0.0' react: '>=18.0.0' typescript: '>=5.0.0' peerDependenciesMeta: - '@serwist/cli': + esbuild: + optional: true + esbuild-wasm: optional: true typescript: optional: true @@ -1999,18 +2161,6 @@ packages: browserslist: optional: true - '@serwist/webpack-plugin@9.5.13': - resolution: {integrity: sha512-pXfrV0kVUjoXGOu7D+1xEz06tsDgBNiqV5YXvvBpVLQrIsXOnUTs5H4VLZ2p7OjfuPt8Ho5QFrS6xt08hTPxRA==} - engines: {node: '>=18.0.0'} - peerDependencies: - typescript: '>=5.0.0' - webpack: 4.4.0 || ^5.9.0 - peerDependenciesMeta: - typescript: - optional: true - webpack: - optional: true - '@serwist/window@9.5.13': resolution: {integrity: sha512-1xOBy3Cpe1qZ33GwQSeQk8fyklYc7wZsYzpmHq37RowRMaHvrKQkUFTUoZPyQG5YWwmvDbFVgOGba7UbXNhHfQ==} peerDependencies: @@ -2031,9 +2181,96 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@swc/core-darwin-arm64@1.16.13': + resolution: {integrity: sha512-JrMH2h7ohd4mOIneNRx/diqTmCDSdWfp9uOdQ8VJ2V2CA7jOJ1jWb+qp8RoZLqgiVmwDDC7eySKB1kbvZ+jVXQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.16.13': + resolution: {integrity: sha512-HauZMRxpOImRxgY6GXjw5gbD8ts2NcPZuLMM8htY8Mic7j1Izt/lxkXrKYUwqyU56YLwQZ4dHRT+6jFHkztcag==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.16.13': + resolution: {integrity: sha512-tUSojGIythnHJKrElDM9OvuhBnK+FF39eM9iIBgj9kdfbAm6PhAM7dKbaSDcnX2gOLG2slkasjD0Z8m/YUlzOA==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.16.13': + resolution: {integrity: sha512-qS3bk/ezRrLXGn1b764S/EG3/oKj6uRhnTNRAALpnuu8d9I0YwSiUkQghnX7lOH9X/yRr+qrFI3R0wAruO47Tg==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.16.13': + resolution: {integrity: sha512-aeoYoG6fQsOS3mFOuTKvnJo1aaaxYNI0aRRlhdHaGP4q1YQx4XOc5Hkd35IFduWCBG3eZl3fPTjRuYvxpl7eTA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-ppc64-gnu@1.16.13': + resolution: {integrity: sha512-eEFoueZXWZ2S1lsqL8Ve2C8RjhzH9+Ktj8U4IGTUQL6CNG04+VhQiYQWJOf5xfVBU6I+PbH80yvsYegqZOOSZQ==} + engines: {node: '>=10'} + cpu: [ppc64] + os: [linux] + + '@swc/core-linux-s390x-gnu@1.16.13': + resolution: {integrity: sha512-K0q1ReVXL3d5bzBgZxS+yJq5q2xRjg4k2XXGj9yiCEpE5ZqJGQ4Gtk1sRrk8W2lo3KY0DCJD3Myt6x2SMvGArQ==} + engines: {node: '>=10'} + cpu: [s390x] + os: [linux] + + '@swc/core-linux-x64-gnu@1.16.13': + resolution: {integrity: sha512-Qvpihw30irhIjy2f91BR1pamcJBCgf8hmr9XWenztAX1YLkneRkkTB/PFGWQubhaBqQhY2uZKViMj/xV61uMBQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.16.13': + resolution: {integrity: sha512-iCGxHbh3Cq5vqRvCPlw3XkkDz4RlkPSyQwfFKbOKTMj5tiEuojY/rLmf4BMfI9Z8yPJTf9VB07t3NbKInoC97g==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-win32-arm64-msvc@1.16.13': + resolution: {integrity: sha512-iOabn6cd+hg3cnoKlAC8j3Yufv8nQHBVU5OIDX8dCPA95PjAZ0B0TlDn9sWivk8ezo/cLJux7p9n0B9vRej+1Q==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.16.13': + resolution: {integrity: sha512-+1b/3xBNuVbpnJIZUCAaSdscOPYRWq85eohKx44y/3qbPp56UMiCJWBiWtyr7K5F1nf1JENXm2IBSEJaLgWq6Q==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.16.13': + resolution: {integrity: sha512-6kEJhYshk7OVoVIWryiHqjCNuwZeOlPTS6et+bKV/WhtHs8fLA01wyTLrQGi+4ultgRe/o0M4b25K/KKdvl0dQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.16.13': + resolution: {integrity: sha512-k4uUsIMS0IwOKVsrQs48IZK75O4roV3FnuJEdL7ES+DFESftdgvz73QBqN3VUAbUmUr78We4tzG0kgYj36M22Q==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '>=0.5.17' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + '@swc/helpers@0.5.23': resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==} + '@swc/types@0.1.28': + resolution: {integrity: sha512-V6Mnml8v09QALx6K0elJ7o9K/MkVDtW3t6L+7Ou/JcWtb3xwId2AH4FeOceySd2JaO87IMw4+6vSZxLm34LPbw==} + '@t3-oss/env-core@0.13.10': resolution: {integrity: sha512-NNFfdlJ+HmPHkLi2HKy7nwuat9SIYOxei9K10lO2YlcSObDILY7mHZNSHsieIM3A0/5OOzw/P/b+yLvPdaG52g==} peerDependencies: @@ -2879,6 +3116,11 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + esbuild@0.27.2: resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} engines: {node: '>=18'} @@ -4108,14 +4350,6 @@ packages: engines: {node: '>=10'} hasBin: true - serwist@9.2.3: - resolution: {integrity: sha512-menorUH09SpLvU7R25TvG0TuQ12MUDpQ5NKGohbtREF8YI+0D++Abn59XCmvvMp2n740rBizIkeqWq0m6U+++g==} - peerDependencies: - typescript: '>=5.0.0' - peerDependenciesMeta: - typescript: - optional: true - serwist@9.5.13: resolution: {integrity: sha512-ZpskCei2d5Zcljeb6QvYP94pV5xY3GCdbOk0hOzMSEPFOqJDwJvMpQq7i1r/psuR1WQCsKX6p7UpLle6sTPYjw==} peerDependencies: @@ -4796,81 +5030,159 @@ snapshots: tslib: 2.8.1 optional: true + '@esbuild/aix-ppc64@0.25.12': + optional: true + '@esbuild/aix-ppc64@0.27.2': optional: true + '@esbuild/android-arm64@0.25.12': + optional: true + '@esbuild/android-arm64@0.27.2': optional: true + '@esbuild/android-arm@0.25.12': + optional: true + '@esbuild/android-arm@0.27.2': optional: true + '@esbuild/android-x64@0.25.12': + optional: true + '@esbuild/android-x64@0.27.2': optional: true + '@esbuild/darwin-arm64@0.25.12': + optional: true + '@esbuild/darwin-arm64@0.27.2': optional: true + '@esbuild/darwin-x64@0.25.12': + optional: true + '@esbuild/darwin-x64@0.27.2': optional: true + '@esbuild/freebsd-arm64@0.25.12': + optional: true + '@esbuild/freebsd-arm64@0.27.2': optional: true + '@esbuild/freebsd-x64@0.25.12': + optional: true + '@esbuild/freebsd-x64@0.27.2': optional: true + '@esbuild/linux-arm64@0.25.12': + optional: true + '@esbuild/linux-arm64@0.27.2': optional: true + '@esbuild/linux-arm@0.25.12': + optional: true + '@esbuild/linux-arm@0.27.2': optional: true + '@esbuild/linux-ia32@0.25.12': + optional: true + '@esbuild/linux-ia32@0.27.2': optional: true + '@esbuild/linux-loong64@0.25.12': + optional: true + '@esbuild/linux-loong64@0.27.2': optional: true + '@esbuild/linux-mips64el@0.25.12': + optional: true + '@esbuild/linux-mips64el@0.27.2': optional: true + '@esbuild/linux-ppc64@0.25.12': + optional: true + '@esbuild/linux-ppc64@0.27.2': optional: true + '@esbuild/linux-riscv64@0.25.12': + optional: true + '@esbuild/linux-riscv64@0.27.2': optional: true + '@esbuild/linux-s390x@0.25.12': + optional: true + '@esbuild/linux-s390x@0.27.2': optional: true + '@esbuild/linux-x64@0.25.12': + optional: true + '@esbuild/linux-x64@0.27.2': optional: true + '@esbuild/netbsd-arm64@0.25.12': + optional: true + '@esbuild/netbsd-arm64@0.27.2': optional: true + '@esbuild/netbsd-x64@0.25.12': + optional: true + '@esbuild/netbsd-x64@0.27.2': optional: true + '@esbuild/openbsd-arm64@0.25.12': + optional: true + '@esbuild/openbsd-arm64@0.27.2': optional: true + '@esbuild/openbsd-x64@0.25.12': + optional: true + '@esbuild/openbsd-x64@0.27.2': optional: true + '@esbuild/openharmony-arm64@0.25.12': + optional: true + '@esbuild/openharmony-arm64@0.27.2': optional: true + '@esbuild/sunos-x64@0.25.12': + optional: true + '@esbuild/sunos-x64@0.27.2': optional: true + '@esbuild/win32-arm64@0.25.12': + optional: true + '@esbuild/win32-arm64@0.27.2': optional: true + '@esbuild/win32-ia32@0.25.12': + optional: true + '@esbuild/win32-ia32@0.27.2': optional: true + '@esbuild/win32-x64@0.25.12': + optional: true + '@esbuild/win32-x64@0.27.2': optional: true @@ -5065,7 +5377,7 @@ snapshots: jest-util: 30.3.0 slash: 3.0.0 - '@jest/core@30.3.0(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.7.3))': + '@jest/core@30.3.0(ts-node@10.9.2(@swc/core@1.16.13(@swc/helpers@0.5.23))(@types/node@22.19.3)(typescript@5.7.3))': dependencies: '@jest/console': 30.3.0 '@jest/pattern': 30.0.1 @@ -5080,7 +5392,7 @@ snapshots: exit-x: 0.2.2 graceful-fs: 4.2.11 jest-changed-files: 30.3.0 - jest-config: 30.3.0(@types/node@22.19.3)(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.7.3)) + jest-config: 30.3.0(@types/node@22.19.3)(ts-node@10.9.2(@swc/core@1.16.13(@swc/helpers@0.5.23))(@types/node@22.19.3)(typescript@5.7.3)) jest-haste-map: 30.3.0 jest-message-util: 30.3.0 jest-regex-util: 30.0.1 @@ -6249,14 +6561,13 @@ snapshots: transitivePeerDependencies: - browserslist - '@serwist/next@9.5.13(next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(react@19.3.1)(typescript@5.7.3)': + '@serwist/turbopack@9.5.13(@swc/helpers@0.5.23)(esbuild@0.25.12)(next@16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(react@19.3.1)(typescript@5.7.3)': dependencies: '@serwist/build': 9.5.13(browserslist@4.29.3)(typescript@5.7.3) '@serwist/utils': 9.5.13(browserslist@4.29.3) - '@serwist/webpack-plugin': 9.5.13(browserslist@4.29.3)(typescript@5.7.3) '@serwist/window': 9.5.13(browserslist@4.29.3)(typescript@5.7.3) + '@swc/core': 1.16.13(@swc/helpers@0.5.23) browserslist: 4.29.3 - glob: 13.0.6 kolorist: 1.8.0 next: 16.4.1(@babel/core@7.28.3)(@playwright/test@1.62.1)(@types/node@22.19.3)(react-dom@19.3.1(react@19.3.1))(react@19.3.1) react: 19.3.1 @@ -6264,25 +6575,15 @@ snapshots: serwist: 9.5.13(browserslist@4.29.3)(typescript@5.7.3) zod: 4.6.5 optionalDependencies: + esbuild: 0.25.12 typescript: 5.7.3 transitivePeerDependencies: - - webpack + - '@swc/helpers' '@serwist/utils@9.5.13(browserslist@4.29.3)': optionalDependencies: browserslist: 4.29.3 - '@serwist/webpack-plugin@9.5.13(browserslist@4.29.3)(typescript@5.7.3)': - dependencies: - '@serwist/build': 9.5.13(browserslist@4.29.3)(typescript@5.7.3) - '@serwist/utils': 9.5.13(browserslist@4.29.3) - pretty-bytes: 6.1.1 - zod: 4.6.5 - optionalDependencies: - typescript: 5.7.3 - transitivePeerDependencies: - - browserslist - '@serwist/window@9.5.13(browserslist@4.29.3)(typescript@5.7.3)': dependencies: '@types/trusted-types': 2.0.7 @@ -6304,10 +6605,71 @@ snapshots: '@standard-schema/spec@1.1.0': {} + '@swc/core-darwin-arm64@1.16.13': + optional: true + + '@swc/core-darwin-x64@1.16.13': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.16.13': + optional: true + + '@swc/core-linux-arm64-gnu@1.16.13': + optional: true + + '@swc/core-linux-arm64-musl@1.16.13': + optional: true + + '@swc/core-linux-ppc64-gnu@1.16.13': + optional: true + + '@swc/core-linux-s390x-gnu@1.16.13': + optional: true + + '@swc/core-linux-x64-gnu@1.16.13': + optional: true + + '@swc/core-linux-x64-musl@1.16.13': + optional: true + + '@swc/core-win32-arm64-msvc@1.16.13': + optional: true + + '@swc/core-win32-ia32-msvc@1.16.13': + optional: true + + '@swc/core-win32-x64-msvc@1.16.13': + optional: true + + '@swc/core@1.16.13(@swc/helpers@0.5.23)': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.28 + optionalDependencies: + '@swc/core-darwin-arm64': 1.16.13 + '@swc/core-darwin-x64': 1.16.13 + '@swc/core-linux-arm-gnueabihf': 1.16.13 + '@swc/core-linux-arm64-gnu': 1.16.13 + '@swc/core-linux-arm64-musl': 1.16.13 + '@swc/core-linux-ppc64-gnu': 1.16.13 + '@swc/core-linux-s390x-gnu': 1.16.13 + '@swc/core-linux-x64-gnu': 1.16.13 + '@swc/core-linux-x64-musl': 1.16.13 + '@swc/core-win32-arm64-msvc': 1.16.13 + '@swc/core-win32-ia32-msvc': 1.16.13 + '@swc/core-win32-x64-msvc': 1.16.13 + '@swc/helpers': 0.5.23 + + '@swc/counter@0.1.3': {} + '@swc/helpers@0.5.23': dependencies: tslib: 2.8.1 + '@swc/types@0.1.28': + dependencies: + '@swc/counter': 0.1.3 + '@t3-oss/env-core@0.13.10(typescript@5.7.3)(zod@3.25.76)': optionalDependencies: typescript: 5.7.3 @@ -7045,6 +7407,35 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + esbuild@0.27.2: optionalDependencies: '@esbuild/aix-ppc64': 0.27.2 @@ -7409,15 +7800,15 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@30.3.0(@types/node@22.19.3)(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.7.3)): + jest-cli@30.3.0(@types/node@22.19.3)(ts-node@10.9.2(@swc/core@1.16.13(@swc/helpers@0.5.23))(@types/node@22.19.3)(typescript@5.7.3)): dependencies: - '@jest/core': 30.3.0(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.7.3)) + '@jest/core': 30.3.0(ts-node@10.9.2(@swc/core@1.16.13(@swc/helpers@0.5.23))(@types/node@22.19.3)(typescript@5.7.3)) '@jest/test-result': 30.3.0 '@jest/types': 30.3.0 chalk: 4.1.2 exit-x: 0.2.2 import-local: 3.2.0 - jest-config: 30.3.0(@types/node@22.19.3)(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.7.3)) + jest-config: 30.3.0(@types/node@22.19.3)(ts-node@10.9.2(@swc/core@1.16.13(@swc/helpers@0.5.23))(@types/node@22.19.3)(typescript@5.7.3)) jest-util: 30.3.0 jest-validate: 30.3.0 yargs: 17.7.2 @@ -7428,7 +7819,7 @@ snapshots: - supports-color - ts-node - jest-config@30.3.0(@types/node@22.19.3)(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.7.3)): + jest-config@30.3.0(@types/node@22.19.3)(ts-node@10.9.2(@swc/core@1.16.13(@swc/helpers@0.5.23))(@types/node@22.19.3)(typescript@5.7.3)): dependencies: '@babel/core': 7.28.3 '@jest/get-type': 30.1.0 @@ -7455,7 +7846,7 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 22.19.3 - ts-node: 10.9.2(@types/node@22.19.3)(typescript@5.7.3) + ts-node: 10.9.2(@swc/core@1.16.13(@swc/helpers@0.5.23))(@types/node@22.19.3)(typescript@5.7.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -7685,12 +8076,12 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@30.3.0(@types/node@22.19.3)(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.7.3)): + jest@30.3.0(@types/node@22.19.3)(ts-node@10.9.2(@swc/core@1.16.13(@swc/helpers@0.5.23))(@types/node@22.19.3)(typescript@5.7.3)): dependencies: - '@jest/core': 30.3.0(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.7.3)) + '@jest/core': 30.3.0(ts-node@10.9.2(@swc/core@1.16.13(@swc/helpers@0.5.23))(@types/node@22.19.3)(typescript@5.7.3)) '@jest/types': 30.3.0 import-local: 3.2.0 - jest-cli: 30.3.0(@types/node@22.19.3)(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.7.3)) + jest-cli: 30.3.0(@types/node@22.19.3)(ts-node@10.9.2(@swc/core@1.16.13(@swc/helpers@0.5.23))(@types/node@22.19.3)(typescript@5.7.3)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -8420,12 +8811,6 @@ snapshots: semver@7.8.5: {} - serwist@9.2.3(typescript@5.7.3): - dependencies: - idb: 8.0.3 - optionalDependencies: - typescript: 5.7.3 - serwist@9.5.13(browserslist@4.29.3)(typescript@5.7.3): dependencies: '@serwist/utils': 9.5.13(browserslist@4.29.3) @@ -8612,7 +8997,7 @@ snapshots: dependencies: punycode: 2.3.1 - ts-node@10.9.2(@types/node@22.19.3)(typescript@5.7.3): + ts-node@10.9.2(@swc/core@1.16.13(@swc/helpers@0.5.23))(@types/node@22.19.3)(typescript@5.7.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -8629,6 +9014,8 @@ snapshots: typescript: 5.7.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.16.13(@swc/helpers@0.5.23) tslib@2.8.1: {} diff --git a/src/app/serwist/[path]/route.ts b/src/app/serwist/[path]/route.ts new file mode 100644 index 000000000..c571fd946 --- /dev/null +++ b/src/app/serwist/[path]/route.ts @@ -0,0 +1,11 @@ +import { createSerwistRoute } from '@serwist/turbopack'; + +// Next.js requires route configuration values to be statically analyzable. +export const dynamic = 'force-static'; +export const dynamicParams = false; +export const revalidate = false; + +export const { generateStaticParams, GET } = createSerwistRoute({ + swSrc: 'worker/index.ts', + useNativeEsbuild: true, +}); diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 2702850f8..6672b8812 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -1,4 +1,5 @@ import i18nConfig from '@/next-i18next.config.js'; +import { SerwistProvider } from '@serwist/turbopack/react'; import { clsx } from 'clsx'; import { type Session } from 'next-auth'; import { SessionProvider, useSession } from 'next-auth/react'; @@ -82,18 +83,20 @@ const MyApp: AppType<{ session: Session | null }> = ({ - - - - - {(Component as NextPageWithUser).auth ? ( - - ) : ( - - )}{' '} - - - + + + + + + {(Component as NextPageWithUser).auth ? ( + + ) : ( + + )}{' '} + + + + ); }; diff --git a/tsconfig.json b/tsconfig.json index 309ca6a42..ffb4e76bd 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -41,7 +41,8 @@ "**/*.jsx", "**/*.cjs", "**/*.js", - ".next/types/**/*.ts" + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts" ], "exclude": ["node_modules", "public", "playwright-report", "test-results"] } diff --git a/worker/index.ts b/worker/index.ts index 1dbec632f..46d2e7ff1 100644 --- a/worker/index.ts +++ b/worker/index.ts @@ -1,11 +1,12 @@ -import { type PushMessage } from '~/types'; -import { defaultCache } from '@serwist/next/worker'; +import { defaultCache } from '@serwist/turbopack/worker'; import type { PrecacheEntry, SerwistGlobalConfig } from 'serwist'; import { Serwist } from 'serwist'; +import { type PushMessage } from '~/types'; + // This declares the value of `injectionPoint` to TypeScript. // `injectionPoint` is the string that will be replaced by the -// actual precache manifest. By default, this string is set to +// Actual precache manifest. By default, this string is set to // `"self.__SW_MANIFEST"`. declare global { interface WorkerGlobalScope extends SerwistGlobalConfig { From 9a62afd160adee78b6f1c94463ee3c3a3c24f711 Mon Sep 17 00:00:00 2001 From: krokosik Date: Wed, 14 Oct 2026 22:10:08 +0200 Subject: [PATCH 06/59] Update oxlint --- .lintstagedrc.js | 2 +- .oxlintrc.json | 4 ++++ package.json | 6 +++--- prisma.config.ts | 1 + src/server/auth.ts | 1 + 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.lintstagedrc.js b/.lintstagedrc.js index 6181ec621..7ee3e3c9f 100644 --- a/.lintstagedrc.js +++ b/.lintstagedrc.js @@ -3,7 +3,7 @@ const config = { '*': ['prettier --write -u'], // Run oxlint on JavaScript/TypeScript files - '*.{js,jsx,ts,tsx}': ['oxlint --type-aware --fix'], + '*.{js,jsx,ts,tsx}': ['oxlint --fix'], // Format prisma.schema files '*.prisma': ['pnpm prisma format'], diff --git a/.oxlintrc.json b/.oxlintrc.json index 8ba586971..4d542394f 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -1,4 +1,8 @@ { + "options": { + "typeAware": true, + "typeCheck": true + }, "categories": { "correctness": "error", "suspicious": "warn", diff --git a/package.json b/package.json index a8d9388da..8d5626d43 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "dev": "next dev", "postinstall": "prisma generate", "generate": "prisma generate", - "lint": "oxlint --type-aware", + "lint": "oxlint", "start": "sleep 3 && pnpm prisma:prod && next start", "start-with-latest-migrations": "prisma migrate deploy && next start", "d": "pnpm dx && pnpm dev", @@ -106,8 +106,8 @@ "jest-environment-jsdom": "30.3.0", "jiti": "^2.5.1", "lint-staged": "^16.4.0", - "oxlint": "1.57.0", - "oxlint-tsgolint": "0.18.1", + "oxlint": "1.88.0", + "oxlint-tsgolint": "7.0.2004", "postcss": "^8.5.14", "prettier": "^3.2.4", "prettier-plugin-tailwindcss": "^0.6.12", diff --git a/prisma.config.ts b/prisma.config.ts index 7f89f3085..3997ea9fd 100644 --- a/prisma.config.ts +++ b/prisma.config.ts @@ -1,3 +1,4 @@ +// @ts-ignore import 'dotenv/config'; import path from 'node:path'; import type { PrismaConfig } from 'prisma'; diff --git a/src/server/auth.ts b/src/server/auth.ts index d301b4a67..2e6c0da74 100644 --- a/src/server/auth.ts +++ b/src/server/auth.ts @@ -37,6 +37,7 @@ declare module 'next-auth' { }; } + // @ts-ignore interface User { id: number; name: string; From 1e012fdae13f9432f7a3afb54261a2ba1facc2f2 Mon Sep 17 00:00:00 2001 From: krokosik Date: Wed, 14 Oct 2026 22:23:23 +0200 Subject: [PATCH 07/59] Update oxlint config --- .oxlintrc.json | 7 +- pnpm-lock.yaml | 229 +++++++++++++++++++++++++------------------------ 2 files changed, 122 insertions(+), 114 deletions(-) diff --git a/.oxlintrc.json b/.oxlintrc.json index 4d542394f..4259f9c1b 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -47,7 +47,12 @@ "max-statements": "off", "jsx-max-depth": "off", "no-nodejs-modules": "off", - "no-implicit-coercion": "off" + "no-implicit-coercion": "off", + "react/function-component-definition": ["warn", { + "namedComponents": "arrow-function", + "unnamedComponents": "arrow-function" + }], + "one-var": "allow" }, "overrides": [ { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 78fb5c749..cd9aae360 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -220,11 +220,11 @@ importers: specifier: ^16.4.0 version: 16.4.0 oxlint: - specifier: 1.57.0 - version: 1.57.0(oxlint-tsgolint@0.18.1) + specifier: 1.88.0 + version: 1.88.0(oxlint-tsgolint@7.0.2004) oxlint-tsgolint: - specifier: 0.18.1 - version: 0.18.1 + specifier: 7.0.2004 + version: 7.0.2004 postcss: specifier: ^8.5.14 version: 8.5.14 @@ -1193,146 +1193,146 @@ packages: resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} engines: {node: ^14.21.3 || >=16} - '@oxlint-tsgolint/darwin-arm64@0.18.1': - resolution: {integrity: sha512-CxSd15ZwHn70UJFTXVvy76bZ9zwI097cVyjvUFmYRJwvkQF3VnrTf2oe1gomUacErksvtqLgn9OKvZhLMYwvog==} + '@oxlint-tsgolint/darwin-arm64@7.0.2004': + resolution: {integrity: sha512-uJk3ttju7Lz+Nv8WG4CsLyewoL1qf/Ny8S8OksJ7Bm/F14Tc9gMfW6arM1PCc57IzH/X/I79YsCWTgxX1FKibQ==} cpu: [arm64] os: [darwin] - '@oxlint-tsgolint/darwin-x64@0.18.1': - resolution: {integrity: sha512-LE7VW/T/VcKhl3Z1ev5BusrxdlQ3DWweSeOB+qpBeur2h8+vCWq+M7tCO29C7lveBDfx1+rNwj4aiUVlA+Qs+g==} + '@oxlint-tsgolint/darwin-x64@7.0.2004': + resolution: {integrity: sha512-0BFfHTzDxNDFPcu0UZAXT6CyCJHAXM0dZveyDb4KEHa2qF/DSnOKOrmvK/wFuFol9kvijbGM9JfuOsor+zWXRw==} cpu: [x64] os: [darwin] - '@oxlint-tsgolint/linux-arm64@0.18.1': - resolution: {integrity: sha512-2AG8YIXVJJbnM0rcsJmzzWOjZXBu5REwowgUpbHZueF7OYM3wR7Xu8pXEpAojEHAtYYZ3X4rpPoetomkJx7kCw==} + '@oxlint-tsgolint/linux-arm64@7.0.2004': + resolution: {integrity: sha512-TAehQc+qdRXyDN3nl/r/3/oPrBVrbtrDeGMkFyG6mf+XphpoJ2lAMVFLclyvrVZCw02RbKROjyw8h72XwQQHcw==} cpu: [arm64] os: [linux] - '@oxlint-tsgolint/linux-x64@0.18.1': - resolution: {integrity: sha512-f8vDYPEdiwpA2JaDEkadTXfuqIgweQ8zcL4SX75EN2kkW2oAynjN7cd8m86uXDgB0JrcyOywbRtwnXdiIzXn2A==} + '@oxlint-tsgolint/linux-x64@7.0.2004': + resolution: {integrity: sha512-LPunZvm6ZbWPfHMAyfZf9ci3HHvNEzLejO8zdqO3GoVGoSEHqqufHUD7+OgeatVSaJP7uXDJ2HaNOHIoH7go4Q==} cpu: [x64] os: [linux] - '@oxlint-tsgolint/win32-arm64@0.18.1': - resolution: {integrity: sha512-fBdML05KMDAL9ebWeoHIzkyI86Eq6r9YH5UDRuXJ9vAIo1EnKo0ti7hLUxNdc2dy2FF/T4k98p5wkkXvLyXqfA==} + '@oxlint-tsgolint/win32-arm64@7.0.2004': + resolution: {integrity: sha512-FVWplzDImWhiuawnIZVETaQecv4GWom6Jv4Fx2xj7hhXXDZ5okEgiw1gTCImHTIQsi2ycC5oSxVwrn69bMh7iw==} cpu: [arm64] os: [win32] - '@oxlint-tsgolint/win32-x64@0.18.1': - resolution: {integrity: sha512-cYZMhNrsq9ZZ3OUWHyawqiS+c8HfieYG0zuZP2LbEuWWPfdZM/22iAlo608J+27G1s9RXQhvgX6VekwWbXbD7A==} + '@oxlint-tsgolint/win32-x64@7.0.2004': + resolution: {integrity: sha512-7PsxuUx11Ry9DYTWcljTzRbmZY9B6O9fFFfZV+aodQEMy6pfRT3fhoQRv9PtGN/89z1pPz3nFKrsFm6WqNtX7w==} cpu: [x64] os: [win32] - '@oxlint/binding-android-arm-eabi@1.57.0': - resolution: {integrity: sha512-C7EiyfAJG4B70496eV543nKiq5cH0o/xIh/ufbjQz3SIvHhlDDsyn+mRFh+aW8KskTyUpyH2LGWL8p2oN6bl1A==} + '@oxlint/binding-android-arm-eabi@1.88.0': + resolution: {integrity: sha512-k6Fgkf86ubfeH4GvqYsRolfuVAp0pfYVZvifSlXNHPdMaWUOfxUrmLEeDD7hF6U2oJuhsVxhSWq86/xCJ+9MmA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxlint/binding-android-arm64@1.57.0': - resolution: {integrity: sha512-9i80AresjZ/FZf5xK8tKFbhQnijD4s1eOZw6/FHUwD59HEZbVLRc2C88ADYJfLZrF5XofWDiRX/Ja9KefCLy7w==} + '@oxlint/binding-android-arm64@1.88.0': + resolution: {integrity: sha512-AsIyhl9o1ejwtac7NMbhKpMdSml6NWR0ljKjZERxC8OHYDAW8o/Om9n1QHVLi4VCEUo42Zte2/Op9kyoGpJZMg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxlint/binding-darwin-arm64@1.57.0': - resolution: {integrity: sha512-0eUfhRz5L2yKa9I8k3qpyl37XK3oBS5BvrgdVIx599WZK63P8sMbg+0s4IuxmIiZuBK68Ek+Z+gcKgeYf0otsg==} + '@oxlint/binding-darwin-arm64@1.88.0': + resolution: {integrity: sha512-qgBjB7eEKcCB4RqjXGuoSZq74g0wD09fWFJ+HWcCJcKaga8TeUHtb+BY0SsxdleSLBgx4RZ7qmgo0EzqEq7JoQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxlint/binding-darwin-x64@1.57.0': - resolution: {integrity: sha512-UvrSuzBaYOue+QMAcuDITe0k/Vhj6KZGjfnI6x+NkxBTke/VoM7ZisaxgNY0LWuBkTnd1OmeQfEQdQ48fRjkQg==} + '@oxlint/binding-darwin-x64@1.88.0': + resolution: {integrity: sha512-sCz3X5Mw/xdzEzn4fsCt1Iq8NKJnGNfhR+b9B5k+4DysYAHsmIhYoocnBPiQ9kvY3+pUun2A0Z8Vtun/Nv6YoQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxlint/binding-freebsd-x64@1.57.0': - resolution: {integrity: sha512-wtQq0dCoiw4bUwlsNVDJJ3pxJA218fOezpgtLKrbQqUtQJcM9yP8z+I9fu14aHg0uyAxIY+99toL6uBa2r7nxA==} + '@oxlint/binding-freebsd-x64@1.88.0': + resolution: {integrity: sha512-xTOdYOIqCufgIj0knvxu86FBfovP6QBiD7ngNva01gb8xPQCD5gXkE5APGczH35zStim1O3zqvFbLQmY85xXRg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxlint/binding-linux-arm-gnueabihf@1.57.0': - resolution: {integrity: sha512-qxFWl2BBBFcT4djKa+OtMdnLgoHEJXpqjyGwz8OhW35ImoCwR5qtAGqApNYce5260FQqoAHW8S8eZTjiX67Tsg==} + '@oxlint/binding-linux-arm-gnueabihf@1.88.0': + resolution: {integrity: sha512-BLadtw88NdYJBrAtC1dYzrPfSP2d5zgx6iuZycdD0YmZBJ2Nqbit9Z4PSaIb6gxK25dweArGMPbOmq/0ugwUPg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxlint/binding-linux-arm-musleabihf@1.57.0': - resolution: {integrity: sha512-SQoIsBU7J0bDW15/f0/RvxHfY3Y0+eB/caKBQtNFbuerTiA6JCYx9P1MrrFTwY2dTm/lMgTSgskvCEYk2AtG/Q==} + '@oxlint/binding-linux-arm-musleabihf@1.88.0': + resolution: {integrity: sha512-wILSczl/DaZsCcf7j7tvNbssp8hxEHIJxrv4j7+JjI3TAL1U/JTWbeUtoJJC/vo8+2hkTmHLYoKJjmiNbijdXw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxlint/binding-linux-arm64-gnu@1.57.0': - resolution: {integrity: sha512-jqxYd1W6WMeozsCmqe9Rzbu3SRrGTyGDAipRlRggetyYbUksJqJKvUNTQtZR/KFoJPb+grnSm5SHhdWrywv3RQ==} + '@oxlint/binding-linux-arm64-gnu@1.88.0': + resolution: {integrity: sha512-jutT2Hy8JCuZuMwIFHo2HtyxfOfBJHyQxlBHBK1SL9W2f8n/WhjAP0FnDMz9d/mjhv9+QA0mx5AdQ9fDjsrFFg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@oxlint/binding-linux-arm64-musl@1.57.0': - resolution: {integrity: sha512-i66WyEPVEvq9bxRUCJ/MP5EBfnTDN3nhwEdFZFTO5MmLLvzngfWEG3NSdXQzTT3vk5B9i6C2XSIYBh+aG6uqyg==} + '@oxlint/binding-linux-arm64-musl@1.88.0': + resolution: {integrity: sha512-8N8iGV9hh4Lkeuq7QsEkjoXNRRflqR1G2qyoGYXcA0k5qllrdqmfylKEXyHIVERxqNDyMO4StqDQ0uLxXcBQAg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@oxlint/binding-linux-ppc64-gnu@1.57.0': - resolution: {integrity: sha512-oMZDCwz4NobclZU3pH+V1/upVlJZiZvne4jQP+zhJwt+lmio4XXr4qG47CehvrW1Lx2YZiIHuxM2D4YpkG3KVA==} + '@oxlint/binding-linux-ppc64-gnu@1.88.0': + resolution: {integrity: sha512-5ydcQt3znNQ/rGEWYRvpS2cK9+T18P2VYgnyJ+eloEAwi9YUmsXy5VGrRqNWIK6qzWwHGnEE3ojVqqQNo+f0hA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - '@oxlint/binding-linux-riscv64-gnu@1.57.0': - resolution: {integrity: sha512-uoBnjJ3MMEBbfnWC1jSFr7/nSCkcQYa72NYoNtLl1imshDnWSolYCjzb8LVCwYCCfLJXD+0gBLD7fyC14c0+0g==} + '@oxlint/binding-linux-riscv64-gnu@1.88.0': + resolution: {integrity: sha512-iGx0uvFT54b/5DPJdEBCxYIrVB3v0uTy+JhRh3CyEp8/22BXDkG8rffkFwREdLsdj9mOrPbJYVOZw8ipcBuzjw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - '@oxlint/binding-linux-riscv64-musl@1.57.0': - resolution: {integrity: sha512-BdrwD7haPZ8a9KrZhKJRSj6jwCor+Z8tHFZ3PT89Y3Jq5v3LfMfEePeAmD0LOTWpiTmzSzdmyw9ijneapiVHKQ==} + '@oxlint/binding-linux-riscv64-musl@1.88.0': + resolution: {integrity: sha512-Wt47mKMWelVjRjuR7BCFxXkB0m79K1sTEbqMHRWciKUgo5iv7sWsF4RXSOyFYHD9zerNrkRZblnN273rhwOA1Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - '@oxlint/binding-linux-s390x-gnu@1.57.0': - resolution: {integrity: sha512-BNs+7ZNsRstVg2tpNxAXfMX/Iv5oZh204dVyb8Z37+/gCh+yZqNTlg6YwCLIMPSk5wLWIGOaQjT0GUOahKYImw==} + '@oxlint/binding-linux-s390x-gnu@1.88.0': + resolution: {integrity: sha512-g3L12KCS4+1gtUt3RbJ4F+Yxx4LNmmZLEPfhd8rAHEJjJk2lAgNfnjGoP/phJyhG5WS6VbNYbJtadJelNfvTMA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - '@oxlint/binding-linux-x64-gnu@1.57.0': - resolution: {integrity: sha512-AghS18w+XcENcAX0+BQGLiqjpqpaxKJa4cWWP0OWNLacs27vHBxu7TYkv9LUSGe5w8lOJHeMxcYfZNOAPqw2bg==} + '@oxlint/binding-linux-x64-gnu@1.88.0': + resolution: {integrity: sha512-og/XHVDOD9ZJgRiZkT9DgzQd4sr+JZW7e4l17Q/jVMZiIbeEd4uIu9iAoUbTF1gIvVZoRc4QDOxyVUvQGp4WHg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@oxlint/binding-linux-x64-musl@1.57.0': - resolution: {integrity: sha512-E/FV3GB8phu/Rpkhz5T96hAiJlGzn91qX5yj5gU754P5cmVGXY1Jw/VSjDSlZBCY3VHjsVLdzgdkJaomEmcNOg==} + '@oxlint/binding-linux-x64-musl@1.88.0': + resolution: {integrity: sha512-EmhBsp+xuKb6YbZNEMLBo80Xw71AZOIm18do8ni/GLX/Lw1XzNhVYpbxO1KasYtoAvrGtCOdCPULRlIE0bPbTQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@oxlint/binding-openharmony-arm64@1.57.0': - resolution: {integrity: sha512-xvZ2yZt0nUVfU14iuGv3V25jpr9pov5N0Wr28RXnHFxHCRxNDMtYPHV61gGLhN9IlXM96gI4pyYpLSJC5ClLCQ==} + '@oxlint/binding-openharmony-arm64@1.88.0': + resolution: {integrity: sha512-DBUcx/KwYdg1DAz+G01P/GFv512J04EsZadbHptx2FTpWT/MWRg21ZToNHt9pnsfQRBQ3et/g+vqzbvrdAVbuA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxlint/binding-win32-arm64-msvc@1.57.0': - resolution: {integrity: sha512-Z4D8Pd0AyHBKeazhdIXeUUy5sIS3Mo0veOlzlDECg6PhRRKgEsBJCCV1n+keUZtQ04OP+i7+itS3kOykUyNhDg==} + '@oxlint/binding-win32-arm64-msvc@1.88.0': + resolution: {integrity: sha512-xeVd0n4XG5HvynxfYvXi6uB+JvZbVZataowPS8cYpMbYg9mwE4sSyElFQd4LVJFifq8bRLDSR18XgEildmcXAg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxlint/binding-win32-ia32-msvc@1.57.0': - resolution: {integrity: sha512-StOZ9nFMVKvevicbQfql6Pouu9pgbeQnu60Fvhz2S6yfMaii+wnueLnqQ5I1JPgNF0Syew4voBlAaHD13wH6tw==} + '@oxlint/binding-win32-ia32-msvc@1.88.0': + resolution: {integrity: sha512-MA6iOw//amleaz2mVMsZrA7NHlEexjTrhIxSMFCXQi6IUuQO+3Od00GZhr2iCYw6RFzMW36jkKK/WHBXMsoQAw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxlint/binding-win32-x64-msvc@1.57.0': - resolution: {integrity: sha512-6PuxhYgth8TuW0+ABPOIkGdBYw+qYGxgIdXPHSVpiCDm+hqTTWCmC739St1Xni0DJBt8HnSHTG67i1y6gr8qrA==} + '@oxlint/binding-win32-x64-msvc@1.88.0': + resolution: {integrity: sha512-3Sz6rVWe8Dy+ufsXurFN1GX2dX43F/lQMSLelK9gFjiba7nHvLlqlhR5cHlWVnCpSqUY1hN9pyCX9XToe6ve6g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -3950,19 +3950,22 @@ packages: openid-client@5.7.1: resolution: {integrity: sha512-jDBPgSVfTnkIh71Hg9pRvtJc6wTwqjRkN88+gCFtYWrlP4Yx2Dsrow8uPi3qLr/aeymPF3o2+dS+wOpglK04ew==} - oxlint-tsgolint@0.18.1: - resolution: {integrity: sha512-Hgb0wMfuXBYL0ddY+1hAG8IIfC40ADwPnBuUaC6ENAuCtTF4dHwsy7mCYtQ2e7LoGvfoSJRY0+kqQRiembJ/jQ==} + oxlint-tsgolint@7.0.2004: + resolution: {integrity: sha512-vQ9WDF3fiZJvRdSDosNOflerOCOpwol6vWzVDxW76RcU19cjTh7engvkHLvmv+tzedR8fAiJUVUGr6IVZdkzXQ==} hasBin: true - oxlint@1.57.0: - resolution: {integrity: sha512-DGFsuBX5MFZX9yiDdtKjTrYPq45CZ8Fft6qCltJITYZxfwYjVdGf/6wycGYTACloauwIPxUnYhBVeZbHvleGhw==} + oxlint@1.88.0: + resolution: {integrity: sha512-uIcFgw8BmqvFRGzH5+r7d2zJMEexwNSrEmM6WQNnGh3VkO0XYTEFoyxyNE6tjKMUib9Cue4XJA2DoWruO5D6aw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - oxlint-tsgolint: '>=0.15.0' + oxlint-tsgolint: '>=7.0.2003' + vite-plus: '*' peerDependenciesMeta: oxlint-tsgolint: optional: true + vite-plus: + optional: true p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} @@ -5622,79 +5625,79 @@ snapshots: '@noble/hashes@1.8.0': {} - '@oxlint-tsgolint/darwin-arm64@0.18.1': + '@oxlint-tsgolint/darwin-arm64@7.0.2004': optional: true - '@oxlint-tsgolint/darwin-x64@0.18.1': + '@oxlint-tsgolint/darwin-x64@7.0.2004': optional: true - '@oxlint-tsgolint/linux-arm64@0.18.1': + '@oxlint-tsgolint/linux-arm64@7.0.2004': optional: true - '@oxlint-tsgolint/linux-x64@0.18.1': + '@oxlint-tsgolint/linux-x64@7.0.2004': optional: true - '@oxlint-tsgolint/win32-arm64@0.18.1': + '@oxlint-tsgolint/win32-arm64@7.0.2004': optional: true - '@oxlint-tsgolint/win32-x64@0.18.1': + '@oxlint-tsgolint/win32-x64@7.0.2004': optional: true - '@oxlint/binding-android-arm-eabi@1.57.0': + '@oxlint/binding-android-arm-eabi@1.88.0': optional: true - '@oxlint/binding-android-arm64@1.57.0': + '@oxlint/binding-android-arm64@1.88.0': optional: true - '@oxlint/binding-darwin-arm64@1.57.0': + '@oxlint/binding-darwin-arm64@1.88.0': optional: true - '@oxlint/binding-darwin-x64@1.57.0': + '@oxlint/binding-darwin-x64@1.88.0': optional: true - '@oxlint/binding-freebsd-x64@1.57.0': + '@oxlint/binding-freebsd-x64@1.88.0': optional: true - '@oxlint/binding-linux-arm-gnueabihf@1.57.0': + '@oxlint/binding-linux-arm-gnueabihf@1.88.0': optional: true - '@oxlint/binding-linux-arm-musleabihf@1.57.0': + '@oxlint/binding-linux-arm-musleabihf@1.88.0': optional: true - '@oxlint/binding-linux-arm64-gnu@1.57.0': + '@oxlint/binding-linux-arm64-gnu@1.88.0': optional: true - '@oxlint/binding-linux-arm64-musl@1.57.0': + '@oxlint/binding-linux-arm64-musl@1.88.0': optional: true - '@oxlint/binding-linux-ppc64-gnu@1.57.0': + '@oxlint/binding-linux-ppc64-gnu@1.88.0': optional: true - '@oxlint/binding-linux-riscv64-gnu@1.57.0': + '@oxlint/binding-linux-riscv64-gnu@1.88.0': optional: true - '@oxlint/binding-linux-riscv64-musl@1.57.0': + '@oxlint/binding-linux-riscv64-musl@1.88.0': optional: true - '@oxlint/binding-linux-s390x-gnu@1.57.0': + '@oxlint/binding-linux-s390x-gnu@1.88.0': optional: true - '@oxlint/binding-linux-x64-gnu@1.57.0': + '@oxlint/binding-linux-x64-gnu@1.88.0': optional: true - '@oxlint/binding-linux-x64-musl@1.57.0': + '@oxlint/binding-linux-x64-musl@1.88.0': optional: true - '@oxlint/binding-openharmony-arm64@1.57.0': + '@oxlint/binding-openharmony-arm64@1.88.0': optional: true - '@oxlint/binding-win32-arm64-msvc@1.57.0': + '@oxlint/binding-win32-arm64-msvc@1.88.0': optional: true - '@oxlint/binding-win32-ia32-msvc@1.57.0': + '@oxlint/binding-win32-ia32-msvc@1.88.0': optional: true - '@oxlint/binding-win32-x64-msvc@1.57.0': + '@oxlint/binding-win32-x64-msvc@1.88.0': optional: true '@panva/hkdf@1.2.1': {} @@ -8441,37 +8444,37 @@ snapshots: object-hash: 2.2.0 oidc-token-hash: 5.1.0 - oxlint-tsgolint@0.18.1: + oxlint-tsgolint@7.0.2004: optionalDependencies: - '@oxlint-tsgolint/darwin-arm64': 0.18.1 - '@oxlint-tsgolint/darwin-x64': 0.18.1 - '@oxlint-tsgolint/linux-arm64': 0.18.1 - '@oxlint-tsgolint/linux-x64': 0.18.1 - '@oxlint-tsgolint/win32-arm64': 0.18.1 - '@oxlint-tsgolint/win32-x64': 0.18.1 - - oxlint@1.57.0(oxlint-tsgolint@0.18.1): + '@oxlint-tsgolint/darwin-arm64': 7.0.2004 + '@oxlint-tsgolint/darwin-x64': 7.0.2004 + '@oxlint-tsgolint/linux-arm64': 7.0.2004 + '@oxlint-tsgolint/linux-x64': 7.0.2004 + '@oxlint-tsgolint/win32-arm64': 7.0.2004 + '@oxlint-tsgolint/win32-x64': 7.0.2004 + + oxlint@1.88.0(oxlint-tsgolint@7.0.2004): optionalDependencies: - '@oxlint/binding-android-arm-eabi': 1.57.0 - '@oxlint/binding-android-arm64': 1.57.0 - '@oxlint/binding-darwin-arm64': 1.57.0 - '@oxlint/binding-darwin-x64': 1.57.0 - '@oxlint/binding-freebsd-x64': 1.57.0 - '@oxlint/binding-linux-arm-gnueabihf': 1.57.0 - '@oxlint/binding-linux-arm-musleabihf': 1.57.0 - '@oxlint/binding-linux-arm64-gnu': 1.57.0 - '@oxlint/binding-linux-arm64-musl': 1.57.0 - '@oxlint/binding-linux-ppc64-gnu': 1.57.0 - '@oxlint/binding-linux-riscv64-gnu': 1.57.0 - '@oxlint/binding-linux-riscv64-musl': 1.57.0 - '@oxlint/binding-linux-s390x-gnu': 1.57.0 - '@oxlint/binding-linux-x64-gnu': 1.57.0 - '@oxlint/binding-linux-x64-musl': 1.57.0 - '@oxlint/binding-openharmony-arm64': 1.57.0 - '@oxlint/binding-win32-arm64-msvc': 1.57.0 - '@oxlint/binding-win32-ia32-msvc': 1.57.0 - '@oxlint/binding-win32-x64-msvc': 1.57.0 - oxlint-tsgolint: 0.18.1 + '@oxlint/binding-android-arm-eabi': 1.88.0 + '@oxlint/binding-android-arm64': 1.88.0 + '@oxlint/binding-darwin-arm64': 1.88.0 + '@oxlint/binding-darwin-x64': 1.88.0 + '@oxlint/binding-freebsd-x64': 1.88.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.88.0 + '@oxlint/binding-linux-arm-musleabihf': 1.88.0 + '@oxlint/binding-linux-arm64-gnu': 1.88.0 + '@oxlint/binding-linux-arm64-musl': 1.88.0 + '@oxlint/binding-linux-ppc64-gnu': 1.88.0 + '@oxlint/binding-linux-riscv64-gnu': 1.88.0 + '@oxlint/binding-linux-riscv64-musl': 1.88.0 + '@oxlint/binding-linux-s390x-gnu': 1.88.0 + '@oxlint/binding-linux-x64-gnu': 1.88.0 + '@oxlint/binding-linux-x64-musl': 1.88.0 + '@oxlint/binding-openharmony-arm64': 1.88.0 + '@oxlint/binding-win32-arm64-msvc': 1.88.0 + '@oxlint/binding-win32-ia32-msvc': 1.88.0 + '@oxlint/binding-win32-x64-msvc': 1.88.0 + oxlint-tsgolint: 7.0.2004 p-limit@2.3.0: dependencies: From 0443c668cba80fb0d20df76f7984e8c14849b279 Mon Sep 17 00:00:00 2001 From: krokosik Date: Wed, 14 Oct 2026 22:36:11 +0200 Subject: [PATCH 08/59] Create a lint cleanup agent --- .opencode/agents/lint-cleanup.md | 114 +++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 .opencode/agents/lint-cleanup.md diff --git a/.opencode/agents/lint-cleanup.md b/.opencode/agents/lint-cleanup.md new file mode 100644 index 000000000..3de73ca57 --- /dev/null +++ b/.opencode/agents/lint-cleanup.md @@ -0,0 +1,114 @@ +--- +description: Cleans up all occurrences of a specified Oxlint rule according to project guidelines, reporting ambiguous fixes for user input. +mode: subagent +model: openai/gpt-6-luna +permission: + task: deny +--- + +# Lint rule cleanup + +You implement focused lint fixes for one explicitly assigned rule at a time. Find every +reported occurrence in the assigned scope, fix the cases whose intended behavior is clear, +and report uncertain cases to the calling agent for user input. A smaller warning count +is not a justification for changing behavior or overriding project conventions. + +## Establish scope and guidelines + +- Read the assignment, applicable `AGENTS.md` files, the current lint configuration, and + package scripts. Use the user's current configuration; do not assume a previous baseline. +- Identify the exact rule, any path restrictions, and the intended cleanup policy. If the + rule or scope is ambiguous, report that before editing. Default to the repository's + normal lint scope when no path restriction is given. +- Inspect Git status and existing diffs. Preserve user work and avoid overwriting changes + made by other agents. Commit your verified changes as described below. Do not push or + start additional subagents. +- Follow project requirements for documentation lookup when a fix depends on library APIs. +- This project's React Compiler migration has two phases: first resolve compilation and + lint correctness issues and pass verification; only afterwards simplify performance-driven + handler factories, component extractions, and manual memoization. Do not perform that + second-phase cleanup unless the calling agent explicitly confirms the first phase passed + and assigns the cleanup. Make changes required for the target rule in the current phase. + +## Inventory every occurrence + +- Run the project-local Oxlint with its existing configuration, preferably using + `pnpm exec oxlint --format=json`, restricted to assigned paths only when requested. + Preserve and inspect the linter's exit status; an output-processing pipeline succeeding + does not mean lint passed. +- Filter structured diagnostics by the exact assigned rule, accounting for the difference + between config names such as `react/refs` and diagnostic codes such as `react(refs)`. + Record the initial count and every affected file and location, including warnings. +- Read full diagnostic output when paginated or truncated. Do not treat the first page or + a sample of matches as a complete inventory. +- Honor configured ignores and suppressions. Report excluded scope when relevant rather + than silently enabling disabled rules or expanding into ignored files. +- Use graph tools for symbol relationships and dedicated search tools for literals and + coverage gaps. Read surrounding code and relevant consumers before choosing a fix. + +## Implement clear, minimal fixes + +- Preserve observable behavior, public types, error handling, and established conventions. + In this project, preserve BigInt monetary arithmetic, locale behavior, hydration, + query enablement, form editing/reset behavior, and subscription lifecycles. +- Fix the underlying issue rather than silencing it. Do not weaken lint configuration, + add disable comments or compiler opt-outs, introduce `any`, or add unsafe assertions to + eliminate diagnostics without an explicit assignment authorizing that decision. +- Do not run repository-wide autofixes. Use manual patches or demonstrably rule-scoped + safe autofixes, inspect the resulting diff, and avoid changes for unrelated rules. +- When fixes interact with other diagnostics, explain the dependency. Only include a + prerequisite change if it is clearly necessary and within the assignment's scope. +- For compiler diagnostics, inspect data flow rather than mechanically moving code into + effects, wrapping it in memoization, or changing refs to state. Verify the intended + render and update behavior. +- When multiple fixes are plausible, behavior is unclear, a library compatibility issue + remains, or a fix would require a policy decision, leave that occurrence unchanged. + Continue with independent clear cases and collect the unresolved decisions for the caller. +- Each unresolved item must include the file and location, rule, relevant behavior, + why the fix is uncertain, possible approaches and tradeoffs, and a specific question. + Never guess merely to achieve zero diagnostics. + +## Verify and account for the result + +- Format only changed files. Rerun lint using the same scope and configuration as the + baseline, inventory all remaining occurrences of the target rule, and compare other + diagnostics to detect regressions. +- Run `pnpm tsc --noEmit` for TypeScript changes and appropriate existing focused tests + for behavior-changing fixes. Run the production build when compiler integration, + routing, or build-sensitive code is affected. Follow the project's disposable-database + requirements for integration or browser tests. +- Do not add tests that simply mirror mechanical lint edits. Add a focused regression test + when a correctness fix needs meaningful coverage. +- Review the final diff for unrelated changes. Report failed, blocked, or unrun checks + explicitly; never describe a partial cleanup as complete or baseline failures as new. +- Every initial occurrence must be accounted for as fixed or unresolved. If a diagnostic + disappears indirectly, explain which change resolved it. Note any newly exposed findings. + +## Commit verified changes + +- Commit the fixes you implemented after verification and any review required by the calling + agent. If the assignment explicitly defers commits until integration checks pass, honor + that sequencing and report the pending commit. +- Before committing, inspect `git status`, `git diff`, and `git log --oneline -10`. Stage + only your intended files using explicit paths; never stage unrelated work or secrets. + Review the staged diff before creating a concise commit matching the repository's style. +- When agents share a worktree, coordinate staging and commits through the calling agent + so Git index operations do not overlap. If staged changes belong to someone else, report + the conflict rather than including or unstaging them. +- Run normal commit hooks. Do not bypass hooks, change Git configuration, amend commits, + or force-push. If a hook fails, fix issues within your scope and retry with a new commit; + report failures outside your scope to the caller. +- Keep uncertain occurrences untouched and list them in the report. A commit containing + verified fixes may be partial; it does not mean all assigned diagnostics are resolved. + +## Return to the calling agent + +Provide a concise report with: + +1. **Scope and rule:** configuration used, paths covered, and initial diagnostic count. +2. **Changes:** files changed, fixes applied, and why behavior is preserved. +3. **Remaining:** final count and unresolved locations, with specific questions for the user. +4. **Verification:** commands run and their outcomes, including existing unrelated failures. +5. **Commit:** commit hash and message, or why the commit is pending or blocked. +6. **Status:** complete, partial pending decisions, or blocked. Completion requires verified + resolution of all target occurrences in scope, not merely a successful edit. From 4ac32a272bcd92261ca10604da2d7e344a9a2317 Mon Sep 17 00:00:00 2001 From: krokosik Date: Wed, 14 Oct 2026 23:14:31 +0200 Subject: [PATCH 09/59] Fix React Compiler hook correctness --- src/components/AddExpense/CategoryPicker.tsx | 47 ++++++++------------ src/components/Expense/ExpenseDetails.tsx | 30 ++++++------- src/components/Expense/ExpenseList.tsx | 33 ++++++-------- src/components/Friend/Settleup.tsx | 23 ++++++++-- 4 files changed, 66 insertions(+), 67 deletions(-) diff --git a/src/components/AddExpense/CategoryPicker.tsx b/src/components/AddExpense/CategoryPicker.tsx index 861a9e758..ee445c759 100644 --- a/src/components/AddExpense/CategoryPicker.tsx +++ b/src/components/AddExpense/CategoryPicker.tsx @@ -4,7 +4,7 @@ import { useTranslation } from 'next-i18next'; import { Button } from '../ui/button'; import { CategoryIcon } from '../ui/categoryIcons'; -import { AppDrawer, AppDrawerClose, DrawerClose } from '../ui/drawer'; +import { AppDrawer, AppDrawerClose } from '../ui/drawer'; export const CategoryPicker: React.FC<{ category: string; @@ -29,33 +29,24 @@ export const CategoryPicker: React.FC<{ {t(`categories_list.${categoryName}.name`)}
- {categoryItems.map((key: string) => { - const handleClick = useMemo( - () => () => { - onCategoryPick('other' === key ? categoryName : key); - }, - [key], - ); - - return ( - - - - ); - })} + {categoryItems.map((key: string) => ( + + + + ))}
))} diff --git a/src/components/Expense/ExpenseDetails.tsx b/src/components/Expense/ExpenseDetails.tsx index 188c42be8..87e2996e9 100644 --- a/src/components/Expense/ExpenseDetails.tsx +++ b/src/components/Expense/ExpenseDetails.tsx @@ -227,17 +227,17 @@ export const EditCurrencyConversion: React.FC<{ expense: ExpenseDetailsOutput }> const { setCurrency } = useAddExpenseStore((s) => s.actions); const { t } = useTranslationWithUtils(); - if (!expense.conversionTo) { + const addOrEditCurrencyConversionMutation = api.expense.addOrEditCurrencyConversion.useMutation(); + const apiUtils = api.useUtils(); + + const hasConversionTo = Boolean(expense.conversionTo); + if (!hasConversionTo) { toast.error(t('errors.currency_conversion_malformed')); console.error( 'Malformed currency conversion data: no conversionTo present, please report this issue.', ); - return null; } - const addOrEditCurrencyConversionMutation = api.expense.addOrEditCurrencyConversion.useMutation(); - const apiUtils = api.useUtils(); - const onClick = useCallback(() => { if (expense.conversionTo && isCurrencyCode(expense.conversionTo.currency)) { setCurrency(expense.conversionTo.currency); @@ -247,12 +247,11 @@ export const EditCurrencyConversion: React.FC<{ expense: ExpenseDetailsOutput }> const sender = expense.paidByUser; const receiver = expense.expenseParticipants.find((p) => p.userId !== expense.paidBy)?.user; - if (!sender || !receiver || !isCurrencyCode(expense.currency)) { - return null; - } - const onSubmit: ComponentProps['onSubmit'] = useCallback( async (data) => { + if (!sender || !receiver) { + return; + } await addOrEditCurrencyConversionMutation.mutateAsync({ ...data, senderId: sender.id, @@ -262,16 +261,13 @@ export const EditCurrencyConversion: React.FC<{ expense: ExpenseDetailsOutput }> }); await apiUtils.invalidate(); }, - [ - addOrEditCurrencyConversionMutation, - sender.id, - receiver.id, - expense.groupId, - expense.id, - apiUtils, - ], + [addOrEditCurrencyConversionMutation, sender, receiver, expense.groupId, expense.id, apiUtils], ); + if (!hasConversionTo || !sender || !receiver || !isCurrencyCode(expense.currency)) { + return null; + } + return ( = ({ userId, isGroup = false, expenses = [], contactId, isLoading }) => { + const { i18n } = useTranslationWithUtils(); + if (!isLoading && expenses.length === 0) { return ; } - const { i18n } = useTranslationWithUtils(); - - let lastDate: Date | null = null; - return (
- {expenses.map((e) => { + {expenses.map((e, index) => { const currentDate = e.expenseDate; - let isFirstOfMonth = false; - - if ( - lastDate === null || - currentDate.getMonth() !== lastDate.getMonth() || - currentDate.getFullYear() !== lastDate.getFullYear() - ) { - isFirstOfMonth = true; - } - - lastDate = currentDate; + const previousDate = expenses[index - 1]?.expenseDate; + const isFirstOfMonth = + !previousDate || + currentDate.getMonth() !== previousDate.getMonth() || + currentDate.getFullYear() !== previousDate.getFullYear(); const isSettlement = e.splitType === SplitType.SETTLEMENT; const isCurrencyConversion = e.splitType === SplitType.CURRENCY_CONVERSION; @@ -174,6 +166,12 @@ const Settlement: ExpenseComponent = ({ e, userId }) => { const CurrencyConversion: ExpenseComponent = ({ e, userId }) => { const { displayName, toUIDate, t, getCurrencyHelpersCached } = useTranslationWithUtils(); + const receiverId = e.expenseParticipants.find((p) => p.userId !== e.paidBy)?.userId; + const userDetails = api.user.getUserDetails.useQuery( + { userId: receiverId ?? 0 }, + { enabled: Boolean(e.conversionTo && receiverId) }, + ); + if (!e.conversionTo) { toast.error(t('errors.currency_conversion_malformed')); console.error( @@ -182,9 +180,6 @@ const CurrencyConversion: ExpenseComponent = ({ e, userId }) => { return null; } - const receiverId = e.expenseParticipants.find((p) => p.userId !== e.paidBy)?.userId; - const userDetails = api.user.getUserDetails.useQuery({ userId: receiverId! }); - return (
diff --git a/src/components/Friend/Settleup.tsx b/src/components/Friend/Settleup.tsx index 23f69a368..66b56edc2 100644 --- a/src/components/Friend/Settleup.tsx +++ b/src/components/Friend/Settleup.tsx @@ -22,7 +22,7 @@ export const SettleUp: React.FC< friend: User; }> > = ({ children, balances, friend }) => { - const { t, displayName, getCurrencyHelpersCached } = useTranslationWithUtils(); + const { t } = useTranslationWithUtils(); const { data } = useSession(); const currentUser = data?.user; @@ -38,6 +38,23 @@ export const SettleUp: React.FC< ); } + return ( + + ); +}; + +const SettleUpWithBalances: React.FC<{ + balances: MinimalBalance[]; + friend: User; + currentUser: NonNullable['data']>['user']; + trigger: React.ReactNode; +}> = ({ balances, friend, currentUser, trigger }) => { + const { t, displayName, getCurrencyHelpersCached } = useTranslationWithUtils(); const [balanceToSettle, setBalanceToSettle] = useState( 1 < balances.length ? undefined : balances[0], ); @@ -128,7 +145,7 @@ export const SettleUp: React.FC< return ( {!balanceToSettle ? (
- {balances?.map((b) => ( + {balances.map((b) => (
onSelectBalance(b)} From 43453cb41997eeac99780c5158f9cf404dc1e629 Mon Sep 17 00:00:00 2001 From: krokosik Date: Wed, 14 Oct 2026 23:15:02 +0200 Subject: [PATCH 10/59] Fix React Compiler lint issues --- .../Account/BankAccount/BankConnection.tsx | 2 +- src/components/Account/LanguagePicker.tsx | 2 +- src/components/Account/UpdateDetails.tsx | 17 +++++++++-------- src/components/group/CreateGroup.tsx | 10 +++------- src/pages/_app.tsx | 6 +----- 5 files changed, 15 insertions(+), 22 deletions(-) diff --git a/src/components/Account/BankAccount/BankConnection.tsx b/src/components/Account/BankAccount/BankConnection.tsx index aa3228637..694a4fd01 100644 --- a/src/components/Account/BankAccount/BankConnection.tsx +++ b/src/components/Account/BankAccount/BankConnection.tsx @@ -33,7 +33,7 @@ export const BankConnection: React.FC = ({ return res.authLink; } } - }, [connectToBank, userQuery.data?.bankingId, bankConnection]); + }, [connectToBank, userQuery.data, bankConnection]); const fetchUser = useCallback(() => { userQuery.refetch().catch(console.error); diff --git a/src/components/Account/LanguagePicker.tsx b/src/components/Account/LanguagePicker.tsx index 7fa32aee8..f4ffa6f62 100644 --- a/src/components/Account/LanguagePicker.tsx +++ b/src/components/Account/LanguagePicker.tsx @@ -11,7 +11,7 @@ export const LanguagePicker: React.FC = ({ children }) => { const { i18n, t } = useTranslation(); const updateUser = api.user.updateUserDetail.useMutation(); - const supportedLanguages = useMemo(getSupportedLanguages, []); + const supportedLanguages = useMemo(() => getSupportedLanguages(), []); const onSelect = useCallback( async (currentValue: string) => { diff --git a/src/components/Account/UpdateDetails.tsx b/src/components/Account/UpdateDetails.tsx index b5f659c8f..def060c1c 100644 --- a/src/components/Account/UpdateDetails.tsx +++ b/src/components/Account/UpdateDetails.tsx @@ -2,7 +2,7 @@ import { zodResolver } from '@hookform/resolvers/zod'; import { Camera, Pencil, X } from 'lucide-react'; import Cropper, { type Area } from 'react-easy-crop'; import React, { useCallback, useMemo, useState } from 'react'; -import { useForm } from 'react-hook-form'; +import { useForm, useWatch } from 'react-hook-form'; import { type TFunction, useTranslation } from 'next-i18next'; import { toast } from 'sonner'; import { z } from 'zod'; @@ -111,6 +111,9 @@ export const UpdateName: React.FC<{ defaultCurrency, }, }); + const watchedName = useWatch({ control: detailForm.control, name: 'name' }); + const watchedImage = useWatch({ control: detailForm.control, name: 'image' }); + const watchedDefaultCurrency = useWatch({ control: detailForm.control, name: 'defaultCurrency' }); React.useEffect(() => { detailForm.reset({ @@ -263,8 +266,8 @@ export const UpdateName: React.FC<{
@@ -283,7 +286,7 @@ export const UpdateName: React.FC<{ ); - }, [amount, currency, onConvertAmount]); + }, [amount, currency, onConvertAmount, previousCurrency]); const onBackButtonPress = useCallback(() => { router.back(); diff --git a/src/components/AddExpense/SplitTypeSection.tsx b/src/components/AddExpense/SplitTypeSection.tsx index 768915577..0426c9454 100644 --- a/src/components/AddExpense/SplitTypeSection.tsx +++ b/src/components/AddExpense/SplitTypeSection.tsx @@ -258,7 +258,7 @@ const SplitSection: React.FC = (props) => { ); const currency = useAddExpenseStore((s) => s.currency); const { t, getCurrencyHelpersCached } = useTranslationWithUtils(); - const { toUIString, toSafeBigInt } = getCurrencyHelpersCached(currency); + const { toUIString } = getCurrencyHelpersCached(currency); const amount = useAddExpenseStore((s) => s.amount); const canSplitScreenClosed = useAddExpenseStore((s) => s.canSplitScreenClosed); const splitShares = useAddExpenseStore((s) => s.splitShares); @@ -288,10 +288,14 @@ const SplitSection: React.FC = (props) => { userId, value === undefined || '' === value ? 0n - : BigMath.abs(toSafeBigInt(isCurrency ? value : parseFloat(value))), + : BigMath.abs( + getCurrencyHelpersCached(currency).toSafeBigInt( + isCurrency ? value : parseFloat(value), + ), + ), ); }, - [setSplitShare, splitType, toSafeBigInt, isCurrency], + [setSplitShare, splitType, getCurrencyHelpersCached, currency, isCurrency], ); return ( From 89a9fc3f96af4c2046d36fcfc801dd7a768d6bb5 Mon Sep 17 00:00:00 2001 From: krokosik Date: Wed, 14 Oct 2026 23:15:57 +0200 Subject: [PATCH 12/59] Fix React hook compiler correctness --- src/contexts/CurrencyHelpersContext.tsx | 48 +++++------ src/hooks/useEffectDebugger.ts | 41 +++++----- src/hooks/useIsClient.ts | 15 ++-- src/hooks/useIsPwa.ts | 51 +++++++----- src/hooks/usePrevious.ts | 9 --- ...ctCompilerHydrationPwa.regression.test.tsx | 79 +++++++++++++++++++ 6 files changed, 164 insertions(+), 79 deletions(-) delete mode 100644 src/hooks/usePrevious.ts create mode 100644 src/tests/reactCompilerHydrationPwa.regression.test.tsx diff --git a/src/contexts/CurrencyHelpersContext.tsx b/src/contexts/CurrencyHelpersContext.tsx index 40d33751e..ea85423c8 100644 --- a/src/contexts/CurrencyHelpersContext.tsx +++ b/src/contexts/CurrencyHelpersContext.tsx @@ -1,8 +1,31 @@ 'use client'; -import React, { createContext, useCallback, useMemo } from 'react'; +import React, { createContext, useMemo } from 'react'; import { getCurrencyHelpers } from '~/utils/numbers'; +const CURRENCY_HELPERS_CACHE_LIMIT = 100; +const currencyHelpersCache = new Map(); + +const getCachedCurrencyHelpers = (currency: string, locale = 'en-US'): CurrencyHelpersType => { + const cacheKey = JSON.stringify([currency, locale]); + const cachedHelpers = currencyHelpersCache.get(cacheKey); + if (cachedHelpers) { + currencyHelpersCache.delete(cacheKey); + currencyHelpersCache.set(cacheKey, cachedHelpers); + return cachedHelpers; + } + + const helpers = getCurrencyHelpers({ currency, locale }); + currencyHelpersCache.set(cacheKey, helpers); + if (currencyHelpersCache.size > CURRENCY_HELPERS_CACHE_LIMIT) { + const leastRecentlyUsedKey = currencyHelpersCache.keys().next().value; + if (leastRecentlyUsedKey !== undefined) { + currencyHelpersCache.delete(leastRecentlyUsedKey); + } + } + return helpers; +}; + export type CurrencyHelpersType = ReturnType; interface CurrencyHelpersContextType { @@ -22,32 +45,11 @@ interface CurrencyHelpersProviderProps { * The cache is indexed by currency code and locale combination. */ export const CurrencyHelpersProvider: React.FC = ({ children }) => { - // Cache map: key is "currency|locale" - const cache = useMemo(() => new Map(), []); - - const getCachedCurrencyHelpers = useCallback( - (currency: string, locale = 'en-US') => { - const cacheKey = `${currency}|${locale}`; - - // Return cached helpers if available - if (cache.has(cacheKey)) { - return cache.get(cacheKey)!; - } - - // Create new helpers and cache them - const helpers = getCurrencyHelpers({ currency, locale }); - cache.set(cacheKey, helpers); - - return helpers; - }, - [cache], - ); - const value: CurrencyHelpersContextType = useMemo( () => ({ getCachedCurrencyHelpers, }), - [getCachedCurrencyHelpers], + [], ); return ( diff --git a/src/hooks/useEffectDebugger.ts b/src/hooks/useEffectDebugger.ts index e9b20c496..94355ab6e 100644 --- a/src/hooks/useEffectDebugger.ts +++ b/src/hooks/useEffectDebugger.ts @@ -1,5 +1,4 @@ -import { type DependencyList, type EffectCallback, useEffect } from 'react'; -import { usePrevious } from './usePrevious'; +import { type DependencyList, type EffectCallback, useEffect, useRef } from 'react'; type ChangedDeps = Record; @@ -8,26 +7,30 @@ export const useEffectDebugger = ( deps: DependencyList, dependencyNames: string[] = [], ) => { - const previousDeps = usePrevious(deps, []) ?? []; + const previousDeps = useRef([]); - const changedDeps = deps.reduce((accum: ChangedDeps, dependency, index) => { - if (dependency !== previousDeps[index]) { - const keyName = dependencyNames[index] ?? index; - return { - ...accum, - [keyName]: { - before: previousDeps[index], - after: dependency, - }, - }; - } + useEffect(() => { + const changedDeps = deps.reduce((accum: ChangedDeps, dependency, index) => { + if (dependency !== previousDeps.current[index]) { + const keyName = dependencyNames[index] ?? index; + return { + ...accum, + [keyName]: { + before: previousDeps.current[index], + after: dependency, + }, + }; + } + + return accum; + }, {}); - return accum; - }, {}); + if (Object.keys(changedDeps).length) { + console.table(changedDeps); + } - if (Object.keys(changedDeps).length) { - console.table(changedDeps); - } + previousDeps.current = deps; + }); // oxlint-disable-next-line exhaustive-deps useEffect(effect, deps); diff --git a/src/hooks/useIsClient.ts b/src/hooks/useIsClient.ts index 41d260b40..c4d600e05 100644 --- a/src/hooks/useIsClient.ts +++ b/src/hooks/useIsClient.ts @@ -1,11 +1,8 @@ -import { useEffect, useState } from 'react'; +import { useSyncExternalStore } from 'react'; -export const useIsClient = () => { - const [isClient, setIsClient] = useState(false); +const unsubscribe = () => {}; +const subscribe = () => unsubscribe; +const getSnapshot = () => true; +const getServerSnapshot = () => false; - useEffect(() => { - setIsClient(true); - }, []); - - return isClient; -}; +export const useIsClient = () => useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot); diff --git a/src/hooks/useIsPwa.ts b/src/hooks/useIsPwa.ts index 1e381a633..2e068044d 100644 --- a/src/hooks/useIsPwa.ts +++ b/src/hooks/useIsPwa.ts @@ -1,25 +1,38 @@ -import { useEffect, useState } from 'react'; +import { useSyncExternalStore } from 'react'; -export function useIsPwa(): boolean { - const [isPwa, setIsPwa] = useState(false); +const getSnapshot = (): boolean => { + try { + const isIOSStandalone = + typeof navigator !== 'undefined' && 'standalone' in navigator + ? !!navigator.standalone + : false; + + const isDisplayModeStandalone = + typeof window !== 'undefined' && typeof window.matchMedia === 'function' + ? window.matchMedia('(display-mode: standalone)').matches + : false; - useEffect(() => { - try { - const isIOSStandalone = - typeof navigator !== 'undefined' && 'standalone' in navigator - ? !!navigator.standalone - : false; + return isIOSStandalone || isDisplayModeStandalone; + } catch { + return false; + } +}; - const isDisplayModeStandalone = - typeof window !== 'undefined' && typeof window.matchMedia === 'function' - ? window.matchMedia('(display-mode: standalone)').matches - : false; +const subscribe = (callback: () => void): (() => void) => { + if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') { + return () => {}; + } - setIsPwa(isIOSStandalone || isDisplayModeStandalone); - } catch { - setIsPwa(false); - } - }, []); + const mediaQuery = window.matchMedia('(display-mode: standalone)'); + if (mediaQuery.addEventListener) { + mediaQuery.addEventListener('change', callback); + return () => mediaQuery.removeEventListener('change', callback); + } - return isPwa; + mediaQuery.addListener(callback); + return () => mediaQuery.removeListener(callback); +}; + +export function useIsPwa(): boolean { + return useSyncExternalStore(subscribe, getSnapshot, () => false); } diff --git a/src/hooks/usePrevious.ts b/src/hooks/usePrevious.ts deleted file mode 100644 index 555745d90..000000000 --- a/src/hooks/usePrevious.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { useEffect, useRef } from 'react'; - -export const usePrevious = (value: T, initialValue: T) => { - const ref = useRef(initialValue); - useEffect(() => { - ref.current = value; - }); - return ref.current; -}; diff --git a/src/tests/reactCompilerHydrationPwa.regression.test.tsx b/src/tests/reactCompilerHydrationPwa.regression.test.tsx new file mode 100644 index 000000000..cefefec7e --- /dev/null +++ b/src/tests/reactCompilerHydrationPwa.regression.test.tsx @@ -0,0 +1,79 @@ +/** @jest-environment jsdom */ + +import { act } from '@testing-library/react'; +import { type Root, hydrateRoot } from 'react-dom/client'; +import { renderToString } from 'react-dom/server'; +import React from 'react'; +import { useIsClient } from '~/hooks/useIsClient'; +import { useIsPwa } from '~/hooks/useIsPwa'; + +describe('React compiler hydration and PWA subscription regressions', () => { + it('keeps the client hook false for the server snapshot and true on the client', () => { + const ClientStatus = () => {useIsClient() ? 'client' : 'server'}; + const markup = renderToString(); + expect(markup).toBe('server'); + + const container = document.createElement('div'); + container.innerHTML = markup; + document.body.append(container); + let root: Root | null = null; + act(() => { + root = hydrateRoot(container, ); + }); + expect(container.textContent).toBe('client'); + act(() => root?.unmount()); + container.remove(); + }); + + it('updates PWA status on display-mode changes and unsubscribes on unmount', () => { + const originalMatchMedia = window.matchMedia; + const listeners = new Set(); + const mediaQueryList: MediaQueryList = { + media: '(display-mode: standalone)', + onchange: null, + get matches() { + return matches; + }, + addEventListener: (_type: string, callback: EventListenerOrEventListenerObject) => { + listeners.add(callback); + }, + removeEventListener: (_type: string, callback: EventListenerOrEventListenerObject) => { + listeners.delete(callback); + }, + addListener: () => undefined, + removeListener: () => undefined, + dispatchEvent: () => false, + }; + let matches = false; + window.matchMedia = (query) => + query === mediaQueryList.media ? mediaQueryList : originalMatchMedia(query); + + const ClientPwaStatus = () => {useIsPwa() ? 'pwa' : 'browser'}; + const markup = renderToString(); + const container = document.createElement('div'); + container.innerHTML = markup; + document.body.append(container); + let root: Root | null = null; + act(() => { + root = hydrateRoot(container, ); + }); + expect(container.textContent).toBe('browser'); + + act(() => { + matches = true; + listeners.forEach((callback) => { + if ('function' === typeof callback) { + callback(new Event('change')); + } else { + callback.handleEvent(new Event('change')); + } + }); + }); + expect(container.textContent).toBe('pwa'); + + act(() => root?.unmount()); + expect(listeners.size).toBe(0); + window.matchMedia = originalMatchMedia; + container.remove(); + }); +}); From a79f4d8ea7e376c2ffa94edec2b2670323cfaa7b Mon Sep 17 00:00:00 2001 From: krokosik Date: Wed, 14 Oct 2026 23:16:31 +0200 Subject: [PATCH 13/59] Fix currency conversion compiler issues --- src/components/Expense/ConvertibleBalance.tsx | 2 +- ...encyConversion.compilerRegression.test.tsx | 157 ++++++++++++++++++ src/components/Friend/CurrencyConversion.tsx | 70 +++++--- 3 files changed, 204 insertions(+), 25 deletions(-) create mode 100644 src/components/Friend/CurrencyConversion.compilerRegression.test.tsx diff --git a/src/components/Expense/ConvertibleBalance.tsx b/src/components/Expense/ConvertibleBalance.tsx index c3c518bb5..868870f55 100644 --- a/src/components/Expense/ConvertibleBalance.tsx +++ b/src/components/Expense/ConvertibleBalance.tsx @@ -90,7 +90,7 @@ export const ConvertibleBalance: React.FC = ({ } }, [clearPreference, entityId, sessionPreference]); - const currentDate = useMemo(() => new Date(), []); + const [currentDate] = useState(() => new Date()); const ratesQuery = api.expense.getBatchCurrencyRates.useQuery( { diff --git a/src/components/Friend/CurrencyConversion.compilerRegression.test.tsx b/src/components/Friend/CurrencyConversion.compilerRegression.test.tsx new file mode 100644 index 000000000..d5079be00 --- /dev/null +++ b/src/components/Friend/CurrencyConversion.compilerRegression.test.tsx @@ -0,0 +1,157 @@ +/** @jest-environment jsdom */ + +import { fireEvent, render, screen } from '@testing-library/react'; +import React from 'react'; + +let queryResult: { isPending: boolean; data?: { rate: number } } = { isPending: true }; +const setCurrency = jest.fn(); +const onSubmit = jest.fn(); +const mockToUIString = (value: bigint) => (Number(value) / 100).toFixed(2); +const mockToSafeBigInt = (value: string) => BigInt(Math.round(Number(value) * 100)); + +jest.mock('~/hooks/useTranslationWithUtils', () => ({ + useTranslationWithUtils: () => ({ + t: (key: string) => key, + getCurrencyHelpersCached: (currency: string) => ({ + toUIString: mockToUIString, + toSafeBigInt: mockToSafeBigInt, + currency, + }), + }), +})); + +jest.mock('~/utils/api', () => ({ + api: { expense: { getCurrencyRate: { useQuery: () => queryResult } } }, +})); + +jest.mock('~/store/addStore', () => ({ + useAddExpenseStore: (selector: (state: unknown) => unknown) => + selector({ currency: 'EUR', actions: { setCurrency } }), +})); + +jest.mock('../ui/drawer', () => ({ + AppDrawer: ({ + children, + trigger, + actionOnClick, + }: React.PropsWithChildren<{ + trigger: React.ReactNode; + actionOnClick: () => void; + }>) => ( +
+ {trigger} + {children} + +
+ ), +})); + +jest.mock('../ui/currency-input', () => ({ + CurrencyInput: ({ + 'aria-label': label, + strValue, + onValueChange, + disabled, + }: { + 'aria-label': string; + strValue: string; + onValueChange: (value: { strValue: string; bigIntValue?: bigint }) => void; + disabled?: boolean; + }) => ( + + onValueChange({ + strValue: event.target.value, + bigIntValue: BigInt(Math.round(Number(event.target.value) * 100)), + }) + } + /> + ), +})); + +jest.mock('../AddExpense/CurrencyPicker', () => ({ + CurrencyPicker: ({ onCurrencyPick }: { onCurrencyPick: (value: string) => void }) => ( + + ), +})); + +jest.mock('../AddExpense/DateSelector', () => ({ DateSelector: () => null })); + +import { CurrencyConversion } from './CurrencyConversion'; + +const setup = (props: Partial> = {}) => + render( + + + , + ); + +describe('CurrencyConversion compiler state regression', () => { + beforeEach(() => { + queryResult = { isPending: false, data: { rate: 1.5 } }; + setCurrency.mockClear(); + onSubmit.mockClear(); + }); + + it('lets a changed asynchronous quote replace a previously edited rate', () => { + const view = setup(); + const rate = screen.getByRole('spinbutton', { name: 'currency_conversion.rate' }); + + fireEvent.change(rate, { target: { value: '2.5' } }); + expect(rate).toHaveValue(2.5); + + queryResult = { isPending: false, data: { rate: 1.75 } }; + view.rerender( + + + , + ); + + expect(rate).toHaveValue(1.75); + }); + + it('keeps an editing rate on the first render while the query is pending', () => { + queryResult = { isPending: true }; + setup({ editingRate: 1.25 }); + expect(screen.getByRole('spinbutton', { name: 'currency_conversion.rate' })).toHaveValue(1.25); + }); + + it('rounds a target edit through the source amount and recalculates for rate, currency, and prop changes', () => { + queryResult = { isPending: false, data: { rate: 2 } }; + const view = setup(); + + const target = screen.getByRole('textbox', { + name: 'currency_conversion.converted_amount_aria_label', + }); + fireEvent.change(target, { target: { value: '123.45' } }); + expect(target).toHaveValue('123.44'); + + const rate = screen.getByRole('spinbutton', { name: 'currency_conversion.rate' }); + fireEvent.change(rate, { target: { value: '3' } }); + expect(target).toHaveValue('185.16'); + + fireEvent.click(screen.getByRole('button', { name: 'Choose GBP' })); + expect(target).toHaveValue('0.00'); + queryResult = { isPending: false, data: { rate: 1.5 } }; + view.rerender( + + + , + ); + expect(target).toHaveValue('92.58'); + + const source = screen.getByRole('textbox', { name: 'currency_conversion.amount_aria_label' }); + fireEvent.change(source, { target: { value: '50.00' } }); + expect(target).toHaveValue('75.00'); + + view.rerender( + + + , + ); + expect(source).toHaveValue('200.00'); + }); +}); diff --git a/src/components/Friend/CurrencyConversion.tsx b/src/components/Friend/CurrencyConversion.tsx index 0b4e0503e..2b5194359 100644 --- a/src/components/Friend/CurrencyConversion.tsx +++ b/src/components/Friend/CurrencyConversion.tsx @@ -1,4 +1,4 @@ -import React, { type ReactNode, useCallback, useEffect, useMemo, useState } from 'react'; +import React, { type ReactNode, useCallback, useMemo, useState } from 'react'; import { useTranslationWithUtils } from '~/hooks/useTranslationWithUtils'; import { api } from '~/utils/api'; import { MAX_RATE_PRECISION, currencyConversion, getRatePrecision } from '~/utils/numbers'; @@ -31,13 +31,19 @@ export const CurrencyConversion: React.FC<{ const { toUIString, toSafeBigInt } = getCurrencyHelpersCached(currency); - const [amountStr, setAmountStr] = useState(''); - const [rate, setRate] = useState(''); - const [targetAmountStr, setTargetAmountStr] = useState(''); + const [amountStr, setAmountStr] = useState(() => toUIString(amount, false, true)); + const [rate, setRate] = useState(() => + editingRate ? editingRate.toFixed(getRatePrecision(editingRate)) : '', + ); const preferredCurrency = useAddExpenseStore((state) => state.currency); const { setCurrency } = useAddExpenseStore((state) => state.actions); - const [targetCurrency, setTargetCurrency] = useState(preferredCurrency); - const [rateDate, setRateDate] = useState(new Date()); + const [targetCurrency, setTargetCurrency] = useState(() => + editingTargetCurrency && isCurrencyCode(editingTargetCurrency) + ? editingTargetCurrency + : preferredCurrency, + ); + const [rateDate, setRateDate] = useState(() => new Date()); + const [dateDisabledAfter] = useState(() => new Date()); const getCurrencyRate = api.expense.getCurrencyRate.useQuery( { from: currency, to: targetCurrency, date: rateDate }, { enabled: currency !== targetCurrency }, @@ -45,14 +51,21 @@ export const CurrencyConversion: React.FC<{ const { toUIString: toUITargetString } = getCurrencyHelpersCached(targetCurrency); - useEffect(() => { - if (getCurrencyRate.isPending) { - setRate(''); - setTargetAmountStr(''); - } - }, [getCurrencyRate.isPending]); - - useEffect(() => { + const [previousInputs, setPreviousInputs] = useState({ + amount, + editingRate, + editingTargetCurrency, + currency, + toUIString, + }); + if ( + previousInputs.amount !== amount || + previousInputs.editingRate !== editingRate || + previousInputs.editingTargetCurrency !== editingTargetCurrency || + previousInputs.currency !== currency || + previousInputs.toUIString !== toUIString + ) { + setPreviousInputs({ amount, editingRate, editingTargetCurrency, currency, toUIString }); setAmountStr(toUIString(amount, false, true)); if (editingRate) { const precision = getRatePrecision(editingRate); @@ -63,30 +76,39 @@ export const CurrencyConversion: React.FC<{ if (editingTargetCurrency && isCurrencyCode(editingTargetCurrency)) { setTargetCurrency(editingTargetCurrency); } - }, [amount, editingRate, editingTargetCurrency, toUIString]); + } - useEffect(() => { + const [previousPending, setPreviousPending] = useState(getCurrencyRate.isPending); + if (previousPending !== getCurrencyRate.isPending) { + setPreviousPending(getCurrencyRate.isPending); + if (getCurrencyRate.isPending) { + setRate(''); + } + } + + const [previousRateData, setPreviousRateData] = useState(undefined); + if (previousRateData !== getCurrencyRate.data) { + setPreviousRateData(getCurrencyRate.data); if (getCurrencyRate.data?.rate) { const precision = getRatePrecision(getCurrencyRate.data.rate); setRate(getCurrencyRate.data.rate.toFixed(precision)); } - }, [getCurrencyRate.data]); + } - const dateDisabled = useMemo(() => ({ after: new Date() }), []); + const dateDisabled = useMemo(() => ({ after: dateDisabledAfter }), [dateDisabledAfter]); - useEffect(() => { + const targetAmountStr = useMemo(() => { if (!isCurrencyCode(currency) || !isCurrencyCode(targetCurrency)) { - return; + return ''; } - const targetAmount = currencyConversion({ from: currency, to: targetCurrency, amount: toSafeBigInt(amountStr), rate: Number(rate), }); - setTargetAmountStr(toUITargetString(targetAmount, false, true)); - }, [amountStr, rate, toSafeBigInt, toUITargetString, currency, targetCurrency]); + return toUITargetString(targetAmount, false, true); + }, [currency, targetCurrency, toSafeBigInt, amountStr, rate, toUITargetString]); const onUpdateAmount = useCallback( ({ strValue }: { strValue?: string; bigIntValue?: bigint }) => { @@ -129,7 +151,7 @@ export const CurrencyConversion: React.FC<{ const onChangeTargetAmount = useCallback( ({ bigIntValue }: { strValue?: string; bigIntValue?: bigint }) => { - if (bigIntValue && isCurrencyCode(currency)) { + if (bigIntValue !== undefined && isCurrencyCode(currency)) { const amount = currencyConversion({ amount: bigIntValue ?? 0n, rate: 1 / Number(rate), From 5fa2df048c29638482b2645dccd6a693bd258627 Mon Sep 17 00:00:00 2001 From: krokosik Date: Wed, 14 Oct 2026 23:17:01 +0200 Subject: [PATCH 14/59] Simplify language selector handlers --- src/components/LanguageSelector.test.tsx | 78 ++++++++++++++++++++++++ src/components/LanguageSelector.tsx | 46 ++++++-------- tests/e2e/locale.spec.ts | 22 +++++++ 3 files changed, 117 insertions(+), 29 deletions(-) create mode 100644 src/components/LanguageSelector.test.tsx create mode 100644 tests/e2e/locale.spec.ts diff --git a/src/components/LanguageSelector.test.tsx b/src/components/LanguageSelector.test.tsx new file mode 100644 index 000000000..bc3d93eff --- /dev/null +++ b/src/components/LanguageSelector.test.tsx @@ -0,0 +1,78 @@ +/** @jest-environment jsdom */ + +import { fireEvent, screen, waitFor } from '@testing-library/react'; +import React from 'react'; + +import { renderWithProviders } from '~/tests/helpers/render'; +import { createMockRouter } from '~/tests/helpers/router'; +import { LanguageSelector } from './LanguageSelector'; + +const mockI18n = { language: 'en' }; + +jest.mock('next-i18next', () => ({ + useTranslation: () => ({ i18n: mockI18n }), +})); + +describe('LanguageSelector', () => { + const originalFetch = global.fetch; + + beforeEach(() => { + mockI18n.language = 'en'; + global.fetch = jest.fn().mockResolvedValue({ ok: true }) as typeof fetch; + }); + + afterEach(() => { + global.fetch = originalFetch; + jest.restoreAllMocks(); + }); + + it('toggles the language list and closes it from the backdrop', () => { + renderWithProviders(); + + const toggle = screen.getByRole('button', { name: /english/i }); + fireEvent.click(toggle); + expect(screen.getByRole('button', { name: 'Français' })).toBeInTheDocument(); + + fireEvent.click(document.querySelector('.fixed.inset-0')!); + expect(screen.queryByRole('button', { name: 'Français' })).not.toBeInTheDocument(); + }); + + it('marks the selected language and persists and routes to a chosen language', async () => { + const router = createMockRouter({ asPath: '/groups/42?tab=expenses' }); + renderWithProviders(, { router }); + fireEvent.click(screen.getByRole('button', { name: /english/i })); + + const selectedLanguage = screen.getByText('✓').closest('button'); + expect(selectedLanguage).not.toBeNull(); + expect(selectedLanguage).toHaveClass('bg-blue-50'); + expect(selectedLanguage).toHaveTextContent('✓'); + + fireEvent.click(screen.getByRole('button', { name: 'Français' })); + await waitFor(() => + expect(router.push).toHaveBeenCalledWith( + '/groups/42?tab=expenses', + '/groups/42?tab=expenses', + { + locale: 'fr', + scroll: false, + }, + ), + ); + expect(global.fetch).toHaveBeenCalledWith('/api/locale?locale=fr'); + await waitFor(() => + expect(screen.queryByRole('button', { name: 'Français' })).not.toBeInTheDocument(), + ); + }); + + it('keeps the list open when navigation fails', async () => { + const router = createMockRouter(); + jest.mocked(router.push).mockRejectedValueOnce(new Error('navigation failed')); + const consoleError = jest.spyOn(console, 'error').mockImplementation(() => undefined); + renderWithProviders(, { router }); + fireEvent.click(screen.getByRole('button', { name: /english/i })); + fireEvent.click(screen.getByRole('button', { name: 'Français' })); + + expect(await screen.findByRole('button', { name: 'Français' })).toBeInTheDocument(); + expect(consoleError).toHaveBeenCalledWith('Error changing language:', expect.any(Error)); + }); +}); diff --git a/src/components/LanguageSelector.tsx b/src/components/LanguageSelector.tsx index 20d9b1dfa..64fce0a0d 100644 --- a/src/components/LanguageSelector.tsx +++ b/src/components/LanguageSelector.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useMemo, useState } from 'react'; +import React, { useState } from 'react'; import { useTranslation } from 'next-i18next'; import { useRouter } from 'next/router'; import { Globe } from 'lucide-react'; @@ -15,42 +15,30 @@ export const LanguageSelector: React.FC = ({ className = const router = useRouter(); const [isOpen, setIsOpen] = useState(false); - const supportedLanguages = useMemo(getSupportedLanguages, []); + const supportedLanguages = getSupportedLanguages(); const currentLanguage = supportedLanguages.find((lang) => lang.code === i18n.language) ?? supportedLanguages[0]; - const handleLanguageChange = useCallback( - async (languageCode: string) => { - try { - await fetch(`/api/locale?locale=${languageCode}`); - await router.push(router.asPath, router.asPath, { - locale: languageCode, - scroll: false, - }); - setIsOpen(false); - } catch (error) { - console.error('Error changing language:', error); - } - }, - [router], - ); - - const handleToggleOpen = useCallback(() => setIsOpen((prev) => !prev), []); - - const handleClose = useCallback(() => setIsOpen(false), []); - - const getLanguageClickHandler = useCallback( - (languageCode: string) => () => handleLanguageChange(languageCode), - [handleLanguageChange], - ); + const handleLanguageChange = async (languageCode: string) => { + try { + await fetch(`/api/locale?locale=${languageCode}`); + await router.push(router.asPath, router.asPath, { + locale: languageCode, + scroll: false, + }); + setIsOpen(false); + } catch (error) { + console.error('Error changing language:', error); + } + }; return (