From 07010a37d351115b8d4c95bc42e6e9a21e17cae5 Mon Sep 17 00:00:00 2001 From: Simon Relet Date: Wed, 15 Apr 2026 00:32:43 +0200 Subject: [PATCH 01/16] docs: Refine guidelines for markdown link reference placement Updates the documentation formatting rules to allow link references to be defined directly below target headings in long planning documents, rather than exclusively at the bottom of the file. --- .github/instructions/docs-writing.instructions.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/instructions/docs-writing.instructions.md b/.github/instructions/docs-writing.instructions.md index f01be488..2ac1d1ff 100644 --- a/.github/instructions/docs-writing.instructions.md +++ b/.github/instructions/docs-writing.instructions.md @@ -19,9 +19,11 @@ applyTo: "**/*.md" ## Markdown formatting - Wrap file paths and script names in backticks in prose and markdown text. -- Prefer reference-style markdown links, with link references defined at the - bottom of the file. -- Sort link references alphabetically by reference name. +- Prefer reference-style markdown links. +- By default, define link references at the bottom of the file. +- For internal section links in long planning documents, define each reference + directly below the target heading. +- Sort link references alphabetically by reference name within each block. ## Documentation changes From 65f890974194fa1dd743c4243ab20b1720f95d10 Mon Sep 17 00:00:00 2001 From: Simon Relet Date: Wed, 15 Apr 2026 00:34:41 +0200 Subject: [PATCH 02/16] docs: Add progress tracking to dependency upgrade plan Relocates the dependency upgrade plan to the plans directory and introduces a progress table to monitor each phase. Internal link references have also been added below headings to improve navigation, following recently updated documentation guidelines. --- .../dependencies-upgrade.md} | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) rename docs/{dependencies-upgrade-plan.md => plans/dependencies-upgrade.md} (93%) diff --git a/docs/dependencies-upgrade-plan.md b/docs/plans/dependencies-upgrade.md similarity index 93% rename from docs/dependencies-upgrade-plan.md rename to docs/plans/dependencies-upgrade.md index c6ddc727..5c39e0ee 100644 --- a/docs/dependencies-upgrade-plan.md +++ b/docs/plans/dependencies-upgrade.md @@ -33,6 +33,23 @@ workspace (`eslint-plugin-jsx-a11y`, `eslint-plugin-react`, ESLint upgrade is not included in this plan and should be reconsidered once those plugins ship compatible releases. +## Progress + +| Phase | Status | +| --------------------------------------------- | ----------- | +| [Phase 1: TypeScript][phase-1] | Not started | +| [Phase 2: Vite][phase-2] | Not started | +| [Phase 3: Tailwind CSS 4][phase-3] | Not started | +| [Phase 4: Express v5][phase-4] | Not started | +| [Phase 5: Zod v4][phase-5] | Not started | +| [Phase 6: React Email + Resend][phase-6] | Not started | +| [Phase 7: React Router v7 migration][phase-7] | Not started | +| [Phase 8: React 19][phase-8] | Not started | +| [Standalone upgrades][standalone-upgrades] | Complete | + +Update each status as work starts and completes. Keep implementation details in +the related phase section below. + ## Dependencies to upgrade | Package | Current | Target | Note | @@ -107,6 +124,8 @@ leverage the workspace package injection approach from [002][002]. ### Phase 1 — TypeScript (workspace-wide) +[phase-1]: #phase-1--typescript-workspace-wide + TypeScript has no peer dependency constraints with the other upgrades. It can be upgraded once for the whole workspace without risk. @@ -114,6 +133,8 @@ upgraded once for the whole workspace without risk. ### Phase 2 — Vite (workspace-wide) +[phase-2]: #phase-2--vite-workspace-wide + Vite has no peer dependency constraints with the other upgrades. It can be upgraded once for the whole workspace. `vite-tsconfig-paths` must be upgraded at the same time because its current version range does not cover Vite 6. @@ -123,6 +144,8 @@ the same time because its current version range does not cover Vite 6. ### Phase 3 — Tailwind CSS 4 (per app) +[phase-3]: #phase-3--tailwind-css-4-per-app + Tailwind CSS v4 introduces a fundamentally different configuration model. `prettier-plugin-tailwindcss` must be upgraded at the same time to match the new Tailwind CSS version. @@ -145,6 +168,8 @@ Affected libs: ### Phase 4 — Express v5 (apps/show) +[phase-4]: #phase-4--express-v5-appsshow + Express v5 is used only in `apps/show` for the custom server. It is independent of the Remix or React upgrades and can be applied on its own. @@ -154,6 +179,8 @@ Affected apps: ### Phase 5 — Zod v4 (workspace-wide) +[phase-5]: #phase-5--zod-v4-workspace-wide + Zod v4 has breaking API changes. `zod-form-data` must be upgraded together to its v3 release, which is the first version to officially support Zod 4. `@conform-to/zod` v1.x already declares compatibility with both Zod 3 and Zod 4, @@ -172,6 +199,8 @@ Affected libs: ### Phase 6 — React Email + Resend (apps/show) +[phase-6]: #phase-6--react-email--resend-appsshow + `@react-email/components` and `@react-email/render` have both had major releases. `resend` declares a peer dependency on `@react-email/render` and must be upgraded together. All three packages are compatible with React 18, so this @@ -183,6 +212,8 @@ Affected apps: ### Phase 7 — React Router v7 / Remix migration (per app) +[phase-7]: #phase-7--react-router-v7--remix-migration-per-app + React Router v7 is the successor to Remix v2. The `@remix-run/*` packages are replaced by a single `react-router` package. React Router v7 supports both React 18 and React 19, so this migration can happen independently of the React @@ -215,6 +246,8 @@ Affected libs: ### Phase 8 — React 19 (per app) +[phase-8]: #phase-8--react-19-per-app + React 19 should be the last upgrade because it has the widest ecosystem impact. React Router v7 must already be in place before upgrading React, as `@remix-run/react` v2 is not compatible with React 19. @@ -249,6 +282,8 @@ Affected libs: ### Standalone upgrades (any time) +[standalone-upgrades]: #standalone-upgrades-any-time + The following packages have no peer dependency constraints on any of the packages above. They can be upgraded independently at any time, in any order. From 78711b18804c1292a2623efd7e2220fee9634bfe Mon Sep 17 00:00:00 2001 From: Simon Relet Date: Wed, 15 Apr 2026 20:35:09 +0200 Subject: [PATCH 03/16] chore: Upgrade typescript to 5.7 and harden compiler strictness Upgrades TypeScript to 5.7.3 and enables several strict compiler options in the base configuration, including noFallthroughCasesInSwitch, noImplicitReturns, noUncheckedSideEffectImports, and useUnknownInCatchVariables. --- docs/plans/dependencies-upgrade.md | 2 +- libs/dev-tools/tsconfig.base.json | 6 +- pnpm-lock.yaml | 474 ++++++++++++++--------------- pnpm-workspace.yaml | 2 +- 4 files changed, 244 insertions(+), 240 deletions(-) diff --git a/docs/plans/dependencies-upgrade.md b/docs/plans/dependencies-upgrade.md index 5c39e0ee..7773b546 100644 --- a/docs/plans/dependencies-upgrade.md +++ b/docs/plans/dependencies-upgrade.md @@ -37,7 +37,7 @@ those plugins ship compatible releases. | Phase | Status | | --------------------------------------------- | ----------- | -| [Phase 1: TypeScript][phase-1] | Not started | +| [Phase 1: TypeScript][phase-1] | Complete | | [Phase 2: Vite][phase-2] | Not started | | [Phase 3: Tailwind CSS 4][phase-3] | Not started | | [Phase 4: Express v5][phase-4] | Not started | diff --git a/libs/dev-tools/tsconfig.base.json b/libs/dev-tools/tsconfig.base.json index c0ecbe6f..4a1121fc 100644 --- a/libs/dev-tools/tsconfig.base.json +++ b/libs/dev-tools/tsconfig.base.json @@ -19,10 +19,14 @@ // Strictness. "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, "noImplicitOverride": true, + "noImplicitReturns": true, "noUncheckedIndexedAccess": true, + "noUncheckedSideEffectImports": true, "noUnusedLocals": true, "noUnusedParameters": true, - "strict": true + "strict": true, + "useUnknownInCatchVariables": true } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6f60ea55..3194b2b6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -347,8 +347,8 @@ catalogs: specifier: ^4.3.1 version: 4.18.3 typescript: - specifier: ~5.4.5 - version: 5.4.5 + specifier: ~5.7.0 + version: 5.7.3 typescript-eslint: specifier: ^8.58.1 version: 8.58.1 @@ -371,7 +371,7 @@ importers: devDependencies: '@animeaux/dev-tools': specifier: workspace:* - version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(jiti@2.6.1)(typescript@5.4.5) + version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(jiti@2.6.1)(typescript@5.7.3) eslint: specifier: 'catalog:' version: 9.39.3(jiti@2.6.1) @@ -386,34 +386,34 @@ importers: version: 3.8.2 typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.7.3 apps/admin: dependencies: '@animeaux/core': specifier: workspace:* - version: file:libs/core(react-dom@18.3.1(react@18.3.1))(typescript@5.4.5) + version: file:libs/core(react-dom@18.3.1(react@18.3.1))(typescript@5.7.3) '@animeaux/file-storage': specifier: workspace:* - version: file:libs/file-storage(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(typescript@5.4.5) + version: file:libs/file-storage(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(typescript@5.7.3) '@animeaux/form-data': specifier: workspace:* - version: file:libs/form-data(typescript@5.4.5) + version: file:libs/form-data(typescript@5.7.3) '@animeaux/password': specifier: workspace:* version: file:libs/password '@animeaux/prisma': specifier: workspace:* - version: file:libs/prisma(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + version: file:libs/prisma(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) '@animeaux/react-primitives': specifier: workspace:* version: file:libs/react-primitives(@types/react@18.3.3) '@animeaux/search-params-io': specifier: workspace:* - version: file:libs/search-params-io(react-dom@18.3.1(react@18.3.1))(typescript@5.4.5) + version: file:libs/search-params-io(react-dom@18.3.1(react@18.3.1))(typescript@5.7.3) '@animeaux/zod-utils': specifier: workspace:* - version: file:libs/zod-utils(typescript@5.4.5) + version: file:libs/zod-utils(typescript@5.7.3) '@conform-to/react': specifier: 'catalog:' version: 1.2.2(react@18.3.1) @@ -434,16 +434,16 @@ importers: version: 1.2.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@remix-run/node': specifier: 'catalog:' - version: 2.9.2(typescript@5.4.5) + version: 2.9.2(typescript@5.7.3) '@remix-run/react': specifier: 'catalog:' - version: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + version: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) '@remix-run/serve': specifier: 'catalog:' - version: 2.9.2(typescript@5.4.5) + version: 2.9.2(typescript@5.7.3) '@sentry/remix': specifier: 'catalog:' - version: 8.37.1(@opentelemetry/api@1.9.1)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.27.0)(@remix-run/node@2.9.2(typescript@5.4.5))(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5))(encoding@0.1.13)(react@18.3.1) + version: 8.37.1(@opentelemetry/api@1.9.1)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.27.0)(@remix-run/node@2.9.2(typescript@5.7.3))(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(encoding@0.1.13)(react@18.3.1) autosize: specifier: 'catalog:' version: 6.0.1 @@ -521,14 +521,14 @@ importers: version: 4.0.1 remix-utils: specifier: 'catalog:' - version: 7.6.0(@remix-run/node@2.9.2(typescript@5.4.5))(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5))(@remix-run/router@1.21.0)(react@18.3.1)(zod@3.23.8) + version: 7.6.0(@remix-run/node@2.9.2(typescript@5.7.3))(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/router@1.21.0)(react@18.3.1)(zod@3.23.8) tiny-invariant: specifier: 'catalog:' version: 1.3.3 devDependencies: '@animeaux/dev-tools': specifier: workspace:* - version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(jiti@2.6.1)(typescript@5.4.5) + version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(jiti@2.6.1)(typescript@5.7.3) '@animeaux/tailwind-animation': specifier: workspace:* version: file:libs/tailwind-animation @@ -537,7 +537,7 @@ importers: version: 10.4.0 '@remix-run/dev': specifier: 'catalog:' - version: 2.9.2(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5))(@remix-run/serve@2.9.2(typescript@5.4.5))(@types/node@22.8.7)(typescript@5.4.5)(vite@5.2.12(@types/node@22.8.7)) + version: 2.9.2(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/serve@2.9.2(typescript@5.7.3))(@types/node@22.8.7)(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)) '@tailwindcss/container-queries': specifier: 'catalog:' version: 0.1.1(tailwindcss@3.4.3) @@ -576,7 +576,7 @@ importers: version: 9.39.3(jiti@2.6.1) msw: specifier: 'catalog:' - version: 2.13.2(@types/node@22.8.7)(typescript@5.4.5) + version: 2.13.2(@types/node@22.8.7)(typescript@5.7.3) node-html-parser: specifier: 'catalog:' version: 7.1.0 @@ -600,37 +600,37 @@ importers: version: 4.18.3 typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.7.3 vite: specifier: 'catalog:' version: 5.2.12(@types/node@22.8.7) vite-tsconfig-paths: specifier: 'catalog:' - version: 4.3.2(typescript@5.4.5)(vite@5.2.12(@types/node@22.8.7)) + version: 4.3.2(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)) apps/show: dependencies: '@animeaux/core': specifier: workspace:* - version: file:libs/core(react-dom@18.3.1(react@18.3.1))(typescript@5.4.5) + version: file:libs/core(react-dom@18.3.1(react@18.3.1))(typescript@5.7.3) '@animeaux/file-storage': specifier: workspace:* - version: file:libs/file-storage(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(typescript@5.4.5) + version: file:libs/file-storage(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(typescript@5.7.3) '@animeaux/files-io': specifier: workspace:* version: file:libs/files-io '@animeaux/prisma': specifier: workspace:* - version: file:libs/prisma(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + version: file:libs/prisma(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) '@animeaux/react-primitives': specifier: workspace:* version: file:libs/react-primitives(@types/react@18.3.3) '@animeaux/search-params-io': specifier: workspace:* - version: file:libs/search-params-io(react-dom@18.3.1(react@18.3.1))(typescript@5.4.5) + version: file:libs/search-params-io(react-dom@18.3.1(react@18.3.1))(typescript@5.7.3) '@animeaux/zod-utils': specifier: workspace:* - version: file:libs/zod-utils(typescript@5.4.5) + version: file:libs/zod-utils(typescript@5.7.3) '@conform-to/react': specifier: 'catalog:' version: 1.2.2(react@18.3.1) @@ -666,16 +666,16 @@ importers: version: 1.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@remix-run/express': specifier: 'catalog:' - version: 2.9.2(express@4.18.2)(typescript@5.4.5) + version: 2.9.2(express@4.18.2)(typescript@5.7.3) '@remix-run/node': specifier: 'catalog:' - version: 2.9.2(typescript@5.4.5) + version: 2.9.2(typescript@5.7.3) '@remix-run/react': specifier: 'catalog:' - version: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + version: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) '@sentry/remix': specifier: 'catalog:' - version: 8.37.1(@opentelemetry/api@1.9.1)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.27.0)(@remix-run/node@2.9.2(typescript@5.4.5))(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5))(encoding@0.1.13)(react@18.3.1) + version: 8.37.1(@opentelemetry/api@1.9.1)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.27.0)(@remix-run/node@2.9.2(typescript@5.7.3))(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(encoding@0.1.13)(react@18.3.1) '@unpic/pixels': specifier: 'catalog:' version: 1.3.0 @@ -729,7 +729,7 @@ importers: version: 4.0.1 remix-utils: specifier: 'catalog:' - version: 7.6.0(@remix-run/node@2.9.2(typescript@5.4.5))(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5))(@remix-run/router@1.21.0)(react@18.3.1)(zod@3.23.8) + version: 7.6.0(@remix-run/node@2.9.2(typescript@5.7.3))(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/router@1.21.0)(react@18.3.1)(zod@3.23.8) resend: specifier: 'catalog:' version: 4.0.1-alpha.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -748,10 +748,10 @@ importers: devDependencies: '@animeaux/dev-tools': specifier: workspace:* - version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(jiti@2.6.1)(typescript@5.4.5) + version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(jiti@2.6.1)(typescript@5.7.3) '@remix-run/dev': specifier: 'catalog:' - version: 2.9.2(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5))(@remix-run/serve@2.9.2(typescript@5.4.5))(@types/node@22.8.7)(typescript@5.4.5)(vite@5.2.12(@types/node@22.8.7)) + version: 2.9.2(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/serve@2.9.2(typescript@5.7.3))(@types/node@22.8.7)(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)) '@types/compression': specifier: 'catalog:' version: 1.8.1 @@ -790,7 +790,7 @@ importers: version: 9.39.3(jiti@2.6.1) msw: specifier: 'catalog:' - version: 2.13.2(@types/node@22.8.7)(typescript@5.4.5) + version: 2.13.2(@types/node@22.8.7)(typescript@5.7.3) node-html-parser: specifier: 'catalog:' version: 7.1.0 @@ -811,34 +811,34 @@ importers: version: 4.18.3 typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.7.3 vite: specifier: 'catalog:' version: 5.2.12(@types/node@22.8.7) vite-tsconfig-paths: specifier: 'catalog:' - version: 4.3.2(typescript@5.4.5)(vite@5.2.12(@types/node@22.8.7)) + version: 4.3.2(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)) apps/website: dependencies: '@animeaux/core': specifier: workspace:* - version: file:libs/core(react-dom@18.3.1(react@18.3.1))(typescript@5.4.5) + version: file:libs/core(react-dom@18.3.1(react@18.3.1))(typescript@5.7.3) '@animeaux/prisma': specifier: workspace:* - version: file:libs/prisma(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + version: file:libs/prisma(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) '@animeaux/zod-utils': specifier: workspace:* - version: file:libs/zod-utils(typescript@5.4.5) + version: file:libs/zod-utils(typescript@5.7.3) '@remix-run/node': specifier: 'catalog:' - version: 2.9.2(typescript@5.4.5) + version: 2.9.2(typescript@5.7.3) '@remix-run/react': specifier: 'catalog:' - version: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + version: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) '@remix-run/serve': specifier: 'catalog:' - version: 2.9.2(typescript@5.4.5) + version: 2.9.2(typescript@5.7.3) body-scroll-lock: specifier: 'catalog:' version: 3.1.5 @@ -877,7 +877,7 @@ importers: version: 4.0.1 remix-utils: specifier: 'catalog:' - version: 7.6.0(@remix-run/node@2.9.2(typescript@5.4.5))(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5))(@remix-run/router@1.21.0)(react@18.3.1)(zod@3.23.8) + version: 7.6.0(@remix-run/node@2.9.2(typescript@5.7.3))(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/router@1.21.0)(react@18.3.1)(zod@3.23.8) tiny-invariant: specifier: 'catalog:' version: 1.3.3 @@ -887,10 +887,10 @@ importers: devDependencies: '@animeaux/dev-tools': specifier: workspace:* - version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(jiti@2.6.1)(typescript@5.4.5) + version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(jiti@2.6.1)(typescript@5.7.3) '@remix-run/dev': specifier: 'catalog:' - version: 2.9.2(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5))(@remix-run/serve@2.9.2(typescript@5.4.5))(@types/node@22.8.7)(typescript@5.4.5)(vite@5.2.12(@types/node@22.8.7)) + version: 2.9.2(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/serve@2.9.2(typescript@5.7.3))(@types/node@22.8.7)(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)) '@types/body-scroll-lock': specifier: 'catalog:' version: 3.1.2 @@ -923,7 +923,7 @@ importers: version: 9.39.3(jiti@2.6.1) msw: specifier: 'catalog:' - version: 2.13.2(@types/node@22.8.7)(typescript@5.4.5) + version: 2.13.2(@types/node@22.8.7)(typescript@5.7.3) node-html-parser: specifier: 'catalog:' version: 7.1.0 @@ -944,25 +944,25 @@ importers: version: 4.21.0 typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.7.3 vite: specifier: 'catalog:' version: 5.2.12(@types/node@22.8.7) vite-tsconfig-paths: specifier: 'catalog:' - version: 4.3.2(typescript@5.4.5)(vite@5.2.12(@types/node@22.8.7)) + version: 4.3.2(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)) libs/core: dependencies: '@animeaux/prisma': specifier: workspace:* - version: file:libs/prisma(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + version: file:libs/prisma(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) '@animeaux/search-params-io': specifier: workspace:* - version: file:libs/search-params-io(react-dom@18.3.1(react@18.3.1))(typescript@5.4.5) + version: file:libs/search-params-io(react-dom@18.3.1(react@18.3.1))(typescript@5.7.3) '@remix-run/react': specifier: 'catalog:' - version: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + version: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) es-toolkit: specifier: 'catalog:' version: 1.45.1 @@ -981,7 +981,7 @@ importers: devDependencies: '@animeaux/dev-tools': specifier: workspace:* - version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(jiti@2.6.1)(typescript@5.4.5) + version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(jiti@2.6.1)(typescript@5.7.3) '@types/luxon': specifier: 'catalog:' version: 3.7.1 @@ -1008,7 +1008,7 @@ importers: version: 1.8.16 typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.7.3 libs/dev-tools: dependencies: @@ -1020,7 +1020,7 @@ importers: version: 9.39.3(jiti@2.6.1) eslint-plugin-import-x: specifier: 'catalog:' - version: 4.16.2(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1)) + version: 4.16.2(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1)) eslint-plugin-jsx-a11y: specifier: 'catalog:' version: 6.10.2(eslint@9.39.3(jiti@2.6.1)) @@ -1035,7 +1035,7 @@ importers: version: 12.1.1(eslint@9.39.3(jiti@2.6.1)) eslint-plugin-unused-imports: specifier: 'catalog:' - version: 4.4.1(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1)) + version: 4.4.1(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1)) globals: specifier: 'catalog:' version: 15.15.0 @@ -1044,7 +1044,7 @@ importers: version: 3.8.2 typescript-eslint: specifier: 'catalog:' - version: 8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + version: 8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3) devDependencies: npm-run-all: specifier: 'catalog:' @@ -1058,10 +1058,10 @@ importers: dependencies: '@animeaux/core': specifier: workspace:* - version: file:libs/core(react-dom@18.3.1(react@18.3.1))(typescript@5.4.5) + version: file:libs/core(react-dom@18.3.1(react@18.3.1))(typescript@5.7.3) '@animeaux/zod-utils': specifier: workspace:* - version: file:libs/zod-utils(typescript@5.4.5) + version: file:libs/zod-utils(typescript@5.7.3) '@mjackson/form-data-parser': specifier: 'catalog:' version: 0.4.0 @@ -1085,13 +1085,13 @@ importers: version: 1.27.0 '@remix-run/node': specifier: 'catalog:' - version: 2.9.2(typescript@5.4.5) + version: 2.9.2(typescript@5.7.3) '@remix-run/react': specifier: 'catalog:' - version: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + version: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) '@sentry/remix': specifier: 'catalog:' - version: 8.37.1(@opentelemetry/api@1.9.1)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.27.0)(@remix-run/node@2.9.2(typescript@5.4.5))(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5))(encoding@0.1.13)(react@18.3.1) + version: 8.37.1(@opentelemetry/api@1.9.1)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.27.0)(@remix-run/node@2.9.2(typescript@5.7.3))(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(encoding@0.1.13)(react@18.3.1) googleapis: specifier: 'catalog:' version: 144.0.0(encoding@0.1.13) @@ -1101,7 +1101,7 @@ importers: devDependencies: '@animeaux/dev-tools': specifier: workspace:* - version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(jiti@2.6.1)(typescript@5.4.5) + version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(jiti@2.6.1)(typescript@5.7.3) '@types/node': specifier: 'catalog:' version: 22.8.7 @@ -1122,7 +1122,7 @@ importers: version: 1.8.16 typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.7.3 libs/files-io: dependencies: @@ -1132,7 +1132,7 @@ importers: devDependencies: '@animeaux/dev-tools': specifier: workspace:* - version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(jiti@2.6.1)(typescript@5.4.5) + version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(jiti@2.6.1)(typescript@5.7.3) chokidar-cli: specifier: 'catalog:' version: 3.0.0 @@ -1150,17 +1150,17 @@ importers: version: 1.8.16 typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.7.3 libs/form-data: dependencies: '@animeaux/zod-utils': specifier: workspace:* - version: file:libs/zod-utils(typescript@5.4.5) + version: file:libs/zod-utils(typescript@5.7.3) devDependencies: '@animeaux/dev-tools': specifier: workspace:* - version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(jiti@2.6.1)(typescript@5.4.5) + version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(jiti@2.6.1)(typescript@5.7.3) chokidar-cli: specifier: 'catalog:' version: 3.0.0 @@ -1178,7 +1178,7 @@ importers: version: 1.8.16 typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.7.3 libs/password: dependencies: @@ -1188,7 +1188,7 @@ importers: devDependencies: '@animeaux/dev-tools': specifier: workspace:* - version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(jiti@2.6.1)(typescript@5.4.5) + version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(jiti@2.6.1)(typescript@5.7.3) '@types/node': specifier: 'catalog:' version: 22.8.7 @@ -1209,7 +1209,7 @@ importers: version: 1.8.16 typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.7.3 libs/prisma: dependencies: @@ -1218,17 +1218,17 @@ importers: version: 7.5.0 '@prisma/client': specifier: 'catalog:' - version: 7.5.0(prisma@7.5.0(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5))(typescript@5.4.5) + version: 7.5.0(prisma@7.5.0(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(typescript@5.7.3) '@types/react': specifier: 'catalog:' version: 18.3.3 prisma: specifier: 'catalog:' - version: 7.5.0(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + version: 7.5.0(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) devDependencies: '@animeaux/dev-tools': specifier: workspace:* - version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(jiti@2.6.1)(typescript@5.4.5) + version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(jiti@2.6.1)(typescript@5.7.3) '@animeaux/password': specifier: workspace:* version: file:libs/password @@ -1288,7 +1288,7 @@ importers: version: 4.18.3 typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.7.3 libs/react-primitives: dependencies: @@ -1301,7 +1301,7 @@ importers: devDependencies: '@animeaux/dev-tools': specifier: workspace:* - version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(jiti@2.6.1)(typescript@5.4.5) + version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(jiti@2.6.1)(typescript@5.7.3) '@types/react': specifier: 'catalog:' version: 18.3.3 @@ -1322,13 +1322,13 @@ importers: version: 1.8.16 typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.7.3 libs/search-params-io: dependencies: '@remix-run/react': specifier: 'catalog:' - version: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + version: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) es-toolkit: specifier: 'catalog:' version: 1.45.1 @@ -1338,7 +1338,7 @@ importers: devDependencies: '@animeaux/dev-tools': specifier: workspace:* - version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(jiti@2.6.1)(typescript@5.4.5) + version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(jiti@2.6.1)(typescript@5.7.3) '@types/react': specifier: 'catalog:' version: 18.3.3 @@ -1359,7 +1359,7 @@ importers: version: 1.8.16 typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.7.3 libs/tailwind-animation: dependencies: @@ -1369,7 +1369,7 @@ importers: devDependencies: '@animeaux/dev-tools': specifier: workspace:* - version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(jiti@2.6.1)(typescript@5.4.5) + version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(jiti@2.6.1)(typescript@5.7.3) chokidar-cli: specifier: 'catalog:' version: 3.0.0 @@ -1387,7 +1387,7 @@ importers: version: 1.8.16 typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.7.3 libs/zod-utils: dependencies: @@ -1408,13 +1408,13 @@ importers: version: 1.27.0 '@remix-run/node': specifier: 'catalog:' - version: 2.9.2(typescript@5.4.5) + version: 2.9.2(typescript@5.7.3) '@remix-run/react': specifier: 'catalog:' - version: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + version: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) '@sentry/remix': specifier: 'catalog:' - version: 8.37.1(@opentelemetry/api@1.9.1)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.27.0)(@remix-run/node@2.9.2(typescript@5.4.5))(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5))(encoding@0.1.13)(react@18.3.1) + version: 8.37.1(@opentelemetry/api@1.9.1)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.27.0)(@remix-run/node@2.9.2(typescript@5.7.3))(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(encoding@0.1.13)(react@18.3.1) encoding: specifier: 'catalog:' version: 0.1.13 @@ -1436,7 +1436,7 @@ importers: devDependencies: '@animeaux/dev-tools': specifier: workspace:* - version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(jiti@2.6.1)(typescript@5.4.5) + version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(jiti@2.6.1)(typescript@5.7.3) '@types/luxon': specifier: 'catalog:' version: 3.7.1 @@ -1457,16 +1457,16 @@ importers: version: 1.8.16 typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.7.3 scripts: devDependencies: '@animeaux/core': specifier: workspace:* - version: file:libs/core(react-dom@18.3.1(react@18.3.1))(typescript@5.4.5) + version: file:libs/core(react-dom@18.3.1(react@18.3.1))(typescript@5.7.3) '@animeaux/dev-tools': specifier: workspace:* - version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(jiti@2.6.1)(typescript@5.4.5) + version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(jiti@2.6.1)(typescript@5.7.3) '@types/node': specifier: 'catalog:' version: 22.8.7 @@ -1496,7 +1496,7 @@ importers: version: 4.21.0 typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.7.3 packages: @@ -8590,8 +8590,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} engines: {node: '>=14.17'} hasBin: true @@ -9089,11 +9089,11 @@ snapshots: '@jridgewell/gen-mapping': 0.1.1 '@jridgewell/trace-mapping': 0.3.25 - '@animeaux/core@file:libs/core(react-dom@18.3.1(react@18.3.1))(typescript@5.4.5)': + '@animeaux/core@file:libs/core(react-dom@18.3.1(react@18.3.1))(typescript@5.7.3)': dependencies: - '@animeaux/prisma': file:libs/prisma(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) - '@animeaux/search-params-io': file:libs/search-params-io(react-dom@18.3.1(react@18.3.1))(typescript@5.4.5) - '@remix-run/react': 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + '@animeaux/prisma': file:libs/prisma(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) + '@animeaux/search-params-io': file:libs/search-params-io(react-dom@18.3.1(react@18.3.1))(typescript@5.7.3) + '@remix-run/react': 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) es-toolkit: 1.45.1 luxon: 3.7.2 react: 18.3.1 @@ -9106,19 +9106,19 @@ snapshots: - react-dom - typescript - '@animeaux/dev-tools@file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(jiti@2.6.1)(typescript@5.4.5)': + '@animeaux/dev-tools@file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(jiti@2.6.1)(typescript@5.7.3)': dependencies: '@total-typescript/ts-reset': 0.6.1 eslint: 9.39.3(jiti@2.6.1) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.3(jiti@2.6.1)) eslint-plugin-react: 7.37.5(eslint@9.39.3(jiti@2.6.1)) eslint-plugin-react-hooks: 5.2.0(eslint@9.39.3(jiti@2.6.1)) eslint-plugin-simple-import-sort: 12.1.1(eslint@9.39.3(jiti@2.6.1)) - eslint-plugin-unused-imports: 4.4.1(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1)) + eslint-plugin-unused-imports: 4.4.1(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1)) globals: 15.15.0 prettier: 3.8.2 - typescript-eslint: 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + typescript-eslint: 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3) optionalDependencies: prettier-plugin-tailwindcss: 0.6.1(prettier@3.8.2) transitivePeerDependencies: @@ -9144,10 +9144,10 @@ snapshots: - supports-color - typescript - '@animeaux/file-storage@file:libs/file-storage(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(typescript@5.4.5)': + '@animeaux/file-storage@file:libs/file-storage(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(typescript@5.7.3)': dependencies: - '@animeaux/core': file:libs/core(react-dom@18.3.1(react@18.3.1))(typescript@5.4.5) - '@animeaux/zod-utils': file:libs/zod-utils(typescript@5.4.5) + '@animeaux/core': file:libs/core(react-dom@18.3.1(react@18.3.1))(typescript@5.7.3) + '@animeaux/zod-utils': file:libs/zod-utils(typescript@5.7.3) '@mjackson/form-data-parser': 0.4.0 '@mjackson/lazy-file': 3.2.0 '@opentelemetry/api': 1.9.0 @@ -9155,9 +9155,9 @@ snapshots: '@opentelemetry/instrumentation': 0.54.2(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 1.27.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.27.0 - '@remix-run/node': 2.9.2(typescript@5.4.5) - '@remix-run/react': 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) - '@sentry/remix': 8.37.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.27.0)(@remix-run/node@2.9.2(typescript@5.4.5))(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5))(encoding@0.1.13)(react@18.3.1) + '@remix-run/node': 2.9.2(typescript@5.7.3) + '@remix-run/react': 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) + '@sentry/remix': 8.37.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.27.0)(@remix-run/node@2.9.2(typescript@5.7.3))(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(encoding@0.1.13)(react@18.3.1) googleapis: 144.0.0(encoding@0.1.13) react: 18.3.1 transitivePeerDependencies: @@ -9173,9 +9173,9 @@ snapshots: dependencies: tiny-invariant: 1.3.3 - '@animeaux/form-data@file:libs/form-data(typescript@5.4.5)': + '@animeaux/form-data@file:libs/form-data(typescript@5.7.3)': dependencies: - '@animeaux/zod-utils': file:libs/zod-utils(typescript@5.4.5) + '@animeaux/zod-utils': file:libs/zod-utils(typescript@5.7.3) transitivePeerDependencies: - supports-color - typescript @@ -9184,12 +9184,12 @@ snapshots: dependencies: tiny-invariant: 1.3.3 - '@animeaux/prisma@file:libs/prisma(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5)': + '@animeaux/prisma@file:libs/prisma(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3)': dependencies: '@prisma/adapter-pg': 7.5.0 - '@prisma/client': 7.5.0(prisma@7.5.0(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5))(typescript@5.4.5) + '@prisma/client': 7.5.0(prisma@7.5.0(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(typescript@5.7.3) '@types/react': 18.3.3 - prisma: 7.5.0(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + prisma: 7.5.0(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) transitivePeerDependencies: - better-sqlite3 - magicast @@ -9205,9 +9205,9 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@animeaux/search-params-io@file:libs/search-params-io(react-dom@18.3.1(react@18.3.1))(typescript@5.4.5)': + '@animeaux/search-params-io@file:libs/search-params-io(react-dom@18.3.1(react@18.3.1))(typescript@5.7.3)': dependencies: - '@remix-run/react': 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + '@remix-run/react': 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) es-toolkit: 1.45.1 react: 18.3.1 transitivePeerDependencies: @@ -9220,16 +9220,16 @@ snapshots: transitivePeerDependencies: - ts-node - '@animeaux/zod-utils@file:libs/zod-utils(typescript@5.4.5)': + '@animeaux/zod-utils@file:libs/zod-utils(typescript@5.7.3)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.54.2(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 1.27.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.27.0 - '@remix-run/node': 2.9.2(typescript@5.4.5) - '@remix-run/react': 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) - '@sentry/remix': 8.37.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.27.0)(@remix-run/node@2.9.2(typescript@5.4.5))(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5))(encoding@0.1.13)(react@18.3.1) + '@remix-run/node': 2.9.2(typescript@5.7.3) + '@remix-run/react': 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) + '@sentry/remix': 8.37.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.27.0)(@remix-run/node@2.9.2(typescript@5.7.3))(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(encoding@0.1.13)(react@18.3.1) encoding: 0.1.13 luxon: 3.7.2 react: 18.3.1 @@ -10556,12 +10556,12 @@ snapshots: '@prisma/client-runtime-utils@7.5.0': {} - '@prisma/client@7.5.0(prisma@7.5.0(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5))(typescript@5.4.5)': + '@prisma/client@7.5.0(prisma@7.5.0(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(typescript@5.7.3)': dependencies: '@prisma/client-runtime-utils': 7.5.0 optionalDependencies: - prisma: 7.5.0(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) - typescript: 5.4.5 + prisma: 7.5.0(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) + typescript: 5.7.3 '@prisma/config@7.5.0': dependencies: @@ -10576,7 +10576,7 @@ snapshots: '@prisma/debug@7.5.0': {} - '@prisma/dev@0.20.0(typescript@5.4.5)': + '@prisma/dev@0.20.0(typescript@5.7.3)': dependencies: '@electric-sql/pglite': 0.3.15 '@electric-sql/pglite-socket': 0.0.20(@electric-sql/pglite@0.3.15) @@ -10593,7 +10593,7 @@ snapshots: proper-lockfile: 4.1.2 remeda: 2.33.4 std-env: 3.10.0 - valibot: 1.2.0(typescript@5.4.5) + valibot: 1.2.0(typescript@5.7.3) zeptomatch: 2.1.0 transitivePeerDependencies: - typescript @@ -11145,7 +11145,7 @@ snapshots: dependencies: react: 18.3.1 - '@remix-run/dev@2.9.2(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5))(@remix-run/serve@2.9.2(typescript@5.4.5))(@types/node@22.8.7)(typescript@5.4.5)(vite@5.2.12(@types/node@22.8.7))': + '@remix-run/dev@2.9.2(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/serve@2.9.2(typescript@5.7.3))(@types/node@22.8.7)(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7))': dependencies: '@babel/core': 7.22.8 '@babel/generator': 7.23.6 @@ -11157,10 +11157,10 @@ snapshots: '@babel/types': 7.23.6 '@mdx-js/mdx': 2.3.0 '@npmcli/package-json': 4.0.1 - '@remix-run/node': 2.9.2(typescript@5.4.5) - '@remix-run/react': 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + '@remix-run/node': 2.9.2(typescript@5.7.3) + '@remix-run/react': 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) '@remix-run/router': 1.16.1 - '@remix-run/server-runtime': 2.9.2(typescript@5.4.5) + '@remix-run/server-runtime': 2.9.2(typescript@5.7.3) '@types/mdx': 2.0.10 '@vanilla-extract/integration': 6.2.1(@types/node@22.8.7) arg: 5.0.2 @@ -11202,8 +11202,8 @@ snapshots: tsconfig-paths: 4.1.2 ws: 7.5.9 optionalDependencies: - '@remix-run/serve': 2.9.2(typescript@5.4.5) - typescript: 5.4.5 + '@remix-run/serve': 2.9.2(typescript@5.7.3) + typescript: 5.7.3 vite: 5.2.12(@types/node@22.8.7) transitivePeerDependencies: - '@types/node' @@ -11218,16 +11218,16 @@ snapshots: - ts-node - utf-8-validate - '@remix-run/express@2.9.2(express@4.18.2)(typescript@5.4.5)': + '@remix-run/express@2.9.2(express@4.18.2)(typescript@5.7.3)': dependencies: - '@remix-run/node': 2.9.2(typescript@5.4.5) + '@remix-run/node': 2.9.2(typescript@5.7.3) express: 4.18.2 optionalDependencies: - typescript: 5.4.5 + typescript: 5.7.3 - '@remix-run/node@2.9.2(typescript@5.4.5)': + '@remix-run/node@2.9.2(typescript@5.7.3)': dependencies: - '@remix-run/server-runtime': 2.9.2(typescript@5.4.5) + '@remix-run/server-runtime': 2.9.2(typescript@5.7.3) '@remix-run/web-fetch': 4.4.2 '@web3-storage/multipart-parser': 1.0.0 cookie-signature: 1.2.2 @@ -11235,28 +11235,28 @@ snapshots: stream-slice: 0.1.2 undici: 6.18.2 optionalDependencies: - typescript: 5.4.5 + typescript: 5.7.3 - '@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5)': + '@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3)': dependencies: '@remix-run/router': 1.16.1 - '@remix-run/server-runtime': 2.9.2(typescript@5.4.5) + '@remix-run/server-runtime': 2.9.2(typescript@5.7.3) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-router: 6.23.1(react@18.3.1) react-router-dom: 6.23.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) turbo-stream: 2.1.0 optionalDependencies: - typescript: 5.4.5 + typescript: 5.7.3 '@remix-run/router@1.16.1': {} '@remix-run/router@1.21.0': {} - '@remix-run/serve@2.9.2(typescript@5.4.5)': + '@remix-run/serve@2.9.2(typescript@5.7.3)': dependencies: - '@remix-run/express': 2.9.2(express@4.18.2)(typescript@5.4.5) - '@remix-run/node': 2.9.2(typescript@5.4.5) + '@remix-run/express': 2.9.2(express@4.18.2)(typescript@5.7.3) + '@remix-run/node': 2.9.2(typescript@5.7.3) chokidar: 3.6.0 compression: 1.7.4 express: 4.18.2 @@ -11267,7 +11267,7 @@ snapshots: - supports-color - typescript - '@remix-run/server-runtime@2.9.2(typescript@5.4.5)': + '@remix-run/server-runtime@2.9.2(typescript@5.7.3)': dependencies: '@remix-run/router': 1.16.1 '@types/cookie': 0.6.0 @@ -11277,7 +11277,7 @@ snapshots: source-map: 0.7.4 turbo-stream: 2.1.0 optionalDependencies: - typescript: 5.4.5 + typescript: 5.7.3 '@remix-run/web-blob@3.1.0': dependencies: @@ -11512,10 +11512,10 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 18.3.1 - '@sentry/remix@8.37.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.27.0)(@remix-run/node@2.9.2(typescript@5.4.5))(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5))(encoding@0.1.13)(react@18.3.1)': + '@sentry/remix@8.37.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.27.0)(@remix-run/node@2.9.2(typescript@5.7.3))(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(encoding@0.1.13)(react@18.3.1)': dependencies: - '@remix-run/node': 2.9.2(typescript@5.4.5) - '@remix-run/react': 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + '@remix-run/node': 2.9.2(typescript@5.7.3) + '@remix-run/react': 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) '@remix-run/router': 1.21.0 '@sentry/cli': 2.38.2(encoding@0.1.13) '@sentry/core': 8.37.1 @@ -11537,10 +11537,10 @@ snapshots: - encoding - supports-color - '@sentry/remix@8.37.1(@opentelemetry/api@1.9.1)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.27.0)(@remix-run/node@2.9.2(typescript@5.4.5))(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5))(encoding@0.1.13)(react@18.3.1)': + '@sentry/remix@8.37.1(@opentelemetry/api@1.9.1)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.27.0)(@remix-run/node@2.9.2(typescript@5.7.3))(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(encoding@0.1.13)(react@18.3.1)': dependencies: - '@remix-run/node': 2.9.2(typescript@5.4.5) - '@remix-run/react': 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + '@remix-run/node': 2.9.2(typescript@5.7.3) + '@remix-run/react': 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) '@remix-run/router': 1.21.0 '@sentry/cli': 2.38.2(encoding@0.1.13) '@sentry/core': 8.37.1 @@ -11756,77 +11756,77 @@ snapshots: '@types/unist@3.0.2': {} - '@typescript-eslint/eslint-plugin@8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/parser': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3) '@typescript-eslint/scope-manager': 8.56.0 - '@typescript-eslint/type-utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) - '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/type-utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3) + '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.56.0 eslint: 9.39.3(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 2.4.0(typescript@5.7.3) + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/parser': 8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3) '@typescript-eslint/scope-manager': 8.58.1 - '@typescript-eslint/type-utils': 8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) - '@typescript-eslint/utils': 8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/type-utils': 8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.58.1 eslint: 9.39.3(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.5.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 2.5.0(typescript@5.7.3) + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5)': + '@typescript-eslint/parser@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3)': dependencies: '@typescript-eslint/scope-manager': 8.56.0 '@typescript-eslint/types': 8.56.0 - '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.56.0 debug: 4.4.3 eslint: 9.39.3(jiti@2.6.1) - typescript: 5.4.5 + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5)': + '@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3)': dependencies: '@typescript-eslint/scope-manager': 8.58.1 '@typescript-eslint/types': 8.58.1 - '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.58.1 debug: 4.4.3 eslint: 9.39.3(jiti@2.6.1) - typescript: 5.4.5 + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.56.0(typescript@5.4.5)': + '@typescript-eslint/project-service@8.56.0(typescript@5.7.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.4.5) + '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.7.3) '@typescript-eslint/types': 8.56.0 debug: 4.4.3 - typescript: 5.4.5 + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.58.1(typescript@5.4.5)': + '@typescript-eslint/project-service@8.58.1(typescript@5.7.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.58.1(typescript@5.4.5) + '@typescript-eslint/tsconfig-utils': 8.58.1(typescript@5.7.3) '@typescript-eslint/types': 8.58.1 debug: 4.4.3 - typescript: 5.4.5 + typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -11840,35 +11840,35 @@ snapshots: '@typescript-eslint/types': 8.58.1 '@typescript-eslint/visitor-keys': 8.58.1 - '@typescript-eslint/tsconfig-utils@8.56.0(typescript@5.4.5)': + '@typescript-eslint/tsconfig-utils@8.56.0(typescript@5.7.3)': dependencies: - typescript: 5.4.5 + typescript: 5.7.3 - '@typescript-eslint/tsconfig-utils@8.58.1(typescript@5.4.5)': + '@typescript-eslint/tsconfig-utils@8.58.1(typescript@5.7.3)': dependencies: - typescript: 5.4.5 + typescript: 5.7.3 - '@typescript-eslint/type-utils@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5)': + '@typescript-eslint/type-utils@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3)': dependencies: '@typescript-eslint/types': 8.56.0 - '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.4.5) - '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.7.3) + '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3) debug: 4.4.3 eslint: 9.39.3(jiti@2.6.1) - ts-api-utils: 2.4.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 2.4.0(typescript@5.7.3) + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5)': + '@typescript-eslint/type-utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3)': dependencies: '@typescript-eslint/types': 8.58.1 - '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.4.5) - '@typescript-eslint/utils': 8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.7.3) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3) debug: 4.4.3 eslint: 9.39.3(jiti@2.6.1) - ts-api-utils: 2.5.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 2.5.0(typescript@5.7.3) + typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -11876,55 +11876,55 @@ snapshots: '@typescript-eslint/types@8.58.1': {} - '@typescript-eslint/typescript-estree@8.56.0(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@8.56.0(typescript@5.7.3)': dependencies: - '@typescript-eslint/project-service': 8.56.0(typescript@5.4.5) - '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.4.5) + '@typescript-eslint/project-service': 8.56.0(typescript@5.7.3) + '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.7.3) '@typescript-eslint/types': 8.56.0 '@typescript-eslint/visitor-keys': 8.56.0 debug: 4.4.3 minimatch: 9.0.6 semver: 7.7.4 tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 2.4.0(typescript@5.7.3) + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.58.1(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@8.58.1(typescript@5.7.3)': dependencies: - '@typescript-eslint/project-service': 8.58.1(typescript@5.4.5) - '@typescript-eslint/tsconfig-utils': 8.58.1(typescript@5.4.5) + '@typescript-eslint/project-service': 8.58.1(typescript@5.7.3) + '@typescript-eslint/tsconfig-utils': 8.58.1(typescript@5.7.3) '@typescript-eslint/types': 8.58.1 '@typescript-eslint/visitor-keys': 8.58.1 debug: 4.4.3 minimatch: 10.2.5 semver: 7.7.4 tinyglobby: 0.2.15 - ts-api-utils: 2.5.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 2.5.0(typescript@5.7.3) + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5)': + '@typescript-eslint/utils@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.56.0 '@typescript-eslint/types': 8.56.0 - '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.7.3) eslint: 9.39.3(jiti@2.6.1) - typescript: 5.4.5 + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5)': + '@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.58.1 '@typescript-eslint/types': 8.58.1 - '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.7.3) eslint: 9.39.3(jiti@2.6.1) - typescript: 5.4.5 + typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -13306,7 +13306,7 @@ snapshots: optionalDependencies: unrs-resolver: 1.11.1 - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1)): dependencies: '@typescript-eslint/types': 8.56.0 comment-parser: 1.4.5 @@ -13319,11 +13319,11 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3) transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1)): + eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1)): dependencies: '@package-json/types': 0.0.12 '@typescript-eslint/types': 8.56.0 @@ -13337,7 +13337,7 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3) transitivePeerDependencies: - supports-color @@ -13390,11 +13390,11 @@ snapshots: dependencies: eslint: 9.39.3(jiti@2.6.1) - eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1)): + eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1)): dependencies: eslint: 9.39.3(jiti@2.6.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3) eslint-scope@8.4.0: dependencies: @@ -15555,7 +15555,7 @@ snapshots: ms@2.1.3: {} - msw@2.13.2(@types/node@22.8.7)(typescript@5.4.5): + msw@2.13.2(@types/node@22.8.7)(typescript@5.7.3): dependencies: '@inquirer/confirm': 5.1.21(@types/node@22.8.7) '@mswjs/interceptors': 0.41.3 @@ -15576,7 +15576,7 @@ snapshots: until-async: 3.0.2 yargs: 17.7.2 optionalDependencies: - typescript: 5.4.5 + typescript: 5.7.3 transitivePeerDependencies: - '@types/node' @@ -16305,16 +16305,16 @@ snapshots: dependencies: parse-ms: 2.1.0 - prisma@7.5.0(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5): + prisma@7.5.0(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3): dependencies: '@prisma/config': 7.5.0 - '@prisma/dev': 0.20.0(typescript@5.4.5) + '@prisma/dev': 0.20.0(typescript@5.7.3) '@prisma/engines': 7.5.0 '@prisma/studio-core': 0.21.1(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) mysql2: 3.15.3 postgres: 3.4.7 optionalDependencies: - typescript: 5.4.5 + typescript: 5.7.3 transitivePeerDependencies: - '@types/react' - magicast @@ -16688,12 +16688,12 @@ snapshots: remeda@2.33.4: {} - remix-utils@7.6.0(@remix-run/node@2.9.2(typescript@5.4.5))(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5))(@remix-run/router@1.21.0)(react@18.3.1)(zod@3.23.8): + remix-utils@7.6.0(@remix-run/node@2.9.2(typescript@5.7.3))(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/router@1.21.0)(react@18.3.1)(zod@3.23.8): dependencies: type-fest: 4.18.3 optionalDependencies: - '@remix-run/node': 2.9.2(typescript@5.4.5) - '@remix-run/react': 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + '@remix-run/node': 2.9.2(typescript@5.7.3) + '@remix-run/react': 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) '@remix-run/router': 1.21.0 react: 18.3.1 zod: 3.23.8 @@ -17319,13 +17319,13 @@ snapshots: trough@2.1.0: {} - ts-api-utils@2.4.0(typescript@5.4.5): + ts-api-utils@2.4.0(typescript@5.7.3): dependencies: - typescript: 5.4.5 + typescript: 5.7.3 - ts-api-utils@2.5.0(typescript@5.4.5): + ts-api-utils@2.5.0(typescript@5.7.3): dependencies: - typescript: 5.4.5 + typescript: 5.7.3 ts-interface-checker@0.1.13: {} @@ -17339,9 +17339,9 @@ snapshots: normalize-path: 3.0.0 plimit-lit: 1.6.1 - tsconfck@3.1.0(typescript@5.4.5): + tsconfck@3.1.0(typescript@5.7.3): optionalDependencies: - typescript: 5.4.5 + typescript: 5.7.3 tsconfig-paths@4.1.2: dependencies: @@ -17423,29 +17423,29 @@ snapshots: possible-typed-array-names: 1.0.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5): + typescript-eslint@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) - '@typescript-eslint/parser': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) - '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.4.5) - '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3) + '@typescript-eslint/parser': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.7.3) + '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3) eslint: 9.39.3(jiti@2.6.1) - typescript: 5.4.5 + typescript: 5.7.3 transitivePeerDependencies: - supports-color - typescript-eslint@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5): + typescript-eslint@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) - '@typescript-eslint/parser': 8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) - '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.4.5) - '@typescript-eslint/utils': 8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3) + '@typescript-eslint/parser': 8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.7.3) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3) eslint: 9.39.3(jiti@2.6.1) - typescript: 5.4.5 + typescript: 5.7.3 transitivePeerDependencies: - supports-color - typescript@5.4.5: {} + typescript@5.7.3: {} ufo@1.5.3: {} @@ -17648,9 +17648,9 @@ snapshots: kleur: 4.1.5 sade: 1.8.1 - valibot@1.2.0(typescript@5.4.5): + valibot@1.2.0(typescript@5.7.3): optionalDependencies: - typescript: 5.4.5 + typescript: 5.7.3 validate-npm-package-license@3.0.4: dependencies: @@ -17712,11 +17712,11 @@ snapshots: - supports-color - terser - vite-tsconfig-paths@4.3.2(typescript@5.4.5)(vite@5.2.12(@types/node@22.8.7)): + vite-tsconfig-paths@4.3.2(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)): dependencies: debug: 4.3.7 globrex: 0.1.2 - tsconfck: 3.1.0(typescript@5.4.5) + tsconfck: 3.1.0(typescript@5.7.3) optionalDependencies: vite: 5.2.12(@types/node@22.8.7) transitivePeerDependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 59c0c508..089f375c 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -143,7 +143,7 @@ catalog: tsc-alias: ^1.8.16 tsx: ^4.21.0 type-fest: ^4.3.1 - typescript: ~5.4.5 + typescript: ~5.7.0 typescript-eslint: ^8.58.1 vite: ^5.2.12 vite-tsconfig-paths: ^4.3.2 From c4b21ab1424951f8f95f5a927642c076f15c4a98 Mon Sep 17 00:00:00 2001 From: Simon Relet Date: Fri, 1 May 2026 01:21:37 +0200 Subject: [PATCH 04/16] chore: Migrate Copilot config to Claude Code Replace GitHub Copilot instructions and prompts with Claude Code equivalents: CLAUDE.md, slash commands, and editor hooks. --- .../commands}/assets/pull-request-template.md | 0 .claude/commands/open-pr.md | 24 +++++ .claude/commands/upgrade-deps.md | 36 +++++++ .claude/settings.json | 30 ++++++ .github/copilot-instructions.md | 16 --- .../instructions/architecture.instructions.md | 29 ------ .../code-comments.instructions.md | 14 --- .../dependency-upgrades.instructions.md | 34 ------- .../instructions/docs-writing.instructions.md | 32 ------ .../package-scripts.instructions.md | 43 -------- .../source-editing.instructions.md | 39 -------- .github/prompts/open-pr.prompt.md | 48 --------- .github/prompts/upgrade-deps.prompt.md | 59 ----------- .gitignore | 3 + CLAUDE.md | 98 +++++++++++++++++++ 15 files changed, 191 insertions(+), 314 deletions(-) rename {.github/prompts => .claude/commands}/assets/pull-request-template.md (100%) create mode 100644 .claude/commands/open-pr.md create mode 100644 .claude/commands/upgrade-deps.md create mode 100644 .claude/settings.json delete mode 100644 .github/copilot-instructions.md delete mode 100644 .github/instructions/architecture.instructions.md delete mode 100644 .github/instructions/code-comments.instructions.md delete mode 100644 .github/instructions/dependency-upgrades.instructions.md delete mode 100644 .github/instructions/docs-writing.instructions.md delete mode 100644 .github/instructions/package-scripts.instructions.md delete mode 100644 .github/instructions/source-editing.instructions.md delete mode 100644 .github/prompts/open-pr.prompt.md delete mode 100644 .github/prompts/upgrade-deps.prompt.md create mode 100644 CLAUDE.md diff --git a/.github/prompts/assets/pull-request-template.md b/.claude/commands/assets/pull-request-template.md similarity index 100% rename from .github/prompts/assets/pull-request-template.md rename to .claude/commands/assets/pull-request-template.md diff --git a/.claude/commands/open-pr.md b/.claude/commands/open-pr.md new file mode 100644 index 00000000..fdfd3daf --- /dev/null +++ b/.claude/commands/open-pr.md @@ -0,0 +1,24 @@ +Open a pull request from the current branch changes. + +$ARGUMENTS is an optional mode. Use `draft` to open a draft pull request. + +Workflow: + +1. Collect context from git: + - Branch name. + - Commits ahead of `dev`. + - Changed files. +2. Set base branch to `dev`. +3. Summarise what changed, why, context, risks, and manual testing evidence. +4. Produce a pull request body using this exact template and section order: + `.claude/commands/assets/pull-request-template.md` +5. If any section details are unknown, write "N/A". +6. Do not remove sections. +7. Ensure the branch is pushed to origin. +8. Decide draft mode from $ARGUMENTS: + - If `draft`, create a draft pull request. + - Otherwise, create a ready-for-review pull request. +9. Verify `gh` is installed and authenticated. +10. Open the pull request using `gh pr create` with explicit title and body, + always with `--base dev`. Use `--draft` only when mode is `draft`. +11. Return only the created pull request URL. diff --git a/.claude/commands/upgrade-deps.md b/.claude/commands/upgrade-deps.md new file mode 100644 index 00000000..42e1d489 --- /dev/null +++ b/.claude/commands/upgrade-deps.md @@ -0,0 +1,36 @@ +Upgrade the provided dependencies. + +$ARGUMENTS is a list of package names to upgrade, one per line or +comma-separated. + +Workflow: + +1. Read `pnpm-workspace.yaml`. +2. Run `pnpm -r outdated` and keep only selected packages. +3. For each selected package, fetch the changelog or release notes and extract + only relevant changes between current and target versions. +4. Present the changelog summary in this exact format for every package: + + ``` + Package: ( -> ) + + - Changelog: + - Relevant fixes: + - + - Relevant features: + - + - Breaking changes: + - | + - Risk level: - + - Recommendation: + ``` + + If an item has no fixes or features, write `- `. + +5. Ask for explicit confirmation before any file edit. +6. Only if confirmed, update `pnpm-workspace.yaml` for the selected packages and + run `pnpm i`. +7. Report bumped packages, changed files, and install warnings. + +Follow the dependency upgrade guidelines in +`.github/instructions/dependency-upgrades.instructions.md`. diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 00000000..07cd31a1 --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,30 @@ +{ + "hooks": { + "PostToolUse": [ + { + "matcher": "Edit|Write", + "hooks": [ + { + "type": "command", + "command": "prettier --write --log-level silent \"$CLAUDE_TOOL_INPUT_FILE_PATH\" 2>/dev/null || true" + }, + { + "type": "command", + "command": "if [[ \"$CLAUDE_TOOL_INPUT_FILE_PATH\" =~ \\.(js|ts|tsx)$ ]]; then eslint --cache --cache-location ./node_modules/.cache/eslint --fix --max-warnings 0 \"$CLAUDE_TOOL_INPUT_FILE_PATH\" 2>/dev/null || true; fi" + } + ] + } + ], + "PreToolUse": [ + { + "matcher": "Edit|Write", + "hooks": [ + { + "type": "command", + "command": "if [[ \"$CLAUDE_TOOL_INPUT_FILE_PATH\" == *\".env\"* ]]; then echo 'Editing .env files is not allowed. Ask the user to update environment variables manually.' && exit 2; fi" + } + ] + } + ] + } +} diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md deleted file mode 100644 index 404d0001..00000000 --- a/.github/copilot-instructions.md +++ /dev/null @@ -1,16 +0,0 @@ -# Project guidelines - -## General writing style - -- Prefer British English spelling in prose (for example: "synchronise", - "synchronisation"). -- Keep language simple, direct, and concise. - -## Pull request drafting - -- When asked to open, prepare, or draft a pull request, always use the template - in `.github/prompts/assets/pull-request-template.md`. -- Keep section headings and order exactly as written in that template. -- If information is missing, write "N/A" rather than removing sections. -- This template is for agent output only and is not a mandatory developer - template. diff --git a/.github/instructions/architecture.instructions.md b/.github/instructions/architecture.instructions.md deleted file mode 100644 index b613a731..00000000 --- a/.github/instructions/architecture.instructions.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -description: - "Use when editing app or lib source files. Covers the main workspace structure - and package responsibilities." -applyTo: "apps/**, libs/**, scripts/**" ---- - -# Architecture guidelines - -## Workspace structure - -- `apps/*` contains deployable applications. -- `libs/*` contains shared workspace packages used by the apps. -- `scripts/` contains workspace-level tooling. - -## Package responsibilities - -- Keep app-specific entry points, routes, and composition inside `apps/*`. -- Keep reusable domain logic, UI primitives, and shared utilities inside - `libs/*`. -- `libs/prisma` owns Prisma-related code and generated client integration for - the workspace. - -## Build model - -- Shared libs are generally consumed from their built output. -- Changes to shared libs may require synchronisation into injected workspace - packages. -- See: docs/decisions/002-workspace-package-injection.md diff --git a/.github/instructions/code-comments.instructions.md b/.github/instructions/code-comments.instructions.md deleted file mode 100644 index f81e8589..00000000 --- a/.github/instructions/code-comments.instructions.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -description: - "Use when creating or editing source code files. Covers the required style for - See reference lines in code comments." -applyTo: "**/*.{js,ts,tsx}, **/Dockerfile, **/*.yml" ---- - -# Code comment guidelines - -## See reference lines - -- For "See" reference lines in code comments, use this style: - - `See: path/to/file` -- In "See" reference lines, do not wrap the path in backticks. diff --git a/.github/instructions/dependency-upgrades.instructions.md b/.github/instructions/dependency-upgrades.instructions.md deleted file mode 100644 index 955fef98..00000000 --- a/.github/instructions/dependency-upgrades.instructions.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -description: - "Use when editing dependencies, pnpm-workspace.yaml, package.json dependency - fields. Covers workspace package injection and safe step-by-step dependency - changes." -applyTo: "pnpm-workspace.yaml, **/package.json" ---- - -# Dependency upgrade guidelines - -## Workspace dependency model - -- Workspace packages are injected, not symlinked. -- Keep `injectWorkspacePackages: true`. -- Keep `dedupeInjectedDeps: false`. -- Keep `syncInjectedDepsAfterScripts` pointing to `sync-workspace`. -- See: docs/decisions/002-workspace-package-injection.md - -## Package manifest rules - -- Use `workspace:*` for internal dependencies. -- Use `catalog:` for third-party dependencies managed at workspace level. -- For libs that are consumed from `build/`, keep the `files` field aligned with - the published build output. -- For injected libs, keep the `sync-workspace` hook and the scripts that trigger - it. - -## Upgrade strategy - -- Prefer step-by-step dependency changes over broad workspace-wide upgrades, - unless the upgrade is a patch release or a clearly simple minor release. -- Keep peer dependency changes scoped and explicit. -- When changing shared lib dependencies, consider the consuming apps before - aligning versions. diff --git a/.github/instructions/docs-writing.instructions.md b/.github/instructions/docs-writing.instructions.md deleted file mode 100644 index 2ac1d1ff..00000000 --- a/.github/instructions/docs-writing.instructions.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -description: - "Use when creating or editing documentation and markdown files. Covers heading - case, prose style, shorthand policy, and markdown formatting conventions." -applyTo: "**/*.md" ---- - -# Documentation writing guidelines - -## Writing style - -- Use sentence case for document and section headings. - -## Naming and shorthand - -- Avoid shortened words in prose when a clear full word is available. -- Allowed shorthand in prose: "apps" and "libs". - -## Markdown formatting - -- Wrap file paths and script names in backticks in prose and markdown text. -- Prefer reference-style markdown links. -- By default, define link references at the bottom of the file. -- For internal section links in long planning documents, define each reference - directly below the target heading. -- Sort link references alphabetically by reference name within each block. - -## Documentation changes - -- When updating ADRs or docs, preserve existing meaning and improve clarity. -- Prefer fluid paragraphs over fragmented bullet points unless a list improves - readability. diff --git a/.github/instructions/package-scripts.instructions.md b/.github/instructions/package-scripts.instructions.md deleted file mode 100644 index 5bf4bfa3..00000000 --- a/.github/instructions/package-scripts.instructions.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -description: - "Use when creating or editing package.json scripts. Covers the script naming - conventions shared by apps, libs, and workspace packages." -applyTo: "**/package.json" ---- - -# Package script guidelines - -## Script naming - -- Keep the existing script prefixes and meanings. -- Use `build` for the production build entry point. -- Use `build:*` for build subtasks. -- Use `prebuild` for cleanup or generation that must happen before `build`. -- Use `dev` for the long-running local workflow. -- Use `dev:*` for long-running subtasks started by `dev`. -- Use `generate` for one-off asset or code generation. -- Use `generate:*` for generation subtasks. -- Use `clean` to remove generated outputs. -- Use `lint` for read-only validation checks. -- Use `lint-fix` for safe automatic fixes. -- Use `start` for the production runtime entry point. -- Use `docker-build` and `docker-start` for local container workflows when - needed. - -## Script composition - -- Prefer `run-s` for sequential orchestration and `run-p` for parallel - orchestration. -- When a script runs multiple subtasks, keep `--print-label` so output stays - readable. -- For long-running parallel `dev` or `generate` workflows, keep - `--continue-on-error` unless a task must fail fast. - -## Workspace injection hooks - -- For libs that publish only `build/`, keep `postbuild` calling - `pnpm sync-workspace`. -- For watch mode, use `dev:sync-workspace` to watch `build/` and trigger - `sync-workspace`. -- Keep `sync-workspace` as the dedicated hook script used by - `pnpm-workspace.yaml`. diff --git a/.github/instructions/source-editing.instructions.md b/.github/instructions/source-editing.instructions.md deleted file mode 100644 index c0b3b6d1..00000000 --- a/.github/instructions/source-editing.instructions.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -description: - "Use when creating or editing source code files. Covers common-sense editing - constraints, safe defaults, and refactor expectations for this workspace." -applyTo: "**/*.{js,ts,tsx}, **/Dockerfile, **/*.yml" ---- - -# Source editing guidelines - -## General approach - -- Prefer small, focused changes that solve the root cause. -- Preserve existing behaviour unless the task explicitly asks for a behaviour - change. -- Preserve public APIs and script names unless the task requires changing them. - -## Opportunistic cleanups - -- Opportunistic cleanups are allowed. -- Keep them small, local, and low risk. -- Limit them to the code you are already touching or to directly related dead - code. -- Do not mix broad refactors with functional changes unless the task asks for - both. - -## Generated outputs - -- Do not edit generated outputs by hand. -- Treat `build/`, `public/build/`, and `src/generated/` as generated unless the - task is specifically about generation. -- Prefer changing the source, generator, or script that produces generated - files. - -## Shared code - -- When a change affects multiple apps, prefer fixing the shared lib instead of - duplicating changes in each app. -- Keep app-specific composition inside `apps/*` and reusable logic inside - `libs/*`. diff --git a/.github/prompts/open-pr.prompt.md b/.github/prompts/open-pr.prompt.md deleted file mode 100644 index e8cf7666..00000000 --- a/.github/prompts/open-pr.prompt.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -name: open-pr -description: Open a pull request using the stable agent template -agent: agent -model: GPT-5.3-Codex -tools: - - execute/runInTerminal -argument-hint: Optional mode, use `draft` to open a draft pull request ---- - -Open a pull request from the current branch changes. - -Input: - -- ${input:mode:Optional mode. Use `draft` for a draft pull request} - -Workflow: - -1. Collect context from git: - - Branch name. - - Commits ahead of `dev`. - - Changed files. -2. Set base branch to `dev`. -3. Summarise what changed, why, context, risks, and manual testing evidence. -4. Produce a pull request body using this exact template and section order: - `.github/prompts/assets/pull-request-template.md` -5. If any section details are unknown, write "N/A". -6. Do not remove sections. -7. Ensure the branch is pushed to origin. -8. Decide draft mode from input: - - If `mode` is `draft`, create a draft pull request. - - If `mode` is missing or any other value, create a ready-for-review pull - request. -9. Open the pull request with GitHub CLI using the generated title and body. -10. Return only the created pull request URL. - -Command requirements: - -1. Verify `gh` is installed and authenticated before creating the pull request. -2. Create the pull request using `gh pr create` with explicit title and body. -3. Always use `--base dev`. -4. Use `--draft` only when `mode` is `draft`. - -Output format: - -```md -PR URL: -``` diff --git a/.github/prompts/upgrade-deps.prompt.md b/.github/prompts/upgrade-deps.prompt.md deleted file mode 100644 index b72f2c20..00000000 --- a/.github/prompts/upgrade-deps.prompt.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -name: upgrade-deps -description: - Upgrade selected dependencies after changelog review and confirmation -agent: agent -model: GPT-5.3-Codex -tools: - - web/fetch - - execute/runInTerminal - - edit/editFiles -argument-hint: List packages to upgrade ---- - -Upgrade the provided dependencies. - -Input: - -- ${input:packagesToUpgrade:Package names, one per line or comma-separated} - -Workflow: - -1. Read [`pnpm-workspace.yaml`][pnpm-workspace]. -2. Run `pnpm -r outdated` and keep only selected packages. -3. For each selected package, fetch changelog or release notes with - #tool:web/fetch and extract only relevant changes between current and target - versions. -4. Present the changelog summary in this exact format for every package: - - ```md - Package: ( -> ) - - - Changelog: - - Relevant fixes: - - - - - - Relevant features: - - - - - - Breaking changes: - - | - - Risk level: - - - Recommendation: - ``` - - If an item has no fixes or features, write `- `. - -5. Ask for explicit confirmation before any file edit, for example: "Proceed - with these version bumps?" -6. Only if confirmed, update [`pnpm-workspace.yaml`][pnpm-workspace] for the - selected packages and run `pnpm i`. -7. Report bumped packages, changed files, and install warnings. - -Reference: - -- [Dependency upgrade guidelines][dependency-upgrade-guidelines] - -[dependency-upgrade-guidelines]: - ../instructions/dependency-upgrades.instructions.md -[pnpm-workspace]: ../../pnpm-workspace.yaml diff --git a/.gitignore b/.gitignore index 8bf7e5db..67132b6f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# Claude Code worktrees created for agentic tasks. +/.claude/worktrees/ + # Environment variable files with local overrides. /.env*.local diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..6fa9ee7f --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,98 @@ +# Project guidelines + +## General writing style + +- Prefer British English spelling in prose (for example: "synchronise", + "synchronisation"). +- Keep language simple, direct, and concise. + +## Commit messages + +Follow `docs/commit-message-guidelines.md` for all commits. + +Agents must always include a `body`. + +## Pull requests + +When asked to open, prepare, or draft a pull request, use `/open-pr`. + +## Workspace structure + +- `apps/*` — deployable applications. +- `libs/*` — shared workspace packages used by the apps. +- `scripts/` — workspace-level tooling. + +Keep app-specific entry points, routes, and composition inside `apps/*`. Keep +reusable domain logic, UI primitives, and shared utilities inside `libs/*`. +`libs/prisma` owns Prisma-related code and generated client integration for the +workspace. + +Shared libs are consumed from their built output. Changes to shared libs may +require synchronisation into injected workspace packages. + +See: docs/decisions/002-workspace-package-injection.md + +## Source editing + +- Prefer small, focused changes that solve the root cause. +- Preserve existing behaviour unless the task explicitly asks for a behaviour + change. +- Preserve public APIs and script names unless the task requires changing them. +- Do not edit generated outputs by hand. Treat `build/`, `public/build/`, and + `src/generated/` as generated unless the task is specifically about + generation. +- When a change affects multiple apps, prefer fixing the shared lib instead of + duplicating changes in each app. +- Opportunistic cleanups are allowed. Keep them small, local, and low risk. + Limit them to the code you are already touching or to directly related dead + code. Do not mix broad refactors with functional changes unless the task asks + for both. + +## Code comments + +For "See" reference lines in code comments, use this style: + +- `See: path/to/file` + +Do not wrap the path in backticks. + +## Package scripts + +- Use `build` for the production build entry point, `build:*` for subtasks, + `prebuild` for pre-build cleanup or generation. +- Use `dev` for the long-running local workflow, `dev:*` for subtasks. +- Use `generate` / `generate:*` for one-off asset or code generation. +- Use `clean` to remove generated outputs. +- Use `lint` for read-only validation, `lint-fix` for safe automatic fixes. +- Use `start` for the production runtime entry point. +- Prefer `run-s` for sequential orchestration and `run-p` for parallel + orchestration. Keep `--print-label` when running multiple subtasks. +- For libs that publish only `build/`, keep `postbuild` calling + `pnpm sync-workspace`. For watch mode, use `dev:sync-workspace`. + +## Dependency upgrades + +- Use `workspace:*` for internal dependencies. +- Use `catalog:` for third-party dependencies managed at workspace level. +- Keep `injectWorkspacePackages: true`, `dedupeInjectedDeps: false`, and + `syncInjectedDepsAfterScripts` pointing to `sync-workspace`. +- Prefer step-by-step dependency changes over broad workspace-wide upgrades, + unless the upgrade is a patch or a clearly simple minor release. +- When changing shared lib dependencies, consider the consuming apps before + aligning versions. + +See: docs/decisions/002-workspace-package-injection.md + +## Documentation + +- Use sentence case for document and section headings. +- Avoid shortened words in prose when a clear full word is available. Allowed + shorthand: "apps" and "libs". +- Wrap file paths and script names in backticks in prose and markdown text. +- Prefer reference-style markdown links. Define link references at the bottom of + the file, sorted alphabetically by reference name. +- For internal section links in long planning documents, define each reference + directly below the target heading. +- When updating ADRs or docs, preserve existing meaning and improve clarity. +- Prefer fluid paragraphs over fragmented bullet points unless a list improves + readability. From c8635cbd19a91aaf5339bef501906f1232b1ba8d Mon Sep 17 00:00:00 2001 From: Simon Relet Date: Fri, 1 May 2026 10:31:31 +0200 Subject: [PATCH 05/16] chore: Fix Claude Code editor hooks Run Prettier and ESLint from the package directory rather than the workspace root, so each tool picks up the package-level config and respects the workspace ESLint ignore pattern. --- .claude/settings.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.claude/settings.json b/.claude/settings.json index 07cd31a1..4ef867c8 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -6,11 +6,11 @@ "hooks": [ { "type": "command", - "command": "prettier --write --log-level silent \"$CLAUDE_TOOL_INPUT_FILE_PATH\" 2>/dev/null || true" + "command": "dir=\"$(dirname \"$CLAUDE_TOOL_INPUT_FILE_PATH\")\"; while [[ ! -f \"$dir/package.json\" ]] && [[ \"$dir\" != \"/\" ]]; do dir=\"$(dirname \"$dir\")\"; done; [[ -f \"$dir/package.json\" ]] && cd \"$dir\" && pnpm exec prettier --write --log-level warn \"$CLAUDE_TOOL_INPUT_FILE_PATH\"" }, { "type": "command", - "command": "if [[ \"$CLAUDE_TOOL_INPUT_FILE_PATH\" =~ \\.(js|ts|tsx)$ ]]; then eslint --cache --cache-location ./node_modules/.cache/eslint --fix --max-warnings 0 \"$CLAUDE_TOOL_INPUT_FILE_PATH\" 2>/dev/null || true; fi" + "command": "if [[ \"$CLAUDE_TOOL_INPUT_FILE_PATH\" =~ \\.(js|ts|tsx)$ ]]; then dir=\"$(dirname \"$CLAUDE_TOOL_INPUT_FILE_PATH\")\"; while [[ ! -f \"$dir/package.json\" ]] && [[ \"$dir\" != \"/\" ]]; do dir=\"$(dirname \"$dir\")\"; done; [[ -f \"$dir/package.json\" ]] && cd \"$dir\" && pnpm exec eslint --cache --cache-location ./node_modules/.cache/eslint --fix --max-warnings 0 \"$CLAUDE_TOOL_INPUT_FILE_PATH\"; fi" } ] } From acf967f2bb8cb5cecc5fb2e8a21d2288f4d573c6 Mon Sep 17 00:00:00 2001 From: Simon Relet Date: Fri, 17 Apr 2026 00:05:27 +0200 Subject: [PATCH 06/16] docs: update dependency upgrade plan to include interim Remix version Updates the upgrade roadmap to include Remix v2.17.4 as an interim step. This version is required to unlock Vite 6 compatibility before the final migration to React Router v7. Reorders the upgrade phases to reflect this new dependency path. --- docs/plans/dependencies-upgrade.md | 104 +++++++++++++++++------------ 1 file changed, 60 insertions(+), 44 deletions(-) diff --git a/docs/plans/dependencies-upgrade.md b/docs/plans/dependencies-upgrade.md index 7773b546..7a600450 100644 --- a/docs/plans/dependencies-upgrade.md +++ b/docs/plans/dependencies-upgrade.md @@ -15,11 +15,12 @@ The upgrades are: - **Express** `^4.x` has been superseded by Express 5. - **Zod** `^3.x` has been superseded by Zod 4. - **React Email + Resend** have each had major releases. -- **Remix v2** (`@remix-run/*` `~2.9.2`) has been rebranded and merged into - **React Router v7** (`react-router` `^7.0.0`). The dedicated Sentry package - for React Router v7 is `@sentry/react-router`, which already ships - **OpenTelemetry** core v2, so the OpenTelemetry upgrade is folded into this - phase. +- **Remix v2** (`@remix-run/*` `~2.9.2`) should first be upgraded to **v2.17.4** + so it can work with both Vite 5 and Vite 6 (`@remix-run/dev 2.17.4` peers + `vite ^5.1.0 || ^6.0.0`), then migrated to **React Router v7** (`react-router` + `^7.0.0`). The dedicated Sentry package for React Router v7 is + `@sentry/react-router`, which ships OpenTelemetry core v2 as a dependency, so + the OpenTelemetry upgrade is folded into that phase. - **React** `^18.x` has been superseded by React 19. - Several standalone packages have also had major releases that can be applied at any time. @@ -38,13 +39,14 @@ those plugins ship compatible releases. | Phase | Status | | --------------------------------------------- | ----------- | | [Phase 1: TypeScript][phase-1] | Complete | -| [Phase 2: Vite][phase-2] | Not started | -| [Phase 3: Tailwind CSS 4][phase-3] | Not started | -| [Phase 4: Express v5][phase-4] | Not started | -| [Phase 5: Zod v4][phase-5] | Not started | -| [Phase 6: React Email + Resend][phase-6] | Not started | -| [Phase 7: React Router v7 migration][phase-7] | Not started | -| [Phase 8: React 19][phase-8] | Not started | +| [Phase 2: Tailwind CSS 4][phase-2] | Not started | +| [Phase 3: Remix v2.17.4][phase-3] | Not started | +| [Phase 4: Vite 6][phase-4] | Not started | +| [Phase 5: Express v5][phase-5] | Not started | +| [Phase 6: Zod v4][phase-6] | Not started | +| [Phase 7: React Email + Resend][phase-7] | Not started | +| [Phase 8: React Router v7 migration][phase-8] | Not started | +| [Phase 9: React 19][phase-9] | Not started | | [Standalone upgrades][standalone-upgrades] | Complete | Update each status as work starts and completes. Keep implementation details in @@ -53,9 +55,9 @@ the related phase section below. ## Dependencies to upgrade | Package | Current | Target | Note | -| -------------------------------- | ---------------- | ------------------------------------- | ----------------------------------------------------------------------------------------------------- | +| -------------------------------- | ---------------- | ------------------------------------- | ----------------------------------------------------------------------------------------------------- | --- | ---------------------------------------------------- | | `typescript` | `~5.4.5` | `~5.7.0` | Several minor releases behind. | -| `vite` | `^5.2.12` | `^6.0.0` | Major release. | +| `vite` | `^5.2.12` | `^6.0.0` | Major release; requires Remix `@remix-run/dev` `~2.17.4` first. | | `vite-tsconfig-paths` | `^4.3.2` | `^6.0.0` | Upgrade together with Vite. | | `tailwindcss` | `^3.3.3` | `^4.0.0` | Major release; breaking config changes. | | `@tailwindcss/container-queries` | `^0.1.1` | _(remove)_ | Merged into Tailwind CSS 4 core. | @@ -69,11 +71,11 @@ the related phase section below. | `@react-email/render` | `^1.0.2` | `^2.0.0` | Major release; compatible with React 18. | | `resend` | `^4.0.1-alpha.0` | `^6.0.0` | Major release; upgrade together with `@react-email/render`. | | `react-router` | `^6.23.1` | `^7.0.0` | Major release; replaces `@remix-run/*`. | -| `@remix-run/dev` | `~2.9.2` | _(remove)_ | Replaced by `react-router` v7 tooling. | -| `@remix-run/express` | `~2.9.2` | _(remove)_ | Replaced by `react-router`. | -| `@remix-run/node` | `~2.9.2` | _(remove)_ | Replaced by `react-router`. | -| `@remix-run/react` | `~2.9.2` | _(remove)_ | Replaced by `react-router`. | -| `@remix-run/serve` | `~2.9.2` | _(remove)_ | Replaced by `react-router`. | +| `@remix-run/dev` | `~2.9.2` | `~2.17.4` (_then remove_) | Interim upgrade to unlock Vite 6 (`^5.1.0 | | ^6.0.0`), then remove during React Router migration. | +| `@remix-run/express` | `~2.9.2` | `~2.17.4` (_then remove_) | Interim upgrade first, then remove during React Router migration. | +| `@remix-run/node` | `~2.9.2` | `~2.17.4` (_then remove_) | Interim upgrade first, then remove during React Router migration. | +| `@remix-run/react` | `~2.9.2` | `~2.17.4` (_then remove_) | Interim upgrade first, then remove during React Router migration. | +| `@remix-run/serve` | `~2.9.2` | `~2.17.4` (_then remove_) | Interim upgrade first, then remove during React Router migration. | | `@sentry/remix` | `^8.37.1` | `@sentry/react-router ^10.0.0` | The dedicated Sentry package for React Router v7; upgrade together with `react-router`. | | `@opentelemetry/core` | `^1.27.0` | `^2.0.0` | Upgrade together with `@sentry/react-router`, which ships `@opentelemetry/core ^2.x` as a dependency. | | `@opentelemetry/sdk-trace-base` | `^1.27.0` | `^2.0.0` | Upgrade together with `@sentry/react-router`; v2 is compatible with `@opentelemetry/api` v1.9.x. | @@ -117,9 +119,9 @@ must be upgraded together or verified for compatibility. ## Upgrade order -The dependencies are grouped into eight phases plus a set of standalone upgrades +The dependencies are grouped into nine phases plus a set of standalone upgrades that can be applied at any time. Within each phase, dependencies have no -cross-constraints with each other. Phases 3, 7, and 8 must be applied per app to +cross-constraints with each other. Phases 2, 8, and 9 must be applied per app to leverage the workspace package injection approach from [002][002]. ### Phase 1 — TypeScript (workspace-wide) @@ -131,20 +133,9 @@ upgraded once for the whole workspace without risk. - `typescript`: `~5.4.5` → `~5.7.0` -### Phase 2 — Vite (workspace-wide) +### Phase 2 — Tailwind CSS 4 (per app) -[phase-2]: #phase-2--vite-workspace-wide - -Vite has no peer dependency constraints with the other upgrades. It can be -upgraded once for the whole workspace. `vite-tsconfig-paths` must be upgraded at -the same time because its current version range does not cover Vite 6. - -- `vite`: `^5.2.12` → `^6.0.0` -- `vite-tsconfig-paths`: `^4.3.2` → `^6.0.0` - -### Phase 3 — Tailwind CSS 4 (per app) - -[phase-3]: #phase-3--tailwind-css-4-per-app +[phase-2]: #phase-2--tailwind-css-4-per-app Tailwind CSS v4 introduces a fundamentally different configuration model. `prettier-plugin-tailwindcss` must be upgraded at the same time to match the new @@ -166,9 +157,34 @@ Affected libs: use a Tailwind CSS v3-specific option that must be updated for v4) - `libs/tailwind-animation` -### Phase 4 — Express v5 (apps/show) +### Phase 3 — Remix v2.17.4 (workspace-wide) + +[phase-3]: #phase-3--remix-v2174-workspace-wide + +Remix v2.9.2 blocks Vite 6 because `@remix-run/dev` peers `vite ^5.1.0`. +Upgrading to Remix v2.17.4 first removes that blocker because +`@remix-run/dev 2.17.4` peers `vite ^5.1.0 || ^6.0.0`. + +- `@remix-run/dev`: `~2.9.2` → `~2.17.4` +- `@remix-run/express`: `~2.9.2` → `~2.17.4` +- `@remix-run/node`: `~2.9.2` → `~2.17.4` +- `@remix-run/react`: `~2.9.2` → `~2.17.4` +- `@remix-run/serve`: `~2.9.2` → `~2.17.4` + +### Phase 4 — Vite 6 (workspace-wide) + +[phase-4]: #phase-4--vite-6-workspace-wide + +After Remix v2.17.4 is in place, Vite 6 can be upgraded once for the whole +workspace. `vite-tsconfig-paths` must be upgraded at the same time because its +current version range does not cover Vite 6. + +- `vite`: `^5.2.12` → `^6.0.0` +- `vite-tsconfig-paths`: `^4.3.2` → `^6.0.0` + +### Phase 5 — Express v5 (apps/show) -[phase-4]: #phase-4--express-v5-appsshow +[phase-5]: #phase-5--express-v5-appsshow Express v5 is used only in `apps/show` for the custom server. It is independent of the Remix or React upgrades and can be applied on its own. @@ -177,9 +193,9 @@ Affected apps: - `apps/show` -### Phase 5 — Zod v4 (workspace-wide) +### Phase 6 — Zod v4 (workspace-wide) -[phase-5]: #phase-5--zod-v4-workspace-wide +[phase-6]: #phase-6--zod-v4-workspace-wide Zod v4 has breaking API changes. `zod-form-data` must be upgraded together to its v3 release, which is the first version to officially support Zod 4. @@ -197,9 +213,9 @@ Affected libs: - `libs/form-data` - `libs/zod-utils` -### Phase 6 — React Email + Resend (apps/show) +### Phase 7 — React Email + Resend (apps/show) -[phase-6]: #phase-6--react-email--resend-appsshow +[phase-7]: #phase-7--react-email--resend-appsshow `@react-email/components` and `@react-email/render` have both had major releases. `resend` declares a peer dependency on `@react-email/render` and must @@ -210,9 +226,9 @@ Affected apps: - `apps/show` -### Phase 7 — React Router v7 / Remix migration (per app) +### Phase 8 — React Router v7 / Remix migration (per app) -[phase-7]: #phase-7--react-router-v7--remix-migration-per-app +[phase-8]: #phase-8--react-router-v7--remix-migration-per-app React Router v7 is the successor to Remix v2. The `@remix-run/*` packages are replaced by a single `react-router` package. React Router v7 supports both React @@ -244,9 +260,9 @@ Affected libs: - `libs/search-params-io` - `libs/zod-utils` -### Phase 8 — React 19 (per app) +### Phase 9 — React 19 (per app) -[phase-8]: #phase-8--react-19-per-app +[phase-9]: #phase-9--react-19-per-app React 19 should be the last upgrade because it has the widest ecosystem impact. React Router v7 must already be in place before upgrading React, as From 9f20516025084c1b449055678defbb850984853e Mon Sep 17 00:00:00 2001 From: Simon Relet Date: Thu, 23 Apr 2026 00:59:59 +0200 Subject: [PATCH 07/16] feat: Introduce tailwindcss-peekaboo library Adds a new library containing custom animation utilities built with Tailwind CSS v4. Updates the shared Prettier configuration to support the Tailwind v4 stylesheet-based configuration, allowing class sorting without a legacy JavaScript config file. Includes: - Initial "peekaboo" animation utilities for enter/exit transitions - Storybook integration for animation previews - Workspace catalog updates for Tailwind CSS 4 and Storybook 10 --- .vscode/settings.json | 6 +- docs/plans/dependencies-upgrade.md | 4 +- libs/dev-tools/prettier.config.js | 12 +- libs/tailwindcss-peekaboo/.gitignore | 5 + libs/tailwindcss-peekaboo/MIGRATION.md | 58 + libs/tailwindcss-peekaboo/eslint.config.js | 1 + libs/tailwindcss-peekaboo/package.json | 51 + libs/tailwindcss-peekaboo/prettier.config.js | 5 + libs/tailwindcss-peekaboo/src/peekaboo.css | 216 +++ .../src/peekaboo.stories.tsx | 177 +++ .../storybook/decorators.tsx | 17 + libs/tailwindcss-peekaboo/storybook/main.ts | 8 + .../storybook/preview.tsx | 15 + .../tailwindcss-peekaboo/storybook/styles.css | 17 + libs/tailwindcss-peekaboo/tsconfig.json | 16 + libs/tailwindcss-peekaboo/vite.config.ts | 9 + pnpm-lock.yaml | 1218 ++++++++++++++++- pnpm-workspace.yaml | 9 + 18 files changed, 1822 insertions(+), 22 deletions(-) create mode 100644 libs/tailwindcss-peekaboo/.gitignore create mode 100644 libs/tailwindcss-peekaboo/MIGRATION.md create mode 100644 libs/tailwindcss-peekaboo/eslint.config.js create mode 100644 libs/tailwindcss-peekaboo/package.json create mode 100644 libs/tailwindcss-peekaboo/prettier.config.js create mode 100644 libs/tailwindcss-peekaboo/src/peekaboo.css create mode 100644 libs/tailwindcss-peekaboo/src/peekaboo.stories.tsx create mode 100644 libs/tailwindcss-peekaboo/storybook/decorators.tsx create mode 100644 libs/tailwindcss-peekaboo/storybook/main.ts create mode 100644 libs/tailwindcss-peekaboo/storybook/preview.tsx create mode 100644 libs/tailwindcss-peekaboo/storybook/styles.css create mode 100644 libs/tailwindcss-peekaboo/tsconfig.json create mode 100644 libs/tailwindcss-peekaboo/vite.config.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index 6c5cd83d..7136a91d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,6 +9,9 @@ { "pattern": "./apps/*/" }, { "pattern": "./libs/*/" } ], + "files.associations": { + "*.css": "tailwindcss" + }, "js/ts.tsdk.path": "node_modules/typescript/lib", "prettier.ignorePath": ".prettierignore.ide", "search.exclude": { @@ -18,6 +21,7 @@ "tailwindCSS.experimental.configFile": { "apps/admin/tailwind.config.ts": "apps/admin/**", "apps/website/tailwind.config.ts": "apps/website/**", - "apps/show/tailwind.config.ts": "apps/show/**" + "apps/show/tailwind.config.ts": "apps/show/**", + "libs/tailwindcss-peekaboo/storybook/styles.css": "libs/tailwindcss-peekaboo/**" } } diff --git a/docs/plans/dependencies-upgrade.md b/docs/plans/dependencies-upgrade.md index 7a600450..61b77c56 100644 --- a/docs/plans/dependencies-upgrade.md +++ b/docs/plans/dependencies-upgrade.md @@ -39,7 +39,7 @@ those plugins ship compatible releases. | Phase | Status | | --------------------------------------------- | ----------- | | [Phase 1: TypeScript][phase-1] | Complete | -| [Phase 2: Tailwind CSS 4][phase-2] | Not started | +| [Phase 2: Tailwind CSS 4][phase-2] | In progress | | [Phase 3: Remix v2.17.4][phase-3] | Not started | | [Phase 4: Vite 6][phase-4] | Not started | | [Phase 5: Express v5][phase-5] | Not started | @@ -155,7 +155,7 @@ Affected libs: - `libs/dev-tools` (`prettier-plugin-tailwindcss` and its `createConfig` helper use a Tailwind CSS v3-specific option that must be updated for v4) -- `libs/tailwind-animation` +- `libs/tailwindcss-peekaboo` ### Phase 3 — Remix v2.17.4 (workspace-wide) diff --git a/libs/dev-tools/prettier.config.js b/libs/dev-tools/prettier.config.js index 25e01630..cb0c7258 100644 --- a/libs/dev-tools/prettier.config.js +++ b/libs/dev-tools/prettier.config.js @@ -6,10 +6,13 @@ export default createConfig() * @param {Object} [options={}] Optional configuration overrides. * @param {string} [options.tailwindConfig] URL or path to the Tailwind CSS * configuration. `prettier-plugin-tailwindcss` plugin will only be used if - * `tailwindConfig` is provided. + * `tailwindConfig` or `tailwindStylesheet` is provided. + * @param {string} [options.tailwindStylesheet] URL or path to the Tailwind CSS + * stylesheet. `prettier-plugin-tailwindcss` plugin will only be used if + * `tailwindConfig` or `tailwindStylesheet` is provided. * @returns {import("prettier").Config} The configuration object. */ -export function createConfig({ tailwindConfig } = {}) { +export function createConfig({ tailwindConfig, tailwindStylesheet } = {}) { return { // We prefer automatic text wrapping in markdown because: // @@ -39,7 +42,7 @@ export function createConfig({ tailwindConfig } = {}) { // https://prettier.io/docs/en/options#quotes singleQuote: false, - ...(tailwindConfig != null + ...(tailwindConfig != null || tailwindStylesheet != null ? { plugins: [ // Sort Tailwind classes. @@ -56,6 +59,9 @@ export function createConfig({ tailwindConfig } = {}) { // https://github.com/tailwindlabs/prettier-plugin-tailwindcss/tree/main#specifying-your-tailwind-javascript-config-path-tailwind-css-v3 tailwindConfig, + + // https://github.com/tailwindlabs/prettier-plugin-tailwindcss/tree/main#specifying-your-tailwind-stylesheet-path-tailwind-css-v4 + tailwindStylesheet, } : null), } diff --git a/libs/tailwindcss-peekaboo/.gitignore b/libs/tailwindcss-peekaboo/.gitignore new file mode 100644 index 00000000..98d43031 --- /dev/null +++ b/libs/tailwindcss-peekaboo/.gitignore @@ -0,0 +1,5 @@ +# Dependencies installed by pnpm. +/node_modules/ + +# Debug logs generated by Storybook. +*storybook.log diff --git a/libs/tailwindcss-peekaboo/MIGRATION.md b/libs/tailwindcss-peekaboo/MIGRATION.md new file mode 100644 index 00000000..db7c47f3 --- /dev/null +++ b/libs/tailwindcss-peekaboo/MIGRATION.md @@ -0,0 +1,58 @@ +# Migration map + +This file maps previous animation utilities to the new CSS utilities in this +package. + +## Core state classes + +| Previous utility | New utility | +| ---------------------- | ---------------------- | +| `animation-enter` | `animate-enter` | +| `animation-exit` | `animate-exit` | +| `animation-duration-*` | `animation-duration-*` | + +## Opacity + +| Previous utility | New utility | +| ----------------------------- | --------------- | +| `animation-opacity-*` | `out-opacity-*` | +| `animation-current-opacity-*` | `in-opacity-*` | + +## Translate + +| Previous utility | New utility | +| -------------------------- | -------------------- | +| `animation-translate-x-*` | `out-translate-x-*` | +| `-animation-translate-x-*` | `-out-translate-x-*` | +| `animation-translate-y-*` | `out-translate-y-*` | +| `-animation-translate-y-*` | `-out-translate-y-*` | + +## Height + +| Previous utility | New utility | +| ----------------------- | -------------- | +| `animation-h-*` | `out-height-*` | +| `animation-current-h-*` | `in-height-*` | + +## Overflow + +| Previous utility | New utility | +| ------------------------------ | ---------------- | +| `animation-overflow-*` | `out-overflow-*` | +| `animation-current-overflow-*` | `in-overflow-*` | + +## Keyframes + +| Previous utility | New utility | +| ----------------------------------- | --------------------------------------- | +| `@keyframes enter` (plugin-defined) | `@keyframes enter` (CSS `@theme` block) | +| `@keyframes exit` (plugin-defined) | `@keyframes exit` (CSS `@theme` block) | + +## Variant examples + +- Previous: + `data-[state=open]:animation-enter data-[state=closed]:animation-exit` +- New: `data-[state=open]:animate-enter data-[state=closed]:animate-exit` + +- Previous: `data-opened:animation-enter data-closed:animation-exit` +- New: `data-opened:animate-enter data-closed:animate-exit` diff --git a/libs/tailwindcss-peekaboo/eslint.config.js b/libs/tailwindcss-peekaboo/eslint.config.js new file mode 100644 index 00000000..c28c06bb --- /dev/null +++ b/libs/tailwindcss-peekaboo/eslint.config.js @@ -0,0 +1 @@ +export { default } from "@animeaux/dev-tools/eslint" diff --git a/libs/tailwindcss-peekaboo/package.json b/libs/tailwindcss-peekaboo/package.json new file mode 100644 index 00000000..cc7cf799 --- /dev/null +++ b/libs/tailwindcss-peekaboo/package.json @@ -0,0 +1,51 @@ +{ + "name": "@animeaux/tailwindcss-peekaboo", + "version": "1.0.0", + "private": true, + "sideEffects": true, + "type": "module", + "files": [ + "src" + ], + "exports": { + ".": "./src/peekaboo.css" + }, + "scripts": { + "dev": "run-p --continue-on-error --print-label dev:*", + "dev:sync-workspace": "chokidar ./src --debounce --silent -c 'pnpm sync-workspace'", + "lint": "run-p --continue-on-error --print-label lint:*", + "lint:eslint": "eslint --cache --cache-location ./node_modules/.cache/eslint --max-warnings 0 .", + "lint:prettier": "prettier --list-different .", + "lint:tsc": "tsc --noEmit", + "lint-fix": "run-s --print-label lint-fix:eslint lint-fix:prettier", + "lint-fix:eslint": "eslint --cache --cache-location ./node_modules/.cache/eslint --fix .", + "lint-fix:prettier": "prettier --write .", + "storybook": "storybook dev -c storybook -p 4001 --no-open", + "sync-workspace": "# See /docs/decisions/002-workspace-package-injection.md" + }, + "dependencies": { + "tailwindcss": "catalog:tailwindcss4" + }, + "devDependencies": { + "@animeaux/core": "workspace:*", + "@animeaux/react-primitives": "workspace:*", + "@animeaux/dev-tools": "workspace:*", + "@radix-ui/react-presence": "catalog:", + "@storybook/react": "catalog:", + "@storybook/react-vite": "catalog:", + "@tailwindcss/vite": "catalog:tailwindcss4", + "@types/react": "catalog:", + "@types/react-dom": "catalog:", + "chokidar-cli": "catalog:", + "eslint": "catalog:", + "npm-run-all": "catalog:", + "prettier": "catalog:", + "prettier-plugin-tailwindcss": "catalog:", + "react-dom": "catalog:", + "react": "catalog:", + "storybook": "catalog:", + "typescript": "catalog:", + "vite": "catalog:", + "vite-tsconfig-paths": "catalog:" + } +} diff --git a/libs/tailwindcss-peekaboo/prettier.config.js b/libs/tailwindcss-peekaboo/prettier.config.js new file mode 100644 index 00000000..e4305abc --- /dev/null +++ b/libs/tailwindcss-peekaboo/prettier.config.js @@ -0,0 +1,5 @@ +import { createConfig } from "@animeaux/dev-tools/prettier" + +export default createConfig({ + tailwindStylesheet: "./storybook/styles.css", +}) diff --git a/libs/tailwindcss-peekaboo/src/peekaboo.css b/libs/tailwindcss-peekaboo/src/peekaboo.css new file mode 100644 index 00000000..fcbad9a0 --- /dev/null +++ b/libs/tailwindcss-peekaboo/src/peekaboo.css @@ -0,0 +1,216 @@ +/* + * Animation utilities inspired from tw-animate-css but: + * - Without overriding transition utilities. + * - With custom properties as fallbacks to avoid enter or exit style + * mismatch. + * - With symmetrical enter and exit animations. + * - With _in_ styles for the ones that should only be set during the + * animation (`animation-fill-mode: none`) + * + * See https://github.com/jamiebuilds/tailwindcss-animate + * See https://developer.mozilla.org/en-US/docs/Web/CSS/animation-fill-mode#none + */ + +@theme inline { + --default-animation-duration: var(--default-transition-duration); +} + +@utility animation-duration-* { + --animation-duration: --value(--transition-duration-*); + --animation-duration: --value([*]); +} + +@theme { + --in-out-overflow-hidden: hidden; + --in-out-overflow-auto: auto; +} + +@utility out-overflow-* { + --out-overflow: --value(--in-out-overflow-*); +} + +@utility in-overflow-* { + --in-overflow: --value(--in-out-overflow-*); +} + +@theme { + --in-out-height-0: 0px; + --in-out-height-full: 100%; +} + +@utility out-height-* { + --out-height: --value(--in-out-height-*); + --out-height: --value([*]); +} + +@utility in-height-* { + --in-height: --value(--in-out-height-*); + --in-height: --value([*]); +} + +@theme { + --in-out-opacity-0: 0%; + --in-out-opacity-5: 5%; + --in-out-opacity-10: 10%; + --in-out-opacity-15: 15%; + --in-out-opacity-20: 20%; + --in-out-opacity-25: 25%; + --in-out-opacity-30: 30%; + --in-out-opacity-35: 35%; + --in-out-opacity-40: 40%; + --in-out-opacity-45: 45%; + --in-out-opacity-50: 50%; + --in-out-opacity-55: 55%; + --in-out-opacity-60: 60%; + --in-out-opacity-65: 65%; + --in-out-opacity-70: 70%; + --in-out-opacity-75: 75%; + --in-out-opacity-80: 80%; + --in-out-opacity-85: 85%; + --in-out-opacity-90: 90%; + --in-out-opacity-95: 95%; + --in-out-opacity-100: 100%; +} + +@utility out-opacity-* { + --out-opacity: --value(--in-out-opacity-*); + --out-opacity: --value([*]); +} + +@utility in-opacity-* { + --in-opacity: --value(--in-out-opacity-*); + --in-opacity: --value([*]); +} + +/* + * See https://github.com/tailwindlabs/tailwindcss/discussions/17353 + */ +@utility out-translate-x-* { + --out-translate-x: --spacing(--value(number)); + --out-translate-x: --value([*]); +} +@utility -out-translate-x-* { + --out-translate-x: calc(--spacing(--value(number)) * -1); + --out-translate-x: calc(--value([*]) * -1); +} + +@utility in-translate-x-* { + --tw-translate-x: --spacing(--value(number)); + --tw-translate-x: --value([*]); +} +@utility -in-translate-x-* { + --tw-translate-x: calc(--spacing(--value(number)) * -1); + --tw-translate-x: calc(--value([*]) * -1); +} + +@utility out-translate-y-* { + --out-translate-y: --spacing(--value(number)); + --out-translate-y: --value([*]); +} +@utility -out-translate-y-* { + --out-translate-y: calc(--spacing(--value(number)) * -1); + --out-translate-y: calc(--value([*]) * -1); +} + +@utility in-translate-y-* { + --tw-translate-y: --spacing(--value(number)); + --tw-translate-y: --value([*]); +} +@utility -in-translate-y-* { + --tw-translate-y: calc(--spacing(--value(number)) * -1); + --tw-translate-y: calc(--value([*]) * -1); +} + +@theme inline { + --animate-enter: enter + var(--animation-duration, var(--default-animation-duration)) var(--ease-out); + + --animate-exit: exit + var(--animation-duration, var(--default-animation-duration)) var(--ease-in); +} + +@theme { + @keyframes enter { + /* + * If an `--out-*` is not defined, fallback to the `--in-` (current) value + * to make sure the animation is a NOP. + * + * We don't use the `--in-` prefix for translate and scale utilities because + * they already exist in Tailwind and they're prefixed with `--tw-`. + */ + from { + overflow: var(--out-overflow, var(--in-overflow)); + + height: var(--out-height, var(--in-height)); + + opacity: var(--out-opacity, var(--in-opacity)); + + translate: var(--out-translate-x, var(--tw-translate-x)) + var(--out-translate-y, var(--tw-translate-y)); + + /* scale: var(--out-scale-x, var(--tw-scale-x)) + var(--out-scale-y, var(--tw-scale-y)) + var(--out-scale-z, var(--tw-scale-z)); */ + } + + /* + * Styles that should only be set during the animation (because the + * `animation-fill-mode` is `none`). + * If the target element set them permanently, it would either break the + * animation or the element styles. + */ + to { + overflow: var(--in-overflow); + + height: var(--in-height); + + opacity: var(--in-opacity); + + translate: var(--tw-translate-x) var(--tw-translate-y); + + /* scale: var(--tw-scale-x) var(--tw-scale-y) var(--tw-scale-z); */ + } + } + + @keyframes exit { + /* + * Styles that should only be set during the animation (because the + * `animation-fill-mode` is `none`). + * If the target element set them permanently, it would either break the + * animation or the element styles. + */ + from { + overflow: var(--in-overflow); + + height: var(--in-height); + + opacity: var(--in-opacity); + + translate: var(--tw-translate-x) var(--tw-translate-y); + + /* scale: var(--tw-scale-x) var(--tw-scale-y) var(--tw-scale-z); */ + } + + /* + * If an `--out-*` is not defined, fallback to the `--in-` (current) value + * to make sure the animation is a NOP. + * + * We don't use the `--in-` prefix for translate and scale utilities because + * they already exist in Tailwind and they're prefixed with `--tw-`. + */ + to { + overflow: var(--out-overflow, var(--in-overflow)); + + height: var(--out-height, var(--in-height)); + + opacity: var(--out-opacity, var(--in-opacity)); + + translate: var(--out-translate-x, var(--tw-translate-x)) + var(--out-translate-y, var(--tw-translate-y)); + + /* scale: var(--out-scale-x, var(--tw-scale-x)) + var(--out-scale-y, var(--tw-scale-y)) + var(--out-scale-z, var(--tw-scale-z)); */ + } + } +} diff --git a/libs/tailwindcss-peekaboo/src/peekaboo.stories.tsx b/libs/tailwindcss-peekaboo/src/peekaboo.stories.tsx new file mode 100644 index 00000000..dc662dc4 --- /dev/null +++ b/libs/tailwindcss-peekaboo/src/peekaboo.stories.tsx @@ -0,0 +1,177 @@ +// At least one import of react is necessary to fix the runtime error: +// ``` +// Uncaught SyntaxError: The requested module '/@fs/Users/simonrelet/repo/animeaux/website/node_modules/.pnpm/react@18.3.1/node_modules/react/index.js?v=b1ac76c3' does not provide an export named 'default' (at chunk-DDIRQRCA.js?v=b1ac76c3:2:8) +// ``` +// It looks like vite doesn't bumdle react the same way if it's not imported in +// the story file. +// import "react" + +import { cn } from "@animeaux/core" +import { Primitive } from "@animeaux/react-primitives" +import { Presence } from "@radix-ui/react-presence" +import type { Meta, StoryObj } from "@storybook/react-vite" +import { forwardRef } from "react" + +import { DecoratorFrame } from "#i/storybook/decorators.js" + +const AnimationDuration = { + fast: cn("animation-duration-fast"), + normal: cn("animation-duration-normal"), + slow: cn("animation-duration-slow"), +} + +type AnimationDuration = keyof typeof AnimationDuration + +const meta = { + title: "All animations", + component: Peekaboo, + parameters: { layout: "centered" }, + + argTypes: { + isOpened: { + control: "boolean", + }, + + duration: { + control: "select", + options: Object.keys(AnimationDuration), + }, + }, + + args: { + isOpened: true, + duration: "normal", + }, +} satisfies Meta + +export default meta + +type Story = StoryObj + +export const fade: Story = { + name: "Fade", + + render: (props) => ( + + + Lorem ipsum dolor + + + ), +} + +export const left: Story = { + name: "Left", + decorators: [DecoratorFrame], + + render: (props) => ( + + + Lorem ipsum dolor + + + ), +} + +export const right: Story = { + name: "Right", + decorators: [DecoratorFrame], + + render: (props) => ( + + + Lorem ipsum dolor + + + ), +} + +export const top: Story = { + name: "Top", + decorators: [DecoratorFrame], + + render: (props) => ( + + + Lorem ipsum dolor + + + ), +} + +export const bottom: Story = { + name: "Bottom", + decorators: [DecoratorFrame], + + render: (props) => ( + + + Lorem ipsum dolor + + + ), +} + +export const bottomFade: Story = { + name: "Bottom Fade", + + render: (props) => ( + + + Lorem ipsum dolor + + + ), +} + +export const height: Story = { + name: "Height", + + render: (props) => ( + + Lorem ipsum dolor + + ), +} + +function Peekaboo({ isOpened, duration, className, ...props }: Peekaboo.Props) { + return ( + + + + ) +} + +namespace Peekaboo { + export interface Props extends React.ComponentPropsWithoutRef< + typeof Primitive.div + > { + isOpened: boolean + duration: AnimationDuration + } +} + +const Component = forwardRef(function Component( + { className, ...props }, + ref, +) { + return ( +
+ ) +}) + +namespace Component { + export type Ref = React.ComponentRef<"div"> + export type Props = React.ComponentPropsWithoutRef<"div"> +} diff --git a/libs/tailwindcss-peekaboo/storybook/decorators.tsx b/libs/tailwindcss-peekaboo/storybook/decorators.tsx new file mode 100644 index 00000000..087f0caa --- /dev/null +++ b/libs/tailwindcss-peekaboo/storybook/decorators.tsx @@ -0,0 +1,17 @@ +import { cn } from "@animeaux/core" +import type { Decorator } from "@storybook/react" + +export const DecoratorFrame: Decorator = (storyFn) => { + return ( +
+ {storyFn()} +
+ ) +} diff --git a/libs/tailwindcss-peekaboo/storybook/main.ts b/libs/tailwindcss-peekaboo/storybook/main.ts new file mode 100644 index 00000000..c6bc79e5 --- /dev/null +++ b/libs/tailwindcss-peekaboo/storybook/main.ts @@ -0,0 +1,8 @@ +import type { StorybookConfig } from "@storybook/react-vite" + +const config: StorybookConfig = { + framework: "@storybook/react-vite", + stories: ["../src/**/*.stories.tsx"], +} + +export default config diff --git a/libs/tailwindcss-peekaboo/storybook/preview.tsx b/libs/tailwindcss-peekaboo/storybook/preview.tsx new file mode 100644 index 00000000..6540e839 --- /dev/null +++ b/libs/tailwindcss-peekaboo/storybook/preview.tsx @@ -0,0 +1,15 @@ +import "./styles.css" + +import type { Preview } from "@storybook/react-vite" + +declare module "@storybook/react" { + // This interface is not strongly typed. + // https://storybook.js.org/docs/api/parameters#available-parameters + interface Parameters { + layout?: "centered" | "fullscreen" | "padded" + } +} + +const preview: Preview = {} + +export default preview diff --git a/libs/tailwindcss-peekaboo/storybook/styles.css b/libs/tailwindcss-peekaboo/storybook/styles.css new file mode 100644 index 00000000..853f308a --- /dev/null +++ b/libs/tailwindcss-peekaboo/storybook/styles.css @@ -0,0 +1,17 @@ +@import "tailwindcss"; +@import "../src/peekaboo.css"; + +@theme { + --spacing: 1px; +} + +@theme inline { + --transition-duration-fast: 500ms; + --transition-duration-normal: 1s; + --transition-duration-slow: 2s; + + --default-transition-duration: var(--transition-duration-slow); +} + +@custom-variant data-closed (&[data-state="closed"]); +@custom-variant data-opened (&[data-state*="open"]); diff --git a/libs/tailwindcss-peekaboo/tsconfig.json b/libs/tailwindcss-peekaboo/tsconfig.json new file mode 100644 index 00000000..ae5c6c97 --- /dev/null +++ b/libs/tailwindcss-peekaboo/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "@animeaux/dev-tools/tsconfig.lib", + + "include": ["./**/*.ts", "./**/*.tsx"], + "exclude": ["./node_modules"], + + "compilerOptions": { + "rootDir": "./", + "paths": { + "#i/*": ["./src/*"], + "#i/storybook/*": ["./storybook/*"] + }, + + "types": ["vite/client", "@animeaux/dev-tools/reset"] + } +} diff --git a/libs/tailwindcss-peekaboo/vite.config.ts b/libs/tailwindcss-peekaboo/vite.config.ts new file mode 100644 index 00000000..dc958d47 --- /dev/null +++ b/libs/tailwindcss-peekaboo/vite.config.ts @@ -0,0 +1,9 @@ +import tailwindcss from "@tailwindcss/vite" +import { defineConfig } from "vite" +import tsconfigPaths from "vite-tsconfig-paths" + +export default defineConfig({ + cacheDir: "./node_modules/.cache/vite", + + plugins: [tailwindcss(), tsconfigPaths()], +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3194b2b6..0a6cc8d6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -61,6 +61,9 @@ catalogs: '@radix-ui/react-popover': specifier: ^1.1.15 version: 1.1.15 + '@radix-ui/react-presence': + specifier: ^1.1.5 + version: 1.1.5 '@radix-ui/react-slot': specifier: ^1.2.4 version: 1.2.4 @@ -91,6 +94,12 @@ catalogs: '@sentry/remix': specifier: ^8.37.1 version: 8.37.1 + '@storybook/react': + specifier: ^10.3.5 + version: 10.3.5 + '@storybook/react-vite': + specifier: ^10.3.5 + version: 10.3.5 '@tailwindcss/container-queries': specifier: ^0.1.1 version: 0.1.1 @@ -331,6 +340,9 @@ catalogs: source-map-support: specifier: ^0.5.21 version: 0.5.21 + storybook: + specifier: ^10.3.5 + version: 10.3.5 tailwindcss: specifier: ^3.3.3 version: 3.4.3 @@ -364,6 +376,13 @@ catalogs: zod-form-data: specifier: ^2.0.1 version: 2.0.2 + tailwindcss4: + '@tailwindcss/vite': + specifier: ^4.2.2 + version: 4.2.2 + tailwindcss: + specifier: ^4.2.2 + version: 4.2.2 importers: @@ -537,7 +556,7 @@ importers: version: 10.4.0 '@remix-run/dev': specifier: 'catalog:' - version: 2.9.2(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/serve@2.9.2(typescript@5.7.3))(@types/node@22.8.7)(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)) + version: 2.9.2(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/serve@2.9.2(typescript@5.7.3))(@types/node@22.8.7)(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)(lightningcss@1.32.0)) '@tailwindcss/container-queries': specifier: 'catalog:' version: 0.1.1(tailwindcss@3.4.3) @@ -603,10 +622,10 @@ importers: version: 5.7.3 vite: specifier: 'catalog:' - version: 5.2.12(@types/node@22.8.7) + version: 5.2.12(@types/node@22.8.7)(lightningcss@1.32.0) vite-tsconfig-paths: specifier: 'catalog:' - version: 4.3.2(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)) + version: 4.3.2(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)(lightningcss@1.32.0)) apps/show: dependencies: @@ -751,7 +770,7 @@ importers: version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(jiti@2.6.1)(typescript@5.7.3) '@remix-run/dev': specifier: 'catalog:' - version: 2.9.2(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/serve@2.9.2(typescript@5.7.3))(@types/node@22.8.7)(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)) + version: 2.9.2(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/serve@2.9.2(typescript@5.7.3))(@types/node@22.8.7)(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)(lightningcss@1.32.0)) '@types/compression': specifier: 'catalog:' version: 1.8.1 @@ -814,10 +833,10 @@ importers: version: 5.7.3 vite: specifier: 'catalog:' - version: 5.2.12(@types/node@22.8.7) + version: 5.2.12(@types/node@22.8.7)(lightningcss@1.32.0) vite-tsconfig-paths: specifier: 'catalog:' - version: 4.3.2(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)) + version: 4.3.2(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)(lightningcss@1.32.0)) apps/website: dependencies: @@ -890,7 +909,7 @@ importers: version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(jiti@2.6.1)(typescript@5.7.3) '@remix-run/dev': specifier: 'catalog:' - version: 2.9.2(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/serve@2.9.2(typescript@5.7.3))(@types/node@22.8.7)(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)) + version: 2.9.2(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/serve@2.9.2(typescript@5.7.3))(@types/node@22.8.7)(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)(lightningcss@1.32.0)) '@types/body-scroll-lock': specifier: 'catalog:' version: 3.1.2 @@ -947,10 +966,10 @@ importers: version: 5.7.3 vite: specifier: 'catalog:' - version: 5.2.12(@types/node@22.8.7) + version: 5.2.12(@types/node@22.8.7)(lightningcss@1.32.0) vite-tsconfig-paths: specifier: 'catalog:' - version: 4.3.2(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)) + version: 4.3.2(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)(lightningcss@1.32.0)) libs/core: dependencies: @@ -1389,6 +1408,73 @@ importers: specifier: 'catalog:' version: 5.7.3 + libs/tailwindcss-peekaboo: + dependencies: + tailwindcss: + specifier: catalog:tailwindcss4 + version: 4.2.2 + devDependencies: + '@animeaux/core': + specifier: workspace:* + version: file:libs/core(react-dom@18.3.1(react@18.3.1))(typescript@5.7.3) + '@animeaux/dev-tools': + specifier: workspace:* + version: file:libs/dev-tools(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(@typescript-eslint/utils@8.58.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.7.3))(jiti@2.6.1)(typescript@5.7.3) + '@animeaux/react-primitives': + specifier: workspace:* + version: file:libs/react-primitives(@types/react@18.3.3) + '@radix-ui/react-presence': + specifier: 'catalog:' + version: 1.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/react': + specifier: 'catalog:' + version: 10.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.3.5(prettier@3.8.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.7.3) + '@storybook/react-vite': + specifier: 'catalog:' + version: 10.3.5(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.18.0)(storybook@10.3.5(prettier@3.8.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)(lightningcss@1.32.0)) + '@tailwindcss/vite': + specifier: catalog:tailwindcss4 + version: 4.2.2(vite@5.2.12(@types/node@22.8.7)(lightningcss@1.32.0)) + '@types/react': + specifier: 'catalog:' + version: 18.3.3 + '@types/react-dom': + specifier: 'catalog:' + version: 18.3.0 + chokidar-cli: + specifier: 'catalog:' + version: 3.0.0 + eslint: + specifier: 'catalog:' + version: 9.39.3(jiti@2.6.1) + npm-run-all: + specifier: 'catalog:' + version: 4.1.5 + prettier: + specifier: 'catalog:' + version: 3.8.2 + prettier-plugin-tailwindcss: + specifier: 'catalog:' + version: 0.7.2(prettier@3.8.2) + react: + specifier: 'catalog:' + version: 18.3.1 + react-dom: + specifier: 'catalog:' + version: 18.3.1(react@18.3.1) + storybook: + specifier: 'catalog:' + version: 10.3.5(prettier@3.8.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + typescript: + specifier: 'catalog:' + version: 5.7.3 + vite: + specifier: 'catalog:' + version: 5.2.12(@types/node@22.8.7)(lightningcss@1.32.0) + vite-tsconfig-paths: + specifier: 'catalog:' + version: 4.3.2(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)(lightningcss@1.32.0)) + libs/zod-utils: dependencies: '@opentelemetry/api': @@ -1503,6 +1589,9 @@ packages: '@acemir/cssom@0.9.31': resolution: {integrity: sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==} + '@adobe/css-tools@4.4.4': + resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} + '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} @@ -1557,18 +1646,34 @@ packages: resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} + '@babel/compat-data@7.22.6': resolution: {integrity: sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.29.0': + resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} + engines: {node: '>=6.9.0'} + '@babel/core@7.22.8': resolution: {integrity: sha512-75+KxFB4CZqYRXjx4NlR4J7yGvKumBuZTmV4NV6v09dVXXkuYVYLT68N6HCzLvfJ+fWCxQsntNzKwwIXL4bHnw==} engines: {node: '>=6.9.0'} + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} + engines: {node: '>=6.9.0'} + '@babel/generator@7.23.6': resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} engines: {node: '>=6.9.0'} + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.22.5': resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} @@ -1579,6 +1684,10 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.22.6': resolution: {integrity: sha512-iwdzgtSiBxF6ni6mzVnZCF3xt5qE6cEA0J7nFt8QOAWZ0zjCFceEgpn3vtb2V7WFR6QzP2jmIFOHMTRo7eNJjQ==} engines: {node: '>=6.9.0'} @@ -1593,6 +1702,10 @@ packages: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + '@babel/helper-hoist-variables@7.22.5': resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} @@ -1605,10 +1718,20 @@ packages: resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.22.5': resolution: {integrity: sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==} engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.22.5': resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} @@ -1637,18 +1760,34 @@ packages: resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.22.20': resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.22.5': resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + '@babel/helpers@7.22.6': resolution: {integrity: sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==} engines: {node: '>=6.9.0'} + '@babel/helpers@7.29.2': + resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} + engines: {node: '>=6.9.0'} + '@babel/highlight@7.23.4': resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} @@ -1658,6 +1797,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-syntax-decorators@7.23.3': resolution: {integrity: sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==} engines: {node: '>=6.9.0'} @@ -1706,14 +1850,26 @@ packages: resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} engines: {node: '>=6.9.0'} + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + engines: {node: '>=6.9.0'} + '@babel/traverse@7.23.7': resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + engines: {node: '>=6.9.0'} + '@babel/types@7.23.6': resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} engines: {node: '>=6.9.0'} + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} + '@chevrotain/cst-dts-gen@10.5.0': resolution: {integrity: sha512-lhmC/FyqQ2o7pGK4Om+hzuDrm9rhFYIJ/AXoQBeongmn870Xeb0L6oGEiuR8nohFNL5sMaQEJWCxr1oIVIVXrw==} @@ -2497,14 +2653,29 @@ packages: resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} + '@joshwooding/vite-plugin-react-docgen-typescript@0.7.0': + resolution: {integrity: sha512-qvsTEwEFefhdirGOPnu9Wp6ChfIwy2dBCRuETU3uE+4cC+PFoxMSiiEhxk4lOluA34eARHA0OxqsEUYDqRMgeQ==} + peerDependencies: + typescript: '>= 4.3.x' + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@jridgewell/gen-mapping@0.1.1': resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -2516,9 +2687,15 @@ packages: '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@jspm/core@2.0.1': resolution: {integrity: sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==} @@ -3542,6 +3719,15 @@ packages: '@remix-run/web-stream@1.1.0': resolution: {integrity: sha512-KRJtwrjRV5Bb+pM7zxcTJkhIqWWSy+MYsIxHK+0m5atcznsf15YwUBWHWulZerV2+vvHH1Lp1DD7pw6qKW8SgA==} + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + '@rollup/rollup-android-arm-eabi@4.18.0': resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==} cpu: [arm] @@ -3735,11 +3921,170 @@ packages: '@standard-schema/spec@1.0.0': resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@storybook/builder-vite@10.3.5': + resolution: {integrity: sha512-i4KwCOKbhtlbQIbhm53+Kk7bMnxa0cwTn1pxmtA/x5wm1Qu7FrrBQV0V0DNjkUqzcSKo1CjspASJV/HlY0zYlw==} + peerDependencies: + storybook: ^10.3.5 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + + '@storybook/csf-plugin@10.3.5': + resolution: {integrity: sha512-qlEzNKxOjq86pvrbuMwiGD/bylnsXk1dg7ve0j77YFjEEchqtl7qTlrXvFdNaLA89GhW6D/EV6eOCu/eobPDgw==} + peerDependencies: + esbuild: '*' + rollup: '*' + storybook: ^10.3.5 + vite: '*' + webpack: '*' + peerDependenciesMeta: + esbuild: + optional: true + rollup: + optional: true + vite: + optional: true + webpack: + optional: true + + '@storybook/global@5.0.0': + resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} + + '@storybook/icons@2.0.1': + resolution: {integrity: sha512-/smVjw88yK3CKsiuR71vNgWQ9+NuY2L+e8X7IMrFjexjm6ZR8ULrV2DRkTA61aV6ryefslzHEGDInGpnNeIocg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + '@storybook/react-dom-shim@10.3.5': + resolution: {integrity: sha512-Gw8R7XZm0zSUH0XAuxlQJhmizsLzyD6x00KOlP6l7oW9eQHXGfxg3seNDG3WrSAcW07iP1/P422kuiriQlOv7g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + storybook: ^10.3.5 + + '@storybook/react-vite@10.3.5': + resolution: {integrity: sha512-UB5sJHeh26bfd8sNMx2YPGYRYmErIdTRaLOT28m4bykQIa1l9IgVktsYg/geW7KsJU0lXd3oTbnUjLD+enpi3w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + storybook: ^10.3.5 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + + '@storybook/react@10.3.5': + resolution: {integrity: sha512-tpLTLaVGoA6fLK3ReyGzZUricq7lyPaV2hLPpj5wqdXLV/LpRtAHClUpNoPDYSBjlnSjL81hMZijbkGC3mA+gw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + storybook: ^10.3.5 + typescript: '>= 4.9.x' + peerDependenciesMeta: + typescript: + optional: true + '@tailwindcss/container-queries@0.1.1': resolution: {integrity: sha512-p18dswChx6WnTSaJCSGx6lTmrGzNNvm2FtXmiO6AuA1V4U5REyoqwmT6kgAsIMdjo07QdAfYXHJ4hnMtfHzWgA==} peerDependencies: tailwindcss: '>=3.2.0' + '@tailwindcss/node@4.2.2': + resolution: {integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==} + + '@tailwindcss/oxide-android-arm64@4.2.2': + resolution: {integrity: sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.2.2': + resolution: {integrity: sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.2.2': + resolution: {integrity: sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.2.2': + resolution: {integrity: sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==} + engines: {node: '>= 20'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2': + resolution: {integrity: sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==} + engines: {node: '>= 20'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.2.2': + resolution: {integrity: sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.2.2': + resolution: {integrity: sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.2.2': + resolution: {integrity: sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.2.2': + resolution: {integrity: sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-wasm32-wasi@4.2.2': + resolution: {integrity: sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.2.2': + resolution: {integrity: sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.2.2': + resolution: {integrity: sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==} + engines: {node: '>= 20'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.2.2': + resolution: {integrity: sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==} + engines: {node: '>= 20'} + + '@tailwindcss/vite@4.2.2': + resolution: {integrity: sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==} + peerDependencies: + vite: ^5.2.0 || ^6 || ^7 || ^8 + + '@testing-library/jest-dom@6.9.1': + resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} @@ -3755,12 +4100,27 @@ packages: '@types/autosize@4.0.3': resolution: {integrity: sha512-o0ZyU3ePp3+KRbhHsY4ogjc+ZQWgVN5h6j8BHW5RII4cFKi6PEKK9QPAcphJVkD0dGpyFnD3VRR0WMvHVjCv9w==} + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + '@types/body-parser@1.19.5': resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} '@types/body-scroll-lock@3.1.2': resolution: {integrity: sha512-ELhtuphE/YbhEcpBf/rIV9Tl3/O0A0gpCVD+oYFSS8bWstHFJUgA4nNw1ZakVlRC38XaQEIsBogUZKWIPBvpfQ==} + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + '@types/compression@1.8.1': resolution: {integrity: sha512-kCFuWS0ebDbmxs0AXYn6e2r2nrGAb5KwQhknjSPSPgJcGd8+HVSILlUyFhGqML2gk39HcG7D1ydW9/qpYkN00Q==} @@ -3782,6 +4142,12 @@ packages: '@types/debug@4.1.7': resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/doctrine@0.0.9': + resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==} + '@types/estree-jsx@1.0.0': resolution: {integrity: sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==} @@ -3874,6 +4240,9 @@ packages: '@types/react@18.3.3': resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} + '@types/resolve@1.20.6': + resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} + '@types/send@0.17.4': resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} @@ -4129,9 +4498,24 @@ packages: '@vanilla-extract/private@1.0.3': resolution: {integrity: sha512-17kVyLq3ePTKOkveHxXuIJZtGYs+cSoev7BlP+Lf4916qfDhk/HBjvlYDe8egrea7LNPHKwSZJK/bzZC+Q6AwQ==} + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + '@web3-storage/multipart-parser@1.0.0': resolution: {integrity: sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==} + '@webcontainer/env@1.1.1': + resolution: {integrity: sha512-6aN99yL695Hi9SuIk1oC88l9o0gmxL1nGWWQ/kNy81HigJ0FoaoTXpytCj6ItzgyCEwA9kF1wixsTuv5cjsgng==} + '@zxing/text-encoding@0.9.0': resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==} @@ -4293,6 +4677,10 @@ packages: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} @@ -4300,6 +4688,10 @@ packages: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} + ast-types@0.16.1: + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} + engines: {node: '>=4'} + astring@1.8.6: resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} hasBin: true @@ -4446,6 +4838,10 @@ packages: builtins@5.0.1: resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + bytes@3.0.0: resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} engines: {node: '>= 0.8'} @@ -4519,6 +4915,10 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -4546,6 +4946,10 @@ packages: charm@0.1.2: resolution: {integrity: sha512-syedaZ9cPe7r3hoQA9twWYKu5AIyCswN5+szkmPBe9ccdLrj4bYaCnLVPTLd2kgVRc7+zoX4tyPgRnFKCj5YjQ==} + check-error@2.1.3: + resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} + engines: {node: '>= 16'} + cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} @@ -4710,6 +5114,9 @@ packages: convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} @@ -4766,6 +5173,9 @@ packages: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} + css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -4875,6 +5285,10 @@ packages: decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -4889,6 +5303,14 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} + engines: {node: '>=18'} + + default-browser@5.5.0: + resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} + engines: {node: '>=18'} + defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} @@ -4896,6 +5318,10 @@ packages: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + define-properties@1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} @@ -4930,6 +5356,10 @@ packages: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} @@ -4957,6 +5387,13 @@ packages: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} @@ -5042,6 +5479,10 @@ packages: end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + enhanced-resolve@5.20.1: + resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} + engines: {node: '>=10.13.0'} + enquirer@2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} @@ -5318,6 +5759,9 @@ packages: estree-util-visit@1.2.1: resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==} + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -5970,6 +6414,11 @@ packages: is-deflate@1.0.0: resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==} + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -6001,6 +6450,11 @@ packages: is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} @@ -6123,6 +6577,10 @@ packages: resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} engines: {node: '>= 0.4'} + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} + engines: {node: '>=16'} + isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -6289,6 +6747,76 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} @@ -6352,6 +6880,9 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + lru-cache@10.2.2: resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} engines: {node: 14 || >=16.14} @@ -6379,6 +6910,9 @@ packages: resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==} engines: {node: '>=12'} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + make-fetch-happen@15.0.5: resolution: {integrity: sha512-uCbIa8jWWmQZt4dSnEStkVC6gdakiinAm4PiGsywIkguF0eWMdcjDz0ECYhUolFU3pFLOev9VNPCEygydXnddg==} engines: {node: ^20.17.0 || >=22.9.0} @@ -6737,6 +7271,10 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} @@ -7084,6 +7622,10 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} + engines: {node: '>=18'} + opentelemetry-instrumentation-remix@0.7.1: resolution: {integrity: sha512-zzJ8CAsf4Pem+B1zY0NEKQcQjXIORgylPBIQMO2x1OdRc9HzBPLUp7JIlGt/RAfPsp5qaEs7QqvX9xtsrZgtFQ==} peerDependencies: @@ -7234,6 +7776,10 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} + peberminta@0.9.0: resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} @@ -7756,6 +8302,15 @@ packages: '@types/react': optional: true + react-docgen-typescript@2.4.0: + resolution: {integrity: sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==} + peerDependencies: + typescript: '>= 4.3.x' + + react-docgen@8.0.3: + resolution: {integrity: sha512-aEZ9qP+/M+58x2qgfSFEWH1BxLyHe5+qkLNJOZQb5iGS017jpbRnoKhNRrXPeA6RfBrZO5wZrT9DMC1UqE1f1w==} + engines: {node: ^20.9.0 || >=22} + react-dom@18.3.1: resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} peerDependencies: @@ -7859,6 +8414,14 @@ packages: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} + recast@0.23.11: + resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} + engines: {node: '>= 4'} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + redux@4.2.1: resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} @@ -8021,6 +8584,10 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -8274,6 +8841,15 @@ packages: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} + storybook@10.3.5: + resolution: {integrity: sha512-uBSZu/GZa9aEIW3QMGvdQPMZWhGxSe4dyRWU8B3/Vd47Gy/XLC7tsBxRr13txmmPOEDHZR94uLuq0H50fvuqBw==} + hasBin: true + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + stream-shift@1.0.1: resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} @@ -8360,6 +8936,14 @@ packages: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + + strip-indent@4.1.1: + resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==} + engines: {node: '>=12'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -8408,6 +8992,13 @@ packages: engines: {node: '>=14.0.0'} hasBin: true + tailwindcss@4.2.2: + resolution: {integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==} + + tapable@2.3.2: + resolution: {integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==} + engines: {node: '>=6'} + tar-fs@2.1.1: resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} @@ -8443,6 +9034,14 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + + tinyspy@4.0.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} + engines: {node: '>=14.0.0'} + tlds@1.252.0: resolution: {integrity: sha512-GA16+8HXvqtfEnw/DTcwB0UU354QE1n3+wh08oFjr6Znl7ZLAeUgYzCcK+/CCrOyE0vnHR8/pu3XXG3vDijXpQ==} hasBin: true @@ -8498,6 +9097,10 @@ packages: peerDependencies: typescript: '>=4.8.4' + ts-dedent@2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} @@ -8520,6 +9123,10 @@ packages: resolution: {integrity: sha512-uhxiMgnXQp1IR622dUXI+9Ehnws7i/y6xvpZB9IbUVOPy0muvdvgXeZOn88UcGPiT98Vp3rJPTa8bFoalZ3Qhw==} engines: {node: '>=6'} + tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + tslib@1.9.3: resolution: {integrity: sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==} @@ -8680,6 +9287,10 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} + unplugin@2.3.11: + resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==} + engines: {node: '>=18.12.0'} + unrs-resolver@1.11.1: resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} @@ -8733,6 +9344,11 @@ packages: '@types/react': optional: true + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -8881,6 +9497,9 @@ packages: resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} engines: {node: '>=20'} + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + whatwg-encoding@3.1.1: resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} engines: {node: '>=18'} @@ -9009,6 +9628,10 @@ packages: utf-8-validate: optional: true + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + xml-name-validator@5.0.0: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} @@ -9082,6 +9705,8 @@ snapshots: '@acemir/cssom@0.9.31': {} + '@adobe/css-tools@4.4.4': {} + '@alloc/quick-lru@5.2.0': {} '@ampproject/remapping@2.2.0': @@ -9263,8 +9888,16 @@ snapshots: '@babel/highlight': 7.23.4 chalk: 2.4.2 + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + '@babel/compat-data@7.22.6': {} + '@babel/compat-data@7.29.0': {} + '@babel/core@7.22.8': dependencies: '@ampproject/remapping': 2.2.0 @@ -9285,6 +9918,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/core@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.29.2 + '@babel/parser': 7.29.2 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/generator@7.23.6': dependencies: '@babel/types': 7.23.6 @@ -9292,6 +9945,14 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 + '@babel/generator@7.29.1': + dependencies: + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.0.2 + '@babel/helper-annotate-as-pure@7.22.5': dependencies: '@babel/types': 7.23.6 @@ -9305,6 +9966,14 @@ snapshots: browserslist: 4.23.0 lru-cache: 5.1.1 + '@babel/helper-compilation-targets@7.28.6': + dependencies: + '@babel/compat-data': 7.29.0 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.28.2 + lru-cache: 5.1.1 + semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.22.6(@babel/core@7.22.8)': dependencies: '@babel/core': 7.22.8 @@ -9327,6 +9996,8 @@ snapshots: '@babel/template': 7.22.15 '@babel/types': 7.23.6 + '@babel/helper-globals@7.28.0': {} + '@babel/helper-hoist-variables@7.22.5': dependencies: '@babel/types': 7.23.6 @@ -9339,6 +10010,13 @@ snapshots: dependencies: '@babel/types': 7.23.6 + '@babel/helper-module-imports@7.28.6': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-transforms@7.22.5': dependencies: '@babel/helper-environment-visitor': 7.22.20 @@ -9352,6 +10030,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-optimise-call-expression@7.22.5': dependencies: '@babel/types': 7.23.6 @@ -9383,10 +10070,16 @@ snapshots: '@babel/helper-string-parser@7.23.4': {} + '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-validator-identifier@7.22.20': {} + '@babel/helper-validator-identifier@7.28.5': {} + '@babel/helper-validator-option@7.22.5': {} + '@babel/helper-validator-option@7.27.1': {} + '@babel/helpers@7.22.6': dependencies: '@babel/template': 7.22.15 @@ -9395,6 +10088,11 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helpers@7.29.2': + dependencies: + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + '@babel/highlight@7.23.4': dependencies: '@babel/helper-validator-identifier': 7.22.20 @@ -9405,6 +10103,10 @@ snapshots: dependencies: '@babel/types': 7.23.6 + '@babel/parser@7.29.2': + dependencies: + '@babel/types': 7.29.0 + '@babel/plugin-syntax-decorators@7.23.3(@babel/core@7.22.8)': dependencies: '@babel/core': 7.22.8 @@ -9462,6 +10164,12 @@ snapshots: '@babel/parser': 7.23.6 '@babel/types': 7.23.6 + '@babel/template@7.28.6': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + '@babel/traverse@7.23.7': dependencies: '@babel/code-frame': 7.23.5 @@ -9477,12 +10185,29 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.29.2 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + '@babel/types@7.23.6': dependencies: '@babel/helper-string-parser': 7.23.4 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 + '@babel/types@7.29.0': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@chevrotain/cst-dts-gen@10.5.0': dependencies: '@chevrotain/gast': 10.5.0 @@ -9968,28 +10693,53 @@ snapshots: dependencies: minipass: 7.1.2 + '@joshwooding/vite-plugin-react-docgen-typescript@0.7.0(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)(lightningcss@1.32.0))': + dependencies: + glob: 13.0.6 + react-docgen-typescript: 2.4.0(typescript@5.7.3) + vite: 5.2.12(@types/node@22.8.7)(lightningcss@1.32.0) + optionalDependencies: + typescript: 5.7.3 + '@jridgewell/gen-mapping@0.1.1': dependencies: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/set-array@1.2.1': {} '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.5': {} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jspm/core@2.0.1': {} '@kikobeats/time-span@1.0.12': {} @@ -11145,7 +11895,7 @@ snapshots: dependencies: react: 18.3.1 - '@remix-run/dev@2.9.2(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/serve@2.9.2(typescript@5.7.3))(@types/node@22.8.7)(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7))': + '@remix-run/dev@2.9.2(@remix-run/react@2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/serve@2.9.2(typescript@5.7.3))(@types/node@22.8.7)(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)(lightningcss@1.32.0))': dependencies: '@babel/core': 7.22.8 '@babel/generator': 7.23.6 @@ -11204,7 +11954,7 @@ snapshots: optionalDependencies: '@remix-run/serve': 2.9.2(typescript@5.7.3) typescript: 5.7.3 - vite: 5.2.12(@types/node@22.8.7) + vite: 5.2.12(@types/node@22.8.7)(lightningcss@1.32.0) transitivePeerDependencies: - '@types/node' - bluebird @@ -11307,6 +12057,14 @@ snapshots: dependencies: web-streams-polyfill: 3.2.1 + '@rollup/pluginutils@5.3.0(rollup@4.18.0)': + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.3 + optionalDependencies: + rollup: 4.18.0 + '@rollup/rollup-android-arm-eabi@4.18.0': optional: true @@ -11570,10 +12328,158 @@ snapshots: '@standard-schema/spec@1.0.0': {} + '@storybook/builder-vite@10.3.5(esbuild@0.27.7)(rollup@4.18.0)(storybook@10.3.5(prettier@3.8.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@5.2.12(@types/node@22.8.7)(lightningcss@1.32.0))': + dependencies: + '@storybook/csf-plugin': 10.3.5(esbuild@0.27.7)(rollup@4.18.0)(storybook@10.3.5(prettier@3.8.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@5.2.12(@types/node@22.8.7)(lightningcss@1.32.0)) + storybook: 10.3.5(prettier@3.8.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + ts-dedent: 2.2.0 + vite: 5.2.12(@types/node@22.8.7)(lightningcss@1.32.0) + transitivePeerDependencies: + - esbuild + - rollup + - webpack + + '@storybook/csf-plugin@10.3.5(esbuild@0.27.7)(rollup@4.18.0)(storybook@10.3.5(prettier@3.8.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@5.2.12(@types/node@22.8.7)(lightningcss@1.32.0))': + dependencies: + storybook: 10.3.5(prettier@3.8.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + unplugin: 2.3.11 + optionalDependencies: + esbuild: 0.27.7 + rollup: 4.18.0 + vite: 5.2.12(@types/node@22.8.7)(lightningcss@1.32.0) + + '@storybook/global@5.0.0': {} + + '@storybook/icons@2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@storybook/react-dom-shim@10.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.3.5(prettier@3.8.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + storybook: 10.3.5(prettier@3.8.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + + '@storybook/react-vite@10.3.5(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.18.0)(storybook@10.3.5(prettier@3.8.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)(lightningcss@1.32.0))': + dependencies: + '@joshwooding/vite-plugin-react-docgen-typescript': 0.7.0(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)(lightningcss@1.32.0)) + '@rollup/pluginutils': 5.3.0(rollup@4.18.0) + '@storybook/builder-vite': 10.3.5(esbuild@0.27.7)(rollup@4.18.0)(storybook@10.3.5(prettier@3.8.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@5.2.12(@types/node@22.8.7)(lightningcss@1.32.0)) + '@storybook/react': 10.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.3.5(prettier@3.8.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.7.3) + empathic: 2.0.0 + magic-string: 0.30.21 + react: 18.3.1 + react-docgen: 8.0.3 + react-dom: 18.3.1(react@18.3.1) + resolve: 1.22.8 + storybook: 10.3.5(prettier@3.8.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + tsconfig-paths: 4.2.0 + vite: 5.2.12(@types/node@22.8.7)(lightningcss@1.32.0) + transitivePeerDependencies: + - esbuild + - rollup + - supports-color + - typescript + - webpack + + '@storybook/react@10.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.3.5(prettier@3.8.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.7.3)': + dependencies: + '@storybook/global': 5.0.0 + '@storybook/react-dom-shim': 10.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.3.5(prettier@3.8.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + react: 18.3.1 + react-docgen: 8.0.3 + react-docgen-typescript: 2.4.0(typescript@5.7.3) + react-dom: 18.3.1(react@18.3.1) + storybook: 10.3.5(prettier@3.8.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + optionalDependencies: + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + '@tailwindcss/container-queries@0.1.1(tailwindcss@3.4.3)': dependencies: tailwindcss: 3.4.3 + '@tailwindcss/node@4.2.2': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.20.1 + jiti: 2.6.1 + lightningcss: 1.32.0 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.2.2 + + '@tailwindcss/oxide-android-arm64@4.2.2': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.2.2': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.2.2': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.2.2': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.2.2': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.2.2': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.2.2': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.2.2': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.2.2': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.2.2': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.2.2': + optional: true + + '@tailwindcss/oxide@4.2.2': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.2.2 + '@tailwindcss/oxide-darwin-arm64': 4.2.2 + '@tailwindcss/oxide-darwin-x64': 4.2.2 + '@tailwindcss/oxide-freebsd-x64': 4.2.2 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.2 + '@tailwindcss/oxide-linux-arm64-gnu': 4.2.2 + '@tailwindcss/oxide-linux-arm64-musl': 4.2.2 + '@tailwindcss/oxide-linux-x64-gnu': 4.2.2 + '@tailwindcss/oxide-linux-x64-musl': 4.2.2 + '@tailwindcss/oxide-wasm32-wasi': 4.2.2 + '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2 + '@tailwindcss/oxide-win32-x64-msvc': 4.2.2 + + '@tailwindcss/vite@4.2.2(vite@5.2.12(@types/node@22.8.7)(lightningcss@1.32.0))': + dependencies: + '@tailwindcss/node': 4.2.2 + '@tailwindcss/oxide': 4.2.2 + tailwindcss: 4.2.2 + vite: 5.2.12(@types/node@22.8.7)(lightningcss@1.32.0) + + '@testing-library/jest-dom@6.9.1': + dependencies: + '@adobe/css-tools': 4.4.4 + aria-query: 5.3.2 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + picocolors: 1.1.1 + redent: 3.0.0 + + '@testing-library/user-event@14.6.1': {} + '@tootallnate/quickjs-emscripten@0.23.0': {} '@total-typescript/ts-reset@0.6.1': {} @@ -11589,6 +12495,27 @@ snapshots: '@types/autosize@4.0.3': {} + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.28.0 + + '@types/babel__generator@7.27.0': + dependencies: + '@babel/types': 7.29.0 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + + '@types/babel__traverse@7.28.0': + dependencies: + '@babel/types': 7.29.0 + '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 @@ -11596,6 +12523,11 @@ snapshots: '@types/body-scroll-lock@3.1.2': {} + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + '@types/compression@1.8.1': dependencies: '@types/express': 4.17.21 @@ -11621,6 +12553,10 @@ snapshots: dependencies: '@types/ms': 0.7.34 + '@types/deep-eql@4.0.2': {} + + '@types/doctrine@0.0.9': {} + '@types/estree-jsx@1.0.0': dependencies: '@types/estree': 1.0.5 @@ -11733,6 +12669,8 @@ snapshots: '@types/prop-types': 15.7.12 csstype: 3.1.3 + '@types/resolve@1.20.6': {} + '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 @@ -12055,8 +12993,32 @@ snapshots: '@vanilla-extract/private@1.0.3': {} + '@vitest/expect@3.2.4': + dependencies: + '@types/chai': 5.2.3 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + tinyrainbow: 2.0.0 + + '@vitest/pretty-format@3.2.4': + dependencies: + tinyrainbow: 2.0.0 + + '@vitest/spy@3.2.4': + dependencies: + tinyspy: 4.0.4 + + '@vitest/utils@3.2.4': + dependencies: + '@vitest/pretty-format': 3.2.4 + loupe: 3.2.1 + tinyrainbow: 2.0.0 + '@web3-storage/multipart-parser@1.0.0': {} + '@webcontainer/env@1.1.1': {} + '@zxing/text-encoding@0.9.0': optional: true @@ -12225,12 +13187,18 @@ snapshots: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 + assertion-error@2.0.1: {} + ast-types-flow@0.0.8: {} ast-types@0.13.4: dependencies: tslib: 2.8.1 + ast-types@0.16.1: + dependencies: + tslib: 2.8.1 + astring@1.8.6: {} async-function@1.0.0: {} @@ -12374,6 +13342,10 @@ snapshots: dependencies: semver: 7.7.4 + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + bytes@3.0.0: {} bytes@3.1.2: {} @@ -12470,6 +13442,14 @@ snapshots: ccount@2.0.1: {} + chai@5.3.3: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.3 + deep-eql: 5.0.2 + loupe: 3.2.1 + pathval: 2.0.1 + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -12496,6 +13476,8 @@ snapshots: charm@0.1.2: {} + check-error@2.1.3: {} + cheerio-select@2.1.0: dependencies: boolbase: 1.0.0 @@ -12676,6 +13658,8 @@ snapshots: convert-source-map@1.9.0: {} + convert-source-map@2.0.0: {} + cookie-signature@1.0.6: {} cookie-signature@1.2.2: {} @@ -12729,6 +13713,8 @@ snapshots: css-what@6.1.0: {} + css.escape@1.5.1: {} + cssesc@3.0.0: {} cssstyle@5.3.7: @@ -12817,6 +13803,8 @@ snapshots: dependencies: character-entities: 2.0.2 + deep-eql@5.0.2: {} + deep-is@0.1.4: {} deep-object-diff@1.1.9: {} @@ -12825,6 +13813,13 @@ snapshots: deepmerge@4.3.1: {} + default-browser-id@5.0.1: {} + + default-browser@5.5.0: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.1 + defaults@1.0.4: dependencies: clone: 1.0.4 @@ -12835,6 +13830,8 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + define-lazy-prop@3.0.0: {} + define-properties@1.2.0: dependencies: has-property-descriptors: 1.0.2 @@ -12864,6 +13861,8 @@ snapshots: destroy@1.2.0: {} + detect-libc@2.1.2: {} + detect-node-es@1.1.0: {} devlop@1.1.0: @@ -12890,6 +13889,12 @@ snapshots: dependencies: esutils: 2.0.3 + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + dom-accessibility-api@0.6.3: {} + dom-helpers@5.2.1: dependencies: '@babel/runtime': 7.24.6 @@ -12988,6 +13993,11 @@ snapshots: dependencies: once: 1.4.0 + enhanced-resolve@5.20.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.2 + enquirer@2.3.6: dependencies: ansi-colors: 4.1.3 @@ -13497,6 +14507,8 @@ snapshots: '@types/estree-jsx': 1.0.0 '@types/unist': 2.0.6 + estree-walker@2.0.2: {} + estree-walker@3.0.3: dependencies: '@types/estree': 1.0.5 @@ -14284,6 +15296,8 @@ snapshots: is-deflate@1.0.0: {} + is-docker@3.0.0: {} + is-extglob@2.1.1: {} is-finalizationregistry@1.1.1: @@ -14306,6 +15320,10 @@ snapshots: is-hexadecimal@2.0.1: {} + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + is-interactive@1.0.0: {} is-map@2.0.3: {} @@ -14416,6 +15434,10 @@ snapshots: call-bound: 1.0.4 get-intrinsic: 1.3.0 + is-wsl@3.1.1: + dependencies: + is-inside-container: 1.0.0 + isarray@1.0.0: {} isarray@2.0.5: {} @@ -14587,6 +15609,55 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + lilconfig@2.1.0: {} lilconfig@3.1.1: {} @@ -14638,6 +15709,8 @@ snapshots: dependencies: js-tokens: 4.0.0 + loupe@3.2.1: {} + lru-cache@10.2.2: {} lru-cache@11.3.3: {} @@ -14656,6 +15729,10 @@ snapshots: luxon@3.7.2: {} + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + make-fetch-happen@15.0.5: dependencies: '@gar/promise-retry': 1.0.3 @@ -15443,6 +16520,8 @@ snapshots: mimic-fn@2.1.0: {} + min-indent@1.0.1: {} + minimatch@10.2.5: dependencies: brace-expansion: 5.0.5 @@ -15826,6 +16905,13 @@ snapshots: dependencies: mimic-fn: 2.1.0 + open@10.2.0: + dependencies: + default-browser: 5.5.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + opentelemetry-instrumentation-remix@0.7.1(@opentelemetry/api@1.9.0): dependencies: '@opentelemetry/api': 1.9.0 @@ -16001,6 +17087,8 @@ snapshots: pathe@2.0.3: {} + pathval@2.0.1: {} + peberminta@0.9.0: {} peek-stream@1.1.3: @@ -16455,6 +17543,25 @@ snapshots: '@types/node': 22.8.7 '@types/react': 18.3.3 + react-docgen-typescript@2.4.0(typescript@5.7.3): + dependencies: + typescript: 5.7.3 + + react-docgen@8.0.3: + dependencies: + '@babel/core': 7.29.0 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.28.0 + '@types/doctrine': 0.0.9 + '@types/resolve': 1.20.6 + doctrine: 3.0.0 + resolve: 1.22.8 + strip-indent: 4.1.1 + transitivePeerDependencies: + - supports-color + react-dom@18.3.1(react@18.3.1): dependencies: loose-envify: 1.4.0 @@ -16576,6 +17683,19 @@ snapshots: readdirp@4.1.2: {} + recast@0.23.11: + dependencies: + ast-types: 0.16.1 + esprima: 4.0.1 + source-map: 0.6.1 + tiny-invariant: 1.3.3 + tslib: 2.8.1 + + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + redux@4.2.1: dependencies: '@babel/runtime': 7.24.6 @@ -16737,7 +17857,7 @@ snapshots: resolve@1.22.8: dependencies: - is-core-module: 2.13.1 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -16787,6 +17907,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.18.0 fsevents: 2.3.3 + run-applescript@7.1.0: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -17044,6 +18166,30 @@ snapshots: es-errors: 1.3.0 internal-slot: 1.1.0 + storybook@10.3.5(prettier@3.8.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@storybook/global': 5.0.0 + '@storybook/icons': 2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@testing-library/jest-dom': 6.9.1 + '@testing-library/user-event': 14.6.1 + '@vitest/expect': 3.2.4 + '@vitest/spy': 3.2.4 + '@webcontainer/env': 1.1.1 + esbuild: 0.27.7 + open: 10.2.0 + recast: 0.23.11 + semver: 7.7.4 + use-sync-external-store: 1.6.0(react@18.3.1) + ws: 8.20.0 + optionalDependencies: + prettier: 3.8.2 + transitivePeerDependencies: + - '@testing-library/dom' + - bufferutil + - react + - react-dom + - utf-8-validate + stream-shift@1.0.1: {} stream-slice@0.1.2: {} @@ -17167,6 +18313,12 @@ snapshots: strip-final-newline@2.0.0: {} + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 + + strip-indent@4.1.1: {} + strip-json-comments@3.1.1: {} style-to-object@0.4.1: @@ -17233,6 +18385,10 @@ snapshots: transitivePeerDependencies: - ts-node + tailwindcss@4.2.2: {} + + tapable@2.3.2: {} + tar-fs@2.1.1: dependencies: chownr: 1.1.4 @@ -17287,6 +18443,10 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 + tinyrainbow@2.0.0: {} + + tinyspy@4.0.4: {} + tlds@1.252.0: {} tldts-core@7.0.28: {} @@ -17327,6 +18487,8 @@ snapshots: dependencies: typescript: 5.7.3 + ts-dedent@2.2.0: {} + ts-interface-checker@0.1.13: {} tsc-alias@1.8.16: @@ -17349,6 +18511,12 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 + tsconfig-paths@4.2.0: + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + tslib@1.9.3: {} tslib@2.8.1: {} @@ -17561,6 +18729,13 @@ snapshots: unpipe@1.0.0: {} + unplugin@2.3.11: + dependencies: + '@jridgewell/remapping': 2.3.5 + acorn: 8.16.0 + picomatch: 4.0.3 + webpack-virtual-modules: 0.6.2 + unrs-resolver@1.11.1: dependencies: napi-postinstall: 0.3.4 @@ -17627,6 +18802,10 @@ snapshots: optionalDependencies: '@types/react': 18.3.3 + use-sync-external-store@1.6.0(react@18.3.1): + dependencies: + react: 18.3.1 + util-deprecate@1.0.2: {} util@0.12.5: @@ -17712,13 +18891,13 @@ snapshots: - supports-color - terser - vite-tsconfig-paths@4.3.2(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)): + vite-tsconfig-paths@4.3.2(typescript@5.7.3)(vite@5.2.12(@types/node@22.8.7)(lightningcss@1.32.0)): dependencies: - debug: 4.3.7 + debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.0(typescript@5.7.3) optionalDependencies: - vite: 5.2.12(@types/node@22.8.7) + vite: 5.2.12(@types/node@22.8.7)(lightningcss@1.32.0) transitivePeerDependencies: - supports-color - typescript @@ -17732,7 +18911,7 @@ snapshots: '@types/node': 22.8.7 fsevents: 2.3.3 - vite@5.2.12(@types/node@22.8.7): + vite@5.2.12(@types/node@22.8.7)(lightningcss@1.32.0): dependencies: esbuild: 0.20.2 postcss: 8.4.38 @@ -17740,6 +18919,7 @@ snapshots: optionalDependencies: '@types/node': 22.8.7 fsevents: 2.3.3 + lightningcss: 1.32.0 vizion@2.2.1: dependencies: @@ -17768,6 +18948,8 @@ snapshots: webidl-conversions@8.0.1: {} + webpack-virtual-modules@0.6.2: {} + whatwg-encoding@3.1.1: dependencies: iconv-lite: 0.6.3 @@ -17897,6 +19079,10 @@ snapshots: ws@8.20.0: {} + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.1 + xml-name-validator@5.0.0: {} xmlchars@2.2.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 089f375c..17d8b195 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -48,6 +48,7 @@ catalog: "@radix-ui/react-dropdown-menu": ^2.1.16 "@radix-ui/react-navigation-menu": ^1.2.14 "@radix-ui/react-popover": ^1.1.15 + "@radix-ui/react-presence": ^1.1.5 "@radix-ui/react-slot": ^1.2.4 "@radix-ui/react-visually-hidden": ^1.2.4 "@react-email/components": ^0.0.28 @@ -58,6 +59,8 @@ catalog: "@remix-run/react": ~2.9.2 "@remix-run/serve": ~2.9.2 "@sentry/remix": ^8.37.1 + "@storybook/react": ^10.3.5 + "@storybook/react-vite": ^10.3.5 "@tailwindcss/container-queries": ^0.1.1 "@total-typescript/ts-reset": ^0.6.1 "@types/autosize": ^4.0.1 @@ -138,6 +141,7 @@ catalog: resend: ^4.0.1-alpha.0 scroll-into-view-if-needed: ^3.1.0 source-map-support: ^0.5.21 + storybook: ^10.3.5 tailwindcss: ^3.3.3 tiny-invariant: ^1.3.1 tsc-alias: ^1.8.16 @@ -149,3 +153,8 @@ catalog: vite-tsconfig-paths: ^4.3.2 zod: ^3.22.2 zod-form-data: ^2.0.1 + +catalogs: + tailwindcss4: + "@tailwindcss/vite": ^4.2.2 + tailwindcss: ^4.2.2 From db38f1e510ca4cdf9aea2cd6639ab2745b53c290 Mon Sep 17 00:00:00 2001 From: Simon Relet Date: Fri, 1 May 2026 23:25:47 +0200 Subject: [PATCH 08/16] chore(admin): Upgrade to Tailwind 4 --- .vscode/settings.json | 2 +- apps/admin/Dockerfile | 4 +- apps/admin/package.json | 10 +- apps/admin/postcss.config.js | 7 - apps/admin/prettier.config.js | 2 +- apps/admin/scripts/generate-theme.ts | 138 ++++- apps/admin/src/animals/item.tsx | 12 +- apps/admin/src/animals/pictures/form.tsx | 4 +- apps/admin/src/core/actions.tsx | 22 +- apps/admin/src/core/controllers/filters.tsx | 10 +- apps/admin/src/core/controllers/paginator.tsx | 2 +- .../sort-and-filters-floating-action.tsx | 10 +- apps/admin/src/core/controllers/steps.tsx | 6 +- apps/admin/src/core/data-display/avatar.tsx | 2 +- apps/admin/src/core/data-display/empty.tsx | 9 +- .../admin/src/core/data-display/file-item.tsx | 2 +- apps/admin/src/core/data-display/helper.tsx | 4 +- .../src/core/data-display/icon-inline.tsx | 2 +- apps/admin/src/core/data-display/image.tsx | 24 +- apps/admin/src/core/data-display/item.tsx | 4 +- apps/admin/src/core/data-display/receipt.tsx | 2 +- .../core/form-elements/base-text-input.tsx | 18 +- .../admin/src/core/form-elements/checkbox.tsx | 4 +- apps/admin/src/core/form-elements/form.tsx | 6 +- .../src/core/form-elements/image-input.tsx | 8 +- .../src/core/form-elements/input-choice.tsx | 2 +- apps/admin/src/core/form-elements/radio.tsx | 4 +- .../src/core/form-elements/resource-input.tsx | 20 +- apps/admin/src/core/form-elements/switch.tsx | 4 +- .../src/core/form-elements/toggle-input.tsx | 4 +- apps/admin/src/core/layout/auth-page.tsx | 2 +- apps/admin/src/core/layout/avatar-card.tsx | 6 +- apps/admin/src/core/layout/card.tsx | 6 +- apps/admin/src/core/layout/page.tsx | 4 +- apps/admin/src/core/layout/side-bar.tsx | 12 +- apps/admin/src/core/layout/tab-bar.tsx | 22 +- apps/admin/src/core/loaders/spinner.tsx | 4 +- apps/admin/src/core/popovers/dialog.tsx | 8 +- .../src/core/popovers/dropdown-sheet.tsx | 13 +- apps/admin/src/core/popovers/overlay.tsx | 2 +- apps/admin/src/core/screen-size.tsx | 10 - apps/admin/src/events/avatar.tsx | 6 +- apps/admin/src/root.tsx | 10 +- apps/admin/src/routes/[manifest.json].tsx | 6 +- .../routes/_layout.activity.$id/card-diff.tsx | 2 +- .../routes/_layout.activity._index/item.tsx | 8 +- .../routes/_layout.activity._index/route.tsx | 4 +- .../_layout.animals.$id._index/route.tsx | 4 +- .../situation-card.tsx | 12 +- .../_layout.animals.$id.edit.pictures.tsx | 2 +- .../_layout.animals.$id.edit.profile.tsx | 2 +- .../_layout.animals.$id.edit.situation.tsx | 2 +- .../src/routes/_layout.animals._index.tsx | 4 +- .../routes/_layout.animals.new.pictures.tsx | 2 +- .../routes/_layout.animals.new.profile.tsx | 2 +- .../routes/_layout.animals.new.situation.tsx | 2 +- .../src/routes/_layout.breeds.$id.edit.tsx | 2 +- .../src/routes/_layout.breeds._index.tsx | 8 +- apps/admin/src/routes/_layout.breeds.new.tsx | 2 +- .../src/routes/_layout.colors.$id.edit.tsx | 2 +- .../src/routes/_layout.colors._index.tsx | 8 +- apps/admin/src/routes/_layout.colors.new.tsx | 2 +- .../_layout.dashboard/card-active-animals.tsx | 2 +- .../card-managed-animals.tsx | 2 +- .../card-stand-size-booking.tsx | 4 +- .../card-untreated-applications.tsx | 6 +- .../src/routes/_layout.events.$id.edit.tsx | 2 +- .../src/routes/_layout.events._index.tsx | 6 +- apps/admin/src/routes/_layout.events.new.tsx | 2 +- .../route.tsx | 2 +- .../card-form.tsx | 2 +- .../routes/_layout.foster-families._index.tsx | 8 +- .../_layout.foster-families.new/card-form.tsx | 2 +- apps/admin/src/routes/_layout.me._index.tsx | 4 +- .../src/routes/_layout.me.change-password.tsx | 2 +- .../src/routes/_layout.me.edit-profile.tsx | 2 +- .../routes/_layout.press-articles._index.tsx | 6 +- .../src/routes/_layout.press-articles.add.tsx | 2 +- .../header.tsx | 14 +- .../route.tsx | 2 +- .../card-list.tsx | 2 +- .../_layout.show.applications._index/item.tsx | 8 +- .../route.tsx | 4 +- .../card-exhibitor-list.tsx | 2 +- .../exhibitor-item.tsx | 4 +- .../item.tsx | 4 +- .../card-billing.tsx | 16 +- .../card-documents.tsx | 6 +- .../route.tsx | 14 +- .../fieldset-documents.tsx | 6 +- .../_layout.show.exhibitors._index/route.tsx | 4 +- .../_layout.show.exhibitors._index/rows.tsx | 10 +- .../card-list.tsx | 2 +- .../_layout.show.sponsors._index/item.tsx | 4 +- .../_layout.show.sponsors._index/route.tsx | 4 +- .../application-item.tsx | 4 +- .../exhibitor-item.tsx | 4 +- .../route.tsx | 16 +- .../_layout.show.stand-sizes._index/item.tsx | 4 +- apps/admin/src/routes/_layout.tsx | 26 +- .../src/routes/_layout.users.$id._index.tsx | 4 +- .../src/routes/_layout.users.$id.edit.tsx | 2 +- .../admin/src/routes/_layout.users._index.tsx | 8 +- apps/admin/src/routes/_layout.users.new.tsx | 2 +- .../animals.$id.pictures.$pictureId.tsx | 14 +- apps/admin/src/routes/downloads.animals.tsx | 2 +- .../src/routes/resources.breed/input.tsx | 7 + .../src/routes/resources.color/input.tsx | 7 + .../routes/resources.foster-family/input.tsx | 7 + .../routes/resources.global-search/input.tsx | 17 +- .../src/routes/resources.manager/input.tsx | 7 + .../resources.pick-up-location/input.tsx | 7 + .../src/show/exhibitors/status-helper.tsx | 2 +- apps/admin/src/styles/animations.css | 34 ++ apps/admin/src/styles/custom-scrollbars.css | 19 + .../src/{tailwind.css => styles/globals.css} | 42 +- apps/admin/src/styles/grid-columns.css | 13 + apps/admin/src/styles/icon-sizes.css | 7 + apps/admin/src/styles/inherit-background.css | 14 + apps/admin/src/styles/main.css | 13 + apps/admin/src/styles/safe-areas.css | 71 +++ apps/admin/src/styles/states.css | 53 ++ apps/admin/src/styles/text-styles.css | 78 +++ apps/admin/src/styles/theme.css | 48 ++ apps/admin/tailwind.config.ts | 471 ------------------ apps/admin/vite.config.ts | 3 + libs/tailwindcss-peekaboo/src/peekaboo.css | 48 +- .../src/peekaboo.stories.tsx | 8 +- .../tailwindcss-peekaboo/storybook/styles.css | 2 +- pnpm-lock.yaml | 272 ++++------ pnpm-workspace.yaml | 6 +- 131 files changed, 997 insertions(+), 1034 deletions(-) delete mode 100644 apps/admin/postcss.config.js create mode 100644 apps/admin/src/styles/animations.css create mode 100644 apps/admin/src/styles/custom-scrollbars.css rename apps/admin/src/{tailwind.css => styles/globals.css} (71%) create mode 100644 apps/admin/src/styles/grid-columns.css create mode 100644 apps/admin/src/styles/icon-sizes.css create mode 100644 apps/admin/src/styles/inherit-background.css create mode 100644 apps/admin/src/styles/main.css create mode 100644 apps/admin/src/styles/safe-areas.css create mode 100644 apps/admin/src/styles/states.css create mode 100644 apps/admin/src/styles/text-styles.css create mode 100644 apps/admin/src/styles/theme.css delete mode 100644 apps/admin/tailwind.config.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index 7136a91d..935ec10e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -19,7 +19,7 @@ }, "tailwindCSS.classFunctions": ["cn"], "tailwindCSS.experimental.configFile": { - "apps/admin/tailwind.config.ts": "apps/admin/**", + "apps/admin/src/styles/main.css": "apps/admin/**", "apps/website/tailwind.config.ts": "apps/website/**", "apps/show/tailwind.config.ts": "apps/show/**", "libs/tailwindcss-peekaboo/storybook/styles.css": "libs/tailwindcss-peekaboo/**" diff --git a/apps/admin/Dockerfile b/apps/admin/Dockerfile index ffff74bc..c29b43a9 100644 --- a/apps/admin/Dockerfile +++ b/apps/admin/Dockerfile @@ -40,7 +40,7 @@ COPY libs/password/package.json libs/password/ COPY libs/prisma/package.json libs/prisma/ COPY libs/react-primitives/package.json libs/react-primitives/ COPY libs/search-params-io/package.json libs/search-params-io/ -COPY libs/tailwind-animation/package.json libs/tailwind-animation/ +COPY libs/tailwindcss-peekaboo/package.json libs/tailwindcss-peekaboo/ COPY libs/zod-utils/package.json libs/zod-utils/ COPY apps/admin/package.json apps/admin/ @@ -61,7 +61,7 @@ COPY libs/password libs/password COPY libs/prisma libs/prisma COPY libs/react-primitives libs/react-primitives COPY libs/search-params-io libs/search-params-io -COPY libs/tailwind-animation libs/tailwind-animation +COPY libs/tailwindcss-peekaboo libs/tailwindcss-peekaboo COPY libs/zod-utils libs/zod-utils COPY apps/admin apps/admin diff --git a/apps/admin/package.json b/apps/admin/package.json index faeaad50..f5667865 100644 --- a/apps/admin/package.json +++ b/apps/admin/package.json @@ -57,9 +57,9 @@ "croner": "catalog:", "d3-dsv": "catalog:", "downshift": "catalog:", + "es-toolkit": "catalog:", "history": "catalog:", "isbot": "catalog:", - "es-toolkit": "catalog:", "luxon": "catalog:", "metascraper": "catalog:", "metascraper-date": "catalog:", @@ -80,10 +80,11 @@ }, "devDependencies": { "@animeaux/dev-tools": "workspace:*", - "@animeaux/tailwind-animation": "workspace:*", + "@animeaux/tailwindcss-peekaboo": "workspace:*", "@faker-js/faker": "catalog:", "@remix-run/dev": "catalog:", - "@tailwindcss/container-queries": "catalog:", + "@tailwindcss/node": "catalog:tailwindcss4", + "@tailwindcss/vite": "catalog:tailwindcss4", "@types/autosize": "catalog:", "@types/cookie-signature": "catalog:", "@types/d3-dsv": "catalog:", @@ -91,7 +92,6 @@ "@types/node": "catalog:", "@types/react": "catalog:", "@types/react-dom": "catalog:", - "autoprefixer": "catalog:", "chokidar": "catalog:", "dotenv-flow": "catalog:", "eslint": "catalog:", @@ -100,7 +100,7 @@ "npm-run-all": "catalog:", "prettier": "catalog:", "prettier-plugin-tailwindcss": "catalog:", - "tailwindcss": "catalog:", + "tailwindcss": "catalog:tailwindcss4", "tsx": "catalog:", "type-fest": "catalog:", "typescript": "catalog:", diff --git a/apps/admin/postcss.config.js b/apps/admin/postcss.config.js deleted file mode 100644 index d9bc7d09..00000000 --- a/apps/admin/postcss.config.js +++ /dev/null @@ -1,7 +0,0 @@ -export default { - plugins: { - "tailwindcss/nesting": {}, - tailwindcss: {}, - autoprefixer: {}, - }, -} diff --git a/apps/admin/prettier.config.js b/apps/admin/prettier.config.js index 9bcbf4e4..63983ae3 100644 --- a/apps/admin/prettier.config.js +++ b/apps/admin/prettier.config.js @@ -1,5 +1,5 @@ import { createConfig } from "@animeaux/dev-tools/prettier" export default createConfig({ - tailwindConfig: "./tailwind.config.ts", + tailwindStylesheet: "./src/styles/main.css", }) diff --git a/apps/admin/scripts/generate-theme.ts b/apps/admin/scripts/generate-theme.ts index ac0f350d..760e8f6e 100644 --- a/apps/admin/scripts/generate-theme.ts +++ b/apps/admin/scripts/generate-theme.ts @@ -1,37 +1,51 @@ -import { mkdir, writeFile } from "node:fs/promises" +import { mkdir, readFile, writeFile } from "node:fs/promises" import { dirname, resolve } from "node:path" import { fileURLToPath } from "node:url" -import { colors, screens, spacing } from "../tailwind.config.js" +import { __unstable__loadDesignSystem as loadDesignSystem } from "@tailwindcss/node" +import { orderBy } from "es-toolkit/array" +import type { __unstable__loadDesignSystem as loadDesignSystemBase } from "tailwindcss" +import invariant from "tiny-invariant" + import { relativeToCwd, safelyReadFile } from "./shared.js" const FILENAME = fileURLToPath(import.meta.url) const DIRNAME = dirname(FILENAME) const SCRIPT_NAME = relativeToCwd(FILENAME) +const STYLES_DIRECTORY = resolve(DIRNAME, "../src/styles") +const MAIN_STYLE_FILE = resolve(STYLES_DIRECTORY, "main.css") const DEST_DIRECTORY = resolve(DIRNAME, "../src/generated") const DEST_FILE = resolve(DEST_DIRECTORY, "theme.ts") +/** + * Matches values for the `` CSS type. + * We only support unitless `0`, rem and px. + * + * @see https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/length + */ +const CSS_LENGTH_REGEXP = /(?-?\d*\.?\d+)(?.*)/ + console.log("Building...") +const mainCss = await readFile(MAIN_STYLE_FILE, "utf-8") + +// The type cast is required because @tailwindcss/node's `loadDesignSystem` +// types are broken (`design.theme: any`). We use tailwindcss's +// `loadDesignSystem` types because it's used internally and its types are fine. +const design = (await loadDesignSystem(mainCss, { + base: STYLES_DIRECTORY, +})) as Awaited> + // Ensure the destination directory exists. await mkdir(DEST_DIRECTORY, { recursive: true }) -// Add here values we need in code. -// Only add what is actualy needed to keep a minimal size. -const theme = { - screens, - colors, - spacing: Object.fromEntries( - Object.entries(spacing).map(([key, value]) => [ - key, - Number(value.replace("px", "")), - ]), - ), -} - const content = `// This file is generated by ${SCRIPT_NAME} -export type ScreenSize = keyof typeof theme.screens -export const theme = ${JSON.stringify(theme, null, 2)}` +${getBreakpoints()} + +${getColors()} + +${getSpacing()} +` const currentContent = await safelyReadFile(DEST_FILE) if (currentContent === content) { @@ -44,3 +58,93 @@ if (currentContent === content) { await writeFile(DEST_FILE, content) console.info(`Built theme (${relativeToCwd(DEST_FILE)})`) + +function getBreakpoints() { + const breakpoints = design.theme.namespace("--breakpoint") + + const sortedEntries = orderBy( + Array.from(breakpoints.entries()) + // `null` is used as key for a property with the namespace's name (e.g. + // `--breakpoint: `). + // For breakpoints this shouldn't happen. + .filter((entry): entry is [string, string] => entry[0] != null) + .map( + ([breakpoint, length]) => + [breakpoint, getLengthValuePx(length)] as const, + ), + [([_breakpoint, valuePx]) => valuePx], + ["desc"], + ) + + return `export type Breakpoint = typeof Breakpoint.names[number] + +export namespace Breakpoint { + /** Breakpoint names sorted by descending value. */ + export const names = ${JSON.stringify( + sortedEntries.map(([breakpoint]) => breakpoint), + )} as const + + /** Breakpoint values in pixels. */ + export const value = ${JSON.stringify(Object.fromEntries(sortedEntries), null, 2)} as const +}` +} + +function getColors() { + const colors = design.theme.namespace("--color") + + return `export namespace Color { + export const primary = ${JSON.stringify(colors.get("blue-500"))} + export const white = ${JSON.stringify(colors.get("white"))} +}` +} + +function getSpacing() { + const spacings = design.theme.namespace("--spacing") + + // A property with the namespace's name has `null` as key. (e.g. + // `--spacing: `). + const spacing = spacings.get(null) + + invariant(spacing != null, "A `--spacing` definition is missing in the theme") + + return `export namespace Spacing { + export const unitPx = ${getLengthValuePx(spacing)} +}` +} + +/** + * Returns the given CSS length in pixels. + * + * @param length expressed with the `` CSS type. + * @returns The value in pixels + * @see https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/length + */ +function getLengthValuePx(length: string) { + length = length.trim() + + const match = length.match(CSS_LENGTH_REGEXP) + + if (match == null || match?.groups?.value == null) { + throw new Error(`Invalid CSS length from theme: "${length}"`) + } + + const value = Number(match.groups.value) + + // The unit is optional when the value is `0`. + // See https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/length#syntax + const unit = match.groups.unit || "px" + + switch (unit) { + case "px": { + return value + } + + case "rem": { + return 16 * value + } + + default: { + throw new Error(`Unsupported length unit: "${unit}" in "${length}"`) + } + } +} diff --git a/apps/admin/src/animals/item.tsx b/apps/admin/src/animals/item.tsx index 84216460..43930c44 100644 --- a/apps/admin/src/animals/item.tsx +++ b/apps/admin/src/animals/item.tsx @@ -94,7 +94,7 @@ export function AnimalItem({ to={Routes.animals.id(animal.id).toString()} className={cn( className, - "flex flex-col gap-0.5 rounded-1.5 bg-white p-0.5 focus-visible:z-10 focus-visible:focus-compact-blue-400 hover:bg-gray-100 md:rounded-2 md:p-1", + "flex flex-col gap-0.5 rounded-1.5 bg-white p-0.5 hover:bg-gray-100 focus-visible:z-10 focus-visible:focus-ring md:rounded-2 md:p-1", )} > @@ -139,13 +139,13 @@ export function AnimalItem({ - + {getAnimalDisplayName(animal)}

{animal.manager != null ? ( -

+

{animal.manager.displayName}

) : null} @@ -172,7 +172,7 @@ export function AnimalSmallItem({ to={Routes.animals.id(animal.id).toString()} className={cn( className, - "grid grid-cols-[auto_minmax(0px,1fr)_auto] items-center gap-1 rounded-0.5 bg-white px-0.5 py-1 focus-visible:z-10 focus-visible:focus-compact-blue-400 hover:bg-gray-100 md:px-1", + "grid grid-cols-[auto_minmax(0px,1fr)_auto] items-center gap-1 rounded-0.5 bg-white px-0.5 py-1 hover:bg-gray-100 focus-visible:z-10 focus-visible:focus-ring md:px-1", )} > @@ -200,8 +200,8 @@ export function AnimalSmallItem({ className={cn( "flex", hasError - ? "text-red-500 text-caption-emphasis" - : "text-gray-500 text-caption-default", + ? "text-caption-emphasis text-red-500" + : "text-caption-default text-gray-500", )} > {secondaryLabel} diff --git a/apps/admin/src/animals/pictures/form.tsx b/apps/admin/src/animals/pictures/form.tsx index 48f069bd..d5e72f41 100644 --- a/apps/admin/src/animals/pictures/form.tsx +++ b/apps/admin/src/animals/pictures/form.tsx @@ -254,11 +254,11 @@ function ImageItem({
) : null} diff --git a/apps/admin/src/core/actions.tsx b/apps/admin/src/core/actions.tsx index adeb39f0..26480810 100644 --- a/apps/admin/src/core/actions.tsx +++ b/apps/admin/src/core/actions.tsx @@ -34,7 +34,7 @@ export const Action = Object.assign( {...rest} ref={ref} className={cn( - "relative flex flex-none items-center justify-center gap-0.5 duration-100 ease-in-out active:scale-95 disabled:opacity-50 focus-visible:focus-spaced-blue-400", + "relative flex flex-none items-center justify-center gap-0.5 ease-in-out focus-ring-spaced focus-visible:focus-ring active:scale-95 disabled:opacity-disabled", VARIANT_CLASS_NAME[variant]({ isIconOnly }), COLOR_CLASS_NAMES[variant][color], className, @@ -48,11 +48,11 @@ export const Action = Object.assign( return ( - + ) }, @@ -61,7 +61,7 @@ export const Action = Object.assign( className, ...props }: React.ComponentPropsWithoutRef) { - return + return }, }, ) @@ -72,21 +72,19 @@ const VARIANT_CLASS_NAME: Record< > = { primary: ({ isIconOnly }) => cn( - "h-4 min-w-[40px] rounded-0.5 transition-[background-color,transform] text-body-emphasis", + "h-4 min-w-4 rounded-0.5 text-body-emphasis transition-[background-color,scale]", isIconOnly ? "px-1" : "px-2", ), secondary: ({ isIconOnly }) => cn( - "h-4 min-w-[40px] rounded-0.5 transition-[background-color,transform] text-body-emphasis", + "h-4 min-w-4 rounded-0.5 text-body-emphasis transition-[background-color,scale]", isIconOnly ? "px-1" : "px-2", ), text: () => - cn( - "h-2 min-w-[20px] rounded-0.5 transition-[color,transform] text-body-emphasis", - ), + cn("h-2 min-w-2 rounded-0.5 text-body-emphasis transition-[color,scale]"), translucid: ({ isIconOnly }) => cn( - "h-4 min-w-[40px] rounded-0.5 bg-opacity-50 transition-[background-color,transform] text-body-emphasis hover:bg-opacity-70", + "h-4 min-w-4 rounded-0.5 text-body-emphasis transition-[background-color,scale]", isIconOnly ? "px-1" : "px-2", ), } @@ -117,7 +115,7 @@ const COLOR_CLASS_NAMES: Record> = { red: cn("text-red-500 hover:text-red-600"), }, translucid: { - black: cn("bg-gray-700 text-white"), + black: cn("bg-gray-700/50 text-white hover:bg-gray-700/70"), blue: cn(""), gray: cn(""), green: cn(""), @@ -137,7 +135,7 @@ export const ProseInlineAction = forwardRef< {...rest} ref={ref} className={cn( - "relative after:absolute after:bottom-0 after:left-0 after:w-full after:border-b after:border-blue-500 focus-visible:focus-spaced-blue-400", + "relative focus-ring-spaced after:absolute after:bottom-0 after:left-0 after:w-full after:border-b after:border-blue-500 focus-visible:focus-ring", CLASS_NAME_BY_VARIANT[variant], className, )} diff --git a/apps/admin/src/core/controllers/filters.tsx b/apps/admin/src/core/controllers/filters.tsx index 29b4340b..a5cb0856 100644 --- a/apps/admin/src/core/controllers/filters.tsx +++ b/apps/admin/src/core/controllers/filters.tsx @@ -89,13 +89,13 @@ Filters.Filter = function Filter({ openedFilter === value ? null : value, ) } - className="group/filter grid w-full grid-flow-col grid-cols-1 items-start rounded-0.5 text-left focus:z-10 focus-visible:focus-spaced-blue-400" + className="group/filter grid w-full grid-flow-col grid-cols-1 items-start rounded-0.5 text-left focus-ring-spaced focus:z-10 focus-visible:focus-ring" > diff --git a/apps/admin/src/core/controllers/paginator.tsx b/apps/admin/src/core/controllers/paginator.tsx index f1f457ba..a098d8a9 100644 --- a/apps/admin/src/core/controllers/paginator.tsx +++ b/apps/admin/src/core/controllers/paginator.tsx @@ -72,7 +72,7 @@ function PaginatorItem({ - + @@ -26,12 +26,12 @@ export function SortAndFiltersFloatingAction({ // Use absolute instead of fixed to avoid performances issues when // mobile browser's height change due to scroll. "absolute", - "bottom-0 left-0 right-0 top-0 z-30 overscroll-none bg-black/20", + "top-0 right-0 bottom-0 left-0 z-30 overscroll-none bg-black/20", )} /> - -
+ +
{hasSort ? "Trier et filtrer" : "Filtrer"} @@ -47,7 +47,7 @@ export function SortAndFiltersFloatingAction({ {children} -