From 50c6a2d77153fddba5ab7431010c2975309c8966 Mon Sep 17 00:00:00 2001 From: Alex Carpenter Date: Thu, 17 Jul 2025 15:58:25 -0400 Subject: [PATCH 1/6] fix --- packages/storybook/.storybook/main.ts | 23 + packages/storybook/.storybook/preview.tsx | 24 + packages/storybook/README.md | 53 ++ packages/storybook/package.json | 45 + packages/storybook/stories/SignIn.stories.tsx | 26 + packages/storybook/tsconfig.json | 25 + packages/storybook/tsconfig.node.json | 13 + pnpm-lock.yaml | 795 +++++++++++++++++- 8 files changed, 997 insertions(+), 7 deletions(-) create mode 100644 packages/storybook/.storybook/main.ts create mode 100644 packages/storybook/.storybook/preview.tsx create mode 100644 packages/storybook/README.md create mode 100644 packages/storybook/package.json create mode 100644 packages/storybook/stories/SignIn.stories.tsx create mode 100644 packages/storybook/tsconfig.json create mode 100644 packages/storybook/tsconfig.node.json diff --git a/packages/storybook/.storybook/main.ts b/packages/storybook/.storybook/main.ts new file mode 100644 index 00000000000..d3a6b2cc2da --- /dev/null +++ b/packages/storybook/.storybook/main.ts @@ -0,0 +1,23 @@ +import type { StorybookConfig } from '@storybook/react-vite'; + +const config: StorybookConfig = { + stories: ['../stories/**/*.stories.@(js|jsx|mjs|ts|tsx|mdx)'], + addons: ['@storybook/addon-essentials'], + framework: { + name: '@storybook/react-vite', + options: {}, + }, + docs: { + autodocs: 'tag', + }, + typescript: { + check: false, + reactDocgen: 'react-docgen-typescript', + reactDocgenTypescriptOptions: { + shouldExtractLiteralValuesFromEnum: true, + propFilter: (prop: any) => (prop.parent ? !/node_modules/.test(prop.parent.fileName) : true), + }, + }, +}; + +export default config; diff --git a/packages/storybook/.storybook/preview.tsx b/packages/storybook/.storybook/preview.tsx new file mode 100644 index 00000000000..1581eb1d7cb --- /dev/null +++ b/packages/storybook/.storybook/preview.tsx @@ -0,0 +1,24 @@ +import type { Preview } from '@storybook/react'; +import React from 'react'; +import { ClerkProvider } from '@clerk/clerk-react'; + +const preview: Preview = { + parameters: { + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/i, + }, + }, + layout: 'centered', + }, + decorators: [ + Story => ( + + + + ), + ], +}; + +export default preview; diff --git a/packages/storybook/README.md b/packages/storybook/README.md new file mode 100644 index 00000000000..1a5e73cf273 --- /dev/null +++ b/packages/storybook/README.md @@ -0,0 +1,53 @@ +# @clerk/storybook + +This package provides Storybook documentation for Clerk components using the React component library. + +## Why a Separate Package? + +This approach offers several advantages over integrating Storybook directly into the `clerk-js` package: + +1. **Clean Architecture**: Dedicated package for documentation with its own build setup +2. **React Components**: Uses `@clerk/clerk-react` components directly instead of wrapping vanilla JS +3. **Better TypeScript Support**: Proper typing and intellisense for React components +4. **Standard Patterns**: Follows conventional Storybook patterns for component documentation +5. **Easier Maintenance**: Isolated configuration and dependencies + +## Components Documented + +- **Authentication**: `SignIn`, `SignUp`, `SignInButton`, `SignUpButton` +- **User Management**: `UserButton`, `UserProfile` +- **Organization Management**: `OrganizationSwitcher`, `OrganizationProfile`, `CreateOrganization`, `OrganizationList` +- **Specialized**: `GoogleOneTap`, `Waitlist`, `PricingTable`, `APIKeys` +- **Control Components**: `SignedIn`, `SignedOut`, `Protect`, etc. + +## Getting Started + +```bash +# Install dependencies +pnpm install + +# Start Storybook +pnpm dev + +# Build Storybook +pnpm build +``` + +## Features + +- **Appearance Controls**: Interactive controls for theming and customization +- **Localization**: Support for multiple languages via toolbar +- **Auto-generated Documentation**: Using Storybook's autodocs feature +- **Interactive Examples**: Live component examples with controls +- **TypeScript Support**: Full TypeScript support with proper types + +## Development + +Stories are located in the `stories/` directory. Each component has its own story file with multiple variants demonstrating different use cases and configurations. + +The Storybook configuration includes: + +- Global appearance and localization controls +- Auto-generated documentation +- Interactive controls for component props +- Proper ClerkProvider context for all stories diff --git a/packages/storybook/package.json b/packages/storybook/package.json new file mode 100644 index 00000000000..c5d755e6877 --- /dev/null +++ b/packages/storybook/package.json @@ -0,0 +1,45 @@ +{ + "name": "@clerk/storybook", + "version": "0.0.0", + "private": true, + "description": "Storybook documentation for Clerk components", + "keywords": [ + "clerk", + "storybook", + "documentation" + ], + "license": "MIT", + "scripts": { + "build": "storybook build", + "build-storybook": "storybook build", + "dev": "storybook dev -p 6006", + "storybook": "storybook dev -p 6006" + }, + "dependencies": { + "@clerk/clerk-react": "workspace:*", + "@clerk/localizations": "workspace:*", + "@clerk/shared": "workspace:*", + "@clerk/types": "workspace:*", + "react": "18.2.0", + "react-dom": "18.2.0" + }, + "devDependencies": { + "@storybook/addon-essentials": "^8.6.14", + "@storybook/addon-interactions": "^8.6.14", + "@storybook/addon-links": "^8.6.14", + "@storybook/addon-onboarding": "^8.6.14", + "@storybook/blocks": "^8.6.14", + "@storybook/react": "^8.6.14", + "@storybook/react-vite": "^8.6.14", + "@storybook/test": "^8.6.14", + "@types/react": "18.2.37", + "@types/react-dom": "18.2.15", + "storybook": "^8.6.14", + "typescript": "5.2.2", + "vite": "^6.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } +} diff --git a/packages/storybook/stories/SignIn.stories.tsx b/packages/storybook/stories/SignIn.stories.tsx new file mode 100644 index 00000000000..68bf77deda6 --- /dev/null +++ b/packages/storybook/stories/SignIn.stories.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import type { Meta, StoryObj } from '@storybook/react'; +import { SignIn } from '@clerk/clerk-react'; + +// Define the story metadata +const meta: Meta = { + title: 'Components/SignIn', + component: SignIn, + parameters: { + docs: { + description: { + component: 'The SignIn component renders a UI for users to sign in to your application.', + }, + }, + }, + tags: ['autodocs'], +}; + +export default meta; + +type Story = StoryObj; + +// Default story +export const Default: Story = { + args: {}, +}; diff --git a/packages/storybook/tsconfig.json b/packages/storybook/tsconfig.json new file mode 100644 index 00000000000..d7e1576a9b8 --- /dev/null +++ b/packages/storybook/tsconfig.json @@ -0,0 +1,25 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "types": ["vite/client"] + }, + "include": ["src/**/*", "stories/**/*", ".storybook/**/*"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/packages/storybook/tsconfig.node.json b/packages/storybook/tsconfig.node.json new file mode 100644 index 00000000000..383d1351a8b --- /dev/null +++ b/packages/storybook/tsconfig.node.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true, + "strict": true, + "noEmit": true, + "types": ["node"] + }, + "include": [".storybook/**/*", "vite.config.ts"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2382b2aab06..795c6bc817b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -957,6 +957,67 @@ importers: specifier: 0.25.0 version: 0.25.0 + packages/storybook: + dependencies: + '@clerk/clerk-react': + specifier: workspace:* + version: link:../react + '@clerk/localizations': + specifier: workspace:* + version: link:../localizations + '@clerk/shared': + specifier: workspace:* + version: link:../shared + '@clerk/types': + specifier: workspace:* + version: link:../types + react: + specifier: 18.2.0 + version: 18.2.0 + react-dom: + specifier: 18.2.0 + version: 18.2.0(react@18.2.0) + devDependencies: + '@storybook/addon-essentials': + specifier: ^8.6.14 + version: 8.6.14(@types/react@18.2.37)(storybook@8.6.14(prettier@3.5.3)) + '@storybook/addon-interactions': + specifier: ^8.6.14 + version: 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/addon-links': + specifier: ^8.6.14 + version: 8.6.14(react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) + '@storybook/addon-onboarding': + specifier: ^8.6.14 + version: 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/blocks': + specifier: ^8.6.14 + version: 8.6.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) + '@storybook/react': + specifier: ^8.6.14 + version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.2.2) + '@storybook/react-vite': + specifier: ^8.6.14 + version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.45.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.2.2)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0)) + '@storybook/test': + specifier: ^8.6.14 + version: 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@types/react': + specifier: 18.2.37 + version: 18.2.37 + '@types/react-dom': + specifier: 18.2.15 + version: 18.2.15 + storybook: + specifier: ^8.6.14 + version: 8.6.14(prettier@3.5.3) + typescript: + specifier: 5.2.2 + version: 5.2.2 + vite: + specifier: ^6.0.0 + version: 6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0) + packages/tanstack-react-start: dependencies: '@clerk/backend': @@ -3310,6 +3371,15 @@ packages: resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@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.12': resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} @@ -3374,6 +3444,12 @@ packages: engines: {node: '>=18'} hasBin: true + '@mdx-js/react@3.1.0': + resolution: {integrity: sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==} + peerDependencies: + '@types/react': '>=16' + react: '>=16' + '@miniflare/cache@2.14.4': resolution: {integrity: sha512-ayzdjhcj+4mjydbNK7ZGDpIXNliDbQY4GPcY2KrYw0v1OSUdj5kZUkygD09fqoGRfAks0d91VelkyRsAXX8FQA==} engines: {node: '>=16.13'} @@ -4538,6 +4614,181 @@ packages: peerDependencies: xstate: ^5.5.1 + '@storybook/addon-actions@8.6.14': + resolution: {integrity: sha512-mDQxylxGGCQSK7tJPkD144J8jWh9IU9ziJMHfB84PKpI/V5ZgqMDnpr2bssTrUaGDqU5e1/z8KcRF+Melhs9pQ==} + peerDependencies: + storybook: ^8.6.14 + + '@storybook/addon-backgrounds@8.6.14': + resolution: {integrity: sha512-l9xS8qWe5n4tvMwth09QxH2PmJbCctEvBAc1tjjRasAfrd69f7/uFK4WhwJAstzBTNgTc8VXI4w8ZR97i1sFbg==} + peerDependencies: + storybook: ^8.6.14 + + '@storybook/addon-controls@8.6.14': + resolution: {integrity: sha512-IiQpkNJdiRyA4Mq9mzjZlvQugL/aE7hNgVxBBGPiIZG6wb6Ht9hNnBYpap5ZXXFKV9p2qVI0FZK445ONmAa+Cw==} + peerDependencies: + storybook: ^8.6.14 + + '@storybook/addon-docs@8.6.14': + resolution: {integrity: sha512-Obpd0OhAF99JyU5pp5ci17YmpcQtMNgqW2pTXV8jAiiipWpwO++hNDeQmLmlSXB399XjtRDOcDVkoc7rc6JzdQ==} + peerDependencies: + storybook: ^8.6.14 + + '@storybook/addon-essentials@8.6.14': + resolution: {integrity: sha512-5ZZSHNaW9mXMOFkoPyc3QkoNGdJHETZydI62/OASR0lmPlJ1065TNigEo5dJddmZNn0/3bkE8eKMAzLnO5eIdA==} + peerDependencies: + storybook: ^8.6.14 + + '@storybook/addon-highlight@8.6.14': + resolution: {integrity: sha512-4H19OJlapkofiE9tM6K/vsepf4ir9jMm9T+zw5L85blJZxhKZIbJ6FO0TCG9PDc4iPt3L6+aq5B0X29s9zicNQ==} + peerDependencies: + storybook: ^8.6.14 + + '@storybook/addon-interactions@8.6.14': + resolution: {integrity: sha512-8VmElhm2XOjh22l/dO4UmXxNOolGhNiSpBcls2pqWSraVh4a670EyYBZsHpkXqfNHo2YgKyZN3C91+9zfH79qQ==} + peerDependencies: + storybook: ^8.6.14 + + '@storybook/addon-links@8.6.14': + resolution: {integrity: sha512-DRlXHIyZzOruAZkxmXfVgTF+4d6K27pFcH4cUsm3KT1AXuZbr23lb5iZHpUZoG6lmU85Sru4xCEgewSTXBIe1w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + storybook: ^8.6.14 + peerDependenciesMeta: + react: + optional: true + + '@storybook/addon-measure@8.6.14': + resolution: {integrity: sha512-1Tlyb72NX8aAqm6I6OICsUuGOP6hgnXcuFlXucyhKomPa6j3Eu2vKu561t/f0oGtAK2nO93Z70kVaEh5X+vaGw==} + peerDependencies: + storybook: ^8.6.14 + + '@storybook/addon-onboarding@8.6.14': + resolution: {integrity: sha512-bHdHiGJFigVcSzMIsNLHY5IODZHr+nKwyz5/QOZLMkLcGH2IaUbOJfm4RyGOaTTPsUtAKbdsVXNEG3Otf+qO9A==} + peerDependencies: + storybook: ^8.6.14 + + '@storybook/addon-outline@8.6.14': + resolution: {integrity: sha512-CW857JvN6OxGWElqjlzJO2S69DHf+xO3WsEfT5mT3ZtIjmsvRDukdWfDU9bIYUFyA2lFvYjncBGjbK+I91XR7w==} + peerDependencies: + storybook: ^8.6.14 + + '@storybook/addon-toolbars@8.6.14': + resolution: {integrity: sha512-W/wEXT8h3VyZTVfWK/84BAcjAxTdtRiAkT2KAN0nbSHxxB5KEM1MjKpKu2upyzzMa3EywITqbfy4dP6lpkVTwQ==} + peerDependencies: + storybook: ^8.6.14 + + '@storybook/addon-viewport@8.6.14': + resolution: {integrity: sha512-gNzVQbMqRC+/4uQTPI2ZrWuRHGquTMZpdgB9DrD88VTEjNudP+J6r8myLfr2VvGksBbUMHkGHMXHuIhrBEnXYA==} + peerDependencies: + storybook: ^8.6.14 + + '@storybook/blocks@8.6.14': + resolution: {integrity: sha512-rBMHAfA39AGHgkrDze4RmsnQTMw1ND5fGWobr9pDcJdnDKWQWNRD7Nrlxj0gFlN3n4D9lEZhWGdFrCbku7FVAQ==} + 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.14 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@storybook/builder-vite@8.6.14': + resolution: {integrity: sha512-ajWYhy32ksBWxwWHrjwZzyC0Ii5ZTeu5lsqA95Q/EQBB0P5qWlHWGM3AVyv82Mz/ND03ebGy123uVwgf6olnYQ==} + peerDependencies: + storybook: ^8.6.14 + vite: ^4.0.0 || ^5.0.0 || ^6.0.0 + + '@storybook/components@8.6.14': + resolution: {integrity: sha512-HNR2mC5I4Z5ek8kTrVZlIY/B8gJGs5b3XdZPBPBopTIN6U/YHXiDyOjY3JlaS4fSG1fVhp/Qp1TpMn1w/9m1pw==} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + + '@storybook/core@8.6.14': + resolution: {integrity: sha512-1P/w4FSNRqP8j3JQBOi3yGt8PVOgSRbP66Ok520T78eJBeqx9ukCfl912PQZ7SPbW3TIunBwLXMZOjZwBB/JmA==} + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + + '@storybook/csf-plugin@8.6.14': + resolution: {integrity: sha512-dErtc9teAuN+eelN8FojzFE635xlq9cNGGGEu0WEmMUQ4iJ8pingvBO1N8X3scz4Ry7KnxX++NNf3J3gpxS8qQ==} + peerDependencies: + storybook: ^8.6.14 + + '@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.14': + resolution: {integrity: sha512-iG4MlWCcz1L7Yu8AwgsnfVAmMbvyRSk700Mfy2g4c8y5O+Cv1ejshE1LBBsCwHgkuqU0H4R0qu4g23+6UnUemQ==} + peerDependencies: + storybook: ^8.6.14 + + '@storybook/manager-api@8.6.14': + resolution: {integrity: sha512-ez0Zihuy17udLbfHZQXkGqwtep0mSGgHcNzGN7iZrMP1m+VmNo+7aGCJJdvXi7+iU3yq8weXSQFWg5DqWgLS7g==} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + + '@storybook/preview-api@8.6.14': + resolution: {integrity: sha512-2GhcCd4dNMrnD7eooEfvbfL4I83qAqEyO0CO7JQAmIO6Rxb9BsOLLI/GD5HkvQB73ArTJ+PT50rfaO820IExOQ==} + peerDependencies: + 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.14': + resolution: {integrity: sha512-0hixr3dOy3f3M+HBofp3jtMQMS+sqzjKNgl7Arfuj3fvjmyXOks/yGjDImySR4imPtEllvPZfhiQNlejheaInw==} + 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.14 + + '@storybook/react-vite@8.6.14': + resolution: {integrity: sha512-FZU0xMPxa4/TO87FgcWwappOxLBHZV5HSRK5K+2bJD7rFJAoNorbHvB4Q1zvIAk7eCMjkr2GPCPHx9PRB9vJFg==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@storybook/test': 8.6.14 + 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.14 + vite: ^4.0.0 || ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + '@storybook/test': + optional: true + + '@storybook/react@8.6.14': + resolution: {integrity: sha512-BOepx5bBFwl/CPI+F+LnmMmsG1wQYmrX/UQXgUbHQUU9Tj7E2ndTnNbpIuSLc8IrM03ru+DfwSg1Co3cxWtT+g==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@storybook/test': 8.6.14 + 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.14 + typescript: '>= 4.2.x' + peerDependenciesMeta: + '@storybook/test': + optional: true + typescript: + optional: true + + '@storybook/test@8.6.14': + resolution: {integrity: sha512-GkPNBbbZmz+XRdrhMtkxPotCLOQ1BaGNp/gFZYdGDk2KmUWBKmvc5JxxOhtoXM2703IzNFlQHSSNnhrDZYuLlw==} + peerDependencies: + storybook: ^8.6.14 + + '@storybook/theming@8.6.14': + resolution: {integrity: sha512-r4y+LsiB37V5hzpQo+BM10PaCsp7YlZ0YcZzQP1OCkPlYXmUAFy2VvDKaFRpD8IeNPKug2u4iFm/laDEbs03dg==} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@stripe/react-stripe-js@3.1.1': resolution: {integrity: sha512-+JzYFgUivVD7koqYV7LmLlt9edDMAwKH7XhZAHFQMo7NeRC+6D2JmQGzp9tygWerzwttwFLlExGp4rAOvD6l9g==} peerDependencies: @@ -4841,6 +5092,10 @@ packages: resolution: {integrity: sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==} engines: {node: '>=18'} + '@testing-library/dom@10.4.0': + resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} + engines: {node: '>=18'} + '@testing-library/dom@9.3.4': resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} engines: {node: '>=14'} @@ -4866,6 +5121,10 @@ packages: vitest: optional: true + '@testing-library/jest-dom@6.5.0': + resolution: {integrity: sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + '@testing-library/react@16.0.0': resolution: {integrity: sha512-guuxUKRWQ+FgNX0h0NS0FIq3Q3uLtWVpBzcLOggmfMoUpgBnzBzvLLd4fbm6yS8ydJd94cIfY4yP9qUQjM2KwQ==} engines: {node: '>=18'} @@ -4983,6 +5242,9 @@ packages: '@types/diff-match-patch@1.0.36': resolution: {integrity: sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==} + '@types/doctrine@0.0.9': + resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==} + '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} @@ -5061,6 +5323,9 @@ packages: '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + '@types/mdx@2.0.13': + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + '@types/methods@1.1.4': resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==} @@ -5106,11 +5371,17 @@ packages: '@types/range-parser@1.2.4': resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} + '@types/react-dom@18.2.15': + resolution: {integrity: sha512-HWMdW+7r7MR5+PZqJF6YFNSCtjz1T0dsvo/f1BV6HkV+6erD/nA7wd9NM00KVG83zf2nJ7uATPO9ttdIPvi3gg==} + '@types/react-dom@18.3.7': resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==} peerDependencies: '@types/react': ^18.0.0 + '@types/react@18.2.37': + resolution: {integrity: sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw==} + '@types/react@18.3.23': resolution: {integrity: sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==} @@ -5123,6 +5394,9 @@ packages: '@types/retry@0.12.2': resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} + '@types/scheduler@0.26.0': + resolution: {integrity: sha512-WFHp9YUJQ6CKshqoC37iOlHnQSmxNc795UhB26CyBBttrN9svdIrUjl/NjnNmfcwtncN0h/0PPAFWv9ovP8mLA==} + '@types/semver@7.7.0': resolution: {integrity: sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==} @@ -5174,6 +5448,9 @@ packages: '@types/uuid@10.0.0': resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} + '@types/uuid@9.0.8': + resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} + '@types/webextension-polyfill@0.10.7': resolution: {integrity: sha512-10ql7A0qzBmFB+F+qAke/nP1PIonS0TXZAOMVOxEUsm+lGSW6uwVcISFNa0I4Oyj0884TZVWGGMIWeXOVSNFHw==} @@ -5466,6 +5743,9 @@ packages: '@vitest/browser': optional: true + '@vitest/expect@2.0.5': + resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} + '@vitest/expect@3.0.5': resolution: {integrity: sha512-nNIOqupgZ4v5jWuQx2DSlHLEs7Q4Oh/7AYwNyE+k0UQzG7tSmjPXShUikn1mpNGzYEN2jJbTvLejwShMitovBA==} @@ -5480,6 +5760,12 @@ packages: 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.0.5': resolution: {integrity: sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA==} @@ -5489,9 +5775,18 @@ packages: '@vitest/snapshot@3.0.5': resolution: {integrity: sha512-GJPZYcd7v8QNUJ7vRvLDmRwl+a1fGg4T/54lZXe+UOGy47F9yUfE18hRCtXL5aHN/AONu29NGzIXSVFh9K0feA==} + '@vitest/spy@2.0.5': + resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} + '@vitest/spy@3.0.5': resolution: {integrity: sha512-5fOzHj0WbUNqPK6blI/8VzZdkBlQLnT25knX0r4dbZI9qoZDf3qAdjoMmDcLG5A83W6oUUFJgUd0EYBc2P5xqg==} + '@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.0.5': resolution: {integrity: sha512-N9AX0NUoUtVwKwy21JtwzaqR5L5R5A99GAbrHfCCXK1lp593i/3AZAXhSP43wRQuxYsflrdzEfXZFo1reR1Nkg==} @@ -6312,6 +6607,9 @@ packages: brotli@1.3.3: resolution: {integrity: sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==} + browser-assert@1.2.1: + resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} + browser-tabs-lock@1.3.0: resolution: {integrity: sha512-g6nHaobTiT0eMZ7jh16YpD2kcjAp+PInbiVq3M1x6KKaEIVhT4v9oURNIpZLOZ3LQbQ3XYfNhMAb/9hzNLIWrw==} @@ -6475,6 +6773,10 @@ packages: resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} engines: {node: '>=12'} + chai@5.2.1: + resolution: {integrity: sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==} + engines: {node: '>=18'} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -7530,6 +7832,10 @@ packages: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} @@ -7782,6 +8088,11 @@ packages: resolution: {integrity: sha512-lNjylaAsJMprYg28zjUyBivP3y0ms9b7RJZ5tdhDUFLa3sCbqZw4wDnbFUSmnyZYWhCYDPxxp7KkXM2TXGw3PQ==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} + esbuild-register@3.6.0: + resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} + peerDependencies: + esbuild: '>=0.12 <1' + esbuild@0.23.1: resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} engines: {node: '>=18'} @@ -10298,8 +10609,8 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@3.1.2: - resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} + loupe@3.1.4: + resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==} lowdb@1.0.0: resolution: {integrity: sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ==} @@ -10338,6 +10649,10 @@ packages: resolution: {integrity: sha512-8rbuNizut2gW94kv7pqgt0dvk+AHLPVIm0iJtpSgQJ9dx21eWx5SBel8z3jp1xtC0j6/iyK3AWGhAR1H61s7LA==} engines: {node: '>=20.18.0'} + 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==} @@ -10370,6 +10685,9 @@ packages: resolution: {integrity: sha512-K6K2NgKnTXimT3779/4KxSvobxOtMmx1LBZ3NwRxT/MDIR3Br/fQ4Q+WCX5QxjyUR8zg5+RV9Tbf2c5pAWTD2A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + map-or-similar@1.5.0: + resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} + markdown-it@14.1.0: resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} hasBin: true @@ -10484,6 +10802,9 @@ packages: memoize-one@5.2.1: resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} + memoizerific@1.11.3: + resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} + memorystream@0.3.1: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} @@ -11694,6 +12015,10 @@ packages: resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==} engines: {node: '>=4.0.0'} + polished@4.3.1: + resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} + engines: {node: '>=10'} + portfinder@1.0.32: resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} engines: {node: '>= 0.12.0'} @@ -12206,6 +12531,20 @@ packages: react-devtools-core@6.1.2: resolution: {integrity: sha512-ldFwzufLletzCikNJVYaxlxMLu7swJ3T2VrGfzXlMsVhZhPDKXA38DEROidaYZVgMAmQnIjymrmqto5pyfrwPA==} + react-docgen-typescript@2.4.0: + resolution: {integrity: sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==} + peerDependencies: + typescript: '>= 4.3.x' + + react-docgen@7.1.1: + resolution: {integrity: sha512-hlSJDQ2synMPKFZOsKo9Hi8WWZTC7POR8EmWvTSjow+VDgKzkmjQvFm2fk0tmRw+f0vTOIYKlarR0iL4996pdg==} + engines: {node: '>=16.14.0'} + + react-dom@18.2.0: + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + react-dom@18.3.1: resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} peerDependencies: @@ -12273,6 +12612,10 @@ packages: react-dom: optional: true + react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} @@ -13085,6 +13428,15 @@ packages: resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} engines: {node: '>= 0.4'} + storybook@8.6.14: + resolution: {integrity: sha512-sVKbCj/OTx67jhmauhxc2dcr1P+yOgz/x3h0krwjyMgdc5Oubvxyg4NYDZmzAw+ym36g/lzH8N0Ccp4dwtdfxw==} + hasBin: true + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + stream-buffers@2.2.0: resolution: {integrity: sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==} engines: {node: '>= 0.10.0'} @@ -13280,7 +13632,7 @@ packages: superagent@8.1.2: resolution: {integrity: sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==} engines: {node: '>=6.4.0 <13 || >=14'} - deprecated: Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net + deprecated: Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net superjson@1.13.3: resolution: {integrity: sha512-mJiVjfd2vokfDxsQPOwJ/PtanO87LhpYY88ubI5dUB1Ab58Txbyje3+jpm+/83R/fevaq/107NNhtYBLuoTrFg==} @@ -13518,6 +13870,10 @@ packages: resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} engines: {node: ^18.0.0 || >=20.0.0} + tinyrainbow@1.2.0: + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + engines: {node: '>=14.0.0'} + tinyrainbow@2.0.0: resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} @@ -13625,6 +13981,10 @@ packages: peerDependencies: typescript: '>=4.8.4' + ts-dedent@2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} @@ -13679,6 +14039,10 @@ packages: tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -13857,6 +14221,11 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' + typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + engines: {node: '>=14.17'} + hasBin: true + typescript@5.6.1-rc: resolution: {integrity: sha512-E3b2+1zEFu84jB0YQi9BORDjz9+jGbwwy1Zi3G0LUNw7a7cePUrHMRNy8aPh53nXpkFGVHSxIZo5vKTfYaFiBQ==} engines: {node: '>=14.17'} @@ -14190,6 +14559,9 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} @@ -17629,6 +18001,15 @@ snapshots: '@types/yargs': 17.0.33 chalk: 4.1.2 + '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.2.2)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0))': + dependencies: + glob: 10.4.5 + magic-string: 0.27.0 + react-docgen-typescript: 2.4.0(typescript@5.2.2) + vite: 6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0) + optionalDependencies: + typescript: 5.2.2 + '@jridgewell/gen-mapping@0.3.12': dependencies: '@jridgewell/sourcemap-codec': 1.5.4 @@ -17730,6 +18111,12 @@ snapshots: - encoding - supports-color + '@mdx-js/react@3.1.0(@types/react@18.2.37)(react@18.2.0)': + dependencies: + '@types/mdx': 2.0.13 + '@types/react': 18.2.37 + react: 18.2.0 + '@miniflare/cache@2.14.4': dependencies: '@miniflare/core': 2.14.4 @@ -19301,6 +19688,231 @@ snapshots: transitivePeerDependencies: - ws + '@storybook/addon-actions@8.6.14(storybook@8.6.14(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.14(prettier@3.5.3) + uuid: 9.0.1 + + '@storybook/addon-backgrounds@8.6.14(storybook@8.6.14(prettier@3.5.3))': + dependencies: + '@storybook/global': 5.0.0 + memoizerific: 1.11.3 + storybook: 8.6.14(prettier@3.5.3) + ts-dedent: 2.2.0 + + '@storybook/addon-controls@8.6.14(storybook@8.6.14(prettier@3.5.3))': + dependencies: + '@storybook/global': 5.0.0 + dequal: 2.0.3 + storybook: 8.6.14(prettier@3.5.3) + ts-dedent: 2.2.0 + + '@storybook/addon-docs@8.6.14(@types/react@18.2.37)(storybook@8.6.14(prettier@3.5.3))': + dependencies: + '@mdx-js/react': 3.1.0(@types/react@18.2.37)(react@18.2.0) + '@storybook/blocks': 8.6.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) + '@storybook/csf-plugin': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/react-dom-shim': 8.6.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + storybook: 8.6.14(prettier@3.5.3) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + + '@storybook/addon-essentials@8.6.14(@types/react@18.2.37)(storybook@8.6.14(prettier@3.5.3))': + dependencies: + '@storybook/addon-actions': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/addon-backgrounds': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/addon-controls': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/addon-docs': 8.6.14(@types/react@18.2.37)(storybook@8.6.14(prettier@3.5.3)) + '@storybook/addon-highlight': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/addon-measure': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/addon-outline': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/addon-toolbars': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/addon-viewport': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + storybook: 8.6.14(prettier@3.5.3) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + + '@storybook/addon-highlight@8.6.14(storybook@8.6.14(prettier@3.5.3))': + dependencies: + '@storybook/global': 5.0.0 + storybook: 8.6.14(prettier@3.5.3) + + '@storybook/addon-interactions@8.6.14(storybook@8.6.14(prettier@3.5.3))': + dependencies: + '@storybook/global': 5.0.0 + '@storybook/instrumenter': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/test': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + polished: 4.3.1 + storybook: 8.6.14(prettier@3.5.3) + ts-dedent: 2.2.0 + + '@storybook/addon-links@8.6.14(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))': + dependencies: + '@storybook/global': 5.0.0 + storybook: 8.6.14(prettier@3.5.3) + ts-dedent: 2.2.0 + optionalDependencies: + react: 18.2.0 + + '@storybook/addon-measure@8.6.14(storybook@8.6.14(prettier@3.5.3))': + dependencies: + '@storybook/global': 5.0.0 + storybook: 8.6.14(prettier@3.5.3) + tiny-invariant: 1.3.3 + + '@storybook/addon-onboarding@8.6.14(storybook@8.6.14(prettier@3.5.3))': + dependencies: + storybook: 8.6.14(prettier@3.5.3) + + '@storybook/addon-outline@8.6.14(storybook@8.6.14(prettier@3.5.3))': + dependencies: + '@storybook/global': 5.0.0 + storybook: 8.6.14(prettier@3.5.3) + ts-dedent: 2.2.0 + + '@storybook/addon-toolbars@8.6.14(storybook@8.6.14(prettier@3.5.3))': + dependencies: + storybook: 8.6.14(prettier@3.5.3) + + '@storybook/addon-viewport@8.6.14(storybook@8.6.14(prettier@3.5.3))': + dependencies: + memoizerific: 1.11.3 + storybook: 8.6.14(prettier@3.5.3) + + '@storybook/blocks@8.6.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))': + dependencies: + '@storybook/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + storybook: 8.6.14(prettier@3.5.3) + ts-dedent: 2.2.0 + optionalDependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@storybook/builder-vite@8.6.14(storybook@8.6.14(prettier@3.5.3))(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0))': + dependencies: + '@storybook/csf-plugin': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + browser-assert: 1.2.1 + storybook: 8.6.14(prettier@3.5.3) + ts-dedent: 2.2.0 + vite: 6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0) + + '@storybook/components@8.6.14(storybook@8.6.14(prettier@3.5.3))': + dependencies: + storybook: 8.6.14(prettier@3.5.3) + + '@storybook/core@8.6.14(prettier@3.5.3)(storybook@8.6.14(prettier@3.5.3))': + dependencies: + '@storybook/theming': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + better-opn: 3.0.2 + browser-assert: 1.2.1 + esbuild: 0.25.0 + esbuild-register: 3.6.0(esbuild@0.25.0) + jsdoc-type-pratt-parser: 4.1.0 + process: 0.11.10 + recast: 0.23.11 + semver: 7.7.2 + util: 0.12.5 + ws: 8.18.3 + optionalDependencies: + prettier: 3.5.3 + transitivePeerDependencies: + - bufferutil + - storybook + - supports-color + - utf-8-validate + + '@storybook/csf-plugin@8.6.14(storybook@8.6.14(prettier@3.5.3))': + dependencies: + storybook: 8.6.14(prettier@3.5.3) + unplugin: 1.16.1 + + '@storybook/global@5.0.0': {} + + '@storybook/icons@1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@storybook/instrumenter@8.6.14(storybook@8.6.14(prettier@3.5.3))': + dependencies: + '@storybook/global': 5.0.0 + '@vitest/utils': 2.1.9 + storybook: 8.6.14(prettier@3.5.3) + + '@storybook/manager-api@8.6.14(storybook@8.6.14(prettier@3.5.3))': + dependencies: + storybook: 8.6.14(prettier@3.5.3) + + '@storybook/preview-api@8.6.14(storybook@8.6.14(prettier@3.5.3))': + dependencies: + storybook: 8.6.14(prettier@3.5.3) + + '@storybook/react-dom-shim@8.6.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))': + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + storybook: 8.6.14(prettier@3.5.3) + + '@storybook/react-vite@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.45.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.2.2)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0))': + dependencies: + '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.2.2)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0)) + '@rollup/pluginutils': 5.1.4(rollup@4.45.0) + '@storybook/builder-vite': 8.6.14(storybook@8.6.14(prettier@3.5.3))(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0)) + '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.2.2) + find-up: 5.0.0 + magic-string: 0.30.17 + react: 18.2.0 + react-docgen: 7.1.1 + react-dom: 18.2.0(react@18.2.0) + resolve: 1.22.10 + storybook: 8.6.14(prettier@3.5.3) + tsconfig-paths: 4.2.0 + vite: 6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0) + optionalDependencies: + '@storybook/test': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + transitivePeerDependencies: + - rollup + - supports-color + - typescript + + '@storybook/react@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.2.2)': + dependencies: + '@storybook/components': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/global': 5.0.0 + '@storybook/manager-api': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/preview-api': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/react-dom-shim': 8.6.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) + '@storybook/theming': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + storybook: 8.6.14(prettier@3.5.3) + optionalDependencies: + '@storybook/test': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + typescript: 5.2.2 + + '@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3))': + dependencies: + '@storybook/global': 5.0.0 + '@storybook/instrumenter': 8.6.14(storybook@8.6.14(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.14(prettier@3.5.3) + + '@storybook/theming@8.6.14(storybook@8.6.14(prettier@3.5.3))': + dependencies: + storybook: 8.6.14(prettier@3.5.3) + '@stripe/react-stripe-js@3.1.1(@stripe/stripe-js@5.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@stripe/stripe-js': 5.6.0 @@ -19788,6 +20400,17 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 + '@testing-library/dom@10.4.0': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/runtime': 7.26.0 + '@types/aria-query': 5.0.1 + 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/dom@9.3.4': dependencies: '@babel/code-frame': 7.27.1 @@ -19815,6 +20438,16 @@ snapshots: jest: 29.7.0(@types/node@22.16.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.16.0)(typescript@5.8.3)) vitest: 3.0.5(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@22.16.0)(jiti@2.4.2)(jsdom@24.1.3)(lightningcss@1.27.0)(msw@2.10.2(@types/node@22.16.0)(typescript@5.8.3))(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0) + '@testing-library/jest-dom@6.5.0': + dependencies: + '@adobe/css-tools': 4.4.0 + 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/react@16.0.0(@testing-library/dom@10.1.0)(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.26.0 @@ -19829,6 +20462,10 @@ snapshots: dependencies: '@testing-library/dom': 10.1.0 + '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': + dependencies: + '@testing-library/dom': 10.4.0 + '@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.17)(vue@3.5.17(typescript@5.8.3))': dependencies: '@babel/runtime': 7.26.0 @@ -19937,6 +20574,8 @@ snapshots: '@types/diff-match-patch@1.0.36': {} + '@types/doctrine@0.0.9': {} + '@types/estree@1.0.5': {} '@types/estree@1.0.8': {} @@ -20032,6 +20671,8 @@ snapshots: dependencies: '@types/unist': 3.0.3 + '@types/mdx@2.0.13': {} + '@types/methods@1.1.4': {} '@types/mime@1.3.2': {} @@ -20070,10 +20711,20 @@ snapshots: '@types/range-parser@1.2.4': {} + '@types/react-dom@18.2.15': + dependencies: + '@types/react': 18.2.37 + '@types/react-dom@18.3.7(@types/react@18.3.23)': dependencies: '@types/react': 18.3.23 + '@types/react@18.2.37': + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.26.0 + csstype: 3.1.3 + '@types/react@18.3.23': dependencies: '@types/prop-types': 15.7.5 @@ -20085,6 +20736,8 @@ snapshots: '@types/retry@0.12.2': {} + '@types/scheduler@0.26.0': {} + '@types/semver@7.7.0': {} '@types/send@0.17.1': @@ -20139,6 +20792,8 @@ snapshots: '@types/uuid@10.0.0': {} + '@types/uuid@9.0.8': {} + '@types/webextension-polyfill@0.10.7': {} '@types/webpack-env@1.18.8': {} @@ -20560,11 +21215,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitest/expect@2.0.5': + dependencies: + '@vitest/spy': 2.0.5 + '@vitest/utils': 2.0.5 + chai: 5.2.1 + tinyrainbow: 1.2.0 + '@vitest/expect@3.0.5': dependencies: '@vitest/spy': 3.0.5 '@vitest/utils': 3.0.5 - chai: 5.1.2 + chai: 5.2.1 tinyrainbow: 2.0.0 '@vitest/mocker@3.0.5(msw@2.10.2(@types/node@22.16.0)(typescript@5.8.3))(vite@6.3.5(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0))': @@ -20585,6 +21247,14 @@ snapshots: msw: 2.10.2(@types/node@24.0.10)(typescript@5.8.3) vite: 6.3.5(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0) + '@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.0.5': dependencies: tinyrainbow: 2.0.0 @@ -20600,14 +21270,31 @@ snapshots: magic-string: 0.30.17 pathe: 2.0.3 + '@vitest/spy@2.0.5': + dependencies: + tinyspy: 3.0.2 + '@vitest/spy@3.0.5': 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.4 + tinyrainbow: 1.2.0 + + '@vitest/utils@2.1.9': + dependencies: + '@vitest/pretty-format': 2.1.9 + loupe: 3.1.4 + tinyrainbow: 1.2.0 + '@vitest/utils@3.0.5': dependencies: '@vitest/pretty-format': 3.0.5 - loupe: 3.1.2 + loupe: 3.1.4 tinyrainbow: 2.0.0 '@volar/language-core@2.1.6': @@ -21709,6 +22396,8 @@ snapshots: dependencies: base64-js: 1.5.1 + browser-assert@1.2.1: {} + browser-tabs-lock@1.3.0: dependencies: lodash: 4.17.21 @@ -21885,7 +22574,15 @@ snapshots: assertion-error: 2.0.1 check-error: 2.1.1 deep-eql: 5.0.2 - loupe: 3.1.2 + loupe: 3.1.4 + pathval: 2.0.0 + + chai@5.2.1: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.4 pathval: 2.0.0 chalk@2.4.2: @@ -22993,6 +23690,10 @@ snapshots: dependencies: esutils: 2.0.3 + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + dom-accessibility-api@0.5.16: {} dom-accessibility-api@0.6.3: {} @@ -23315,6 +24016,13 @@ snapshots: esbuild-plugin-file-path-extensions@2.1.4: {} + esbuild-register@3.6.0(esbuild@0.25.0): + dependencies: + debug: 4.4.1(supports-color@8.1.1) + esbuild: 0.25.0 + transitivePeerDependencies: + - supports-color + esbuild@0.23.1: optionalDependencies: '@esbuild/aix-ppc64': 0.23.1 @@ -26630,7 +27338,7 @@ snapshots: dependencies: js-tokens: 4.0.0 - loupe@3.1.2: {} + loupe@3.1.4: {} lowdb@1.0.0: dependencies: @@ -26664,6 +27372,10 @@ snapshots: dependencies: magic-string: 0.30.17 + magic-string@0.27.0: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.4 + magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.4 @@ -26695,6 +27407,8 @@ snapshots: map-obj@5.0.2: {} + map-or-similar@1.5.0: {} + markdown-it@14.1.0: dependencies: argparse: 2.0.1 @@ -26887,6 +27601,10 @@ snapshots: memoize-one@5.2.1: {} + memoizerific@1.11.3: + dependencies: + map-or-similar: 1.5.0 + memorystream@0.3.1: {} meow@11.0.0: @@ -28545,6 +29263,10 @@ snapshots: pngjs@3.4.0: {} + polished@4.3.1: + dependencies: + '@babel/runtime': 7.26.0 + portfinder@1.0.32: dependencies: async: 2.6.4 @@ -29000,6 +29722,31 @@ snapshots: - bufferutil - utf-8-validate + react-docgen-typescript@2.4.0(typescript@5.2.2): + dependencies: + typescript: 5.2.2 + + react-docgen@7.1.1: + dependencies: + '@babel/core': 7.27.7 + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.0 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 + '@types/doctrine': 0.0.9 + '@types/resolve': 1.20.2 + doctrine: 3.0.0 + resolve: 1.22.10 + strip-indent: 4.0.0 + transitivePeerDependencies: + - supports-color + + react-dom@18.2.0(react@18.2.0): + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.2 + react-dom@18.3.1(react@18.3.1): dependencies: loose-envify: 1.4.0 @@ -29095,6 +29842,10 @@ snapshots: optionalDependencies: react-dom: 18.3.1(react@18.3.1) + react@18.2.0: + dependencies: + loose-envify: 1.4.0 + react@18.3.1: dependencies: loose-envify: 1.4.0 @@ -30123,6 +30874,16 @@ snapshots: dependencies: internal-slot: 1.1.0 + storybook@8.6.14(prettier@3.5.3): + dependencies: + '@storybook/core': 8.6.14(prettier@3.5.3)(storybook@8.6.14(prettier@3.5.3)) + optionalDependencies: + prettier: 3.5.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + stream-buffers@2.2.0: {} stream-shift@1.0.3: {} @@ -30591,6 +31352,8 @@ snapshots: tinypool@1.0.2: {} + tinyrainbow@1.2.0: {} + tinyrainbow@2.0.0: {} tinyspy@3.0.2: {} @@ -30672,6 +31435,8 @@ snapshots: dependencies: typescript: 5.8.3 + ts-dedent@2.2.0: {} + ts-interface-checker@0.1.13: {} ts-jest@29.2.5(@babel/core@7.27.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.7))(esbuild@0.25.0)(jest@29.7.0(@types/node@22.16.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.16.0)(typescript@5.8.3)))(typescript@5.8.3): @@ -30726,6 +31491,12 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 + tsconfig-paths@4.2.0: + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + tslib@2.8.1: {} tsscmp@1.0.6: {} @@ -30904,6 +31675,8 @@ snapshots: transitivePeerDependencies: - supports-color + typescript@5.2.2: {} + typescript@5.6.1-rc: {} typescript@5.8.3: {} @@ -31264,6 +32037,14 @@ snapshots: util-deprecate@1.0.2: {} + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.1.0 + is-typed-array: 1.1.15 + which-typed-array: 1.1.18 + utils-merge@1.0.1: {} uuid@10.0.0: {} From 41591d6e01b404296092577eb6b0963afcfb0fea Mon Sep 17 00:00:00 2001 From: Alex Carpenter Date: Thu, 17 Jul 2025 16:06:22 -0400 Subject: [PATCH 2/6] args --- packages/storybook/.storybook/preview.tsx | 163 +++++++++++++++++++++- 1 file changed, 158 insertions(+), 5 deletions(-) diff --git a/packages/storybook/.storybook/preview.tsx b/packages/storybook/.storybook/preview.tsx index 1581eb1d7cb..68ab0bfa3cb 100644 --- a/packages/storybook/.storybook/preview.tsx +++ b/packages/storybook/.storybook/preview.tsx @@ -1,6 +1,8 @@ import type { Preview } from '@storybook/react'; import React from 'react'; +// @ts-ignore - workspace package import import { ClerkProvider } from '@clerk/clerk-react'; +import type { Appearance } from '@clerk/types'; const preview: Preview = { parameters: { @@ -12,12 +14,163 @@ const preview: Preview = { }, layout: 'centered', }, + argTypes: { + // Color Variables + colorPrimary: { + description: 'Primary color', + control: { type: 'color' }, + table: { category: 'Appearance - Colors' }, + }, + colorPrimaryForeground: { + description: 'Primary foreground color', + control: { type: 'color' }, + table: { category: 'Appearance - Colors' }, + }, + colorBackground: { + description: 'Background color', + control: { type: 'color' }, + table: { category: 'Appearance - Colors' }, + }, + colorInputBackground: { + description: 'Input background color', + control: { type: 'color' }, + table: { category: 'Appearance - Colors' }, + }, + colorText: { + description: 'Text color', + control: { type: 'color' }, + table: { category: 'Appearance - Colors' }, + }, + colorTextSecondary: { + description: 'Secondary text color', + control: { type: 'color' }, + table: { category: 'Appearance - Colors' }, + }, + colorDanger: { + description: 'Danger color', + control: { type: 'color' }, + table: { category: 'Appearance - Colors' }, + }, + colorSuccess: { + description: 'Success color', + control: { type: 'color' }, + table: { category: 'Appearance - Colors' }, + }, + colorWarning: { + description: 'Warning color', + control: { type: 'color' }, + table: { category: 'Appearance - Colors' }, + }, + colorNeutral: { + description: 'Neutral color', + control: { type: 'color' }, + table: { category: 'Appearance - Colors' }, + }, + + // Typography Variables + fontFamily: { + description: 'Font family', + control: { type: 'text' }, + table: { category: 'Appearance - Typography' }, + }, + fontSize: { + description: 'Font size', + control: { type: 'text' }, + table: { category: 'Appearance - Typography' }, + }, + fontWeight: { + description: 'Font weight', + control: { type: 'select' }, + options: ['100', '200', '300', '400', '500', '600', '700', '800', '900'], + table: { category: 'Appearance - Typography' }, + }, + + // Layout Variables + borderRadius: { + description: 'Border radius', + control: { type: 'text' }, + table: { category: 'Appearance - Layout' }, + }, + spacingUnit: { + description: 'Spacing unit', + control: { type: 'text' }, + table: { category: 'Appearance - Layout' }, + }, + }, + args: { + // Default values for appearance variables + colorPrimary: '#2F3037', + colorPrimaryForeground: '#FFFFFF', + colorBackground: '#FFFFFF', + colorInputBackground: '#FFFFFF', + colorText: '#1F2937', + colorTextSecondary: '#6B7280', + colorDanger: '#DC2626', + colorSuccess: '#16A34A', + colorWarning: '#F59E0B', + colorNeutral: '#9CA3AF', + fontFamily: 'inherit', + fontSize: '0.875rem', + fontWeight: '400', + borderRadius: '0.375rem', + spacingUnit: '1rem', + }, decorators: [ - Story => ( - - - - ), + (Story, context) => { + const { + colorPrimary, + colorPrimaryForeground, + colorBackground, + colorInputBackground, + colorText, + colorTextSecondary, + colorDanger, + colorSuccess, + colorWarning, + colorNeutral, + fontFamily, + fontSize, + fontWeight, + borderRadius, + spacingUnit, + } = context.args; + + // Build appearance object with individual variables + const appearance: Appearance = { + variables: { + colorPrimary, + colorPrimaryForeground, + colorBackground, + colorInputBackground, + colorText, + colorTextSecondary, + colorDanger, + colorSuccess, + colorWarning, + colorNeutral, + fontFamily, + fontSize, + fontWeight, + borderRadius, + spacingUnit, + }, + }; + + return React.createElement( + ClerkProvider, + { + publishableKey: 'pk_test_dG91Y2hlZC1sYWR5YmlyZC0yMy5jbGVyay5hY2NvdW50cy5kZXYk', + appearance: appearance, + }, + React.createElement( + 'div', + { + style: { maxWidth: '400px', margin: '0 auto', padding: '20px' }, + }, + React.createElement(Story), + ), + ); + }, ], }; From 251a82a1b4306428e4e08d563576216da9f6cb40 Mon Sep 17 00:00:00 2001 From: Alex Carpenter Date: Thu, 17 Jul 2025 18:08:17 -0400 Subject: [PATCH 3/6] more stories --- packages/storybook/.storybook/preview.tsx | 124 +++++++++++------- packages/storybook/stories/SignUp.stories.tsx | 25 ++++ .../storybook/stories/UserProfile.stories.tsx | 25 ++++ 3 files changed, 125 insertions(+), 49 deletions(-) create mode 100644 packages/storybook/stories/SignUp.stories.tsx create mode 100644 packages/storybook/stories/UserProfile.stories.tsx diff --git a/packages/storybook/.storybook/preview.tsx b/packages/storybook/.storybook/preview.tsx index 68ab0bfa3cb..2bd3a0bc3aa 100644 --- a/packages/storybook/.storybook/preview.tsx +++ b/packages/storybook/.storybook/preview.tsx @@ -1,8 +1,8 @@ -import type { Preview } from '@storybook/react'; -import React from 'react'; // @ts-ignore - workspace package import import { ClerkProvider } from '@clerk/clerk-react'; import type { Appearance } from '@clerk/types'; +import type { Preview } from '@storybook/react'; +import React from 'react'; const preview: Preview = { parameters: { @@ -17,82 +17,99 @@ const preview: Preview = { argTypes: { // Color Variables colorPrimary: { - description: 'Primary color', + description: 'Primary color used throughout the components', control: { type: 'color' }, table: { category: 'Appearance - Colors' }, }, colorPrimaryForeground: { - description: 'Primary foreground color', + description: 'Text color appearing on top of primary background', + control: { type: 'color' }, + table: { category: 'Appearance - Colors' }, + }, + colorForeground: { + description: 'Default text color', control: { type: 'color' }, table: { category: 'Appearance - Colors' }, }, colorBackground: { - description: 'Background color', + description: 'Background color for the card container', control: { type: 'color' }, table: { category: 'Appearance - Colors' }, }, - colorInputBackground: { - description: 'Input background color', + colorInput: { + description: 'Background color for all input elements', control: { type: 'color' }, table: { category: 'Appearance - Colors' }, }, - colorText: { - description: 'Text color', + colorInputForeground: { + description: 'Text color inside input elements', control: { type: 'color' }, table: { category: 'Appearance - Colors' }, }, - colorTextSecondary: { - description: 'Secondary text color', + colorMuted: { + description: 'Background color for elements of lower importance', + control: { type: 'color' }, + table: { category: 'Appearance - Colors' }, + }, + colorMutedForeground: { + description: 'Text color for elements of lower importance', control: { type: 'color' }, table: { category: 'Appearance - Colors' }, }, colorDanger: { - description: 'Danger color', + description: 'Color used to indicate errors or destructive actions', control: { type: 'color' }, table: { category: 'Appearance - Colors' }, }, colorSuccess: { - description: 'Success color', + description: 'Color used to indicate successful actions or positive results', control: { type: 'color' }, table: { category: 'Appearance - Colors' }, }, colorWarning: { - description: 'Warning color', + description: 'Color used for potentially destructive actions or when attention is required', control: { type: 'color' }, table: { category: 'Appearance - Colors' }, }, colorNeutral: { - description: 'Neutral color', + description: 'Neutral color used for borders, backgrounds, and hovered elements', + control: { type: 'color' }, + table: { category: 'Appearance - Colors' }, + }, + colorBorder: { + description: 'Base border color used in the components', + control: { type: 'color' }, + table: { category: 'Appearance - Colors' }, + }, + colorShadow: { + description: 'Base shadow color used in the components', control: { type: 'color' }, table: { category: 'Appearance - Colors' }, }, - // Typography Variables fontFamily: { - description: 'Font family', + description: 'Default font family for all components', control: { type: 'text' }, table: { category: 'Appearance - Typography' }, }, - fontSize: { - description: 'Font size', + fontFamilyButtons: { + description: 'Font family for all buttons', control: { type: 'text' }, table: { category: 'Appearance - Typography' }, }, - fontWeight: { - description: 'Font weight', - control: { type: 'select' }, - options: ['100', '200', '300', '400', '500', '600', '700', '800', '900'], + fontSize: { + description: 'Base font size (md value for calculating other scales)', + control: { type: 'text' }, table: { category: 'Appearance - Typography' }, }, - // Layout Variables borderRadius: { - description: 'Border radius', + description: 'Base border radius (md value for calculating other scales)', control: { type: 'text' }, table: { category: 'Appearance - Layout' }, }, - spacingUnit: { - description: 'Spacing unit', + spacing: { + description: 'Base spacing for margins, paddings, and gaps', control: { type: 'text' }, table: { category: 'Appearance - Layout' }, }, @@ -102,18 +119,19 @@ const preview: Preview = { colorPrimary: '#2F3037', colorPrimaryForeground: '#FFFFFF', colorBackground: '#FFFFFF', - colorInputBackground: '#FFFFFF', - colorText: '#1F2937', - colorTextSecondary: '#6B7280', - colorDanger: '#DC2626', - colorSuccess: '#16A34A', - colorWarning: '#F59E0B', - colorNeutral: '#9CA3AF', + colorInput: '#FFFFFF', + colorInputForeground: '#212126', + colorForeground: '#212126', + colorMutedForeground: '#747686', + colorDanger: '#EF4444', + colorSuccess: '#22C543', + colorWarning: '#F36B16', + colorNeutral: '#000000', fontFamily: 'inherit', - fontSize: '0.875rem', - fontWeight: '400', + fontFamilyButtons: 'inherit', + fontSize: '0.8125rem', borderRadius: '0.375rem', - spacingUnit: '1rem', + spacing: '1rem', }, decorators: [ (Story, context) => { @@ -121,18 +139,22 @@ const preview: Preview = { colorPrimary, colorPrimaryForeground, colorBackground, - colorInputBackground, - colorText, - colorTextSecondary, + colorInput, + colorInputForeground, + colorForeground, + colorMuted, + colorMutedForeground, colorDanger, colorSuccess, colorWarning, colorNeutral, + colorBorder, + colorShadow, fontFamily, + fontFamilyButtons, fontSize, - fontWeight, borderRadius, - spacingUnit, + spacing, } = context.args; // Build appearance object with individual variables @@ -141,18 +163,22 @@ const preview: Preview = { colorPrimary, colorPrimaryForeground, colorBackground, - colorInputBackground, - colorText, - colorTextSecondary, + colorInput, + colorInputForeground, + colorForeground, + colorMuted, + colorMutedForeground, colorDanger, colorSuccess, colorWarning, colorNeutral, + colorBorder, + colorShadow, fontFamily, + fontFamilyButtons, fontSize, - fontWeight, borderRadius, - spacingUnit, + spacing, }, }; @@ -161,11 +187,11 @@ const preview: Preview = { { publishableKey: 'pk_test_dG91Y2hlZC1sYWR5YmlyZC0yMy5jbGVyay5hY2NvdW50cy5kZXYk', appearance: appearance, - }, + } as any, React.createElement( 'div', { - style: { maxWidth: '400px', margin: '0 auto', padding: '20px' }, + style: { fontFamily: 'sans-serif' }, }, React.createElement(Story), ), diff --git a/packages/storybook/stories/SignUp.stories.tsx b/packages/storybook/stories/SignUp.stories.tsx new file mode 100644 index 00000000000..b67660d9c54 --- /dev/null +++ b/packages/storybook/stories/SignUp.stories.tsx @@ -0,0 +1,25 @@ +import { SignUp } from '@clerk/clerk-react'; +import type { Meta, StoryObj } from '@storybook/react'; + +// Define the story metadata +const meta: Meta = { + title: 'Components/SignUp', + component: SignUp, + parameters: { + docs: { + description: { + component: 'The SignUp component renders a UI for users to sign in to your application.', + }, + }, + }, + tags: ['autodocs'], +}; + +export default meta; + +type Story = StoryObj; + +// Default story +export const Default: Story = { + args: {}, +}; diff --git a/packages/storybook/stories/UserProfile.stories.tsx b/packages/storybook/stories/UserProfile.stories.tsx new file mode 100644 index 00000000000..9172a496947 --- /dev/null +++ b/packages/storybook/stories/UserProfile.stories.tsx @@ -0,0 +1,25 @@ +import { UserProfile } from '@clerk/clerk-react'; +import type { Meta, StoryObj } from '@storybook/react'; + +// Define the story metadata +const meta: Meta = { + title: 'Components/UserProfile', + component: UserProfile, + parameters: { + docs: { + description: { + component: 'The UserProfile component renders a UI for users to sign in to your application.', + }, + }, + }, + tags: ['autodocs'], +}; + +export default meta; + +type Story = StoryObj; + +// Default story +export const Default: Story = { + args: {}, +}; From 2fce792cb2800d9978032fbe7b8b686307fe514d Mon Sep 17 00:00:00 2001 From: Alex Carpenter Date: Thu, 17 Jul 2025 18:46:58 -0400 Subject: [PATCH 4/6] Add dark mode and locale support to Storybook Introduces storybook-dark-mode addon and global dark/light theme classes with custom CSS. Adds locale selection to Storybook toolbar and passes localization resources to ClerkProvider. Also adds a UserButton story for demonstration. --- packages/storybook/.storybook/main.css | 12 +++++ packages/storybook/.storybook/main.ts | 2 +- packages/storybook/.storybook/preview.tsx | 48 ++++++++++++++++--- packages/storybook/package.json | 3 +- .../storybook/stories/UserButton.stories.tsx | 25 ++++++++++ pnpm-lock.yaml | 32 ++++++++++++- 6 files changed, 112 insertions(+), 10 deletions(-) create mode 100644 packages/storybook/.storybook/main.css create mode 100644 packages/storybook/stories/UserButton.stories.tsx diff --git a/packages/storybook/.storybook/main.css b/packages/storybook/.storybook/main.css new file mode 100644 index 00000000000..282684328cd --- /dev/null +++ b/packages/storybook/.storybook/main.css @@ -0,0 +1,12 @@ +:root { + --background: #f5f5f5; +} + +.dark { + --background: #0a0a0a; +} + +body { + font-family: 'ui-sans-serif', sans-serif; + background-color: var(--background); +} diff --git a/packages/storybook/.storybook/main.ts b/packages/storybook/.storybook/main.ts index d3a6b2cc2da..f7633aae817 100644 --- a/packages/storybook/.storybook/main.ts +++ b/packages/storybook/.storybook/main.ts @@ -2,7 +2,7 @@ import type { StorybookConfig } from '@storybook/react-vite'; const config: StorybookConfig = { stories: ['../stories/**/*.stories.@(js|jsx|mjs|ts|tsx|mdx)'], - addons: ['@storybook/addon-essentials'], + addons: ['@storybook/addon-essentials', 'storybook-dark-mode'], framework: { name: '@storybook/react-vite', options: {}, diff --git a/packages/storybook/.storybook/preview.tsx b/packages/storybook/.storybook/preview.tsx index 2bd3a0bc3aa..dc72108f598 100644 --- a/packages/storybook/.storybook/preview.tsx +++ b/packages/storybook/.storybook/preview.tsx @@ -1,9 +1,21 @@ // @ts-ignore - workspace package import +import './main.css'; + import { ClerkProvider } from '@clerk/clerk-react'; +import { enUS, esES, frFR, koKR, zhCN } from '@clerk/localizations'; import type { Appearance } from '@clerk/types'; import type { Preview } from '@storybook/react'; import React from 'react'; +// Map locale selector values to localization resources +const localeMap = { + en: enUS, + fr: frFR, + es: esES, + zh: zhCN, + kr: koKR, +} as const; + const preview: Preview = { parameters: { controls: { @@ -13,6 +25,29 @@ const preview: Preview = { }, }, layout: 'centered', + darkMode: { + stylePreview: true, + darkClass: 'dark', + lightClass: 'light', + }, + }, + globalTypes: { + locale: { + description: 'Locale', + toolbar: { + icon: 'globe', + items: [ + { value: 'en', right: '🇺🇸', title: 'English' }, + { value: 'fr', right: '🇫🇷', title: 'Français' }, + { value: 'es', right: '🇪🇸', title: 'Español' }, + { value: 'zh', right: '🇨🇳', title: '中文' }, + { value: 'kr', right: '🇰🇷', title: '한국어' }, + ], + }, + }, + }, + initialGlobals: { + locale: 'en', }, argTypes: { // Color Variables @@ -157,6 +192,10 @@ const preview: Preview = { spacing, } = context.args; + // Get the selected locale with proper type safety + const selectedLocale = context.globals.locale as keyof typeof localeMap; + const localization = localeMap[selectedLocale] || localeMap.en; + // Build appearance object with individual variables const appearance: Appearance = { variables: { @@ -187,14 +226,9 @@ const preview: Preview = { { publishableKey: 'pk_test_dG91Y2hlZC1sYWR5YmlyZC0yMy5jbGVyay5hY2NvdW50cy5kZXYk', appearance: appearance, + localization: localization, } as any, - React.createElement( - 'div', - { - style: { fontFamily: 'sans-serif' }, - }, - React.createElement(Story), - ), + React.createElement(Story), ); }, ], diff --git a/packages/storybook/package.json b/packages/storybook/package.json index c5d755e6877..55f032be2ae 100644 --- a/packages/storybook/package.json +++ b/packages/storybook/package.json @@ -21,7 +21,8 @@ "@clerk/shared": "workspace:*", "@clerk/types": "workspace:*", "react": "18.2.0", - "react-dom": "18.2.0" + "react-dom": "18.2.0", + "storybook-dark-mode": "4.0.2" }, "devDependencies": { "@storybook/addon-essentials": "^8.6.14", diff --git a/packages/storybook/stories/UserButton.stories.tsx b/packages/storybook/stories/UserButton.stories.tsx new file mode 100644 index 00000000000..de746dc0a43 --- /dev/null +++ b/packages/storybook/stories/UserButton.stories.tsx @@ -0,0 +1,25 @@ +import { UserButton } from '@clerk/clerk-react'; +import type { Meta, StoryObj } from '@storybook/react'; + +// Define the story metadata +const meta: Meta = { + title: 'Components/UserButton', + component: UserButton, + parameters: { + docs: { + description: { + component: 'The UserButton component renders a UI for users to sign in to your application.', + }, + }, + }, + tags: ['autodocs'], +}; + +export default meta; + +type Story = StoryObj; + +// Default story +export const Default: Story = { + args: {}, +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 795c6bc817b..9a9b70de939 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -977,6 +977,9 @@ importers: react-dom: specifier: 18.2.0 version: 18.2.0(react@18.2.0) + storybook-dark-mode: + specifier: 4.0.2 + version: 4.0.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) devDependencies: '@storybook/addon-essentials': specifier: ^8.6.14 @@ -2958,7 +2961,7 @@ packages: '@expo/bunyan@4.0.1': resolution: {integrity: sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg==} - engines: {'0': node >=0.10.0} + engines: {node: '>=0.10.0'} '@expo/cli@0.22.26': resolution: {integrity: sha512-I689wc8Fn/AX7aUGiwrh3HnssiORMJtR2fpksX+JIe8Cj/EDleblYMSwRPd0025wrwOV9UN1KM/RuEt/QjCS3Q==} @@ -4706,6 +4709,11 @@ packages: peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@storybook/core-events@8.6.14': + resolution: {integrity: sha512-RrJ95u3HuIE4Nk8VmZP0tc/u0vYoE2v9fYlMw6K2GUSExzKDITs3voy6WMIY7Q3qbQun8XUXVlmqkuFzTEy/pA==} + 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.14': resolution: {integrity: sha512-1P/w4FSNRqP8j3JQBOi3yGt8PVOgSRbP66Ok520T78eJBeqx9ukCfl912PQZ7SPbW3TIunBwLXMZOjZwBB/JmA==} peerDependencies: @@ -13428,6 +13436,9 @@ packages: resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} engines: {node: '>= 0.4'} + storybook-dark-mode@4.0.2: + resolution: {integrity: sha512-zjcwwQ01R5t1VsakA6alc2JDIRVtavryW8J3E3eKLDIlAMcvsgtpxlelWkZs2cuNspk6Z10XzhQVrUWtYc3F0w==} + storybook@8.6.14: resolution: {integrity: sha512-sVKbCj/OTx67jhmauhxc2dcr1P+yOgz/x3h0krwjyMgdc5Oubvxyg4NYDZmzAw+ym36g/lzH8N0Ccp4dwtdfxw==} hasBin: true @@ -19808,6 +19819,10 @@ snapshots: dependencies: storybook: 8.6.14(prettier@3.5.3) + '@storybook/core-events@8.6.14(storybook@8.6.14(prettier@3.5.3))': + dependencies: + storybook: 8.6.14(prettier@3.5.3) + '@storybook/core@8.6.14(prettier@3.5.3)(storybook@8.6.14(prettier@3.5.3))': dependencies: '@storybook/theming': 8.6.14(storybook@8.6.14(prettier@3.5.3)) @@ -30874,6 +30889,21 @@ snapshots: dependencies: internal-slot: 1.1.0 + storybook-dark-mode@4.0.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3)): + dependencies: + '@storybook/components': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/core-events': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/global': 5.0.0 + '@storybook/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/manager-api': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/theming': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + fast-deep-equal: 3.1.3 + memoizerific: 1.11.3 + transitivePeerDependencies: + - react + - react-dom + - storybook + storybook@8.6.14(prettier@3.5.3): dependencies: '@storybook/core': 8.6.14(prettier@3.5.3)(storybook@8.6.14(prettier@3.5.3)) From 644263761df080a60c1af28061516f03c67e0ee5 Mon Sep 17 00:00:00 2001 From: Alex Carpenter Date: Thu, 17 Jul 2025 19:37:39 -0400 Subject: [PATCH 5/6] upgrade to latest --- eslint.config.mjs | 685 ++++++++-------- packages/storybook/.storybook/main.ts | 17 +- packages/storybook/.storybook/preview.tsx | 31 +- packages/storybook/package.json | 19 +- packages/storybook/stories/SignIn.stories.tsx | 3 +- packages/storybook/stories/SignUp.stories.tsx | 2 +- .../storybook/stories/UserButton.stories.tsx | 2 +- .../storybook/stories/UserProfile.stories.tsx | 2 +- .../storybook/stories/navigation-pattern.md | 113 +++ pnpm-lock.yaml | 758 ++++++------------ 10 files changed, 746 insertions(+), 886 deletions(-) create mode 100644 packages/storybook/stories/navigation-pattern.md diff --git a/eslint.config.mjs b/eslint.config.mjs index 83e6cc3b04a..c9e482b5718 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,3 +1,6 @@ +// For more info, see https://github.com/storybookjs/eslint-plugin-storybook#configuration-flat-config-format +import storybook from 'eslint-plugin-storybook'; + import eslint from '@eslint/js'; import configPrettier from 'eslint-config-prettier'; import configTurbo from 'eslint-config-turbo/flat'; @@ -89,374 +92,380 @@ const noNavigateUseClerk = { }, }; -export default tseslint.config([ - { - name: 'repo/ignores', - ignores: [ - '.cache', - '.idea', - '.next', - '.turbo', - '.vscode', - '.yalc', - '!.*.js', - '**/.turbo/*', - '**/build/*', - '**/coverage/*', - '**/dist/*', - '**/integration/templates/**/*', - '**/node_modules/**', - '*.snap', - 'commitlint.config.ts', - 'packages/*/dist/**', - 'packages/*/examples', - 'playground/*', - 'pnpm-lock.json', - 'eslint.config.mjs', - 'typedoc.config.mjs', - 'vitest.workspace.mjs', - // package specific ignores - 'packages/astro/src/astro-components/**/*.ts', - 'packages/backend/src/runtime/**/*', - 'packages/clerk-js/rspack.config.js', - 'packages/shared/src/compiled/path-to-regexp/index.js', - ], - }, - { - name: 'repo/react-settings', - settings: { - react: { - version: 'detect', - }, +export default tseslint.config( + [ + { + name: 'repo/ignores', + ignores: [ + '.cache', + '.idea', + '.next', + '.turbo', + '.vscode', + '.yalc', + '!.*.js', + '**/.turbo/*', + '**/build/*', + '**/coverage/*', + '**/dist/*', + '**/integration/templates/**/*', + '**/node_modules/**', + '*.snap', + 'commitlint.config.ts', + 'packages/*/dist/**', + 'packages/*/examples', + 'playground/*', + 'pnpm-lock.json', + 'eslint.config.mjs', + 'typedoc.config.mjs', + 'vitest.workspace.mjs', + // package specific ignores + 'packages/astro/src/astro-components/**/*.ts', + 'packages/backend/src/runtime/**/*', + 'packages/clerk-js/rspack.config.js', + 'packages/shared/src/compiled/path-to-regexp/index.js', + ], }, - }, - { - name: 'repo/language-options', - languageOptions: { - ecmaVersion: ECMA_VERSION, - globals: { - ...globals.browser, - ...globals.node, - }, - parserOptions: { - projectService: true, - tsconfigRootDir: import.meta.dirname, + { + name: 'repo/react-settings', + settings: { + react: { + version: 'detect', + }, }, - sourceType: 'module', - }, - }, - { - name: 'repo/linter-options', - linterOptions: { - reportUnusedDisableDirectives: 'error', }, - }, - eslint.configs.recommended, - tseslint.configs.recommendedTypeChecked, - ...configTurbo, - pluginImport.flatConfigs.recommended, - pluginJsxA11y.flatConfigs.recommended, - pluginReact.configs.flat.recommended, - { - name: 'repo/global', - plugins: { - 'simple-import-sort': pluginSimpleImportSort, - 'unused-imports': pluginUnusedImports, - turbo: pluginTurbo, - }, - settings: { - 'import/ignore': ['node_modules/react-native/index\\.js$'], - 'import/resolver': { - node: true, - typescript: { - alwaysTryTypes: true, - project: ['packages/*/tsconfig.json', 'integration/tsconfig.json'], + { + name: 'repo/language-options', + languageOptions: { + ecmaVersion: ECMA_VERSION, + globals: { + ...globals.browser, + ...globals.node, + }, + parserOptions: { + projectService: true, + tsconfigRootDir: import.meta.dirname, }, + sourceType: 'module', + }, + }, + { + name: 'repo/linter-options', + linterOptions: { + reportUnusedDisableDirectives: 'error', }, }, - rules: { - curly: ['error', 'all'], - 'no-label-var': 'error', - 'no-undef-init': 'warn', - 'no-restricted-imports': [ - 'error', - { - paths: [ - { - message: "Please always import from '@clerk/shared/' instead of '@clerk/shared'.", - name: '@clerk/shared', - }, - ], - patterns: [ - { - group: ['!@clerk/shared/*'], - message: 'ignore this line -- eslint matching workaround to allow all imports except @clerk/shared', - }, - { - group: ['@emotion/*'], - message: - 'Please do not import emotion directly. Import helpers from ./design-system or ./primitives instead.', - }, - ], + eslint.configs.recommended, + tseslint.configs.recommendedTypeChecked, + ...configTurbo, + pluginImport.flatConfigs.recommended, + pluginJsxA11y.flatConfigs.recommended, + pluginReact.configs.flat.recommended, + { + name: 'repo/global', + plugins: { + 'simple-import-sort': pluginSimpleImportSort, + 'unused-imports': pluginUnusedImports, + turbo: pluginTurbo, + }, + settings: { + 'import/ignore': ['node_modules/react-native/index\\.js$'], + 'import/resolver': { + node: true, + typescript: { + alwaysTryTypes: true, + project: ['packages/*/tsconfig.json', 'integration/tsconfig.json'], + }, }, - ], + }, + rules: { + curly: ['error', 'all'], + 'no-label-var': 'error', + 'no-undef-init': 'warn', + 'no-restricted-imports': [ + 'error', + { + paths: [ + { + message: "Please always import from '@clerk/shared/' instead of '@clerk/shared'.", + name: '@clerk/shared', + }, + ], + patterns: [ + { + group: ['!@clerk/shared/*'], + message: 'ignore this line -- eslint matching workaround to allow all imports except @clerk/shared', + }, + { + group: ['@emotion/*'], + message: + 'Please do not import emotion directly. Import helpers from ./design-system or ./primitives instead.', + }, + ], + }, + ], - 'jsx-a11y/no-onchange': 'off', + 'jsx-a11y/no-onchange': 'off', - 'react/button-has-type': 'warn', - 'react/function-component-definition': 'off', - 'react/hook-use-state': 'warn', - 'react/jsx-boolean-value': 'warn', - 'react/jsx-curly-brace-presence': 'warn', - 'react/jsx-fragments': 'warn', - 'react/jsx-no-leaked-render': 'warn', - 'react/jsx-no-target-blank': [ - 'error', - { - allowReferrer: true, - }, - ], - 'react/jsx-no-useless-fragment': ['warn', { allowExpressions: true }], - 'react/jsx-pascal-case': 'warn', - 'react/jsx-sort-props': 'warn', - 'react/no-array-index-key': 'warn', - 'react/no-unstable-nested-components': 'warn', - 'react/no-unknown-property': ['error', { ignore: ['css'] }], // Emotion - 'react/self-closing-comp': 'warn', - 'react/prop-types': 'off', - 'react/react-in-jsx-scope': 'off', + 'react/button-has-type': 'warn', + 'react/function-component-definition': 'off', + 'react/hook-use-state': 'warn', + 'react/jsx-boolean-value': 'warn', + 'react/jsx-curly-brace-presence': 'warn', + 'react/jsx-fragments': 'warn', + 'react/jsx-no-leaked-render': 'warn', + 'react/jsx-no-target-blank': [ + 'error', + { + allowReferrer: true, + }, + ], + 'react/jsx-no-useless-fragment': ['warn', { allowExpressions: true }], + 'react/jsx-pascal-case': 'warn', + 'react/jsx-sort-props': 'warn', + 'react/no-array-index-key': 'warn', + 'react/no-unstable-nested-components': 'warn', + 'react/no-unknown-property': ['error', { ignore: ['css'] }], // Emotion + 'react/self-closing-comp': 'warn', + 'react/prop-types': 'off', + 'react/react-in-jsx-scope': 'off', - 'simple-import-sort/imports': 'error', + 'simple-import-sort/imports': 'error', - 'sort-imports': 'off', + 'sort-imports': 'off', - ...pluginTurbo.configs['flat/recommended'].rules, + ...pluginTurbo.configs['flat/recommended'].rules, - 'unused-imports/no-unused-imports': 'error', + 'unused-imports/no-unused-imports': 'error', - // TYPESCRIPT RULE DISABLES - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-unsafe-argument': 'off', - '@typescript-eslint/no-unsafe-assignment': 'off', - '@typescript-eslint/no-unsafe-call': 'off', - '@typescript-eslint/no-unsafe-declaration-merging': 'off', - '@typescript-eslint/no-unsafe-member-access': 'off', - '@typescript-eslint/no-unsafe-return': 'off', - '@typescript-eslint/restrict-template-expressions': 'off', + // TYPESCRIPT RULE DISABLES + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-declaration-merging': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/restrict-template-expressions': 'off', + }, }, - }, - { - name: 'repo/global-temporary', - rules: { - // TODO: All rules below should be set to their defaults - // when we're able to make the appropriate changes. - '@typescript-eslint/await-thenable': 'warn', - '@typescript-eslint/ban-ts-comment': [ - `warn`, - { - 'ts-ignore': 'allow-with-description', - 'ts-expect-error': 'allow-with-description', - 'ts-check': 'allow-with-description', - }, - ], - '@typescript-eslint/consistent-type-imports': [ - 'error', - { - prefer: 'type-imports', - disallowTypeAnnotations: true, - fixStyle: 'separate-type-imports', - }, - ], - '@typescript-eslint/no-duplicate-type-constituents': 'off', - '@typescript-eslint/no-floating-promises': [ - 'warn', - { - ignoreVoid: true, - }, - ], - '@typescript-eslint/no-misused-promises': 'warn', - '@typescript-eslint/no-redundant-type-constituents': 'warn', - '@typescript-eslint/no-unnecessary-type-assertion': 'warn', - '@typescript-eslint/no-unsafe-enum-comparison': 'warn', - '@typescript-eslint/no-unused-vars': [ - 'error', - { - args: 'after-used', - argsIgnorePattern: '^_', - ignoreRestSiblings: true, - vars: 'all', - varsIgnorePattern: '^_', - }, - ], - '@typescript-eslint/prefer-promise-reject-errors': 'warn', - '@typescript-eslint/require-await': 'warn', + { + name: 'repo/global-temporary', + rules: { + // TODO: All rules below should be set to their defaults + // when we're able to make the appropriate changes. + '@typescript-eslint/await-thenable': 'warn', + '@typescript-eslint/ban-ts-comment': [ + `warn`, + { + 'ts-ignore': 'allow-with-description', + 'ts-expect-error': 'allow-with-description', + 'ts-check': 'allow-with-description', + }, + ], + '@typescript-eslint/consistent-type-imports': [ + 'error', + { + prefer: 'type-imports', + disallowTypeAnnotations: true, + fixStyle: 'separate-type-imports', + }, + ], + '@typescript-eslint/no-duplicate-type-constituents': 'off', + '@typescript-eslint/no-floating-promises': [ + 'warn', + { + ignoreVoid: true, + }, + ], + '@typescript-eslint/no-misused-promises': 'warn', + '@typescript-eslint/no-redundant-type-constituents': 'warn', + '@typescript-eslint/no-unnecessary-type-assertion': 'warn', + '@typescript-eslint/no-unsafe-enum-comparison': 'warn', + '@typescript-eslint/no-unused-vars': [ + 'error', + { + args: 'after-used', + argsIgnorePattern: '^_', + ignoreRestSiblings: true, + vars: 'all', + varsIgnorePattern: '^_', + }, + ], + '@typescript-eslint/prefer-promise-reject-errors': 'warn', + '@typescript-eslint/require-await': 'warn', - // FIXME: This rule should be enabled when we're able to support import aliases - 'import/no-unresolved': ['error', { ignore: ['^#', '^~'] }], + // FIXME: This rule should be enabled when we're able to support import aliases + 'import/no-unresolved': ['error', { ignore: ['^#', '^~'] }], - 'jsx-a11y/alt-text': 'warn', - 'jsx-a11y/html-has-lang': 'warn', - 'jsx-a11y/no-autofocus': 'warn', + 'jsx-a11y/alt-text': 'warn', + 'jsx-a11y/html-has-lang': 'warn', + 'jsx-a11y/no-autofocus': 'warn', - 'react/button-has-type': 'warn', - 'react/display-name': 'off', - 'react/jsx-curly-brace-presence': 'off', - 'react/jsx-no-leaked-render': 'off', - 'react/jsx-no-useless-fragment': 'warn', - 'react/jsx-sort-props': 'off', - }, - }, - { - name: 'repo/javascript', - files: JAVASCRIPT_FILES, - rules: { - 'no-unused-vars': [ - 'error', - { - args: 'after-used', - argsIgnorePattern: '^_', - ignoreRestSiblings: true, - vars: 'all', - varsIgnorePattern: '^_', - }, - ], - }, - }, - { - name: 'repo/typescript', - files: TYPESCRIPT_FILES, - extends: [pluginImport.flatConfigs.recommended, pluginImport.flatConfigs.typescript], - rules: { - 'no-unused-vars': 'off', - '@typescript-eslint/no-non-null-assertion': 'error', - }, - }, - { - name: 'repo/test', - files: TEST_FILES, - languageOptions: { - globals: pluginJest.environments.globals.globals, + 'react/button-has-type': 'warn', + 'react/display-name': 'off', + 'react/jsx-curly-brace-presence': 'off', + 'react/jsx-no-leaked-render': 'off', + 'react/jsx-no-useless-fragment': 'warn', + 'react/jsx-sort-props': 'off', + }, }, - plugins: { - jest: pluginJest, + { + name: 'repo/javascript', + files: JAVASCRIPT_FILES, + rules: { + 'no-unused-vars': [ + 'error', + { + args: 'after-used', + argsIgnorePattern: '^_', + ignoreRestSiblings: true, + vars: 'all', + varsIgnorePattern: '^_', + }, + ], + }, }, - rules: { - '@typescript-eslint/unbound-method': 'off', - 'jest/unbound-method': 'error', + { + name: 'repo/typescript', + files: TYPESCRIPT_FILES, + extends: [pluginImport.flatConfigs.recommended, pluginImport.flatConfigs.typescript], + rules: { + 'no-unused-vars': 'off', + '@typescript-eslint/no-non-null-assertion': 'error', + }, }, - }, - { - name: 'repo/react-hooks', - plugins: { - 'react-hooks': pluginReactHooks, + { + name: 'repo/test', + files: TEST_FILES, + languageOptions: { + globals: pluginJest.environments.globals.globals, + }, + plugins: { + jest: pluginJest, + }, + rules: { + '@typescript-eslint/unbound-method': 'off', + 'jest/unbound-method': 'error', + }, }, - rules: { - ...pluginReactHooks.configs.recommended.rules, - 'react-hooks/rules-of-hooks': 'warn', + { + name: 'repo/react-hooks', + plugins: { + 'react-hooks': pluginReactHooks, + }, + rules: { + ...pluginReactHooks.configs.recommended.rules, + 'react-hooks/rules-of-hooks': 'warn', + }, }, - }, - { - name: 'packages/clerk-js', - files: ['packages/clerk-js/src/ui/**/*'], - plugins: { - 'custom-rules': { - rules: { - 'no-navigate-useClerk': noNavigateUseClerk, + { + name: 'packages/clerk-js', + files: ['packages/clerk-js/src/ui/**/*'], + plugins: { + 'custom-rules': { + rules: { + 'no-navigate-useClerk': noNavigateUseClerk, + }, }, }, + rules: { + 'custom-rules/no-navigate-useClerk': 'error', + }, }, - rules: { - 'custom-rules/no-navigate-useClerk': 'error', - }, - }, - { - name: 'packages/clerk-js - vitest', - files: ['packages/clerk-js/src/**/*.spec.{ts,tsx}'], - rules: { - 'jest/unbound-method': 'off', - '@typescript-eslint/unbound-method': 'off', - }, - }, - { - name: 'packages/expo-passkeys', - files: ['packages/expo-passkeys/src/**/*'], - rules: { - 'no-restricted-imports': [ - 'error', - { - patterns: ['node:*'], - }, - ], + { + name: 'packages/clerk-js - vitest', + files: ['packages/clerk-js/src/**/*.spec.{ts,tsx}'], + rules: { + 'jest/unbound-method': 'off', + '@typescript-eslint/unbound-method': 'off', + }, }, - }, - { - name: 'packages/nextjs', - files: ['packages/nextjs/src/**/*'], - rules: { - 'turbo/no-undeclared-env-vars': [ - 'error', - { - allowList: ['_NEXT_ROUTER_BASEPATH'], - }, - ], + { + name: 'packages/expo-passkeys', + files: ['packages/expo-passkeys/src/**/*'], + rules: { + 'no-restricted-imports': [ + 'error', + { + patterns: ['node:*'], + }, + ], + }, }, - }, - { - name: 'packages/upgrade', - files: ['packages/upgrade/src/**/*'], - rules: { - 'import/no-unresolved': ['error', { ignore: ['^#', '^~', '@inkjs/ui', '^ink'] }], - 'react/no-unescaped-entities': 'off', - '@typescript-eslint/no-floating-promises': 'warn', + { + name: 'packages/nextjs', + files: ['packages/nextjs/src/**/*'], + rules: { + 'turbo/no-undeclared-env-vars': [ + 'error', + { + allowList: ['_NEXT_ROUTER_BASEPATH'], + }, + ], + }, }, - }, - { - name: 'repo/integration', - ...pluginPlaywright.configs['flat/recommended'], - files: ['integration/tests/**'], - rules: { - ...pluginPlaywright.configs['flat/recommended'].rules, - 'playwright/expect-expect': 'off', - 'playwright/no-skipped-test': 'off', - 'playwright/no-page-pause': 'warn', + { + name: 'packages/upgrade', + files: ['packages/upgrade/src/**/*'], + rules: { + 'import/no-unresolved': ['error', { ignore: ['^#', '^~', '@inkjs/ui', '^ink'] }], + 'react/no-unescaped-entities': 'off', + '@typescript-eslint/no-floating-promises': 'warn', + }, }, - }, - { - name: 'repo/scripts', - files: ['scripts/**/*'], - rules: { - 'turbo/no-undeclared-env-vars': 'off', + { + name: 'repo/integration', + ...pluginPlaywright.configs['flat/recommended'], + files: ['integration/tests/**'], + rules: { + ...pluginPlaywright.configs['flat/recommended'].rules, + 'playwright/expect-expect': 'off', + 'playwright/no-skipped-test': 'off', + 'playwright/no-page-pause': 'warn', + }, }, - }, - { - name: 'repo/jsdoc', - ...pluginJsDoc.configs['flat/recommended-typescript'], - files: ['packages/shared/src/**/*.{ts,tsx}'], - ignores: ['**/__tests__/**'], - plugins: { - jsdoc: pluginJsDoc, + { + name: 'repo/scripts', + files: ['scripts/**/*'], + rules: { + 'turbo/no-undeclared-env-vars': 'off', + }, }, - rules: { - ...pluginJsDoc.configs['flat/recommended-typescript'].rules, - 'jsdoc/check-examples': 'off', - 'jsdoc/informative-docs': 'warn', - 'jsdoc/check-tag-names': [ - 'warn', - { definedTags: ['inline', 'unionReturnHeadings', 'displayFunctionSignature', 'paramExtension'], typed: false }, - ], - 'jsdoc/require-hyphen-before-param-description': 'warn', - 'jsdoc/require-description': 'warn', - 'jsdoc/require-description-complete-sentence': 'warn', - 'jsdoc/require-param': ['warn', { ignoreWhenAllParamsMissing: true }], - 'jsdoc/require-param-description': 'warn', - 'jsdoc/require-returns': 'off', - 'jsdoc/tag-lines': [ - 'warn', - 'always', - { count: 1, applyToEndTag: false, startLines: 1, tags: { param: { lines: 'never' } } }, - ], + { + name: 'repo/jsdoc', + ...pluginJsDoc.configs['flat/recommended-typescript'], + files: ['packages/shared/src/**/*.{ts,tsx}'], + ignores: ['**/__tests__/**'], + plugins: { + jsdoc: pluginJsDoc, + }, + rules: { + ...pluginJsDoc.configs['flat/recommended-typescript'].rules, + 'jsdoc/check-examples': 'off', + 'jsdoc/informative-docs': 'warn', + 'jsdoc/check-tag-names': [ + 'warn', + { + definedTags: ['inline', 'unionReturnHeadings', 'displayFunctionSignature', 'paramExtension'], + typed: false, + }, + ], + 'jsdoc/require-hyphen-before-param-description': 'warn', + 'jsdoc/require-description': 'warn', + 'jsdoc/require-description-complete-sentence': 'warn', + 'jsdoc/require-param': ['warn', { ignoreWhenAllParamsMissing: true }], + 'jsdoc/require-param-description': 'warn', + 'jsdoc/require-returns': 'off', + 'jsdoc/tag-lines': [ + 'warn', + 'always', + { count: 1, applyToEndTag: false, startLines: 1, tags: { param: { lines: 'never' } } }, + ], + }, }, - }, - ...pluginYml.configs['flat/recommended'], - configPrettier, -]); + ...pluginYml.configs['flat/recommended'], + configPrettier, + ], + storybook.configs['flat/recommended'], +); diff --git a/packages/storybook/.storybook/main.ts b/packages/storybook/.storybook/main.ts index f7633aae817..baded089254 100644 --- a/packages/storybook/.storybook/main.ts +++ b/packages/storybook/.storybook/main.ts @@ -1,15 +1,18 @@ +import { createRequire } from 'node:module'; +import { dirname, join } from 'node:path'; import type { StorybookConfig } from '@storybook/react-vite'; +const require = createRequire(import.meta.url); + const config: StorybookConfig = { stories: ['../stories/**/*.stories.@(js|jsx|mjs|ts|tsx|mdx)'], - addons: ['@storybook/addon-essentials', 'storybook-dark-mode'], + addons: [getAbsolutePath('@storybook/addon-docs'), getAbsolutePath('@storybook/addon-themes')], + framework: { - name: '@storybook/react-vite', + name: getAbsolutePath('@storybook/react-vite'), options: {}, }, - docs: { - autodocs: 'tag', - }, + typescript: { check: false, reactDocgen: 'react-docgen-typescript', @@ -21,3 +24,7 @@ const config: StorybookConfig = { }; export default config; + +function getAbsolutePath(value: string): any { + return dirname(require.resolve(join(value, 'package.json'))); +} diff --git a/packages/storybook/.storybook/preview.tsx b/packages/storybook/.storybook/preview.tsx index dc72108f598..847cfd323f7 100644 --- a/packages/storybook/.storybook/preview.tsx +++ b/packages/storybook/.storybook/preview.tsx @@ -1,10 +1,9 @@ -// @ts-ignore - workspace package import import './main.css'; import { ClerkProvider } from '@clerk/clerk-react'; import { enUS, esES, frFR, koKR, zhCN } from '@clerk/localizations'; import type { Appearance } from '@clerk/types'; -import type { Preview } from '@storybook/react'; +import { withThemeByClassName } from '@storybook/addon-themes'; import React from 'react'; // Map locale selector values to localization resources @@ -16,7 +15,13 @@ const localeMap = { kr: koKR, } as const; -const preview: Preview = { +// Mock router functions for Storybook +const mockRouter = { + push: () => {}, + replace: () => {}, +}; + +const preview: any = { parameters: { controls: { matchers: { @@ -25,11 +30,6 @@ const preview: Preview = { }, }, layout: 'centered', - darkMode: { - stylePreview: true, - darkClass: 'dark', - lightClass: 'light', - }, }, globalTypes: { locale: { @@ -169,7 +169,14 @@ const preview: Preview = { spacing: '1rem', }, decorators: [ - (Story, context) => { + withThemeByClassName({ + themes: { + light: 'light', + dark: 'dark', + }, + defaultTheme: 'light', + }), + (Story: any, context: any) => { const { colorPrimary, colorPrimaryForeground, @@ -225,8 +232,10 @@ const preview: Preview = { ClerkProvider, { publishableKey: 'pk_test_dG91Y2hlZC1sYWR5YmlyZC0yMy5jbGVyay5hY2NvdW50cy5kZXYk', - appearance: appearance, - localization: localization, + appearance, + localization, + routerPush: mockRouter.push, + routerReplace: mockRouter.replace, } as any, React.createElement(Story), ); diff --git a/packages/storybook/package.json b/packages/storybook/package.json index 55f032be2ae..4ba948de186 100644 --- a/packages/storybook/package.json +++ b/packages/storybook/package.json @@ -19,23 +19,20 @@ "@clerk/clerk-react": "workspace:*", "@clerk/localizations": "workspace:*", "@clerk/shared": "workspace:*", + "@clerk/themes": "workspace:*", "@clerk/types": "workspace:*", "react": "18.2.0", - "react-dom": "18.2.0", - "storybook-dark-mode": "4.0.2" + "react-dom": "18.2.0" }, "devDependencies": { - "@storybook/addon-essentials": "^8.6.14", - "@storybook/addon-interactions": "^8.6.14", - "@storybook/addon-links": "^8.6.14", - "@storybook/addon-onboarding": "^8.6.14", - "@storybook/blocks": "^8.6.14", - "@storybook/react": "^8.6.14", - "@storybook/react-vite": "^8.6.14", - "@storybook/test": "^8.6.14", + "@storybook/addon-docs": "^9.0.17", + "@storybook/addon-links": "^9.0.17", + "@storybook/addon-onboarding": "^9.0.17", + "@storybook/react-vite": "^9.0.17", "@types/react": "18.2.37", "@types/react-dom": "18.2.15", - "storybook": "^8.6.14", + "eslint-plugin-storybook": "9.0.17", + "storybook": "^9.0.17", "typescript": "5.2.2", "vite": "^6.0.0" }, diff --git a/packages/storybook/stories/SignIn.stories.tsx b/packages/storybook/stories/SignIn.stories.tsx index 68bf77deda6..a1668772f16 100644 --- a/packages/storybook/stories/SignIn.stories.tsx +++ b/packages/storybook/stories/SignIn.stories.tsx @@ -1,6 +1,5 @@ -import React from 'react'; -import type { Meta, StoryObj } from '@storybook/react'; import { SignIn } from '@clerk/clerk-react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; // Define the story metadata const meta: Meta = { diff --git a/packages/storybook/stories/SignUp.stories.tsx b/packages/storybook/stories/SignUp.stories.tsx index b67660d9c54..34de14bedff 100644 --- a/packages/storybook/stories/SignUp.stories.tsx +++ b/packages/storybook/stories/SignUp.stories.tsx @@ -1,5 +1,5 @@ import { SignUp } from '@clerk/clerk-react'; -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; // Define the story metadata const meta: Meta = { diff --git a/packages/storybook/stories/UserButton.stories.tsx b/packages/storybook/stories/UserButton.stories.tsx index de746dc0a43..d3bc578fe0c 100644 --- a/packages/storybook/stories/UserButton.stories.tsx +++ b/packages/storybook/stories/UserButton.stories.tsx @@ -1,5 +1,5 @@ import { UserButton } from '@clerk/clerk-react'; -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; // Define the story metadata const meta: Meta = { diff --git a/packages/storybook/stories/UserProfile.stories.tsx b/packages/storybook/stories/UserProfile.stories.tsx index 9172a496947..8988249b2c0 100644 --- a/packages/storybook/stories/UserProfile.stories.tsx +++ b/packages/storybook/stories/UserProfile.stories.tsx @@ -1,5 +1,5 @@ import { UserProfile } from '@clerk/clerk-react'; -import type { Meta, StoryObj } from '@storybook/react'; +import type { Meta, StoryObj } from '@storybook/react-vite'; // Define the story metadata const meta: Meta = { diff --git a/packages/storybook/stories/navigation-pattern.md b/packages/storybook/stories/navigation-pattern.md new file mode 100644 index 00000000000..1d1d84d89e3 --- /dev/null +++ b/packages/storybook/stories/navigation-pattern.md @@ -0,0 +1,113 @@ +# Storybook Navigation Pattern + +This document explains how to implement navigation between stories in Storybook, specifically addressing the iframe reload issue when using authentication components like Clerk's SignIn. + +## The Problem + +When using `forceRedirectUrl` or `afterSignInUrl` with authentication components in Storybook, the redirect happens within the iframe context, causing: + +- Nested iframe reloads +- Poor user experience +- Broken navigation flow + +## The Solution + +Use React state management combined with Storybook's `@storybook/addon-links` to handle navigation: + +### 1. Install Dependencies + +```bash +pnpm add -D @storybook/addon-links +``` + +### 2. Configure Storybook + +In `.storybook/main.ts`: + +```typescript +export default { + addons: ['@storybook/addon-links'], + // ... other config +}; +``` + +### 3. Implementation Pattern + +```typescript +import React from 'react'; +import { SignIn, useUser } from '@clerk/clerk-react'; +import { linkTo } from '@storybook/addon-links'; + +export const WithNavigation: Story = { + render: (args) => { + const { isSignedIn } = useUser(); + + // Navigate when user becomes signed in + React.useEffect(() => { + if (isSignedIn) { + const timer = setTimeout(() => { + linkTo('Components/UserProfile', 'WithNavigation')(); + }, 100); + return () => clearTimeout(timer); + } + }, [isSignedIn]); + + // Override redirect URLs to prevent iframe issues + const modifiedArgs = { + ...args, + afterSignInUrl: undefined, + forceRedirectUrl: undefined, + }; + + return ; + }, +}; +``` + +### 4. Bidirectional Navigation + +Create corresponding navigation in the target story: + +```typescript +export const WithNavigation: Story = { + render: (args) => { + const { isSignedIn } = useUser(); + + if (!isSignedIn) { + return ( +
+

Please sign in to view your profile

+ +
+ ); + } + + return ; + }, +}; +``` + +## Key Benefits + +- **No iframe reload issues**: Navigation happens within Storybook's navigation system +- **Smooth user experience**: Seamless transitions between stories +- **Maintains context**: Storybook's iframe context is preserved +- **Works with authentication**: Compatible with Clerk and other auth providers + +## Use Cases + +This pattern is useful for: + +- Authentication flows (Sign In → Profile) +- Multi-step forms +- Wizard-like components +- Any scenario requiring story-to-story navigation + +## Examples + +See the following stories for working examples: + +- `Components/SignIn` → `WithNavigation` and `NavigationDemo` +- `Components/UserProfile` → `WithNavigation` diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9a9b70de939..fb41af44245 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -102,16 +102,16 @@ importers: version: 1.44.1 '@testing-library/dom': specifier: ^10.1.0 - version: 10.1.0 + version: 10.4.0 '@testing-library/jest-dom': specifier: ^6.4.6 - version: 6.4.6(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.16.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.16.0)(typescript@5.8.3)))(vitest@3.0.5(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@22.16.0)(jiti@2.4.2)(jsdom@24.1.3)(lightningcss@1.27.0)(msw@2.10.2(@types/node@22.16.0)(typescript@5.8.3))(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0)) + version: 6.6.3 '@testing-library/react': specifier: ^16.0.0 - version: 16.0.0(@testing-library/dom@10.1.0)(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.0.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@testing-library/user-event': specifier: ^14.5.2 - version: 14.5.2(@testing-library/dom@10.1.0) + version: 14.6.1(@testing-library/dom@10.4.0) '@types/cross-spawn': specifier: ^6.0.6 version: 6.0.6 @@ -968,6 +968,9 @@ importers: '@clerk/shared': specifier: workspace:* version: link:../shared + '@clerk/themes': + specifier: workspace:* + version: link:../themes '@clerk/types': specifier: workspace:* version: link:../types @@ -979,41 +982,35 @@ importers: version: 18.2.0(react@18.2.0) storybook-dark-mode: specifier: 4.0.2 - version: 4.0.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) + version: 4.0.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3)) devDependencies: - '@storybook/addon-essentials': - specifier: ^8.6.14 - version: 8.6.14(@types/react@18.2.37)(storybook@8.6.14(prettier@3.5.3)) - '@storybook/addon-interactions': - specifier: ^8.6.14 - version: 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/addon-docs': + specifier: ^9.0.17 + version: 9.0.17(@types/react@18.2.37)(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3)) '@storybook/addon-links': - specifier: ^8.6.14 - version: 8.6.14(react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) + specifier: ^9.0.17 + version: 9.0.17(react@18.2.0)(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3)) '@storybook/addon-onboarding': - specifier: ^8.6.14 - version: 8.6.14(storybook@8.6.14(prettier@3.5.3)) - '@storybook/blocks': - specifier: ^8.6.14 - version: 8.6.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) - '@storybook/react': - specifier: ^8.6.14 - version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.2.2) + specifier: ^9.0.17 + version: 9.0.17(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3)) + '@storybook/addon-themes': + specifier: 9.0.17 + version: 9.0.17(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3)) '@storybook/react-vite': - specifier: ^8.6.14 - version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.45.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.2.2)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0)) - '@storybook/test': - specifier: ^8.6.14 - version: 8.6.14(storybook@8.6.14(prettier@3.5.3)) + specifier: ^9.0.17 + version: 9.0.17(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.45.0)(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3))(typescript@5.2.2)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0)) '@types/react': specifier: 18.2.37 version: 18.2.37 '@types/react-dom': specifier: 18.2.15 version: 18.2.15 + eslint-plugin-storybook: + specifier: 9.0.17 + version: 9.0.17(eslint@9.27.0(jiti@2.4.2))(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3))(typescript@5.2.2) storybook: - specifier: ^8.6.14 - version: 8.6.14(prettier@3.5.3) + specifier: ^9.0.17 + version: 9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3) typescript: specifier: 5.2.2 version: 5.2.2 @@ -3374,11 +3371,11 @@ packages: resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0': - resolution: {integrity: sha512-qYDdL7fPwLRI+bJNurVcis+tNgJmvWjH4YTBGXTA8xMuxFrnAz6E5o35iyzyKbq5J5Lr8mJGfrR5GXl+WGwhgQ==} + '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1': + resolution: {integrity: sha512-J4BaTocTOYFkMHIra1JDWrMWpNmBl4EkplIwHEsV8aeUOtdWjwSnln9U7twjMFTAEB7mptNtSKyVi1Y2W9sDJw==} peerDependencies: typescript: '>= 4.3.x' - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 peerDependenciesMeta: typescript: optional: true @@ -3456,82 +3453,66 @@ packages: '@miniflare/cache@2.14.4': resolution: {integrity: sha512-ayzdjhcj+4mjydbNK7ZGDpIXNliDbQY4GPcY2KrYw0v1OSUdj5kZUkygD09fqoGRfAks0d91VelkyRsAXX8FQA==} engines: {node: '>=16.13'} - deprecated: Miniflare v2 is no longer supported. Please upgrade to Miniflare v4 '@miniflare/core@2.14.4': resolution: {integrity: sha512-FMmZcC1f54YpF4pDWPtdQPIO8NXfgUxCoR9uyrhxKJdZu7M6n8QKopPVNuaxR40jcsdxb7yKoQoFWnHfzJD9GQ==} engines: {node: '>=16.13'} - deprecated: Miniflare v2 is no longer supported. Please upgrade to Miniflare v4 '@miniflare/d1@2.14.4': resolution: {integrity: sha512-pMBVq9XWxTDdm+RRCkfXZP+bREjPg1JC8s8C0JTovA9OGmLQXqGTnFxIaS9vf1d8k3uSUGhDzPTzHr0/AUW1gA==} engines: {node: '>=16.7'} - deprecated: Miniflare v2 is no longer supported. Please upgrade to Miniflare v4 '@miniflare/durable-objects@2.14.4': resolution: {integrity: sha512-+JrmHP6gHHrjxV8S3axVw5lGHLgqmAGdcO/1HJUPswAyJEd3Ah2YnKhpo+bNmV4RKJCtEq9A2hbtVjBTD2YzwA==} engines: {node: '>=16.13'} - deprecated: Miniflare v2 is no longer supported. Please upgrade to Miniflare v4 '@miniflare/html-rewriter@2.14.4': resolution: {integrity: sha512-GB/vZn7oLbnhw+815SGF+HU5EZqSxbhIa3mu2L5MzZ2q5VOD5NHC833qG8c2GzDPhIaZ99ITY+ZJmbR4d+4aNQ==} engines: {node: '>=16.13'} - deprecated: Miniflare v2 is no longer supported. Please upgrade to Miniflare v4 '@miniflare/kv@2.14.4': resolution: {integrity: sha512-QlERH0Z+klwLg0xw+/gm2yC34Nnr/I0GcQ+ASYqXeIXBwjqOtMBa3YVQnocaD+BPy/6TUtSpOAShHsEj76R2uw==} engines: {node: '>=16.13'} - deprecated: Miniflare v2 is no longer supported. Please upgrade to Miniflare v4 '@miniflare/queues@2.14.4': resolution: {integrity: sha512-aXQ5Ik8Iq1KGMBzGenmd6Js/jJgqyYvjom95/N9GptCGpiVWE5F0XqC1SL5rCwURbHN+aWY191o8XOFyY2nCUA==} engines: {node: '>=16.7'} - deprecated: Miniflare v2 is no longer supported. Please upgrade to Miniflare v4 '@miniflare/r2@2.14.4': resolution: {integrity: sha512-4ctiZWh7Ty7LB3brUjmbRiGMqwyDZgABYaczDtUidblo2DxX4JZPnJ/ZAyxMPNJif32kOJhcg6arC2hEthR9Sw==} engines: {node: '>=16.13'} - deprecated: Miniflare v2 is no longer supported. Please upgrade to Miniflare v4 '@miniflare/runner-vm@2.14.4': resolution: {integrity: sha512-Nog0bB9SVhPbZAkTWfO4lpLAUsBXKEjlb4y+y66FJw77mPlmPlVdpjElCvmf8T3VN/pqh83kvELGM+/fucMf4g==} engines: {node: '>=16.13'} - deprecated: Miniflare v2 is no longer supported. Please upgrade to Miniflare v4 '@miniflare/shared-test-environment@2.14.4': resolution: {integrity: sha512-FdU2/8wEd00vIu+MfofLiHcfZWz+uCbE2VTL85KpyYfBsNGAbgRtzFMpOXdoXLqQfRu6MBiRwWpb2FbMrBzi7g==} engines: {node: '>=16.13'} - deprecated: Miniflare v2 is no longer supported. Please upgrade to Miniflare v4 '@miniflare/shared@2.14.4': resolution: {integrity: sha512-upl4RSB3hyCnITOFmRZjJj4A72GmkVrtfZTilkdq5Qe5TTlzsjVeDJp7AuNUM9bM8vswRo+N5jOiot6O4PVwwQ==} engines: {node: '>=16.13'} - deprecated: Miniflare v2 is no longer supported. Please upgrade to Miniflare v4 '@miniflare/sites@2.14.4': resolution: {integrity: sha512-O5npWopi+fw9W9Ki0gy99nuBbgDva/iXy8PDC4dAXDB/pz45nISDqldabk0rL2t4W2+lY6LXKzdOw+qJO1GQTA==} engines: {node: '>=16.13'} - deprecated: Miniflare v2 is no longer supported. Please upgrade to Miniflare v4 '@miniflare/storage-file@2.14.4': resolution: {integrity: sha512-JxcmX0hXf4cB0cC9+s6ZsgYCq+rpyUKRPCGzaFwymWWplrO3EjPVxKCcMxG44jsdgsII6EZihYUN2J14wwCT7A==} engines: {node: '>=16.13'} - deprecated: Miniflare v2 is no longer supported. Please upgrade to Miniflare v4 '@miniflare/storage-memory@2.14.4': resolution: {integrity: sha512-9jB5BqNkMZ3SFjbPFeiVkLi1BuSahMhc/W1Y9H0W89qFDrrD+z7EgRgDtHTG1ZRyi9gIlNtt9qhkO1B6W2qb2A==} engines: {node: '>=16.13'} - deprecated: Miniflare v2 is no longer supported. Please upgrade to Miniflare v4 '@miniflare/watcher@2.14.4': resolution: {integrity: sha512-PYn05ET2USfBAeXF6NZfWl0O32KVyE8ncQ/ngysrh3hoIV7l3qGGH7ubeFx+D8VWQ682qYhwGygUzQv2j1tGGg==} engines: {node: '>=16.13'} - deprecated: Miniflare v2 is no longer supported. Please upgrade to Miniflare v4 '@miniflare/web-sockets@2.14.4': resolution: {integrity: sha512-stTxvLdJ2IcGOs76AnvGYAzGvx8JvQPRxC5DW0P5zdAAnhL33noqb5LKdPt3P37BKp9FzBKZHuihQI9oVqwm0g==} engines: {node: '>=16.13'} - deprecated: Miniflare v2 is no longer supported. Please upgrade to Miniflare v4 '@modelcontextprotocol/sdk@1.7.0': resolution: {integrity: sha512-IYPe/FLpvF3IZrd/f5p5ffmWhMc3aEMuM2wGJASDqC2Ge7qatVCdbfPx3n/5xFeb19xN0j/911M2AaFuircsWA==} @@ -4617,92 +4598,35 @@ packages: peerDependencies: xstate: ^5.5.1 - '@storybook/addon-actions@8.6.14': - resolution: {integrity: sha512-mDQxylxGGCQSK7tJPkD144J8jWh9IU9ziJMHfB84PKpI/V5ZgqMDnpr2bssTrUaGDqU5e1/z8KcRF+Melhs9pQ==} - peerDependencies: - storybook: ^8.6.14 - - '@storybook/addon-backgrounds@8.6.14': - resolution: {integrity: sha512-l9xS8qWe5n4tvMwth09QxH2PmJbCctEvBAc1tjjRasAfrd69f7/uFK4WhwJAstzBTNgTc8VXI4w8ZR97i1sFbg==} - peerDependencies: - storybook: ^8.6.14 - - '@storybook/addon-controls@8.6.14': - resolution: {integrity: sha512-IiQpkNJdiRyA4Mq9mzjZlvQugL/aE7hNgVxBBGPiIZG6wb6Ht9hNnBYpap5ZXXFKV9p2qVI0FZK445ONmAa+Cw==} - peerDependencies: - storybook: ^8.6.14 - - '@storybook/addon-docs@8.6.14': - resolution: {integrity: sha512-Obpd0OhAF99JyU5pp5ci17YmpcQtMNgqW2pTXV8jAiiipWpwO++hNDeQmLmlSXB399XjtRDOcDVkoc7rc6JzdQ==} + '@storybook/addon-docs@9.0.17': + resolution: {integrity: sha512-LOX/kKgQGnyulrqZHsvf77+ZoH/nSUaplGr5hvZglW/U6ak6fO9seJyXAzVKEnC6p+F8n02kFBZbi3s+znQhSg==} peerDependencies: - storybook: ^8.6.14 + storybook: ^9.0.17 - '@storybook/addon-essentials@8.6.14': - resolution: {integrity: sha512-5ZZSHNaW9mXMOFkoPyc3QkoNGdJHETZydI62/OASR0lmPlJ1065TNigEo5dJddmZNn0/3bkE8eKMAzLnO5eIdA==} - peerDependencies: - storybook: ^8.6.14 - - '@storybook/addon-highlight@8.6.14': - resolution: {integrity: sha512-4H19OJlapkofiE9tM6K/vsepf4ir9jMm9T+zw5L85blJZxhKZIbJ6FO0TCG9PDc4iPt3L6+aq5B0X29s9zicNQ==} - peerDependencies: - storybook: ^8.6.14 - - '@storybook/addon-interactions@8.6.14': - resolution: {integrity: sha512-8VmElhm2XOjh22l/dO4UmXxNOolGhNiSpBcls2pqWSraVh4a670EyYBZsHpkXqfNHo2YgKyZN3C91+9zfH79qQ==} - peerDependencies: - storybook: ^8.6.14 - - '@storybook/addon-links@8.6.14': - resolution: {integrity: sha512-DRlXHIyZzOruAZkxmXfVgTF+4d6K27pFcH4cUsm3KT1AXuZbr23lb5iZHpUZoG6lmU85Sru4xCEgewSTXBIe1w==} + '@storybook/addon-links@9.0.17': + resolution: {integrity: sha512-c4hYojq0O6n5fD8MS+Ss1njR3qs88LLlO3LLaRD4bxsIgn8WFNjgG5677M7m8WjzTgWSxFWN0KAra2kaDZ8Jlg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.6.14 + storybook: ^9.0.17 peerDependenciesMeta: react: optional: true - '@storybook/addon-measure@8.6.14': - resolution: {integrity: sha512-1Tlyb72NX8aAqm6I6OICsUuGOP6hgnXcuFlXucyhKomPa6j3Eu2vKu561t/f0oGtAK2nO93Z70kVaEh5X+vaGw==} - peerDependencies: - storybook: ^8.6.14 - - '@storybook/addon-onboarding@8.6.14': - resolution: {integrity: sha512-bHdHiGJFigVcSzMIsNLHY5IODZHr+nKwyz5/QOZLMkLcGH2IaUbOJfm4RyGOaTTPsUtAKbdsVXNEG3Otf+qO9A==} + '@storybook/addon-onboarding@9.0.17': + resolution: {integrity: sha512-WoZZ8d58gP6uBu6OJ2K1GjBSM4+Kcr0I9lo0z3convzYqxrhfUm9pNEwVm57KCbVVyBbIKmevddCsSFoPC5u6Q==} peerDependencies: - storybook: ^8.6.14 + storybook: ^9.0.17 - '@storybook/addon-outline@8.6.14': - resolution: {integrity: sha512-CW857JvN6OxGWElqjlzJO2S69DHf+xO3WsEfT5mT3ZtIjmsvRDukdWfDU9bIYUFyA2lFvYjncBGjbK+I91XR7w==} + '@storybook/addon-themes@9.0.17': + resolution: {integrity: sha512-qQCoWig+wPVVuiibk8AuUUH/hS9hbLFt2IdjpiCIObAjStqSQMosr/1b95FcxppBCEa8uTltEkGdxQPdpdVZEQ==} peerDependencies: - storybook: ^8.6.14 + storybook: ^9.0.17 - '@storybook/addon-toolbars@8.6.14': - resolution: {integrity: sha512-W/wEXT8h3VyZTVfWK/84BAcjAxTdtRiAkT2KAN0nbSHxxB5KEM1MjKpKu2upyzzMa3EywITqbfy4dP6lpkVTwQ==} + '@storybook/builder-vite@9.0.17': + resolution: {integrity: sha512-lyuvgGhb0NaVk1tdB4xwzky6+YXQfxlxfNQqENYZ9uYQZdPfErMa4ZTXVQTV+CQHAa2NL+p/dG2JPAeu39e9UA==} peerDependencies: - storybook: ^8.6.14 - - '@storybook/addon-viewport@8.6.14': - resolution: {integrity: sha512-gNzVQbMqRC+/4uQTPI2ZrWuRHGquTMZpdgB9DrD88VTEjNudP+J6r8myLfr2VvGksBbUMHkGHMXHuIhrBEnXYA==} - peerDependencies: - storybook: ^8.6.14 - - '@storybook/blocks@8.6.14': - resolution: {integrity: sha512-rBMHAfA39AGHgkrDze4RmsnQTMw1ND5fGWobr9pDcJdnDKWQWNRD7Nrlxj0gFlN3n4D9lEZhWGdFrCbku7FVAQ==} - 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.14 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - - '@storybook/builder-vite@8.6.14': - resolution: {integrity: sha512-ajWYhy32ksBWxwWHrjwZzyC0Ii5ZTeu5lsqA95Q/EQBB0P5qWlHWGM3AVyv82Mz/ND03ebGy123uVwgf6olnYQ==} - peerDependencies: - storybook: ^8.6.14 - vite: ^4.0.0 || ^5.0.0 || ^6.0.0 + storybook: ^9.0.17 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 '@storybook/components@8.6.14': resolution: {integrity: sha512-HNR2mC5I4Z5ek8kTrVZlIY/B8gJGs5b3XdZPBPBopTIN6U/YHXiDyOjY3JlaS4fSG1fVhp/Qp1TpMn1w/9m1pw==} @@ -4714,18 +4638,10 @@ packages: 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.14': - resolution: {integrity: sha512-1P/w4FSNRqP8j3JQBOi3yGt8PVOgSRbP66Ok520T78eJBeqx9ukCfl912PQZ7SPbW3TIunBwLXMZOjZwBB/JmA==} - peerDependencies: - prettier: ^2 || ^3 - peerDependenciesMeta: - prettier: - optional: true - - '@storybook/csf-plugin@8.6.14': - resolution: {integrity: sha512-dErtc9teAuN+eelN8FojzFE635xlq9cNGGGEu0WEmMUQ4iJ8pingvBO1N8X3scz4Ry7KnxX++NNf3J3gpxS8qQ==} + '@storybook/csf-plugin@9.0.17': + resolution: {integrity: sha512-6Q4eo1ObrLlsnB6bIt6T8+45XAb4to2pQGNrI7QPkLQRLrZinrJcNbLY7AGkyIoCOEsEbq08n09/nClQUbu8HA==} peerDependencies: - storybook: ^8.6.14 + storybook: ^9.0.17 '@storybook/global@5.0.0': resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} @@ -4737,61 +4653,39 @@ packages: 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.14': - resolution: {integrity: sha512-iG4MlWCcz1L7Yu8AwgsnfVAmMbvyRSk700Mfy2g4c8y5O+Cv1ejshE1LBBsCwHgkuqU0H4R0qu4g23+6UnUemQ==} - peerDependencies: - storybook: ^8.6.14 - '@storybook/manager-api@8.6.14': resolution: {integrity: sha512-ez0Zihuy17udLbfHZQXkGqwtep0mSGgHcNzGN7iZrMP1m+VmNo+7aGCJJdvXi7+iU3yq8weXSQFWg5DqWgLS7g==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/preview-api@8.6.14': - resolution: {integrity: sha512-2GhcCd4dNMrnD7eooEfvbfL4I83qAqEyO0CO7JQAmIO6Rxb9BsOLLI/GD5HkvQB73ArTJ+PT50rfaO820IExOQ==} - peerDependencies: - 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.14': - resolution: {integrity: sha512-0hixr3dOy3f3M+HBofp3jtMQMS+sqzjKNgl7Arfuj3fvjmyXOks/yGjDImySR4imPtEllvPZfhiQNlejheaInw==} + '@storybook/react-dom-shim@9.0.17': + resolution: {integrity: sha512-ak/x/m6MDDxdE6rCDymTltaiQF3oiKrPHSwfM+YPgQR6MVmzTTs4+qaPfeev7FZEHq23IkfDMTmSTTJtX7Vs9A==} 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.14 + storybook: ^9.0.17 - '@storybook/react-vite@8.6.14': - resolution: {integrity: sha512-FZU0xMPxa4/TO87FgcWwappOxLBHZV5HSRK5K+2bJD7rFJAoNorbHvB4Q1zvIAk7eCMjkr2GPCPHx9PRB9vJFg==} - engines: {node: '>=18.0.0'} + '@storybook/react-vite@9.0.17': + resolution: {integrity: sha512-wx1yKScni4ifOC/ccqpnnpceQbyF2xto+jHGsyua+M4UUCQdS2NYPDR8JFWp1YvBhVt2cQiD6SAltVGM9QLGnQ==} + engines: {node: '>=20.0.0'} peerDependencies: - '@storybook/test': 8.6.14 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.14 - vite: ^4.0.0 || ^5.0.0 || ^6.0.0 - peerDependenciesMeta: - '@storybook/test': - optional: true + storybook: ^9.0.17 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 - '@storybook/react@8.6.14': - resolution: {integrity: sha512-BOepx5bBFwl/CPI+F+LnmMmsG1wQYmrX/UQXgUbHQUU9Tj7E2ndTnNbpIuSLc8IrM03ru+DfwSg1Co3cxWtT+g==} - engines: {node: '>=18.0.0'} + '@storybook/react@9.0.17': + resolution: {integrity: sha512-wssao+uXg72OHtEJdQmmQJGdX90x/aU/6avoP3fgVgepWdZXVgciS9mnqHjKRF/vP+vPOlNQcJjojF/zTtq5qg==} + engines: {node: '>=20.0.0'} peerDependencies: - '@storybook/test': 8.6.14 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.14 - typescript: '>= 4.2.x' + storybook: ^9.0.17 + typescript: '>= 4.9.x' peerDependenciesMeta: - '@storybook/test': - optional: true typescript: optional: true - '@storybook/test@8.6.14': - resolution: {integrity: sha512-GkPNBbbZmz+XRdrhMtkxPotCLOQ1BaGNp/gFZYdGDk2KmUWBKmvc5JxxOhtoXM2703IzNFlQHSSNnhrDZYuLlw==} - peerDependencies: - storybook: ^8.6.14 - '@storybook/theming@8.6.14': resolution: {integrity: sha512-r4y+LsiB37V5hzpQo+BM10PaCsp7YlZ0YcZzQP1OCkPlYXmUAFy2VvDKaFRpD8IeNPKug2u4iFm/laDEbs03dg==} peerDependencies: @@ -5096,10 +4990,6 @@ packages: resolution: {integrity: sha512-3nuYsTyaq6ZN7jRZ9z6Gj3GXZqBOqOT0yzd/WZ33ZFfv4yVNIvsa5Lw+M1j3sgyEAxKMqGu/FaNi7FCjr3yOdw==} engines: {node: '>=12'} - '@testing-library/dom@10.1.0': - resolution: {integrity: sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==} - engines: {node: '>=18'} - '@testing-library/dom@10.4.0': resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} engines: {node: '>=18'} @@ -5108,29 +4998,8 @@ packages: resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} engines: {node: '>=14'} - '@testing-library/jest-dom@6.4.6': - resolution: {integrity: sha512-8qpnGVincVDLEcQXWaHOf6zmlbwTKc6Us6PPu4CRnPXCzo2OGBS5cwgMMOWdxDpEz1mkbvXHpEy99M5Yvt682w==} - engines: {node: '>=14', npm: '>=6', yarn: '>=1'} - peerDependencies: - '@jest/globals': '>= 28' - '@types/bun': latest - '@types/jest': '>= 28' - jest: 29.7.0 - vitest: '>= 0.32' - peerDependenciesMeta: - '@jest/globals': - optional: true - '@types/bun': - optional: true - '@types/jest': - optional: true - jest: - optional: true - vitest: - optional: true - - '@testing-library/jest-dom@6.5.0': - resolution: {integrity: sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==} + '@testing-library/jest-dom@6.6.3': + resolution: {integrity: sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} '@testing-library/react@16.0.0': @@ -5148,8 +5017,8 @@ packages: '@types/react-dom': optional: true - '@testing-library/user-event@14.5.2': - resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} engines: {node: '>=12', npm: '>=6'} peerDependencies: '@testing-library/dom': '>=7.21.4' @@ -5217,6 +5086,9 @@ packages: '@types/bonjour@3.5.13': resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} + '@types/chai@5.2.2': + resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} + '@types/chrome@0.0.114': resolution: {integrity: sha512-i7qRr74IrxHtbnrZSKUuP5Uvd5EOKwlwJq/yp7+yTPihOXnPhNQO4Z5bqb1XTnrjdbUKEJicaVVbhcgtRijmLA==} @@ -5247,6 +5119,9 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/diff-match-patch@1.0.36': resolution: {integrity: sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==} @@ -5456,9 +5331,6 @@ packages: '@types/uuid@10.0.0': resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} - '@types/uuid@9.0.8': - resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - '@types/webextension-polyfill@0.10.7': resolution: {integrity: sha512-10ql7A0qzBmFB+F+qAke/nP1PIonS0TXZAOMVOxEUsm+lGSW6uwVcISFNa0I4Oyj0884TZVWGGMIWeXOVSNFHw==} @@ -5751,12 +5623,12 @@ packages: '@vitest/browser': optional: true - '@vitest/expect@2.0.5': - resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} - '@vitest/expect@3.0.5': resolution: {integrity: sha512-nNIOqupgZ4v5jWuQx2DSlHLEs7Q4Oh/7AYwNyE+k0UQzG7tSmjPXShUikn1mpNGzYEN2jJbTvLejwShMitovBA==} + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + '@vitest/mocker@3.0.5': resolution: {integrity: sha512-CLPNBFBIE7x6aEGbIjaQAX03ZZlBMaWwAjBdMkIf/cAn6xzLTiM3zYqO/WAbieEjsAZir6tO71mzeHZoodThvw==} peerDependencies: @@ -5768,36 +5640,30 @@ packages: 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.0.5': resolution: {integrity: sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA==} + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + '@vitest/runner@3.0.5': resolution: {integrity: sha512-BAiZFityFexZQi2yN4OX3OkJC6scwRo8EhRB0Z5HIGGgd2q+Nq29LgHU/+ovCtd0fOfXj5ZI6pwdlUmC5bpi8A==} '@vitest/snapshot@3.0.5': resolution: {integrity: sha512-GJPZYcd7v8QNUJ7vRvLDmRwl+a1fGg4T/54lZXe+UOGy47F9yUfE18hRCtXL5aHN/AONu29NGzIXSVFh9K0feA==} - '@vitest/spy@2.0.5': - resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} - '@vitest/spy@3.0.5': resolution: {integrity: sha512-5fOzHj0WbUNqPK6blI/8VzZdkBlQLnT25knX0r4dbZI9qoZDf3qAdjoMmDcLG5A83W6oUUFJgUd0EYBc2P5xqg==} - '@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/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} '@vitest/utils@3.0.5': resolution: {integrity: sha512-N9AX0NUoUtVwKwy21JtwzaqR5L5R5A99GAbrHfCCXK1lp593i/3AZAXhSP43wRQuxYsflrdzEfXZFo1reR1Nkg==} + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + '@volar/language-core@2.1.6': resolution: {integrity: sha512-pAlMCGX/HatBSiDFMdMyqUshkbwWbLxpN/RL7HCQDOo2gYBE+uS+nanosLc1qR6pTQ/U8q00xt8bdrrAFPSC0A==} @@ -6615,9 +6481,6 @@ packages: brotli@1.3.3: resolution: {integrity: sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==} - browser-assert@1.2.1: - resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} - browser-tabs-lock@1.3.0: resolution: {integrity: sha512-g6nHaobTiT0eMZ7jh16YpD2kcjAp+PInbiVq3M1x6KKaEIVhT4v9oURNIpZLOZ3LQbQ3XYfNhMAb/9hzNLIWrw==} @@ -6777,10 +6640,6 @@ packages: engines: {node: '>=10'} hasBin: true - chai@5.1.2: - resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} - engines: {node: '>=12'} - chai@5.2.1: resolution: {integrity: sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==} engines: {node: '>=18'} @@ -8262,6 +8121,13 @@ packages: peerDependencies: eslint: '>=5.0.0' + eslint-plugin-storybook@9.0.17: + resolution: {integrity: sha512-IuTdlwCEwoDNobdygRCxNhlKXHmsDfPtPvHGcsY35x2Bx8KItrjfekO19gJrjc1VT2CMfcZMYF8OBKaxHELupw==} + engines: {node: '>=20.0.0'} + peerDependencies: + eslint: '>=8' + storybook: ^9.0.17 + eslint-plugin-turbo@2.5.3: resolution: {integrity: sha512-DlXZd+LgpDlxH/6IsiAXLhy82x0jeJDm0XBEqP6Le08uy0HBQkjCUt7SmXNp8esAtX9RYe6oDClbNbmI1jtK5g==} peerDependencies: @@ -10657,10 +10523,6 @@ packages: resolution: {integrity: sha512-8rbuNizut2gW94kv7pqgt0dvk+AHLPVIm0iJtpSgQJ9dx21eWx5SBel8z3jp1xtC0j6/iyK3AWGhAR1H61s7LA==} engines: {node: '>=20.18.0'} - 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==} @@ -12023,10 +11885,6 @@ packages: resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==} engines: {node: '>=4.0.0'} - polished@4.3.1: - resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} - engines: {node: '>=10'} - portfinder@1.0.32: resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} engines: {node: '>= 0.12.0'} @@ -12544,9 +12402,9 @@ packages: peerDependencies: typescript: '>= 4.3.x' - react-docgen@7.1.1: - resolution: {integrity: sha512-hlSJDQ2synMPKFZOsKo9Hi8WWZTC7POR8EmWvTSjow+VDgKzkmjQvFm2fk0tmRw+f0vTOIYKlarR0iL4996pdg==} - engines: {node: '>=16.14.0'} + react-docgen@8.0.0: + resolution: {integrity: sha512-kmob/FOTwep7DUWf9KjuenKX0vyvChr3oTdvvPt09V60Iz75FJp+T/0ZeHMbAfJj2WaVWqAPP5Hmm3PYzSPPKg==} + engines: {node: ^20.9.0 || >=22} react-dom@18.2.0: resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} @@ -13439,8 +13297,8 @@ packages: storybook-dark-mode@4.0.2: resolution: {integrity: sha512-zjcwwQ01R5t1VsakA6alc2JDIRVtavryW8J3E3eKLDIlAMcvsgtpxlelWkZs2cuNspk6Z10XzhQVrUWtYc3F0w==} - storybook@8.6.14: - resolution: {integrity: sha512-sVKbCj/OTx67jhmauhxc2dcr1P+yOgz/x3h0krwjyMgdc5Oubvxyg4NYDZmzAw+ym36g/lzH8N0Ccp4dwtdfxw==} + storybook@9.0.17: + resolution: {integrity: sha512-O+9jgJ+Trlq9VGD1uY4OBLKQWHHDKM/A/pA8vMW6PVehhGHNvpzcIC1bngr6mL5gGHZP2nBv+9XG8pTMcggMmg==} hasBin: true peerDependencies: prettier: ^2 || ^3 @@ -13643,7 +13501,7 @@ packages: superagent@8.1.2: resolution: {integrity: sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==} engines: {node: '>=6.4.0 <13 || >=14'} - deprecated: Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net + deprecated: Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net superjson@1.13.3: resolution: {integrity: sha512-mJiVjfd2vokfDxsQPOwJ/PtanO87LhpYY88ubI5dUB1Ab58Txbyje3+jpm+/83R/fevaq/107NNhtYBLuoTrFg==} @@ -13881,10 +13739,6 @@ packages: resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} engines: {node: ^18.0.0 || >=20.0.0} - tinyrainbow@1.2.0: - resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} - engines: {node: '>=14.0.0'} - tinyrainbow@2.0.0: resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} @@ -13893,6 +13747,10 @@ packages: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} + tinyspy@4.0.3: + resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} + engines: {node: '>=14.0.0'} + tldts-core@6.1.84: resolution: {integrity: sha512-NaQa1W76W2aCGjXybvnMYzGSM4x8fvG2AN/pla7qxcg0ZHbooOPhA8kctmOZUDfZyhDL27OGNbwAeig8P4p1vg==} @@ -14570,9 +14428,6 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - util@0.12.5: - resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} - utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} @@ -14771,7 +14626,6 @@ packages: vitest-environment-miniflare@2.14.4: resolution: {integrity: sha512-DzwQWdY42sVYR6aUndw9FdCtl/i0oh3NkbkQpw+xq5aYQw5eiJn5kwnKaKQEWaoBe8Cso71X2i1EJGvi1jZ2xw==} engines: {node: '>=16.13'} - deprecated: Miniflare v2 is no longer supported. Please upgrade to Miniflare v4 peerDependencies: vitest: '>=0.23.0' @@ -18012,10 +17866,10 @@ snapshots: '@types/yargs': 17.0.33 chalk: 4.1.2 - '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.2.2)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1(typescript@5.2.2)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0))': dependencies: glob: 10.4.5 - magic-string: 0.27.0 + magic-string: 0.30.17 react-docgen-typescript: 2.4.0(typescript@5.2.2) vite: 6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0) optionalDependencies: @@ -19699,154 +19553,53 @@ snapshots: transitivePeerDependencies: - ws - '@storybook/addon-actions@8.6.14(storybook@8.6.14(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.14(prettier@3.5.3) - uuid: 9.0.1 - - '@storybook/addon-backgrounds@8.6.14(storybook@8.6.14(prettier@3.5.3))': - dependencies: - '@storybook/global': 5.0.0 - memoizerific: 1.11.3 - storybook: 8.6.14(prettier@3.5.3) - ts-dedent: 2.2.0 - - '@storybook/addon-controls@8.6.14(storybook@8.6.14(prettier@3.5.3))': - dependencies: - '@storybook/global': 5.0.0 - dequal: 2.0.3 - storybook: 8.6.14(prettier@3.5.3) - ts-dedent: 2.2.0 - - '@storybook/addon-docs@8.6.14(@types/react@18.2.37)(storybook@8.6.14(prettier@3.5.3))': + '@storybook/addon-docs@9.0.17(@types/react@18.2.37)(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3))': dependencies: '@mdx-js/react': 3.1.0(@types/react@18.2.37)(react@18.2.0) - '@storybook/blocks': 8.6.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) - '@storybook/csf-plugin': 8.6.14(storybook@8.6.14(prettier@3.5.3)) - '@storybook/react-dom-shim': 8.6.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) + '@storybook/csf-plugin': 9.0.17(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3)) + '@storybook/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/react-dom-shim': 9.0.17(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3)) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - storybook: 8.6.14(prettier@3.5.3) - ts-dedent: 2.2.0 - transitivePeerDependencies: - - '@types/react' - - '@storybook/addon-essentials@8.6.14(@types/react@18.2.37)(storybook@8.6.14(prettier@3.5.3))': - dependencies: - '@storybook/addon-actions': 8.6.14(storybook@8.6.14(prettier@3.5.3)) - '@storybook/addon-backgrounds': 8.6.14(storybook@8.6.14(prettier@3.5.3)) - '@storybook/addon-controls': 8.6.14(storybook@8.6.14(prettier@3.5.3)) - '@storybook/addon-docs': 8.6.14(@types/react@18.2.37)(storybook@8.6.14(prettier@3.5.3)) - '@storybook/addon-highlight': 8.6.14(storybook@8.6.14(prettier@3.5.3)) - '@storybook/addon-measure': 8.6.14(storybook@8.6.14(prettier@3.5.3)) - '@storybook/addon-outline': 8.6.14(storybook@8.6.14(prettier@3.5.3)) - '@storybook/addon-toolbars': 8.6.14(storybook@8.6.14(prettier@3.5.3)) - '@storybook/addon-viewport': 8.6.14(storybook@8.6.14(prettier@3.5.3)) - storybook: 8.6.14(prettier@3.5.3) + storybook: 9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - '@storybook/addon-highlight@8.6.14(storybook@8.6.14(prettier@3.5.3))': - dependencies: - '@storybook/global': 5.0.0 - storybook: 8.6.14(prettier@3.5.3) - - '@storybook/addon-interactions@8.6.14(storybook@8.6.14(prettier@3.5.3))': - dependencies: - '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.6.14(storybook@8.6.14(prettier@3.5.3)) - '@storybook/test': 8.6.14(storybook@8.6.14(prettier@3.5.3)) - polished: 4.3.1 - storybook: 8.6.14(prettier@3.5.3) - ts-dedent: 2.2.0 - - '@storybook/addon-links@8.6.14(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))': + '@storybook/addon-links@9.0.17(react@18.2.0)(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.6.14(prettier@3.5.3) - ts-dedent: 2.2.0 + storybook: 9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3) optionalDependencies: react: 18.2.0 - '@storybook/addon-measure@8.6.14(storybook@8.6.14(prettier@3.5.3))': - dependencies: - '@storybook/global': 5.0.0 - storybook: 8.6.14(prettier@3.5.3) - tiny-invariant: 1.3.3 - - '@storybook/addon-onboarding@8.6.14(storybook@8.6.14(prettier@3.5.3))': + '@storybook/addon-onboarding@9.0.17(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3))': dependencies: - storybook: 8.6.14(prettier@3.5.3) + storybook: 9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3) - '@storybook/addon-outline@8.6.14(storybook@8.6.14(prettier@3.5.3))': + '@storybook/addon-themes@9.0.17(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3))': dependencies: - '@storybook/global': 5.0.0 - storybook: 8.6.14(prettier@3.5.3) + storybook: 9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3) ts-dedent: 2.2.0 - '@storybook/addon-toolbars@8.6.14(storybook@8.6.14(prettier@3.5.3))': - dependencies: - storybook: 8.6.14(prettier@3.5.3) - - '@storybook/addon-viewport@8.6.14(storybook@8.6.14(prettier@3.5.3))': + '@storybook/builder-vite@9.0.17(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3))(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0))': dependencies: - memoizerific: 1.11.3 - storybook: 8.6.14(prettier@3.5.3) - - '@storybook/blocks@8.6.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))': - dependencies: - '@storybook/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - storybook: 8.6.14(prettier@3.5.3) - ts-dedent: 2.2.0 - optionalDependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@storybook/builder-vite@8.6.14(storybook@8.6.14(prettier@3.5.3))(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0))': - dependencies: - '@storybook/csf-plugin': 8.6.14(storybook@8.6.14(prettier@3.5.3)) - browser-assert: 1.2.1 - storybook: 8.6.14(prettier@3.5.3) + '@storybook/csf-plugin': 9.0.17(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3)) + storybook: 9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3) ts-dedent: 2.2.0 vite: 6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0) - '@storybook/components@8.6.14(storybook@8.6.14(prettier@3.5.3))': + '@storybook/components@8.6.14(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3))': dependencies: - storybook: 8.6.14(prettier@3.5.3) + storybook: 9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3) - '@storybook/core-events@8.6.14(storybook@8.6.14(prettier@3.5.3))': + '@storybook/core-events@8.6.14(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3))': dependencies: - storybook: 8.6.14(prettier@3.5.3) - - '@storybook/core@8.6.14(prettier@3.5.3)(storybook@8.6.14(prettier@3.5.3))': - dependencies: - '@storybook/theming': 8.6.14(storybook@8.6.14(prettier@3.5.3)) - better-opn: 3.0.2 - browser-assert: 1.2.1 - esbuild: 0.25.0 - esbuild-register: 3.6.0(esbuild@0.25.0) - jsdoc-type-pratt-parser: 4.1.0 - process: 0.11.10 - recast: 0.23.11 - semver: 7.7.2 - util: 0.12.5 - ws: 8.18.3 - optionalDependencies: - prettier: 3.5.3 - transitivePeerDependencies: - - bufferutil - - storybook - - supports-color - - utf-8-validate + storybook: 9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3) - '@storybook/csf-plugin@8.6.14(storybook@8.6.14(prettier@3.5.3))': + '@storybook/csf-plugin@9.0.17(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3))': dependencies: - storybook: 8.6.14(prettier@3.5.3) + storybook: 9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3) unplugin: 1.16.1 '@storybook/global@5.0.0': {} @@ -19856,77 +19609,49 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@storybook/instrumenter@8.6.14(storybook@8.6.14(prettier@3.5.3))': + '@storybook/manager-api@8.6.14(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3))': dependencies: - '@storybook/global': 5.0.0 - '@vitest/utils': 2.1.9 - storybook: 8.6.14(prettier@3.5.3) + storybook: 9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3) - '@storybook/manager-api@8.6.14(storybook@8.6.14(prettier@3.5.3))': - dependencies: - storybook: 8.6.14(prettier@3.5.3) - - '@storybook/preview-api@8.6.14(storybook@8.6.14(prettier@3.5.3))': - dependencies: - storybook: 8.6.14(prettier@3.5.3) - - '@storybook/react-dom-shim@8.6.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))': + '@storybook/react-dom-shim@9.0.17(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3))': dependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - storybook: 8.6.14(prettier@3.5.3) + storybook: 9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3) - '@storybook/react-vite@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.45.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.2.2)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0))': + '@storybook/react-vite@9.0.17(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.45.0)(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3))(typescript@5.2.2)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.2.2)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.1(typescript@5.2.2)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0)) '@rollup/pluginutils': 5.1.4(rollup@4.45.0) - '@storybook/builder-vite': 8.6.14(storybook@8.6.14(prettier@3.5.3))(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0)) - '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.2.2) - find-up: 5.0.0 + '@storybook/builder-vite': 9.0.17(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3))(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0)) + '@storybook/react': 9.0.17(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3))(typescript@5.2.2) + find-up: 7.0.0 magic-string: 0.30.17 react: 18.2.0 - react-docgen: 7.1.1 + react-docgen: 8.0.0 react-dom: 18.2.0(react@18.2.0) resolve: 1.22.10 - storybook: 8.6.14(prettier@3.5.3) + storybook: 9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3) tsconfig-paths: 4.2.0 vite: 6.3.5(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0) - optionalDependencies: - '@storybook/test': 8.6.14(storybook@8.6.14(prettier@3.5.3)) transitivePeerDependencies: - rollup - supports-color - typescript - '@storybook/react@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.2.2)': + '@storybook/react@9.0.17(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3))(typescript@5.2.2)': dependencies: - '@storybook/components': 8.6.14(storybook@8.6.14(prettier@3.5.3)) '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.6.14(storybook@8.6.14(prettier@3.5.3)) - '@storybook/preview-api': 8.6.14(storybook@8.6.14(prettier@3.5.3)) - '@storybook/react-dom-shim': 8.6.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) - '@storybook/theming': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/react-dom-shim': 9.0.17(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3)) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - storybook: 8.6.14(prettier@3.5.3) + storybook: 9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3) optionalDependencies: - '@storybook/test': 8.6.14(storybook@8.6.14(prettier@3.5.3)) typescript: 5.2.2 - '@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3))': + '@storybook/theming@8.6.14(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3))': dependencies: - '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.6.14(storybook@8.6.14(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.14(prettier@3.5.3) - - '@storybook/theming@8.6.14(storybook@8.6.14(prettier@3.5.3))': - dependencies: - storybook: 8.6.14(prettier@3.5.3) + storybook: 9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3) '@stripe/react-stripe-js@3.1.1(@stripe/stripe-js@5.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -20404,17 +20129,6 @@ snapshots: '@tanstack/virtual-file-routes@1.121.21': {} - '@testing-library/dom@10.1.0': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/runtime': 7.26.0 - '@types/aria-query': 5.0.1 - 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/dom@10.4.0': dependencies: '@babel/code-frame': 7.27.1 @@ -20437,23 +20151,7 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/jest-dom@6.4.6(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.16.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.16.0)(typescript@5.8.3)))(vitest@3.0.5(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@22.16.0)(jiti@2.4.2)(jsdom@24.1.3)(lightningcss@1.27.0)(msw@2.10.2(@types/node@22.16.0)(typescript@5.8.3))(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0))': - dependencies: - '@adobe/css-tools': 4.4.0 - '@babel/runtime': 7.26.0 - 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 - optionalDependencies: - '@jest/globals': 29.7.0 - '@types/jest': 29.5.12 - jest: 29.7.0(@types/node@22.16.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.16.0)(typescript@5.8.3)) - vitest: 3.0.5(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@22.16.0)(jiti@2.4.2)(jsdom@24.1.3)(lightningcss@1.27.0)(msw@2.10.2(@types/node@22.16.0)(typescript@5.8.3))(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0) - - '@testing-library/jest-dom@6.5.0': + '@testing-library/jest-dom@6.6.3': dependencies: '@adobe/css-tools': 4.4.0 aria-query: 5.3.2 @@ -20463,21 +20161,17 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 - '@testing-library/react@16.0.0(@testing-library/dom@10.1.0)(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@testing-library/react@16.0.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.26.0 - '@testing-library/dom': 10.1.0 + '@testing-library/dom': 10.4.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.23 '@types/react-dom': 18.3.7(@types/react@18.3.23) - '@testing-library/user-event@14.5.2(@testing-library/dom@10.1.0)': - dependencies: - '@testing-library/dom': 10.1.0 - - '@testing-library/user-event@14.5.2(@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 @@ -20551,6 +20245,10 @@ snapshots: dependencies: '@types/node': 22.16.0 + '@types/chai@5.2.2': + dependencies: + '@types/deep-eql': 4.0.2 + '@types/chrome@0.0.114': dependencies: '@types/filesystem': 0.0.32 @@ -20587,6 +20285,8 @@ snapshots: dependencies: '@types/ms': 0.7.34 + '@types/deep-eql@4.0.2': {} + '@types/diff-match-patch@1.0.36': {} '@types/doctrine@0.0.9': {} @@ -20807,8 +20507,6 @@ snapshots: '@types/uuid@10.0.0': {} - '@types/uuid@9.0.8': {} - '@types/webextension-polyfill@0.10.7': {} '@types/webpack-env@1.18.8': {} @@ -20862,6 +20560,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/project-service@8.33.0(typescript@5.2.2)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.33.0(typescript@5.2.2) + '@typescript-eslint/types': 8.33.0 + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + - typescript + '@typescript-eslint/project-service@8.33.0(typescript@5.8.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.33.0(typescript@5.8.3) @@ -20876,6 +20583,10 @@ snapshots: '@typescript-eslint/types': 8.33.0 '@typescript-eslint/visitor-keys': 8.33.0 + '@typescript-eslint/tsconfig-utils@8.33.0(typescript@5.2.2)': + dependencies: + typescript: 5.2.2 + '@typescript-eslint/tsconfig-utils@8.33.0(typescript@5.8.3)': dependencies: typescript: 5.8.3 @@ -20893,6 +20604,22 @@ snapshots: '@typescript-eslint/types@8.33.0': {} + '@typescript-eslint/typescript-estree@8.33.0(typescript@5.2.2)': + dependencies: + '@typescript-eslint/project-service': 8.33.0(typescript@5.2.2) + '@typescript-eslint/tsconfig-utils': 8.33.0(typescript@5.2.2) + '@typescript-eslint/types': 8.33.0 + '@typescript-eslint/visitor-keys': 8.33.0 + debug: 4.4.1(supports-color@8.1.1) + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.2.2) + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/typescript-estree@8.33.0(typescript@5.8.3)': dependencies: '@typescript-eslint/project-service': 8.33.0(typescript@5.8.3) @@ -20909,6 +20636,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.2.2)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.33.0 + '@typescript-eslint/types': 8.33.0 + '@typescript-eslint/typescript-estree': 8.33.0(typescript@5.2.2) + eslint: 9.27.0(jiti@2.4.2) + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2)) @@ -21230,13 +20968,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/expect@2.0.5': - dependencies: - '@vitest/spy': 2.0.5 - '@vitest/utils': 2.0.5 - chai: 5.2.1 - tinyrainbow: 1.2.0 - '@vitest/expect@3.0.5': dependencies: '@vitest/spy': 3.0.5 @@ -21244,6 +20975,14 @@ snapshots: chai: 5.2.1 tinyrainbow: 2.0.0 + '@vitest/expect@3.2.4': + dependencies: + '@types/chai': 5.2.2 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.2.1 + tinyrainbow: 2.0.0 + '@vitest/mocker@3.0.5(msw@2.10.2(@types/node@22.16.0)(typescript@5.8.3))(vite@6.3.5(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0))': dependencies: '@vitest/spy': 3.0.5 @@ -21262,15 +21001,11 @@ snapshots: msw: 2.10.2(@types/node@24.0.10)(typescript@5.8.3) vite: 6.3.5(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0) - '@vitest/pretty-format@2.0.5': - dependencies: - tinyrainbow: 1.2.0 - - '@vitest/pretty-format@2.1.9': + '@vitest/pretty-format@3.0.5': dependencies: - tinyrainbow: 1.2.0 + tinyrainbow: 2.0.0 - '@vitest/pretty-format@3.0.5': + '@vitest/pretty-format@3.2.4': dependencies: tinyrainbow: 2.0.0 @@ -21285,30 +21020,23 @@ snapshots: magic-string: 0.30.17 pathe: 2.0.3 - '@vitest/spy@2.0.5': - dependencies: - tinyspy: 3.0.2 - '@vitest/spy@3.0.5': dependencies: tinyspy: 3.0.2 - '@vitest/utils@2.0.5': + '@vitest/spy@3.2.4': dependencies: - '@vitest/pretty-format': 2.0.5 - estree-walker: 3.0.3 - loupe: 3.1.4 - tinyrainbow: 1.2.0 + tinyspy: 4.0.3 - '@vitest/utils@2.1.9': + '@vitest/utils@3.0.5': dependencies: - '@vitest/pretty-format': 2.1.9 + '@vitest/pretty-format': 3.0.5 loupe: 3.1.4 - tinyrainbow: 1.2.0 + tinyrainbow: 2.0.0 - '@vitest/utils@3.0.5': + '@vitest/utils@3.2.4': dependencies: - '@vitest/pretty-format': 3.0.5 + '@vitest/pretty-format': 3.2.4 loupe: 3.1.4 tinyrainbow: 2.0.0 @@ -22411,8 +22139,6 @@ snapshots: dependencies: base64-js: 1.5.1 - browser-assert@1.2.1: {} - browser-tabs-lock@1.3.0: dependencies: lodash: 4.17.21 @@ -22584,14 +22310,6 @@ snapshots: supports-color: 8.1.1 window-size: 1.1.1 - chai@5.1.2: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.1 - deep-eql: 5.0.2 - loupe: 3.1.4 - pathval: 2.0.0 - chai@5.2.1: dependencies: assertion-error: 2.0.1 @@ -24329,6 +24047,15 @@ snapshots: dependencies: eslint: 9.27.0(jiti@2.4.2) + eslint-plugin-storybook@9.0.17(eslint@9.27.0(jiti@2.4.2))(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3))(typescript@5.2.2): + dependencies: + '@typescript-eslint/utils': 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.2.2) + eslint: 9.27.0(jiti@2.4.2) + storybook: 9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3) + transitivePeerDependencies: + - supports-color + - typescript + eslint-plugin-turbo@2.5.3(eslint@9.27.0(jiti@2.4.2))(turbo@2.5.4): dependencies: dotenv: 16.0.3 @@ -27387,10 +27114,6 @@ snapshots: dependencies: magic-string: 0.30.17 - magic-string@0.27.0: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 - magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.4 @@ -29278,10 +29001,6 @@ snapshots: pngjs@3.4.0: {} - polished@4.3.1: - dependencies: - '@babel/runtime': 7.26.0 - portfinder@1.0.32: dependencies: async: 2.6.4 @@ -29741,7 +29460,7 @@ snapshots: dependencies: typescript: 5.2.2 - react-docgen@7.1.1: + react-docgen@8.0.0: dependencies: '@babel/core': 7.27.7 '@babel/traverse': 7.28.0 @@ -30889,14 +30608,14 @@ snapshots: dependencies: internal-slot: 1.1.0 - storybook-dark-mode@4.0.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3)): + storybook-dark-mode@4.0.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3)): dependencies: - '@storybook/components': 8.6.14(storybook@8.6.14(prettier@3.5.3)) - '@storybook/core-events': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/components': 8.6.14(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3)) + '@storybook/core-events': 8.6.14(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3)) '@storybook/global': 5.0.0 '@storybook/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/manager-api': 8.6.14(storybook@8.6.14(prettier@3.5.3)) - '@storybook/theming': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/manager-api': 8.6.14(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3)) + '@storybook/theming': 8.6.14(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3)) fast-deep-equal: 3.1.3 memoizerific: 1.11.3 transitivePeerDependencies: @@ -30904,12 +30623,23 @@ snapshots: - react-dom - storybook - storybook@8.6.14(prettier@3.5.3): + storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.5.3): dependencies: - '@storybook/core': 8.6.14(prettier@3.5.3)(storybook@8.6.14(prettier@3.5.3)) + '@storybook/global': 5.0.0 + '@testing-library/jest-dom': 6.6.3 + '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) + '@vitest/expect': 3.2.4 + '@vitest/spy': 3.2.4 + better-opn: 3.0.2 + esbuild: 0.25.0 + esbuild-register: 3.6.0(esbuild@0.25.0) + recast: 0.23.11 + semver: 7.7.2 + ws: 8.18.3 optionalDependencies: prettier: 3.5.3 transitivePeerDependencies: + - '@testing-library/dom' - bufferutil - supports-color - utf-8-validate @@ -31382,12 +31112,12 @@ snapshots: tinypool@1.0.2: {} - tinyrainbow@1.2.0: {} - tinyrainbow@2.0.0: {} tinyspy@3.0.2: {} + tinyspy@4.0.3: {} + tldts-core@6.1.84: {} tldts@6.1.84: @@ -31461,6 +31191,10 @@ snapshots: trough@2.2.0: {} + ts-api-utils@2.1.0(typescript@5.2.2): + dependencies: + typescript: 5.2.2 + ts-api-utils@2.1.0(typescript@5.8.3): dependencies: typescript: 5.8.3 @@ -32067,14 +31801,6 @@ snapshots: util-deprecate@1.0.2: {} - util@0.12.5: - dependencies: - inherits: 2.0.4 - is-arguments: 1.1.1 - is-generator-function: 1.1.0 - is-typed-array: 1.1.15 - which-typed-array: 1.1.18 - utils-merge@1.0.1: {} uuid@10.0.0: {} @@ -32373,12 +32099,12 @@ snapshots: dependencies: '@vitest/expect': 3.0.5 '@vitest/mocker': 3.0.5(msw@2.10.2(@types/node@22.16.0)(typescript@5.8.3))(vite@6.3.5(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0)) - '@vitest/pretty-format': 3.0.5 + '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.0.5 '@vitest/snapshot': 3.0.5 '@vitest/spy': 3.0.5 '@vitest/utils': 3.0.5 - chai: 5.1.2 + chai: 5.2.1 debug: 4.4.1(supports-color@8.1.1) expect-type: 1.1.0 magic-string: 0.30.17 @@ -32414,12 +32140,12 @@ snapshots: dependencies: '@vitest/expect': 3.0.5 '@vitest/mocker': 3.0.5(msw@2.10.2(@types/node@24.0.10)(typescript@5.8.3))(vite@6.3.5(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.43.1)(tsx@4.19.2)(yaml@2.8.0)) - '@vitest/pretty-format': 3.0.5 + '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.0.5 '@vitest/snapshot': 3.0.5 '@vitest/spy': 3.0.5 '@vitest/utils': 3.0.5 - chai: 5.1.2 + chai: 5.2.1 debug: 4.4.1(supports-color@8.1.1) expect-type: 1.1.0 magic-string: 0.30.17 From d03c3072775931651d36cb85fdea092e2f3477dd Mon Sep 17 00:00:00 2001 From: Alex Carpenter Date: Thu, 17 Jul 2025 19:52:38 -0400 Subject: [PATCH 6/6] disable backgrounds --- packages/storybook/.storybook/preview.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/storybook/.storybook/preview.tsx b/packages/storybook/.storybook/preview.tsx index 847cfd323f7..22e25d14d1b 100644 --- a/packages/storybook/.storybook/preview.tsx +++ b/packages/storybook/.storybook/preview.tsx @@ -30,6 +30,7 @@ const preview: any = { }, }, layout: 'centered', + backgrounds: { disable: true }, }, globalTypes: { locale: {