diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml new file mode 100644 index 00000000000..58ae05e5485 --- /dev/null +++ b/.github/workflows/playwright.yml @@ -0,0 +1,80 @@ +name: E2E tests +on: + push: + branches: [master, staging, e2e-tests] # TODO: remove e2e-tests branch after testing + pull_request: + branches: [master, staging, e2e-tests] # TODO: remove e2e-tests branch after testing +jobs: + playwright: + runs-on: ubuntu-latest + env: + CI: true + steps: + - uses: actions/checkout@v4 + + - name: Wait for Netlify Deploy + id: netlify_deploy + uses: pettinarip/wait-for-netlify-action@v1.0.2 + with: + site_id: "e8f2e766-888b-4954-8500-1b647d84db99" + max_timeout: 3600 + env: + NETLIFY_TOKEN: ${{ secrets.NETLIFY_TOKEN }} + + - uses: actions/setup-node@v4 + with: + node-version: lts/* + + - name: Setup pnpm + uses: pnpm/action-setup@v2 + + - name: Install dependencies + run: pnpm install + + - name: Install Playwright with all browsers + run: npx playwright install --with-deps + + - name: Run E2E Tests on Netlify URL + run: pnpm test:e2e + env: + PLAYWRIGHT_TEST_BASE_URL: ${{ steps.netlify_deploy.outputs.url }} + + - uses: actions/upload-artifact@v4 + if: always() + with: + name: playwright-report + path: ./tests/e2e/__results__ + retention-days: 7 + + chromatic: + name: chromatic + needs: playwright + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: actions/setup-node@v4 + with: + node-version: 22.12.0 + - name: Setup pnpm + uses: pnpm/action-setup@v2 + + - name: Install dependencies + run: pnpm install + + - name: Download Playwright test results + uses: actions/download-artifact@v4 + with: + name: playwright-report + path: ./tests/e2e/__results__ + + - name: Run Chromatic + uses: chromaui/action@latest + with: + projectToken: ${{ secrets.CHROMATIC_E2E_TOKEN }} + playwright: true + exitZeroOnChanges: true + storybookBaseDir: . + env: + CHROMATIC_ARCHIVE_LOCATION: ./tests/e2e/__results__ diff --git a/.gitignore b/.gitignore index d011c93358a..ed6b81bc873 100644 --- a/.gitignore +++ b/.gitignore @@ -63,4 +63,5 @@ src/data/crowdin/bucketsAwaitingReviewReport.csv # Storybook build-storybook.log +build-archive.log storybook-static diff --git a/chromatic.config.json b/chromatic.config.json deleted file mode 100644 index 8e73d4c9668..00000000000 --- a/chromatic.config.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "projectId": "Project:6629cd26b1440f2cc20b94c0", - "zip": true, - "buildScriptName": "build-storybook:chromatic", - "onlyChanged": true -} \ No newline at end of file diff --git a/docs/e2e-testing.md b/docs/e2e-testing.md new file mode 100644 index 00000000000..1fe197b6f8f --- /dev/null +++ b/docs/e2e-testing.md @@ -0,0 +1,152 @@ +# E2E Testing with Playwright + +## Overview + +This project uses [Playwright](https://playwright.dev/) for end-to-end testing with [Chromatic](https://www.chromatic.com/) integration for visual regression testing. + +## Quick Start + +### Running Tests Locally + +```bash +# Install dependencies (if not already done) +pnpm install + +# Install Playwright browsers +npx playwright install + +# Start development server (in a separate terminal) +pnpm dev + +# Run all e2e tests +pnpm test:e2e + +# Run tests with UI (interactive mode) +pnpm test:e2e:ui + +# Run tests in debug mode +pnpm test:e2e:debug + +# View test report +pnpm test:e2e:report +``` + +### Development Server: Choosing the Best Mode for E2E Testing + +By default, Playwright tests run against `http://localhost:3000`. Before running tests, ensure your development server is up and running. You can start it in development mode with: + +```bash +pnpm dev +``` + +**Note:** Running in dev mode (`pnpm dev`) is convenient for rapid iteration, but it can be significantly slower than production builds. As a result, you may encounter Playwright timeout errors if pages take too long to load or build on demand. + +#### Tips to Avoid Timeout Issues + +- **Preload pages:** Manually visit the routes you plan to test in your browser before running the tests. This triggers Next.js to build those pages ahead of time, reducing load times during testing. +- **Increase Playwright timeouts:** If you must use dev mode, consider increasing Playwright's default timeouts to accommodate slower builds (see Playwright config docs). +- **Use a production build for reliability:** For the fastest and most stable E2E test runs, use a production build. This ensures all pages are prebuilt and served at optimal speed: + +```bash +pnpm build +pnpm start +``` + +This will serve your app at `http://localhost:3000` in production mode, minimizing the risk of timeouts and making your tests more reliable. + +> **Summary:** +> +> - Use `pnpm dev` for quick local development and debugging, but expect slower performance and possible timeouts. +> - For CI or full test runs, prefer `pnpm build && pnpm start` for best results. + +## Directory Layout + +``` +tests/e2e/ +├── __results__/ # Test results (gitignored) +├── __report__/ # HTML reports (gitignored) +├── fixtures/ # Test data and fixtures +├── pages/ # Page Object Model classes +├── utils/ # Test utilities and helpers +├── *.spec.ts # Test files +└── .gitignore +``` + +## Writing Tests + +### Best Practices + +#### 1. Use Page Object Model + +Create reusable page objects for common interactions. For more details, see the [Playwright Page Object Model documentation](https://playwright.dev/docs/pom): + +```typescript +// pages/HomePage.ts +export class HomePage { + constructor(private page: Page) {} + + async goto() { + await this.page.goto("/") + } + + async searchFor(query: string) { + const isMobile = await this.isMobileViewport() + if (isMobile) { + await this.page.getByTestId("search-button").first().click() + } else { + await this.page.getByTestId("search-input-button").first().click() + } + await this.page.getByPlaceholder("Search").fill(query) + } + + private async isMobileViewport() { + const viewport = this.page.viewportSize() + return viewport && viewport.width <= 768 + } +} +``` + +#### 2. Robust Selectors + +Prefer `data-testid` attributes over CSS selectors: + +```typescript +// Good +await page.getByTestId("search-button") + +// Better for accessibility +await page.getByRole("button", { name: "Search" }) + +// Avoid fragile selectors +await page.locator(".search-btn-class") // Fragile +``` + +#### 3. Responsive Testing + +Handle different viewport sizes appropriately: + +```typescript +test("search functionality", async ({ page }) => { + const viewport = page.viewportSize() + const isMobile = viewport && viewport.width <= breakpointAsNumber.md + + if (isMobile) { + // Mobile-specific logic + } else { + // Desktop-specific logic + } +}) +``` + +#### 4. Visual Testing + +Use Chromatic snapshots for visual regression testing: + +```typescript +import { takeSnapshot } from "@chromatic-com/playwright" + +test("visual regression", async ({ page }, testInfo) => { + await page.goto("/") + await takeSnapshot(page, "homepage-initial", testInfo) +}) +``` diff --git a/package.json b/package.json index 6a78e37c4b6..5283685b26b 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,11 @@ "events-import": "ts-node -O '{ \"module\": \"commonjs\" }' src/scripts/events-import.ts", "crowdin-needs-review": "ts-node -O '{ \"module\": \"commonjs\" }' src/scripts/crowdin/reports/generateReviewReport.ts", "update-tutorials": "ts-node -O '{ \"module\": \"commonjs\" }' src/scripts/update-tutorials-list.ts", - "prepare": "husky" + "prepare": "husky", + "test:e2e": "playwright test", + "test:e2e:ui": "playwright test --ui", + "test:e2e:debug": "playwright test --debug", + "test:e2e:report": "playwright show-report tests/e2e/__report__" }, "dependencies": { "@crowdin/crowdin-api-client": "^1.25.0", @@ -97,8 +101,10 @@ "yaml-loader": "^0.8.0" }, "devDependencies": { + "@chromatic-com/playwright": "^0.12.4", "@chromatic-com/storybook": "1.5.0", "@netlify/plugin-nextjs": "^5.10.0", + "@playwright/test": "^1.52.0", "@storybook/addon-essentials": "8.6.14", "@storybook/addon-interactions": "8.6.14", "@storybook/addon-links": "8.6.14", @@ -120,7 +126,7 @@ "@typescript-eslint/eslint-plugin": "^7.18.0", "@typescript-eslint/parser": "^7.18.0", "autoprefixer": "^10.4.19", - "chromatic": "10.9.6", + "chromatic": "12.0.0", "decompress": "^4.2.1", "dotenv": "^16.5.0", "eslint": "^8.57.1", @@ -152,5 +158,5 @@ "unist-util-visit": "^5.0.0", "xml2js": "^0.6.2" }, - "packageManager": "pnpm@10.12.3+sha512.467df2c586056165580ad6dfb54ceaad94c5a30f80893ebdec5a44c5aa73c205ae4a5bb9d5ed6bb84ea7c249ece786642bbb49d06a307df218d03da41c317417" + "packageManager": "pnpm@10.12.4" } diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 00000000000..863e2009c9c --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,61 @@ +import path from "path" + +import dotenv from "dotenv" +import type { ChromaticConfig } from "@chromatic-com/playwright" +import { defineConfig, devices } from "@playwright/test" + +dotenv.config({ path: path.resolve(__dirname, ".env.local") }) + +export default defineConfig({ + testDir: "./tests/e2e", + outputDir: "./tests/e2e/__results__", + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 2 : 0, + workers: process.env.CI ? 1 : 3, + reporter: [ + ["html", { outputFolder: "./tests/e2e/__report__" }], + ["line"], + process.env.CI ? ["github"] : ["list"], + ], + use: { + baseURL: process.env.PLAYWRIGHT_TEST_BASE_URL || "http://localhost:3000", + trace: "on-first-retry", + screenshot: "only-on-failure", + + // Global test timeout + actionTimeout: 10000, + navigationTimeout: 30000, + + // Chromatic settings + disableAutoSnapshot: true, + }, + + // Global test timeout + timeout: 30000, + + // Expect timeout + expect: { + timeout: 10000, + }, + projects: [ + /* Test against desktop browsers */ + { + name: "chromium", + use: { ...devices["Desktop Chrome"] }, + }, + { + name: "webkit", + use: { ...devices["Desktop Safari"] }, + }, + /* Test against mobile viewports. */ + { + name: "Mobile Chrome", + use: { ...devices["Pixel 5"] }, + }, + { + name: "Mobile Safari", + use: { ...devices["iPhone 12"] }, + }, + ], +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index af7c83f50bf..72c2179bb46 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -79,7 +79,7 @@ importers: version: 2.2.5(@tanstack/react-query@5.80.2(react@18.3.1))(@types/react@18.2.57)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.22.4))(wagmi@2.15.4(@tanstack/query-core@5.80.2)(@tanstack/react-query@5.80.2(react@18.3.1))(@types/react@18.2.57)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4)) '@socialgouv/matomo-next': specifier: ^1.8.0 - version: 1.9.2(next@14.2.30(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + version: 1.9.2(next@14.2.30(@babel/core@7.27.4)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@tanstack/react-query': specifier: ^5.66.7 version: 5.80.2(react@18.3.1) @@ -130,16 +130,16 @@ importers: version: 0.516.0(react@18.3.1) next: specifier: ^14.2.30 - version: 14.2.30(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 14.2.30(@babel/core@7.27.4)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-intl: specifier: ^3.26.3 - version: 3.26.5(next@14.2.30(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 3.26.5(next@14.2.30(@babel/core@7.27.4)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) next-mdx-remote: specifier: ^5.0.0 version: 5.0.0(@types/react@18.2.57)(acorn@8.14.1)(react@18.3.1) next-sitemap: specifier: ^4.2.3 - version: 4.2.3(next@14.2.30(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + version: 4.2.3(next@14.2.30(@babel/core@7.27.4)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) next-themes: specifier: ^0.3.0 version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -216,12 +216,18 @@ importers: specifier: ^0.8.0 version: 0.8.1 devDependencies: + '@chromatic-com/playwright': + specifier: ^0.12.4 + version: 0.12.5(@playwright/test@1.53.1)(@types/react@18.2.57)(bufferutil@4.0.9)(esbuild@0.25.5)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10) '@chromatic-com/storybook': specifier: 1.5.0 - version: 1.5.0(react@18.3.1) + version: 1.5.0(@chromatic-com/playwright@0.12.5(@playwright/test@1.53.1)(@types/react@18.2.57)(bufferutil@4.0.9)(esbuild@0.25.5)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10))(react@18.3.1) '@netlify/plugin-nextjs': specifier: ^5.10.0 version: 5.11.2 + '@playwright/test': + specifier: ^1.52.0 + version: 1.53.1 '@storybook/addon-essentials': specifier: 8.6.14 version: 8.6.14(@types/react@18.2.57)(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) @@ -239,7 +245,7 @@ importers: version: 8.6.14(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) '@storybook/nextjs': specifier: ^8.6.14 - version: 8.6.14(babel-plugin-macros@3.1.0)(esbuild@0.25.5)(next@14.2.30(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(type-fest@2.19.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5)) + version: 8.6.14(babel-plugin-macros@3.1.0)(esbuild@0.25.5)(next@14.2.30(@babel/core@7.27.4)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(type-fest@2.19.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5)) '@storybook/react': specifier: 8.6.14 version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.3) @@ -286,8 +292,8 @@ importers: specifier: ^10.4.19 version: 10.4.21(postcss@8.5.4) chromatic: - specifier: 10.9.6 - version: 10.9.6 + specifier: 12.0.0 + version: 12.0.0(@chromatic-com/playwright@0.12.5(@playwright/test@1.53.1)(@types/react@18.2.57)(bufferutil@4.0.9)(esbuild@0.25.5)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10)) decompress: specifier: ^4.2.1 version: 4.2.1 @@ -356,7 +362,7 @@ importers: version: 8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) storybook-next-intl: specifier: ^1.2.5 - version: 1.2.6(next-intl@3.26.5(next@14.2.30(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)) + version: 1.2.6(next-intl@3.26.5(next@14.2.30(@babel/core@7.27.4)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)) tailwindcss: specifier: ^3.4.4 version: 3.4.17(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.8.3)) @@ -1028,10 +1034,19 @@ packages: resolution: {integrity: sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==} engines: {node: '>=6.9.0'} + '@chromatic-com/playwright@0.12.5': + resolution: {integrity: sha512-KTPunElGUUEu1ks+G41pJB/WXf+1HeYBnvauvDpJfMlICKoZlL3in0gIUoER/La/zXC/YEKL4BeXvq/JnRQvUw==} + hasBin: true + peerDependencies: + '@playwright/test': ^1.0.0 + '@chromatic-com/storybook@1.5.0': resolution: {integrity: sha512-LkLKv7SWu/6kGep1ft2HA1T/cm14wU0zoW71gE4cZRcgUoRQJtyhITFTLHrjqAxz6bVqNgqzQtd5oBZ2nK3L3g==} engines: {node: '>=16.0.0', yarn: '>=1.22.18'} + '@chromaui/rrweb-snapshot@2.0.0-alpha.18-noAbsolute': + resolution: {integrity: sha512-glB+dgHTLLiDS8ljwYDBb2EPNe/sPxz2uOWjm11PoDYmVw204VKzyq07jredeHs9nUocb47RyDcZWCa5Cbw3yw==} + '@coinbase/wallet-sdk@3.9.3': resolution: {integrity: sha512-N/A2DRIf0Y3PHc1XAMvbBUu4zisna6qAdqABMZwBMNEfWrXpAwx16pZGkYCLGE+Rvv1edbcB2LYDRnACNcmCiw==} @@ -1515,6 +1530,14 @@ packages: '@lit/reactive-element@2.1.0': resolution: {integrity: sha512-L2qyoZSQClcBmq0qajBVbhYEcG6iK0XfLn66ifLe/RfC0/ihpc+pl0Wdn8bJ8o+hj38cG0fGXRgSS20MuXn7qA==} + '@lukeed/csprng@1.1.0': + resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} + engines: {node: '>=8'} + + '@lukeed/uuid@2.0.1': + resolution: {integrity: sha512-qC72D4+CDdjGqJvkFMMEAtancHUQ7/d/tAiHf64z8MopFDmcrtbcJuerDtFceuAfQJ2pDSfCKCtbqoGBNnwg0w==} + engines: {node: '>=8'} + '@mdx-js/mdx@3.1.0': resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==} @@ -1729,6 +1752,11 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@playwright/test@1.53.1': + resolution: {integrity: sha512-Z4c23LHV0muZ8hfv4jw6HngPJkbbtZxTkxPNIg7cJcTc9C28N/p2q7g3JZS2SiKBBHJ3uM1dgDye66bB7LEk5w==} + engines: {node: '>=18'} + hasBin: true + '@pmmmwh/react-refresh-webpack-plugin@0.5.16': resolution: {integrity: sha512-kLQc9xz6QIqd2oIYyXRUiAp79kGpFBm3fEM9ahfG1HI0WI5gdZ2OVHWdmZYnwODt7ISck+QuQ6sBPrtvUBML7Q==} engines: {node: '>= 10.13'} @@ -2316,6 +2344,16 @@ packages: '@scure/bip39@1.6.0': resolution: {integrity: sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==} + '@segment/analytics-core@1.4.1': + resolution: {integrity: sha512-kV0Pf33HnthuBOVdYNani21kYyj118Fn+9757bxqoksiXoZlYvBsFq6giNdCsKcTIE1eAMqNDq3xE1VQ0cfsHA==} + + '@segment/analytics-generic-utils@1.1.1': + resolution: {integrity: sha512-THTIzBPHnvu1HYJU3fARdJ3qIkukO3zDXsmDm+kAeUks5R9CBXOQ6rPChiASVzSmwAIIo5uFIXXnCraojlq/Gw==} + + '@segment/analytics-node@1.3.0': + resolution: {integrity: sha512-lRLz1WZaDokMoUe299yP5JkInc3OgJuqNNlxb6j0q22umCiq6b5iDo2gRmFn93reirIvJxWIicQsGrHd93q8GQ==} + engines: {node: '>=14'} + '@socialgouv/matomo-next@1.9.2': resolution: {integrity: sha512-UtiOBAzKiCwal6/2Lfh3fnv9L8XC4Ovdqqh1K3fimJZJhodf18fD3oy3ansGpgj+A7YE8HPV7/u/q6cYbRP3nw==} peerDependencies: @@ -2324,31 +2362,61 @@ packages: '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + '@storybook/addon-actions@8.5.8': + resolution: {integrity: sha512-7J0NAz+WDw1NmvmKIh0Qr5cxgVRDPFC5fmngbDNxedk147TkwrgmqOypgEi/SAksHbTWxJclbimoqdcsNtWffA==} + peerDependencies: + storybook: ^8.5.8 + '@storybook/addon-actions@8.6.14': resolution: {integrity: sha512-mDQxylxGGCQSK7tJPkD144J8jWh9IU9ziJMHfB84PKpI/V5ZgqMDnpr2bssTrUaGDqU5e1/z8KcRF+Melhs9pQ==} peerDependencies: storybook: ^8.6.14 + '@storybook/addon-backgrounds@8.5.8': + resolution: {integrity: sha512-TsQFagQ95+d7H3/+qUZKI2B0SEK8iu6CV13cyry9Dm59nn2bBylFrwx4I3xDQUOWMiSF6QIRjCYzxKQ/jJ5OEg==} + peerDependencies: + storybook: ^8.5.8 + '@storybook/addon-backgrounds@8.6.14': resolution: {integrity: sha512-l9xS8qWe5n4tvMwth09QxH2PmJbCctEvBAc1tjjRasAfrd69f7/uFK4WhwJAstzBTNgTc8VXI4w8ZR97i1sFbg==} peerDependencies: storybook: ^8.6.14 + '@storybook/addon-controls@8.5.8': + resolution: {integrity: sha512-3iifI8mBGPsiPmV9eAYk+tK9i+xuWhVsa+sXz01xTZ/0yoOREpp972hka86mtCqdDTOJIpzh1LmxvB218OssvQ==} + peerDependencies: + storybook: ^8.5.8 + '@storybook/addon-controls@8.6.14': resolution: {integrity: sha512-IiQpkNJdiRyA4Mq9mzjZlvQugL/aE7hNgVxBBGPiIZG6wb6Ht9hNnBYpap5ZXXFKV9p2qVI0FZK445ONmAa+Cw==} peerDependencies: storybook: ^8.6.14 + '@storybook/addon-docs@8.5.8': + resolution: {integrity: sha512-zKVUqE0UGiq1gZtY2TX57SYB4RIsdlbTDxKW2JZ9HhZGLvZ5Qb7AvdiKTZxfOepGhuw3UcNXH/zCFkFCTJifMw==} + peerDependencies: + storybook: ^8.5.8 + '@storybook/addon-docs@8.6.14': resolution: {integrity: sha512-Obpd0OhAF99JyU5pp5ci17YmpcQtMNgqW2pTXV8jAiiipWpwO++hNDeQmLmlSXB399XjtRDOcDVkoc7rc6JzdQ==} peerDependencies: storybook: ^8.6.14 + '@storybook/addon-essentials@8.5.8': + resolution: {integrity: sha512-sCNvMZqL6dywnyHuZBrWl4f6QXsvpJHOioL3wJJKaaRMZmctbFmS0u6J8TQjmgZhQfyRzuJuhr1gJg9oeqp6AA==} + peerDependencies: + storybook: ^8.5.8 + '@storybook/addon-essentials@8.6.14': resolution: {integrity: sha512-5ZZSHNaW9mXMOFkoPyc3QkoNGdJHETZydI62/OASR0lmPlJ1065TNigEo5dJddmZNn0/3bkE8eKMAzLnO5eIdA==} peerDependencies: storybook: ^8.6.14 + '@storybook/addon-highlight@8.5.8': + resolution: {integrity: sha512-kkldtFrY0oQJY/vfNLkV66hVgtp66OO8T68KoZFsmUz4a3iYgzDS8WF+Av2/9jthktFvMchjFr8NKOno9YBGIg==} + peerDependencies: + storybook: ^8.5.8 + '@storybook/addon-highlight@8.6.14': resolution: {integrity: sha512-4H19OJlapkofiE9tM6K/vsepf4ir9jMm9T+zw5L85blJZxhKZIbJ6FO0TCG9PDc4iPt3L6+aq5B0X29s9zicNQ==} peerDependencies: @@ -2368,11 +2436,21 @@ packages: react: optional: true + '@storybook/addon-measure@8.5.8': + resolution: {integrity: sha512-xf84ByTRkFPoNSck6Z5OJ0kXTYAYgmg/0Ke0eCY/CNgwh7lfjYQBrcjuKiYZ6jyRUMLdysXzIfF9/2MeFqLfIg==} + peerDependencies: + storybook: ^8.5.8 + '@storybook/addon-measure@8.6.14': resolution: {integrity: sha512-1Tlyb72NX8aAqm6I6OICsUuGOP6hgnXcuFlXucyhKomPa6j3Eu2vKu561t/f0oGtAK2nO93Z70kVaEh5X+vaGw==} peerDependencies: storybook: ^8.6.14 + '@storybook/addon-outline@8.5.8': + resolution: {integrity: sha512-NAC9VWZFg2gwvduzJRVAtxPeQfJjB8xfDDgcGjgLOCSQkZDDOmGVdLXf78pykMQKyuu/0YZ989KufAac6kRG5g==} + peerDependencies: + storybook: ^8.5.8 + '@storybook/addon-outline@8.6.14': resolution: {integrity: sha512-CW857JvN6OxGWElqjlzJO2S69DHf+xO3WsEfT5mT3ZtIjmsvRDukdWfDU9bIYUFyA2lFvYjncBGjbK+I91XR7w==} peerDependencies: @@ -2383,16 +2461,38 @@ packages: peerDependencies: storybook: ^8.6.14 + '@storybook/addon-toolbars@8.5.8': + resolution: {integrity: sha512-AfGdMNBp+vOjyiFKlOyUFLIU0kN1QF4PhVBqd0vYkWAk2w9n6a/ZlG0TcJGe7K5+bcvmZDAerYMKbDMSeg9bAw==} + peerDependencies: + storybook: ^8.5.8 + '@storybook/addon-toolbars@8.6.14': resolution: {integrity: sha512-W/wEXT8h3VyZTVfWK/84BAcjAxTdtRiAkT2KAN0nbSHxxB5KEM1MjKpKu2upyzzMa3EywITqbfy4dP6lpkVTwQ==} peerDependencies: storybook: ^8.6.14 + '@storybook/addon-viewport@8.5.8': + resolution: {integrity: sha512-SdoRb4bH99Knj2R+rTcMQQxHrtcIO1GLzTFitAefxBE1OUkq8FNLHMHd0Ip/sCQGLW/5F03U70R2uh7SkhBBYA==} + peerDependencies: + storybook: ^8.5.8 + '@storybook/addon-viewport@8.6.14': resolution: {integrity: sha512-gNzVQbMqRC+/4uQTPI2ZrWuRHGquTMZpdgB9DrD88VTEjNudP+J6r8myLfr2VvGksBbUMHkGHMXHuIhrBEnXYA==} peerDependencies: storybook: ^8.6.14 + '@storybook/blocks@8.5.8': + resolution: {integrity: sha512-O6tJDJM83fDm3ZP1+lTf24l7HOTzSRXkkMDD7zB/JHixzlj9p6wI4UQc2lplLadDCa5ya1IwyE7zUDN/0UfC5Q==} + 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: ^8.5.8 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + '@storybook/blocks@8.6.14': resolution: {integrity: sha512-rBMHAfA39AGHgkrDze4RmsnQTMw1ND5fGWobr9pDcJdnDKWQWNRD7Nrlxj0gFlN3n4D9lEZhWGdFrCbku7FVAQ==} peerDependencies: @@ -2405,6 +2505,15 @@ packages: react-dom: optional: true + '@storybook/builder-webpack5@8.5.8': + resolution: {integrity: sha512-QaBIMyqWX/eQs4laQBXvAW9M/ylk73WljJySPlTl+8PNVuDtHli24oBJXwx5aV1NT53BLsaKAn/vb2QNL4+G1Q==} + peerDependencies: + storybook: ^8.5.8 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@storybook/builder-webpack5@8.6.14': resolution: {integrity: sha512-YZYAqc6NBKoMTKZpjxnkMch6zDtMkBZdS/yaji1+wJX2QPFBwTbSh7SpeBxDp1S11gXSAJ4f1btUWeqSqo8nJA==} peerDependencies: @@ -2414,16 +2523,34 @@ packages: typescript: optional: true + '@storybook/components@8.5.8': + resolution: {integrity: sha512-PPEMqWPXn7rX+qISaOOv9CDSuuvG538f0+4M5Ppq2LwpjXecgOG5ktqJF0ZqxmTytT+RpEaJmgjGW0dMAKZswA==} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@storybook/components@8.6.14': resolution: {integrity: sha512-HNR2mC5I4Z5ek8kTrVZlIY/B8gJGs5b3XdZPBPBopTIN6U/YHXiDyOjY3JlaS4fSG1fVhp/Qp1TpMn1w/9m1pw==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@storybook/core-webpack@8.5.8': + resolution: {integrity: sha512-M2LNQdYp0br8fgKMVtBh7YIo8mQsgALLc4i9PEXRS7wrp+bhvVnA9qhd5xDPzb0Rl4CHYbs4Yvkzo7ZQMibeIQ==} + peerDependencies: + storybook: ^8.5.8 + '@storybook/core-webpack@8.6.14': resolution: {integrity: sha512-iG7r8osNKabSGBbuJuSeMWKbU+ilt5PvzTYkClcYaagla/DliXkXvfywA6jOugVk/Cpx+c6tVKlPfjLcaQHwmw==} peerDependencies: storybook: ^8.6.14 + '@storybook/core@8.5.8': + resolution: {integrity: sha512-OT02DQhkGpBgn5P+nZOZmbzxqubC4liVqbhpjp/HOGi5cOA3+fCJzDJeSDTu+pPh7dZnopC4XnR+5dWjtOJHdA==} + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + '@storybook/core@8.6.14': resolution: {integrity: sha512-1P/w4FSNRqP8j3JQBOi3yGt8PVOgSRbP66Ok520T78eJBeqx9ukCfl912PQZ7SPbW3TIunBwLXMZOjZwBB/JmA==} peerDependencies: @@ -2432,6 +2559,11 @@ packages: prettier: optional: true + '@storybook/csf-plugin@8.5.8': + resolution: {integrity: sha512-9p+TFutbvtPYEmg14UsvqBDWKP/p/+OkIdi+gkwCMw0yiJF/+7ErMHDB0vr5SpJpU7SFQmfpY2c/LaglEtaniw==} + peerDependencies: + storybook: ^8.5.8 + '@storybook/csf-plugin@8.6.14': resolution: {integrity: sha512-dErtc9teAuN+eelN8FojzFE635xlq9cNGGGEu0WEmMUQ4iJ8pingvBO1N8X3scz4Ry7KnxX++NNf3J3gpxS8qQ==} peerDependencies: @@ -2440,6 +2572,12 @@ packages: '@storybook/csf@0.0.1': resolution: {integrity: sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==} + '@storybook/csf@0.1.12': + resolution: {integrity: sha512-9/exVhabisyIVL0VxTCxo01Tdm8wefIXKXfltAPTSr8cbLn5JAxGQ6QV3mjdecLGEOucfoVhAKtJfVHxEK1iqw==} + + '@storybook/csf@0.1.13': + resolution: {integrity: sha512-7xOOwCLGB3ebM87eemep89MYRFTko+D8qE7EdAAq74lgdqRR5cOUtYWJLjO2dLtP94nqoOdHJo6MdLLKzg412Q==} + '@storybook/global@5.0.0': resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} @@ -2455,6 +2593,11 @@ packages: peerDependencies: storybook: ^8.6.14 + '@storybook/manager-api@8.5.8': + resolution: {integrity: sha512-ik3yikvYxAJMDFg0s3Pm7hZWucAlkFaaO7e2RlfOctaJFdaEi3evR4RS7GdmS38uKBEk31RC7x+nnIJkqEC59A==} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@storybook/manager-api@8.6.14': resolution: {integrity: sha512-ez0Zihuy17udLbfHZQXkGqwtep0mSGgHcNzGN7iZrMP1m+VmNo+7aGCJJdvXi7+iU3yq8weXSQFWg5DqWgLS7g==} peerDependencies: @@ -2488,6 +2631,17 @@ packages: typescript: optional: true + '@storybook/preset-server-webpack@8.5.8': + resolution: {integrity: sha512-0QA23bmhchmec6zI0JzoXWIA723n8XhEtJndUQDS96cTyDGyb3AuedNgwu5xQw9Zv+EJZjO84uGcNYinPEnmKA==} + engines: {node: '>=18.0.0'} + peerDependencies: + storybook: ^8.5.8 + + '@storybook/preview-api@8.5.8': + resolution: {integrity: sha512-HJoz2o28VVprnU5OG6JO6CHrD3ah6qVPWixbnmyUKd0hOYF5dayK5ptmeLyUpYX56Eb2KoYcuVaeQqAby4RkNw==} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@storybook/preview-api@8.6.14': resolution: {integrity: sha512-2GhcCd4dNMrnD7eooEfvbfL4I83qAqEyO0CO7JQAmIO6Rxb9BsOLLI/GD5HkvQB73ArTJ+PT50rfaO820IExOQ==} peerDependencies: @@ -2499,6 +2653,13 @@ packages: typescript: '>= 4.x' webpack: '>= 4' + '@storybook/react-dom-shim@8.5.8': + resolution: {integrity: sha512-UT/kGJHPW+HLNCTmI1rV1to+dUZuXKUTaRv2wZ2BUq2/gjIuePyqQZYVQeb0LkZbuH2uviLrPfXpS5d3/RSUJw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + storybook: ^8.5.8 + '@storybook/react-dom-shim@8.6.14': resolution: {integrity: sha512-0hixr3dOy3f3M+HBofp3jtMQMS+sqzjKNgl7Arfuj3fvjmyXOks/yGjDImySR4imPtEllvPZfhiQNlejheaInw==} peerDependencies: @@ -2521,11 +2682,28 @@ packages: typescript: optional: true + '@storybook/server-webpack5@8.5.8': + resolution: {integrity: sha512-bdRxp0kUGBstDdCEIfJEbsmM7vvyBES4Hjmj0jXcOefQYic5QTWTiDMrHgWPp8XWGjIoO+wOfWm2IXPP5Uceog==} + engines: {node: '>=18.0.0'} + peerDependencies: + storybook: ^8.5.8 + + '@storybook/server@8.5.8': + resolution: {integrity: sha512-DB3IR7CCUklTXtytbOOX7Vig1h9ohQ3BPauvf7WlYXLv4JlkO54oTu37rL0wbqgmmh4FOF41ZSX8z4h4w41How==} + engines: {node: '>=18.0.0'} + peerDependencies: + storybook: ^8.5.8 + '@storybook/test@8.6.14': resolution: {integrity: sha512-GkPNBbbZmz+XRdrhMtkxPotCLOQ1BaGNp/gFZYdGDk2KmUWBKmvc5JxxOhtoXM2703IzNFlQHSSNnhrDZYuLlw==} peerDependencies: storybook: ^8.6.14 + '@storybook/theming@8.5.8': + resolution: {integrity: sha512-/Rm6BV778sCT+3Ok861VYmw9BlEV5zcCq2zg5TOVuk8HqZw7H7VHtubVsjukEuhveYCs+oF+i2tv/II6jh6jdg==} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@storybook/theming@8.6.14': resolution: {integrity: sha512-r4y+LsiB37V5hzpQo+BM10PaCsp7YlZ0YcZzQP1OCkPlYXmUAFy2VvDKaFRpD8IeNPKug2u4iFm/laDEbs03dg==} peerDependencies: @@ -3756,20 +3934,20 @@ packages: chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - chromatic@10.9.6: - resolution: {integrity: sha512-1MoT+/U+vQwEiq2GuehPyStbqhxqHmM1B9pdpVU1dKh26userQg1FyOFYifkTgy+9reo2w2p7sAbc0JRd2kzlA==} + chromatic@11.29.0: + resolution: {integrity: sha512-yisBlntp9hHVj19lIQdpTlcYIXuU9H/DbFuu6tyWHmj6hWT2EtukCCcxYXL78XdQt1vm2GfIrtgtKpj/Rzmo4A==} hasBin: true peerDependencies: - '@chromatic-com/cypress': ^0.5.2 || ^1.0.0 - '@chromatic-com/playwright': ^0.5.2 || ^1.0.0 + '@chromatic-com/cypress': ^0.*.* || ^1.0.0 + '@chromatic-com/playwright': ^0.*.* || ^1.0.0 peerDependenciesMeta: '@chromatic-com/cypress': optional: true '@chromatic-com/playwright': optional: true - chromatic@11.29.0: - resolution: {integrity: sha512-yisBlntp9hHVj19lIQdpTlcYIXuU9H/DbFuu6tyWHmj6hWT2EtukCCcxYXL78XdQt1vm2GfIrtgtKpj/Rzmo4A==} + chromatic@12.0.0: + resolution: {integrity: sha512-X7v26BLfAzHCU92nxPsCuvt+MazmA7S6cN7pCRRhnDYChDxHES48YvXarOybLdlH9kNP/3lMyknu6iseTh0T9A==} hasBin: true peerDependencies: '@chromatic-com/cypress': ^0.*.* || ^1.0.0 @@ -4329,6 +4507,10 @@ packages: resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} engines: {node: '>=12'} + dset@3.1.4: + resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} + engines: {node: '>=4'} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -4898,6 +5080,11 @@ packages: fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -6312,6 +6499,16 @@ packages: peerDependencies: sharp: '>= 0.30.6' + playwright-core@1.53.1: + resolution: {integrity: sha512-Z46Oq7tLAyT0lGoFx4DOuB1IA9D1TPj0QkYxpPVUnGDqHHvDpCftu1J2hM2PiWsNMoZh8+LQaarAWcDfPBc6zg==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.53.1: + resolution: {integrity: sha512-LJ13YLr/ocweuwxyGf1XNFWIU4M2zUSo149Qbp+A4cpwDjsxRPj7k6H25LBrEHiEwxvRbD8HdwvQmRMSvquhYw==} + engines: {node: '>=18'} + hasBin: true + pngjs@5.0.0: resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} engines: {node: '>=10.13.0'} @@ -6925,6 +7122,9 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-identifier@0.4.2: + resolution: {integrity: sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==} + safe-push-apply@1.0.0: resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} engines: {node: '>= 0.4'} @@ -7146,6 +7346,15 @@ packages: peerDependencies: next-intl: ^3 || ^4 + storybook@8.5.8: + resolution: {integrity: sha512-k3QDa7z4a656oO3Mx929KNm+xIdEI2nIDCKatVl1mA6vt+ge+uwoiG+ro182J9LOEppR5XXD2mQQi4u1xNsy6A==} + hasBin: true + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + storybook@8.6.14: resolution: {integrity: sha512-sVKbCj/OTx67jhmauhxc2dcr1P+yOgz/x3h0krwjyMgdc5Oubvxyg4NYDZmzAw+ym36g/lzH8N0Ccp4dwtdfxw==} hasBin: true @@ -8992,9 +9201,34 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@chromatic-com/storybook@1.5.0(react@18.3.1)': + '@chromatic-com/playwright@0.12.5(@playwright/test@1.53.1)(@types/react@18.2.57)(bufferutil@4.0.9)(esbuild@0.25.5)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10)': + dependencies: + '@chromaui/rrweb-snapshot': 2.0.0-alpha.18-noAbsolute + '@playwright/test': 1.53.1 + '@segment/analytics-node': 1.3.0 + '@storybook/addon-essentials': 8.5.8(@types/react@18.2.57)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@storybook/csf': 0.1.13 + '@storybook/manager-api': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@storybook/server-webpack5': 8.5.8(esbuild@0.25.5)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.3) + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@rspack/core' + - '@swc/core' + - '@types/react' + - bufferutil + - encoding + - esbuild + - prettier + - supports-color + - typescript + - uglify-js + - utf-8-validate + - webpack-cli + + '@chromatic-com/storybook@1.5.0(@chromatic-com/playwright@0.12.5(@playwright/test@1.53.1)(@types/react@18.2.57)(bufferutil@4.0.9)(esbuild@0.25.5)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: - chromatic: 11.29.0 + chromatic: 11.29.0(@chromatic-com/playwright@0.12.5(@playwright/test@1.53.1)(@types/react@18.2.57)(bufferutil@4.0.9)(esbuild@0.25.5)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10)) filesize: 10.1.6 jsonfile: 6.1.0 react-confetti: 6.4.0(react@18.3.1) @@ -9004,6 +9238,10 @@ snapshots: - '@chromatic-com/playwright' - react + '@chromaui/rrweb-snapshot@2.0.0-alpha.18-noAbsolute': + dependencies: + postcss: 8.5.4 + '@coinbase/wallet-sdk@3.9.3': dependencies: bn.js: 5.2.2 @@ -9449,6 +9687,12 @@ snapshots: dependencies: '@lit-labs/ssr-dom-shim': 1.3.0 + '@lukeed/csprng@1.1.0': {} + + '@lukeed/uuid@2.0.1': + dependencies: + '@lukeed/csprng': 1.1.0 + '@mdx-js/mdx@3.1.0(acorn@8.14.1)': dependencies: '@types/estree': 1.0.7 @@ -9739,6 +9983,10 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@playwright/test@1.53.1': + dependencies: + playwright: 1.53.1 + '@pmmmwh/react-refresh-webpack-plugin@0.5.16(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5))': dependencies: ansi-html: 0.0.9 @@ -10563,12 +10811,43 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/base': 1.2.6 - '@socialgouv/matomo-next@1.9.2(next@14.2.30(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': + '@segment/analytics-core@1.4.1': dependencies: - next: 14.2.30(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@lukeed/uuid': 2.0.1 + '@segment/analytics-generic-utils': 1.1.1 + dset: 3.1.4 + tslib: 2.8.1 + + '@segment/analytics-generic-utils@1.1.1': + dependencies: + tslib: 2.8.1 + + '@segment/analytics-node@1.3.0': + dependencies: + '@lukeed/uuid': 2.0.1 + '@segment/analytics-core': 1.4.1 + '@segment/analytics-generic-utils': 1.1.1 + buffer: 6.0.3 + node-fetch: 2.7.0 + tslib: 2.8.1 + transitivePeerDependencies: + - encoding + + '@socialgouv/matomo-next@1.9.2(next@14.2.30(@babel/core@7.27.4)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': + dependencies: + next: 14.2.30(@babel/core@7.27.4)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@socket.io/component-emitter@3.1.2': {} + '@storybook/addon-actions@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + dependencies: + '@storybook/global': 5.0.0 + '@types/uuid': 9.0.8 + dequal: 2.0.3 + polished: 4.3.1 + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + uuid: 9.0.1 + '@storybook/addon-actions@8.6.14(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: '@storybook/global': 5.0.0 @@ -10578,6 +10857,13 @@ snapshots: storybook: 8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) uuid: 9.0.1 + '@storybook/addon-backgrounds@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + dependencies: + '@storybook/global': 5.0.0 + memoizerific: 1.11.3 + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + ts-dedent: 2.2.0 + '@storybook/addon-backgrounds@8.6.14(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: '@storybook/global': 5.0.0 @@ -10585,6 +10871,13 @@ snapshots: storybook: 8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) ts-dedent: 2.2.0 + '@storybook/addon-controls@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + dependencies: + '@storybook/global': 5.0.0 + dequal: 2.0.3 + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + ts-dedent: 2.2.0 + '@storybook/addon-controls@8.6.14(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: '@storybook/global': 5.0.0 @@ -10592,6 +10885,19 @@ snapshots: storybook: 8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) ts-dedent: 2.2.0 + '@storybook/addon-docs@8.5.8(@types/react@18.2.57)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + dependencies: + '@mdx-js/react': 3.1.0(@types/react@18.2.57)(react@18.3.1) + '@storybook/blocks': 8.5.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@storybook/csf-plugin': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@storybook/react-dom-shim': 8.5.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + '@storybook/addon-docs@8.6.14(@types/react@18.2.57)(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: '@mdx-js/react': 3.1.0(@types/react@18.2.57)(react@18.3.1) @@ -10605,6 +10911,22 @@ snapshots: transitivePeerDependencies: - '@types/react' + '@storybook/addon-essentials@8.5.8(@types/react@18.2.57)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + dependencies: + '@storybook/addon-actions': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@storybook/addon-backgrounds': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@storybook/addon-controls': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@storybook/addon-docs': 8.5.8(@types/react@18.2.57)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@storybook/addon-highlight': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@storybook/addon-measure': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@storybook/addon-outline': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@storybook/addon-toolbars': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@storybook/addon-viewport': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + '@storybook/addon-essentials@8.6.14(@types/react@18.2.57)(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: '@storybook/addon-actions': 8.6.14(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) @@ -10621,6 +10943,11 @@ snapshots: transitivePeerDependencies: - '@types/react' + '@storybook/addon-highlight@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + dependencies: + '@storybook/global': 5.0.0 + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + '@storybook/addon-highlight@8.6.14(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: '@storybook/global': 5.0.0 @@ -10643,12 +10970,24 @@ snapshots: optionalDependencies: react: 18.3.1 + '@storybook/addon-measure@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + dependencies: + '@storybook/global': 5.0.0 + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + tiny-invariant: 1.3.3 + '@storybook/addon-measure@8.6.14(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: '@storybook/global': 5.0.0 storybook: 8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) tiny-invariant: 1.3.3 + '@storybook/addon-outline@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + dependencies: + '@storybook/global': 5.0.0 + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + ts-dedent: 2.2.0 + '@storybook/addon-outline@8.6.14(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: '@storybook/global': 5.0.0 @@ -10660,15 +10999,34 @@ snapshots: storybook: 8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) ts-dedent: 2.2.0 + '@storybook/addon-toolbars@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + dependencies: + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + '@storybook/addon-toolbars@8.6.14(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: storybook: 8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + '@storybook/addon-viewport@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + dependencies: + memoizerific: 1.11.3 + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + '@storybook/addon-viewport@8.6.14(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: memoizerific: 1.11.3 storybook: 8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + '@storybook/blocks@8.5.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + dependencies: + '@storybook/csf': 0.1.12 + '@storybook/icons': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + ts-dedent: 2.2.0 + optionalDependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + '@storybook/blocks@8.6.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: '@storybook/icons': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -10678,6 +11036,42 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + '@storybook/builder-webpack5@8.5.8(esbuild@0.25.5)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.3)': + dependencies: + '@storybook/core-webpack': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@types/semver': 7.7.0 + browser-assert: 1.2.1 + case-sensitive-paths-webpack-plugin: 2.4.0 + cjs-module-lexer: 1.4.3 + constants-browserify: 1.0.0 + css-loader: 6.11.0(webpack@5.99.9(esbuild@0.25.5)) + es-module-lexer: 1.7.0 + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.99.9(esbuild@0.25.5)) + html-webpack-plugin: 5.6.3(webpack@5.99.9(esbuild@0.25.5)) + magic-string: 0.30.17 + path-browserify: 1.0.1 + process: 0.11.10 + semver: 7.7.2 + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + style-loader: 3.3.4(webpack@5.99.9(esbuild@0.25.5)) + terser-webpack-plugin: 5.3.14(esbuild@0.25.5)(webpack@5.99.9(esbuild@0.25.5)) + ts-dedent: 2.2.0 + url: 0.11.4 + util: 0.12.5 + util-deprecate: 1.0.2 + webpack: 5.99.9(esbuild@0.25.5) + webpack-dev-middleware: 6.1.3(webpack@5.99.9(esbuild@0.25.5)) + webpack-hot-middleware: 2.26.1 + webpack-virtual-modules: 0.6.2 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - '@rspack/core' + - '@swc/core' + - esbuild + - uglify-js + - webpack-cli + '@storybook/builder-webpack5@8.6.14(esbuild@0.25.5)(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.3)': dependencies: '@storybook/core-webpack': 8.6.14(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) @@ -10714,15 +11108,44 @@ snapshots: - uglify-js - webpack-cli + '@storybook/components@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + dependencies: + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + '@storybook/components@8.6.14(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: storybook: 8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + '@storybook/core-webpack@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + dependencies: + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + ts-dedent: 2.2.0 + '@storybook/core-webpack@8.6.14(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: storybook: 8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) ts-dedent: 2.2.0 + '@storybook/core@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)': + dependencies: + '@storybook/csf': 0.1.12 + better-opn: 3.0.2 + browser-assert: 1.2.1 + esbuild: 0.25.5 + esbuild-register: 3.6.0(esbuild@0.25.5) + jsdoc-type-pratt-parser: 4.1.0 + process: 0.11.10 + recast: 0.23.11 + semver: 7.7.2 + util: 0.12.5 + ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + prettier: 3.5.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + '@storybook/core@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)': dependencies: '@storybook/theming': 8.6.14(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) @@ -10744,6 +11167,11 @@ snapshots: - supports-color - utf-8-validate + '@storybook/csf-plugin@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + dependencies: + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + unplugin: 1.16.1 + '@storybook/csf-plugin@8.6.14(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: storybook: 8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) @@ -10753,6 +11181,14 @@ snapshots: dependencies: lodash: 4.17.21 + '@storybook/csf@0.1.12': + dependencies: + type-fest: 2.19.0 + + '@storybook/csf@0.1.13': + dependencies: + type-fest: 2.19.0 + '@storybook/global@5.0.0': {} '@storybook/icons@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': @@ -10766,11 +11202,15 @@ snapshots: '@vitest/utils': 2.1.9 storybook: 8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + '@storybook/manager-api@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + dependencies: + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + '@storybook/manager-api@8.6.14(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: storybook: 8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - '@storybook/nextjs@8.6.14(babel-plugin-macros@3.1.0)(esbuild@0.25.5)(next@14.2.30(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(type-fest@2.19.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5))': + '@storybook/nextjs@8.6.14(babel-plugin-macros@3.1.0)(esbuild@0.25.5)(next@14.2.30(@babel/core@7.27.4)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(type-fest@2.19.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5))': dependencies: '@babel/core': 7.27.4 '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.27.4) @@ -10796,7 +11236,7 @@ snapshots: find-up: 5.0.0 image-size: 1.2.1 loader-utils: 3.3.1 - next: 14.2.30(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.30(@babel/core@7.27.4)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) node-polyfill-webpack-plugin: 2.0.1(webpack@5.99.9(esbuild@0.25.5)) pnp-webpack-plugin: 1.7.0(typescript@5.8.3) postcss: 8.5.4 @@ -10861,6 +11301,20 @@ snapshots: - uglify-js - webpack-cli + '@storybook/preset-server-webpack@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + dependencies: + '@storybook/core-webpack': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@storybook/global': 5.0.0 + '@storybook/server': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + safe-identifier: 0.4.2 + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + ts-dedent: 2.2.0 + yaml-loader: 0.8.1 + + '@storybook/preview-api@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + dependencies: + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + '@storybook/preview-api@8.6.14(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: storybook: 8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) @@ -10879,6 +11333,12 @@ snapshots: transitivePeerDependencies: - supports-color + '@storybook/react-dom-shim@8.5.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + '@storybook/react-dom-shim@8.6.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: react: 18.3.1 @@ -10900,6 +11360,32 @@ snapshots: '@storybook/test': 8.6.14(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) typescript: 5.8.3 + '@storybook/server-webpack5@8.5.8(esbuild@0.25.5)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.3)': + dependencies: + '@storybook/builder-webpack5': 8.5.8(esbuild@0.25.5)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.3) + '@storybook/preset-server-webpack': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@storybook/server': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - '@rspack/core' + - '@swc/core' + - esbuild + - typescript + - uglify-js + - webpack-cli + + '@storybook/server@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + dependencies: + '@storybook/components': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@storybook/csf': 0.1.12 + '@storybook/global': 5.0.0 + '@storybook/manager-api': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@storybook/preview-api': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@storybook/theming': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + ts-dedent: 2.2.0 + yaml: 2.8.0 + '@storybook/test@8.6.14(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: '@storybook/global': 5.0.0 @@ -10911,6 +11397,10 @@ snapshots: '@vitest/spy': 2.0.5 storybook: 8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + '@storybook/theming@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + dependencies: + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + '@storybook/theming@8.6.14(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: storybook: 8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) @@ -12781,9 +13271,13 @@ snapshots: chownr@1.1.4: {} - chromatic@10.9.6: {} + chromatic@11.29.0(@chromatic-com/playwright@0.12.5(@playwright/test@1.53.1)(@types/react@18.2.57)(bufferutil@4.0.9)(esbuild@0.25.5)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10)): + optionalDependencies: + '@chromatic-com/playwright': 0.12.5(@playwright/test@1.53.1)(@types/react@18.2.57)(bufferutil@4.0.9)(esbuild@0.25.5)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10) - chromatic@11.29.0: {} + chromatic@12.0.0(@chromatic-com/playwright@0.12.5(@playwright/test@1.53.1)(@types/react@18.2.57)(bufferutil@4.0.9)(esbuild@0.25.5)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10)): + optionalDependencies: + '@chromatic-com/playwright': 0.12.5(@playwright/test@1.53.1)(@types/react@18.2.57)(bufferutil@4.0.9)(esbuild@0.25.5)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10) chrome-trace-event@1.0.4: {} @@ -13345,6 +13839,8 @@ snapshots: dotenv@16.5.0: {} + dset@3.1.4: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -14118,6 +14614,9 @@ snapshots: fs.realpath@1.0.0: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -15452,11 +15951,11 @@ snapshots: neo-async@2.6.2: {} - next-intl@3.26.5(next@14.2.30(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1): + next-intl@3.26.5(next@14.2.30(@babel/core@7.27.4)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1): dependencies: '@formatjs/intl-localematcher': 0.5.10 negotiator: 1.0.0 - next: 14.2.30(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.30(@babel/core@7.27.4)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 use-intl: 3.26.5(react@18.3.1) @@ -15474,20 +15973,20 @@ snapshots: - acorn - supports-color - next-sitemap@4.2.3(next@14.2.30(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): + next-sitemap@4.2.3(next@14.2.30(@babel/core@7.27.4)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): dependencies: '@corex/deepmerge': 4.0.43 '@next/env': 13.5.11 fast-glob: 3.3.3 minimist: 1.2.8 - next: 14.2.30(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.30(@babel/core@7.27.4)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-themes@0.3.0(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) - next@14.2.30(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@14.2.30(@babel/core@7.27.4)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 14.2.30 '@swc/helpers': 0.5.5 @@ -15508,6 +16007,7 @@ snapshots: '@next/swc-win32-arm64-msvc': 14.2.30 '@next/swc-win32-ia32-msvc': 14.2.30 '@next/swc-win32-x64-msvc': 14.2.30 + '@playwright/test': 1.53.1 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -15869,6 +16369,14 @@ snapshots: dependencies: sharp: 0.32.6 + playwright-core@1.53.1: {} + + playwright@1.53.1: + dependencies: + playwright-core: 1.53.1 + optionalDependencies: + fsevents: 2.3.2 + pngjs@5.0.0: {} pnglib@0.0.1: {} @@ -16543,6 +17051,8 @@ snapshots: safe-buffer@5.2.1: {} + safe-identifier@0.4.2: {} + safe-push-apply@1.0.0: dependencies: es-errors: 1.3.0 @@ -16798,11 +17308,21 @@ snapshots: storybook-i18n@3.1.1: {} - storybook-next-intl@1.2.6(next-intl@3.26.5(next@14.2.30(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)): + storybook-next-intl@1.2.6(next-intl@3.26.5(next@14.2.30(@babel/core@7.27.4)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)): dependencies: - next-intl: 3.26.5(next@14.2.30(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + next-intl: 3.26.5(next@14.2.30(@babel/core@7.27.4)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) storybook-i18n: 3.1.1 + storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10): + dependencies: + '@storybook/core': 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + optionalDependencies: + prettier: 3.5.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10): dependencies: '@storybook/core': 8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) diff --git a/src/components/Nav/Client/index.tsx b/src/components/Nav/Client/index.tsx index 04f34a7bd2d..6a3b88953f5 100644 --- a/src/components/Nav/Client/index.tsx +++ b/src/components/Nav/Client/index.tsx @@ -110,6 +110,7 @@ const ClientSideNav = () => { /> diff --git a/src/components/Nav/Mobile/HamburgerButton.tsx b/src/components/Nav/Mobile/HamburgerButton.tsx index 4c8ed4cdb71..20042983f35 100644 --- a/src/components/Nav/Mobile/HamburgerButton.tsx +++ b/src/components/Nav/Mobile/HamburgerButton.tsx @@ -31,7 +31,7 @@ const HamburgerButton = forwardRef( - + diff --git a/src/components/ProductTable/PresetFilters.tsx b/src/components/ProductTable/PresetFilters.tsx index 98541455cef..78265708904 100644 --- a/src/components/ProductTable/PresetFilters.tsx +++ b/src/components/ProductTable/PresetFilters.tsx @@ -51,6 +51,7 @@ const PresetFilters = ({ ? "grid grid-cols-2 gap-2 pb-5" : "grid auto-cols-[200px] grid-flow-col gap-4 overflow-x-auto px-4 lg:auto-cols-fr" }`} + data-testid="preset-filters-container" > {presets.map((preset, idx) => { const colorIdx = colors.text[idx] ? idx : idx % colors.text.length diff --git a/src/components/Search/SearchInputButton.tsx b/src/components/Search/SearchInputButton.tsx index 6505add78e9..f78dd39cd84 100644 --- a/src/components/Search/SearchInputButton.tsx +++ b/src/components/Search/SearchInputButton.tsx @@ -15,6 +15,7 @@ const SearchInputButton = React.forwardRef(