diff --git a/apps/web/.gitignore b/apps/web/.gitignore index 4c664ed4..9d6056ba 100644 --- a/apps/web/.gitignore +++ b/apps/web/.gitignore @@ -24,4 +24,5 @@ dist-ssr *.sw? .env -routeTree.gen.ts \ No newline at end of file +routeTree.gen.ts +*storybook.log diff --git a/apps/web/.storybook/main.ts b/apps/web/.storybook/main.ts new file mode 100644 index 00000000..09c332f9 --- /dev/null +++ b/apps/web/.storybook/main.ts @@ -0,0 +1,17 @@ +import type { StorybookConfig } from "@storybook/react-vite"; + +const config: StorybookConfig = { + stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"], + addons: [ + "@storybook/addon-essentials", + "@storybook/addon-onboarding", + "@chromatic-com/storybook", + "@storybook/experimental-addon-test", + "@storybook/addon-styling-webpack", + ], + framework: { + name: "@storybook/react-vite", + options: {}, + }, +}; +export default config; diff --git a/apps/web/.storybook/preview.ts b/apps/web/.storybook/preview.ts new file mode 100644 index 00000000..b70ac938 --- /dev/null +++ b/apps/web/.storybook/preview.ts @@ -0,0 +1,15 @@ +import type { Preview } from "@storybook/react"; +import "../src/index.css"; + +const preview: Preview = { + parameters: { + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/i, + }, + }, + }, +}; + +export default preview; diff --git a/apps/web/.storybook/vitest.setup.ts b/apps/web/.storybook/vitest.setup.ts new file mode 100644 index 00000000..c817de33 --- /dev/null +++ b/apps/web/.storybook/vitest.setup.ts @@ -0,0 +1,9 @@ +import { beforeAll } from "vitest"; +import { setProjectAnnotations } from "@storybook/react"; +import * as projectAnnotations from "./preview"; + +// This is an important step to apply the right configuration when testing your stories. +// More info at: https://storybook.js.org/docs/api/portable-stories/portable-stories-vitest#setprojectannotations +const project = setProjectAnnotations([projectAnnotations]); + +beforeAll(project.beforeAll); diff --git a/apps/web/Dockerfile.dev b/apps/web/Dockerfile.dev index 64a841c8..de5e6c21 100644 --- a/apps/web/Dockerfile.dev +++ b/apps/web/Dockerfile.dev @@ -1,16 +1,26 @@ FROM node:22.15.0-slim AS base +# Set environment variables ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" +# Install pnpm globally +RUN npm install -g pnpm + +# Copy package files COPY pnpm-lock.yaml package.json ./ +# Install dependencies using pnpm RUN pnpm install +# Copy the rest of the project files COPY . . +# Set working directory WORKDIR /app +# Expose port EXPOSE 5173 +# Start the app CMD ["pnpm", "run", "dev"] diff --git a/apps/web/package.json b/apps/web/package.json index 6093521a..325e7242 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -9,7 +9,9 @@ "lint": "eslint .", "preview": "vite preview", "prepare": "cd ../.. && husky ./apps/web/.husky", - "format": "prettier --write . && git add --all" + "format": "prettier --write . && git add --all", + "storybook": "storybook dev -p 6006", + "build-storybook": "storybook build" }, "lint-staged": { "*.{js,jsx,ts,tsx}": [ @@ -28,25 +30,46 @@ "react": "^19.1.0", "react-aria-components": "^1.8.0", "react-dom": "^19.1.0", + "tailwind-variants": "^1.0.0", "tailwindcss": "^4.1.5", "tailwindcss-react-aria-components": "^2.0.0" }, "devDependencies": { + "@chromatic-com/storybook": "^3", "@eslint/js": "^9.25.0", + "@storybook/addon-essentials": "^8.6.12", + "@storybook/addon-onboarding": "^8.6.12", + "@storybook/addon-styling-webpack": "^1.0.1", + "@storybook/blocks": "^8.6.12", + "@storybook/experimental-addon-test": "^8.6.12", + "@storybook/react": "^8.6.12", + "@storybook/react-vite": "^8.6.12", + "@storybook/test": "^8.6.12", "@tanstack/router-plugin": "^1.120.2", "@types/node": "^22.15.15", "@types/react": "^19.1.2", "@types/react-dom": "^19.1.2", "@vitejs/plugin-react": "^4.4.1", + "@vitest/browser": "^3.1.3", + "@vitest/coverage-v8": "^3.1.3", "eslint": "^9.25.0", "eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-refresh": "^0.4.19", + "eslint-plugin-storybook": "^0.12.0", "globals": "^16.0.0", "husky": "^9.1.7", "lint-staged": "^15.5.2", + "playwright": "^1.52.0", "prettier": "3.5.3", + "storybook": "^8.6.12", "typescript": "~5.8.3", "typescript-eslint": "^8.30.1", - "vite": "^6.3.5" + "vite": "^6.3.5", + "vitest": "^3.1.3" + }, + "eslintConfig": { + "extends": [ + "plugin:storybook/recommended" + ] } } diff --git a/apps/web/pnpm-lock.yaml b/apps/web/pnpm-lock.yaml index dc519304..419ac828 100644 --- a/apps/web/pnpm-lock.yaml +++ b/apps/web/pnpm-lock.yaml @@ -9,7 +9,7 @@ importers: dependencies: "@tailwindcss/vite": specifier: ^4.1.5 - version: 4.1.5(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) + version: 4.1.5(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) "@tanstack/react-query": specifier: ^5.75.5 version: 5.75.5(react@19.1.0) @@ -28,6 +28,9 @@ importers: react-dom: specifier: ^19.1.0 version: 19.1.0(react@19.1.0) + tailwind-variants: + specifier: ^1.0.0 + version: 1.0.0(tailwindcss@4.1.5) tailwindcss: specifier: ^4.1.5 version: 4.1.5 @@ -35,12 +38,39 @@ importers: specifier: ^2.0.0 version: 2.0.0(tailwindcss@4.1.5) devDependencies: + "@chromatic-com/storybook": + specifier: ^3 + version: 3.2.6(react@19.1.0)(storybook@8.6.12(prettier@3.5.3)) "@eslint/js": specifier: ^9.25.0 version: 9.26.0 + "@storybook/addon-essentials": + specifier: ^8.6.12 + version: 8.6.12(@types/react@19.1.3)(storybook@8.6.12(prettier@3.5.3)) + "@storybook/addon-onboarding": + specifier: ^8.6.12 + version: 8.6.12(storybook@8.6.12(prettier@3.5.3)) + "@storybook/addon-styling-webpack": + specifier: ^1.0.1 + version: 1.0.1(storybook@8.6.12(prettier@3.5.3))(webpack@5.99.8(esbuild@0.25.4)) + "@storybook/blocks": + specifier: ^8.6.12 + version: 8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3)) + "@storybook/experimental-addon-test": + specifier: ^8.6.12 + version: 8.6.12(@vitest/browser@3.1.3)(@vitest/runner@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3))(vitest@3.1.3) + "@storybook/react": + specifier: ^8.6.12 + version: 8.6.12(@storybook/test@8.6.12(storybook@8.6.12(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3))(typescript@5.8.3) + "@storybook/react-vite": + specifier: ^8.6.12 + version: 8.6.12(@storybook/test@8.6.12(storybook@8.6.12(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.40.2)(storybook@8.6.12(prettier@3.5.3))(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + "@storybook/test": + specifier: ^8.6.12 + version: 8.6.12(storybook@8.6.12(prettier@3.5.3)) "@tanstack/router-plugin": specifier: ^1.120.2 - version: 1.120.2(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) + version: 1.120.2(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))(webpack@5.99.8(esbuild@0.25.4)) "@types/node": specifier: ^22.15.15 version: 22.15.15 @@ -52,7 +82,13 @@ importers: version: 19.1.3(@types/react@19.1.3) "@vitejs/plugin-react": specifier: ^4.4.1 - version: 4.4.1(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) + version: 4.4.1(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + "@vitest/browser": + specifier: ^3.1.3 + version: 3.1.3(playwright@1.52.0)(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))(vitest@3.1.3) + "@vitest/coverage-v8": + specifier: ^3.1.3 + version: 3.1.3(@vitest/browser@3.1.3)(vitest@3.1.3) eslint: specifier: ^9.25.0 version: 9.26.0(jiti@2.4.2) @@ -62,6 +98,9 @@ importers: eslint-plugin-react-refresh: specifier: ^0.4.19 version: 0.4.20(eslint@9.26.0(jiti@2.4.2)) + eslint-plugin-storybook: + specifier: ^0.12.0 + version: 0.12.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) globals: specifier: ^16.0.0 version: 16.1.0 @@ -71,9 +110,15 @@ importers: lint-staged: specifier: ^15.5.2 version: 15.5.2 + playwright: + specifier: ^1.52.0 + version: 1.52.0 prettier: specifier: 3.5.3 version: 3.5.3 + storybook: + specifier: ^8.6.12 + version: 8.6.12(prettier@3.5.3) typescript: specifier: ~5.8.3 version: 5.8.3 @@ -82,9 +127,18 @@ importers: version: 8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) vite: specifier: ^6.3.5 - version: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + version: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + vitest: + specifier: ^3.1.3 + version: 3.1.3(@types/node@22.15.15)(@vitest/browser@3.1.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) packages: + "@adobe/css-tools@4.4.2": + resolution: + { + integrity: sha512-baYZExFpsdkBNuvGKTKWCwKH57HRZLVtycZS05WTQNVOiXVSeAki3nU35zlRbToeMW8aHlJfyS+1C4BOv27q0A==, + } + "@ampproject/remapping@2.3.0": resolution: { @@ -222,6 +276,13 @@ packages: peerDependencies: "@babel/core": ^7.0.0-0 + "@babel/runtime@7.27.1": + resolution: + { + integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==, + } + engines: { node: ">=6.9.0" } + "@babel/template@7.27.2": resolution: { @@ -243,6 +304,22 @@ packages: } engines: { node: ">=6.9.0" } + "@bcoe/v8-coverage@1.0.2": + resolution: + { + integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==, + } + engines: { node: ">=18" } + + "@chromatic-com/storybook@3.2.6": + resolution: + { + integrity: sha512-FDmn5Ry2DzQdik+eq2sp/kJMMT36Ewe7ONXUXM2Izd97c7r6R/QyGli8eyh/F0iyqVvbLveNYFyF0dBOJNwLqw==, + } + engines: { node: ">=16.0.0", yarn: ">=1.22.18" } + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + "@esbuild/aix-ppc64@0.25.4": resolution: { @@ -622,6 +699,32 @@ packages: integrity: sha512-LR2lnM4urJta5/wYJVV7m8qk5DrMZmLRTuFhbQO5b9/sKLHgty6unQy1Li4+Su2DWydmB4aZdS5uxBRXIq2aAw==, } + "@isaacs/cliui@8.0.2": + resolution: + { + integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==, + } + engines: { node: ">=12" } + + "@istanbuljs/schema@0.1.3": + resolution: + { + integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==, + } + engines: { node: ">=8" } + + "@joshwooding/vite-plugin-react-docgen-typescript@0.5.0": + resolution: + { + integrity: sha512-qYDdL7fPwLRI+bJNurVcis+tNgJmvWjH4YTBGXTA8xMuxFrnAz6E5o35iyzyKbq5J5Lr8mJGfrR5GXl+WGwhgQ==, + } + peerDependencies: + typescript: ">= 4.3.x" + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + typescript: + optional: true + "@jridgewell/gen-mapping@0.3.8": resolution: { @@ -643,6 +746,12 @@ packages: } engines: { node: ">=6.0.0" } + "@jridgewell/source-map@0.3.6": + resolution: + { + integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==, + } + "@jridgewell/sourcemap-codec@1.5.0": resolution: { @@ -655,6 +764,15 @@ packages: integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==, } + "@mdx-js/react@3.1.0": + resolution: + { + integrity: sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==, + } + peerDependencies: + "@types/react": ">=16" + react: ">=16" + "@modelcontextprotocol/sdk@1.11.0": resolution: { @@ -683,6 +801,19 @@ packages: } engines: { node: ">= 8" } + "@pkgjs/parseargs@0.11.0": + resolution: + { + integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==, + } + engines: { node: ">=14" } + + "@polka/url@1.0.0-next.29": + resolution: + { + integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==, + } + "@react-aria/autocomplete@3.0.0-beta.2": resolution: { @@ -1593,6 +1724,18 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + "@rollup/pluginutils@5.1.4": + resolution: + { + integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==, + } + engines: { node: ">=14.0.0" } + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + "@rollup/rollup-android-arm-eabi@4.40.2": resolution: { @@ -1753,6 +1896,285 @@ packages: cpu: [x64] os: [win32] + "@storybook/addon-actions@8.6.12": + resolution: + { + integrity: sha512-B5kfiRvi35oJ0NIo53CGH66H471A3XTzrfaa6SxXEJsgxxSeKScG5YeXcCvLiZfvANRQ7QDsmzPUgg0o3hdMXw==, + } + peerDependencies: + storybook: ^8.6.12 + + "@storybook/addon-backgrounds@8.6.12": + resolution: + { + integrity: sha512-lmIAma9BiiCTbJ8YfdZkXjpnAIrOUcgboLkt1f6XJ78vNEMnLNzD9gnh7Tssz1qrqvm34v9daDjIb+ggdiKp3Q==, + } + peerDependencies: + storybook: ^8.6.12 + + "@storybook/addon-controls@8.6.12": + resolution: + { + integrity: sha512-9VSRPJWQVb9wLp21uvpxDGNctYptyUX0gbvxIWOHMH3R2DslSoq41lsC/oQ4l4zSHVdL+nq8sCTkhBxIsjKqdQ==, + } + peerDependencies: + storybook: ^8.6.12 + + "@storybook/addon-docs@8.6.12": + resolution: + { + integrity: sha512-kEezQjAf/p3SpDzLABgg4fbT48B6dkT2LiZCKTRmCrJVtuReaAr4R9MMM6Jsph6XjbIj/SvOWf3CMeOPXOs9sg==, + } + peerDependencies: + storybook: ^8.6.12 + + "@storybook/addon-essentials@8.6.12": + resolution: + { + integrity: sha512-Y/7e8KFlttaNfv7q2zoHMPdX6hPXHdsuQMAjYl5NG9HOAJREu4XBy4KZpbcozRe4ApZ78rYsN/MO1EuA+bNMIA==, + } + peerDependencies: + storybook: ^8.6.12 + + "@storybook/addon-highlight@8.6.12": + resolution: + { + integrity: sha512-9FITVxdoycZ+eXuAZL9ElWyML/0fPPn9UgnnAkrU7zkMi+Segq/Tx7y+WWanC5zfWZrXAuG6WTOYEXeWQdm//w==, + } + peerDependencies: + storybook: ^8.6.12 + + "@storybook/addon-measure@8.6.12": + resolution: + { + integrity: sha512-tACmwqqOvutaQSduw8SMb62wICaT1rWaHtMN3vtWXuxgDPSdJQxLP+wdVyRYMAgpxhLyIO7YRf++Hfha9RHgFg==, + } + peerDependencies: + storybook: ^8.6.12 + + "@storybook/addon-onboarding@8.6.12": + resolution: + { + integrity: sha512-/cgxaLy6tr6xO0+QO+qV5rPZS5/c15Daywvg/F03lifLGkMuyn/JDuhu0J5i1LbFsL1RYdf4sjrTOmLXbOT6+Q==, + } + peerDependencies: + storybook: ^8.6.12 + + "@storybook/addon-outline@8.6.12": + resolution: + { + integrity: sha512-1ylwm+n1s40S91No0v9T4tCjZORu3GbnjINlyjYTDLLhQHyBQd3nWR1Y1eewU4xH4cW9SnSLcMQFS/82xHqU6A==, + } + peerDependencies: + storybook: ^8.6.12 + + "@storybook/addon-styling-webpack@1.0.1": + resolution: + { + integrity: sha512-5n+SXPfMTc4m7sWaJWPWjoHYWc6/B111M2Ia55toQ3GV4ON4vVlTgH9FX+EgCkDticElj99HLTMDJkHRj2yvkg==, + } + peerDependencies: + webpack: ^5.0.0 + + "@storybook/addon-toolbars@8.6.12": + resolution: + { + integrity: sha512-HEcSzo1DyFtIu5/ikVOmh5h85C1IvK9iFKSzBR6ice33zBOaehVJK+Z5f487MOXxPsZ63uvWUytwPyViGInj+g==, + } + peerDependencies: + storybook: ^8.6.12 + + "@storybook/addon-viewport@8.6.12": + resolution: + { + integrity: sha512-EXK2LArAnABsPP0leJKy78L/lbMWow+EIJfytEP5fHaW4EhMR6h7Hzaqzre6U0IMMr/jVFa1ci+m0PJ0eQc2bw==, + } + peerDependencies: + storybook: ^8.6.12 + + "@storybook/blocks@8.6.12": + resolution: + { + integrity: sha512-DohlTq6HM1jDbHYiXL4ZvZ00VkhpUp5uftzj/CZDLY1fYHRjqtaTwWm2/OpceivMA8zDitLcq5atEZN+f+siTg==, + } + 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.6.12 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + "@storybook/builder-vite@8.6.12": + resolution: + { + integrity: sha512-Gju21ud/3Qw4v2vLNaa5SuJECsI9ICNRr2G0UyCCzRvCHg8jpA9lDReu2NqhLDyFIuDG+ZYT38gcaHEUoNQ8KQ==, + } + peerDependencies: + storybook: ^8.6.12 + vite: ^4.0.0 || ^5.0.0 || ^6.0.0 + + "@storybook/components@8.6.12": + resolution: + { + integrity: sha512-FiaE8xvCdvKC2arYusgtlDNZ77b8ysr8njAYQZwwaIHjy27TbR2tEpLDCmUwSbANNmivtc/xGEiDDwcNppMWlQ==, + } + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + + "@storybook/core@8.6.12": + resolution: + { + integrity: sha512-t+ZuDzAlsXKa6tLxNZT81gEAt4GNwsKP/Id2wluhmUWD/lwYW0uum1JiPUuanw8xD6TdakCW/7ULZc7aQUBLCQ==, + } + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + + "@storybook/csf-plugin@8.6.12": + resolution: + { + integrity: sha512-6s8CnP1aoKPb3XtC0jRLUp8M5vTA8RhGAwQDKUsFpCC7g89JR9CaKs9FY2ZSzsNbjR15uASi7b3K8BzeYumYQg==, + } + peerDependencies: + storybook: ^8.6.12 + + "@storybook/csf@0.1.13": + resolution: + { + integrity: sha512-7xOOwCLGB3ebM87eemep89MYRFTko+D8qE7EdAAq74lgdqRR5cOUtYWJLjO2dLtP94nqoOdHJo6MdLLKzg412Q==, + } + + "@storybook/experimental-addon-test@8.6.12": + resolution: + { + integrity: sha512-auc8Ql0buH0WeaKVuSSuabxIiBWvqvAyxtXCm1sVMkL68GwrX3cmpNMwviz3mvKvM//F8zKi/31HMl1PZ5UnIA==, + } + peerDependencies: + "@vitest/browser": ^2.1.1 || ^3.0.0 + "@vitest/runner": ^2.1.1 || ^3.0.0 + storybook: ^8.6.12 + vitest: ^2.1.1 || ^3.0.0 + peerDependenciesMeta: + "@vitest/browser": + optional: true + "@vitest/runner": + optional: true + vitest: + optional: true + + "@storybook/global@5.0.0": + resolution: + { + integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==, + } + + "@storybook/icons@1.4.0": + resolution: + { + integrity: sha512-Td73IeJxOyalzvjQL+JXx72jlIYHgs+REaHiREOqfpo3A2AYYG71AUbcv+lg7mEDIweKVCxsMQ0UKo634c8XeA==, + } + engines: { node: ">=14.0.0" } + 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/instrumenter@8.6.12": + resolution: + { + integrity: sha512-VK5fYAF8jMwWP/u3YsmSwKGh+FeSY8WZn78flzRUwirp2Eg1WWjsqPRubAk7yTpcqcC/km9YMF3KbqfzRv2s/A==, + } + peerDependencies: + storybook: ^8.6.12 + + "@storybook/manager-api@8.6.12": + resolution: + { + integrity: sha512-O0SpISeJLNTQvhSBOsWzzkCgs8vCjOq1578rwqHlC6jWWm4QmtfdyXqnv7rR1Hk08kQ+Dzqh0uhwHx0nfwy4nQ==, + } + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + + "@storybook/node-logger@8.6.12": + resolution: + { + integrity: sha512-Jk7mQWsu60BptBwYJAd69kMmsEqBAbGDuA/fqban+8vfNiSKgR3PRkhis0DsGEk53bpAEfbkCcyvYRCrrq4M3Q==, + } + 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.12": + resolution: + { + integrity: sha512-84FE3Hrs0AYKHqpDZOwx1S/ffOfxBdL65lhCoeI8GoWwCkzwa9zEP3kvXBo/BnEDO7nAfxvMhjASTZXbKRJh5Q==, + } + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + + "@storybook/react-dom-shim@8.6.12": + resolution: + { + integrity: sha512-51QvoimkBzYs8s3rCYnY5h0cFqLz/Mh0vRcughwYaXckWzDBV8l67WBO5Xf5nBsukCbWyqBVPpEQLww8s7mrLA==, + } + 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.6.12 + + "@storybook/react-vite@8.6.12": + resolution: + { + integrity: sha512-UA2Kule99oyFgHdhcuhrRwCKyWu/yMbqbl9U7NwowFHNwWWFjVMMir/AmfShb/H1C1DQ3LqOad6/QwJyPLjP8g==, + } + engines: { node: ">=18.0.0" } + peerDependencies: + "@storybook/test": 8.6.12 + 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.6.12 + vite: ^4.0.0 || ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + "@storybook/test": + optional: true + + "@storybook/react@8.6.12": + resolution: + { + integrity: sha512-NzxlHLA5DkDgZM/dMwTYinuzRs6rsUPmlqP+NIv6YaciQ4NGnTYyOC7R/SqI6HHFm8ZZ5eMYvpfiFmhZ9rU+rQ==, + } + engines: { node: ">=18.0.0" } + peerDependencies: + "@storybook/test": 8.6.12 + 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.6.12 + typescript: ">= 4.2.x" + peerDependenciesMeta: + "@storybook/test": + optional: true + typescript: + optional: true + + "@storybook/test@8.6.12": + resolution: + { + integrity: sha512-0BK1Eg+VD0lNMB1BtxqHE3tP9FdkUmohtvWG7cq6lWvMrbCmAmh3VWai3RMCCDOukPFpjabOr8BBRLVvhNpv2w==, + } + peerDependencies: + storybook: ^8.6.12 + + "@storybook/theming@8.6.12": + resolution: + { + integrity: sha512-6VjZg8HJ2Op7+KV7ihJpYrDnFtd9D1jrQnUS8LckcpuBXrIEbaut5+34ObY8ssQnSqkk2GwIZBBBQYQBCVvkOw==, + } + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + "@swc/helpers@0.5.17": resolution: { @@ -1997,49 +2419,111 @@ packages: } engines: { node: ">=12" } - "@types/babel__core@7.20.5": + "@testing-library/dom@10.4.0": resolution: { - integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==, + integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==, } + engines: { node: ">=18" } - "@types/babel__generator@7.27.0": + "@testing-library/jest-dom@6.5.0": resolution: { - integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==, + integrity: sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==, } + engines: { node: ">=14", npm: ">=6", yarn: ">=1" } - "@types/babel__template@7.4.4": + "@testing-library/user-event@14.5.2": resolution: { - integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==, + integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==, } + engines: { node: ">=12", npm: ">=6" } + peerDependencies: + "@testing-library/dom": ">=7.21.4" - "@types/babel__traverse@7.20.7": + "@testing-library/user-event@14.6.1": resolution: { - integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==, + integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==, } + engines: { node: ">=12", npm: ">=6" } + peerDependencies: + "@testing-library/dom": ">=7.21.4" - "@types/estree@1.0.7": + "@types/aria-query@5.0.4": resolution: { - integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==, + integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==, } - "@types/json-schema@7.0.15": + "@types/babel__core@7.20.5": resolution: { - integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, + integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==, } - "@types/node@22.15.15": + "@types/babel__generator@7.27.0": resolution: { - integrity: sha512-R5muMcZob3/Jjchn5LcO8jdKwSCbzqmPB6ruBxMcf9kbxtniZHP327s6C37iOfuw8mbKK3cAQa7sEl7afLrQ8A==, + integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==, } - "@types/react-dom@19.1.3": + "@types/babel__template@7.4.4": + resolution: + { + integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==, + } + + "@types/babel__traverse@7.20.7": + resolution: + { + integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==, + } + + "@types/doctrine@0.0.9": + resolution: + { + integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==, + } + + "@types/eslint-scope@3.7.7": + resolution: + { + integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==, + } + + "@types/eslint@9.6.1": + resolution: + { + integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==, + } + + "@types/estree@1.0.7": + resolution: + { + integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==, + } + + "@types/json-schema@7.0.15": + resolution: + { + integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, + } + + "@types/mdx@2.0.13": + resolution: + { + integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==, + } + + "@types/node@22.15.15": + resolution: + { + integrity: sha512-R5muMcZob3/Jjchn5LcO8jdKwSCbzqmPB6ruBxMcf9kbxtniZHP327s6C37iOfuw8mbKK3cAQa7sEl7afLrQ8A==, + } + + "@types/react-dom@19.1.3": resolution: { integrity: sha512-rJXC08OG0h3W6wDMFxQrZF00Kq6qQvw0djHRdzl3U5DnIERz0MRce3WVc7IS6JYBwtaP/DwYtRRjVlvivNveKg==, @@ -2053,6 +2537,18 @@ packages: integrity: sha512-dLWQ+Z0CkIvK1J8+wrDPwGxEYFA4RAyHoZPxHVGspYmFVnwGSNT24cGIhFJrtfRnWVuW8X7NO52gCXmhkVUWGQ==, } + "@types/resolve@1.20.6": + resolution: + { + integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==, + } + + "@types/uuid@9.0.8": + resolution: + { + integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==, + } + "@typescript-eslint/eslint-plugin@8.32.0": resolution: { @@ -2133,6 +2629,224 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 + "@vitest/browser@3.1.3": + resolution: + { + integrity: sha512-Dgyez9LbHJHl9ObZPo5mu4zohWLo7SMv8zRWclMF+dxhQjmOtEP0raEX13ac5ygcvihNoQPBZXdya5LMSbcCDQ==, + } + peerDependencies: + playwright: "*" + safaridriver: "*" + vitest: 3.1.3 + webdriverio: ^7.0.0 || ^8.0.0 || ^9.0.0 + peerDependenciesMeta: + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + + "@vitest/coverage-v8@3.1.3": + resolution: + { + integrity: sha512-cj76U5gXCl3g88KSnf80kof6+6w+K4BjOflCl7t6yRJPDuCrHtVu0SgNYOUARJOL5TI8RScDbm5x4s1/P9bvpw==, + } + peerDependencies: + "@vitest/browser": 3.1.3 + vitest: 3.1.3 + peerDependenciesMeta: + "@vitest/browser": + optional: true + + "@vitest/expect@2.0.5": + resolution: + { + integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==, + } + + "@vitest/expect@3.1.3": + resolution: + { + integrity: sha512-7FTQQuuLKmN1Ig/h+h/GO+44Q1IlglPlR2es4ab7Yvfx+Uk5xsv+Ykk+MEt/M2Yn/xGmzaLKxGw2lgy2bwuYqg==, + } + + "@vitest/mocker@3.1.3": + resolution: + { + integrity: sha512-PJbLjonJK82uCWHjzgBJZuR7zmAOrSvKk1QBxrennDIgtH4uK0TB1PvYmc0XBCigxxtiAVPfWtAdy4lpz8SQGQ==, + } + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + "@vitest/pretty-format@2.0.5": + resolution: + { + integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==, + } + + "@vitest/pretty-format@2.1.9": + resolution: + { + integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==, + } + + "@vitest/pretty-format@3.1.3": + resolution: + { + integrity: sha512-i6FDiBeJUGLDKADw2Gb01UtUNb12yyXAqC/mmRWuYl+m/U9GS7s8us5ONmGkGpUUo7/iAYzI2ePVfOZTYvUifA==, + } + + "@vitest/runner@3.1.3": + resolution: + { + integrity: sha512-Tae+ogtlNfFei5DggOsSUvkIaSuVywujMj6HzR97AHK6XK8i3BuVyIifWAm/sE3a15lF5RH9yQIrbXYuo0IFyA==, + } + + "@vitest/snapshot@3.1.3": + resolution: + { + integrity: sha512-XVa5OPNTYUsyqG9skuUkFzAeFnEzDp8hQu7kZ0N25B1+6KjGm4hWLtURyBbsIAOekfWQ7Wuz/N/XXzgYO3deWQ==, + } + + "@vitest/spy@2.0.5": + resolution: + { + integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==, + } + + "@vitest/spy@3.1.3": + resolution: + { + integrity: sha512-x6w+ctOEmEXdWaa6TO4ilb7l9DxPR5bwEb6hILKuxfU1NqWT2mpJD9NJN7t3OTfxmVlOMrvtoFJGdgyzZ605lQ==, + } + + "@vitest/utils@2.0.5": + resolution: + { + integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==, + } + + "@vitest/utils@2.1.9": + resolution: + { + integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==, + } + + "@vitest/utils@3.1.3": + resolution: + { + integrity: sha512-2Ltrpht4OmHO9+c/nmHtF09HWiyWdworqnHIwjfvDyWjuwKbdkcS9AnhsDn+8E2RM4x++foD1/tNuLPVvWG1Rg==, + } + + "@webassemblyjs/ast@1.14.1": + resolution: + { + integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==, + } + + "@webassemblyjs/floating-point-hex-parser@1.13.2": + resolution: + { + integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==, + } + + "@webassemblyjs/helper-api-error@1.13.2": + resolution: + { + integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==, + } + + "@webassemblyjs/helper-buffer@1.14.1": + resolution: + { + integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==, + } + + "@webassemblyjs/helper-numbers@1.13.2": + resolution: + { + integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==, + } + + "@webassemblyjs/helper-wasm-bytecode@1.13.2": + resolution: + { + integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==, + } + + "@webassemblyjs/helper-wasm-section@1.14.1": + resolution: + { + integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==, + } + + "@webassemblyjs/ieee754@1.13.2": + resolution: + { + integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==, + } + + "@webassemblyjs/leb128@1.13.2": + resolution: + { + integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==, + } + + "@webassemblyjs/utf8@1.13.2": + resolution: + { + integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==, + } + + "@webassemblyjs/wasm-edit@1.14.1": + resolution: + { + integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==, + } + + "@webassemblyjs/wasm-gen@1.14.1": + resolution: + { + integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==, + } + + "@webassemblyjs/wasm-opt@1.14.1": + resolution: + { + integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==, + } + + "@webassemblyjs/wasm-parser@1.14.1": + resolution: + { + integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==, + } + + "@webassemblyjs/wast-printer@1.14.1": + resolution: + { + integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==, + } + + "@xtuc/ieee754@1.2.0": + resolution: + { + integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==, + } + + "@xtuc/long@4.2.2": + resolution: + { + integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==, + } + accepts@2.0.0: resolution: { @@ -2156,12 +2870,37 @@ packages: engines: { node: ">=0.4.0" } hasBin: true + ajv-formats@2.1.1: + resolution: + { + integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==, + } + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@5.1.0: + resolution: + { + integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==, + } + peerDependencies: + ajv: ^8.8.2 + ajv@6.12.6: resolution: { integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, } + ajv@8.17.1: + resolution: + { + integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==, + } + ansi-escapes@7.0.0: resolution: { @@ -2169,6 +2908,13 @@ packages: } engines: { node: ">=18" } + ansi-regex@5.0.1: + resolution: + { + integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, + } + engines: { node: ">=8" } + ansi-regex@6.1.0: resolution: { @@ -2183,6 +2929,13 @@ packages: } engines: { node: ">=8" } + ansi-styles@5.2.0: + resolution: + { + integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==, + } + engines: { node: ">=10" } + ansi-styles@6.2.1: resolution: { @@ -2210,12 +2963,46 @@ packages: integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, } + aria-query@5.3.0: + resolution: + { + integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==, + } + + aria-query@5.3.2: + resolution: + { + integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==, + } + engines: { node: ">= 0.4" } + + assertion-error@2.0.1: + resolution: + { + integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==, + } + engines: { node: ">=12" } + + ast-types@0.16.1: + resolution: + { + integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==, + } + engines: { node: ">=4" } + asynckit@0.4.0: resolution: { integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, } + available-typed-arrays@1.0.7: + resolution: + { + integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==, + } + engines: { node: ">= 0.4" } + axios@1.9.0: resolution: { @@ -2234,6 +3021,13 @@ packages: integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, } + better-opn@3.0.2: + resolution: + { + integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==, + } + engines: { node: ">=12.0.0" } + binary-extensions@2.3.0: resolution: { @@ -2267,6 +3061,12 @@ packages: } engines: { node: ">=8" } + browser-assert@1.2.1: + resolution: + { + integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==, + } + browserslist@4.24.5: resolution: { @@ -2275,6 +3075,12 @@ packages: engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } hasBin: true + buffer-from@1.1.2: + resolution: + { + integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, + } + bytes@3.1.2: resolution: { @@ -2282,6 +3088,13 @@ packages: } engines: { node: ">= 0.8" } + cac@6.7.14: + resolution: + { + integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==, + } + engines: { node: ">=8" } + call-bind-apply-helpers@1.0.2: resolution: { @@ -2289,6 +3102,13 @@ packages: } engines: { node: ">= 0.4" } + call-bind@1.0.8: + resolution: + { + integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==, + } + engines: { node: ">= 0.4" } + call-bound@1.0.4: resolution: { @@ -2309,6 +3129,20 @@ packages: integrity: sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw==, } + chai@5.2.0: + resolution: + { + integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==, + } + engines: { node: ">=12" } + + chalk@3.0.0: + resolution: + { + integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==, + } + engines: { node: ">=8" } + chalk@4.1.2: resolution: { @@ -2323,6 +3157,13 @@ packages: } engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 } + check-error@2.1.1: + resolution: + { + integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==, + } + engines: { node: ">= 16" } + chokidar@3.6.0: resolution: { @@ -2330,6 +3171,28 @@ packages: } engines: { node: ">= 8.10.0" } + chromatic@11.28.2: + resolution: + { + integrity: sha512-aCmUPcZUs4/p9zRZdMreOoO/5JqO2DiJC3md1/vRx8dlMRcmR/YI5ZbgXZcai2absVR+6hsXZ5XiPxV2sboTuQ==, + } + hasBin: true + peerDependencies: + "@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 + + chrome-trace-event@1.0.4: + resolution: + { + integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==, + } + engines: { node: ">=6.0" } + cli-cursor@5.0.0: resolution: { @@ -2390,6 +3253,12 @@ packages: } engines: { node: ">=18" } + commander@2.20.3: + resolution: + { + integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, + } + concat-map@0.0.1: resolution: { @@ -2444,6 +3313,12 @@ packages: } engines: { node: ">= 8" } + css.escape@1.5.1: + resolution: + { + integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==, + } + csstype@3.1.3: resolution: { @@ -2468,12 +3343,33 @@ packages: integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==, } + deep-eql@5.0.2: + resolution: + { + integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==, + } + engines: { node: ">=6" } + deep-is@0.1.4: resolution: { integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, } + define-data-property@1.1.4: + resolution: + { + integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==, + } + engines: { node: ">= 0.4" } + + define-lazy-prop@2.0.0: + resolution: + { + integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==, + } + engines: { node: ">=8" } + delayed-stream@1.0.0: resolution: { @@ -2488,6 +3384,13 @@ packages: } engines: { node: ">= 0.8" } + dequal@2.0.3: + resolution: + { + integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==, + } + engines: { node: ">=6" } + detect-libc@2.0.4: resolution: { @@ -2502,6 +3405,25 @@ packages: } engines: { node: ">=0.3.1" } + doctrine@3.0.0: + resolution: + { + integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==, + } + engines: { node: ">=6.0.0" } + + dom-accessibility-api@0.5.16: + resolution: + { + integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==, + } + + dom-accessibility-api@0.6.3: + resolution: + { + integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==, + } + dunder-proto@1.0.1: resolution: { @@ -2509,6 +3431,12 @@ packages: } engines: { node: ">= 0.4" } + eastasianwidth@0.2.0: + resolution: + { + integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==, + } + ee-first@1.1.1: resolution: { @@ -2527,6 +3455,18 @@ packages: integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==, } + emoji-regex@8.0.0: + resolution: + { + integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, + } + + emoji-regex@9.2.2: + resolution: + { + integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==, + } + encodeurl@2.0.0: resolution: { @@ -2562,6 +3502,12 @@ packages: } engines: { node: ">= 0.4" } + es-module-lexer@1.7.0: + resolution: + { + integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==, + } + es-object-atoms@1.1.1: resolution: { @@ -2576,6 +3522,14 @@ packages: } engines: { node: ">= 0.4" } + esbuild-register@3.6.0: + resolution: + { + integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==, + } + peerDependencies: + esbuild: ">=0.12 <1" + esbuild@0.25.4: resolution: { @@ -2621,6 +3575,22 @@ packages: peerDependencies: eslint: ">=8.40" + eslint-plugin-storybook@0.12.0: + resolution: + { + integrity: sha512-Lg5I0+npTgiYgZ4KSvGWGDFZi3eOCNJPaWX0c9rTEEXC5wvooOClsP9ZtbI4hhFKyKgYR877KiJxbRTSJq9gWA==, + } + engines: { node: ">= 18" } + peerDependencies: + eslint: ">=8" + + eslint-scope@5.1.1: + resolution: + { + integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==, + } + engines: { node: ">=8.0.0" } + eslint-scope@8.3.0: resolution: { @@ -2662,6 +3632,14 @@ packages: } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + esprima@4.0.1: + resolution: + { + integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, + } + engines: { node: ">=4" } + hasBin: true + esquery@1.6.0: resolution: { @@ -2674,14 +3652,33 @@ packages: { integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, } - engines: { node: ">=4.0" } + engines: { node: ">=4.0" } + + estraverse@4.3.0: + resolution: + { + integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==, + } + engines: { node: ">=4.0" } + + estraverse@5.3.0: + resolution: + { + integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, + } + engines: { node: ">=4.0" } + + estree-walker@2.0.2: + resolution: + { + integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, + } - estraverse@5.3.0: + estree-walker@3.0.3: resolution: { - integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, + integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==, } - engines: { node: ">=4.0" } esutils@2.0.3: resolution: @@ -2703,6 +3700,13 @@ packages: integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==, } + events@3.3.0: + resolution: + { + integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==, + } + engines: { node: ">=0.8.x" } + eventsource-parser@3.0.1: resolution: { @@ -2724,6 +3728,13 @@ packages: } engines: { node: ">=16.17" } + expect-type@1.2.1: + resolution: + { + integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==, + } + engines: { node: ">=12.0.0" } + express-rate-limit@7.5.0: resolution: { @@ -2765,6 +3776,12 @@ packages: integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, } + fast-uri@3.0.6: + resolution: + { + integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==, + } + fastq@1.19.1: resolution: { @@ -2789,6 +3806,13 @@ packages: } engines: { node: ">=16.0.0" } + filesize@10.1.6: + resolution: + { + integrity: sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==, + } + engines: { node: ">= 10.4.0" } + fill-range@7.1.1: resolution: { @@ -2835,6 +3859,20 @@ packages: debug: optional: true + for-each@0.3.5: + resolution: + { + integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==, + } + engines: { node: ">= 0.4" } + + foreground-child@3.3.1: + resolution: + { + integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==, + } + engines: { node: ">=14" } + form-data@4.0.2: resolution: { @@ -2856,6 +3894,14 @@ packages: } engines: { node: ">= 0.8" } + 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: { @@ -2925,6 +3971,19 @@ packages: } engines: { node: ">=10.13.0" } + glob-to-regexp@0.4.1: + resolution: + { + integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==, + } + + glob@10.4.5: + resolution: + { + integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==, + } + hasBin: true + globals@11.12.0: resolution: { @@ -2972,6 +4031,12 @@ packages: } engines: { node: ">=8" } + has-property-descriptors@1.0.2: + resolution: + { + integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==, + } + has-symbols@1.1.0: resolution: { @@ -2993,6 +4058,12 @@ packages: } engines: { node: ">= 0.4" } + html-escaper@2.0.2: + resolution: + { + integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==, + } + http-errors@2.0.0: resolution: { @@ -3043,6 +4114,13 @@ packages: } engines: { node: ">=0.8.19" } + indent-string@4.0.0: + resolution: + { + integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==, + } + engines: { node: ">=8" } + inherits@2.0.4: resolution: { @@ -3062,6 +4140,13 @@ packages: } engines: { node: ">= 0.10" } + is-arguments@1.2.0: + resolution: + { + integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==, + } + engines: { node: ">= 0.4" } + is-binary-path@2.1.0: resolution: { @@ -3069,6 +4154,28 @@ packages: } engines: { node: ">=8" } + is-callable@1.2.7: + resolution: + { + integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, + } + engines: { node: ">= 0.4" } + + is-core-module@2.16.1: + resolution: + { + integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==, + } + engines: { node: ">= 0.4" } + + is-docker@2.2.1: + resolution: + { + integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==, + } + engines: { node: ">=8" } + hasBin: true + is-extglob@2.1.1: resolution: { @@ -3076,6 +4183,13 @@ packages: } engines: { node: ">=0.10.0" } + is-fullwidth-code-point@3.0.0: + resolution: + { + integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, + } + engines: { node: ">=8" } + is-fullwidth-code-point@4.0.0: resolution: { @@ -3090,6 +4204,13 @@ packages: } engines: { node: ">=18" } + is-generator-function@1.1.0: + resolution: + { + integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==, + } + engines: { node: ">= 0.4" } + is-glob@4.0.3: resolution: { @@ -3110,6 +4231,13 @@ packages: integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==, } + is-regex@1.2.1: + resolution: + { + integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==, + } + engines: { node: ">= 0.4" } + is-stream@3.0.0: resolution: { @@ -3117,12 +4245,67 @@ packages: } engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + is-typed-array@1.1.15: + resolution: + { + integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==, + } + engines: { node: ">= 0.4" } + + is-wsl@2.2.0: + resolution: + { + integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==, + } + engines: { node: ">=8" } + isexe@2.0.0: resolution: { integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, } + istanbul-lib-coverage@3.2.2: + resolution: + { + integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==, + } + engines: { node: ">=8" } + + istanbul-lib-report@3.0.1: + resolution: + { + integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==, + } + engines: { node: ">=10" } + + istanbul-lib-source-maps@5.0.6: + resolution: + { + integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==, + } + engines: { node: ">=10" } + + istanbul-reports@3.1.7: + resolution: + { + integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==, + } + engines: { node: ">=8" } + + jackspeak@3.4.3: + resolution: + { + integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==, + } + + jest-worker@27.5.1: + resolution: + { + integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==, + } + engines: { node: ">= 10.13.0" } + jiti@2.4.2: resolution: { @@ -3143,6 +4326,13 @@ packages: } hasBin: true + jsdoc-type-pratt-parser@4.1.0: + resolution: + { + integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==, + } + engines: { node: ">=12.0.0" } + jsesc@3.1.0: resolution: { @@ -3157,12 +4347,24 @@ packages: integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, } + json-parse-even-better-errors@2.3.1: + resolution: + { + integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, + } + json-schema-traverse@0.4.1: resolution: { integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, } + json-schema-traverse@1.0.0: + resolution: + { + integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, + } + json-stable-stringify-without-jsonify@1.0.1: resolution: { @@ -3177,12 +4379,25 @@ packages: engines: { node: ">=6" } hasBin: true + jsonfile@6.1.0: + resolution: + { + integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==, + } + keyv@4.5.4: resolution: { integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, } + kleur@3.0.3: + resolution: + { + integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==, + } + engines: { node: ">=6" } + levn@0.4.1: resolution: { @@ -3309,6 +4524,13 @@ packages: } engines: { node: ">=18.0.0" } + loader-runner@4.3.0: + resolution: + { + integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==, + } + engines: { node: ">=6.11.5" } + locate-path@6.0.0: resolution: { @@ -3322,6 +4544,12 @@ packages: integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, } + lodash@4.17.21: + resolution: + { + integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, + } + log-update@6.1.0: resolution: { @@ -3329,12 +4557,63 @@ packages: } engines: { node: ">=18" } + loupe@3.1.3: + resolution: + { + integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==, + } + + lru-cache@10.4.3: + resolution: + { + integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==, + } + lru-cache@5.1.1: resolution: { integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, } + lz-string@1.5.0: + resolution: + { + integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==, + } + hasBin: true + + magic-string@0.27.0: + resolution: + { + integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==, + } + engines: { node: ">=12" } + + magic-string@0.30.17: + resolution: + { + integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==, + } + + magicast@0.3.5: + resolution: + { + integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==, + } + + make-dir@4.0.0: + resolution: + { + integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==, + } + engines: { node: ">=10" } + + map-or-similar@1.5.0: + resolution: + { + integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==, + } + math-intrinsics@1.1.0: resolution: { @@ -3349,6 +4628,12 @@ packages: } engines: { node: ">= 0.8" } + memoizerific@1.11.3: + resolution: + { + integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==, + } + merge-descriptors@2.0.0: resolution: { @@ -3418,6 +4703,13 @@ packages: } engines: { node: ">=18" } + min-indent@1.0.1: + resolution: + { + integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==, + } + engines: { node: ">=4" } + minimatch@3.1.2: resolution: { @@ -3431,6 +4723,26 @@ packages: } engines: { node: ">=16 || 14 >=14.17" } + minimist@1.2.8: + resolution: + { + integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, + } + + minipass@7.1.2: + resolution: + { + integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==, + } + engines: { node: ">=16 || 14 >=14.17" } + + mrmime@2.0.1: + resolution: + { + integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==, + } + engines: { node: ">=10" } + ms@2.1.3: resolution: { @@ -3458,6 +4770,12 @@ packages: } engines: { node: ">= 0.6" } + neo-async@2.6.2: + resolution: + { + integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==, + } + node-releases@2.0.19: resolution: { @@ -3519,6 +4837,13 @@ packages: } engines: { node: ">=18" } + open@8.4.2: + resolution: + { + integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==, + } + engines: { node: ">=12" } + optionator@0.9.4: resolution: { @@ -3540,6 +4865,12 @@ packages: } engines: { node: ">=10" } + package-json-from-dist@1.0.1: + resolution: + { + integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==, + } + parent-module@1.0.1: resolution: { @@ -3564,23 +4895,49 @@ packages: path-key@3.1.1: resolution: { - integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, + integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, + } + engines: { node: ">=8" } + + path-key@4.0.0: + resolution: + { + integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==, + } + engines: { node: ">=12" } + + path-parse@1.0.7: + resolution: + { + integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, + } + + path-scurry@1.11.1: + resolution: + { + integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==, + } + engines: { node: ">=16 || 14 >=14.18" } + + path-to-regexp@8.2.0: + resolution: + { + integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==, } - engines: { node: ">=8" } + engines: { node: ">=16" } - path-key@4.0.0: + pathe@2.0.3: resolution: { - integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==, + integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==, } - engines: { node: ">=12" } - path-to-regexp@8.2.0: + pathval@2.0.0: resolution: { - integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==, + integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==, } - engines: { node: ">=16" } + engines: { node: ">= 14.16" } picocolors@1.1.1: resolution: @@ -3617,6 +4974,36 @@ packages: } engines: { node: ">=16.20.0" } + playwright-core@1.52.0: + resolution: + { + integrity: sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==, + } + engines: { node: ">=18" } + hasBin: true + + playwright@1.52.0: + resolution: + { + integrity: sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==, + } + engines: { node: ">=18" } + hasBin: true + + polished@4.3.1: + resolution: + { + integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==, + } + engines: { node: ">=10" } + + possible-typed-array-names@1.1.0: + resolution: + { + integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==, + } + engines: { node: ">= 0.4" } + postcss@8.5.3: resolution: { @@ -3639,6 +5026,27 @@ packages: engines: { node: ">=14" } hasBin: true + pretty-format@27.5.1: + resolution: + { + integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==, + } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + + process@0.11.10: + resolution: + { + integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==, + } + engines: { node: ">= 0.6.0" } + + prompts@2.4.2: + resolution: + { + integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==, + } + engines: { node: ">= 6" } + proxy-addr@2.0.7: resolution: { @@ -3672,6 +5080,12 @@ packages: integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, } + randombytes@2.1.0: + resolution: + { + integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==, + } + range-parser@1.2.1: resolution: { @@ -3704,6 +5118,30 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-confetti@6.4.0: + resolution: + { + integrity: sha512-5MdGUcqxrTU26I2EU7ltkWPwxvucQTuqMm8dUz72z2YMqTD6s9vMcDUysk7n9jnC+lXuCPeJJ7Knf98VEYE9Rg==, + } + engines: { node: ">=16" } + peerDependencies: + react: ^16.3.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 + + react-docgen-typescript@2.2.2: + resolution: + { + integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==, + } + peerDependencies: + typescript: ">= 4.3.x" + + react-docgen@7.1.1: + resolution: + { + integrity: sha512-hlSJDQ2synMPKFZOsKo9Hi8WWZTC7POR8EmWvTSjow+VDgKzkmjQvFm2fk0tmRw+f0vTOIYKlarR0iL4996pdg==, + } + engines: { node: ">=16.14.0" } + react-dom@19.1.0: resolution: { @@ -3712,6 +5150,12 @@ packages: peerDependencies: react: ^19.1.0 + react-is@17.0.2: + resolution: + { + integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==, + } + react-refresh@0.17.0: resolution: { @@ -3741,6 +5185,27 @@ packages: } engines: { node: ">=8.10.0" } + recast@0.23.11: + resolution: + { + integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==, + } + engines: { node: ">= 4" } + + redent@3.0.0: + resolution: + { + integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==, + } + engines: { node: ">=8" } + + require-from-string@2.0.2: + resolution: + { + integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==, + } + engines: { node: ">=0.10.0" } + resolve-from@4.0.0: resolution: { @@ -3754,6 +5219,14 @@ packages: integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==, } + resolve@1.22.10: + resolution: + { + integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==, + } + engines: { node: ">= 0.4" } + hasBin: true + restore-cursor@5.1.0: resolution: { @@ -3801,6 +5274,13 @@ packages: integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, } + safe-regex-test@1.1.0: + resolution: + { + integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==, + } + engines: { node: ">= 0.4" } + safer-buffer@2.1.2: resolution: { @@ -3813,6 +5293,13 @@ packages: integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==, } + schema-utils@4.3.2: + resolution: + { + integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==, + } + engines: { node: ">= 10.13.0" } + semver@6.3.1: resolution: { @@ -3835,6 +5322,12 @@ packages: } engines: { node: ">= 18" } + serialize-javascript@6.0.2: + resolution: + { + integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==, + } + serve-static@2.2.0: resolution: { @@ -3842,6 +5335,13 @@ packages: } engines: { node: ">= 18" } + set-function-length@1.2.2: + resolution: + { + integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==, + } + engines: { node: ">= 0.4" } + setprototypeof@1.2.0: resolution: { @@ -3890,6 +5390,12 @@ packages: } engines: { node: ">= 0.4" } + siginfo@2.0.0: + resolution: + { + integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==, + } + signal-exit@4.1.0: resolution: { @@ -3897,6 +5403,19 @@ packages: } engines: { node: ">=14" } + sirv@3.0.1: + resolution: + { + integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==, + } + engines: { node: ">=18" } + + sisteransi@1.0.5: + resolution: + { + integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==, + } + slice-ansi@5.0.0: resolution: { @@ -3918,6 +5437,25 @@ packages: } engines: { node: ">=0.10.0" } + source-map-support@0.5.21: + resolution: + { + integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, + } + + source-map@0.6.1: + resolution: + { + integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, + } + engines: { node: ">=0.10.0" } + + stackback@0.0.2: + resolution: + { + integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==, + } + statuses@2.0.1: resolution: { @@ -3925,6 +5463,24 @@ packages: } engines: { node: ">= 0.8" } + std-env@3.9.0: + resolution: + { + integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==, + } + + storybook@8.6.12: + resolution: + { + integrity: sha512-Z/nWYEHBTLK1ZBtAWdhxC0l5zf7ioJ7G4+zYqtTdYeb67gTnxNj80gehf8o8QY9L2zA2+eyMRGLC2V5fI7Z3Tw==, + } + hasBin: true + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + string-argv@0.3.2: resolution: { @@ -3932,6 +5488,20 @@ packages: } engines: { node: ">=0.6.19" } + string-width@4.2.3: + resolution: + { + integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, + } + engines: { node: ">=8" } + + string-width@5.1.2: + resolution: + { + integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==, + } + engines: { node: ">=12" } + string-width@7.2.0: resolution: { @@ -3939,6 +5509,13 @@ packages: } engines: { node: ">=18" } + strip-ansi@6.0.1: + resolution: + { + integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, + } + engines: { node: ">=8" } + strip-ansi@7.1.0: resolution: { @@ -3946,6 +5523,13 @@ packages: } engines: { node: ">=12" } + strip-bom@3.0.0: + resolution: + { + integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==, + } + engines: { node: ">=4" } + strip-final-newline@3.0.0: resolution: { @@ -3953,59 +5537,176 @@ packages: } engines: { node: ">=12" } - strip-json-comments@3.1.1: + strip-indent@3.0.0: + resolution: + { + integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==, + } + engines: { node: ">=8" } + + strip-indent@4.0.0: + resolution: + { + integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==, + } + engines: { node: ">=12" } + + strip-json-comments@3.1.1: + resolution: + { + integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, + } + engines: { node: ">=8" } + + supports-color@7.2.0: + resolution: + { + integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, + } + engines: { node: ">=8" } + + supports-color@8.1.1: + resolution: + { + integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==, + } + engines: { node: ">=10" } + + supports-preserve-symlinks-flag@1.0.0: + resolution: + { + integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, + } + engines: { node: ">= 0.4" } + + tailwind-merge@3.0.2: + resolution: + { + integrity: sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw==, + } + + tailwind-variants@1.0.0: + resolution: + { + integrity: sha512-2WSbv4ulEEyuBKomOunut65D8UZwxrHoRfYnxGcQNnHqlSCp2+B7Yz2W+yrNDrxRodOXtGD/1oCcKGNBnUqMqA==, + } + engines: { node: ">=16.x", pnpm: ">=7.x" } + peerDependencies: + tailwindcss: "*" + + tailwindcss-react-aria-components@2.0.0: + resolution: + { + integrity: sha512-l8YdpXX//qx0Mz2bW3YKLjboTQxR3zLrFhlHniAIn+mTwVM1yvT0Jp7Pn3eFrqi+qtOMmcJzXaF2rsKezSr0SQ==, + } + peerDependencies: + tailwindcss: ^4.0.0 + + tailwindcss@4.1.5: + resolution: + { + integrity: sha512-nYtSPfWGDiWgCkwQG/m+aX83XCwf62sBgg3bIlNiiOcggnS1x3uVRDAuyelBFL+vJdOPPCGElxv9DjHJjRHiVA==, + } + + tapable@2.2.1: + resolution: + { + integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==, + } + engines: { node: ">=6" } + + terser-webpack-plugin@5.3.14: + resolution: + { + integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==, + } + engines: { node: ">= 10.13.0" } + peerDependencies: + "@swc/core": "*" + esbuild: "*" + uglify-js: "*" + webpack: ^5.1.0 + peerDependenciesMeta: + "@swc/core": + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@5.39.0: + resolution: + { + integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==, + } + engines: { node: ">=10" } + hasBin: true + + test-exclude@7.0.1: + resolution: + { + integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==, + } + engines: { node: ">=18" } + + tiny-invariant@1.3.3: + resolution: + { + integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==, + } + + tiny-warning@1.0.3: resolution: { - integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, + integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==, } - engines: { node: ">=8" } - supports-color@7.2.0: + tinybench@2.9.0: resolution: { - integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, + integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==, } - engines: { node: ">=8" } - tailwindcss-react-aria-components@2.0.0: + tinyexec@0.3.2: resolution: { - integrity: sha512-l8YdpXX//qx0Mz2bW3YKLjboTQxR3zLrFhlHniAIn+mTwVM1yvT0Jp7Pn3eFrqi+qtOMmcJzXaF2rsKezSr0SQ==, + integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==, } - peerDependencies: - tailwindcss: ^4.0.0 - tailwindcss@4.1.5: + tinyglobby@0.2.13: resolution: { - integrity: sha512-nYtSPfWGDiWgCkwQG/m+aX83XCwf62sBgg3bIlNiiOcggnS1x3uVRDAuyelBFL+vJdOPPCGElxv9DjHJjRHiVA==, + integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==, } + engines: { node: ">=12.0.0" } - tapable@2.2.1: + tinypool@1.0.2: resolution: { - integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==, + integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==, } - engines: { node: ">=6" } + engines: { node: ^18.0.0 || >=20.0.0 } - tiny-invariant@1.3.3: + tinyrainbow@1.2.0: resolution: { - integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==, + integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==, } + engines: { node: ">=14.0.0" } - tiny-warning@1.0.3: + tinyrainbow@2.0.0: resolution: { - integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==, + integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==, } + engines: { node: ">=14.0.0" } - tinyglobby@0.2.13: + tinyspy@3.0.2: resolution: { - integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==, + integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==, } - engines: { node: ">=12.0.0" } + engines: { node: ">=14.0.0" } to-regex-range@5.0.1: resolution: @@ -4021,6 +5722,13 @@ packages: } engines: { node: ">=0.6" } + totalist@3.0.1: + resolution: + { + integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==, + } + engines: { node: ">=6" } + ts-api-utils@2.1.0: resolution: { @@ -4030,6 +5738,20 @@ packages: peerDependencies: typescript: ">=4.8.4" + ts-dedent@2.2.0: + resolution: + { + integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==, + } + engines: { node: ">=6.10" } + + tsconfig-paths@4.2.0: + resolution: + { + integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==, + } + engines: { node: ">=6" } + tslib@2.8.1: resolution: { @@ -4044,6 +5766,12 @@ packages: engines: { node: ">=18.0.0" } hasBin: true + tween-functions@1.2.0: + resolution: + { + integrity: sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA==, + } + type-check@0.4.0: resolution: { @@ -4051,6 +5779,13 @@ packages: } engines: { node: ">= 0.8.0" } + type-fest@2.19.0: + resolution: + { + integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==, + } + engines: { node: ">=12.20" } + type-is@2.0.1: resolution: { @@ -4082,6 +5817,13 @@ packages: integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==, } + universalify@2.0.1: + resolution: + { + integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==, + } + engines: { node: ">= 10.0.0" } + unpipe@1.0.0: resolution: { @@ -4089,6 +5831,13 @@ packages: } engines: { node: ">= 0.8" } + unplugin@1.16.1: + resolution: + { + integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==, + } + engines: { node: ">=14.0.0" } + unplugin@2.3.2: resolution: { @@ -4119,6 +5868,19 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + util@0.12.5: + resolution: + { + integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==, + } + + uuid@9.0.1: + resolution: + { + integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==, + } + hasBin: true + vary@1.1.2: resolution: { @@ -4126,6 +5888,14 @@ packages: } engines: { node: ">= 0.8" } + vite-node@3.1.3: + resolution: + { + integrity: sha512-uHV4plJ2IxCl4u1up1FQRrqclylKAogbtBfOTwcuJ28xFi+89PZ57BRh+naIRvH70HPwxy5QHYzg1OrEaC7AbA==, + } + engines: { node: ^18.0.0 || ^20.0.0 || >=22.0.0 } + hasBin: true + vite@6.3.5: resolution: { @@ -4169,12 +5939,77 @@ packages: yaml: optional: true + vitest@3.1.3: + resolution: + { + integrity: sha512-188iM4hAHQ0km23TN/adso1q5hhwKqUpv+Sd6p5sOuh6FhQnRNW3IsiIpvxqahtBabsJ2SLZgmGSpcYK4wQYJw==, + } + engines: { node: ^18.0.0 || ^20.0.0 || >=22.0.0 } + hasBin: true + peerDependencies: + "@edge-runtime/vm": "*" + "@types/debug": ^4.1.12 + "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 + "@vitest/browser": 3.1.3 + "@vitest/ui": 3.1.3 + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@types/debug": + optional: true + "@types/node": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + watchpack@2.4.2: + resolution: + { + integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==, + } + engines: { node: ">=10.13.0" } + + webpack-sources@3.2.3: + resolution: + { + integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==, + } + engines: { node: ">=10.13.0" } + webpack-virtual-modules@0.6.2: resolution: { integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==, } + webpack@5.99.8: + resolution: + { + integrity: sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ==, + } + engines: { node: ">=10.13.0" } + hasBin: true + peerDependencies: + webpack-cli: "*" + peerDependenciesMeta: + webpack-cli: + optional: true + + which-typed-array@1.1.19: + resolution: + { + integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==, + } + engines: { node: ">= 0.4" } + which@2.0.2: resolution: { @@ -4183,6 +6018,14 @@ packages: engines: { node: ">= 8" } hasBin: true + why-is-node-running@2.3.0: + resolution: + { + integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==, + } + engines: { node: ">=8" } + hasBin: true + word-wrap@1.2.5: resolution: { @@ -4190,6 +6033,20 @@ packages: } engines: { node: ">=0.10.0" } + wrap-ansi@7.0.0: + resolution: + { + integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, + } + engines: { node: ">=10" } + + wrap-ansi@8.1.0: + resolution: + { + integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==, + } + engines: { node: ">=12" } + wrap-ansi@9.0.0: resolution: { @@ -4203,6 +6060,21 @@ packages: integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, } + ws@8.18.2: + resolution: + { + integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==, + } + engines: { node: ">=10.0.0" } + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + yallist@3.1.1: resolution: { @@ -4239,6 +6111,8 @@ packages: } snapshots: + "@adobe/css-tools@4.4.2": {} + "@ampproject/remapping@2.3.0": dependencies: "@jridgewell/gen-mapping": 0.3.8 @@ -4341,6 +6215,8 @@ snapshots: "@babel/core": 7.27.1 "@babel/helper-plugin-utils": 7.27.1 + "@babel/runtime@7.27.1": {} + "@babel/template@7.27.2": dependencies: "@babel/code-frame": 7.27.1 @@ -4364,6 +6240,21 @@ snapshots: "@babel/helper-string-parser": 7.27.1 "@babel/helper-validator-identifier": 7.27.1 + "@bcoe/v8-coverage@1.0.2": {} + + "@chromatic-com/storybook@3.2.6(react@19.1.0)(storybook@8.6.12(prettier@3.5.3))": + dependencies: + chromatic: 11.28.2 + filesize: 10.1.6 + jsonfile: 6.1.0 + react-confetti: 6.4.0(react@19.1.0) + storybook: 8.6.12(prettier@3.5.3) + strip-ansi: 7.1.0 + transitivePeerDependencies: + - "@chromatic-com/cypress" + - "@chromatic-com/playwright" + - react + "@esbuild/aix-ppc64@0.25.4": optional: true @@ -4539,6 +6430,26 @@ snapshots: dependencies: "@swc/helpers": 0.5.17 + "@isaacs/cliui@8.0.2": + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + "@istanbuljs/schema@0.1.3": {} + + "@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))": + dependencies: + glob: 10.4.5 + magic-string: 0.27.0 + react-docgen-typescript: 2.2.2(typescript@5.8.3) + vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + optionalDependencies: + typescript: 5.8.3 + "@jridgewell/gen-mapping@0.3.8": dependencies: "@jridgewell/set-array": 1.2.1 @@ -4549,6 +6460,11 @@ snapshots: "@jridgewell/set-array@1.2.1": {} + "@jridgewell/source-map@0.3.6": + dependencies: + "@jridgewell/gen-mapping": 0.3.8 + "@jridgewell/trace-mapping": 0.3.25 + "@jridgewell/sourcemap-codec@1.5.0": {} "@jridgewell/trace-mapping@0.3.25": @@ -4556,6 +6472,12 @@ snapshots: "@jridgewell/resolve-uri": 3.1.2 "@jridgewell/sourcemap-codec": 1.5.0 + "@mdx-js/react@3.1.0(@types/react@19.1.3)(react@19.1.0)": + dependencies: + "@types/mdx": 2.0.13 + "@types/react": 19.1.3 + react: 19.1.0 + "@modelcontextprotocol/sdk@1.11.0": dependencies: content-type: 1.0.5 @@ -4583,6 +6505,11 @@ snapshots: "@nodelib/fs.scandir": 2.1.5 fastq: 1.19.1 + "@pkgjs/parseargs@0.11.0": + optional: true + + "@polka/url@1.0.0-next.29": {} + "@react-aria/autocomplete@3.0.0-beta.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: "@react-aria/combobox": 3.12.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -5625,6 +7552,14 @@ snapshots: "@react-types/shared": 3.29.0(react@19.1.0) react: 19.1.0 + "@rollup/pluginutils@5.1.4(rollup@4.40.2)": + dependencies: + "@types/estree": 1.0.7 + estree-walker: 2.0.2 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.40.2 + "@rollup/rollup-android-arm-eabi@4.40.2": optional: true @@ -5634,56 +7569,297 @@ snapshots: "@rollup/rollup-darwin-arm64@4.40.2": optional: true - "@rollup/rollup-darwin-x64@4.40.2": - optional: true + "@rollup/rollup-darwin-x64@4.40.2": + optional: true + + "@rollup/rollup-freebsd-arm64@4.40.2": + optional: true + + "@rollup/rollup-freebsd-x64@4.40.2": + optional: true + + "@rollup/rollup-linux-arm-gnueabihf@4.40.2": + optional: true + + "@rollup/rollup-linux-arm-musleabihf@4.40.2": + optional: true + + "@rollup/rollup-linux-arm64-gnu@4.40.2": + optional: true + + "@rollup/rollup-linux-arm64-musl@4.40.2": + optional: true + + "@rollup/rollup-linux-loongarch64-gnu@4.40.2": + optional: true + + "@rollup/rollup-linux-powerpc64le-gnu@4.40.2": + optional: true + + "@rollup/rollup-linux-riscv64-gnu@4.40.2": + optional: true + + "@rollup/rollup-linux-riscv64-musl@4.40.2": + optional: true + + "@rollup/rollup-linux-s390x-gnu@4.40.2": + optional: true + + "@rollup/rollup-linux-x64-gnu@4.40.2": + optional: true + + "@rollup/rollup-linux-x64-musl@4.40.2": + optional: true + + "@rollup/rollup-win32-arm64-msvc@4.40.2": + optional: true + + "@rollup/rollup-win32-ia32-msvc@4.40.2": + optional: true + + "@rollup/rollup-win32-x64-msvc@4.40.2": + optional: true + + "@storybook/addon-actions@8.6.12(storybook@8.6.12(prettier@3.5.3))": + dependencies: + "@storybook/global": 5.0.0 + "@types/uuid": 9.0.8 + dequal: 2.0.3 + polished: 4.3.1 + storybook: 8.6.12(prettier@3.5.3) + uuid: 9.0.1 + + "@storybook/addon-backgrounds@8.6.12(storybook@8.6.12(prettier@3.5.3))": + dependencies: + "@storybook/global": 5.0.0 + memoizerific: 1.11.3 + storybook: 8.6.12(prettier@3.5.3) + ts-dedent: 2.2.0 + + "@storybook/addon-controls@8.6.12(storybook@8.6.12(prettier@3.5.3))": + dependencies: + "@storybook/global": 5.0.0 + dequal: 2.0.3 + storybook: 8.6.12(prettier@3.5.3) + ts-dedent: 2.2.0 + + "@storybook/addon-docs@8.6.12(@types/react@19.1.3)(storybook@8.6.12(prettier@3.5.3))": + dependencies: + "@mdx-js/react": 3.1.0(@types/react@19.1.3)(react@19.1.0) + "@storybook/blocks": 8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3)) + "@storybook/csf-plugin": 8.6.12(storybook@8.6.12(prettier@3.5.3)) + "@storybook/react-dom-shim": 8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3)) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + storybook: 8.6.12(prettier@3.5.3) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - "@types/react" + + "@storybook/addon-essentials@8.6.12(@types/react@19.1.3)(storybook@8.6.12(prettier@3.5.3))": + dependencies: + "@storybook/addon-actions": 8.6.12(storybook@8.6.12(prettier@3.5.3)) + "@storybook/addon-backgrounds": 8.6.12(storybook@8.6.12(prettier@3.5.3)) + "@storybook/addon-controls": 8.6.12(storybook@8.6.12(prettier@3.5.3)) + "@storybook/addon-docs": 8.6.12(@types/react@19.1.3)(storybook@8.6.12(prettier@3.5.3)) + "@storybook/addon-highlight": 8.6.12(storybook@8.6.12(prettier@3.5.3)) + "@storybook/addon-measure": 8.6.12(storybook@8.6.12(prettier@3.5.3)) + "@storybook/addon-outline": 8.6.12(storybook@8.6.12(prettier@3.5.3)) + "@storybook/addon-toolbars": 8.6.12(storybook@8.6.12(prettier@3.5.3)) + "@storybook/addon-viewport": 8.6.12(storybook@8.6.12(prettier@3.5.3)) + storybook: 8.6.12(prettier@3.5.3) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - "@types/react" + + "@storybook/addon-highlight@8.6.12(storybook@8.6.12(prettier@3.5.3))": + dependencies: + "@storybook/global": 5.0.0 + storybook: 8.6.12(prettier@3.5.3) + + "@storybook/addon-measure@8.6.12(storybook@8.6.12(prettier@3.5.3))": + dependencies: + "@storybook/global": 5.0.0 + storybook: 8.6.12(prettier@3.5.3) + tiny-invariant: 1.3.3 + + "@storybook/addon-onboarding@8.6.12(storybook@8.6.12(prettier@3.5.3))": + dependencies: + storybook: 8.6.12(prettier@3.5.3) + + "@storybook/addon-outline@8.6.12(storybook@8.6.12(prettier@3.5.3))": + dependencies: + "@storybook/global": 5.0.0 + storybook: 8.6.12(prettier@3.5.3) + ts-dedent: 2.2.0 + + "@storybook/addon-styling-webpack@1.0.1(storybook@8.6.12(prettier@3.5.3))(webpack@5.99.8(esbuild@0.25.4))": + dependencies: + "@storybook/node-logger": 8.6.12(storybook@8.6.12(prettier@3.5.3)) + webpack: 5.99.8(esbuild@0.25.4) + transitivePeerDependencies: + - storybook + + "@storybook/addon-toolbars@8.6.12(storybook@8.6.12(prettier@3.5.3))": + dependencies: + storybook: 8.6.12(prettier@3.5.3) + + "@storybook/addon-viewport@8.6.12(storybook@8.6.12(prettier@3.5.3))": + dependencies: + memoizerific: 1.11.3 + storybook: 8.6.12(prettier@3.5.3) + + "@storybook/blocks@8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3))": + dependencies: + "@storybook/icons": 1.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + storybook: 8.6.12(prettier@3.5.3) + ts-dedent: 2.2.0 + optionalDependencies: + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + "@storybook/builder-vite@8.6.12(storybook@8.6.12(prettier@3.5.3))(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))": + dependencies: + "@storybook/csf-plugin": 8.6.12(storybook@8.6.12(prettier@3.5.3)) + browser-assert: 1.2.1 + storybook: 8.6.12(prettier@3.5.3) + ts-dedent: 2.2.0 + vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) - "@rollup/rollup-freebsd-arm64@4.40.2": - optional: true + "@storybook/components@8.6.12(storybook@8.6.12(prettier@3.5.3))": + dependencies: + storybook: 8.6.12(prettier@3.5.3) - "@rollup/rollup-freebsd-x64@4.40.2": - optional: true + "@storybook/core@8.6.12(prettier@3.5.3)(storybook@8.6.12(prettier@3.5.3))": + dependencies: + "@storybook/theming": 8.6.12(storybook@8.6.12(prettier@3.5.3)) + better-opn: 3.0.2 + browser-assert: 1.2.1 + esbuild: 0.25.4 + esbuild-register: 3.6.0(esbuild@0.25.4) + jsdoc-type-pratt-parser: 4.1.0 + process: 0.11.10 + recast: 0.23.11 + semver: 7.7.1 + util: 0.12.5 + ws: 8.18.2 + optionalDependencies: + prettier: 3.5.3 + transitivePeerDependencies: + - bufferutil + - storybook + - supports-color + - utf-8-validate - "@rollup/rollup-linux-arm-gnueabihf@4.40.2": - optional: true + "@storybook/csf-plugin@8.6.12(storybook@8.6.12(prettier@3.5.3))": + dependencies: + storybook: 8.6.12(prettier@3.5.3) + unplugin: 1.16.1 - "@rollup/rollup-linux-arm-musleabihf@4.40.2": - optional: true + "@storybook/csf@0.1.13": + dependencies: + type-fest: 2.19.0 - "@rollup/rollup-linux-arm64-gnu@4.40.2": - optional: true + "@storybook/experimental-addon-test@8.6.12(@vitest/browser@3.1.3)(@vitest/runner@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3))(vitest@3.1.3)": + dependencies: + "@storybook/global": 5.0.0 + "@storybook/icons": 1.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@storybook/instrumenter": 8.6.12(storybook@8.6.12(prettier@3.5.3)) + "@storybook/test": 8.6.12(storybook@8.6.12(prettier@3.5.3)) + polished: 4.3.1 + prompts: 2.4.2 + storybook: 8.6.12(prettier@3.5.3) + ts-dedent: 2.2.0 + optionalDependencies: + "@vitest/browser": 3.1.3(playwright@1.52.0)(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))(vitest@3.1.3) + "@vitest/runner": 3.1.3 + vitest: 3.1.3(@types/node@22.15.15)(@vitest/browser@3.1.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + transitivePeerDependencies: + - react + - react-dom - "@rollup/rollup-linux-arm64-musl@4.40.2": - optional: true + "@storybook/global@5.0.0": {} - "@rollup/rollup-linux-loongarch64-gnu@4.40.2": - optional: true + "@storybook/icons@1.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": + dependencies: + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) - "@rollup/rollup-linux-powerpc64le-gnu@4.40.2": - optional: true + "@storybook/instrumenter@8.6.12(storybook@8.6.12(prettier@3.5.3))": + dependencies: + "@storybook/global": 5.0.0 + "@vitest/utils": 2.1.9 + storybook: 8.6.12(prettier@3.5.3) - "@rollup/rollup-linux-riscv64-gnu@4.40.2": - optional: true + "@storybook/manager-api@8.6.12(storybook@8.6.12(prettier@3.5.3))": + dependencies: + storybook: 8.6.12(prettier@3.5.3) - "@rollup/rollup-linux-riscv64-musl@4.40.2": - optional: true + "@storybook/node-logger@8.6.12(storybook@8.6.12(prettier@3.5.3))": + dependencies: + storybook: 8.6.12(prettier@3.5.3) - "@rollup/rollup-linux-s390x-gnu@4.40.2": - optional: true + "@storybook/preview-api@8.6.12(storybook@8.6.12(prettier@3.5.3))": + dependencies: + storybook: 8.6.12(prettier@3.5.3) - "@rollup/rollup-linux-x64-gnu@4.40.2": - optional: true + "@storybook/react-dom-shim@8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3))": + dependencies: + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + storybook: 8.6.12(prettier@3.5.3) - "@rollup/rollup-linux-x64-musl@4.40.2": - optional: true + "@storybook/react-vite@8.6.12(@storybook/test@8.6.12(storybook@8.6.12(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.40.2)(storybook@8.6.12(prettier@3.5.3))(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))": + dependencies: + "@joshwooding/vite-plugin-react-docgen-typescript": 0.5.0(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + "@rollup/pluginutils": 5.1.4(rollup@4.40.2) + "@storybook/builder-vite": 8.6.12(storybook@8.6.12(prettier@3.5.3))(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + "@storybook/react": 8.6.12(@storybook/test@8.6.12(storybook@8.6.12(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3))(typescript@5.8.3) + find-up: 5.0.0 + magic-string: 0.30.17 + react: 19.1.0 + react-docgen: 7.1.1 + react-dom: 19.1.0(react@19.1.0) + resolve: 1.22.10 + storybook: 8.6.12(prettier@3.5.3) + tsconfig-paths: 4.2.0 + vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + optionalDependencies: + "@storybook/test": 8.6.12(storybook@8.6.12(prettier@3.5.3)) + transitivePeerDependencies: + - rollup + - supports-color + - typescript - "@rollup/rollup-win32-arm64-msvc@4.40.2": - optional: true + "@storybook/react@8.6.12(@storybook/test@8.6.12(storybook@8.6.12(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3))(typescript@5.8.3)": + dependencies: + "@storybook/components": 8.6.12(storybook@8.6.12(prettier@3.5.3)) + "@storybook/global": 5.0.0 + "@storybook/manager-api": 8.6.12(storybook@8.6.12(prettier@3.5.3)) + "@storybook/preview-api": 8.6.12(storybook@8.6.12(prettier@3.5.3)) + "@storybook/react-dom-shim": 8.6.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.12(prettier@3.5.3)) + "@storybook/theming": 8.6.12(storybook@8.6.12(prettier@3.5.3)) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + storybook: 8.6.12(prettier@3.5.3) + optionalDependencies: + "@storybook/test": 8.6.12(storybook@8.6.12(prettier@3.5.3)) + typescript: 5.8.3 - "@rollup/rollup-win32-ia32-msvc@4.40.2": - optional: true + "@storybook/test@8.6.12(storybook@8.6.12(prettier@3.5.3))": + dependencies: + "@storybook/global": 5.0.0 + "@storybook/instrumenter": 8.6.12(storybook@8.6.12(prettier@3.5.3)) + "@testing-library/dom": 10.4.0 + "@testing-library/jest-dom": 6.5.0 + "@testing-library/user-event": 14.5.2(@testing-library/dom@10.4.0) + "@vitest/expect": 2.0.5 + "@vitest/spy": 2.0.5 + storybook: 8.6.12(prettier@3.5.3) - "@rollup/rollup-win32-x64-msvc@4.40.2": - optional: true + "@storybook/theming@8.6.12(storybook@8.6.12(prettier@3.5.3))": + dependencies: + storybook: 8.6.12(prettier@3.5.3) "@swc/helpers@0.5.17": dependencies: @@ -5747,12 +7923,12 @@ snapshots: "@tailwindcss/oxide-win32-arm64-msvc": 4.1.5 "@tailwindcss/oxide-win32-x64-msvc": 4.1.5 - "@tailwindcss/vite@4.1.5(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1))": + "@tailwindcss/vite@4.1.5(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))": dependencies: "@tailwindcss/node": 4.1.5 "@tailwindcss/oxide": 4.1.5 tailwindcss: 4.1.5 - vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) "@tanstack/history@1.115.0": {} @@ -5796,7 +7972,7 @@ snapshots: optionalDependencies: "@tanstack/react-router": 1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - "@tanstack/router-plugin@1.120.2(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1))": + "@tanstack/router-plugin@1.120.2(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))(webpack@5.99.8(esbuild@0.25.4))": dependencies: "@babel/core": 7.27.1 "@babel/plugin-syntax-jsx": 7.27.1(@babel/core@7.27.1) @@ -5817,7 +7993,8 @@ snapshots: zod: 3.24.4 optionalDependencies: "@tanstack/react-router": 1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + webpack: 5.99.8(esbuild@0.25.4) transitivePeerDependencies: - supports-color @@ -5832,6 +8009,37 @@ snapshots: "@tanstack/virtual-file-routes@1.115.0": {} + "@testing-library/dom@10.4.0": + dependencies: + "@babel/code-frame": 7.27.1 + "@babel/runtime": 7.27.1 + "@types/aria-query": 5.0.4 + aria-query: 5.3.0 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + + "@testing-library/jest-dom@6.5.0": + dependencies: + "@adobe/css-tools": 4.4.2 + aria-query: 5.3.2 + chalk: 3.0.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + lodash: 4.17.21 + redent: 3.0.0 + + "@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)": + dependencies: + "@testing-library/dom": 10.4.0 + + "@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)": + dependencies: + "@testing-library/dom": 10.4.0 + + "@types/aria-query@5.0.4": {} + "@types/babel__core@7.20.5": dependencies: "@babel/parser": 7.27.2 @@ -5853,10 +8061,24 @@ snapshots: dependencies: "@babel/types": 7.27.1 + "@types/doctrine@0.0.9": {} + + "@types/eslint-scope@3.7.7": + dependencies: + "@types/eslint": 9.6.1 + "@types/estree": 1.0.7 + + "@types/eslint@9.6.1": + dependencies: + "@types/estree": 1.0.7 + "@types/json-schema": 7.0.15 + "@types/estree@1.0.7": {} "@types/json-schema@7.0.15": {} + "@types/mdx@2.0.13": {} + "@types/node@22.15.15": dependencies: undici-types: 6.21.0 @@ -5869,6 +8091,10 @@ snapshots: dependencies: csstype: 3.1.3 + "@types/resolve@1.20.6": {} + + "@types/uuid@9.0.8": {} + "@typescript-eslint/eslint-plugin@8.32.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)": dependencies: "@eslint-community/regexpp": 4.12.1 @@ -5946,17 +8172,208 @@ snapshots: "@typescript-eslint/types": 8.32.0 eslint-visitor-keys: 4.2.0 - "@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1))": + "@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))": dependencies: "@babel/core": 7.27.1 "@babel/plugin-transform-react-jsx-self": 7.27.1(@babel/core@7.27.1) "@babel/plugin-transform-react-jsx-source": 7.27.1(@babel/core@7.27.1) "@types/babel__core": 7.20.5 react-refresh: 0.17.0 - vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + transitivePeerDependencies: + - supports-color + + "@vitest/browser@3.1.3(playwright@1.52.0)(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))(vitest@3.1.3)": + dependencies: + "@testing-library/dom": 10.4.0 + "@testing-library/user-event": 14.6.1(@testing-library/dom@10.4.0) + "@vitest/mocker": 3.1.3(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + "@vitest/utils": 3.1.3 + magic-string: 0.30.17 + sirv: 3.0.1 + tinyrainbow: 2.0.0 + vitest: 3.1.3(@types/node@22.15.15)(@vitest/browser@3.1.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + ws: 8.18.2 + optionalDependencies: + playwright: 1.52.0 + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + + "@vitest/coverage-v8@3.1.3(@vitest/browser@3.1.3)(vitest@3.1.3)": + dependencies: + "@ampproject/remapping": 2.3.0 + "@bcoe/v8-coverage": 1.0.2 + debug: 4.4.0 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.1.7 + magic-string: 0.30.17 + magicast: 0.3.5 + std-env: 3.9.0 + test-exclude: 7.0.1 + tinyrainbow: 2.0.0 + vitest: 3.1.3(@types/node@22.15.15)(@vitest/browser@3.1.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + optionalDependencies: + "@vitest/browser": 3.1.3(playwright@1.52.0)(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))(vitest@3.1.3) transitivePeerDependencies: - supports-color + "@vitest/expect@2.0.5": + dependencies: + "@vitest/spy": 2.0.5 + "@vitest/utils": 2.0.5 + chai: 5.2.0 + tinyrainbow: 1.2.0 + + "@vitest/expect@3.1.3": + dependencies: + "@vitest/spy": 3.1.3 + "@vitest/utils": 3.1.3 + chai: 5.2.0 + tinyrainbow: 2.0.0 + + "@vitest/mocker@3.1.3(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))": + dependencies: + "@vitest/spy": 3.1.3 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + + "@vitest/pretty-format@2.0.5": + dependencies: + tinyrainbow: 1.2.0 + + "@vitest/pretty-format@2.1.9": + dependencies: + tinyrainbow: 1.2.0 + + "@vitest/pretty-format@3.1.3": + dependencies: + tinyrainbow: 2.0.0 + + "@vitest/runner@3.1.3": + dependencies: + "@vitest/utils": 3.1.3 + pathe: 2.0.3 + + "@vitest/snapshot@3.1.3": + dependencies: + "@vitest/pretty-format": 3.1.3 + magic-string: 0.30.17 + pathe: 2.0.3 + + "@vitest/spy@2.0.5": + dependencies: + tinyspy: 3.0.2 + + "@vitest/spy@3.1.3": + dependencies: + tinyspy: 3.0.2 + + "@vitest/utils@2.0.5": + dependencies: + "@vitest/pretty-format": 2.0.5 + estree-walker: 3.0.3 + loupe: 3.1.3 + tinyrainbow: 1.2.0 + + "@vitest/utils@2.1.9": + dependencies: + "@vitest/pretty-format": 2.1.9 + loupe: 3.1.3 + tinyrainbow: 1.2.0 + + "@vitest/utils@3.1.3": + dependencies: + "@vitest/pretty-format": 3.1.3 + loupe: 3.1.3 + tinyrainbow: 2.0.0 + + "@webassemblyjs/ast@1.14.1": + dependencies: + "@webassemblyjs/helper-numbers": 1.13.2 + "@webassemblyjs/helper-wasm-bytecode": 1.13.2 + + "@webassemblyjs/floating-point-hex-parser@1.13.2": {} + + "@webassemblyjs/helper-api-error@1.13.2": {} + + "@webassemblyjs/helper-buffer@1.14.1": {} + + "@webassemblyjs/helper-numbers@1.13.2": + dependencies: + "@webassemblyjs/floating-point-hex-parser": 1.13.2 + "@webassemblyjs/helper-api-error": 1.13.2 + "@xtuc/long": 4.2.2 + + "@webassemblyjs/helper-wasm-bytecode@1.13.2": {} + + "@webassemblyjs/helper-wasm-section@1.14.1": + dependencies: + "@webassemblyjs/ast": 1.14.1 + "@webassemblyjs/helper-buffer": 1.14.1 + "@webassemblyjs/helper-wasm-bytecode": 1.13.2 + "@webassemblyjs/wasm-gen": 1.14.1 + + "@webassemblyjs/ieee754@1.13.2": + dependencies: + "@xtuc/ieee754": 1.2.0 + + "@webassemblyjs/leb128@1.13.2": + dependencies: + "@xtuc/long": 4.2.2 + + "@webassemblyjs/utf8@1.13.2": {} + + "@webassemblyjs/wasm-edit@1.14.1": + dependencies: + "@webassemblyjs/ast": 1.14.1 + "@webassemblyjs/helper-buffer": 1.14.1 + "@webassemblyjs/helper-wasm-bytecode": 1.13.2 + "@webassemblyjs/helper-wasm-section": 1.14.1 + "@webassemblyjs/wasm-gen": 1.14.1 + "@webassemblyjs/wasm-opt": 1.14.1 + "@webassemblyjs/wasm-parser": 1.14.1 + "@webassemblyjs/wast-printer": 1.14.1 + + "@webassemblyjs/wasm-gen@1.14.1": + dependencies: + "@webassemblyjs/ast": 1.14.1 + "@webassemblyjs/helper-wasm-bytecode": 1.13.2 + "@webassemblyjs/ieee754": 1.13.2 + "@webassemblyjs/leb128": 1.13.2 + "@webassemblyjs/utf8": 1.13.2 + + "@webassemblyjs/wasm-opt@1.14.1": + dependencies: + "@webassemblyjs/ast": 1.14.1 + "@webassemblyjs/helper-buffer": 1.14.1 + "@webassemblyjs/wasm-gen": 1.14.1 + "@webassemblyjs/wasm-parser": 1.14.1 + + "@webassemblyjs/wasm-parser@1.14.1": + dependencies: + "@webassemblyjs/ast": 1.14.1 + "@webassemblyjs/helper-api-error": 1.13.2 + "@webassemblyjs/helper-wasm-bytecode": 1.13.2 + "@webassemblyjs/ieee754": 1.13.2 + "@webassemblyjs/leb128": 1.13.2 + "@webassemblyjs/utf8": 1.13.2 + + "@webassemblyjs/wast-printer@1.14.1": + dependencies: + "@webassemblyjs/ast": 1.14.1 + "@xtuc/long": 4.2.2 + + "@xtuc/ieee754@1.2.0": {} + + "@xtuc/long@4.2.2": {} + accepts@2.0.0: dependencies: mime-types: 3.0.1 @@ -5968,6 +8385,15 @@ snapshots: acorn@8.14.1: {} + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-keywords@5.1.0(ajv@8.17.1): + dependencies: + ajv: 8.17.1 + fast-deep-equal: 3.1.3 + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -5975,16 +8401,27 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.6 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + ansi-escapes@7.0.0: dependencies: environment: 1.1.0 + ansi-regex@5.0.1: {} + ansi-regex@6.1.0: {} ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 + ansi-styles@5.2.0: {} + ansi-styles@6.2.1: {} ansis@3.17.0: {} @@ -5996,8 +8433,24 @@ snapshots: argparse@2.0.1: {} + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + + aria-query@5.3.2: {} + + assertion-error@2.0.1: {} + + ast-types@0.16.1: + dependencies: + tslib: 2.8.1 + asynckit@0.4.0: {} + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + axios@1.9.0: dependencies: follow-redirects: 1.15.9 @@ -6017,6 +8470,10 @@ snapshots: balanced-match@1.0.2: {} + better-opn@3.0.2: + dependencies: + open: 8.4.2 + binary-extensions@2.3.0: {} body-parser@2.2.0: @@ -6046,6 +8503,8 @@ snapshots: dependencies: fill-range: 7.1.1 + browser-assert@1.2.1: {} + browserslist@4.24.5: dependencies: caniuse-lite: 1.0.30001717 @@ -6053,13 +8512,24 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.24.5) + buffer-from@1.1.2: {} + bytes@3.1.2: {} + cac@6.7.14: {} + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + call-bound@1.0.4: dependencies: call-bind-apply-helpers: 1.0.2 @@ -6069,6 +8539,19 @@ snapshots: caniuse-lite@1.0.30001717: {} + chai@5.2.0: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.3 + pathval: 2.0.0 + + chalk@3.0.0: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -6076,6 +8559,8 @@ snapshots: chalk@5.4.1: {} + check-error@2.1.1: {} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -6088,6 +8573,10 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + chromatic@11.28.2: {} + + chrome-trace-event@1.0.4: {} + cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 @@ -6115,6 +8604,8 @@ snapshots: commander@13.1.0: {} + commander@2.20.3: {} + concat-map@0.0.1: {} content-disposition@1.0.0: @@ -6140,6 +8631,8 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + css.escape@1.5.1: {} + csstype@3.1.3: {} debug@4.4.0: @@ -6148,28 +8641,54 @@ snapshots: decimal.js@10.5.0: {} + deep-eql@5.0.2: {} + deep-is@0.1.4: {} + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-lazy-prop@2.0.0: {} + delayed-stream@1.0.0: {} depd@2.0.0: {} + dequal@2.0.3: {} + detect-libc@2.0.4: {} diff@7.0.0: {} + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + dom-accessibility-api@0.5.16: {} + + dom-accessibility-api@0.6.3: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 es-errors: 1.3.0 gopd: 1.2.0 + eastasianwidth@0.2.0: {} + ee-first@1.1.1: {} electron-to-chromium@1.5.150: {} emoji-regex@10.4.0: {} + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + encodeurl@2.0.0: {} enhanced-resolve@5.18.1: @@ -6183,6 +8702,8 @@ snapshots: es-errors@1.3.0: {} + es-module-lexer@1.7.0: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -6194,6 +8715,13 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 + esbuild-register@3.6.0(esbuild@0.25.4): + dependencies: + debug: 4.4.0 + esbuild: 0.25.4 + transitivePeerDependencies: + - supports-color + esbuild@0.25.4: optionalDependencies: "@esbuild/aix-ppc64": 0.25.4 @@ -6236,6 +8764,21 @@ snapshots: dependencies: eslint: 9.26.0(jiti@2.4.2) + eslint-plugin-storybook@0.12.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3): + dependencies: + "@storybook/csf": 0.1.13 + "@typescript-eslint/utils": 8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.26.0(jiti@2.4.2) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - supports-color + - typescript + + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + eslint-scope@8.3.0: dependencies: esrecurse: 4.3.0 @@ -6295,6 +8838,8 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.14.1) eslint-visitor-keys: 4.2.0 + esprima@4.0.1: {} + esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -6303,14 +8848,24 @@ snapshots: dependencies: estraverse: 5.3.0 + estraverse@4.3.0: {} + estraverse@5.3.0: {} + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + "@types/estree": 1.0.7 + esutils@2.0.3: {} etag@1.8.1: {} eventemitter3@5.0.1: {} + events@3.3.0: {} + eventsource-parser@3.0.1: {} eventsource@3.0.6: @@ -6329,6 +8884,8 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 + expect-type@1.2.1: {} + express-rate-limit@7.5.0(express@5.1.0): dependencies: express: 5.1.0 @@ -6379,6 +8936,8 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-uri@3.0.6: {} + fastq@1.19.1: dependencies: reusify: 1.1.0 @@ -6391,6 +8950,8 @@ snapshots: dependencies: flat-cache: 4.0.1 + filesize@10.1.6: {} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -6420,6 +8981,15 @@ snapshots: follow-redirects@1.15.9: {} + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + form-data@4.0.2: dependencies: asynckit: 0.4.0 @@ -6431,6 +9001,9 @@ snapshots: fresh@2.0.0: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -6472,6 +9045,17 @@ snapshots: dependencies: is-glob: 4.0.3 + glob-to-regexp@0.4.1: {} + + glob@10.4.5: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + globals@11.12.0: {} globals@14.0.0: {} @@ -6486,6 +9070,10 @@ snapshots: has-flag@4.0.0: {} + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + has-symbols@1.1.0: {} has-tostringtag@1.0.2: @@ -6496,6 +9084,8 @@ snapshots: dependencies: function-bind: 1.1.2 + html-escaper@2.0.2: {} + http-errors@2.0.0: dependencies: depd: 2.0.0 @@ -6521,6 +9111,8 @@ snapshots: imurmurhash@0.1.4: {} + indent-string@4.0.0: {} + inherits@2.0.4: {} intl-messageformat@10.7.16: @@ -6532,18 +9124,40 @@ snapshots: ipaddr.js@1.9.1: {} + is-arguments@1.2.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 + is-callable@1.2.7: {} + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-docker@2.2.1: {} + is-extglob@2.1.1: {} + is-fullwidth-code-point@3.0.0: {} + is-fullwidth-code-point@4.0.0: {} is-fullwidth-code-point@5.0.0: dependencies: get-east-asian-width: 1.3.0 + is-generator-function@1.1.0: + dependencies: + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -6552,10 +9166,58 @@ snapshots: is-promise@4.0.0: {} + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + is-stream@3.0.0: {} + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.19 + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + isexe@2.0.0: {} + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@5.0.6: + dependencies: + "@jridgewell/trace-mapping": 0.3.25 + debug: 4.4.0 + istanbul-lib-coverage: 3.2.2 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + jackspeak@3.4.3: + dependencies: + "@isaacs/cliui": 8.0.2 + optionalDependencies: + "@pkgjs/parseargs": 0.11.0 + + jest-worker@27.5.1: + dependencies: + "@types/node": 22.15.15 + merge-stream: 2.0.0 + supports-color: 8.1.1 + jiti@2.4.2: {} js-tokens@4.0.0: {} @@ -6564,20 +9226,34 @@ snapshots: dependencies: argparse: 2.0.1 + jsdoc-type-pratt-parser@4.1.0: {} + jsesc@3.1.0: {} json-buffer@3.0.1: {} + json-parse-even-better-errors@2.3.1: {} + json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} json5@2.2.3: {} + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + keyv@4.5.4: dependencies: json-buffer: 3.0.1 + kleur@3.0.3: {} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -6654,12 +9330,16 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 9.0.0 + loader-runner@4.3.0: {} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 lodash.merge@4.6.2: {} + lodash@4.17.21: {} + log-update@6.1.0: dependencies: ansi-escapes: 7.0.0 @@ -6668,14 +9348,44 @@ snapshots: strip-ansi: 7.1.0 wrap-ansi: 9.0.0 + loupe@3.1.3: {} + + lru-cache@10.4.3: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 + lz-string@1.5.0: {} + + magic-string@0.27.0: + dependencies: + "@jridgewell/sourcemap-codec": 1.5.0 + + magic-string@0.30.17: + dependencies: + "@jridgewell/sourcemap-codec": 1.5.0 + + magicast@0.3.5: + dependencies: + "@babel/parser": 7.27.2 + "@babel/types": 7.27.1 + source-map-js: 1.2.1 + + make-dir@4.0.0: + dependencies: + semver: 7.7.1 + + map-or-similar@1.5.0: {} + math-intrinsics@1.1.0: {} media-typer@1.1.0: {} + memoizerific@1.11.3: + dependencies: + map-or-similar: 1.5.0 + merge-descriptors@2.0.0: {} merge-stream@2.0.0: {} @@ -6703,6 +9413,8 @@ snapshots: mimic-function@5.0.1: {} + min-indent@1.0.1: {} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -6711,6 +9423,12 @@ snapshots: dependencies: brace-expansion: 2.0.1 + minimist@1.2.8: {} + + minipass@7.1.2: {} + + mrmime@2.0.1: {} + ms@2.1.3: {} nanoid@3.3.11: {} @@ -6719,6 +9437,8 @@ snapshots: negotiator@1.0.0: {} + neo-async@2.6.2: {} + node-releases@2.0.19: {} normalize-path@3.0.0: {} @@ -6747,6 +9467,12 @@ snapshots: dependencies: mimic-function: 5.0.1 + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -6764,6 +9490,8 @@ snapshots: dependencies: p-limit: 3.1.0 + package-json-from-dist@1.0.1: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -6776,8 +9504,19 @@ snapshots: path-key@4.0.0: {} + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + path-to-regexp@8.2.0: {} + pathe@2.0.3: {} + + pathval@2.0.0: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -6788,6 +9527,20 @@ snapshots: pkce-challenge@5.0.0: {} + playwright-core@1.52.0: {} + + playwright@1.52.0: + dependencies: + playwright-core: 1.52.0 + optionalDependencies: + fsevents: 2.3.2 + + polished@4.3.1: + dependencies: + "@babel/runtime": 7.27.1 + + possible-typed-array-names@1.1.0: {} + postcss@8.5.3: dependencies: nanoid: 3.3.11 @@ -6798,6 +9551,19 @@ snapshots: prettier@3.5.3: {} + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + + process@0.11.10: {} + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -6813,6 +9579,10 @@ snapshots: queue-microtask@1.2.3: {} + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + range-parser@1.2.1: {} raw-body@3.0.0: @@ -6902,11 +9672,37 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) + react-confetti@6.4.0(react@19.1.0): + dependencies: + react: 19.1.0 + tween-functions: 1.2.0 + + react-docgen-typescript@2.2.2(typescript@5.8.3): + dependencies: + typescript: 5.8.3 + + react-docgen@7.1.1: + dependencies: + "@babel/core": 7.27.1 + "@babel/traverse": 7.27.1 + "@babel/types": 7.27.1 + "@types/babel__core": 7.20.5 + "@types/babel__traverse": 7.20.7 + "@types/doctrine": 0.0.9 + "@types/resolve": 1.20.6 + doctrine: 3.0.0 + resolve: 1.22.10 + strip-indent: 4.0.0 + transitivePeerDependencies: + - supports-color + react-dom@19.1.0(react@19.1.0): dependencies: react: 19.1.0 scheduler: 0.26.0 + react-is@17.0.2: {} + react-refresh@0.17.0: {} react-stately@3.37.0(react@19.1.0): @@ -6945,10 +9741,31 @@ snapshots: dependencies: picomatch: 2.3.1 + recast@0.23.11: + dependencies: + ast-types: 0.16.1 + esprima: 4.0.1 + source-map: 0.6.1 + tiny-invariant: 1.3.3 + tslib: 2.8.1 + + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + + require-from-string@2.0.2: {} + resolve-from@4.0.0: {} resolve-pkg-maps@1.0.0: {} + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + restore-cursor@5.1.0: dependencies: onetime: 7.0.0 @@ -7000,10 +9817,23 @@ snapshots: safe-buffer@5.2.1: {} + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + safer-buffer@2.1.2: {} scheduler@0.26.0: {} + schema-utils@4.3.2: + dependencies: + "@types/json-schema": 7.0.15 + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) + semver@6.3.1: {} semver@7.7.1: {} @@ -7024,6 +9854,10 @@ snapshots: transitivePeerDependencies: - supports-color + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + serve-static@2.2.0: dependencies: encodeurl: 2.0.0 @@ -7033,6 +9867,15 @@ snapshots: transitivePeerDependencies: - supports-color + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + setprototypeof@1.2.0: {} shebang-command@2.0.0: @@ -7069,8 +9912,18 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 + siginfo@2.0.0: {} + signal-exit@4.1.0: {} + sirv@3.0.1: + dependencies: + "@polka/url": 1.0.0-next.29 + mrmime: 2.0.1 + totalist: 3.0.1 + + sisteransi@1.0.5: {} + slice-ansi@5.0.0: dependencies: ansi-styles: 6.2.1 @@ -7083,28 +9936,88 @@ snapshots: source-map-js@1.2.1: {} + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + stackback@0.0.2: {} + statuses@2.0.1: {} + std-env@3.9.0: {} + + storybook@8.6.12(prettier@3.5.3): + dependencies: + "@storybook/core": 8.6.12(prettier@3.5.3)(storybook@8.6.12(prettier@3.5.3)) + optionalDependencies: + prettier: 3.5.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + string-argv@0.3.2: {} + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + string-width@7.2.0: dependencies: emoji-regex: 10.4.0 get-east-asian-width: 1.3.0 strip-ansi: 7.1.0 + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + strip-ansi@7.1.0: dependencies: ansi-regex: 6.1.0 + strip-bom@3.0.0: {} + strip-final-newline@3.0.0: {} + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 + + strip-indent@4.0.0: + dependencies: + min-indent: 1.0.1 + strip-json-comments@3.1.1: {} supports-color@7.2.0: dependencies: has-flag: 4.0.0 + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + tailwind-merge@3.0.2: {} + + tailwind-variants@1.0.0(tailwindcss@4.1.5): + dependencies: + tailwind-merge: 3.0.2 + tailwindcss: 4.1.5 + tailwindcss-react-aria-components@2.0.0(tailwindcss@4.1.5): dependencies: tailwindcss: 4.1.5 @@ -7113,25 +10026,71 @@ snapshots: tapable@2.2.1: {} + terser-webpack-plugin@5.3.14(esbuild@0.25.4)(webpack@5.99.8(esbuild@0.25.4)): + dependencies: + "@jridgewell/trace-mapping": 0.3.25 + jest-worker: 27.5.1 + schema-utils: 4.3.2 + serialize-javascript: 6.0.2 + terser: 5.39.0 + webpack: 5.99.8(esbuild@0.25.4) + optionalDependencies: + esbuild: 0.25.4 + + terser@5.39.0: + dependencies: + "@jridgewell/source-map": 0.3.6 + acorn: 8.14.1 + commander: 2.20.3 + source-map-support: 0.5.21 + + test-exclude@7.0.1: + dependencies: + "@istanbuljs/schema": 0.1.3 + glob: 10.4.5 + minimatch: 9.0.5 + tiny-invariant@1.3.3: {} tiny-warning@1.0.3: {} + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + tinyglobby@0.2.13: dependencies: fdir: 6.4.4(picomatch@4.0.2) picomatch: 4.0.2 + tinypool@1.0.2: {} + + tinyrainbow@1.2.0: {} + + tinyrainbow@2.0.0: {} + + tinyspy@3.0.2: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 toidentifier@1.0.1: {} + totalist@3.0.1: {} + ts-api-utils@2.1.0(typescript@5.8.3): dependencies: typescript: 5.8.3 + ts-dedent@2.2.0: {} + + tsconfig-paths@4.2.0: + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + tslib@2.8.1: {} tsx@4.19.4: @@ -7141,10 +10100,14 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + tween-functions@1.2.0: {} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 + type-fest@2.19.0: {} + type-is@2.0.1: dependencies: content-type: 1.0.5 @@ -7165,8 +10128,15 @@ snapshots: undici-types@6.21.0: {} + universalify@2.0.1: {} + unpipe@1.0.0: {} + unplugin@1.16.1: + dependencies: + acorn: 8.14.1 + webpack-virtual-modules: 0.6.2 + unplugin@2.3.2: dependencies: acorn: 8.14.1 @@ -7187,9 +10157,40 @@ snapshots: dependencies: react: 19.1.0 + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.2.0 + is-generator-function: 1.1.0 + is-typed-array: 1.1.15 + which-typed-array: 1.1.19 + + uuid@9.0.1: {} + vary@1.1.2: {} - vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1): + vite-node@3.1.3(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1): + dependencies: + cac: 6.7.14 + debug: 4.4.0 + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + transitivePeerDependencies: + - "@types/node" + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1): dependencies: esbuild: 0.25.4 fdir: 6.4.4(picomatch@4.0.2) @@ -7202,17 +10203,123 @@ snapshots: fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.29.2 + terser: 5.39.0 tsx: 4.19.4 yaml: 2.7.1 + vitest@3.1.3(@types/node@22.15.15)(@vitest/browser@3.1.3)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1): + dependencies: + "@vitest/expect": 3.1.3 + "@vitest/mocker": 3.1.3(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1)) + "@vitest/pretty-format": 3.1.3 + "@vitest/runner": 3.1.3 + "@vitest/snapshot": 3.1.3 + "@vitest/spy": 3.1.3 + "@vitest/utils": 3.1.3 + chai: 5.2.0 + debug: 4.4.0 + expect-type: 1.2.1 + magic-string: 0.30.17 + pathe: 2.0.3 + std-env: 3.9.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.13 + tinypool: 1.0.2 + tinyrainbow: 2.0.0 + vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + vite-node: 3.1.3(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1) + why-is-node-running: 2.3.0 + optionalDependencies: + "@types/node": 22.15.15 + "@vitest/browser": 3.1.3(playwright@1.52.0)(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(tsx@4.19.4)(yaml@2.7.1))(vitest@3.1.3) + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + watchpack@2.4.2: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + + webpack-sources@3.2.3: {} + webpack-virtual-modules@0.6.2: {} + webpack@5.99.8(esbuild@0.25.4): + dependencies: + "@types/eslint-scope": 3.7.7 + "@types/estree": 1.0.7 + "@types/json-schema": 7.0.15 + "@webassemblyjs/ast": 1.14.1 + "@webassemblyjs/wasm-edit": 1.14.1 + "@webassemblyjs/wasm-parser": 1.14.1 + acorn: 8.14.1 + browserslist: 4.24.5 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.18.1 + es-module-lexer: 1.7.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 4.3.2 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.14(esbuild@0.25.4)(webpack@5.99.8(esbuild@0.25.4)) + watchpack: 2.4.2 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - "@swc/core" + - esbuild + - uglify-js + + which-typed-array@1.1.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + which@2.0.2: dependencies: isexe: 2.0.0 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + word-wrap@1.2.5: {} + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + wrap-ansi@9.0.0: dependencies: ansi-styles: 6.2.1 @@ -7221,6 +10328,8 @@ snapshots: wrappy@1.0.2: {} + ws@8.18.2: {} + yallist@3.1.1: {} yaml@2.7.1: {} diff --git a/apps/web/src/components/button/button.tsx b/apps/web/src/components/button/button.tsx deleted file mode 100644 index 81f2ace8..00000000 --- a/apps/web/src/components/button/button.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { forwardRef } from "react"; -// RAC = React Aria Components -import { Button as RAC_Button } from "react-aria-components"; - -type ButtonProps = Parameters[0]; - -const Button = forwardRef((props, ref) => { - return ; -}); - -export { Button }; diff --git a/apps/web/src/components/button/index.ts b/apps/web/src/components/button/index.ts deleted file mode 100644 index 45f35703..00000000 --- a/apps/web/src/components/button/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./button.tsx"; diff --git a/apps/web/src/components/ui/Button/Button.stories.tsx b/apps/web/src/components/ui/Button/Button.stories.tsx new file mode 100644 index 00000000..7d3c9ebb --- /dev/null +++ b/apps/web/src/components/ui/Button/Button.stories.tsx @@ -0,0 +1,48 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { fn } from "@storybook/test"; +import { Button } from "./Button"; + +export const ActionsData = { + onClick: fn(), +}; + +const meta = { + component: Button, + title: "UI/Button", + tags: ["autodocs"], + args: { + ...ActionsData, + color: "primary", + children: "Button", + }, + argTypes: { + color: { + options: ["primary", "secondary", "danger"], + control: { type: "select" }, + }, + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Primary: Story = { + args: { + color: "primary", + children: "Primary Button", + }, +}; + +export const Secondary: Story = { + args: { + color: "secondary", + children: "Secondary Button", + }, +}; + +export const Danger: Story = { + args: { + color: "danger", + children: "Danger Button", + }, +}; diff --git a/apps/web/src/components/ui/Button/Button.tsx b/apps/web/src/components/ui/Button/Button.tsx new file mode 100644 index 00000000..6859f50a --- /dev/null +++ b/apps/web/src/components/ui/Button/Button.tsx @@ -0,0 +1,42 @@ +import { forwardRef } from "react"; +// RAC = React Aria Components +import { + Button as RAC_Button, + type ButtonProps as RAC_ButtonProps, +} from "react-aria-components"; +import { tv, type VariantProps } from "tailwind-variants"; + +// Define styles with tailwind-variants +const button = tv({ + base: "inline-flex cursor-pointer px-4 py-2 items-center justify-center rounded-md text-sm font-medium focus:outline-none focus:ring-2 focus:ring-offset-2", + variants: { + color: { + primary: "bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500", + secondary: "bg-gray-600 text-white hover:bg-gray-700 focus:ring-gray-500", + danger: "bg-red-600 text-white hover:bg-red-700 focus:ring-red-500", + }, + }, + defaultVariants: { + color: "primary", + }, +}); + +// Combine Tailwind variant types with RAC props +type ButtonVariants = VariantProps; + +interface ButtonProps + extends ButtonVariants, + Omit {} + +const Button = forwardRef( + ({ color, ...props }, ref) => { + // Combine the props to apply styles from tailwind-variants along with React Aria button props + const className = button({ color }); + + return ; + }, +); + +Button.displayName = "Button"; + +export { Button }; diff --git a/apps/web/src/components/ui/Button/Button.types.ts b/apps/web/src/components/ui/Button/Button.types.ts new file mode 100644 index 00000000..553f3293 --- /dev/null +++ b/apps/web/src/components/ui/Button/Button.types.ts @@ -0,0 +1 @@ +// This will be where button types and constants go diff --git a/apps/web/src/routes/index.tsx b/apps/web/src/routes/index.tsx index 9c237d1e..a54ea800 100644 --- a/apps/web/src/routes/index.tsx +++ b/apps/web/src/routes/index.tsx @@ -1,5 +1,5 @@ +import { Button } from "@/components/ui/Button/Button"; import { createFileRoute } from "@tanstack/react-router"; -import { Button } from "@/components/button"; export const Route = createFileRoute("/")({ component: Index, @@ -9,11 +9,8 @@ function Index() { return (

SwampHacks Portal

-
); diff --git a/apps/web/src/stories/Button.stories.ts b/apps/web/src/stories/Button.stories.ts new file mode 100644 index 00000000..b0e50f65 --- /dev/null +++ b/apps/web/src/stories/Button.stories.ts @@ -0,0 +1,60 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { fn } from "@storybook/test"; + +import { Button } from "./Button"; + +// More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export +const meta = { + title: "Example/Button", + component: Button, + parameters: { + // Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout + layout: "centered", + }, + // This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/writing-docs/autodocs + tags: ["autodocs"], + // More on argTypes: https://storybook.js.org/docs/api/argtypes + argTypes: { + backgroundColor: { control: "color" }, + }, + // Use `fn` to spy on the onClick arg, which will appear in the actions panel once invoked: https://storybook.js.org/docs/essentials/actions#action-args + args: { onClick: fn() }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +// More on writing stories with args: https://storybook.js.org/docs/writing-stories/args +export const Primary: Story = { + args: { + primary: true, + label: "Button", + }, +}; + +export const Secondary: Story = { + args: { + label: "Button", + }, +}; + +export const Large: Story = { + args: { + size: "large", + label: "Button", + }, +}; + +export const Small: Story = { + args: { + size: "small", + label: "Button", + }, +}; + +export const Test: Story = { + args: { + primary: false, + label: "Button", + }, +}; diff --git a/apps/web/src/stories/Button.tsx b/apps/web/src/stories/Button.tsx new file mode 100644 index 00000000..242d660e --- /dev/null +++ b/apps/web/src/stories/Button.tsx @@ -0,0 +1,41 @@ +import React from "react"; + +import "./button.css"; + +export interface ButtonProps { + /** Is this the principal call to action on the page? */ + primary?: boolean; + /** What background color to use */ + backgroundColor?: string; + /** How large should the button be? */ + size?: "small" | "medium" | "large"; + /** Button contents */ + label: string; + /** Optional click handler */ + onClick?: () => void; +} + +/** Primary UI component for user interaction */ +export const Button = ({ + primary = false, + size = "medium", + backgroundColor, + label, + ...props +}: ButtonProps) => { + const mode = primary + ? "storybook-button--primary" + : "storybook-button--secondary"; + return ( + + ); +}; diff --git a/apps/web/src/stories/Configure.mdx b/apps/web/src/stories/Configure.mdx new file mode 100644 index 00000000..9352e607 --- /dev/null +++ b/apps/web/src/stories/Configure.mdx @@ -0,0 +1,369 @@ +import { Meta } from "@storybook/blocks"; + +import Github from "./assets/github.svg"; +import Discord from "./assets/discord.svg"; +import Youtube from "./assets/youtube.svg"; +import Tutorials from "./assets/tutorials.svg"; +import Styling from "./assets/styling.png"; +import Context from "./assets/context.png"; +import Assets from "./assets/assets.png"; +import Docs from "./assets/docs.png"; +import Share from "./assets/share.png"; +import FigmaPlugin from "./assets/figma-plugin.png"; +import Testing from "./assets/testing.png"; +import Accessibility from "./assets/accessibility.png"; +import Theming from "./assets/theming.png"; +import AddonLibrary from "./assets/addon-library.png"; + +export const RightArrow = () => ( + + + +); + + + +
+
+ # Configure your project + + Because Storybook works separately from your app, you'll need to configure it for your specific stack and setup. Below, explore guides for configuring Storybook with popular frameworks and tools. If you get stuck, learn how you can ask for help from our community. + +
+
+
+ A wall of logos representing different styling technologies +

Add styling and CSS

+

Like with web applications, there are many ways to include CSS within Storybook. Learn more about setting up styling within Storybook.

+ Learn more +
+
+ An abstraction representing the composition of data for a component +

Provide context and mocking

+

Often when a story doesn't render, it's because your component is expecting a specific environment or context (like a theme provider) to be available.

+ Learn more +
+
+ A representation of typography and image assets +
+

Load assets and resources

+

To link static files (like fonts) to your projects and stories, use the + `staticDirs` configuration option to specify folders to load when + starting Storybook.

+ Learn more +
+
+
+
+
+
+ # Do more with Storybook + + Now that you know the basics, let's explore other parts of Storybook that will improve your experience. This list is just to get you started. You can customise Storybook in many ways to fit your needs. + +
+ +
+
+
+ A screenshot showing the autodocs tag being set, pointing a docs page being generated +

Autodocs

+

Auto-generate living, + interactive reference documentation from your components and stories.

+ Learn more +
+
+ A browser window showing a Storybook being published to a chromatic.com URL +

Publish to Chromatic

+

Publish your Storybook to review and collaborate with your entire team.

+ Learn more +
+
+ Windows showing the Storybook plugin in Figma +

Figma Plugin

+

Embed your stories into Figma to cross-reference the design and live + implementation in one place.

+ Learn more +
+
+ Screenshot of tests passing and failing +

Testing

+

Use stories to test a component in all its variations, no matter how + complex.

+ Learn more +
+
+ Screenshot of accessibility tests passing and failing +

Accessibility

+

Automatically test your components for a11y issues as you develop.

+ Learn more +
+
+ Screenshot of Storybook in light and dark mode +

Theming

+

Theme Storybook's UI to personalize it to your project.

+ Learn more +
+
+
+
+
+
+

Addons

+

Integrate your tools with Storybook to connect workflows.

+ Discover all addons +
+
+ Integrate your tools with Storybook to connect workflows. +
+
+ +
+
+ Github logo + Join our contributors building the future of UI development. + + Star on GitHub +
+
+ Discord logo +
+ Get support and chat with frontend developers. + + Join Discord server +
+
+
+ Youtube logo +
+ Watch tutorials, feature previews and interviews. + + Watch on YouTube +
+
+
+ A book +

Follow guided walkthroughs on for key workflows.

+ + Discover tutorials +
+ +
+ + diff --git a/apps/web/src/stories/Header.stories.ts b/apps/web/src/stories/Header.stories.ts new file mode 100644 index 00000000..eb3e2775 --- /dev/null +++ b/apps/web/src/stories/Header.stories.ts @@ -0,0 +1,33 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { fn } from "@storybook/test"; + +import { Header } from "./Header"; + +const meta = { + title: "Example/Header", + component: Header, + // This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/writing-docs/autodocs + tags: ["autodocs"], + parameters: { + // More on how to position stories at: https://storybook.js.org/docs/configure/story-layout + layout: "fullscreen", + }, + args: { + onLogin: fn(), + onLogout: fn(), + onCreateAccount: fn(), + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const LoggedIn: Story = { + args: { + user: { + name: "Jane Doe", + }, + }, +}; + +export const LoggedOut: Story = {}; diff --git a/apps/web/src/stories/Header.tsx b/apps/web/src/stories/Header.tsx new file mode 100644 index 00000000..9b143daf --- /dev/null +++ b/apps/web/src/stories/Header.tsx @@ -0,0 +1,71 @@ +import React from "react"; + +import { Button } from "./Button"; +import "./header.css"; + +type User = { + name: string; +}; + +export interface HeaderProps { + user?: User; + onLogin?: () => void; + onLogout?: () => void; + onCreateAccount?: () => void; +} + +export const Header = ({ + user, + onLogin, + onLogout, + onCreateAccount, +}: HeaderProps) => ( +
+
+
+ + + + + + + +

Acme

+
+
+ {user ? ( + <> + + Welcome, {user.name}! + +
+
+
+); diff --git a/apps/web/src/stories/Page.stories.ts b/apps/web/src/stories/Page.stories.ts new file mode 100644 index 00000000..adcad1f6 --- /dev/null +++ b/apps/web/src/stories/Page.stories.ts @@ -0,0 +1,32 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { expect, userEvent, within } from "@storybook/test"; + +import { Page } from "./Page"; + +const meta = { + title: "Example/Page", + component: Page, + parameters: { + // More on how to position stories at: https://storybook.js.org/docs/configure/story-layout + layout: "fullscreen", + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const LoggedOut: Story = {}; + +// More on component testing: https://storybook.js.org/docs/writing-tests/component-testing +export const LoggedIn: Story = { + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + const loginButton = canvas.getByRole("button", { name: /Log in/i }); + await expect(loginButton).toBeInTheDocument(); + await userEvent.click(loginButton); + await expect(loginButton).not.toBeInTheDocument(); + + const logoutButton = canvas.getByRole("button", { name: /Log out/i }); + await expect(logoutButton).toBeInTheDocument(); + }, +}; diff --git a/apps/web/src/stories/Page.tsx b/apps/web/src/stories/Page.tsx new file mode 100644 index 00000000..3a9df545 --- /dev/null +++ b/apps/web/src/stories/Page.tsx @@ -0,0 +1,91 @@ +import React from "react"; + +import { Header } from "./Header"; +import "./page.css"; + +type User = { + name: string; +}; + +export const Page: React.FC = () => { + const [user, setUser] = React.useState(); + + return ( +
+
setUser({ name: "Jane Doe" })} + onLogout={() => setUser(undefined)} + onCreateAccount={() => setUser({ name: "Jane Doe" })} + /> + +
+

Pages in Storybook

+

+ We recommend building UIs with a{" "} + + component-driven + {" "} + process starting with atomic components and ending with pages. +

+

+ Render pages with mock data. This makes it easy to build and review + page states without needing to navigate to them in your app. Here are + some handy patterns for managing page data in Storybook: +

+
    +
  • + Use a higher-level connected component. Storybook helps you compose + such data from the "args" of child component stories +
  • +
  • + Assemble data in the page component from your services. You can mock + these services out using Storybook. +
  • +
+

+ Get a guided tutorial on component-driven development at{" "} + + Storybook tutorials + + . Read more in the{" "} + + docs + + . +

+
+ Tip Adjust the width of the canvas with + the{" "} + + + + + + Viewports addon in the toolbar +
+
+
+ ); +}; diff --git a/apps/web/src/stories/assets/accessibility.png b/apps/web/src/stories/assets/accessibility.png new file mode 100644 index 00000000..6ffe6fea Binary files /dev/null and b/apps/web/src/stories/assets/accessibility.png differ diff --git a/apps/web/src/stories/assets/accessibility.svg b/apps/web/src/stories/assets/accessibility.svg new file mode 100644 index 00000000..107e93f8 --- /dev/null +++ b/apps/web/src/stories/assets/accessibility.svg @@ -0,0 +1 @@ +Accessibility \ No newline at end of file diff --git a/apps/web/src/stories/assets/addon-library.png b/apps/web/src/stories/assets/addon-library.png new file mode 100644 index 00000000..95deb38a Binary files /dev/null and b/apps/web/src/stories/assets/addon-library.png differ diff --git a/apps/web/src/stories/assets/assets.png b/apps/web/src/stories/assets/assets.png new file mode 100644 index 00000000..cfba6817 Binary files /dev/null and b/apps/web/src/stories/assets/assets.png differ diff --git a/apps/web/src/stories/assets/avif-test-image.avif b/apps/web/src/stories/assets/avif-test-image.avif new file mode 100644 index 00000000..530709bc Binary files /dev/null and b/apps/web/src/stories/assets/avif-test-image.avif differ diff --git a/apps/web/src/stories/assets/context.png b/apps/web/src/stories/assets/context.png new file mode 100644 index 00000000..e5cd249a Binary files /dev/null and b/apps/web/src/stories/assets/context.png differ diff --git a/apps/web/src/stories/assets/discord.svg b/apps/web/src/stories/assets/discord.svg new file mode 100644 index 00000000..d638958b --- /dev/null +++ b/apps/web/src/stories/assets/discord.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/web/src/stories/assets/docs.png b/apps/web/src/stories/assets/docs.png new file mode 100644 index 00000000..a749629d Binary files /dev/null and b/apps/web/src/stories/assets/docs.png differ diff --git a/apps/web/src/stories/assets/figma-plugin.png b/apps/web/src/stories/assets/figma-plugin.png new file mode 100644 index 00000000..8f79b08c Binary files /dev/null and b/apps/web/src/stories/assets/figma-plugin.png differ diff --git a/apps/web/src/stories/assets/github.svg b/apps/web/src/stories/assets/github.svg new file mode 100644 index 00000000..dc513528 --- /dev/null +++ b/apps/web/src/stories/assets/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/web/src/stories/assets/share.png b/apps/web/src/stories/assets/share.png new file mode 100644 index 00000000..8097a370 Binary files /dev/null and b/apps/web/src/stories/assets/share.png differ diff --git a/apps/web/src/stories/assets/styling.png b/apps/web/src/stories/assets/styling.png new file mode 100644 index 00000000..d341e826 Binary files /dev/null and b/apps/web/src/stories/assets/styling.png differ diff --git a/apps/web/src/stories/assets/testing.png b/apps/web/src/stories/assets/testing.png new file mode 100644 index 00000000..d4ac39a0 Binary files /dev/null and b/apps/web/src/stories/assets/testing.png differ diff --git a/apps/web/src/stories/assets/theming.png b/apps/web/src/stories/assets/theming.png new file mode 100644 index 00000000..1535eb9b Binary files /dev/null and b/apps/web/src/stories/assets/theming.png differ diff --git a/apps/web/src/stories/assets/tutorials.svg b/apps/web/src/stories/assets/tutorials.svg new file mode 100644 index 00000000..b492a9c6 --- /dev/null +++ b/apps/web/src/stories/assets/tutorials.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/web/src/stories/assets/youtube.svg b/apps/web/src/stories/assets/youtube.svg new file mode 100644 index 00000000..a7515d7e --- /dev/null +++ b/apps/web/src/stories/assets/youtube.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/web/src/stories/button.css b/apps/web/src/stories/button.css new file mode 100644 index 00000000..7efe9553 --- /dev/null +++ b/apps/web/src/stories/button.css @@ -0,0 +1,30 @@ +.storybook-button { + display: inline-block; + cursor: pointer; + border: 0; + border-radius: 3em; + font-weight: 700; + line-height: 1; + font-family: "Nunito Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; +} +.storybook-button--primary { + background-color: #555ab9; + color: white; +} +.storybook-button--secondary { + box-shadow: rgba(0, 0, 0, 0.15) 0px 0px 0px 1px inset; + background-color: transparent; + color: #333; +} +.storybook-button--small { + padding: 10px 16px; + font-size: 12px; +} +.storybook-button--medium { + padding: 11px 20px; + font-size: 14px; +} +.storybook-button--large { + padding: 12px 24px; + font-size: 16px; +} diff --git a/apps/web/src/stories/header.css b/apps/web/src/stories/header.css new file mode 100644 index 00000000..ad774927 --- /dev/null +++ b/apps/web/src/stories/header.css @@ -0,0 +1,32 @@ +.storybook-header { + display: flex; + justify-content: space-between; + align-items: center; + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + padding: 15px 20px; + font-family: "Nunito Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +.storybook-header svg { + display: inline-block; + vertical-align: top; +} + +.storybook-header h1 { + display: inline-block; + vertical-align: top; + margin: 6px 0 6px 10px; + font-weight: 700; + font-size: 20px; + line-height: 1; +} + +.storybook-header button + button { + margin-left: 10px; +} + +.storybook-header .welcome { + margin-right: 10px; + color: #333; + font-size: 14px; +} diff --git a/apps/web/src/stories/page.css b/apps/web/src/stories/page.css new file mode 100644 index 00000000..2c9a9e07 --- /dev/null +++ b/apps/web/src/stories/page.css @@ -0,0 +1,68 @@ +.storybook-page { + margin: 0 auto; + padding: 48px 20px; + max-width: 600px; + color: #333; + font-size: 14px; + line-height: 24px; + font-family: "Nunito Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +.storybook-page h2 { + display: inline-block; + vertical-align: top; + margin: 0 0 4px; + font-weight: 700; + font-size: 32px; + line-height: 1; +} + +.storybook-page p { + margin: 1em 0; +} + +.storybook-page a { + color: inherit; +} + +.storybook-page ul { + margin: 1em 0; + padding-left: 30px; +} + +.storybook-page li { + margin-bottom: 8px; +} + +.storybook-page .tip { + display: inline-block; + vertical-align: top; + margin-right: 10px; + border-radius: 1em; + background: #e7fdd8; + padding: 4px 12px; + color: #357a14; + font-weight: 700; + font-size: 11px; + line-height: 12px; +} + +.storybook-page .tip-wrapper { + margin-top: 40px; + margin-bottom: 40px; + font-size: 13px; + line-height: 20px; +} + +.storybook-page .tip-wrapper svg { + display: inline-block; + vertical-align: top; + margin-top: 3px; + margin-right: 4px; + width: 12px; + height: 12px; +} + +.storybook-page .tip-wrapper svg path { + fill: #1ea7fd; +} diff --git a/apps/web/vitest.workspace.ts b/apps/web/vitest.workspace.ts new file mode 100644 index 00000000..c56bdfe5 --- /dev/null +++ b/apps/web/vitest.workspace.ts @@ -0,0 +1,34 @@ +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +import { defineWorkspace } from "vitest/config"; + +import { storybookTest } from "@storybook/experimental-addon-test/vitest-plugin"; + +const dirname = + typeof __dirname !== "undefined" + ? __dirname + : path.dirname(fileURLToPath(import.meta.url)); + +// More info at: https://storybook.js.org/docs/writing-tests/test-addon +export default defineWorkspace([ + "vite.config.ts", + { + extends: "vite.config.ts", + plugins: [ + // The plugin will run tests for the stories defined in your Storybook config + // See options at: https://storybook.js.org/docs/writing-tests/test-addon#storybooktest + storybookTest({ configDir: path.join(dirname, ".storybook") }), + ], + test: { + name: "storybook", + browser: { + enabled: true, + headless: true, + name: "chromium", + provider: "playwright", + }, + setupFiles: [".storybook/vitest.setup.ts"], + }, + }, +]);