diff --git a/packages/document/.storybook/main.ts b/packages/document/.storybook/main.ts index cb68bdf1..8c8d23a6 100644 --- a/packages/document/.storybook/main.ts +++ b/packages/document/.storybook/main.ts @@ -4,8 +4,22 @@ import remarkGfm from "remark-gfm" import { type UserConfig, mergeConfig } from "vite" import tsconfigPaths from "vite-tsconfig-paths" +const rcSrc = resolve(import.meta.dirname, "../../react-components/src") + const viteOverrides: UserConfig = { base: process.env.VITE_BASE_URL, + resolve: { + alias: { + "#components": `${rcSrc}/components`, + "#components-utils": `${rcSrc}/components/utils`, + "#context": `${rcSrc}/context`, + "#hooks": `${rcSrc}/hooks`, + "#typings": `${rcSrc}/typings`, + "#utils": `${rcSrc}/utils`, + "#config": `${rcSrc}/config`, + "#reducers": `${rcSrc}/reducers`, + }, + }, plugins: [ tsconfigPaths({ projects: [ @@ -20,7 +34,7 @@ const storybookConfig: StorybookConfig = { async viteFinal(config) { return mergeConfig(config, viteOverrides) }, - stories: ["../stories/**/*.mdx", "../stories/**/*.stories.@(js|jsx|ts|tsx)"], + stories: ["../src/stories/**/*.mdx", "../src/stories/**/*.stories.@(js|jsx|ts|tsx)"], addons: ["@storybook/addon-links", { name: "@storybook/addon-docs", options: { diff --git a/packages/document/package.json b/packages/document/package.json index 250542d4..c6861c60 100644 --- a/packages/document/package.json +++ b/packages/document/package.json @@ -12,30 +12,34 @@ "mcp": "storybook mcp" }, "dependencies": { + "@commercelayer/js-auth": "^7.1.2", + "@commercelayer/react-components": "workspace:*", + "js-cookie": "^3.0.5", + "jwt-decode": "^4.0.0", "react": "^19.2.3", "react-dom": "^19.2.3" }, "devDependencies": { + "@types/js-cookie": "^3.0.6", "@chromatic-com/storybook": "^5.1.1", "@eslint/js": "^9.39.2", - "@storybook/addon-docs": "^10.3.3", - "@storybook/addon-links": "^10.3.3", + "@storybook/addon-docs": "^10.3.5", + "@storybook/addon-links": "^10.3.5", "@storybook/addon-mcp": "^0.4.2", - "@storybook/addon-onboarding": "^10.3.3", + "@storybook/addon-onboarding": "^10.3.5", "@storybook/icons": "^2.0.1", - "@storybook/react": "^10.3.3", - "@storybook/react-vite": "^10.3.3", + "@storybook/react-vite": "^10.3.5", "@types/react": "^19.2.8", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^5.1.2", "eslint": "^9.39.2", "eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-react-refresh": "^0.4.26", - "eslint-plugin-storybook": "^10.3.3", + "eslint-plugin-storybook": "^10.3.5", "globals": "^17.0.0", "msw": "^2.12.7", "remark-gfm": "^4.0.1", - "storybook": "^10.3.3", + "storybook": "^10.3.5", "typescript": "~5.9.3", "typescript-eslint": "^8.53.0", "vite": "^7.3.1", @@ -46,4 +50,4 @@ "plugin:storybook/recommended" ] } -} +} \ No newline at end of file diff --git a/packages/document/src/stories/availability/001.availability.mdx b/packages/document/src/stories/availability/001.availability.mdx new file mode 100644 index 00000000..19ecd95a --- /dev/null +++ b/packages/document/src/stories/availability/001.availability.mdx @@ -0,0 +1,155 @@ +import { Meta, Source } from '@storybook/addon-docs'; + + + +# Availability + +The Availability components let you display real-time stock quantity and delivery lead times +for any SKU. They are powered by the Commerce Layer inventory model and work by fetching +availability data through the `useAvailability` hook from `@commercelayer/hooks`. + +All Availability components must be nested inside the `` context. + +--- + +## AvailabilityContainer + +`AvailabilityContainer` is the root component of the Availability tree. +It fetches inventory data for a given SKU (by code or ID) and exposes the result +to its children through the Availability context. + + +Must be a child of the `` component. +Can also be a child of `` inside a ``, in which case `skuCode` is inherited automatically. + + + +`` + + +**Props** + +| Prop | Type | Required | Description | +|------|------|----------|-------------| +| `skuCode` | `string` | — | The SKU code to fetch availability for | +| `skuId` | `string` | — | The SKU ID (takes precedence over `skuCode`; improves performance) | +| `getQuantity` | `(quantity: number) => void` | — | Callback fired whenever the available quantity changes | + + + + + + +`} +/> + +--- + +## AvailabilityTemplate + +`AvailabilityTemplate` reads from the parent `AvailabilityContainer` context and renders +a `` with availability text. You can customise the label shown for each state +(`available`, `outOfStock`, `negativeStock`) and optionally include delivery lead time +and shipping method details. + + +Must be a descendant of the `` component. + + +**Props** + +| Prop | Type | Default | Description | +|------|------|---------|-------------| +| `labels.available` | `string` | `"Available"` | Text shown when quantity > 0 | +| `labels.outOfStock` | `string` | `"Out of stock"` | Text shown when quantity is 0 | +| `labels.negativeStock` | `string` | `"Not available"` | Text shown when quantity is negative | +| `timeFormat` | `"days" \| "hours"` | — | When set, delivery lead time is appended to the label | +| `showShippingMethodName` | `boolean` | `false` | Requires `timeFormat`. Appends the shipping method name | +| `showShippingMethodPrice` | `boolean` | `false` | Requires `timeFormat`. Appends the formatted shipping price | + + + + +`} +/> + +### Custom render via children + +You can fully control the rendered output by passing a function as `children`. +The function receives the full availability context including `quantity`, `text`, +`min`, `max`, and `shipping_method`. + + + + {({ quantity, text, min, max }) => ( + + {text} + {quantity > 0 && min != null && ( + Ships in {min.days}–{max?.days ?? min.days} days + )} + + )} + + +`} +/> + +--- + +## Usage inside SkusContainer + +When used inside a `` → `` tree, `AvailabilityContainer` +automatically inherits the `skuCode` from the current SKU context — +no need to pass `skuCode` explicitly. + + + + + + + + + + + +`} +/> diff --git a/packages/document/src/stories/availability/availability.stories.tsx b/packages/document/src/stories/availability/availability.stories.tsx new file mode 100644 index 00000000..1681f3c4 --- /dev/null +++ b/packages/document/src/stories/availability/availability.stories.tsx @@ -0,0 +1,160 @@ +import type { Meta, StoryObj } from '@storybook/react-vite' +import CommerceLayer from '../_internals/CommerceLayer' +import { + AvailabilityContainer, + AvailabilityTemplate, + SkusContainer, + Skus, + SkuField, +} from '@commercelayer/react-components' + +const meta = { + title: 'Availability/Stories', + parameters: { + layout: 'centered', + }, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const BasicAvailability: Story = { + name: 'AvailabilityContainer — basic', + render: () => ( + + + + + + ), +} + +export const CustomLabels: Story = { + name: 'AvailabilityTemplate — custom labels', + render: () => ( + + + + + + ), +} + +export const WithDeliveryLeadTimeDays: Story = { + name: 'AvailabilityTemplate — lead time in days', + render: () => ( + + + + + + ), +} + +export const WithDeliveryLeadTimeHours: Story = { + name: 'AvailabilityTemplate — lead time in hours', + render: () => ( + + + + + + ), +} + +export const WithShippingMethodName: Story = { + name: 'AvailabilityTemplate — with shipping method name', + render: () => ( + + + + + + ), +} + +export const WithShippingMethodPrice: Story = { + name: 'AvailabilityTemplate — with shipping method price', + render: () => ( + + + + + + ), +} + +export const WithGetQuantityCallback: Story = { + name: 'AvailabilityContainer — getQuantity callback', + render: () => ( + + { + console.log('quantity updated:', quantity) + }} + > + + + + ), +} + +export const WithChildrenRenderProp: Story = { + name: 'AvailabilityTemplate — children render prop', + render: () => ( + + + + {({ quantity, text, min, max }) => ( + + {text} + {quantity > 0 && min != null && ( + + Ships in {min.days}–{max?.days ?? min.days} day(s) + + )} + + )} + + + + ), +} + +export const InsideSkusContainer: Story = { + name: 'AvailabilityContainer — inside SkusContainer', + render: () => ( + + + + + + + + + + + + + ), +} diff --git a/packages/document/src/stories/skus/skus.stories.tsx b/packages/document/src/stories/skus/skus.stories.tsx index c202dc90..4a086266 100644 --- a/packages/document/src/stories/skus/skus.stories.tsx +++ b/packages/document/src/stories/skus/skus.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/react' +import type { Meta, StoryObj } from '@storybook/react-vite' import CommerceLayer from '../_internals/CommerceLayer' import { SkuField, diff --git a/packages/hooks/src/availability/useAvailability.test.ts b/packages/hooks/src/availability/useAvailability.test.ts new file mode 100644 index 00000000..e1466320 --- /dev/null +++ b/packages/hooks/src/availability/useAvailability.test.ts @@ -0,0 +1,193 @@ +/** + * @vitest-environment jsdom + */ +import { act, renderHook, waitFor } from "@testing-library/react" +import type { ReactNode } from "react" +import { createElement } from "react" +import { SWRConfig } from "swr" +import { describe, expect, it, vi } from "vitest" +import { useAvailability } from "./useAvailability" + +const SKU_CODE = "BABYONBU000000E63E7412MX" + +const mockAvailability = { + skuCode: SKU_CODE, + quantity: 5, + min: { hours: 24, days: 1 }, + max: { hours: 72, days: 3 }, + shipping_method: undefined, +} + +vi.mock("@commercelayer/core", () => ({ + getSkuAvailability: vi.fn(), +})) + +const swrWrapper = ({ children }: { children: ReactNode }) => + createElement(SWRConfig, { value: { provider: () => new Map() } }, children) + +async function getCoreMock() { + const mod = await import("@commercelayer/core") + return vi.mocked(mod.getSkuAvailability) +} + +describe("useAvailability", () => { + it("should start with null availability", () => { + const { result } = renderHook(() => useAvailability("test-token"), { + wrapper: swrWrapper, + }) + + expect(result.current.availability).toBeNull() + expect(result.current.isLoading).toBe(false) + expect(result.current.isValidating).toBe(false) + expect(result.current.error).toBeNull() + }) + + it("should fetch availability by skuCode", async () => { + const mock = await getCoreMock() + mock.mockResolvedValueOnce(mockAvailability) + + const { result } = renderHook(() => useAvailability("test-token"), { + wrapper: swrWrapper, + }) + + act(() => { + result.current.fetchAvailability({ skuCode: SKU_CODE }) + }) + + await waitFor(() => { + expect(result.current.availability).not.toBeNull() + }) + + expect(result.current.availability?.quantity).toBe(5) + expect(result.current.availability?.skuCode).toBe(SKU_CODE) + expect(result.current.error).toBeNull() + expect(mock).toHaveBeenCalledWith( + expect.objectContaining({ skuCode: SKU_CODE }), + ) + }) + + it("should clear availability after fetch", async () => { + const mock = await getCoreMock() + mock.mockResolvedValueOnce(mockAvailability) + + const { result } = renderHook(() => useAvailability("test-token"), { + wrapper: swrWrapper, + }) + + act(() => { + result.current.fetchAvailability({ skuCode: SKU_CODE }) + }) + + await waitFor(() => { + expect(result.current.availability).not.toBeNull() + }) + + act(() => { + result.current.clearAvailability() + }) + + await waitFor(() => { + expect(result.current.availability).toBeNull() + }) + }) + + it("should set error when fetcher throws", async () => { + const mock = await getCoreMock() + mock.mockRejectedValueOnce(new Error("Unauthorized")) + + const { result } = renderHook(() => useAvailability("bad-token"), { + wrapper: swrWrapper, + }) + + act(() => { + result.current.fetchAvailability({ skuCode: SKU_CODE }) + }) + + await waitFor(() => { + expect(result.current.isLoading).toBe(false) + }) + + expect(result.current.error).toBe("Unauthorized") + expect(result.current.availability).toBeNull() + }) + + it("should not fetch before fetchAvailability is called", () => { + const { result } = renderHook(() => useAvailability("test-token"), { + wrapper: swrWrapper, + }) + + expect(result.current.availability).toBeNull() + expect(result.current.isLoading).toBe(false) + }) + + it("should set isLoading true while fetching", async () => { + const mock = await getCoreMock() + let resolve: (v: typeof mockAvailability) => void + mock.mockReturnValueOnce( + new Promise((res) => { + resolve = res + }), + ) + + const { result } = renderHook(() => useAvailability("test-token"), { + wrapper: swrWrapper, + }) + + act(() => { + result.current.fetchAvailability({ skuCode: SKU_CODE }) + }) + + await waitFor(() => { + expect(result.current.isLoading).toBe(true) + }) + + act(() => { + resolve?.(mockAvailability) + }) + + await waitFor(() => { + expect(result.current.isLoading).toBe(false) + }) + }) + + it("should return null when fetcher returns null (SKU not found)", async () => { + const mock = await getCoreMock() + mock.mockResolvedValueOnce(null) + + const { result } = renderHook(() => useAvailability("test-token"), { + wrapper: swrWrapper, + }) + + act(() => { + result.current.fetchAvailability({ skuCode: "NON_EXISTENT_SKU" }) + }) + + await waitFor(() => { + expect(result.current.isLoading).toBe(false) + }) + + expect(result.current.availability).toBeNull() + expect(result.current.error).toBeNull() + }) + + it("should not trigger fetch when fetchAvailability is called with empty params", async () => { + const mock = await getCoreMock() + + const { result } = renderHook(() => useAvailability("test-token"), { + wrapper: swrWrapper, + }) + + // fetchParams will be set but skuCode and skuId are both undefined + // SWR key will include them — but getSkuAvailability returns null for undefined inputs + mock.mockResolvedValueOnce(null) + act(() => { + result.current.fetchAvailability({}) + }) + + await waitFor(() => { + expect(result.current.isLoading).toBe(false) + }) + + expect(result.current.availability).toBeNull() + }) +}) diff --git a/packages/react-components/src/index.ts b/packages/react-components/src/index.ts index d22cf25b..ba6a9047 100644 --- a/packages/react-components/src/index.ts +++ b/packages/react-components/src/index.ts @@ -94,6 +94,7 @@ export * from '#components/shipping_methods/ShippingMethodPrice' export * from '#components/shipping_methods/ShippingMethodRadioButton' export * from '#components/skus/AvailabilityContainer' export * from '#components/skus/AvailabilityTemplate' +export type { SkuAvailability } from '@commercelayer/core' export * from '#components/skus/DeliveryLeadTime' export * from '#components/skus/SkuField' export * from '#components/skus/SkuList' diff --git a/packages/react-components/src/reducers/AvailabilityReducer.ts b/packages/react-components/src/reducers/AvailabilityReducer.ts deleted file mode 100644 index 1542c43e..00000000 --- a/packages/react-components/src/reducers/AvailabilityReducer.ts +++ /dev/null @@ -1,113 +0,0 @@ -import baseReducer from '#utils/baseReducer' -import type { BaseError } from '#typings/errors' -import type { Sku } from '@commercelayer/sdk' -import type { CommerceLayerConfig } from '#context/CommerceLayerContext' -import type { Dispatch } from 'react' -import getSdk from '#utils/getSdk' - -export interface DeliveryLeadTime { - shipping_method: { - name: string - reference: string - price_amount_cents: number - free_over_amount_cents: number - formatted_price_amount: string - formatted_free_over_amount: string - } - min: LeadTimes - max: LeadTimes -} - -interface Level { - delivery_lead_times: Partial[] - quantity: number -} - -interface Inventory { - inventory: { - available: boolean - quantity: number - levels: Level[] - } -} - -export type SkuInventory = Sku & Inventory - -export interface LeadTimes { - hours: number - days: number -} - -export type AvailabilityPayload = { - skuCode?: string - quantity?: number - errors?: BaseError[] - parent?: boolean -} & Partial - -export type AvailabilityState = AvailabilityPayload - -export interface AvailabilityAction { - type: AvailabilityActionType - payload: AvailabilityPayload -} - -export const availabilityInitialState: AvailabilityState = {} - -export async function getAvailability({ - skuCode, - skuId, - dispatch, - config -}: { - skuCode?: string - skuId?: string - dispatch: Dispatch - config: CommerceLayerConfig -}): Promise { - const sdk = getSdk(config) - try { - const [sku] = - skuId != null - ? [{ id: skuId }] - : skuCode != null - ? await sdk.skus.list({ - fields: { skus: ['id'] }, - filters: { code_in: skuCode } - }) - : [] - if (sku) { - const skuInventory = (await sdk.skus.retrieve(sku.id, { - fields: { skus: ['inventory'] } - })) as SkuInventory - const [level] = skuInventory.inventory?.levels || [] - const [delivery] = level?.delivery_lead_times || [] - dispatch({ - type: 'setAvailability', - payload: { - ...delivery, - quantity: skuInventory.inventory.quantity, - skuCode - } - }) - } - } catch (error) { - console.error('Get SKU availability', error) - } -} - -export type AvailabilityActionType = 'setAvailability' | 'setErrors' - -const typeAction: AvailabilityActionType[] = ['setAvailability', 'setErrors'] - -const availabilityReducer = ( - state: AvailabilityState, - reducer: AvailabilityAction -): AvailabilityState => - baseReducer( - state, - reducer, - typeAction - ) - -export default availabilityReducer diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3dc8d319..87677ebd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -189,6 +189,18 @@ importers: packages/document: dependencies: + '@commercelayer/js-auth': + specifier: ^7.1.2 + version: 7.3.0 + '@commercelayer/react-components': + specifier: workspace:* + version: link:../react-components + js-cookie: + specifier: ^3.0.5 + version: 3.0.5 + jwt-decode: + specifier: ^4.0.0 + version: 4.0.0 react: specifier: ^19.2.3 version: 19.2.3 @@ -198,31 +210,31 @@ importers: devDependencies: '@chromatic-com/storybook': specifier: ^5.1.1 - version: 5.1.1(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + version: 5.1.1(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) '@eslint/js': specifier: ^9.39.2 version: 9.39.2 '@storybook/addon-docs': - specifier: ^10.3.3 - version: 10.3.3(@types/react@19.2.8)(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) + specifier: ^10.3.5 + version: 10.3.5(@types/react@19.2.8)(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) '@storybook/addon-links': - specifier: ^10.3.3 - version: 10.3.3(react@19.2.3)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + specifier: ^10.3.5 + version: 10.3.5(react@19.2.3)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) '@storybook/addon-mcp': specifier: ^0.4.2 - version: 0.4.2(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) + version: 0.4.2(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) '@storybook/addon-onboarding': - specifier: ^10.3.3 - version: 10.3.3(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + specifier: ^10.3.5 + version: 10.3.5(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) '@storybook/icons': specifier: ^2.0.1 version: 2.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@storybook/react': - specifier: ^10.3.3 - version: 10.3.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) '@storybook/react-vite': - specifier: ^10.3.3 - version: 10.3.3(esbuild@0.25.12)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) + specifier: ^10.3.5 + version: 10.3.5(esbuild@0.25.12)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) + '@types/js-cookie': + specifier: ^3.0.6 + version: 3.0.6 '@types/react': specifier: ^19.2.8 version: 19.2.8 @@ -242,8 +254,8 @@ importers: specifier: ^0.4.26 version: 0.4.26(eslint@9.39.2) eslint-plugin-storybook: - specifier: ^10.3.3 - version: 10.3.3(eslint@9.39.2)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) + specifier: ^10.3.5 + version: 10.3.5(eslint@9.39.2)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) globals: specifier: ^17.0.0 version: 17.0.0 @@ -254,8 +266,8 @@ importers: specifier: ^4.0.1 version: 4.0.1 storybook: - specifier: ^10.3.3 - version: 10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + specifier: ^10.3.5 + version: 10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) typescript: specifier: ~5.9.3 version: 5.9.3 @@ -1790,11 +1802,11 @@ packages: typescript: optional: true - '@joshwooding/vite-plugin-react-docgen-typescript@0.6.4': - resolution: {integrity: sha512-6PyZBYKnnVNqOSB0YFly+62R7dmov8segT27A+RVTBVd4iAE6kbW9QBJGlyR2yG4D4ohzhZSTIu7BK1UTtmFFA==} + '@joshwooding/vite-plugin-react-docgen-typescript@0.7.0': + resolution: {integrity: sha512-qvsTEwEFefhdirGOPnu9Wp6ChfIwy2dBCRuETU3uE+4cC+PFoxMSiiEhxk4lOluA34eARHA0OxqsEUYDqRMgeQ==} peerDependencies: typescript: '>= 4.3.x' - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true @@ -2265,10 +2277,10 @@ packages: peerDependencies: storybook: '>=10.2.10' - '@storybook/addon-docs@10.3.3': - resolution: {integrity: sha512-trJQTpOtuOEuNv1Rn8X2Sopp5hSPpb0u0soEJ71BZAbxe4d2Y1d/1MYcxBdRKwncum6sCTsnxTpqQ/qvSJKlTQ==} + '@storybook/addon-docs@10.3.5': + resolution: {integrity: sha512-WuHbxia/o5TX4Rg/IFD0641K5qId/Nk0dxhmAUNoFs5L0+yfZUwh65XOBbzXqrkYmYmcVID4v7cgDRmzstQNkA==} peerDependencies: - storybook: ^10.3.3 + storybook: ^10.3.5 '@storybook/addon-docs@8.6.14': resolution: {integrity: sha512-Obpd0OhAF99JyU5pp5ci17YmpcQtMNgqW2pTXV8jAiiipWpwO++hNDeQmLmlSXB399XjtRDOcDVkoc7rc6JzdQ==} @@ -2299,11 +2311,11 @@ packages: react: optional: true - '@storybook/addon-links@10.3.3': - resolution: {integrity: sha512-tazBHlB+YbU62bde5DWsq0lnxZjcAsPB3YRUpN2hSMfAySsudRingyWrgu5KeOxXhJvKJj0ohjQvGcMx/wgQUA==} + '@storybook/addon-links@10.3.5': + resolution: {integrity: sha512-Xe2wCGZ+hpZ0cDqAIBHk+kPc8nODNbu585ghd5bLrlYJMDVXoNM/fIlkrLgjIDVbfpgeJLUEg7vldJrn+FyOLw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - storybook: ^10.3.3 + storybook: ^10.3.5 peerDependenciesMeta: react: optional: true @@ -2330,10 +2342,10 @@ packages: '@storybook/addon-measure@9.0.8': resolution: {integrity: sha512-+DAsl7o8Hh4cw+U29c1+IqeLJWVu3swy/wgGhZBpIyhfz22b55cTlquEjwXRV26KBkuQBZih8XhZPU689rc7Rg==} - '@storybook/addon-onboarding@10.3.3': - resolution: {integrity: sha512-HZiHfXdcLc29WkYFW+1VAMtJCeAZOOLRYPvs97woJUcZqW8yfWEJ9MWH+j++736SFAv2aqZWNmP47OdBJ/kMkw==} + '@storybook/addon-onboarding@10.3.5': + resolution: {integrity: sha512-s3/gIy9Tqxji27iclLY+KSk8kGeow1JxXMl1lPLyu8n6XVvv+tFrUPhAvUTs+fVenG6JQEWc0uzpYBdFRWbMtw==} peerDependencies: - storybook: ^10.3.3 + storybook: ^10.3.5 '@storybook/addon-outline@8.6.14': resolution: {integrity: sha512-CW857JvN6OxGWElqjlzJO2S69DHf+xO3WsEfT5mT3ZtIjmsvRDukdWfDU9bIYUFyA2lFvYjncBGjbK+I91XR7w==} @@ -2377,10 +2389,10 @@ packages: storybook: '>=10.2.10' vite: ^5.0.0 || ^6.0.0 || ^7.0.0 - '@storybook/builder-vite@10.3.3': - resolution: {integrity: sha512-awspKCTZvXyeV3KabL0id62mFbxR5u/5yyGQultwCiSb2/yVgBfip2MAqLyS850pvTiB6QFVM9deOyd2/G/bEA==} + '@storybook/builder-vite@10.3.5': + resolution: {integrity: sha512-i4KwCOKbhtlbQIbhm53+Kk7bMnxa0cwTn1pxmtA/x5wm1Qu7FrrBQV0V0DNjkUqzcSKo1CjspASJV/HlY0zYlw==} peerDependencies: - storybook: ^10.3.3 + storybook: ^10.3.5 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 '@storybook/channels@7.6.17': @@ -2418,12 +2430,12 @@ packages: webpack: optional: true - '@storybook/csf-plugin@10.3.3': - resolution: {integrity: sha512-Utlh7zubm+4iOzBBfzLW4F4vD99UBtl2Do4edlzK2F7krQIcFvR2ontjAE8S1FQVLZAC3WHalCOS+Ch8zf3knA==} + '@storybook/csf-plugin@10.3.5': + resolution: {integrity: sha512-qlEzNKxOjq86pvrbuMwiGD/bylnsXk1dg7ve0j77YFjEEchqtl7qTlrXvFdNaLA89GhW6D/EV6eOCu/eobPDgw==} peerDependencies: esbuild: ^0.25.0 rollup: '>=4.59.0' - storybook: ^10.3.3 + storybook: ^10.3.5 vite: '*' webpack: '*' peerDependenciesMeta: @@ -2491,12 +2503,12 @@ packages: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 storybook: '>=10.2.10' - '@storybook/react-dom-shim@10.3.3': - resolution: {integrity: sha512-lkhuh4G3UTreU9M3Iz5Dt32c6U+l/4XuvqLtbe1sDHENZH6aPj7y0b5FwnfHyvuTvYRhtbo29xZrF5Bp9kCC0w==} + '@storybook/react-dom-shim@10.3.5': + resolution: {integrity: sha512-Gw8R7XZm0zSUH0XAuxlQJhmizsLzyD6x00KOlP6l7oW9eQHXGfxg3seNDG3WrSAcW07iP1/P422kuiriQlOv7g==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - storybook: ^10.3.3 + storybook: ^10.3.5 '@storybook/react-dom-shim@8.6.14': resolution: {integrity: sha512-0hixr3dOy3f3M+HBofp3jtMQMS+sqzjKNgl7Arfuj3fvjmyXOks/yGjDImySR4imPtEllvPZfhiQNlejheaInw==} @@ -2513,12 +2525,12 @@ packages: storybook: '>=10.2.10' vite: ^5.0.0 || ^6.0.0 || ^7.0.0 - '@storybook/react-vite@10.3.3': - resolution: {integrity: sha512-qHdlBe1hjqFAGXa8JL7bWTLbP/gDqXbWDm+SYCB646NHh5yvVDkZLwigP5Y+UL7M2ASfqFtosnroUK9tcCM2dw==} + '@storybook/react-vite@10.3.5': + resolution: {integrity: sha512-UB5sJHeh26bfd8sNMx2YPGYRYmErIdTRaLOT28m4bykQIa1l9IgVktsYg/geW7KsJU0lXd3oTbnUjLD+enpi3w==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - storybook: ^10.3.3 + storybook: ^10.3.5 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 '@storybook/react@10.1.11': @@ -2532,12 +2544,12 @@ packages: typescript: optional: true - '@storybook/react@10.3.3': - resolution: {integrity: sha512-cGG5TbR8Tdx9zwlpsWyBEfWrejm5iWdYF26EwIhwuKq9GFUTAVrQzo0Rs7Tqc3ZyVhRS/YfsRiWSEH+zmq2JiQ==} + '@storybook/react@10.3.5': + resolution: {integrity: sha512-tpLTLaVGoA6fLK3ReyGzZUricq7lyPaV2hLPpj5wqdXLV/LpRtAHClUpNoPDYSBjlnSjL81hMZijbkGC3mA+gw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - storybook: ^10.3.3 + storybook: ^10.3.5 typescript: '>= 4.9.x' peerDependenciesMeta: typescript: @@ -3022,6 +3034,9 @@ packages: '@webassemblyjs/wast-printer@1.14.1': resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + '@webcontainer/env@1.1.1': + resolution: {integrity: sha512-6aN99yL695Hi9SuIk1oC88l9o0gmxL1nGWWQ/kNy81HigJ0FoaoTXpytCj6ItzgyCEwA9kF1wixsTuv5cjsgng==} + '@xtuc/ieee754@1.2.0': resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} @@ -3821,11 +3836,11 @@ packages: peerDependencies: eslint: '>=8.40' - eslint-plugin-storybook@10.3.3: - resolution: {integrity: sha512-jo8wZvKaJlxxrNvf4hCsROJP3CdlpaLiYewAs5Ww+PJxCrLelIi5XVHWOAgBvvr3H9WDKvUw8xuvqPYqAlpkFg==} + eslint-plugin-storybook@10.3.5: + resolution: {integrity: sha512-rEFkfU3ypF44GpB4tiJ9EFDItueoGvGi3+weLHZax2ON2MB7VIDsxdSUGvIU5tMURg+oWYlpzCyLm4TpDq2deA==} peerDependencies: eslint: '>=8' - storybook: ^10.3.3 + storybook: ^10.3.5 eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} @@ -5850,6 +5865,15 @@ packages: prettier: optional: true + storybook@10.3.5: + resolution: {integrity: sha512-uBSZu/GZa9aEIW3QMGvdQPMZWhGxSe4dyRWU8B3/Vd47Gy/XLC7tsBxRr13txmmPOEDHZR94uLuq0H50fvuqBw==} + hasBin: true + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + strict-event-emitter@0.5.1: resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} @@ -7481,13 +7505,13 @@ snapshots: '@braintree/wrap-promise@2.1.0': {} - '@chromatic-com/storybook@5.1.1(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': + '@chromatic-com/storybook@5.1.1(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': dependencies: '@neoconfetti/react': 1.0.0 chromatic: 13.3.4 filesize: 10.1.6 jsonfile: 6.1.0 - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) strip-ansi: 7.1.0 transitivePeerDependencies: - '@chromatic-com/cypress' @@ -7930,7 +7954,7 @@ snapshots: optionalDependencies: typescript: 5.9.3 - '@joshwooding/vite-plugin-react-docgen-typescript@0.6.4(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.7.0(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))': dependencies: glob: 13.0.6 react-docgen-typescript: 2.2.2(typescript@5.9.3) @@ -8440,15 +8464,15 @@ snapshots: - vite - webpack - '@storybook/addon-docs@10.3.3(@types/react@19.2.8)(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12))': + '@storybook/addon-docs@10.3.5(@types/react@19.2.8)(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12))': dependencies: '@mdx-js/react': 3.1.1(@types/react@19.2.8)(react@19.2.4) - '@storybook/csf-plugin': 10.3.3(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) + '@storybook/csf-plugin': 10.3.5(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) '@storybook/icons': 2.0.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@storybook/react-dom-shim': 10.3.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + '@storybook/react-dom-shim': 10.3.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' @@ -8507,20 +8531,20 @@ snapshots: optionalDependencies: react: 19.2.3 - '@storybook/addon-links@10.3.3(react@19.2.3)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': + '@storybook/addon-links@10.3.5(react@19.2.3)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': dependencies: '@storybook/global': 5.0.0 - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) optionalDependencies: react: 19.2.3 - '@storybook/addon-mcp@0.4.2(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)': + '@storybook/addon-mcp@0.4.2(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)': dependencies: '@storybook/mcp': 0.6.1(typescript@5.9.3) '@tmcp/adapter-valibot': 0.1.5(tmcp@1.19.3(typescript@5.9.3))(valibot@1.2.0(typescript@5.9.3)) '@tmcp/transport-http': 0.8.5(tmcp@1.19.3(typescript@5.9.3)) picoquery: 2.5.0 - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) tmcp: 1.19.3(typescript@5.9.3) valibot: 1.2.0(typescript@5.9.3) transitivePeerDependencies: @@ -8543,9 +8567,9 @@ snapshots: '@storybook/addon-measure@9.0.8': {} - '@storybook/addon-onboarding@10.3.3(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': + '@storybook/addon-onboarding@10.3.5(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': dependencies: - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@storybook/addon-outline@8.6.14(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': dependencies: @@ -8612,10 +8636,10 @@ snapshots: - rollup - webpack - '@storybook/builder-vite@10.3.3(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12))': + '@storybook/builder-vite@10.3.5(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12))': dependencies: - '@storybook/csf-plugin': 10.3.3(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@storybook/csf-plugin': 10.3.5(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) + storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) ts-dedent: 2.2.0 vite: 7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0) transitivePeerDependencies: @@ -8659,9 +8683,9 @@ snapshots: vite: 7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0) webpack: 5.98.0(esbuild@0.25.12) - '@storybook/csf-plugin@10.3.3(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12))': + '@storybook/csf-plugin@10.3.5(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12))': dependencies: - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) unplugin: 2.3.11 optionalDependencies: esbuild: 0.25.12 @@ -8767,17 +8791,17 @@ snapshots: react-dom: 19.2.3(react@19.2.3) storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@storybook/react-dom-shim@10.3.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': + '@storybook/react-dom-shim@10.3.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': dependencies: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@storybook/react-dom-shim@10.3.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': + '@storybook/react-dom-shim@10.3.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': dependencies: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@storybook/react-dom-shim@8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': dependencies: @@ -8808,19 +8832,19 @@ snapshots: - typescript - webpack - '@storybook/react-vite@10.3.3(esbuild@0.25.12)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12))': + '@storybook/react-vite@10.3.5(esbuild@0.25.12)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.4(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.7.0(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0)) '@rollup/pluginutils': 5.1.4(rollup@4.60.0) - '@storybook/builder-vite': 10.3.3(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) - '@storybook/react': 10.3.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) + '@storybook/builder-vite': 10.3.5(esbuild@0.25.12)(rollup@4.60.0)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0))(webpack@5.98.0(esbuild@0.25.12)) + '@storybook/react': 10.3.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) empathic: 2.0.0 magic-string: 0.30.21 react: 19.2.3 react-docgen: 8.0.2 react-dom: 19.2.3(react@19.2.3) resolve: 1.22.10 - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) tsconfig-paths: 4.2.0 vite: 7.3.1(@types/node@25.0.8)(terser@5.44.0)(yaml@2.7.0) transitivePeerDependencies: @@ -8843,15 +8867,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@storybook/react@10.3.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)': + '@storybook/react@10.3.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)': dependencies: '@storybook/global': 5.0.0 - '@storybook/react-dom-shim': 10.3.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + '@storybook/react-dom-shim': 10.3.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) react: 19.2.3 react-docgen: 8.0.2 react-docgen-typescript: 2.2.2(typescript@5.9.3) react-dom: 19.2.3(react@19.2.3) - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: @@ -9496,6 +9520,8 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 + '@webcontainer/env@1.1.1': {} + '@xtuc/ieee754@1.2.0': {} '@xtuc/long@4.2.2': {} @@ -10325,11 +10351,11 @@ snapshots: dependencies: eslint: 9.39.2 - eslint-plugin-storybook@10.3.3(eslint@9.39.2)(storybook@10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3): + eslint-plugin-storybook@10.3.5(eslint@9.39.2)(storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3): dependencies: '@typescript-eslint/utils': 8.53.0(eslint@9.39.2)(typescript@5.9.3) eslint: 9.39.2 - storybook: 10.3.3(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + storybook: 10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) transitivePeerDependencies: - supports-color - typescript @@ -12767,6 +12793,30 @@ snapshots: - react-dom - utf-8-validate + storybook@10.3.5(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + dependencies: + '@storybook/global': 5.0.0 + '@storybook/icons': 2.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@testing-library/jest-dom': 6.9.1 + '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) + '@vitest/expect': 3.2.4 + '@vitest/spy': 3.2.4 + '@webcontainer/env': 1.1.1 + esbuild: 0.25.12 + open: 10.2.0 + recast: 0.23.11 + semver: 7.7.3 + use-sync-external-store: 1.6.0(react@19.2.3) + ws: 8.18.3 + optionalDependencies: + prettier: 2.8.8 + transitivePeerDependencies: + - '@testing-library/dom' + - bufferutil + - react + - react-dom + - utf-8-validate + strict-event-emitter@0.5.1: {} string-width@4.2.3:
Ships in {min.days}–{max?.days ?? min.days} days
+ Ships in {min.days}–{max?.days ?? min.days} day(s) +