From 08ecd3d27e5dfce4ea1b478f42193601991a2804 Mon Sep 17 00:00:00 2001 From: Sergei Garin Date: Mon, 27 Jan 2025 14:32:19 +0300 Subject: [PATCH] Breadcrumbs component (#12115) This PR is a prerequisite for https://github.com/enso-org/cloud-v2/issues/1656 Closes: https://github.com/enso-org/cloud-v2/issues/1714 Please refer to storybook for visual review. ![CleanShot 2025-01-24 at 14 05 17@2x](https://github.com/user-attachments/assets/f12df1d9-3ed0-40c5-9897-951873a1166f) Features: 1. Collapses intermediate elements into a menu 2. Allows to add start and end addons (E.g. add a dropdown with actions) 3. Displays icons 4. Truncate long text and display a popup 5. Can be disabled. 6. Current page is not clickable. --- .github/workflows/gui-checks.yml | 32 +- app/common/package.json | 2 +- app/common/src/text/english.json | 1 + app/gui/package.json | 26 +- app/gui/src/dashboard/assets/expand_arrow.svg | 3 + .../assets/three_horizontal_dots_outline.svg | 6 + .../AriaComponents/Button/ButtonGroup.tsx | 1 + .../components/AriaComponents/Button/types.ts | 28 +- .../AriaComponents/Button/variants.ts | 2 +- .../AriaComponents/Dialog/Popover.tsx | 4 +- .../AriaComponents/Menu/Menu.stories.tsx | 75 +- .../components/AriaComponents/Menu/Menu.tsx | 12 +- .../AriaComponents/Menu/MenuItem.tsx | 22 +- .../components/AriaComponents/Text/Text.tsx | 7 +- .../components/AriaComponents/types.ts | 23 + .../components/Breadcrumbs/BreadcrumbItem.tsx | 258 +++++ .../Breadcrumbs/Breadcrumbs.stories.tsx | 557 +++++++++++ .../Breadcrumbs/Breadcrumbs.test.tsx | 119 +++ .../components/Breadcrumbs/Breadcrumbs.tsx | 149 +++ .../dashboard/components/Breadcrumbs/index.ts | 7 + .../components/Breadcrumbs/utilities.ts | 80 ++ .../components/Icon/Icon.stories.tsx | 125 +++ .../src/dashboard/components/Icon/Icon.tsx | 90 ++ .../src/dashboard/components/Icon/index.ts | 2 + app/gui/src/dashboard/components/SvgMask.tsx | 18 +- .../dashboard/components/dashboard/column.ts | 2 +- app/gui/src/dashboard/hooks/scrollHooks.ts | 2 +- app/gui/src/dashboard/layouts/UserBar.tsx | 4 +- app/ydoc-server/package.json | 2 +- app/ydoc-shared/package.json | 4 +- eslint.config.mjs | 21 +- package.json | 4 +- pnpm-lock.yaml | 935 +++++++----------- 33 files changed, 1955 insertions(+), 668 deletions(-) create mode 100644 app/gui/src/dashboard/assets/expand_arrow.svg create mode 100644 app/gui/src/dashboard/assets/three_horizontal_dots_outline.svg create mode 100644 app/gui/src/dashboard/components/Breadcrumbs/BreadcrumbItem.tsx create mode 100644 app/gui/src/dashboard/components/Breadcrumbs/Breadcrumbs.stories.tsx create mode 100644 app/gui/src/dashboard/components/Breadcrumbs/Breadcrumbs.test.tsx create mode 100644 app/gui/src/dashboard/components/Breadcrumbs/Breadcrumbs.tsx create mode 100644 app/gui/src/dashboard/components/Breadcrumbs/index.ts create mode 100644 app/gui/src/dashboard/components/Breadcrumbs/utilities.ts create mode 100644 app/gui/src/dashboard/components/Icon/Icon.stories.tsx create mode 100644 app/gui/src/dashboard/components/Icon/Icon.tsx create mode 100644 app/gui/src/dashboard/components/Icon/index.ts diff --git a/.github/workflows/gui-checks.yml b/.github/workflows/gui-checks.yml index b2819ba27904..3c6cfe169cee 100644 --- a/.github/workflows/gui-checks.yml +++ b/.github/workflows/gui-checks.yml @@ -48,9 +48,10 @@ jobs: with: path: | **/.eslintcache - key: ${{ runner.os }}-gui-${{ github.run_id }} + **/node_modules/.vite + key: ${{ runner.os }}-gui-lint-${{ github.run_id }} restore-keys: | - ${{ runner.os }}-gui + ${{ runner.os }}-gui-lint # Next Tasks are depend on Typecheck, because we build libraries at this stage - name: โš™๏ธ Compile @@ -68,11 +69,6 @@ jobs: continue-on-error: true run: pnpm run ci:lint - - name: ๐Ÿงช Unit Tests - id: unit-tests - continue-on-error: true - run: pnpm run ci:unit-test - - name: ๐Ÿ“ Annotate Code Linting Results if: always() continue-on-error: true @@ -86,14 +82,10 @@ jobs: fail-on-error: false fail-on-warning: false - - name: โŒ Fail if any check failed - if: always() && (steps.lint.outcome == 'failure' || steps.compile.outcome == 'failure' || steps.typecheck.outcome == 'failure' || steps.unit-tests.outcome == 'failure') - run: | - echo "Lint outcome: ${{ steps.lint.outcome }}" - echo "Compile outcome: ${{ steps.compile.outcome }}" - echo "Typecheck outcome: ${{ steps.typecheck.outcome }}" - echo "Unit tests outcome: ${{ steps.unit-tests.outcome }}" - exit 1 + - name: ๐Ÿงช Unit Tests + id: unit-tests + continue-on-error: true + run: pnpm run ci:unit-test - name: ๐Ÿ’พ Save cache uses: actions/cache/save@v4 @@ -103,6 +95,16 @@ jobs: key: ${{ steps.cache.outputs.cache-primary-key }} path: | **/.eslintcache + **/node_modules/.vite + + - name: โŒ Fail if any check failed + if: always() && (steps.lint.outcome == 'failure' || steps.compile.outcome == 'failure' || steps.typecheck.outcome == 'failure' || steps.unit-tests.outcome == 'failure') + run: | + echo "Lint outcome: ${{ steps.lint.outcome }}" + echo "Compile outcome: ${{ steps.compile.outcome }}" + echo "Typecheck outcome: ${{ steps.typecheck.outcome }}" + echo "Unit tests outcome: ${{ steps.unit-tests.outcome }}" + exit 1 playwright: name: ๐ŸŽญ Playwright Tests diff --git a/app/common/package.json b/app/common/package.json index a7419c4abbe8..73322f15bcf4 100644 --- a/app/common/package.json +++ b/app/common/package.json @@ -31,6 +31,6 @@ "@types/node": "^20.11.21", "lib0": "^0.2.99", "react": "^18.3.1", - "vitest": "3.0.0-beta.3" + "vitest": "3.0.3" } } diff --git a/app/common/src/text/english.json b/app/common/src/text/english.json index b6e9076c27cb..852e6c3ba356 100644 --- a/app/common/src/text/english.json +++ b/app/common/src/text/english.json @@ -2,6 +2,7 @@ "submit": "Submit", "retry": "Retry", "hide": "Hide", + "more": "More", "arbitraryFetchError": "An error occurred while fetching data", "arbitraryFetchImageError": "An error occurred while fetching an image", diff --git a/app/gui/package.json b/app/gui/package.json index b40cc395745f..52786d674a1c 100644 --- a/app/gui/package.json +++ b/app/gui/package.json @@ -35,8 +35,8 @@ "test-dev:unit": "vitest", "test-dev:integration": "cross-env NODE_ENV=production playwright test --ui", "test-dev-dashboard:integration": "cross-env NODE_ENV=production playwright test ./integration-test/dashboard/ --ui", - "storybook:react": "cross-env FRAMEWORK=react storybook dev", - "storybook:vue": "cross-env FRAMEWORK=vue storybook dev", + "storybook:react": "cross-env FRAMEWORK=react storybook dev --port 6006 --no-open", + "storybook:vue": "cross-env FRAMEWORK=vue storybook dev --port 7007 --no-open", "build-storybook:react": "cross-env FRAMEWORK=react storybook build", "build-storybook:vue": "cross-env FRAMEWORK=vue storybook build", "chromatic:react": "cross-env FRAMEWORK=react chromatic deploy", @@ -147,15 +147,15 @@ "@open-rpc/server-js": "^1.9.5", "@playwright/test": "^1.49.1", "@react-types/shared": "3.27.0", - "@storybook/addon-essentials": "^8.4.7", - "@storybook/addon-interactions": "^8.4.7", - "@storybook/addon-onboarding": "^8.4.7", - "@storybook/blocks": "^8.4.7", - "@storybook/react": "^8.4.7", - "@storybook/react-vite": "^8.4.7", - "@storybook/test": "^8.4.7", - "@storybook/vue3": "^8.4.7", - "@storybook/vue3-vite": "^8.4.7", + "@storybook/addon-essentials": "8.5.0", + "@storybook/addon-interactions": "8.5.0", + "@storybook/addon-onboarding": "8.5.0", + "@storybook/blocks": "8.5.0", + "@storybook/react": "8.5.0", + "@storybook/react-vite": "8.5.0", + "@storybook/test": "8.5.0", + "@storybook/vue3": "8.5.0", + "@storybook/vue3-vite": "8.5.0", "@tanstack/react-query-devtools": "5.59.20", "@testing-library/jest-dom": "6.6.3", "@testing-library/react": "16.0.1", @@ -200,7 +200,7 @@ "resize-observer-polyfill": "1.5.1", "shuffle-seed": "^1.1.6", "sql-formatter": "^13.1.0", - "storybook": "^8.4.7", + "storybook": "8.5.0", "tailwindcss": "^3.4.17", "tailwindcss-animate": "1.0.7", "tailwindcss-react-aria-components": "1.2.0", @@ -209,7 +209,7 @@ "vite": "^6.0.9", "vite-plugin-vue-devtools": "7.6.8", "vite-plugin-wasm": "^3.4.1", - "vitest": "3.0.0-beta.3", + "vitest": "3.0.3", "vue-react-wrapper": "^0.3.1", "vue-tsc": "^2.2.0", "yaml": "^2.7.0", diff --git a/app/gui/src/dashboard/assets/expand_arrow.svg b/app/gui/src/dashboard/assets/expand_arrow.svg new file mode 100644 index 000000000000..aa8fb1178bd9 --- /dev/null +++ b/app/gui/src/dashboard/assets/expand_arrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/app/gui/src/dashboard/assets/three_horizontal_dots_outline.svg b/app/gui/src/dashboard/assets/three_horizontal_dots_outline.svg new file mode 100644 index 000000000000..0587304222e1 --- /dev/null +++ b/app/gui/src/dashboard/assets/three_horizontal_dots_outline.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/gui/src/dashboard/components/AriaComponents/Button/ButtonGroup.tsx b/app/gui/src/dashboard/components/AriaComponents/Button/ButtonGroup.tsx index 04e9b71f690e..da042d5d9308 100644 --- a/app/gui/src/dashboard/components/AriaComponents/Button/ButtonGroup.tsx +++ b/app/gui/src/dashboard/components/AriaComponents/Button/ButtonGroup.tsx @@ -21,6 +21,7 @@ const STYLES = tv({ width: { auto: 'w-auto', full: 'w-full', min: 'w-min', max: 'w-max' }, gap: { custom: '', + none: 'gap-0', joined: 'gap-0', large: 'gap-3.5', medium: 'gap-2', diff --git a/app/gui/src/dashboard/components/AriaComponents/Button/types.ts b/app/gui/src/dashboard/components/AriaComponents/Button/types.ts index 8488cef0038c..797a6f5957c0 100644 --- a/app/gui/src/dashboard/components/AriaComponents/Button/types.ts +++ b/app/gui/src/dashboard/components/AriaComponents/Button/types.ts @@ -6,6 +6,7 @@ import type * as aria from '#/components/aria' import type { ExtractFunction } from '#/utilities/tailwindVariants' import type { ReactElement, ReactNode } from 'react' +import type { Addon, IconProp, TestIdProps } from '../types' import type { BUTTON_STYLES, ButtonVariants } from './variants' /** @@ -61,19 +62,15 @@ interface PropsWithoutHref { /** Base props for a button. */ export interface BaseButtonProps - extends Omit { + extends Omit, + TestIdProps { /** If `true`, the loader will not be shown. */ readonly hideLoader?: boolean /** Falls back to `aria-label`. Pass `false` to explicitly disable the tooltip. */ readonly tooltip?: ReactElement | string | false | null readonly tooltipPlacement?: aria.Placement /** The icon to display in the button */ - readonly icon?: - | ReactElement - | string - | ((render: Render) => ReactElement | string | null) - | null - | undefined + readonly icon?: IconProp /** When `true`, icon will be shown only when hovered. */ readonly showIconOnHover?: boolean /** @@ -82,7 +79,6 @@ export interface BaseButtonProps */ readonly onPress?: ((event: aria.PressEvent) => Promise | void) | null | undefined readonly contentClassName?: string - readonly testId?: string readonly isDisabled?: boolean readonly formnovalidate?: boolean /** @@ -94,20 +90,8 @@ export interface BaseButtonProps readonly children?: ReactNode | ((render: Render) => ReactNode) - readonly addonStart?: - | ReactElement - | string - | false - | ((render: Render) => ReactElement | string | null) - | null - | undefined - readonly addonEnd?: - | ReactElement - | string - | false - | ((render: Render) => ReactElement | string | null) - | null - | undefined + readonly addonStart?: Addon + readonly addonEnd?: Addon } /** diff --git a/app/gui/src/dashboard/components/AriaComponents/Button/variants.ts b/app/gui/src/dashboard/components/AriaComponents/Button/variants.ts index 543b6e00fa3f..904d78500504 100644 --- a/app/gui/src/dashboard/components/AriaComponents/Button/variants.ts +++ b/app/gui/src/dashboard/components/AriaComponents/Button/variants.ts @@ -124,7 +124,7 @@ export const BUTTON_STYLES = tv({ }, iconOnly: { // Specified in the compoundVariants - true: '', + true: 'aspect-square', }, rounded: { full: 'rounded-full', diff --git a/app/gui/src/dashboard/components/AriaComponents/Dialog/Popover.tsx b/app/gui/src/dashboard/components/AriaComponents/Dialog/Popover.tsx index 19362a499ba0..740b232ef98f 100644 --- a/app/gui/src/dashboard/components/AriaComponents/Dialog/Popover.tsx +++ b/app/gui/src/dashboard/components/AriaComponents/Dialog/Popover.tsx @@ -14,6 +14,7 @@ import * as twv from '#/utilities/tailwindVariants' import { useEventCallback } from '#/hooks/eventCallbackHooks' import { ResetButtonGroupContext } from '../Button' +import { Close } from './Close' import * as dialogProvider from './DialogProvider' import * as dialogStackProvider from './DialogStackProvider' import { DialogTrigger } from './DialogTrigger' @@ -86,7 +87,6 @@ export function Popover(props: PopoverProps) { size, rounded, variant, - placement = 'bottom start', isDismissable = true, ...ariaPopoverProps } = props @@ -110,7 +110,6 @@ export function Popover(props: PopoverProps) { }) } UNSTABLE_portalContainer={root} - placement={placement} style={popoverStyle} shouldCloseOnInteractOutside={() => false} {...ariaPopoverProps} @@ -209,3 +208,4 @@ function PopoverContent(props: PopoverContentProps) { } Popover.Trigger = DialogTrigger +Popover.Close = Close diff --git a/app/gui/src/dashboard/components/AriaComponents/Menu/Menu.stories.tsx b/app/gui/src/dashboard/components/AriaComponents/Menu/Menu.stories.tsx index d9361ea6227e..283c70ee3dda 100644 --- a/app/gui/src/dashboard/components/AriaComponents/Menu/Menu.stories.tsx +++ b/app/gui/src/dashboard/components/AriaComponents/Menu/Menu.stories.tsx @@ -8,17 +8,19 @@ import EyeClosed from '#/assets/eye_crossed.svg' import Folder from '#/assets/folder.svg' import type { Meta, StoryObj } from '@storybook/react' +import { useText } from '#/providers/TextProvider' import { expect, userEvent, within } from '@storybook/test' import type { MenuProps } from '.' import { Menu } from '.' +import { passwordSchema } from '../../../pages/authentication/schemas' import { Button } from '../Button' +import { Popover } from '../Dialog' +import { Form } from '../Form' +import { Input } from '../Inputs' const meta = { title: 'Components/Menu', component: Menu, - parameters: { - layout: 'centered', - }, play: async ({ canvasElement }) => { const canvas = within(canvasElement) const button = canvas.getByRole('button', { name: 'Open Menu' }) @@ -189,7 +191,7 @@ function MenuContentWithDescription() { Open Submenu - + Submenu item @@ -268,3 +270,68 @@ export const DynamicContent: Story = { await expect(canvas.getByRole('menu')).toBeInTheDocument() }, } + +export const WithPopover: Story = { + render: () => { + // eslint-disable-next-line react-hooks/rules-of-hooks + const { getText } = useText() + return ( + + + + + New File + + + + Save + Cut + Copy + Paste + Delete + Rename + Move + + + Edit Secret + + +
z.object({ name: z.string(), password: passwordSchema(getText) })} + onSubmit={() => new Promise((resolve) => setTimeout(resolve, 1000))} + > + + + + + Save + Cancel + + + +
+
+
+
+ ) + }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement) + + const button = canvas.getByRole('button', { name: 'Open Menu' }) + await userEvent.click(button) + + await userEvent.hover(canvas.getByRole('menuitem', { name: 'Edit Secret' })) + + const nameInput = await canvas.findByRole('textbox', { name: 'Name' }) + await userEvent.type(nameInput, 'John') + + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const passwordInput = canvas.getByTestId('password').querySelector('input')! + await userEvent.type(passwordInput, 'abc123sadflmsdkf') + + const saveButton = await canvas.findByRole('button', { name: 'Save' }) + await userEvent.click(saveButton) + }, +} diff --git a/app/gui/src/dashboard/components/AriaComponents/Menu/Menu.tsx b/app/gui/src/dashboard/components/AriaComponents/Menu/Menu.tsx index a791b0a9891c..a8c7e16b91a1 100644 --- a/app/gui/src/dashboard/components/AriaComponents/Menu/Menu.tsx +++ b/app/gui/src/dashboard/components/AriaComponents/Menu/Menu.tsx @@ -15,7 +15,7 @@ import { AnimatedBackground } from '../../AnimatedBackground' import { Popover } from '../Dialog' import { Separator, SEPARATOR_STYLES, type SeparatorProps } from '../Separator' import { Text } from '../Text' -import type { Placement, TestIdProps } from '../types' +import type { TestIdProps } from '../types' import { MenuItem } from './MenuItem' import { MenuTrigger } from './MenuTrigger' @@ -45,7 +45,6 @@ export interface MenuProps TestIdProps { readonly variant?: 'dark' | 'light' readonly className?: string - readonly placement?: Placement } /** Props for {@link MenuSection} */ @@ -91,7 +90,6 @@ export const Menu = createHideableComponent(function Menu(prop variant, className, children, - placement = 'bottom start', variants = MENU_STYLES, testId = 'menu', ...menuProps @@ -100,13 +98,7 @@ export const Menu = createHideableComponent(function Menu(prop const styles = variants() return ( - + {() => ( data-testid={testId} className={styles.base({ className })} {...menuProps}> diff --git a/app/gui/src/dashboard/components/AriaComponents/Menu/MenuItem.tsx b/app/gui/src/dashboard/components/AriaComponents/Menu/MenuItem.tsx index 903768863b5b..8c832c0b68fa 100644 --- a/app/gui/src/dashboard/components/AriaComponents/Menu/MenuItem.tsx +++ b/app/gui/src/dashboard/components/AriaComponents/Menu/MenuItem.tsx @@ -8,10 +8,11 @@ import { memo, type ReactElement, type ReactNode } from 'react' import type { MenuItemProps as AriaMenuItemProps, MenuItemRenderProps } from 'react-aria-components' import { MenuItem as AriaMenuItem, Keyboard } from 'react-aria-components' import { AnimatedBackground } from '../../AnimatedBackground' +import { Icon } from '../../Icon' import SvgMask from '../../SvgMask' import { Check } from '../Check' import { Text, TEXT_STYLE } from '../Text' -import type { TestIdProps } from '../types' +import type { IconProp, TestIdProps } from '../types' export const MENU_ITEM_STYLES = tv({ base: 'group flex w-full cursor-default gap-3 rounded-3xl px-[14px] py-1 outline-none transition-colors duration-75 text-left', @@ -57,10 +58,7 @@ export type MenuItemProps = MenuItemBaseProps & */ export interface MenuItemBaseProps { /** Icon to display before the menu item text. Can be a string (path to SVG), ReactElement, or a render function */ - readonly icon?: - | ReactElement - | string - | ((renderProps: MenuItemRenderProps) => ReactElement | string) + readonly icon?: IconProp /** Keyboard shortcut text to display */ readonly shortcut?: string /** Additional class name */ @@ -166,15 +164,11 @@ interface MenuItemIconProps extends MenuItemRenderProps { const MenuItemIcon = memo(function MenuItemIcon(props: MenuItemIconProps) { const { icon, className, ...renderProps } = props - if (icon == null) return null - - const iconContent = typeof icon === 'function' ? icon(renderProps) : icon - - if (typeof iconContent === 'string') { - return - } - - return iconContent + return ( + + {icon} + + ) }) /** Renders the selection indicator for the menu item */ diff --git a/app/gui/src/dashboard/components/AriaComponents/Text/Text.tsx b/app/gui/src/dashboard/components/AriaComponents/Text/Text.tsx index cbb0da72b713..cb5c0ab75c83 100644 --- a/app/gui/src/dashboard/components/AriaComponents/Text/Text.tsx +++ b/app/gui/src/dashboard/components/AriaComponents/Text/Text.tsx @@ -254,13 +254,14 @@ const Heading = memo( }), ) -Text.Heading = Heading - /** Text group component. It's used to visually group text elements together */ -Text.Group = function TextGroup(props: React.PropsWithChildren) { +function TextGroup(props: React.PropsWithChildren) { return ( {props.children} ) } + +Text.Heading = Heading +Text.Group = TextGroup diff --git a/app/gui/src/dashboard/components/AriaComponents/types.ts b/app/gui/src/dashboard/components/AriaComponents/types.ts index 76abe5a05a30..a30d8b533d2e 100644 --- a/app/gui/src/dashboard/components/AriaComponents/types.ts +++ b/app/gui/src/dashboard/components/AriaComponents/types.ts @@ -1,4 +1,5 @@ /** @file Common types for ARIA components. */ +import type { ReactElement } from 'react' import type * as reactAria from 'react-aria' /** Props for adding a test id to a component */ @@ -13,3 +14,25 @@ export interface TestIdProps { * This type represents the possible positions where an element can be placed relative to a reference element. */ export type Placement = reactAria.Placement + +/** + * Generic type for any icon + */ +export type IconProp = + | ReactElement + | string + | false + | ((render: Render) => ReactElement | string | false | null | undefined) + | null + | undefined + +/** + * Generic type for any addon + */ +export type Addon = + | ReactElement + | string + | false + | ((render: Render) => ReactElement | string | false | null | undefined) + | null + | undefined diff --git a/app/gui/src/dashboard/components/Breadcrumbs/BreadcrumbItem.tsx b/app/gui/src/dashboard/components/Breadcrumbs/BreadcrumbItem.tsx new file mode 100644 index 000000000000..7c93bc366519 --- /dev/null +++ b/app/gui/src/dashboard/components/Breadcrumbs/BreadcrumbItem.tsx @@ -0,0 +1,258 @@ +/** + * @file Breadcrumbs component implementation. + */ + +import { useText } from '#/providers/TextProvider' +import { tv, type VariantProps } from '#/utilities/tailwindVariants' +import { createLeafComponent } from '@react-aria/collections' +import { isValidElement } from 'react' +import * as aria from 'react-aria-components' +import { Button, Menu, Text, type Addon, type IconProp, type TestIdProps } from '../AriaComponents' +import { Icon as IconComponent } from '../Icon' + +export const BREADCRUMB_ITEM_STYLES = tv({ + base: 'flex items-center gap-2', + slots: { + link: 'max-w-48 block', + more: 'aspect-square', + container: 'flex items-center gap-2', + }, + variants: { + isCurrent: { + true: { link: 'px-2' }, + }, + }, + defaultVariants: { + isCurrent: false, + }, +}) + +/** + * Props for {@link BreadcrumbItem} + */ +export interface BreadcrumbItemProps + extends Omit, + Omit, + TestIdProps, + VariantProps { + /** A unique id for the breadcrumb, which will be passed to `onAction` when the breadcrumb is pressed. */ + readonly id?: aria.Key | undefined + /** An optional suffix element to render after the breadcrumb content */ + readonly addonStart?: Addon + readonly addonEnd?: Addon + readonly icon?: IconProp + readonly isCurrent?: boolean + readonly isDisabled?: boolean +} + +/** + * A single breadcrumb item. + */ +export function BreadcrumbItem(props: BreadcrumbItemProps) { + const { + children, + id, + variants = BREADCRUMB_ITEM_STYLES, + className, + style = {}, + addonStart, + addonEnd, + icon, + isDisabled = false, + isCurrent = false, + href, + hrefLang, + target, + download, + rel, + ping, + referrerPolicy, + ...itemProps + } = props + + const linkProps = + isCurrent ? + {} + // This is safe because we're passing link props transparently + // eslint-disable-next-line no-restricted-syntax + : ({ + href, + hrefLang, + target, + download, + rel, + ping, + referrerPolicy, + } as Pick< + aria.LinkProps, + 'download' | 'href' | 'hrefLang' | 'ping' | 'referrerPolicy' | 'rel' | 'target' + >) + + const styles = variants({ + isCurrent, + }) + + return ( + + styles.base({ + className: typeof className === 'function' ? className(renderProps) : className, + }) + } + style={style} + {...(id != null ? { id } : {})} + > + {(renderProps) => { + const container = + isCurrent ? + + + + {icon} + + {typeof children === 'function' ? children(renderProps) : children} + + + : + + return ( +
+ + {typeof addonStart === 'function' ? addonStart(renderProps) : addonStart} + + {container} + + {typeof addonEnd === 'function' ? addonEnd(renderProps) : addonEnd} + +
+ ) + }} +
+ ) +} + +/** + * Props for {@link BreadcrumbCollapsedItem} + */ +interface BreadcrumbCollapsedItemProps { + readonly id?: aria.Key | undefined + /** The items to render */ + readonly items: T[] + /** The children to render */ + readonly children: (item: T) => React.ReactNode + readonly triggerLabel?: string +} + +/** + * A collapsed breadcrumb item. Displays a menu with the items, that don't fit in the breadcrumbs list. + * @internal + */ +// eslint-disable-next-line no-restricted-syntax +export const BreadcrumbCollapsedItem = createLeafComponent( + 'BreadcrumbCollapsedItem', + function BreadcrumbCollapsedItem(props: BreadcrumbCollapsedItemProps) { + const { getText } = useText() + + const { items, children, triggerLabel = getText('more') } = props + + return ( + + + + + {(menuItem) => { + const breadcrumb = children(menuItem) + + if (isValidElement(breadcrumb) && breadcrumb.type === BreadcrumbItem) { + const { + testId, + id, + children: breadcrumbChildren, + href, + download, + target, + hrefLang, + isCurrent = false, + isDisabled = false, + 'aria-describedby': ariaDescribedby, + rel, + icon, + // eslint-disable-next-line no-restricted-syntax + } = breadcrumb.props as BreadcrumbItemProps + + if (breadcrumbChildren == null) { + return null + } + + // eslint-disable-next-line no-restricted-syntax + const linkProps = { + href, + download, + target, + hrefLang, + rel, + } as Pick + + return ( + { + if (typeof icon === 'function') { + return icon({ isCurrent, isDisabled }) + } + + return icon + }} + > + <> + {typeof breadcrumbChildren === 'function' ? + breadcrumbChildren({ + isCurrent, + isDisabled, + defaultChildren: <>, + }) + : breadcrumbChildren} + + + ) + } + + return null + }} + + + ) + }, +) as (props: BreadcrumbCollapsedItemProps) => React.ReactNode diff --git a/app/gui/src/dashboard/components/Breadcrumbs/Breadcrumbs.stories.tsx b/app/gui/src/dashboard/components/Breadcrumbs/Breadcrumbs.stories.tsx new file mode 100644 index 000000000000..560ba1a89caf --- /dev/null +++ b/app/gui/src/dashboard/components/Breadcrumbs/Breadcrumbs.stories.tsx @@ -0,0 +1,557 @@ +/** + * @file Stories for the Breadcrumbs component. + */ + +import Cloud from '#/assets/cloud.svg' +import ArrowDown from '#/assets/expand_arrow.svg' +import Folder from '#/assets/folder.svg' +import Add from '#/assets/plus.svg' +import { Button, Menu } from '#/components/AriaComponents' +import type { Meta, StoryObj } from '@storybook/react' +import { expect, userEvent, within } from '@storybook/test' +import { useState } from 'react' +import { Breadcrumbs } from '.' + +export default { + title: 'Components/Breadcrumbs', + component: Breadcrumbs, + parameters: { + layout: 'centered', + }, +} satisfies Meta + +type Story = StoryObj + +export const Default: Story = { + render: () => ( + + {}}>Home + {}}> + Projects Lorem ipsum dolor sit amet consectetur adipisicing elit. Praesentium at voluptates + necessitatibus ut quas quae veritatis optio natus? Sint voluptatem dolores, velit architecto + ipsam officiis fugit eligendi. Molestiae, modi possimus. + + {}} isCurrent> + Very long title Lorem ipsum dolor sit amet consectetur, adipisicing elit. Quaerat quis + aperiam libero dolorem molestias autem voluptas eum culpa ea ipsum suscipit modi asperiores + optio perferendis accusamus dignissimos, assumenda sequi numquam? + + + ), +} + +export const WithDisabledItem: Story = { + render: () => ( + + {}}>Home + Projects + {}} isDisabled> + Current Project + + + ), +} + +export const WithSuffix: Story = { + render: () => ( + + Home + + + } + > + Dashboard + + { + // Handle click + }} + addonStart={ + + } + > + Settings + + + โœ๏ธ + + } + isCurrent + > + Edit Profile + + + + {/* Mixed content as start addons */} + + { + // Handle click + }} + addonStart={ +
+ ๐Ÿ‘ฅ + 5 +
+ } + > + Team +
+ { + // Handle click + }} + addonStart={ +
+ ๐Ÿ“Š +
+
+
+
+ } + > + Progress + + { + // Handle click + }} + addonStart={ +
+ ๐ŸŽฏ + 3/5 +
+ } + isCurrent + > + Milestones +
+ +
+ ), +} + +export const WithCustomIcon: Story = { + render: () => ( +
+ {/* Simple SVG icons */} + + Home + Projects + Team + Documents + Reports + + March 2025 + + + + {/* Icons with dynamic colors */} + + { + // Handle click + }} + icon={({ isDisabled }) => ( + + + + )} + > + Profile + + { + // Handle click + }} + icon={({ isDisabled }) => ( + + + + )} + > + Analytics + + { + // Handle click + }} + icon={({ isCurrent }) => ( + + + + + )} + isCurrent + > + Settings + + + + {/* Icons with badges */} + + { + // Handle click + }} + icon={() => ( +
+ + + + + + + +
+ )} + > + Messages +
+ { + // Handle click + }} + icon={() => ( +
+ + + + + 3 + +
+ )} + > + Notifications +
+ { + // Handle click + }} + icon={() => ( +
+ + + + +
+ )} + isCurrent + > + Pending +
+
+
+ ), +} diff --git a/app/gui/src/dashboard/components/Breadcrumbs/Breadcrumbs.test.tsx b/app/gui/src/dashboard/components/Breadcrumbs/Breadcrumbs.test.tsx new file mode 100644 index 000000000000..29e6fbeb994f --- /dev/null +++ b/app/gui/src/dashboard/components/Breadcrumbs/Breadcrumbs.test.tsx @@ -0,0 +1,119 @@ +/** + * @file Tests for the Breadcrumbs component. + */ + +import { describe } from 'vitest' +import { getItemsWithCollapsedItem } from './utilities' + +describe('getItemsWithCollapsedItem', (it) => { + it('returns the items when there is enough space', ({ expect }) => { + const items = getItemsWithCollapsedItem(['Home', 'Projects', 'Current Project']) + expect(items).toEqual(['Home', 'Projects', 'Current Project']) + }) + + it('returns the items with a collapsed item when there is not enough space', ({ expect }) => { + const items = getItemsWithCollapsedItem([ + 'Home', + 'Projects', + 'Team', + 'Documents', + 'Reports', + 'Current Report', + ]) + + expect(items).toMatchObject([ + 'Home', + { items: ['Projects', 'Team', 'Documents'] }, + 'Reports', + 'Current Report', + ]) + }) + + it('handles empty input array', ({ expect }) => { + const items = getItemsWithCollapsedItem([]) + expect(items).toEqual([]) + }) + + it('handles single item array', ({ expect }) => { + const items = getItemsWithCollapsedItem(['Home']) + expect(items).toEqual(['Home']) + }) + + it('handles custom startVisibleItemsCount', ({ expect }) => { + const items = getItemsWithCollapsedItem(['Home', 'Projects', 'Team', 'Documents', 'Reports'], { + startVisibleItemsCount: 2, + }) + + expect(items).toMatchObject(['Home', 'Projects', { items: ['Team'] }, 'Documents', 'Reports']) + }) + + it('handles custom endVisibleItemsCount', ({ expect }) => { + const items = getItemsWithCollapsedItem(['Home', 'Projects', 'Team', 'Documents', 'Reports'], { + endVisibleItemsCount: 3, + }) + + expect(items).toMatchObject(['Home', { items: ['Projects'] }, 'Team', 'Documents', 'Reports']) + }) + + it('handles both custom start and end counts', ({ expect }) => { + const items = getItemsWithCollapsedItem( + ['Home', 'Projects', 'Team', 'Documents', 'Reports', 'Final'], + { startVisibleItemsCount: 2, endVisibleItemsCount: 1 }, + ) + + expect(items).toMatchObject([ + 'Home', + 'Projects', + { items: ['Team', 'Documents', 'Reports'] }, + 'Final', + ]) + }) + + it('handles when custom counts exceed array length', ({ expect }) => { + const items = getItemsWithCollapsedItem(['Home', 'Projects', 'Final'], { + startVisibleItemsCount: 2, + endVisibleItemsCount: 2, + }) + + expect(items).toEqual(['Home', 'Projects', 'Final']) + }) + + it('handles zero startVisibleItemsCount', ({ expect }) => { + const items = getItemsWithCollapsedItem(['Home', 'Projects', 'Team', 'Documents', 'Reports'], { + startVisibleItemsCount: 0, + }) + + expect(items).toMatchObject([{ items: ['Home', 'Projects', 'Team'] }, 'Documents', 'Reports']) + }) + + it('handles zero endVisibleItemsCount', ({ expect }) => { + const items = getItemsWithCollapsedItem(['Home', 'Projects', 'Team', 'Documents', 'Reports'], { + endVisibleItemsCount: 0, + }) + + expect(items).toMatchObject(['Home', { items: ['Projects', 'Team', 'Documents', 'Reports'] }]) + }) + + it('handles non-string items', ({ expect }) => { + const items = getItemsWithCollapsedItem([ + { id: 1, name: 'Home' }, + { id: 2, name: 'Projects' }, + { id: 3, name: 'Team' }, + { id: 4, name: 'Final' }, + ]) + + expect(items).toMatchObject([ + { id: 1, name: 'Home' }, + { items: [{ id: 2, name: 'Projects' }] }, + { id: 3, name: 'Team' }, + { id: 4, name: 'Final' }, + ]) + }) + + it('handles iterables other than arrays', ({ expect }) => { + const set = new Set(['Home', 'Projects', 'Team', 'Documents']) + const items = getItemsWithCollapsedItem(set) + + expect(items).toMatchObject(['Home', { items: ['Projects'] }, 'Team', 'Documents']) + }) +}) diff --git a/app/gui/src/dashboard/components/Breadcrumbs/Breadcrumbs.tsx b/app/gui/src/dashboard/components/Breadcrumbs/Breadcrumbs.tsx new file mode 100644 index 000000000000..72e1af353020 --- /dev/null +++ b/app/gui/src/dashboard/components/Breadcrumbs/Breadcrumbs.tsx @@ -0,0 +1,149 @@ +/** + * @file Breadcrumbs component implementation. + */ + +import ArrowRight from '#/assets/expand_arrow_right.svg' +import { tv, type VariantProps } from '#/utilities/tailwindVariants' +import { createLeafComponent } from '@react-aria/collections' +import { Fragment, type ForwardedRef, type ReactElement } from 'react' +import * as aria from 'react-aria-components' +import flattenChildren from 'react-keyed-flatten-children' +import { Button, type TestIdProps } from '../AriaComponents' +import SvgMask from '../SvgMask' +import { BreadcrumbCollapsedItem, BreadcrumbItem } from './BreadcrumbItem' +import { getItemsWithCollapsedItem, isCollapsedItem } from './utilities' + +export const BREADCRUMBS_STYLES = tv({ + base: 'flex items-center gap-2 w-full', + slots: { + separator: 'text-primary last:hidden', + }, +}) + +/** + * Props for {@link Breadcrumbs} + */ +export interface BreadcrumbsProps + extends aria.BreadcrumbsProps, + VariantProps, + TestIdProps {} + +/** + * A breadcrumb navigation component. + */ +export function Breadcrumbs(props: BreadcrumbsProps) { + const { children, items, className, variants = BREADCRUMBS_STYLES, testId } = props + + const styles = variants() + + if (items != null && typeof children === 'function') { + return ( + + {...props} items={items} children={children} /> + + ) + } + + const itemsWithCollapsedItem = getItemsWithCollapsedItem(flattenChildren(children)) + + return ( + + + {itemsWithCollapsedItem.map((item, index) => { + const isLastItem = index === itemsWithCollapsedItem.length - 1 + + const element = + isCollapsedItem(item) ? + menuItem} + /> + : item + + return ( + <> + {element} + {!isLastItem ? + + : null} + + ) + })} + + + ) +} + +/** + * Props for {@link BreadcrumbsItemsCollection} + */ +interface BreadcrumbsCollectionProps + extends aria.BreadcrumbsProps, + VariantProps, + TestIdProps { + /** The children to render */ + readonly children: (item: T) => React.ReactNode + /** The items to render */ + readonly items: Iterable +} + +/** + * A lazy collection of breadcrumb items. + */ +function BreadcrumbsItemsCollection(props: BreadcrumbsCollectionProps) { + const { items, children, variants = BREADCRUMBS_STYLES, className } = props + + const styles = variants() + + const itemsWithCollapsedItem = getItemsWithCollapsedItem(items) + + return ( + + {(item) => { + const separator = + if (isCollapsedItem(item)) { + return ( + + + {separator} + + ) + } + + return ( + <> + {children(item)} + {separator} + + ) + }} + + ) +} + +/** + * Props for {@link BreadcrumbSeparator} + */ +interface BreadcrumbSeparatorProps { + readonly icon: string + readonly className?: string +} + +/** + * A separator between breadcrumb items. + */ +// eslint-disable-next-line no-restricted-syntax +const BreadcrumbSeparator = createLeafComponent( + 'BreadcrumbSeparator', + function BreadcrumbSeparator(props: BreadcrumbSeparatorProps, ref: ForwardedRef) { + const { icon = ArrowRight, className } = props + return + }, +) + +Breadcrumbs.Item = BreadcrumbItem diff --git a/app/gui/src/dashboard/components/Breadcrumbs/index.ts b/app/gui/src/dashboard/components/Breadcrumbs/index.ts new file mode 100644 index 000000000000..d64090b92f4e --- /dev/null +++ b/app/gui/src/dashboard/components/Breadcrumbs/index.ts @@ -0,0 +1,7 @@ +/** + * @file Exports for the Breadcrumbs component. + */ +export { BREADCRUMB_ITEM_STYLES, BreadcrumbItem } from './BreadcrumbItem' +export type { BreadcrumbItemProps } from './BreadcrumbItem' +export { BREADCRUMBS_STYLES, Breadcrumbs } from './Breadcrumbs' +export type { BreadcrumbsProps } from './Breadcrumbs' diff --git a/app/gui/src/dashboard/components/Breadcrumbs/utilities.ts b/app/gui/src/dashboard/components/Breadcrumbs/utilities.ts new file mode 100644 index 000000000000..8bb5d36a91f7 --- /dev/null +++ b/app/gui/src/dashboard/components/Breadcrumbs/utilities.ts @@ -0,0 +1,80 @@ +/** + * @file Utilities for the Breadcrumbs component + */ +import type * as aria from 'react-aria-components' +import invariant from 'tiny-invariant' + +const DEFAULT_START_VISIBLE_ITEMS_COUNT = 1 +const DEFAULT_END_VISIBLE_ITEMS_COUNT = 2 + +const DROPDOWN_ITEM_BRAND = Symbol('DropdownItemBrand') + +/** + * A collapsed breadcrumb item. + */ +interface BreadcrumbCollapsedItem { + readonly [DROPDOWN_ITEM_BRAND]: true + readonly items: T[] + /** + * Id determines a unique key across the collection + */ + readonly id: aria.Key +} + +/** + * Options for {@link getItemsWithCollapsedItem} + */ +export interface GetItemsWithCollapsedItemOptions { + /** The number of visible items */ + readonly startVisibleItemsCount?: number + /** The number of last visible items */ + readonly endVisibleItemsCount?: number +} + +/** + * Get the items with a collapsed item. + */ +export function getItemsWithCollapsedItem( + items: Iterable, + options: GetItemsWithCollapsedItemOptions = {}, +): Array | T> { + const { + startVisibleItemsCount = DEFAULT_START_VISIBLE_ITEMS_COUNT, + endVisibleItemsCount = DEFAULT_END_VISIBLE_ITEMS_COUNT, + } = options + + invariant( + startVisibleItemsCount >= 0, + 'startVisibleItemsCount must be greater than or equal to 0', + ) + invariant(endVisibleItemsCount >= 0, 'endVisibleItemsCount must be greater than or equal to 0') + + const totalVisibleItemsCount = startVisibleItemsCount + endVisibleItemsCount + + const itemsArray = Array.from(items) + + if (itemsArray.length <= totalVisibleItemsCount) { + return itemsArray + } + + const startVisibleItems = itemsArray.slice(0, startVisibleItemsCount) + const endVisibleItems = endVisibleItemsCount === 0 ? [] : itemsArray.slice(-endVisibleItemsCount) + + const dropdownItem = { + [DROPDOWN_ITEM_BRAND]: true, + id: 'collapsed-item', + items: + endVisibleItemsCount === 0 ? + itemsArray.slice(startVisibleItemsCount) + : itemsArray.slice(startVisibleItemsCount, -endVisibleItemsCount), + } satisfies BreadcrumbCollapsedItem + + return [...startVisibleItems, dropdownItem, ...endVisibleItems] +} + +/** + * Check if an item is a collapsed item. + */ +export function isCollapsedItem(item: unknown): item is BreadcrumbCollapsedItem { + return typeof item === 'object' && item != null && DROPDOWN_ITEM_BRAND in item +} diff --git a/app/gui/src/dashboard/components/Icon/Icon.stories.tsx b/app/gui/src/dashboard/components/Icon/Icon.stories.tsx new file mode 100644 index 000000000000..97f26fe15024 --- /dev/null +++ b/app/gui/src/dashboard/components/Icon/Icon.stories.tsx @@ -0,0 +1,125 @@ +import closeIcon from '#/assets/close.svg' +import closeTabIcon from '#/assets/close_tab.svg' +import cloudIcon from '#/assets/cloud.svg' +import cloudToIcon from '#/assets/cloud_to.svg' +import type { Meta, StoryObj } from '@storybook/react' +import { Icon, type IconProps } from './Icon' + +const meta = { + title: 'Components/IconComponent', + component: Icon, + parameters: { + layout: 'centered', + }, +} satisfies Meta + +const sizes = [ + 'xsmall', + 'small', + 'medium', + 'large', + 'xlarge', + 'xxlarge', +] satisfies IconProps['size'][] +const colors = [ + 'primary', + 'danger', + 'success', + 'accent', + 'muted', + 'disabled', + 'invert', + 'inherit', + 'current', +] satisfies IconProps['color'][] + +export default meta +type Story = StoryObj + +const CustomSvgIcon = () => ( + + + + +) + +interface RenderProps { + color: string | undefined +} + +const RenderPropIcon = ({ color = '#000' }: RenderProps) => ( + + + + +) + +export const Icons: Story = { + render: () => ( +
+
+
Available Icons
+
+ {closeIcon} + {cloudIcon} + {cloudToIcon} + {closeTabIcon} +
+
+ +
+
Custom Icons
+
+ {sizes.map((size) => ( + + {CustomSvgIcon} + + ))} + {colors.map((color) => ( + + {CustomSvgIcon} + + ))} + + {(props) => } + + + {(props) => } + +
+
+ +
+
Sizes
+
+ {sizes.map((size) => ( + + {closeIcon} + + ))} +
+
+ +
+
Colors
+
+ {closeIcon} + {closeIcon} + {closeIcon} + {closeIcon} + {closeIcon} + {closeIcon} + {closeIcon} + {closeIcon} + {closeIcon} +
+
+
+ ), +} diff --git a/app/gui/src/dashboard/components/Icon/Icon.tsx b/app/gui/src/dashboard/components/Icon/Icon.tsx new file mode 100644 index 000000000000..1d2d5e0c1462 --- /dev/null +++ b/app/gui/src/dashboard/components/Icon/Icon.tsx @@ -0,0 +1,90 @@ +/** + * @file + * + * Icon component that displays an icon based on different input. + */ +import { tv, type VariantProps } from '#/utilities/tailwindVariants' +import { memo } from 'react' +import type { IconProp as IconType, TestIdProps } from '../AriaComponents' +import SvgMask from '../SvgMask' + +/** + * Props for {@link Icon}. + */ +export interface IconProps extends VariantProps, TestIdProps { + readonly children: IconType + readonly className?: string | undefined + readonly renderProps?: Render +} + +export const ICON_STYLES = tv({ + base: 'flex-none aspect-square [&>svg]:stroke-current [&>svg]:w-full [&>svg]:h-full', + variants: { + color: { + custom: '', + primary: 'text-primary', + danger: 'text-danger', + success: 'text-accent-dark', + accent: 'text-accent-dark', + muted: 'text-primary/40', + disabled: 'text-disabled', + invert: 'text-invert', + inherit: 'text-inherit', + current: 'text-current', + }, + size: { + xsmall: 'h-2 w-2', + small: 'h-3 w-3', + medium: 'h-4 w-4', + large: 'h-5 w-5', + xlarge: 'h-6 w-6', + xxlarge: 'h-7 w-7', + xxxlarge: 'h-8 w-8', + xxxxlarge: 'h-9 w-9', + full: 'h-full w-full', + }, + }, + defaultVariants: { + color: 'primary', + size: 'medium', + }, +}) + +/** + * Icon component that displays an icon based on different input. + */ +// eslint-disable-next-line no-restricted-syntax +export const Icon = memo(function Icon(props: IconProps) { + const { + children, + className, + variants = ICON_STYLES, + size, + testId, + renderProps = {}, + color, + } = props + + const styles = variants({ + size, + className, + color, + }) + + const actualIcon = (() => { + // eslint-disable-next-line no-restricted-syntax + const icon = typeof children === 'function' ? children(renderProps as Render) : children + + if (icon == null) { + return null + } + + return typeof icon === 'string' ? + + : + {icon} + + })() + + return <>{actualIcon} +}) as (props: IconProps) => React.JSX.Element diff --git a/app/gui/src/dashboard/components/Icon/index.ts b/app/gui/src/dashboard/components/Icon/index.ts new file mode 100644 index 000000000000..2a903c88059e --- /dev/null +++ b/app/gui/src/dashboard/components/Icon/index.ts @@ -0,0 +1,2 @@ +export { Icon } from './Icon' +export type { IconProps } from './Icon' diff --git a/app/gui/src/dashboard/components/SvgMask.tsx b/app/gui/src/dashboard/components/SvgMask.tsx index 415521fdc44f..a042817bf919 100644 --- a/app/gui/src/dashboard/components/SvgMask.tsx +++ b/app/gui/src/dashboard/components/SvgMask.tsx @@ -2,13 +2,10 @@ import * as React from 'react' import * as tailwindMerge from '#/utilities/tailwindMerge' - -// =============== -// === SvgMask === -// =============== +import type { TestIdProps } from './AriaComponents' /** Props for a {@link SvgMask}. */ -export interface SvgMaskProps { +export interface SvgMaskProps extends TestIdProps { readonly invert?: boolean readonly alt?: string /** The URL of the SVG to use as the mask. */ @@ -20,8 +17,11 @@ export interface SvgMaskProps { } /** Use an SVG as a mask. This lets the SVG use the text color (`currentColor`). */ -function SvgMask(props: SvgMaskProps) { - const { invert = false, alt = '', src, style, color, className } = props +const SvgMask = React.forwardRef(function SvgMask( + props: SvgMaskProps, + ref: React.ForwardedRef, +) { + const { invert = false, alt = '', src, style, color, className, testId = 'svg-mask' } = props const urlSrc = `url(${JSON.stringify(src)})` const mask = invert ? `${urlSrc}, linear-gradient(white 0 0)` : urlSrc @@ -32,6 +32,8 @@ function SvgMask(props: SvgMaskProps) { return (
) -} +}) export default React.memo(SvgMask) diff --git a/app/gui/src/dashboard/components/dashboard/column.ts b/app/gui/src/dashboard/components/dashboard/column.ts index d021d0045f12..a76b029b0667 100644 --- a/app/gui/src/dashboard/components/dashboard/column.ts +++ b/app/gui/src/dashboard/components/dashboard/column.ts @@ -3,7 +3,7 @@ import { memo, type Dispatch, type JSX, type SetStateAction } from 'react' import type { AssetRowState, AssetsTableState } from '#/layouts/AssetsTable' import type { Category } from '#/layouts/CategorySwitcher/Category' -import type { AnyAsset, Asset, BackendType } from '#/services/Backend' +import type { AnyAsset, BackendType } from '#/services/Backend' import type { SortInfo } from '#/utilities/sorting' import type { SortableColumn } from './column/columnUtils' import { Column } from './column/columnUtils' diff --git a/app/gui/src/dashboard/hooks/scrollHooks.ts b/app/gui/src/dashboard/hooks/scrollHooks.ts index 5891df1b5778..b30a9816eea6 100644 --- a/app/gui/src/dashboard/hooks/scrollHooks.ts +++ b/app/gui/src/dashboard/hooks/scrollHooks.ts @@ -1,5 +1,5 @@ /** @file Execute a function on scroll. */ -import { useRef, useState, type MutableRefObject, type RefObject } from 'react' +import { useState, type MutableRefObject, type RefObject } from 'react' import { useSyncRef } from '#/hooks/syncRefHooks' import useOnScroll from '#/hooks/useOnScroll' diff --git a/app/gui/src/dashboard/layouts/UserBar.tsx b/app/gui/src/dashboard/layouts/UserBar.tsx index 75e708d82a9d..b05cefaf9161 100644 --- a/app/gui/src/dashboard/layouts/UserBar.tsx +++ b/app/gui/src/dashboard/layouts/UserBar.tsx @@ -201,7 +201,7 @@ export function UserBarHelpSection(props: UserBarHelpSectionProps) { - + {item.menu.map((menuItem) => ( {getText(menuItem.name)} diff --git a/app/ydoc-server/package.json b/app/ydoc-server/package.json index d06dc4336597..73c8cd39748e 100644 --- a/app/ydoc-server/package.json +++ b/app/ydoc-server/package.json @@ -38,6 +38,6 @@ "@types/ws": "^8.5.13", "typescript": "^5.7.2", "vite-plugin-wasm": "^3.4.1", - "vitest": "3.0.0-beta.3" + "vitest": "3.0.3" } } diff --git a/app/ydoc-shared/package.json b/app/ydoc-shared/package.json index 8384e32376cc..f01e52e88283 100644 --- a/app/ydoc-shared/package.json +++ b/app/ydoc-shared/package.json @@ -49,8 +49,8 @@ "@types/node": "^22.10.4", "@types/ws": "^8.5.13", "typescript": "^5.7.2", - "vite-node": "3.0.0-beta.3", + "vite-node": "3.0.3", "vite-plugin-wasm": "^3.4.1", - "vitest": "3.0.0-beta.3" + "vitest": "3.0.3" } } diff --git a/eslint.config.mjs b/eslint.config.mjs index 76699112e21a..bf2633dd5751 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -498,7 +498,6 @@ const config = [ 'jsdoc/no-defaults': 'error', 'jsdoc/no-multi-asterisks': 'error', 'jsdoc/no-types': 'error', - 'jsdoc/no-undefined-types': 'error', 'jsdoc/require-asterisk-prefix': 'error', 'jsdoc/require-description': 'error', // This rule does not handle `# Heading`s and "etc.", "e.g.", "vs." etc. @@ -593,10 +592,28 @@ const config = [ // === React Compiler Rules === { files: ['app/gui/src/dashboard/**/*.ts', 'app/gui/src/dashboard/**/*.tsx'], - ignores: ['**/*.d.ts', '**/*.spec.ts', '**/*.stories.tsx', '**/*.test.tsx', '**/*.test.ts'], + ignores: [ + '**/*.d.ts', + '**/*.spec.ts', + '**/*.stories.tsx', + '**/*.test.tsx', + '**/*.test.ts', + '**/utilities/*.ts', + '**/services/*.ts', + '**/assets/*', + '**/authentication/*', + '**/configuration/*', + '**/index.ts', + ], plugins: { 'react-compiler': reactCompiler }, rules: { 'react-compiler/react-compiler': 'error' }, }, + // === Index Files === + { + files: ['**/index.ts'], + // Index files should not have file overviews, because their purpose is obvious. + rules: { 'jsdoc/require-file-overview': 'off' }, + }, ] export default config diff --git a/package.json b/package.json index 91f982cf0ad4..de4c86889bf2 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "prettier": "^3.4.2", "prettier-plugin-organize-imports": "^4.1.0", "prettier-plugin-tailwindcss": "^0.5.14", - "vitest": "3.0.0-beta.3" + "vitest": "3.0.3" }, "dependencies": { "@bazel/bazelisk": "^1.22.1", @@ -38,7 +38,7 @@ "format:workflows": "prettier --write .github/workflows", "ci-check": "corepack pnpm run -r compile && corepack pnpm run --aggregate-output /^ci:/", "ci:prettier": "prettier --check --cache .", - "ci:lint": "corepack pnpm run -r --parallel lint --output-file eslint_report.json --format json", + "ci:lint": "corepack pnpm run -r --parallel lint --output-file eslint_report.json --format json --cache-strategy content", "ci:test": "corepack pnpm run -r --parallel test", "ci:unit-test": "corepack pnpm run -r --parallel test:unit", "ci:typecheck": "corepack pnpm run -r typecheck", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7ba520cf418e..23fdd510e83d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -80,8 +80,8 @@ importers: specifier: ^0.5.14 version: 0.5.14(@ianvs/prettier-plugin-sort-imports@4.3.0(@vue/compiler-sfc@3.5.13)(prettier@3.4.2))(prettier-plugin-organize-imports@4.1.0(prettier@3.4.2)(typescript@5.7.2)(vue-tsc@2.2.0(typescript@5.7.2)))(prettier@3.4.2) vitest: - specifier: 3.0.0-beta.3 - version: 3.0.0-beta.3(@types/node@22.10.4)(jiti@1.21.7)(jsdom@24.1.3)(yaml@2.7.0) + specifier: 3.0.3 + version: 3.0.3(@types/node@22.10.4)(jiti@1.21.7)(jsdom@24.1.3)(yaml@2.7.0) app/common: dependencies: @@ -104,8 +104,8 @@ importers: specifier: ^18.3.1 version: 18.3.1 vitest: - specifier: 3.0.0-beta.3 - version: 3.0.0-beta.3(@types/node@20.17.11)(jiti@1.21.7)(jsdom@24.1.3)(yaml@2.7.0) + specifier: 3.0.3 + version: 3.0.3(@types/node@20.17.11)(jiti@1.21.7)(jsdom@24.1.3)(yaml@2.7.0) app/gui: dependencies: @@ -156,7 +156,7 @@ importers: version: 6.36.1 '@fast-check/vitest': specifier: ^0.0.8 - version: 0.0.8(vitest@3.0.0-beta.3(@types/node@22.10.4)(jiti@1.21.7)(jsdom@24.1.3)(yaml@2.7.0)) + version: 0.0.8(vitest@3.0.3(@types/node@22.10.4)(jiti@1.21.7)(jsdom@24.1.3)(yaml@2.7.0)) '@floating-ui/vue': specifier: ^1.1.5 version: 1.1.5(vue@3.5.13(typescript@5.7.2)) @@ -394,7 +394,7 @@ importers: version: 7.26.0(@babel/core@7.26.0) '@chromatic-com/storybook': specifier: ^3.2.3 - version: 3.2.3(react@18.3.1)(storybook@8.4.7) + version: 3.2.3(react@18.3.1)(storybook@8.5.0) '@codemirror/theme-one-dark': specifier: ^6.1.2 version: 6.1.2 @@ -411,32 +411,32 @@ importers: specifier: 3.27.0 version: 3.27.0(react@18.3.1) '@storybook/addon-essentials': - specifier: ^8.4.7 - version: 8.4.7(@types/react@18.3.18)(storybook@8.4.7) + specifier: 8.5.0 + version: 8.5.0(@types/react@18.3.18)(storybook@8.5.0) '@storybook/addon-interactions': - specifier: ^8.4.7 - version: 8.4.7(storybook@8.4.7) + specifier: 8.5.0 + version: 8.5.0(storybook@8.5.0) '@storybook/addon-onboarding': - specifier: ^8.4.7 - version: 8.4.7(react@18.3.1)(storybook@8.4.7) + specifier: 8.5.0 + version: 8.5.0(storybook@8.5.0) '@storybook/blocks': - specifier: ^8.4.7 - version: 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7) + specifier: 8.5.0 + version: 8.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0) '@storybook/react': - specifier: ^8.4.7 - version: 8.4.7(@storybook/test@8.4.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7)(typescript@5.7.2) + specifier: 8.5.0 + version: 8.5.0(@storybook/test@8.5.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0)(typescript@5.7.2) '@storybook/react-vite': - specifier: ^8.4.7 - version: 8.4.7(@storybook/test@8.4.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(storybook@8.4.7)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + specifier: 8.5.0 + version: 8.5.0(@storybook/test@8.5.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(storybook@8.5.0)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) '@storybook/test': - specifier: ^8.4.7 - version: 8.4.7(storybook@8.4.7) + specifier: 8.5.0 + version: 8.5.0(storybook@8.5.0) '@storybook/vue3': - specifier: ^8.4.7 - version: 8.4.7(storybook@8.4.7)(vue@3.5.13(typescript@5.7.2)) + specifier: 8.5.0 + version: 8.5.0(storybook@8.5.0)(vue@3.5.13(typescript@5.7.2)) '@storybook/vue3-vite': - specifier: ^8.4.7 - version: 8.4.7(storybook@8.4.7)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) + specifier: 8.5.0 + version: 8.5.0(storybook@8.5.0)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) '@tanstack/react-query-devtools': specifier: 5.59.20 version: 5.59.20(@tanstack/react-query@5.59.20(react@18.3.1))(react@18.3.1) @@ -502,10 +502,10 @@ importers: version: 8.5.13 '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.3.4(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + version: 4.3.4(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) '@vitejs/plugin-vue': specifier: ^5.2.1 - version: 5.2.1(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) + version: 5.2.1(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) '@vue/test-utils': specifier: ^2.4.6 version: 2.4.6(typescript@5.7.2) @@ -555,8 +555,8 @@ importers: specifier: ^13.1.0 version: 13.1.0 storybook: - specifier: ^8.4.7 - version: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + specifier: 8.5.0 + version: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) tailwindcss: specifier: ^3.4.17 version: 3.4.17 @@ -574,16 +574,16 @@ importers: version: 5.7.2 vite: specifier: ^6.0.9 - version: 6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) + version: 6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) vite-plugin-vue-devtools: specifier: 7.6.8 - version: 7.6.8(rollup@4.31.0)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) + version: 7.6.8(rollup@4.29.1)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) vite-plugin-wasm: specifier: ^3.4.1 - version: 3.4.1(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + version: 3.4.1(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) vitest: - specifier: 3.0.0-beta.3 - version: 3.0.0-beta.3(@types/node@22.10.4)(jiti@1.21.7)(jsdom@24.1.3)(yaml@2.7.0) + specifier: 3.0.3 + version: 3.0.3(@types/node@22.10.4)(jiti@1.21.7)(jsdom@24.1.3)(yaml@2.7.0) vue-react-wrapper: specifier: ^0.3.1 version: 0.3.1(vue@3.5.13(typescript@5.7.2)) @@ -701,7 +701,7 @@ importers: version: 1.0.32 vite: specifier: ^6.0.9 - version: 6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) + version: 6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) vite-node: specifier: 3.0.0-beta.3 version: 3.0.0-beta.3(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) @@ -752,7 +752,7 @@ importers: devDependencies: '@fast-check/vitest': specifier: ^0.0.8 - version: 0.0.8(vitest@3.0.0-beta.3(@types/node@22.10.4)(jiti@1.21.7)(jsdom@24.1.3)(yaml@2.7.0)) + version: 0.0.8(vitest@3.0.3(@types/node@22.10.4)(jiti@1.21.7)(jsdom@24.1.3)(yaml@2.7.0)) '@types/debug': specifier: ^4.1.12 version: 4.1.12 @@ -767,10 +767,10 @@ importers: version: 5.7.2 vite-plugin-wasm: specifier: ^3.4.1 - version: 3.4.1(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + version: 3.4.1(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) vitest: - specifier: 3.0.0-beta.3 - version: 3.0.0-beta.3(@types/node@22.10.4)(jiti@1.21.7)(jsdom@24.1.3)(yaml@2.7.0) + specifier: 3.0.3 + version: 3.0.3(@types/node@22.10.4)(jiti@1.21.7)(jsdom@24.1.3)(yaml@2.7.0) app/ydoc-server-nodejs: dependencies: @@ -869,7 +869,7 @@ importers: devDependencies: '@fast-check/vitest': specifier: ^0.0.8 - version: 0.0.8(vitest@3.0.0-beta.3(@types/node@22.10.4)(jiti@1.21.7)(jsdom@24.1.3)(yaml@2.7.0)) + version: 0.0.8(vitest@3.0.3(@types/node@22.10.4)(jiti@1.21.7)(jsdom@24.1.3)(yaml@2.7.0)) '@tsconfig/node20': specifier: ^20.1.4 version: 20.1.4 @@ -883,14 +883,14 @@ importers: specifier: ^5.7.2 version: 5.7.2 vite-node: - specifier: 3.0.0-beta.3 - version: 3.0.0-beta.3(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) + specifier: 3.0.3 + version: 3.0.3(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) vite-plugin-wasm: specifier: ^3.4.1 - version: 3.4.1(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + version: 3.4.1(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) vitest: - specifier: 3.0.0-beta.3 - version: 3.0.0-beta.3(@types/node@22.10.4)(jiti@1.21.7)(jsdom@24.1.3)(yaml@2.7.0) + specifier: 3.0.3 + version: 3.0.3(@types/node@22.10.4)(jiti@1.21.7)(jsdom@24.1.3)(yaml@2.7.0) lib/js/runner: dependencies: @@ -1163,10 +1163,6 @@ packages: resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==} engines: {node: '>=6.9.0'} - '@babel/generator@7.26.5': - resolution: {integrity: sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==} - engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.25.9': resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} engines: {node: '>=6.9.0'} @@ -1234,11 +1230,6 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.26.5': - resolution: {integrity: sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/plugin-proposal-decorators@7.25.9': resolution: {integrity: sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==} engines: {node: '>=6.9.0'} @@ -1311,18 +1302,10 @@ packages: resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.26.5': - resolution: {integrity: sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==} - engines: {node: '>=6.9.0'} - '@babel/types@7.26.3': resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} engines: {node: '>=6.9.0'} - '@babel/types@7.26.5': - resolution: {integrity: sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==} - engines: {node: '>=6.9.0'} - '@bazel/bazelisk@1.25.0': resolution: {integrity: sha512-IgesSUh9EwwLI9+Vs5rb/sx7vh6cI97CRLPqw9+/egFzeZlB5S2fTsKwbdDxtTVPjQMGS3GY64tTNsgejVFeKg==} hasBin: true @@ -2462,191 +2445,96 @@ packages: cpu: [arm] os: [android] - '@rollup/rollup-android-arm-eabi@4.31.0': - resolution: {integrity: sha512-9NrR4033uCbUBRgvLcBrJofa2KY9DzxL2UKZ1/4xA/mnTNyhZCWBuD8X3tPm1n4KxcgaraOYgrFKSgwjASfmlA==} - cpu: [arm] - os: [android] - '@rollup/rollup-android-arm64@4.29.1': resolution: {integrity: sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==} cpu: [arm64] os: [android] - '@rollup/rollup-android-arm64@4.31.0': - resolution: {integrity: sha512-iBbODqT86YBFHajxxF8ebj2hwKm1k8PTBQSojSt3d1FFt1gN+xf4CowE47iN0vOSdnd+5ierMHBbu/rHc7nq5g==} - cpu: [arm64] - os: [android] - '@rollup/rollup-darwin-arm64@4.29.1': resolution: {integrity: sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-arm64@4.31.0': - resolution: {integrity: sha512-WHIZfXgVBX30SWuTMhlHPXTyN20AXrLH4TEeH/D0Bolvx9PjgZnn4H677PlSGvU6MKNsjCQJYczkpvBbrBnG6g==} - cpu: [arm64] - os: [darwin] - '@rollup/rollup-darwin-x64@4.29.1': resolution: {integrity: sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==} cpu: [x64] os: [darwin] - '@rollup/rollup-darwin-x64@4.31.0': - resolution: {integrity: sha512-hrWL7uQacTEF8gdrQAqcDy9xllQ0w0zuL1wk1HV8wKGSGbKPVjVUv/DEwT2+Asabf8Dh/As+IvfdU+H8hhzrQQ==} - cpu: [x64] - os: [darwin] - '@rollup/rollup-freebsd-arm64@4.29.1': resolution: {integrity: sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-arm64@4.31.0': - resolution: {integrity: sha512-S2oCsZ4hJviG1QjPY1h6sVJLBI6ekBeAEssYKad1soRFv3SocsQCzX6cwnk6fID6UQQACTjeIMB+hyYrFacRew==} - cpu: [arm64] - os: [freebsd] - '@rollup/rollup-freebsd-x64@4.29.1': resolution: {integrity: sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==} cpu: [x64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.31.0': - resolution: {integrity: sha512-pCANqpynRS4Jirn4IKZH4tnm2+2CqCNLKD7gAdEjzdLGbH1iO0zouHz4mxqg0uEMpO030ejJ0aA6e1PJo2xrPA==} - cpu: [x64] - os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.29.1': resolution: {integrity: sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-gnueabihf@4.31.0': - resolution: {integrity: sha512-0O8ViX+QcBd3ZmGlcFTnYXZKGbFu09EhgD27tgTdGnkcYXLat4KIsBBQeKLR2xZDCXdIBAlWLkiXE1+rJpCxFw==} - cpu: [arm] - os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.29.1': resolution: {integrity: sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.31.0': - resolution: {integrity: sha512-w5IzG0wTVv7B0/SwDnMYmbr2uERQp999q8FMkKG1I+j8hpPX2BYFjWe69xbhbP6J9h2gId/7ogesl9hwblFwwg==} - cpu: [arm] - os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.29.1': resolution: {integrity: sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.31.0': - resolution: {integrity: sha512-JyFFshbN5xwy6fulZ8B/8qOqENRmDdEkcIMF0Zz+RsfamEW+Zabl5jAb0IozP/8UKnJ7g2FtZZPEUIAlUSX8cA==} - cpu: [arm64] - os: [linux] - '@rollup/rollup-linux-arm64-musl@4.29.1': resolution: {integrity: sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.31.0': - resolution: {integrity: sha512-kpQXQ0UPFeMPmPYksiBL9WS/BDiQEjRGMfklVIsA0Sng347H8W2iexch+IEwaR7OVSKtr2ZFxggt11zVIlZ25g==} - cpu: [arm64] - os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.29.1': resolution: {integrity: sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.31.0': - resolution: {integrity: sha512-pMlxLjt60iQTzt9iBb3jZphFIl55a70wexvo8p+vVFK+7ifTRookdoXX3bOsRdmfD+OKnMozKO6XM4zR0sHRrQ==} - cpu: [loong64] - os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': resolution: {integrity: sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.31.0': - resolution: {integrity: sha512-D7TXT7I/uKEuWiRkEFbed1UUYZwcJDU4vZQdPTcepK7ecPhzKOYk4Er2YR4uHKme4qDeIh6N3XrLfpuM7vzRWQ==} - cpu: [ppc64] - os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.29.1': resolution: {integrity: sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.31.0': - resolution: {integrity: sha512-wal2Tc8O5lMBtoePLBYRKj2CImUCJ4UNGJlLwspx7QApYny7K1cUYlzQ/4IGQBLmm+y0RS7dwc3TDO/pmcneTw==} - cpu: [riscv64] - os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.29.1': resolution: {integrity: sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.31.0': - resolution: {integrity: sha512-O1o5EUI0+RRMkK9wiTVpk2tyzXdXefHtRTIjBbmFREmNMy7pFeYXCFGbhKFwISA3UOExlo5GGUuuj3oMKdK6JQ==} - cpu: [s390x] - os: [linux] - '@rollup/rollup-linux-x64-gnu@4.29.1': resolution: {integrity: sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.31.0': - resolution: {integrity: sha512-zSoHl356vKnNxwOWnLd60ixHNPRBglxpv2g7q0Cd3Pmr561gf0HiAcUBRL3S1vPqRC17Zo2CX/9cPkqTIiai1g==} - cpu: [x64] - os: [linux] - '@rollup/rollup-linux-x64-musl@4.29.1': resolution: {integrity: sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.31.0': - resolution: {integrity: sha512-ypB/HMtcSGhKUQNiFwqgdclWNRrAYDH8iMYH4etw/ZlGwiTVxBz2tDrGRrPlfZu6QjXwtd+C3Zib5pFqID97ZA==} - cpu: [x64] - os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.29.1': resolution: {integrity: sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.31.0': - resolution: {integrity: sha512-JuhN2xdI/m8Hr+aVO3vspO7OQfUFO6bKLIRTAy0U15vmWjnZDLrEgCZ2s6+scAYaQVpYSh9tZtRijApw9IXyMw==} - cpu: [arm64] - os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.29.1': resolution: {integrity: sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.31.0': - resolution: {integrity: sha512-U1xZZXYkvdf5MIWmftU8wrM5PPXzyaY1nGCI4KI4BFfoZxHamsIe+BtnPLIvvPykvQWlVbqUXdLa4aJUuilwLQ==} - cpu: [ia32] - os: [win32] - '@rollup/rollup-win32-x64-msvc@4.29.1': resolution: {integrity: sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.31.0': - resolution: {integrity: sha512-ul8rnCsUumNln5YWwz0ted2ZHFhzhRRnkpBZ+YRuHoRAlUji9KChpOUOndY7uykrPEPXVbHLlsdo6v5yXo/TXw==} - cpu: [x64] - os: [win32] - '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} @@ -2778,104 +2666,104 @@ packages: resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} engines: {node: '>=14.0.0'} - '@storybook/addon-actions@8.4.7': - resolution: {integrity: sha512-mjtD5JxcPuW74T6h7nqMxWTvDneFtokg88p6kQ5OnC1M259iAXb//yiSZgu/quunMHPCXSiqn4FNOSgASTSbsA==} + '@storybook/addon-actions@8.5.0': + resolution: {integrity: sha512-6CW9+17rk5eNx6I8EKqCxRKtsJFTR/lHL+xiJ6/iBWApIm8sg63vhXvUTJ58UixmIkT5oLh0+ESNPh+x10D8fw==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/addon-backgrounds@8.4.7': - resolution: {integrity: sha512-I4/aErqtFiazcoWyKafOAm3bLpxTj6eQuH/woSbk1Yx+EzN+Dbrgx1Updy8//bsNtKkcrXETITreqHC+a57DHQ==} + '@storybook/addon-backgrounds@8.5.0': + resolution: {integrity: sha512-lzyFLs7niNsqlhH5kdUrp7htLiMIcjY50VLWe0PaeJ6T6GZ7X9qhQzROAUV6cGqzyd8A6y/LzIUntDPMVEm/6g==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/addon-controls@8.4.7': - resolution: {integrity: sha512-377uo5IsJgXLnQLJixa47+11V+7Wn9KcDEw+96aGCBCfLbWNH8S08tJHHnSu+jXg9zoqCAC23MetntVp6LetHA==} + '@storybook/addon-controls@8.5.0': + resolution: {integrity: sha512-1fivx77A/ahObrPl0L66o9i9MUNfqXxsrpekne5gjMNXw9XJFIRNUe/ddL4CMmwu7SgVbj2QV+q5E5mlnZNTJw==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/addon-docs@8.4.7': - resolution: {integrity: sha512-NwWaiTDT5puCBSUOVuf6ME7Zsbwz7Y79WF5tMZBx/sLQ60vpmJVQsap6NSjvK1Ravhc21EsIXqemAcBjAWu80w==} + '@storybook/addon-docs@8.5.0': + resolution: {integrity: sha512-REwLSr1VgOVNJZwP3y3mldhOjBHlM5fqTvq/tC8NaYpAzx9O4rZdoUSZxW3tYtoNoYrHpB8kzRTeZl8WSdKllw==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/addon-essentials@8.4.7': - resolution: {integrity: sha512-+BtZHCBrYtQKILtejKxh0CDRGIgTl9PumfBOKRaihYb4FX1IjSAxoV/oo/IfEjlkF5f87vouShWsRa8EUauFDw==} + '@storybook/addon-essentials@8.5.0': + resolution: {integrity: sha512-RrHRdaw2j3ugZiYQ6OHt3Ff08ID4hwAvipqULEsbEnEw3VlXOaW/MT5e2M7kW3MHskQ3iJ6XAD1Y1rNm432Pzw==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/addon-highlight@8.4.7': - resolution: {integrity: sha512-whQIDBd3PfVwcUCrRXvCUHWClXe9mQ7XkTPCdPo4B/tZ6Z9c6zD8JUHT76ddyHivixFLowMnA8PxMU6kCMAiNw==} + '@storybook/addon-highlight@8.5.0': + resolution: {integrity: sha512-/JxYzMK5aJSYs0K/0eAEFyER2dMoxqwM891MdnkNwLFdyrM58lzHee00F9oEX6zeQoRUNQPRepq0ui2PvbTMGw==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/addon-interactions@8.4.7': - resolution: {integrity: sha512-fnufT3ym8ht3HHUIRVXAH47iOJW/QOb0VSM+j269gDuvyDcY03D1civCu1v+eZLGaXPKJ8vtjr0L8zKQ/4P0JQ==} + '@storybook/addon-interactions@8.5.0': + resolution: {integrity: sha512-vX1a8qS7o/W3kEzfL/CqOj/Rr6UlGLT/n0KXMpfIhx63tzxe1a1qGpFLL0h0zqAVPHZIOu9humWMKri5Iny6oA==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/addon-measure@8.4.7': - resolution: {integrity: sha512-QfvqYWDSI5F68mKvafEmZic3SMiK7zZM8VA0kTXx55hF/+vx61Mm0HccApUT96xCXIgmwQwDvn9gS4TkX81Dmw==} + '@storybook/addon-measure@8.5.0': + resolution: {integrity: sha512-e8pJy2sICyj0Ff0W1PFc6HPE6PqcjnnHtfuDaO3M9uSKJLYkpTWJ8i1VSP178f8seq44r5/PdQCHqs5q5l3zgw==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/addon-onboarding@8.4.7': - resolution: {integrity: sha512-FdC2NV60VNYeMxf6DVe0qV9ucSBAzMh1//C0Qqwq8CcjthMbmKlVZ7DqbVsbIHKnFaSCaUC88eR5olAfMaauCQ==} + '@storybook/addon-onboarding@8.5.0': + resolution: {integrity: sha512-77ebcHkKR744ciPbT4ZgqW4W7KrLv1uAdSb3mX3gWukSl4oxP9D/HjmNiX5fBDYWUC4wsf6q5barOs4Hqn8ivw==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/addon-outline@8.4.7': - resolution: {integrity: sha512-6LYRqUZxSodmAIl8icr585Oi8pmzbZ90aloZJIpve+dBAzo7ydYrSQxxoQEVltXbKf3VeVcrs64ouAYqjisMYA==} + '@storybook/addon-outline@8.5.0': + resolution: {integrity: sha512-r12sk1b38Ph6NroWAOTfjbJ/V+gDobm7tKQQlbSDf6fgX7cqyPHmKjfNDCOCQpXouZm/Jm+41zd758PW+Yt4ng==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/addon-toolbars@8.4.7': - resolution: {integrity: sha512-OSfdv5UZs+NdGB+nZmbafGUWimiweJ/56gShlw8Neo/4jOJl1R3rnRqqY7MYx8E4GwoX+i3GF5C3iWFNQqlDcw==} + '@storybook/addon-toolbars@8.5.0': + resolution: {integrity: sha512-q3yYYO2WX8K2DYNM++FzixGDjzYaeREincgsl2WXYXrcuGb5hkOoOgRiAQL8Nz9NQ1Eo+B/yZxrhG/5VoVhUUQ==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/addon-viewport@8.4.7': - resolution: {integrity: sha512-hvczh/jjuXXcOogih09a663sRDDSATXwbE866al1DXgbDFraYD/LxX/QDb38W9hdjU9+Qhx8VFIcNWoMQns5HQ==} + '@storybook/addon-viewport@8.5.0': + resolution: {integrity: sha512-MlhVELImk9YzjEgGR2ciLC8d5tUSGcO7my4kWIClN0VyTRcvG4ZfwrsEC+jN3/l52nrgjLmKrDX5UAGZm6w5mQ==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/blocks@8.4.7': - resolution: {integrity: sha512-+QH7+JwXXXIyP3fRCxz/7E2VZepAanXJM7G8nbR3wWsqWgrRp4Wra6MvybxAYCxU7aNfJX5c+RW84SNikFpcIA==} + '@storybook/blocks@8.5.0': + resolution: {integrity: sha512-2sTOgjH/JFOgWnpqkKjpKVvKAgUaC9ZBjH1gnCoA5dne/SDafYaCAYfv6yZn7g2Xm1sTxWCAmMIUkYSALeWr+w==} 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.4.7 + storybook: ^8.5.0 peerDependenciesMeta: react: optional: true react-dom: optional: true - '@storybook/builder-vite@8.4.7': - resolution: {integrity: sha512-LovyXG5VM0w7CovI/k56ZZyWCveQFVDl0m7WwetpmMh2mmFJ+uPQ35BBsgTvTfc8RHi+9Q3F58qP1MQSByXi9g==} + '@storybook/builder-vite@8.5.0': + resolution: {integrity: sha512-GVJFjAxX/mL3bmXX6N619ShuYprkh6Ix08JU6QGNf/tTkG92BxjgCqQdfovBrviDhFyO2bhkdlEp6ujMo5CbZA==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 vite: ^4.0.0 || ^5.0.0 || ^6.0.0 - '@storybook/components@8.4.7': - resolution: {integrity: sha512-uyJIcoyeMWKAvjrG9tJBUCKxr2WZk+PomgrgrUwejkIfXMO76i6jw9BwLa0NZjYdlthDv30r9FfbYZyeNPmF0g==} + '@storybook/components@8.5.0': + resolution: {integrity: sha512-DhaHtwfEcfWYj3ih/5RBSDHe3Idxyf+oHw2/DmaLKJX6MluhdK3ZqigjRcTmA9Gj/SbR4CkHEEtDzAvBlW0BYw==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/core@8.4.7': - resolution: {integrity: sha512-7Z8Z0A+1YnhrrSXoKKwFFI4gnsLbWzr8fnDCU6+6HlDukFYh8GHRcZ9zKfqmy6U3hw2h8H5DrHsxWfyaYUUOoA==} + '@storybook/core@8.5.0': + resolution: {integrity: sha512-apborO6ynns7SeydBSqE9o0zT6JSU+VY4gLFPJROGcconvSW4bS5xtJCsgjlulceyWVxepFHGXl4jEZw+SktXA==} peerDependencies: prettier: ^2 || ^3 peerDependenciesMeta: prettier: optional: true - '@storybook/csf-plugin@8.4.7': - resolution: {integrity: sha512-Fgogplu4HImgC+AYDcdGm1rmL6OR1rVdNX1Be9C/NEXwOCpbbBwi0BxTf/2ZxHRk9fCeaPEcOdP5S8QHfltc1g==} + '@storybook/csf-plugin@8.5.0': + resolution: {integrity: sha512-cs6ogviNyLG1h9J8Sb47U3DqIrQmn2EHm4ta3fpCeV3ABbrMgbzYyxtmybz4g/AwlDgjAZAt6PPcXkfCJ6p2CQ==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/csf@0.1.13': - resolution: {integrity: sha512-7xOOwCLGB3ebM87eemep89MYRFTko+D8qE7EdAAq74lgdqRR5cOUtYWJLjO2dLtP94nqoOdHJo6MdLLKzg412Q==} + '@storybook/csf@0.1.12': + resolution: {integrity: sha512-9/exVhabisyIVL0VxTCxo01Tdm8wefIXKXfltAPTSr8cbLn5JAxGQ6QV3mjdecLGEOucfoVhAKtJfVHxEK1iqw==} '@storybook/global@5.0.0': resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} @@ -2887,45 +2775,49 @@ 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.4.7': - resolution: {integrity: sha512-k6NSD3jaRCCHAFtqXZ7tw8jAzD/yTEWXGya+REgZqq5RCkmJ+9S4Ytp/6OhQMPtPFX23gAuJJzTQVLcCr+gjRg==} + '@storybook/instrumenter@8.5.0': + resolution: {integrity: sha512-eZ/UY6w4U2vay+wX7QVwKiRoyMzZscuv6v4k4r8BlmHPFWbhiZDO9S2GsG16UkyKnrQrYk432he70n7hn1Xvmg==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/manager-api@8.4.7': - resolution: {integrity: sha512-ELqemTviCxAsZ5tqUz39sDmQkvhVAvAgiplYy9Uf15kO0SP2+HKsCMzlrm2ue2FfkUNyqbDayCPPCB0Cdn/mpQ==} + '@storybook/manager-api@8.5.0': + resolution: {integrity: sha512-Ildriueo3eif4M+gMlMxu/mrBIbAnz8+oesmQJKdzZfe/U9eQTI9OUqJsxx/IVBmdzQ3ySsgNmzj5VweRkse4A==} 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.4.7': - resolution: {integrity: sha512-0QVQwHw+OyZGHAJEXo6Knx+6/4er7n2rTDE5RYJ9F2E2Lg42E19pfdLlq2Jhoods2Xrclo3wj6GWR//Ahi39Eg==} + '@storybook/preview-api@8.5.0': + resolution: {integrity: sha512-g0XbD54zMUkl6bpuA7qEBCE9rW1QV6KKmwkO4bkxMOJcMke3x9l00JTaYn7Un8wItjXiS3BIG15B6mnfBG7fng==} 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.4.7': - resolution: {integrity: sha512-6bkG2jvKTmWrmVzCgwpTxwIugd7Lu+2btsLAqhQSzDyIj2/uhMNp8xIMr/NBDtLgq3nomt9gefNa9xxLwk/OMg==} + '@storybook/react-dom-shim@8.5.0': + resolution: {integrity: sha512-7P8xg4FiuFpM6kQOzZynno+0zyLVs8NgsmRK58t3JRZXbda1tzlxTXzvqx4hUevvbPJGjmrB0F3xTFH+8Otnvw==} 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.4.7 + storybook: ^8.5.0 - '@storybook/react-vite@8.4.7': - resolution: {integrity: sha512-iiY9iLdMXhDnilCEVxU6vQsN72pW3miaf0WSenOZRyZv3HdbpgOxI0qapOS0KCyRUnX9vTlmrSPTMchY4cAeOg==} + '@storybook/react-vite@8.5.0': + resolution: {integrity: sha512-4f5AM8aPs2aTBeiycotinaDIPJg/YRtPb0F1dDquS097eUOeImS73+NSSCwrIjmSiapG/KWVkPgFnadEumFkAA==} engines: {node: '>=18.0.0'} peerDependencies: + '@storybook/test': 8.5.0 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.4.7 + storybook: ^8.5.0 vite: ^4.0.0 || ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + '@storybook/test': + optional: true - '@storybook/react@8.4.7': - resolution: {integrity: sha512-nQ0/7i2DkaCb7dy0NaT95llRVNYWQiPIVuhNfjr1mVhEP7XD090p0g7eqUmsx8vfdHh2BzWEo6CoBFRd3+EXxw==} + '@storybook/react@8.5.0': + resolution: {integrity: sha512-/jbkmGGc95N7KduIennL/k8grNTP5ye/YBnkcS4TbF7uDWBtKy3/Wqvx5BIlFXq3qeUnZJ8YtZc0lPIYeCY8XQ==} engines: {node: '>=18.0.0'} peerDependencies: - '@storybook/test': 8.4.7 + '@storybook/test': 8.5.0 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.4.7 + storybook: ^8.5.0 typescript: '>= 4.2.x' peerDependenciesMeta: '@storybook/test': @@ -2933,28 +2825,28 @@ packages: typescript: optional: true - '@storybook/test@8.4.7': - resolution: {integrity: sha512-AhvJsu5zl3uG40itSQVuSy5WByp3UVhS6xAnme4FWRwgSxhvZjATJ3AZkkHWOYjnnk+P2/sbz/XuPli1FVCWoQ==} + '@storybook/test@8.5.0': + resolution: {integrity: sha512-M/DdPlI6gwL7NGkK5o7GYjdEBp95AsFEUtW29zQfnVIAngYugzi3nIuM/XkQHunidVdAZCYjw2s2Yhhsx/m9sw==} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 - '@storybook/theming@8.4.7': - resolution: {integrity: sha512-99rgLEjf7iwfSEmdqlHkSG3AyLcK0sfExcr0jnc6rLiAkBhzuIsvcHjjUwkR210SOCgXqBPW0ZA6uhnuyppHLw==} + '@storybook/theming@8.5.0': + resolution: {integrity: sha512-591LbOj/HMmHYUfLgrMerxhF1A9mY61HWKxcRpB6xxalc1Xw1kRtQ49DcwuTXnUu9ktBB3nuOzPNPQPFSh/7PQ==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/vue3-vite@8.4.7': - resolution: {integrity: sha512-MCU4GB6mKgeOy23eGL/yCxPWP1dBGuU4hRVoQYUzDyvNRNWD/0n7WOwIpKGeDHhmOW3J9PPX7C3k/N4ewFBmrQ==} + '@storybook/vue3-vite@8.5.0': + resolution: {integrity: sha512-gcIX9UBUMI/HQsCpQC2V9XZc32RO1H4sE4/FkSFxZVOLeQHcAFLQDuUXBpIrIOLl9ouoBE3jzVyYApejvyhO1w==} engines: {node: '>=18.0.0'} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 vite: ^4.0.0 || ^5.0.0 || ^6.0.0 - '@storybook/vue3@8.4.7': - resolution: {integrity: sha512-QvILEkgx7VyKBuLB4KiuQ0U8OLfQyLTwDuJ36wihQ75EEt86z29kYLNC2keHSbns/HUs3x3cjM9EkUT2xLgc/A==} + '@storybook/vue3@8.5.0': + resolution: {integrity: sha512-bml2I00QhkSI23dCqBPhLWSCNDCFQJ23cJ/NPAVeJ6FZXrWBa3EC7wFAnXzvzPUxvTyB036jFjvsWraOWEANTA==} engines: {node: '>=18.0.0'} peerDependencies: - storybook: ^8.4.7 + storybook: ^8.5.0 vue: ^3.0.0 '@stripe/react-stripe-js@2.9.0': @@ -3381,11 +3273,11 @@ packages: '@vitest/expect@2.0.5': resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} - '@vitest/expect@3.0.0-beta.3': - resolution: {integrity: sha512-KPxQ9FkPT5SBIBonCmDZe2XY6RKmSTl/ghzjAHip08GZXaZs/tp/iyE5ypFSTCoP3kdTc9TPdXpibHjdDmLMvw==} + '@vitest/expect@3.0.3': + resolution: {integrity: sha512-SbRCHU4qr91xguu+dH3RUdI5dC86zm8aZWydbp961aIR7G8OYNN6ZiayFuf9WAngRbFOfdrLHCGgXTj3GtoMRQ==} - '@vitest/mocker@3.0.0-beta.3': - resolution: {integrity: sha512-biBESFwOzhB+3DZq5pnkGkiA0Xt7hvSU1m2jsY8pK/h6wS8kRYcFvN1o/38wkGZ6Ss+wjvTixqfCwrlqFz9Fnw==} + '@vitest/mocker@3.0.3': + resolution: {integrity: sha512-XT2XBc4AN9UdaxJAeIlcSZ0ILi/GzmG5G8XSly4gaiqIvPV3HMTSIDZWJVX6QRJ0PX1m+W8Cy0K9ByXNb/bPIA==} peerDependencies: msw: ^2.4.9 vite: ^5.0.0 || ^6.0.0 @@ -3401,20 +3293,20 @@ packages: '@vitest/pretty-format@2.1.8': resolution: {integrity: sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==} - '@vitest/pretty-format@3.0.0-beta.3': - resolution: {integrity: sha512-d3+IaliPJLndUB/eQ4XP4OEHWhMDUJGhGc8XyLfi803Ad62nkTLC1bwFz80bNghEfKi+sz/oSkvQmW/3lQeCdA==} + '@vitest/pretty-format@3.0.3': + resolution: {integrity: sha512-gCrM9F7STYdsDoNjGgYXKPq4SkSxwwIU5nkaQvdUxiQ0EcNlez+PdKOVIsUJvh9P9IeIFmjn4IIREWblOBpP2Q==} - '@vitest/runner@3.0.0-beta.3': - resolution: {integrity: sha512-9ibO4DPJAyyxQfGDOCpMY36M4XFOX4G4VNmDr25dzrEmJ8sMt8/8E6kdb5lV/m0holHJFgvpGZr8zhXkWQ4+cg==} + '@vitest/runner@3.0.3': + resolution: {integrity: sha512-Rgi2kOAk5ZxWZlwPguRJFOBmWs6uvvyAAR9k3MvjRvYrG7xYvKChZcmnnpJCS98311CBDMqsW9MzzRFsj2gX3g==} - '@vitest/snapshot@3.0.0-beta.3': - resolution: {integrity: sha512-jsWdfQWRcbI1WIpxi2X6jUAAjJY898iK4P/ZzxgkBPFrPK894HXkCm3xcF/sZHF9nHNa61ZIgfgddnH0blkiFQ==} + '@vitest/snapshot@3.0.3': + resolution: {integrity: sha512-kNRcHlI4txBGztuJfPEJ68VezlPAXLRT1u5UCx219TU3kOG2DplNxhWLwDf2h6emwmTPogzLnGVwP6epDaJN6Q==} '@vitest/spy@2.0.5': resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} - '@vitest/spy@3.0.0-beta.3': - resolution: {integrity: sha512-IXvZL//Aq5UVIMFtvw1iYnk1iAjk9lGmQUw/fDqN7qMnb9SHfSRbhgxAph11n9nudgBlLiYPSY0nVfCpH/TQsA==} + '@vitest/spy@3.0.3': + resolution: {integrity: sha512-7/dgux8ZBbF7lEIKNnEqQlyRaER9nkAL9eTmdKJkDO3hS8p59ATGwKOCUDHcBLKr7h/oi/6hP+7djQk8049T2A==} '@vitest/utils@2.0.5': resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} @@ -3422,8 +3314,8 @@ packages: '@vitest/utils@2.1.8': resolution: {integrity: sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==} - '@vitest/utils@3.0.0-beta.3': - resolution: {integrity: sha512-InEoZvpkcUTmg0J08/Phm6MLkQwWpf3RCJoqVuXiHK7OkUYW/EDoT0qfzL4MGo1PWq+UqIlMw93eAkkTf3RMvQ==} + '@vitest/utils@3.0.3': + resolution: {integrity: sha512-f+s8CvyzPtMFY1eZKkIHGhPsQgYo5qCm6O8KZoim9qm1/jT64qBgGpO5tHscNH6BzRHM+edLNOP+3vO8+8pE/A==} '@volar/language-core@2.4.11': resolution: {integrity: sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==} @@ -6285,6 +6177,9 @@ packages: pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + pathe@2.0.2: + resolution: {integrity: sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==} + pathval@2.0.0: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} @@ -6868,11 +6763,6 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rollup@4.31.0: - resolution: {integrity: sha512-9cCE8P4rZLx9+PjoyqHLs31V9a9Vpvfo4qNcs6JCiGWYhw2gijSetFbH6SSy1whnkgcefnUwr8sad7tgqsGvnw==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - rrweb-cssom@0.7.1: resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} @@ -7111,8 +7001,8 @@ packages: std-env@3.8.0: resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} - storybook@8.4.7: - resolution: {integrity: sha512-RP/nMJxiWyFc8EVMH5gp20ID032Wvk+Yr3lmKidoegto5Iy+2dVQnUoElZb2zpbVXNHWakGuAkfI0dY1Hfp/vw==} + storybook@8.5.0: + resolution: {integrity: sha512-cEx42OlCetManF+cONVJVYP7SYsnI2K922DfWKmZhebP0it0n6TUof4y5/XzJ8YUruwPgyclGLdX8TvdRuNSfw==} hasBin: true peerDependencies: prettier: ^2 || ^3 @@ -7307,6 +7197,10 @@ packages: 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'} + tinyspy@3.0.2: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} @@ -7581,6 +7475,11 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true + vite-node@3.0.3: + resolution: {integrity: sha512-0sQcwhwAEw/UJGojbhOrnq3HtiZ3tC7BzpAa0lx3QaTX0S3YX70iGcik25UBdB96pmdwjyY2uyKNYruxCDmiEg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + vite-plugin-inspect@0.8.9: resolution: {integrity: sha512-22/8qn+LYonzibb1VeFZmISdVao5kC22jmEKm24vfFE8siEn47EpVcCLYMv6iKOYMJfjSvSJfueOwcFCkUnV3A==} engines: {node: '>=14'} @@ -7607,8 +7506,8 @@ packages: peerDependencies: vite: ^2 || ^3 || ^4 || ^5 || ^6 - vite@6.0.7: - resolution: {integrity: sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==} + vite@6.0.11: + resolution: {integrity: sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -7647,8 +7546,8 @@ packages: yaml: optional: true - vite@6.0.9: - resolution: {integrity: sha512-MSgUxHcaXLtnBPktkbUSoQUANApKYuxZ6DrbVENlIorbhL2dZydTLaZ01tjUoE3szeFzlFk9ANOKk0xurh4MKA==} + vite@6.0.7: + resolution: {integrity: sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -7687,15 +7586,15 @@ packages: yaml: optional: true - vitest@3.0.0-beta.3: - resolution: {integrity: sha512-e9miZwlVaMIAJ4MmCAxSeX4YWMyY4g+KRBjgSz0PL3UluSwHHUOWX/uUZwYmfPS4CvUr69RB1Dn6v61lgC+zCw==} + vitest@3.0.3: + resolution: {integrity: sha512-dWdwTFUW9rcnL0LyF2F+IfvNQWB0w9DERySCk8VMG75F8k25C7LsZoh6XfCjPvcR8Nb+Lqi9JKr6vnzH7HSrpQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.0.0-beta.3 - '@vitest/ui': 3.0.0-beta.3 + '@vitest/browser': 3.0.3 + '@vitest/ui': 3.0.3 happy-dom: '*' jsdom: ^24.1.0 peerDependenciesMeta: @@ -8441,15 +8340,6 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 - '@babel/generator@7.26.5': - dependencies: - '@babel/parser': 7.26.5 - '@babel/types': 7.26.5 - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.1.0 - optional: true - '@babel/helper-annotate-as-pure@7.25.9': dependencies: '@babel/types': 7.26.3 @@ -8535,11 +8425,6 @@ snapshots: dependencies: '@babel/types': 7.26.3 - '@babel/parser@7.26.5': - dependencies: - '@babel/types': 7.26.5 - optional: true - '@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -8625,41 +8510,22 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/traverse@7.26.5': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.5 - '@babel/parser': 7.26.5 - '@babel/template': 7.25.9 - '@babel/types': 7.26.5 - debug: 4.4.0 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - optional: true - '@babel/types@7.26.3': dependencies: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/types@7.26.5': - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - optional: true - '@bazel/bazelisk@1.25.0': {} '@bazel/ibazel@0.25.0': {} - '@chromatic-com/storybook@3.2.3(react@18.3.1)(storybook@8.4.7)': + '@chromatic-com/storybook@3.2.3(react@18.3.1)(storybook@8.5.0)': dependencies: chromatic: 11.18.1 filesize: 10.1.6 jsonfile: 6.1.0 react-confetti: 6.2.2(react@18.3.1) - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) strip-ansi: 7.1.0 transitivePeerDependencies: - '@chromatic-com/cypress' @@ -8960,10 +8826,10 @@ snapshots: '@fal-works/esbuild-plugin-global-externals@2.1.2': {} - '@fast-check/vitest@0.0.8(vitest@3.0.0-beta.3(@types/node@22.10.4)(jiti@1.21.7)(jsdom@24.1.3)(yaml@2.7.0))': + '@fast-check/vitest@0.0.8(vitest@3.0.3(@types/node@22.10.4)(jiti@1.21.7)(jsdom@24.1.3)(yaml@2.7.0))': dependencies: fast-check: 3.23.2 - vitest: 3.0.0-beta.3(@types/node@22.10.4)(jiti@1.21.7)(jsdom@24.1.3)(yaml@2.7.0) + vitest: 3.0.3(@types/node@22.10.4)(jiti@1.21.7)(jsdom@24.1.3)(yaml@2.7.0) '@floating-ui/core@1.6.8': dependencies: @@ -9036,10 +8902,10 @@ snapshots: '@ianvs/prettier-plugin-sort-imports@4.3.0(@vue/compiler-sfc@3.5.13)(prettier@3.4.2)': dependencies: '@babel/core': 7.26.0 - '@babel/generator': 7.26.5 - '@babel/parser': 7.26.5 - '@babel/traverse': 7.26.5 - '@babel/types': 7.26.5 + '@babel/generator': 7.26.3 + '@babel/parser': 7.26.3 + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 prettier: 3.4.2 semver: 7.6.3 optionalDependencies: @@ -9074,11 +8940,11 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@joshwooding/vite-plugin-react-docgen-typescript@0.4.2(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.4.2(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))': dependencies: magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.7.2) - vite: 6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) optionalDependencies: typescript: 5.7.2 @@ -10355,128 +10221,71 @@ snapshots: '@remix-run/router@1.21.0': {} - '@rollup/pluginutils@5.1.4(rollup@4.31.0)': + '@rollup/pluginutils@5.1.4(rollup@4.29.1)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.31.0 + rollup: 4.29.1 '@rollup/rollup-android-arm-eabi@4.29.1': optional: true - '@rollup/rollup-android-arm-eabi@4.31.0': - optional: true - '@rollup/rollup-android-arm64@4.29.1': optional: true - '@rollup/rollup-android-arm64@4.31.0': - optional: true - '@rollup/rollup-darwin-arm64@4.29.1': optional: true - '@rollup/rollup-darwin-arm64@4.31.0': - optional: true - '@rollup/rollup-darwin-x64@4.29.1': optional: true - '@rollup/rollup-darwin-x64@4.31.0': - optional: true - '@rollup/rollup-freebsd-arm64@4.29.1': optional: true - '@rollup/rollup-freebsd-arm64@4.31.0': - optional: true - '@rollup/rollup-freebsd-x64@4.29.1': optional: true - '@rollup/rollup-freebsd-x64@4.31.0': - optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.29.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.31.0': - optional: true - '@rollup/rollup-linux-arm-musleabihf@4.29.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.31.0': - optional: true - '@rollup/rollup-linux-arm64-gnu@4.29.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.31.0': - optional: true - '@rollup/rollup-linux-arm64-musl@4.29.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.31.0': - optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.29.1': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.31.0': - optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.31.0': - optional: true - '@rollup/rollup-linux-riscv64-gnu@4.29.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.31.0': - optional: true - '@rollup/rollup-linux-s390x-gnu@4.29.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.31.0': - optional: true - '@rollup/rollup-linux-x64-gnu@4.29.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.31.0': - optional: true - '@rollup/rollup-linux-x64-musl@4.29.1': optional: true - '@rollup/rollup-linux-x64-musl@4.31.0': - optional: true - '@rollup/rollup-win32-arm64-msvc@4.29.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.31.0': - optional: true - '@rollup/rollup-win32-ia32-msvc@4.29.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.31.0': - optional: true - '@rollup/rollup-win32-x64-msvc@4.29.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.31.0': - optional: true - '@sec-ant/readable-stream@0.4.1': {} '@sentry-internal/feedback@7.120.2': @@ -10631,126 +10440,123 @@ snapshots: '@smithy/util-buffer-from': 2.2.0 tslib: 2.8.1 - '@storybook/addon-actions@8.4.7(storybook@8.4.7)': + '@storybook/addon-actions@8.5.0(storybook@8.5.0)': dependencies: '@storybook/global': 5.0.0 '@types/uuid': 9.0.8 dequal: 2.0.3 polished: 4.3.1 - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) uuid: 9.0.1 - '@storybook/addon-backgrounds@8.4.7(storybook@8.4.7)': + '@storybook/addon-backgrounds@8.5.0(storybook@8.5.0)': dependencies: '@storybook/global': 5.0.0 memoizerific: 1.11.3 - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) ts-dedent: 2.2.0 - '@storybook/addon-controls@8.4.7(storybook@8.4.7)': + '@storybook/addon-controls@8.5.0(storybook@8.5.0)': dependencies: '@storybook/global': 5.0.0 dequal: 2.0.3 - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) ts-dedent: 2.2.0 - '@storybook/addon-docs@8.4.7(@types/react@18.3.18)(storybook@8.4.7)': + '@storybook/addon-docs@8.5.0(@types/react@18.3.18)(storybook@8.5.0)': dependencies: '@mdx-js/react': 3.1.0(@types/react@18.3.18)(react@18.3.1) - '@storybook/blocks': 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7) - '@storybook/csf-plugin': 8.4.7(storybook@8.4.7) - '@storybook/react-dom-shim': 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7) + '@storybook/blocks': 8.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0) + '@storybook/csf-plugin': 8.5.0(storybook@8.5.0) + '@storybook/react-dom-shim': 8.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - '@storybook/addon-essentials@8.4.7(@types/react@18.3.18)(storybook@8.4.7)': - dependencies: - '@storybook/addon-actions': 8.4.7(storybook@8.4.7) - '@storybook/addon-backgrounds': 8.4.7(storybook@8.4.7) - '@storybook/addon-controls': 8.4.7(storybook@8.4.7) - '@storybook/addon-docs': 8.4.7(@types/react@18.3.18)(storybook@8.4.7) - '@storybook/addon-highlight': 8.4.7(storybook@8.4.7) - '@storybook/addon-measure': 8.4.7(storybook@8.4.7) - '@storybook/addon-outline': 8.4.7(storybook@8.4.7) - '@storybook/addon-toolbars': 8.4.7(storybook@8.4.7) - '@storybook/addon-viewport': 8.4.7(storybook@8.4.7) - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + '@storybook/addon-essentials@8.5.0(@types/react@18.3.18)(storybook@8.5.0)': + dependencies: + '@storybook/addon-actions': 8.5.0(storybook@8.5.0) + '@storybook/addon-backgrounds': 8.5.0(storybook@8.5.0) + '@storybook/addon-controls': 8.5.0(storybook@8.5.0) + '@storybook/addon-docs': 8.5.0(@types/react@18.3.18)(storybook@8.5.0) + '@storybook/addon-highlight': 8.5.0(storybook@8.5.0) + '@storybook/addon-measure': 8.5.0(storybook@8.5.0) + '@storybook/addon-outline': 8.5.0(storybook@8.5.0) + '@storybook/addon-toolbars': 8.5.0(storybook@8.5.0) + '@storybook/addon-viewport': 8.5.0(storybook@8.5.0) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - '@storybook/addon-highlight@8.4.7(storybook@8.4.7)': + '@storybook/addon-highlight@8.5.0(storybook@8.5.0)': dependencies: '@storybook/global': 5.0.0 - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) - '@storybook/addon-interactions@8.4.7(storybook@8.4.7)': + '@storybook/addon-interactions@8.5.0(storybook@8.5.0)': dependencies: '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.4.7(storybook@8.4.7) - '@storybook/test': 8.4.7(storybook@8.4.7) + '@storybook/instrumenter': 8.5.0(storybook@8.5.0) + '@storybook/test': 8.5.0(storybook@8.5.0) polished: 4.3.1 - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) ts-dedent: 2.2.0 - '@storybook/addon-measure@8.4.7(storybook@8.4.7)': + '@storybook/addon-measure@8.5.0(storybook@8.5.0)': dependencies: '@storybook/global': 5.0.0 - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) tiny-invariant: 1.3.3 - '@storybook/addon-onboarding@8.4.7(react@18.3.1)(storybook@8.4.7)': + '@storybook/addon-onboarding@8.5.0(storybook@8.5.0)': dependencies: - react-confetti: 6.2.2(react@18.3.1) - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) - transitivePeerDependencies: - - react + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) - '@storybook/addon-outline@8.4.7(storybook@8.4.7)': + '@storybook/addon-outline@8.5.0(storybook@8.5.0)': dependencies: '@storybook/global': 5.0.0 - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) ts-dedent: 2.2.0 - '@storybook/addon-toolbars@8.4.7(storybook@8.4.7)': + '@storybook/addon-toolbars@8.5.0(storybook@8.5.0)': dependencies: - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) - '@storybook/addon-viewport@8.4.7(storybook@8.4.7)': + '@storybook/addon-viewport@8.5.0(storybook@8.5.0)': dependencies: memoizerific: 1.11.3 - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) - '@storybook/blocks@8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7)': + '@storybook/blocks@8.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0)': dependencies: - '@storybook/csf': 0.1.13 + '@storybook/csf': 0.1.12 '@storybook/icons': 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) ts-dedent: 2.2.0 optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/builder-vite@8.4.7(storybook@8.4.7)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))': + '@storybook/builder-vite@8.5.0(storybook@8.5.0)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))': dependencies: - '@storybook/csf-plugin': 8.4.7(storybook@8.4.7) + '@storybook/csf-plugin': 8.5.0(storybook@8.5.0) browser-assert: 1.2.1 - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) ts-dedent: 2.2.0 - vite: 6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) - '@storybook/components@8.4.7(storybook@8.4.7)': + '@storybook/components@8.5.0(storybook@8.5.0)': dependencies: - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) - '@storybook/core@8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(storybook@8.4.7)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))': + '@storybook/core@8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(storybook@8.5.0)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))': dependencies: - '@storybook/csf': 0.1.13 - '@storybook/react-vite': 8.4.7(@storybook/test@8.4.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(storybook@8.4.7)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + '@storybook/csf': 0.1.12 + '@storybook/react-vite': 8.5.0(@storybook/test@8.5.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(storybook@8.5.0)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) better-opn: 3.0.2 browser-assert: 1.2.1 esbuild: 0.24.2 @@ -10775,12 +10581,12 @@ snapshots: - utf-8-validate - vite - '@storybook/csf-plugin@8.4.7(storybook@8.4.7)': + '@storybook/csf-plugin@8.5.0(storybook@8.5.0)': dependencies: - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) unplugin: 1.16.0 - '@storybook/csf@0.1.13': + '@storybook/csf@0.1.12': dependencies: type-fest: 2.19.0 @@ -10791,101 +10597,102 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/instrumenter@8.4.7(storybook@8.4.7)': + '@storybook/instrumenter@8.5.0(storybook@8.5.0)': dependencies: '@storybook/global': 5.0.0 '@vitest/utils': 2.1.8 - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) - '@storybook/manager-api@8.4.7(storybook@8.4.7)': + '@storybook/manager-api@8.5.0(storybook@8.5.0)': dependencies: - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) - '@storybook/preview-api@8.4.7(storybook@8.4.7)': + '@storybook/preview-api@8.5.0(storybook@8.5.0)': dependencies: - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) - '@storybook/react-dom-shim@8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7)': + '@storybook/react-dom-shim@8.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0)': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) - '@storybook/react-vite@8.4.7(@storybook/test@8.4.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(storybook@8.4.7)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))': + '@storybook/react-vite@8.5.0(@storybook/test@8.5.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(storybook@8.5.0)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.4.2(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) - '@rollup/pluginutils': 5.1.4(rollup@4.31.0) - '@storybook/builder-vite': 8.4.7(storybook@8.4.7)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) - '@storybook/react': 8.4.7(@storybook/test@8.4.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7)(typescript@5.7.2) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.4.2(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + '@rollup/pluginutils': 5.1.4(rollup@4.29.1) + '@storybook/builder-vite': 8.5.0(storybook@8.5.0)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + '@storybook/react': 8.5.0(@storybook/test@8.5.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0)(typescript@5.7.2) find-up: 5.0.0 magic-string: 0.30.17 react: 18.3.1 react-docgen: 7.1.0 react-dom: 18.3.1(react@18.3.1) resolve: 1.22.10 - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) tsconfig-paths: 4.2.0 - vite: 6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) + optionalDependencies: + '@storybook/test': 8.5.0(storybook@8.5.0) transitivePeerDependencies: - - '@storybook/test' - rollup - supports-color - typescript - '@storybook/react@8.4.7(@storybook/test@8.4.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7)(typescript@5.7.2)': + '@storybook/react@8.5.0(@storybook/test@8.5.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0)(typescript@5.7.2)': dependencies: - '@storybook/components': 8.4.7(storybook@8.4.7) + '@storybook/components': 8.5.0(storybook@8.5.0) '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.4.7(storybook@8.4.7) - '@storybook/preview-api': 8.4.7(storybook@8.4.7) - '@storybook/react-dom-shim': 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7) - '@storybook/theming': 8.4.7(storybook@8.4.7) + '@storybook/manager-api': 8.5.0(storybook@8.5.0) + '@storybook/preview-api': 8.5.0(storybook@8.5.0) + '@storybook/react-dom-shim': 8.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0) + '@storybook/theming': 8.5.0(storybook@8.5.0) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) optionalDependencies: - '@storybook/test': 8.4.7(storybook@8.4.7) + '@storybook/test': 8.5.0(storybook@8.5.0) typescript: 5.7.2 - '@storybook/test@8.4.7(storybook@8.4.7)': + '@storybook/test@8.5.0(storybook@8.5.0)': dependencies: - '@storybook/csf': 0.1.13 + '@storybook/csf': 0.1.12 '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.4.7(storybook@8.4.7) + '@storybook/instrumenter': 8.5.0(storybook@8.5.0) '@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.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) - '@storybook/theming@8.4.7(storybook@8.4.7)': + '@storybook/theming@8.5.0(storybook@8.5.0)': dependencies: - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) - '@storybook/vue3-vite@8.4.7(storybook@8.4.7)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2))': + '@storybook/vue3-vite@8.5.0(storybook@8.5.0)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2))': dependencies: - '@storybook/builder-vite': 8.4.7(storybook@8.4.7)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) - '@storybook/vue3': 8.4.7(storybook@8.4.7)(vue@3.5.13(typescript@5.7.2)) + '@storybook/builder-vite': 8.5.0(storybook@8.5.0)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + '@storybook/vue3': 8.5.0(storybook@8.5.0)(vue@3.5.13(typescript@5.7.2)) find-package-json: 1.2.0 magic-string: 0.30.17 - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) typescript: 5.7.2 - vite: 6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) vue-component-meta: 2.2.0(typescript@5.7.2) vue-docgen-api: 4.79.2(vue@3.5.13(typescript@5.7.2)) transitivePeerDependencies: - vue - '@storybook/vue3@8.4.7(storybook@8.4.7)(vue@3.5.13(typescript@5.7.2))': + '@storybook/vue3@8.5.0(storybook@8.5.0)(vue@3.5.13(typescript@5.7.2))': dependencies: - '@storybook/components': 8.4.7(storybook@8.4.7) + '@storybook/components': 8.5.0(storybook@8.5.0) '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.4.7(storybook@8.4.7) - '@storybook/preview-api': 8.4.7(storybook@8.4.7) - '@storybook/theming': 8.4.7(storybook@8.4.7) + '@storybook/manager-api': 8.5.0(storybook@8.5.0) + '@storybook/preview-api': 8.5.0(storybook@8.5.0) + '@storybook/theming': 8.5.0(storybook@8.5.0) '@vue/compiler-core': 3.5.13 - storybook: 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + storybook: 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) ts-dedent: 2.2.0 type-fest: 2.19.0 vue: 3.5.13(typescript@5.7.2) @@ -11372,20 +11179,20 @@ snapshots: '@typescript-eslint/types': 8.19.0 eslint-visitor-keys: 4.2.0 - '@vitejs/plugin-react@4.3.4(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))': + '@vitejs/plugin-react@4.3.4(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.2.1(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2))': + '@vitejs/plugin-vue@5.2.1(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2))': dependencies: - vite: 6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) vue: 3.5.13(typescript@5.7.2) '@vitest/expect@2.0.5': @@ -11395,24 +11202,24 @@ snapshots: chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/expect@3.0.0-beta.3': + '@vitest/expect@3.0.3': dependencies: - '@vitest/spy': 3.0.0-beta.3 - '@vitest/utils': 3.0.0-beta.3 + '@vitest/spy': 3.0.3 + '@vitest/utils': 3.0.3 chai: 5.1.2 - tinyrainbow: 1.2.0 + tinyrainbow: 2.0.0 - '@vitest/mocker@3.0.0-beta.3(vite@6.0.7(@types/node@20.17.11)(jiti@1.21.7)(yaml@2.7.0))': + '@vitest/mocker@3.0.3(vite@6.0.7(@types/node@20.17.11)(jiti@1.21.7)(yaml@2.7.0))': dependencies: - '@vitest/spy': 3.0.0-beta.3 + '@vitest/spy': 3.0.3 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: vite: 6.0.7(@types/node@20.17.11)(jiti@1.21.7)(yaml@2.7.0) - '@vitest/mocker@3.0.0-beta.3(vite@6.0.7(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))': + '@vitest/mocker@3.0.3(vite@6.0.7(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))': dependencies: - '@vitest/spy': 3.0.0-beta.3 + '@vitest/spy': 3.0.3 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: @@ -11426,26 +11233,26 @@ snapshots: dependencies: tinyrainbow: 1.2.0 - '@vitest/pretty-format@3.0.0-beta.3': + '@vitest/pretty-format@3.0.3': dependencies: - tinyrainbow: 1.2.0 + tinyrainbow: 2.0.0 - '@vitest/runner@3.0.0-beta.3': + '@vitest/runner@3.0.3': dependencies: - '@vitest/utils': 3.0.0-beta.3 - pathe: 1.1.2 + '@vitest/utils': 3.0.3 + pathe: 2.0.2 - '@vitest/snapshot@3.0.0-beta.3': + '@vitest/snapshot@3.0.3': dependencies: - '@vitest/pretty-format': 3.0.0-beta.3 + '@vitest/pretty-format': 3.0.3 magic-string: 0.30.17 - pathe: 1.1.2 + pathe: 2.0.2 '@vitest/spy@2.0.5': dependencies: tinyspy: 3.0.2 - '@vitest/spy@3.0.0-beta.3': + '@vitest/spy@3.0.3': dependencies: tinyspy: 3.0.2 @@ -11462,11 +11269,11 @@ snapshots: loupe: 3.1.2 tinyrainbow: 1.2.0 - '@vitest/utils@3.0.0-beta.3': + '@vitest/utils@3.0.3': dependencies: - '@vitest/pretty-format': 3.0.0-beta.3 + '@vitest/pretty-format': 3.0.3 loupe: 3.1.2 - tinyrainbow: 1.2.0 + tinyrainbow: 2.0.0 '@volar/language-core@2.4.11': dependencies: @@ -11548,14 +11355,14 @@ snapshots: '@vue/devtools-api@6.6.4': {} - '@vue/devtools-core@7.6.8(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2))': + '@vue/devtools-core@7.6.8(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2))': dependencies: '@vue/devtools-kit': 7.6.8 '@vue/devtools-shared': 7.6.8 mitt: 3.0.1 nanoid: 5.0.9 pathe: 1.1.2 - vite-hot-client: 0.2.4(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + vite-hot-client: 0.2.4(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) vue: 3.5.13(typescript@5.7.2) transitivePeerDependencies: - vite @@ -14721,6 +14528,8 @@ snapshots: pathe@1.1.2: {} + pathe@2.0.2: {} + pathval@2.0.0: {} pend@1.2.0: {} @@ -15433,31 +15242,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.29.1 fsevents: 2.3.3 - rollup@4.31.0: - dependencies: - '@types/estree': 1.0.6 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.31.0 - '@rollup/rollup-android-arm64': 4.31.0 - '@rollup/rollup-darwin-arm64': 4.31.0 - '@rollup/rollup-darwin-x64': 4.31.0 - '@rollup/rollup-freebsd-arm64': 4.31.0 - '@rollup/rollup-freebsd-x64': 4.31.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.31.0 - '@rollup/rollup-linux-arm-musleabihf': 4.31.0 - '@rollup/rollup-linux-arm64-gnu': 4.31.0 - '@rollup/rollup-linux-arm64-musl': 4.31.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.31.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.31.0 - '@rollup/rollup-linux-riscv64-gnu': 4.31.0 - '@rollup/rollup-linux-s390x-gnu': 4.31.0 - '@rollup/rollup-linux-x64-gnu': 4.31.0 - '@rollup/rollup-linux-x64-musl': 4.31.0 - '@rollup/rollup-win32-arm64-msvc': 4.31.0 - '@rollup/rollup-win32-ia32-msvc': 4.31.0 - '@rollup/rollup-win32-x64-msvc': 4.31.0 - fsevents: 2.3.3 - rrweb-cssom@0.7.1: {} run-applescript@7.0.0: {} @@ -15722,9 +15506,9 @@ snapshots: std-env@3.8.0: {} - storybook@8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)): + storybook@8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)): dependencies: - '@storybook/core': 8.4.7(@storybook/test@8.4.7)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(storybook@8.4.7)(typescript@5.7.2)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + '@storybook/core': 8.5.0(@storybook/test@8.5.0)(prettier@3.4.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.29.1)(storybook@8.5.0)(typescript@5.7.2)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) optionalDependencies: prettier: 3.4.2 transitivePeerDependencies: @@ -15978,6 +15762,8 @@ snapshots: tinyrainbow@1.2.0: {} + tinyrainbow@2.0.0: {} + tinyspy@3.0.2: {} tmp-promise@3.0.3: @@ -16253,17 +16039,17 @@ snapshots: extsprintf: 1.4.1 optional: true - vite-hot-client@0.2.4(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)): + vite-hot-client@0.2.4(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)): dependencies: - vite: 6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) - vite-node@3.0.0-beta.3(@types/node@20.17.11)(jiti@1.21.7)(yaml@2.7.0): + vite-node@3.0.0-beta.3(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 1.1.2 - vite: 6.0.9(@types/node@20.17.11)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -16278,13 +16064,34 @@ snapshots: - tsx - yaml - vite-node@3.0.0-beta.3(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0): + vite-node@3.0.3(@types/node@20.17.11)(jiti@1.21.7)(yaml@2.7.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 - pathe: 1.1.2 - vite: 6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) + pathe: 2.0.2 + vite: 6.0.11(@types/node@20.17.11)(jiti@1.21.7)(yaml@2.7.0) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite-node@3.0.3(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0): + dependencies: + cac: 6.7.14 + debug: 4.4.0 + es-module-lexer: 1.6.0 + pathe: 2.0.2 + vite: 6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -16299,10 +16106,10 @@ snapshots: - tsx - yaml - vite-plugin-inspect@0.8.9(rollup@4.31.0)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)): + vite-plugin-inspect@0.8.9(rollup@4.29.1)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)): dependencies: '@antfu/utils': 0.7.10 - '@rollup/pluginutils': 5.1.4(rollup@4.31.0) + '@rollup/pluginutils': 5.1.4(rollup@4.29.1) debug: 4.4.0 error-stack-parser-es: 0.1.5 fs-extra: 11.2.0 @@ -16310,28 +16117,28 @@ snapshots: perfect-debounce: 1.0.0 picocolors: 1.1.1 sirv: 3.0.0 - vite: 6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) transitivePeerDependencies: - rollup - supports-color - vite-plugin-vue-devtools@7.6.8(rollup@4.31.0)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)): + vite-plugin-vue-devtools@7.6.8(rollup@4.29.1)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)): dependencies: - '@vue/devtools-core': 7.6.8(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) + '@vue/devtools-core': 7.6.8(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) '@vue/devtools-kit': 7.6.8 '@vue/devtools-shared': 7.6.8 execa: 9.5.2 sirv: 3.0.0 - vite: 6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) - vite-plugin-inspect: 0.8.9(rollup@4.31.0)(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) - vite-plugin-vue-inspector: 5.3.1(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + vite: 6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) + vite-plugin-inspect: 0.8.9(rollup@4.29.1)(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + vite-plugin-vue-inspector: 5.3.1(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) transitivePeerDependencies: - '@nuxt/kit' - rollup - supports-color - vue - vite-plugin-vue-inspector@5.3.1(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)): + vite-plugin-vue-inspector@5.3.1(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)): dependencies: '@babel/core': 7.26.0 '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.0) @@ -16342,15 +16149,15 @@ snapshots: '@vue/compiler-dom': 3.5.13 kolorist: 1.8.0 magic-string: 0.30.17 - vite: 6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) transitivePeerDependencies: - supports-color - vite-plugin-wasm@3.4.1(vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)): + vite-plugin-wasm@3.4.1(vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)): dependencies: - vite: 6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) - vite@6.0.7(@types/node@20.17.11)(jiti@1.21.7)(yaml@2.7.0): + vite@6.0.11(@types/node@20.17.11)(jiti@1.21.7)(yaml@2.7.0): dependencies: esbuild: 0.24.2 postcss: 8.4.49 @@ -16361,7 +16168,7 @@ snapshots: jiti: 1.21.7 yaml: 2.7.0 - vite@6.0.7(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0): + vite@6.0.11(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0): dependencies: esbuild: 0.24.2 postcss: 8.4.49 @@ -16372,49 +16179,49 @@ snapshots: jiti: 1.21.7 yaml: 2.7.0 - vite@6.0.9(@types/node@20.17.11)(jiti@1.21.7)(yaml@2.7.0): + vite@6.0.7(@types/node@20.17.11)(jiti@1.21.7)(yaml@2.7.0): dependencies: esbuild: 0.24.2 postcss: 8.4.49 - rollup: 4.31.0 + rollup: 4.29.1 optionalDependencies: '@types/node': 20.17.11 fsevents: 2.3.3 jiti: 1.21.7 yaml: 2.7.0 - vite@6.0.9(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0): + vite@6.0.7(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0): dependencies: esbuild: 0.24.2 postcss: 8.4.49 - rollup: 4.31.0 + rollup: 4.29.1 optionalDependencies: '@types/node': 22.10.4 fsevents: 2.3.3 jiti: 1.21.7 yaml: 2.7.0 - vitest@3.0.0-beta.3(@types/node@20.17.11)(jiti@1.21.7)(jsdom@24.1.3)(yaml@2.7.0): + vitest@3.0.3(@types/node@20.17.11)(jiti@1.21.7)(jsdom@24.1.3)(yaml@2.7.0): dependencies: - '@vitest/expect': 3.0.0-beta.3 - '@vitest/mocker': 3.0.0-beta.3(vite@6.0.7(@types/node@20.17.11)(jiti@1.21.7)(yaml@2.7.0)) - '@vitest/pretty-format': 3.0.0-beta.3 - '@vitest/runner': 3.0.0-beta.3 - '@vitest/snapshot': 3.0.0-beta.3 - '@vitest/spy': 3.0.0-beta.3 - '@vitest/utils': 3.0.0-beta.3 + '@vitest/expect': 3.0.3 + '@vitest/mocker': 3.0.3(vite@6.0.7(@types/node@20.17.11)(jiti@1.21.7)(yaml@2.7.0)) + '@vitest/pretty-format': 3.0.3 + '@vitest/runner': 3.0.3 + '@vitest/snapshot': 3.0.3 + '@vitest/spy': 3.0.3 + '@vitest/utils': 3.0.3 chai: 5.1.2 debug: 4.4.0 expect-type: 1.1.0 magic-string: 0.30.17 - pathe: 1.1.2 + pathe: 2.0.2 std-env: 3.8.0 tinybench: 2.9.0 tinyexec: 0.3.2 tinypool: 1.0.2 - tinyrainbow: 1.2.0 + tinyrainbow: 2.0.0 vite: 6.0.7(@types/node@20.17.11)(jiti@1.21.7)(yaml@2.7.0) - vite-node: 3.0.0-beta.3(@types/node@20.17.11)(jiti@1.21.7)(yaml@2.7.0) + vite-node: 3.0.3(@types/node@20.17.11)(jiti@1.21.7)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.17.11 @@ -16433,27 +16240,27 @@ snapshots: - tsx - yaml - vitest@3.0.0-beta.3(@types/node@22.10.4)(jiti@1.21.7)(jsdom@24.1.3)(yaml@2.7.0): + vitest@3.0.3(@types/node@22.10.4)(jiti@1.21.7)(jsdom@24.1.3)(yaml@2.7.0): dependencies: - '@vitest/expect': 3.0.0-beta.3 - '@vitest/mocker': 3.0.0-beta.3(vite@6.0.7(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) - '@vitest/pretty-format': 3.0.0-beta.3 - '@vitest/runner': 3.0.0-beta.3 - '@vitest/snapshot': 3.0.0-beta.3 - '@vitest/spy': 3.0.0-beta.3 - '@vitest/utils': 3.0.0-beta.3 + '@vitest/expect': 3.0.3 + '@vitest/mocker': 3.0.3(vite@6.0.7(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0)) + '@vitest/pretty-format': 3.0.3 + '@vitest/runner': 3.0.3 + '@vitest/snapshot': 3.0.3 + '@vitest/spy': 3.0.3 + '@vitest/utils': 3.0.3 chai: 5.1.2 debug: 4.4.0 expect-type: 1.1.0 magic-string: 0.30.17 - pathe: 1.1.2 + pathe: 2.0.2 std-env: 3.8.0 tinybench: 2.9.0 tinyexec: 0.3.2 tinypool: 1.0.2 - tinyrainbow: 1.2.0 + tinyrainbow: 2.0.0 vite: 6.0.7(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) - vite-node: 3.0.0-beta.3(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) + vite-node: 3.0.3(@types/node@22.10.4)(jiti@1.21.7)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.10.4