From 16518c0f9fce5fe777fec841eb0f21a4e3f7fc86 Mon Sep 17 00:00:00 2001 From: Ehab Younes Date: Sun, 19 Jul 2026 00:24:23 +0300 Subject: [PATCH] ci: replace Chromatic with Pixel Swap visual regression testing from Chromatic to Pixel (pixel.coder.com), following the setup in coder/coder. The Pixel CI job installs Chromium, then pixel-storybook builds the Storybook (buildCommand in pixel.jsonc) and snapshots every story in the light and dark themes. Mainline builds auto-approve snapshots to avoid blocking CI after squash merges. --- .github/workflows/ci.yaml | 51 ++--- .prettierrc.json | 10 + .storybook/preview.ts | 2 +- package.json | 4 +- pixel.jsonc | 14 ++ pnpm-lock.yaml | 379 ++++++++++++++++++++++++-------------- pnpm-workspace.yaml | 1 + 7 files changed, 284 insertions(+), 177 deletions(-) create mode 100644 .prettierrc.json create mode 100644 pixel.jsonc diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index d7ded84f45..6917ff8021 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -81,49 +81,26 @@ jobs: run: ${{ runner.os == 'Linux' && 'xvfb-run -a' || '' }} pnpm test:integration --label "VS Code ${{ matrix.vscode-version }}" shell: bash - chromatic: - name: Chromatic + pixel: + name: Pixel runs-on: ubuntu-24.04 + # Forks and Dependabot can't read the PIXEL_KEY secret. + if: github.repository_owner == 'coder' && github.actor != 'dependabot[bot]' steps: - - name: Checkout - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - with: - fetch-depth: 0 - ref: ${{ github.event.pull_request.head.ref }} - persist-credentials: false - + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Setup pnpm, Node.js, and dependencies uses: ./.github/actions/setup - # PR builds gate on visual review; mainline auto-accepts. - - name: Publish to Chromatic (non-mainline) - if: github.ref != 'refs/heads/main' && github.repository_owner == 'coder' - uses: chromaui/action@4a45535b6910c0b99226ebcb7648faf88fb1ee2e # v18.0.1 - env: - NODE_OPTIONS: "--max_old_space_size=4096" - STORYBOOK: true - with: - projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} - buildScriptName: "storybook:ci" - exitOnceUploaded: true - exitZeroOnChanges: true - skip: "@(renovate/**|dependabot/**)" - onlyChanged: true - zip: true - - # Auto-accept on mainline to avoid blocking CI after squash merges. - - name: Publish to Chromatic (mainline) - if: github.ref == 'refs/heads/main' && github.repository_owner == 'coder' - uses: chromaui/action@4a45535b6910c0b99226ebcb7648faf88fb1ee2e # v18.0.1 + - name: Install Chromium + run: pnpm exec playwright-core install --with-deps chromium + + # Builds the Storybook (buildCommand in pixel.jsonc) and snapshots it. + - name: Snapshot + run: pnpm exec pixel-storybook env: - NODE_OPTIONS: "--max_old_space_size=4096" - STORYBOOK: true - with: - projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} - autoAcceptChanges: true - exitZeroOnChanges: true - buildScriptName: "storybook:build" - zip: true + PIXEL_KEY: ${{ secrets.PIXEL_KEY }} + # Auto-approve on mainline to avoid blocking CI after squash merges. + PIXEL_AUTO_REVIEW: ${{ github.ref == 'refs/heads/main' }} package: name: Package diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000000..d9c1738b9e --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,10 @@ +{ + "overrides": [ + { + "files": "*.jsonc", + "options": { + "trailingComma": "none" + } + } + ] +} diff --git a/.storybook/preview.ts b/.storybook/preview.ts index 349e0c4b50..ccffc73a67 100644 --- a/.storybook/preview.ts +++ b/.storybook/preview.ts @@ -44,7 +44,7 @@ if ( // VS Code injects --vscode-font-family at runtime, but the upstream // vscode-elements theme data omits it. Set a static default so -// Storybook (and Chromatic) renders with a predictable sans-serif +// Storybook (and Pixel) renders with a predictable sans-serif // stack instead of falling back to the browser default (Times). const VSCODE_FONT_FAMILY = '"Segoe WPC", "Segoe UI", system-ui, "Ubuntu", "Droid Sans", sans-serif'; diff --git a/package.json b/package.json index 34ce8f35cf..81959f673f 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,6 @@ "build": "concurrently -g -n webviews,extension,compile-tests:integration \"pnpm build:webviews\" \"node esbuild.mjs\" \"pnpm compile-tests:integration\"", "build:production": "cross-env NODE_ENV=production pnpm build", "build:webviews": "pnpm -r --filter \"./packages/*\" --parallel build", - "chromatic": "chromatic", "compile-tests:integration": "tsc -p test/integration --outDir out --noCheck", "format": "prettier --write --cache --cache-strategy content .", "format:check": "prettier --check --cache --cache-strategy content .", @@ -789,6 +788,7 @@ "zod": "^4.4.3" }, "devDependencies": { + "@coder/pixel-storybook": "^0.2.1", "@eslint-react/eslint-plugin": "^5.11.3", "@eslint/js": "^10.0.1", "@eslint/markdown": "^8.0.3", @@ -821,7 +821,6 @@ "@vscode/vsce": "^3.9.2", "babel-plugin-react-compiler": "catalog:", "bufferutil": "^4.1.0", - "chromatic": "^18.0.1", "coder": "catalog:", "concurrently": "^10.0.3", "cross-env": "^10.1.0", @@ -838,6 +837,7 @@ "jsdom": "^29.1.1", "jsonc-eslint-parser": "^3.1.0", "memfs": "^4.63.0", + "playwright-core": "^1.61.1", "prettier": "^3.9.4", "react": "catalog:", "react-dom": "catalog:", diff --git a/pixel.jsonc b/pixel.jsonc new file mode 100644 index 0000000000..7f68c936c5 --- /dev/null +++ b/pixel.jsonc @@ -0,0 +1,14 @@ +{ + "platformAccessUrl": "https://pixel.coder.com", + "projectId": "019ed223-272f-7e3e-82fc-a8a135e5b4ca", + "storybook": { + "buildCommand": "pnpm storybook:ci" + }, + "matrix": { + // Values of the Storybook "theme" global, defined in + // .storybook/preview.ts. Browsers and viewports stay at the default + // since the webviews only ever render inside VS Code, which is + // Chromium. + "themes": ["light", "dark"] + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5b07d05ffc..8261c6d865 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -86,7 +86,7 @@ importers: version: link:packages/shared axios: specifier: ^1.18.1 - version: 1.18.1 + version: 1.18.1(supports-color@8.1.1) date-fns: specifier: 'catalog:' version: 4.4.0 @@ -113,7 +113,7 @@ importers: version: 4.1.2 proxy-agent: specifier: ^8.0.2 - version: 8.0.2 + version: 8.0.2(supports-color@8.1.1) semver: specifier: ^7.8.5 version: 7.8.5 @@ -130,6 +130,9 @@ importers: specifier: ^4.4.3 version: 4.4.3 devDependencies: + '@coder/pixel-storybook': + specifier: ^0.2.1 + version: 0.2.1(playwright-core@1.61.1)(storybook@10.4.6) '@eslint-react/eslint-plugin': specifier: ^5.11.3 version: 5.11.3(eslint@10.6.0)(typescript@6.0.3) @@ -138,7 +141,7 @@ importers: version: 10.0.1(eslint@10.6.0) '@eslint/markdown': specifier: ^8.0.3 - version: 8.0.3 + version: 8.0.3(supports-color@8.1.1) '@repo/mocks': specifier: workspace:* version: link:packages/mocks @@ -201,7 +204,7 @@ importers: version: 8.63.0(@typescript-eslint/parser@8.63.0)(eslint@10.6.0)(typescript@6.0.3) '@typescript-eslint/parser': specifier: ^8.63.0 - version: 8.63.0(eslint@10.6.0)(typescript@6.0.3) + version: 8.63.0(eslint@10.6.0)(supports-color@8.1.1)(typescript@6.0.3) '@vitejs/plugin-react': specifier: 'catalog:' version: 6.0.3(@rolldown/plugin-babel@0.2.3)(babel-plugin-react-compiler@1.0.0)(vite@8.1.3) @@ -216,19 +219,16 @@ importers: version: 0.0.15 '@vscode/test-electron': specifier: ^3.0.0 - version: 3.0.0 + version: 3.0.0(supports-color@8.1.1) '@vscode/vsce': specifier: ^3.9.2 - version: 3.9.2 + version: 3.9.2(supports-color@8.1.1) babel-plugin-react-compiler: specifier: 'catalog:' version: 1.0.0 bufferutil: specifier: ^4.1.0 version: 4.1.0 - chromatic: - specifier: ^18.0.1 - version: 18.0.1 coder: specifier: 'catalog:' version: '@coder/coder@https://codeload.github.com/coder/coder/tar.gz/2e8d80abf74d655b54ace1533b6c13102ea8d549' @@ -243,22 +243,22 @@ importers: version: 1.11.21 electron: specifier: 39.8.5 - version: 39.8.5 + version: 39.8.5(supports-color@8.1.1) esbuild: specifier: ^0.28.1 version: 0.28.1 eslint: specifier: ^10.6.0 - version: 10.6.0 + version: 10.6.0(supports-color@8.1.1) eslint-config-prettier: specifier: ^10.1.8 version: 10.1.8(eslint@10.6.0) eslint-import-resolver-typescript: specifier: ^4.4.5 - version: 4.4.5(eslint-plugin-import-x@4.17.1)(eslint@10.6.0) + version: 4.4.5(eslint-plugin-import-x@4.17.1)(eslint@10.6.0)(supports-color@8.1.1) eslint-plugin-import-x: specifier: ^4.17.1 - version: 4.17.1(@typescript-eslint/utils@8.63.0)(eslint@10.6.0) + version: 4.17.1(@typescript-eslint/utils@8.63.0)(eslint@10.6.0)(supports-color@8.1.1) eslint-plugin-package-json: specifier: ^1.5.0 version: 1.5.0(@types/estree@1.0.9)(eslint@10.6.0) @@ -277,6 +277,9 @@ importers: memfs: specifier: ^4.63.0 version: 4.63.0(tslib@2.8.1) + playwright-core: + specifier: ^1.61.1 + version: 1.61.1 prettier: specifier: ^3.9.4 version: 3.9.4 @@ -300,7 +303,7 @@ importers: version: 6.0.6 vite: specifier: 'catalog:' - version: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1) + version: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.23.1) vitest: specifier: ^4.1.10 version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(@vitest/coverage-v8@4.1.10)(jsdom@29.1.1)(vite@8.1.3) @@ -332,7 +335,7 @@ importers: version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1) + version: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.23.1) packages/shared: devDependencies: @@ -357,7 +360,7 @@ importers: version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1) + version: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.23.1) packages/storybook-utils: dependencies: @@ -428,7 +431,7 @@ importers: version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1) + version: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.23.1) packages/webview-shared: dependencies: @@ -508,7 +511,7 @@ importers: version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1) + version: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.23.1) packages: @@ -669,6 +672,14 @@ packages: resolution: {gitHosted: true, tarball: https://codeload.github.com/coder/coder/tar.gz/2e8d80abf74d655b54ace1533b6c13102ea8d549} version: 0.0.0 + '@coder/pixel-storybook@0.2.1': + resolution: {integrity: sha512-o4EIY5JcLr+U/URGwfTQ1s0rs2jp4CfdOG94kHABLVD6wFEwUDyl52LX8utx6ArOkxuixbe3NMUTdxWU33fqLw==} + engines: {node: '>=22'} + hasBin: true + peerDependencies: + playwright-core: '>=1.47.2' + storybook: '>=8.0.0' + '@csstools/color-helpers@6.1.0': resolution: {integrity: sha512-064IFJdjTfUqnjpCVpMOdbr8FLQBhinbZj6yRv2An2E41O/pLEXqfFRWqGq/SxlE5PEUYTlvWsG2r8MswAVvkg==} engines: {node: '>=20.19.0'} @@ -2403,6 +2414,9 @@ packages: boundary@2.0.0: resolution: {integrity: sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==} + brace-expansion@1.1.16: + resolution: {integrity: sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==} + brace-expansion@2.1.1: resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} @@ -2439,6 +2453,10 @@ packages: 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'} + c8@11.0.0: resolution: {integrity: sha512-e/uRViGHSVIJv7zsaDKM7VRn2390TgHXqUSvYwPHBQaU6L7E9L0n9JbdkwdYPvshDT0KymBmmlwSpms3yBaMNg==} engines: {node: 20 || >=22} @@ -2519,22 +2537,6 @@ packages: chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - chromatic@18.0.1: - resolution: {integrity: sha512-GlTYrZ4ui5ZW8Jzut6SAo5bMH3sIugYZ37Nq2DyVHBfPINeEzGA8eG5xNo4N/I2aRdM9Xnqw0SCls7wgf2llvA==} - engines: {node: '>=22.0.0'} - hasBin: true - peerDependencies: - '@chromatic-com/cypress': ^0.*.* || ^1.0.0 - '@chromatic-com/playwright': ^0.*.* || ^1.0.0 - '@chromatic-com/vitest': ^0.*.* || ^1.0.0 - peerDependenciesMeta: - '@chromatic-com/cypress': - optional: true - '@chromatic-com/playwright': - optional: true - '@chromatic-com/vitest': - optional: true - cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -2588,11 +2590,18 @@ packages: compare-versions@6.1.1: resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + concurrently@10.0.3: resolution: {integrity: sha512-hc3LH4UaKWd/bbyDK/IGVa4RB6PtQ3CUYwtrkzqHn+wIG3Hr5fhpRlk0L/gCa8ZE1L/Ufj50Zho69cI5w8SQBA==} engines: {node: '>=22'} hasBin: true + content-disposition@0.5.2: + resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} + engines: {node: '>= 0.6'} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -3183,6 +3192,9 @@ packages: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} + get-port-please@3.1.2: + resolution: {integrity: sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==} + get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} @@ -3891,10 +3903,18 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + mime-db@1.33.0: + resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} + engines: {node: '>= 0.6'} + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} + mime-types@2.1.18: + resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==} + engines: {node: '>= 0.6'} + mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} @@ -3924,6 +3944,9 @@ packages: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + minimatch@9.0.9: resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} @@ -4109,6 +4132,9 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-is-inside@1.0.2: + resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -4124,6 +4150,9 @@ packages: resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} engines: {node: 18 || 20 || >=22} + path-to-regexp@3.3.0: + resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} + path-type@6.0.0: resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} engines: {node: '>=18'} @@ -4149,6 +4178,11 @@ packages: resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} + playwright-core@1.61.1: + resolution: {integrity: sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==} + engines: {node: '>=18'} + hasBin: true + pluralize@2.0.0: resolution: {integrity: sha512-TqNZzQCD4S42De9IfnnBvILN7HAW7riLqsCyp8lgjXeysyPlX5HhqKAcJHHHb9XskE4/a+7VGC9zzx8Ls0jOAw==} @@ -4249,6 +4283,10 @@ packages: randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + range-parser@1.2.0: + resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==} + engines: {node: '>= 0.6'} + rc-config-loader@4.1.4: resolution: {integrity: sha512-3GiwEzklkbXTDp52UR5nT8iXgYAx1V9ZG/kDZT7p60u2GCv2XTwQq4NzinMoMpNtXhmt3WkhYXcj6HH8HdwCEQ==} @@ -4409,6 +4447,9 @@ packages: serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + serve-handler@6.1.7: + resolution: {integrity: sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==} + setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} @@ -4733,6 +4774,11 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tsx@4.23.1: + resolution: {integrity: sha512-GQHnkIfxyx1wYCOS/wonik5MVRZU9hi1TEZmzGZSCJB1y9YgoZ8H6itNE/u4suE+yLmOzuE4E5S4TZ/ZX2wcWQ==} + engines: {node: '>=18.0.0'} + hasBin: true + tsyringe@4.10.0: resolution: {integrity: sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==} engines: {node: '>= 6.0.0'} @@ -5084,6 +5130,9 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + zod@4.4.3: resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} @@ -5316,6 +5365,15 @@ snapshots: '@coder/coder@https://codeload.github.com/coder/coder/tar.gz/2e8d80abf74d655b54ace1533b6c13102ea8d549': {} + '@coder/pixel-storybook@0.2.1(playwright-core@1.61.1)(storybook@10.4.6)': + dependencies: + get-port-please: 3.1.2 + jsonc-parser: 3.3.1 + playwright-core: 1.61.1 + serve-handler: 6.1.7 + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(bufferutil@4.1.0)(prettier@3.9.4)(react@19.2.7)(utf-8-validate@6.0.6) + zod: 3.23.8 + '@csstools/color-helpers@6.1.0': {} '@csstools/css-calc@3.2.1(@csstools/css-parser-algorithms@4.0.0)(@csstools/css-tokenizer@4.0.0)': @@ -5340,7 +5398,7 @@ snapshots: '@csstools/css-tokenizer@4.0.0': {} - '@electron/get@2.0.3': + '@electron/get@2.0.3(supports-color@8.1.1)': dependencies: debug: 4.4.3(supports-color@8.1.1) env-paths: 2.2.1 @@ -5348,7 +5406,7 @@ snapshots: got: 11.8.6 progress: 2.0.3 semver: 6.3.1 - sumchecker: 3.0.1 + sumchecker: 3.0.1(supports-color@8.1.1) optionalDependencies: global-agent: 3.0.0 transitivePeerDependencies: @@ -5479,7 +5537,7 @@ snapshots: '@eslint-community/eslint-utils@4.9.1(eslint@10.6.0)': dependencies: - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -5487,9 +5545,9 @@ snapshots: '@eslint-react/ast@5.11.3(eslint@10.6.0)(typescript@6.0.3)': dependencies: '@typescript-eslint/types': 8.63.0 - '@typescript-eslint/typescript-estree': 8.63.0(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.63.0(supports-color@8.1.1)(typescript@6.0.3) '@typescript-eslint/utils': 8.63.0(eslint@10.6.0)(typescript@6.0.3) - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) string-ts: 2.3.1 typescript: 6.0.3 transitivePeerDependencies: @@ -5505,7 +5563,7 @@ snapshots: '@typescript-eslint/scope-manager': 8.63.0 '@typescript-eslint/types': 8.63.0 '@typescript-eslint/utils': 8.63.0(eslint@10.6.0)(typescript@6.0.3) - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) ts-pattern: 5.9.0 typescript: 6.0.3 transitivePeerDependencies: @@ -5514,7 +5572,7 @@ snapshots: '@eslint-react/eslint-plugin@5.11.3(eslint@10.6.0)(typescript@6.0.3)': dependencies: '@eslint-react/shared': 5.11.3(eslint@10.6.0)(typescript@6.0.3) - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) eslint-plugin-react-dom: 5.11.3(eslint@10.6.0)(typescript@6.0.3) eslint-plugin-react-jsx: 5.11.3(eslint@10.6.0)(typescript@6.0.3) eslint-plugin-react-naming-convention: 5.11.3(eslint@10.6.0)(typescript@6.0.3) @@ -5528,7 +5586,7 @@ snapshots: '@eslint-react/eslint@5.11.3(eslint@10.6.0)(typescript@6.0.3)': dependencies: '@typescript-eslint/utils': 8.63.0(eslint@10.6.0)(typescript@6.0.3) - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -5541,7 +5599,7 @@ snapshots: '@eslint-react/var': 5.11.3(eslint@10.6.0)(typescript@6.0.3) '@typescript-eslint/types': 8.63.0 '@typescript-eslint/utils': 8.63.0(eslint@10.6.0)(typescript@6.0.3) - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) ts-pattern: 5.9.0 typescript: 6.0.3 transitivePeerDependencies: @@ -5551,7 +5609,7 @@ snapshots: dependencies: '@eslint-react/eslint': 5.11.3(eslint@10.6.0)(typescript@6.0.3) '@typescript-eslint/utils': 8.63.0(eslint@10.6.0)(typescript@6.0.3) - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) ts-pattern: 5.9.0 typescript: 6.0.3 zod: 4.4.3 @@ -5565,13 +5623,13 @@ snapshots: '@typescript-eslint/scope-manager': 8.63.0 '@typescript-eslint/types': 8.63.0 '@typescript-eslint/utils': 8.63.0(eslint@10.6.0)(typescript@6.0.3) - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) ts-pattern: 5.9.0 typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@eslint/config-array@0.23.5': + '@eslint/config-array@0.23.5(supports-color@8.1.1)': dependencies: '@eslint/object-schema': 3.0.5 debug: 4.4.3(supports-color@8.1.1) @@ -5589,14 +5647,14 @@ snapshots: '@eslint/js@10.0.1(eslint@10.6.0)': optionalDependencies: - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) - '@eslint/markdown@8.0.3': + '@eslint/markdown@8.0.3(supports-color@8.1.1)': dependencies: '@eslint/core': 1.2.1 '@eslint/plugin-kit': 0.7.2 github-slugger: 2.0.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@8.1.1) mdast-util-frontmatter: 2.0.1 mdast-util-gfm: 3.1.0 mdast-util-math: 3.0.0 @@ -5647,7 +5705,7 @@ snapshots: dependencies: glob: 13.0.6 react-docgen-typescript: 2.4.0(typescript@6.0.3) - vite: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1) + vite: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.23.1) optionalDependencies: typescript: 6.0.3 @@ -6137,7 +6195,7 @@ snapshots: rolldown: 1.1.4 optionalDependencies: '@babel/runtime': 7.29.7 - vite: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1) + vite: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.23.1) '@rolldown/pluginutils@1.0.1': {} @@ -6257,7 +6315,7 @@ snapshots: '@storybook/csf-plugin': 10.4.6(esbuild@0.28.1)(storybook@10.4.6)(vite@8.1.3) storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(bufferutil@4.1.0)(prettier@3.9.4)(react@19.2.7)(utf-8-validate@6.0.6) ts-dedent: 2.3.0 - vite: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1) + vite: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.23.1) transitivePeerDependencies: - esbuild - rollup @@ -6269,7 +6327,7 @@ snapshots: unplugin: 2.3.11 optionalDependencies: esbuild: 0.28.1 - vite: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1) + vite: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.23.1) '@storybook/global@5.0.0': {} @@ -6300,7 +6358,7 @@ snapshots: resolve: 1.22.12 storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(bufferutil@4.1.0)(prettier@3.9.4)(react@19.2.7)(utf-8-validate@6.0.6) tsconfig-paths: 4.2.0 - vite: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1) + vite: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.23.1) transitivePeerDependencies: - '@types/react' - '@types/react-dom' @@ -6532,12 +6590,12 @@ snapshots: '@typescript-eslint/eslint-plugin@8.63.0(@typescript-eslint/parser@8.63.0)(eslint@10.6.0)(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.63.0(eslint@10.6.0)(typescript@6.0.3) + '@typescript-eslint/parser': 8.63.0(eslint@10.6.0)(supports-color@8.1.1)(typescript@6.0.3) '@typescript-eslint/scope-manager': 8.63.0 '@typescript-eslint/type-utils': 8.63.0(eslint@10.6.0)(typescript@6.0.3) '@typescript-eslint/utils': 8.63.0(eslint@10.6.0)(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.63.0 - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@6.0.3) @@ -6545,19 +6603,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.63.0(eslint@10.6.0)(typescript@6.0.3)': + '@typescript-eslint/parser@8.63.0(eslint@10.6.0)(supports-color@8.1.1)(typescript@6.0.3)': dependencies: '@typescript-eslint/scope-manager': 8.63.0 '@typescript-eslint/types': 8.63.0 - '@typescript-eslint/typescript-estree': 8.63.0(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.63.0(supports-color@8.1.1)(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.63.0 debug: 4.4.3(supports-color@8.1.1) - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.63.0(typescript@6.0.3)': + '@typescript-eslint/project-service@8.63.0(supports-color@8.1.1)(typescript@6.0.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.63.0(typescript@6.0.3) '@typescript-eslint/types': 8.63.0 @@ -6578,10 +6636,10 @@ snapshots: '@typescript-eslint/type-utils@8.63.0(eslint@10.6.0)(typescript@6.0.3)': dependencies: '@typescript-eslint/types': 8.63.0 - '@typescript-eslint/typescript-estree': 8.63.0(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.63.0(supports-color@8.1.1)(typescript@6.0.3) '@typescript-eslint/utils': 8.63.0(eslint@10.6.0)(typescript@6.0.3) debug: 4.4.3(supports-color@8.1.1) - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: @@ -6589,9 +6647,9 @@ snapshots: '@typescript-eslint/types@8.63.0': {} - '@typescript-eslint/typescript-estree@8.63.0(typescript@6.0.3)': + '@typescript-eslint/typescript-estree@8.63.0(supports-color@8.1.1)(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.63.0(typescript@6.0.3) + '@typescript-eslint/project-service': 8.63.0(supports-color@8.1.1)(typescript@6.0.3) '@typescript-eslint/tsconfig-utils': 8.63.0(typescript@6.0.3) '@typescript-eslint/types': 8.63.0 '@typescript-eslint/visitor-keys': 8.63.0 @@ -6609,8 +6667,8 @@ snapshots: '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0) '@typescript-eslint/scope-manager': 8.63.0 '@typescript-eslint/types': 8.63.0 - '@typescript-eslint/typescript-estree': 8.63.0(typescript@6.0.3) - eslint: 10.6.0 + '@typescript-eslint/typescript-estree': 8.63.0(supports-color@8.1.1)(typescript@6.0.3) + eslint: 10.6.0(supports-color@8.1.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -6622,8 +6680,8 @@ snapshots: '@typespec/ts-http-runtime@0.3.6': dependencies: - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 + http-proxy-agent: 7.0.2(supports-color@8.1.1) + https-proxy-agent: 7.0.6(supports-color@8.1.1) tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -6701,7 +6759,7 @@ snapshots: '@vitejs/plugin-react@6.0.3(@rolldown/plugin-babel@0.2.3)(babel-plugin-react-compiler@1.0.0)(vite@8.1.3)': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1) + vite: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.23.1) optionalDependencies: '@rolldown/plugin-babel': 0.2.3(@babel/core@7.29.7)(@babel/runtime@7.29.7)(rolldown@1.1.4)(vite@8.1.3) babel-plugin-react-compiler: 1.0.0 @@ -6743,7 +6801,7 @@ snapshots: estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1) + vite: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.23.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -6815,10 +6873,10 @@ snapshots: transitivePeerDependencies: - monocart-coverage-reports - '@vscode/test-electron@3.0.0': + '@vscode/test-electron@3.0.0(supports-color@8.1.1)': dependencies: - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 + http-proxy-agent: 7.0.2(supports-color@8.1.1) + https-proxy-agent: 7.0.6(supports-color@8.1.1) jszip: 3.10.1 ora: 8.2.0 semver: 7.8.5 @@ -6864,7 +6922,7 @@ snapshots: '@vscode/vsce-sign-win32-arm64': 2.0.6 '@vscode/vsce-sign-win32-x64': 2.0.6 - '@vscode/vsce@3.9.2': + '@vscode/vsce@3.9.2(supports-color@8.1.1)': dependencies: '@azure/identity': 4.13.1 '@secretlint/node': 10.2.2 @@ -6887,7 +6945,7 @@ snapshots: minimatch: 10.2.5 parse-semver: 1.1.1 read: 1.0.7 - secretlint: 10.2.2 + secretlint: 10.2.2(supports-color@8.1.1) semver: 7.8.5 tmp: 0.2.7 typed-rest-client: 1.8.11 @@ -6908,7 +6966,7 @@ snapshots: acorn@8.17.0: {} - agent-base@6.0.2: + agent-base@6.0.2(supports-color@8.1.1): dependencies: debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: @@ -6984,11 +7042,11 @@ snapshots: axe-core@4.12.1: {} - axios@1.18.1: + axios@1.18.1(supports-color@8.1.1): dependencies: follow-redirects: 1.16.0 form-data: 4.0.6 - https-proxy-agent: 5.0.1 + https-proxy-agent: 5.0.1(supports-color@8.1.1) proxy-from-env: 2.1.0 transitivePeerDependencies: - debug @@ -7038,6 +7096,11 @@ snapshots: boundary@2.0.0: {} + brace-expansion@1.1.16: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + brace-expansion@2.1.1: dependencies: balanced-match: 1.0.2 @@ -7078,6 +7141,8 @@ snapshots: dependencies: run-applescript: 7.1.0 + bytes@3.0.0: {} + c8@11.0.0: dependencies: '@bcoe/v8-coverage': 1.0.2 @@ -7177,10 +7242,6 @@ snapshots: chownr@1.1.4: optional: true - chromatic@18.0.1: - dependencies: - semver: 7.8.5 - cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 @@ -7225,6 +7286,8 @@ snapshots: compare-versions@6.1.1: {} + concat-map@0.0.1: {} + concurrently@10.0.3: dependencies: chalk: 5.6.2 @@ -7234,6 +7297,8 @@ snapshots: tree-kill: 1.2.2 yargs: 18.0.0 + content-disposition@0.5.2: {} + convert-source-map@2.0.0: {} core-util-is@1.0.3: {} @@ -7401,11 +7466,11 @@ snapshots: electron-to-chromium@1.5.388: {} - electron@39.8.5: + electron@39.8.5(supports-color@8.1.1): dependencies: - '@electron/get': 2.0.3 + '@electron/get': 2.0.3(supports-color@8.1.1) '@types/node': 22.20.0 - extract-zip: 2.0.1 + extract-zip: 2.0.1(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -7508,11 +7573,11 @@ snapshots: eslint-config-prettier@10.1.8(eslint@10.6.0): dependencies: - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) eslint-fix-utils@0.4.2(@types/estree@1.0.9)(eslint@10.6.0): dependencies: - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) optionalDependencies: '@types/estree': 1.0.9 @@ -7523,10 +7588,10 @@ snapshots: optionalDependencies: unrs-resolver: 1.12.2 - eslint-import-resolver-typescript@4.4.5(eslint-plugin-import-x@4.17.1)(eslint@10.6.0): + eslint-import-resolver-typescript@4.4.5(eslint-plugin-import-x@4.17.1)(eslint@10.6.0)(supports-color@8.1.1): dependencies: debug: 4.4.3(supports-color@8.1.1) - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) eslint-import-context: 0.1.9(unrs-resolver@1.12.2) get-tsconfig: 4.14.0 is-bun-module: 2.0.0 @@ -7534,22 +7599,22 @@ snapshots: tinyglobby: 0.2.17 unrs-resolver: 1.12.2 optionalDependencies: - eslint-plugin-import-x: 4.17.1(@typescript-eslint/utils@8.63.0)(eslint@10.6.0) + eslint-plugin-import-x: 4.17.1(@typescript-eslint/utils@8.63.0)(eslint@10.6.0)(supports-color@8.1.1) transitivePeerDependencies: - supports-color eslint-json-compat-utils@0.2.3(eslint@10.6.0)(jsonc-eslint-parser@3.1.0): dependencies: - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) esquery: 1.7.0 jsonc-eslint-parser: 3.1.0 - eslint-plugin-import-x@4.17.1(@typescript-eslint/utils@8.63.0)(eslint@10.6.0): + eslint-plugin-import-x@4.17.1(@typescript-eslint/utils@8.63.0)(eslint@10.6.0)(supports-color@8.1.1): dependencies: '@typescript-eslint/types': 8.63.0 comment-parser: 1.4.7 debug: 4.4.3(supports-color@8.1.1) - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) eslint-import-context: 0.1.9(unrs-resolver@1.12.2) is-glob: 4.0.3 minimatch: 10.2.5 @@ -7567,7 +7632,7 @@ snapshots: change-case: 5.4.4 detect-indent: 7.0.2 detect-newline: 4.0.1 - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) eslint-fix-utils: 0.4.2(@types/estree@1.0.9)(eslint@10.6.0) eslint-json-compat-utils: 0.2.3(eslint@10.6.0)(jsonc-eslint-parser@3.1.0) jsonc-eslint-parser: 3.1.0 @@ -7587,7 +7652,7 @@ snapshots: '@typescript-eslint/types': 8.63.0 '@typescript-eslint/utils': 8.63.0(eslint@10.6.0)(typescript@6.0.3) compare-versions: 6.1.1 - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -7601,7 +7666,7 @@ snapshots: '@eslint-react/shared': 5.11.3(eslint@10.6.0)(typescript@6.0.3) '@typescript-eslint/types': 8.63.0 '@typescript-eslint/utils': 8.63.0(eslint@10.6.0)(typescript@6.0.3) - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -7614,7 +7679,7 @@ snapshots: '@eslint-react/var': 5.11.3(eslint@10.6.0)(typescript@6.0.3) '@typescript-eslint/types': 8.63.0 '@typescript-eslint/utils': 8.63.0(eslint@10.6.0)(typescript@6.0.3) - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) ts-pattern: 5.9.0 typescript: 6.0.3 transitivePeerDependencies: @@ -7629,7 +7694,7 @@ snapshots: '@eslint-react/var': 5.11.3(eslint@10.6.0)(typescript@6.0.3) '@typescript-eslint/types': 8.63.0 '@typescript-eslint/utils': 8.63.0(eslint@10.6.0)(typescript@6.0.3) - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -7644,7 +7709,7 @@ snapshots: '@typescript-eslint/types': 8.63.0 '@typescript-eslint/utils': 8.63.0(eslint@10.6.0)(typescript@6.0.3) birecord: 0.1.1 - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) ts-pattern: 5.9.0 typescript: 6.0.3 transitivePeerDependencies: @@ -7661,10 +7726,10 @@ snapshots: '@typescript-eslint/scope-manager': 8.63.0 '@typescript-eslint/type-utils': 8.63.0(eslint@10.6.0)(typescript@6.0.3) '@typescript-eslint/types': 8.63.0 - '@typescript-eslint/typescript-estree': 8.63.0(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.63.0(supports-color@8.1.1)(typescript@6.0.3) '@typescript-eslint/utils': 8.63.0(eslint@10.6.0)(typescript@6.0.3) compare-versions: 6.1.1 - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) string-ts: 2.3.1 ts-api-utils: 2.5.0(typescript@6.0.3) ts-pattern: 5.9.0 @@ -7675,7 +7740,7 @@ snapshots: eslint-plugin-storybook@10.4.6(eslint@10.6.0)(storybook@10.4.6)(typescript@6.0.3): dependencies: '@typescript-eslint/utils': 8.63.0(eslint@10.6.0)(typescript@6.0.3) - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(bufferutil@4.1.0)(prettier@3.9.4)(react@19.2.7)(utf-8-validate@6.0.6) transitivePeerDependencies: - supports-color @@ -7692,11 +7757,11 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.6.0: + eslint@10.6.0(supports-color@8.1.1): dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.23.5 + '@eslint/config-array': 0.23.5(supports-color@8.1.1) '@eslint/config-helpers': 0.6.0 '@eslint/core': 1.2.1 '@eslint/plugin-kit': 0.7.2 @@ -7764,7 +7829,7 @@ snapshots: expect-type@1.4.0: {} - extract-zip@2.0.1: + extract-zip@2.0.1(supports-color@8.1.1): dependencies: debug: 4.4.3(supports-color@8.1.1) get-stream: 5.2.0 @@ -7892,6 +7957,8 @@ snapshots: hasown: 2.0.4 math-intrinsics: 1.1.0 + get-port-please@3.1.2: {} + get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 @@ -7905,7 +7972,7 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 - get-uri@8.0.1: + get-uri@8.0.1(supports-color@8.1.1): dependencies: basic-ftp: 5.3.1 data-uri-to-buffer: 8.0.0 @@ -8040,14 +8107,14 @@ snapshots: http-cache-semantics@4.2.0: {} - http-proxy-agent@7.0.2: + http-proxy-agent@7.0.2(supports-color@8.1.1): dependencies: agent-base: 7.1.4 debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color - http-proxy-agent@9.1.0: + http-proxy-agent@9.1.0(supports-color@8.1.1): dependencies: agent-base: 9.0.0 debug: 4.4.3(supports-color@8.1.1) @@ -8061,21 +8128,21 @@ snapshots: quick-lru: 5.1.1 resolve-alpn: 1.2.1 - https-proxy-agent@5.0.1: + https-proxy-agent@5.0.1(supports-color@8.1.1): dependencies: - agent-base: 6.0.2 + agent-base: 6.0.2(supports-color@8.1.1) debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color - https-proxy-agent@7.0.6: + https-proxy-agent@7.0.6(supports-color@8.1.1): dependencies: agent-base: 7.1.4 debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color - https-proxy-agent@9.1.0: + https-proxy-agent@9.1.0(supports-color@8.1.1): dependencies: agent-base: 9.0.0 debug: 4.4.3(supports-color@8.1.1) @@ -8472,14 +8539,14 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 - mdast-util-from-markdown@2.0.3: + mdast-util-from-markdown@2.0.3(supports-color@8.1.1): dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 decode-named-character-reference: 1.3.0 devlop: 1.1.0 mdast-util-to-string: 4.0.0 - micromark: 4.0.2 + micromark: 4.0.2(supports-color@8.1.1) micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-decode-string: 2.0.1 micromark-util-normalize-identifier: 2.0.1 @@ -8494,7 +8561,7 @@ snapshots: '@types/mdast': 4.0.4 devlop: 1.1.0 escape-string-regexp: 5.0.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@8.1.1) mdast-util-to-markdown: 2.1.2 micromark-extension-frontmatter: 2.0.0 transitivePeerDependencies: @@ -8512,7 +8579,7 @@ snapshots: dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@8.1.1) mdast-util-to-markdown: 2.1.2 micromark-util-normalize-identifier: 2.0.1 transitivePeerDependencies: @@ -8521,7 +8588,7 @@ snapshots: mdast-util-gfm-strikethrough@2.0.0: dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@8.1.1) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color @@ -8531,7 +8598,7 @@ snapshots: '@types/mdast': 4.0.4 devlop: 1.1.0 markdown-table: 3.0.4 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@8.1.1) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color @@ -8540,14 +8607,14 @@ snapshots: dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@8.1.1) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color mdast-util-gfm@3.1.0: dependencies: - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@8.1.1) mdast-util-gfm-autolink-literal: 2.0.1 mdast-util-gfm-footnote: 2.1.0 mdast-util-gfm-strikethrough: 2.0.0 @@ -8563,7 +8630,7 @@ snapshots: '@types/mdast': 4.0.4 devlop: 1.1.0 longest-streak: 3.1.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@8.1.1) mdast-util-to-markdown: 2.1.2 unist-util-remove-position: 5.0.0 transitivePeerDependencies: @@ -8799,7 +8866,7 @@ snapshots: micromark-util-types@2.0.2: {} - micromark@4.0.2: + micromark@4.0.2(supports-color@8.1.1): dependencies: '@types/debug': 4.1.13 debug: 4.4.3(supports-color@8.1.1) @@ -8826,8 +8893,14 @@ snapshots: braces: 3.0.3 picomatch: 2.3.2 + mime-db@1.33.0: {} + mime-db@1.52.0: {} + mime-types@2.1.18: + dependencies: + mime-db: 1.33.0 + mime-types@2.1.35: dependencies: mime-db: 1.52.0 @@ -8846,6 +8919,10 @@ snapshots: dependencies: brace-expansion: 5.0.7 + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.16 + minimatch@9.0.9: dependencies: brace-expansion: 2.1.1 @@ -9036,13 +9113,13 @@ snapshots: p-map@7.0.5: {} - pac-proxy-agent@9.1.0: + pac-proxy-agent@9.1.0(supports-color@8.1.1): dependencies: agent-base: 9.0.0 debug: 4.4.3(supports-color@8.1.1) - get-uri: 8.0.1 - http-proxy-agent: 9.1.0 - https-proxy-agent: 9.1.0 + get-uri: 8.0.1(supports-color@8.1.1) + http-proxy-agent: 9.1.0(supports-color@8.1.1) + https-proxy-agent: 9.1.0(supports-color@8.1.1) pac-resolver: 9.0.1(quickjs-wasi@2.2.0) quickjs-wasi: 2.2.0 socks-proxy-agent: 10.1.0 @@ -9096,6 +9173,8 @@ snapshots: path-exists@4.0.0: {} + path-is-inside@1.0.2: {} + path-key@3.1.1: {} path-parse@1.0.7: {} @@ -9110,6 +9189,8 @@ snapshots: lru-cache: 11.5.1 minipass: 7.1.3 + path-to-regexp@3.3.0: {} + path-type@6.0.0: {} pathe@2.0.3: {} @@ -9124,6 +9205,8 @@ snapshots: picomatch@4.0.5: {} + playwright-core@1.61.1: {} + pluralize@2.0.0: {} pluralize@8.0.0: {} @@ -9176,14 +9259,14 @@ snapshots: proxy-agent-negotiate@1.1.0: {} - proxy-agent@8.0.2: + proxy-agent@8.0.2(supports-color@8.1.1): dependencies: agent-base: 9.0.0 debug: 4.4.3(supports-color@8.1.1) - http-proxy-agent: 9.1.0 - https-proxy-agent: 9.1.0 + http-proxy-agent: 9.1.0(supports-color@8.1.1) + https-proxy-agent: 9.1.0(supports-color@8.1.1) lru-cache: 7.18.3 - pac-proxy-agent: 9.1.0 + pac-proxy-agent: 9.1.0(supports-color@8.1.1) proxy-from-env: 2.1.0 socks-proxy-agent: 10.1.0 transitivePeerDependencies: @@ -9222,6 +9305,8 @@ snapshots: dependencies: safe-buffer: 5.2.1 + range-parser@1.2.0: {} + rc-config-loader@4.1.4: dependencies: debug: 4.4.3(supports-color@8.1.1) @@ -9396,7 +9481,7 @@ snapshots: scheduler@0.27.0: {} - secretlint@10.2.2: + secretlint@10.2.2(supports-color@8.1.1): dependencies: '@secretlint/config-creator': 10.2.2 '@secretlint/formatter': 10.2.2 @@ -9426,6 +9511,16 @@ snapshots: dependencies: randombytes: 2.1.0 + serve-handler@6.1.7: + dependencies: + bytes: 3.0.0 + content-disposition: 0.5.2 + mime-types: 2.1.18 + minimatch: 3.1.5 + path-is-inside: 1.0.2 + path-to-regexp: 3.3.0 + range-parser: 1.2.0 + setimmediate@1.0.5: {} shebang-command@2.0.0: @@ -9624,7 +9719,7 @@ snapshots: dependencies: boundary: 2.0.0 - sumchecker@3.0.1: + sumchecker@3.0.1(supports-color@8.1.1): dependencies: debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: @@ -9758,6 +9853,13 @@ snapshots: tslib@2.8.1: {} + tsx@4.23.1: + dependencies: + esbuild: 0.28.1 + optionalDependencies: + fsevents: 2.3.3 + optional: true + tsyringe@4.10.0: dependencies: tslib: 1.14.1 @@ -9787,10 +9889,10 @@ snapshots: typescript-eslint@8.63.0(eslint@10.6.0)(typescript@6.0.3): dependencies: '@typescript-eslint/eslint-plugin': 8.63.0(@typescript-eslint/parser@8.63.0)(eslint@10.6.0)(typescript@6.0.3) - '@typescript-eslint/parser': 8.63.0(eslint@10.6.0)(typescript@6.0.3) - '@typescript-eslint/typescript-estree': 8.63.0(typescript@6.0.3) + '@typescript-eslint/parser': 8.63.0(eslint@10.6.0)(supports-color@8.1.1)(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.63.0(supports-color@8.1.1)(typescript@6.0.3) '@typescript-eslint/utils': 8.63.0(eslint@10.6.0)(typescript@6.0.3) - eslint: 10.6.0 + eslint: 10.6.0(supports-color@8.1.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -9910,7 +10012,7 @@ snapshots: version-range@4.15.0: {} - vite@8.1.3(@types/node@22.20.0)(esbuild@0.28.1): + vite@8.1.3(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.23.1): dependencies: lightningcss: 1.32.0 picomatch: 4.0.5 @@ -9921,6 +10023,7 @@ snapshots: '@types/node': 22.20.0 esbuild: 0.28.1 fsevents: 2.3.3 + tsx: 4.23.1 vitest@4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(@vitest/coverage-v8@4.1.10)(jsdom@29.1.1)(vite@8.1.3): dependencies: @@ -9942,7 +10045,7 @@ snapshots: tinyexec: 1.2.4 tinyglobby: 0.2.17 tinyrainbow: 3.1.0 - vite: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1) + vite: 8.1.3(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.23.1) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.1 @@ -10080,6 +10183,8 @@ snapshots: yocto-queue@0.1.0: {} + zod@3.23.8: {} + zod@4.4.3: {} zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index d0398627a2..b786ddbcbf 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -31,6 +31,7 @@ allowBuilds: electron: true esbuild: true keytar: false + odiff-bin: true unrs-resolver: true utf-8-validate: true