From 437a6379efcf7076f169d7b0b6533c7acfe9ba0e Mon Sep 17 00:00:00 2001 From: Dmitriy Selivestrov Date: Wed, 11 Feb 2026 08:35:34 +0300 Subject: [PATCH] feat(Navbar): add component --- .../src/components/Navbar/Navbar.mdx | 91 ++++++++++ .../src/components/Navbar/Navbar.module.css | 151 ++++++++++++++++ .../src/components/Navbar/Navbar.stories.tsx | 157 ++++++++++++++++ .../src/components/Navbar/Navbar.test.tsx | 170 ++++++++++++++++++ .../src/components/Navbar/Navbar.tsx | 105 +++++++++++ .../src/components/Navbar/NavbarContext.tsx | 11 ++ .../Navbar/components/NavbarAppItem.tsx | 18 ++ .../Navbar/components/NavbarBody.tsx | 24 +++ .../Navbar/components/NavbarFooter.tsx | 26 +++ .../Navbar/components/NavbarHeader.tsx | 26 +++ .../Navbar/components/NavbarItem.tsx | 93 ++++++++++ .../src/components/Navbar/components/index.ts | 5 + .../components/src/components/Navbar/index.ts | 2 + .../src/components/Navbar/intl.json | 10 ++ .../components/src/components/Navbar/types.ts | 29 +++ packages/components/src/components/index.ts | 1 + packages/primitives/package.json | 1 + packages/primitives/src/index.ts | 2 + pnpm-lock.yaml | 152 ++++++++++++---- 19 files changed, 1037 insertions(+), 37 deletions(-) create mode 100644 packages/components/src/components/Navbar/Navbar.mdx create mode 100644 packages/components/src/components/Navbar/Navbar.module.css create mode 100644 packages/components/src/components/Navbar/Navbar.stories.tsx create mode 100644 packages/components/src/components/Navbar/Navbar.test.tsx create mode 100644 packages/components/src/components/Navbar/Navbar.tsx create mode 100644 packages/components/src/components/Navbar/NavbarContext.tsx create mode 100644 packages/components/src/components/Navbar/components/NavbarAppItem.tsx create mode 100644 packages/components/src/components/Navbar/components/NavbarBody.tsx create mode 100644 packages/components/src/components/Navbar/components/NavbarFooter.tsx create mode 100644 packages/components/src/components/Navbar/components/NavbarHeader.tsx create mode 100644 packages/components/src/components/Navbar/components/NavbarItem.tsx create mode 100644 packages/components/src/components/Navbar/components/index.ts create mode 100644 packages/components/src/components/Navbar/index.ts create mode 100644 packages/components/src/components/Navbar/intl.json create mode 100644 packages/components/src/components/Navbar/types.ts diff --git a/packages/components/src/components/Navbar/Navbar.mdx b/packages/components/src/components/Navbar/Navbar.mdx new file mode 100644 index 00000000..d43d3657 --- /dev/null +++ b/packages/components/src/components/Navbar/Navbar.mdx @@ -0,0 +1,91 @@ +import { + Meta, + Story, + Props, + Status, +} from '../../../../../.storybook/components'; + +import * as Stories from './Navbar.stories'; + + + +# Navbar + + + +The main menu organizes navigation within the product. It consists of a logo, section links, and can additionally include an app switcher, help section, and settings block. + +```tsx +import { Navbar } from '@koobiq/react-components'; +``` + + + +## Props + + + +## Subcomponents + +The component has the following helper components: + +- `Navbar.Header` — header of the navbar, typically contains logo and app switcher +- `Navbar.Body` — body of the navbar for placing navigation items +- `Navbar.Footer` — footer of the navbar, can contain settings and help links +- `Navbar.Item` — navigation item for the navbar body +- `Navbar.AppItem` — app switcher item for the navbar header + +## Usage + +The Navbar component consists of several subcomponents that help organize the navigation structure: + +```tsx +import { Navbar } from '@koobiq/react-components'; + + + + App 1 + + + + Dashboard + Reports + + + + Settings + +; +``` + +## Integration + +### Next.js + +Integrating navigation into Next.js: + +```tsx +import { RouterProvider } from '@koobiq/react-core'; + +const router = useRouter() + + router.push(path)}> + + + ... + + + + + Link 1 + + + ... + + + ... + + +``` + + diff --git a/packages/components/src/components/Navbar/Navbar.module.css b/packages/components/src/components/Navbar/Navbar.module.css new file mode 100644 index 00000000..1f29fa18 --- /dev/null +++ b/packages/components/src/components/Navbar/Navbar.module.css @@ -0,0 +1,151 @@ +@import url('../../styles/mixins.css'); + +.navbar { + position: relative; + display: flex; + flex-direction: column; + background-color: var(--kbq-background-bg-tertiary); + block-size: 100%; + min-inline-size: 240px; + border-inline-end: 1px solid var(--kbq-line-contrast-less); + + &[data-collapsed='true'] { + min-inline-size: var(--kbq-size-6xl); + inline-size: var(--kbq-size-6xl); + } +} + +.list { + display: flex; + flex-direction: column; + gap: 1px; + flex: 1 1 auto; + + &[data-padded] { + padding: 0; + } +} + +.appItem { + .header & { + block-size: auto; + border-block: 0 solid transparent; + border-block-width: var(--kbq-size-s) 7px; + } + + .item& { + @mixin typography subheading; + + padding: var(--kbq-size-xxs); + } +} + +.item { + position: relative; + block-size: 40px; + inline-size: 100%; + padding: 0 var(--kbq-size-m); + border-inline-width: var(--kbq-size-s); + gap: var(--kbq-size-m); + border-color: transparent; + background-color: transparent; + + .navbar[data-collapsed='true'] & { + box-sizing: border-box; + justify-content: center; + padding: var(--kbq-size-xxs); + } + + .navbar .list & { + border-inline-width: var(--kbq-size-s); + } +} + +.itemIcon { + display: flex; + flex-shrink: 0; +} + +.itemContent { + @mixin ellipsis; +} + +.itemBadge { + margin-inline-start: auto; + display: grid; + place-content: center; + background-color: var(--kbq-background-error); + color: var(--kbq-foreground-white); + block-size: var(--kbq-size-l); + inline-size: var(--kbq-size-l); + border-radius: var(--kbq-size-xxs); + + .navbar[data-collapsed='true'] & { + position: absolute; + inset-inline-end: calc(-1 * var(--kbq-size-3xs)); + inset-block-start: calc(-1 * var(--kbq-size-3xs)); + } +} + +.itemMenuIcon { + margin-inline-start: auto; + color: var(--kbq-icon-contrast-fade); + + .itemBadge + & { + margin-inline-start: unset; + } +} + +.footer { + display: flex; + flex-direction: column; + gap: 1px; + margin-block-start: auto; + padding: var(--kbq-size-xxl) 0 var(--kbq-size-s); +} + +.toggleWrapper { + position: absolute; + inset-block-start: var(--kbq-size-3xl); + inset-inline-end: calc(-1 * var(--kbq-size-l)); + display: none; + place-content: stretch; + block-size: var(--kbq-size-3xl); + inline-size: var(--kbq-size-3xl); + padding: var(--kbq-size-3xs); + border: none; + outline: none; + background-color: transparent; + + .navbar:is(:hover, :focus-within) & { + display: grid; + } +} + +.toggleButton { + z-index: 1; + display: grid; + place-content: center; + box-shadow: var(--kbq-shadow-popup); + border-radius: 50%; + background-color: var(--kbq-background-card); + color: var(--kbq-icon-contrast-fade); + + .navbar[data-collapsed='true'] & { + transform: rotate(180deg); + } + + &:hover { + cursor: pointer; + color: var(--kbq-states-icon-contrast-hover); + } + + &:active { + color: var(--kbq-states-icon-contrast-active); + } + + .toggleWrapper:focus-visible & { + outline: var(--kbq-size-3xs) solid var(--kbq-states-line-focus-theme); + outline-offset: -1px; + } +} diff --git a/packages/components/src/components/Navbar/Navbar.stories.tsx b/packages/components/src/components/Navbar/Navbar.stories.tsx new file mode 100644 index 00000000..f6cab1b4 --- /dev/null +++ b/packages/components/src/components/Navbar/Navbar.stories.tsx @@ -0,0 +1,157 @@ +import { RouterProvider } from '@koobiq/react-core'; +import { + IconCloud16, + IconDashboard16, + IconDatabase16, + IconPrinter16, + IconUser16, +} from '@koobiq/react-icons'; +import type { Meta, StoryObj } from '@storybook/react'; + +import { Menu } from '../Menu'; + +import { Navbar, type NavbarProps } from '.'; + +const meta = { + title: 'Components/Navbar', + component: Navbar, + subcomponents: { + 'Navbar.Header': Navbar.Header, + 'Navbar.Body': Navbar.Body, + 'Navbar.Footer': Navbar.Footer, + 'Navbar.Item': Navbar.Item, + 'Navbar.AppItem': Navbar.AppItem, + }, + parameters: { + layout: 'centered', + }, + decorators: [ + (Story) => ( +
+ +
+ ), + ], +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +const appIcon = ( + + + + +); + +export const Base: Story = { + render: (args) => ( + + + + Product name + + + + + } href="#"> + Data Catalog + + + } href="#"> + Integrations + + + alert(key)} + control={(props) => ( + } badge={2} isMenu> + Control Panel + + )} + > + {(item) => {item.name}} + + + alert(key)} + control={(props) => ( + } isMenu> + Documentation + + )} + > + {(item) => {item.name}} + + + + + } as="button" badge={2}> + Alexander Konstantinopolous + + + + ), +}; + +export const RouteProvider: Story = { + render: (args) => ( + alert(path)}> + + + + Product name + + + + + } href="/link-1"> + Link 1 + + + } href="/link-2"> + Link 2 + + + } href="/link-3"> + Link 3 + + + + + } as={'button'} badge={2}> + Alexander Konstantinopolous + + + + + ), +}; diff --git a/packages/components/src/components/Navbar/Navbar.test.tsx b/packages/components/src/components/Navbar/Navbar.test.tsx new file mode 100644 index 00000000..b3efe2b1 --- /dev/null +++ b/packages/components/src/components/Navbar/Navbar.test.tsx @@ -0,0 +1,170 @@ +import { render, fireEvent, screen } from '@testing-library/react'; +import '@testing-library/jest-dom'; +import { describe, it, expect } from 'vitest'; + +import { Navbar } from '.'; +import { + NavbarAppItem, + NavbarBody, + NavbarFooter, + NavbarHeader, + NavbarItem, +} from './components'; +import s from './Navbar.module.css'; + +describe('Navbar', () => { + const renderNavbar = (props = {}) => + render( + + + AppIcon}> + App + + + + Icon1}> + Item 1 + + Icon2}> + Item 2 + + + + Icon3}> + Footer Item + + + + ); + + it('renders with default expanded state', () => { + renderNavbar(); + + const nav = screen.getByRole('navigation'); + + expect(nav).toHaveAttribute('data-collapsed', 'false'); + expect(screen.getByText('Item 1')).toBeInTheDocument(); + }); + + it('toggles collapse state when toggle button is clicked', () => { + renderNavbar(); + + const nav = screen.getByRole('navigation'); + const toggleButton = screen.getByRole('button', { hidden: true }); + + expect(toggleButton).toBeInTheDocument(); + + fireEvent.click(toggleButton!); + + expect(nav).toHaveAttribute('data-collapsed', 'true'); + }); + + it('hides item content when collapsed', () => { + renderNavbar(); + + const nav = screen.getByRole('navigation'); + const toggleButton = screen.getByRole('button', { hidden: true }); + + fireEvent.click(toggleButton!); + + expect(nav).toHaveAttribute('data-collapsed', 'true'); + expect(screen.queryByText('Item 1')).not.toBeInTheDocument(); + expect(screen.queryByText('Item 2')).not.toBeInTheDocument(); + }); + + describe('Navbar subcomponents', () => { + it('renders NavbarHeader with children', () => { + render( + +
  • Header Item
  • +
    + ); + + const header = screen.getByRole('banner'); + + expect(header).toBeInTheDocument(); + expect(screen.getByText('Header Item')).toBeInTheDocument(); + }); + + it('renders NavbarBody with children', () => { + render( + +
  • Body Item
  • +
    + ); + + expect(screen.getByText('Body Item')).toBeInTheDocument(); + }); + + it('renders NavbarFooter with children', () => { + render( + +
  • Footer Item
  • +
    + ); + + const footer = screen.getByRole('contentinfo'); + + expect(footer).toBeInTheDocument(); + expect(screen.getByText('Footer Item')).toBeInTheDocument(); + }); + + it('renders NavbarItem with icon and text', () => { + render( + + Icon}> + Item Text + + + ); + + const link = screen.getByRole('link', { name: /Item Text/i }); + + expect(link).toBeInTheDocument(); + expect(link).toContainHTML('Icon'); + }); + + it('renders NavbarItem with badge', () => { + render( + + 99}> + Item with Badge + + + ); + + const badge = screen.getByText('99'); + + expect(badge).toBeInTheDocument(); + }); + + it('renders NavbarItem as menu when isMenu is true', () => { + render( + + + Menu Item + + + ); + + const menuIcon = document.querySelector(`.${s.itemMenuIcon}`); + + expect(menuIcon).toBeInTheDocument(); + }); + + it('renders NavbarAppItem without menu props', () => { + render( + + AppIcon}> + App + + + ); + + const link = screen.getByRole('link', { name: /App/i }); + + expect(link).toBeInTheDocument(); + expect(link).toContainHTML('AppIcon'); + }); + }); +}); diff --git a/packages/components/src/components/Navbar/Navbar.tsx b/packages/components/src/components/Navbar/Navbar.tsx new file mode 100644 index 00000000..fc1d77dd --- /dev/null +++ b/packages/components/src/components/Navbar/Navbar.tsx @@ -0,0 +1,105 @@ +'use client'; + +import { + clsx, + mergeProps, + useControlledState, + useLocalizedStringFormatter, + useObjectRef, +} from '@koobiq/react-core'; +import { IconChevronDoubleLeftS16 } from '@koobiq/react-icons'; +import { Button, useToolbar } from '@koobiq/react-primitives'; + +import { Tooltip } from '../Tooltip'; + +import { + NavbarAppItem, + NavbarBody, + NavbarFooter, + NavbarHeader, + NavbarItem, +} from './components'; +import intlMessages from './intl.json'; +import s from './Navbar.module.css'; +import { NavbarContext } from './NavbarContext'; +import type { NavbarProps } from './types'; + +export const NavbarComponent = ({ + variant = 'vertical', + isCollapsed, + isToggleButtonHidden, + defaultCollapsed, + className, + children, + onCollapse, + ref, + ...other +}: NavbarProps) => { + const navbarRef = useObjectRef(ref); + const { toolbarProps } = useToolbar({ orientation: variant }, navbarRef); + + const [isCollapsedActual, setIsCollapsedActual] = useControlledState( + isCollapsed, + defaultCollapsed ?? false, + onCollapse + ); + + const stringFormatter = useLocalizedStringFormatter(intlMessages); + + return ( + + + + ); +}; + +NavbarComponent.displayName = 'Navbar'; + +type CompoundedComponent = typeof NavbarComponent & { + Header: typeof NavbarHeader; + Body: typeof NavbarBody; + Footer: typeof NavbarFooter; + Item: typeof NavbarItem; + AppItem: typeof NavbarAppItem; +}; + +export const Navbar = NavbarComponent as CompoundedComponent; + +Navbar.Header = NavbarHeader; +Navbar.Body = NavbarBody; +Navbar.Footer = NavbarFooter; +Navbar.Item = NavbarItem; +Navbar.AppItem = NavbarAppItem; diff --git a/packages/components/src/components/Navbar/NavbarContext.tsx b/packages/components/src/components/Navbar/NavbarContext.tsx new file mode 100644 index 00000000..0811106c --- /dev/null +++ b/packages/components/src/components/Navbar/NavbarContext.tsx @@ -0,0 +1,11 @@ +'use client'; + +import { createContext, useContext } from 'react'; + +export type NavbarContextProps = { + isCollapsed?: boolean; +}; + +export const NavbarContext = createContext({}); + +export const useNavbarState = () => useContext(NavbarContext); diff --git a/packages/components/src/components/Navbar/components/NavbarAppItem.tsx b/packages/components/src/components/Navbar/components/NavbarAppItem.tsx new file mode 100644 index 00000000..7032fd34 --- /dev/null +++ b/packages/components/src/components/Navbar/components/NavbarAppItem.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { clsx, type DistributiveOmit } from '@koobiq/react-core'; + +import s from '../Navbar.module.css'; + +import { NavbarItem, type NavbarItemProps } from './NavbarItem'; + +export type NavbarAppItemProps = DistributiveOmit< + NavbarItemProps, + 'isMenu' | 'badge' +>; + +export const NavbarAppItem = ({ className, ...props }: NavbarAppItemProps) => ( + +); + +NavbarAppItem.displayName = 'NavbarAppItem'; diff --git a/packages/components/src/components/Navbar/components/NavbarBody.tsx b/packages/components/src/components/Navbar/components/NavbarBody.tsx new file mode 100644 index 00000000..3f1eab47 --- /dev/null +++ b/packages/components/src/components/Navbar/components/NavbarBody.tsx @@ -0,0 +1,24 @@ +'use client'; + +import type { ComponentPropsWithRef } from 'react'; + +import { clsx } from '@koobiq/react-core'; + +import { utilClasses } from '../../../styles/utility'; +import s from '../Navbar.module.css'; + +const { list } = utilClasses; + +export type NavbarBodyProps = ComponentPropsWithRef<'ul'>; + +export const NavbarBody = ({ + children, + className, + ...props +}: NavbarBodyProps) => ( +
      + {children} +
    +); + +NavbarBody.displayName = 'NavbarBody'; diff --git a/packages/components/src/components/Navbar/components/NavbarFooter.tsx b/packages/components/src/components/Navbar/components/NavbarFooter.tsx new file mode 100644 index 00000000..50131ace --- /dev/null +++ b/packages/components/src/components/Navbar/components/NavbarFooter.tsx @@ -0,0 +1,26 @@ +'use client'; + +import type { ComponentPropsWithRef } from 'react'; + +import { clsx } from '@koobiq/react-core'; + +import { utilClasses } from '../../../styles/utility'; +import s from '../Navbar.module.css'; + +const { list } = utilClasses; + +export type NavbarFooterProps = ComponentPropsWithRef<'footer'>; + +export const NavbarFooter = ({ + children, + className, + ...props +}: NavbarFooterProps) => ( +
    +
      + {children} +
    +
    +); + +NavbarFooter.displayName = 'NavbarFooter'; diff --git a/packages/components/src/components/Navbar/components/NavbarHeader.tsx b/packages/components/src/components/Navbar/components/NavbarHeader.tsx new file mode 100644 index 00000000..25e0286f --- /dev/null +++ b/packages/components/src/components/Navbar/components/NavbarHeader.tsx @@ -0,0 +1,26 @@ +'use client'; + +import type { ComponentPropsWithRef } from 'react'; + +import { clsx } from '@koobiq/react-core'; + +import { utilClasses } from '../../../styles/utility'; +import s from '../Navbar.module.css'; + +const { list } = utilClasses; + +export type NavbarHeaderProps = ComponentPropsWithRef<'header'>; + +export const NavbarHeader = ({ + className, + children, + ...props +}: NavbarHeaderProps) => ( +
    +
      + {children} +
    +
    +); + +NavbarHeader.displayName = 'NavbarHeader'; diff --git a/packages/components/src/components/Navbar/components/NavbarItem.tsx b/packages/components/src/components/Navbar/components/NavbarItem.tsx new file mode 100644 index 00000000..a1f4f6ad --- /dev/null +++ b/packages/components/src/components/Navbar/components/NavbarItem.tsx @@ -0,0 +1,93 @@ +'use client'; + +import type { ReactNode } from 'react'; + +import { + clsx, + mergeProps, + mergeRefs, + polymorphicForwardRef, +} from '@koobiq/react-core'; +import { IconChevronRight16 } from '@koobiq/react-icons'; +import { Link, type LinkBaseProps } from '@koobiq/react-primitives'; + +import { utilClasses } from '../../../styles/utility'; +import { Tooltip } from '../../Tooltip'; +import s from '../Navbar.module.css'; +import { useNavbarState } from '../NavbarContext'; + +export type NavbarItemProps = { + /** + * Whether the item is a menu trigger. + */ + isMenu?: boolean; + /** + * Additional CSS class name. + */ + className?: string; + /** + * Icon to display before the item content. + */ + icon?: ReactNode; + /** + * Badge content to display. + */ + badge?: ReactNode; + /** + * Item content. + */ + children?: ReactNode; +} & LinkBaseProps; + +const { listItem, typography } = utilClasses; + +export const NavbarItem = polymorphicForwardRef<'a', NavbarItemProps>( + ( + { as, className, isMenu = false, icon, badge, children, ...other }, + inRef + ) => { + const { isCollapsed } = useNavbarState(); + + return ( + ( + + {icon && {icon}} + + {!isCollapsed && {children}} + + {badge && ( + + {badge} + + )} + + {!isCollapsed && isMenu && ( + + )} + + )} + > + {children} + + ); + } +); + +NavbarItem.displayName = 'NavbarItem'; diff --git a/packages/components/src/components/Navbar/components/index.ts b/packages/components/src/components/Navbar/components/index.ts new file mode 100644 index 00000000..8acbb8b3 --- /dev/null +++ b/packages/components/src/components/Navbar/components/index.ts @@ -0,0 +1,5 @@ +export * from './NavbarBody'; +export * from './NavbarFooter'; +export * from './NavbarHeader'; +export * from './NavbarItem'; +export * from './NavbarAppItem'; diff --git a/packages/components/src/components/Navbar/index.ts b/packages/components/src/components/Navbar/index.ts new file mode 100644 index 00000000..bc216136 --- /dev/null +++ b/packages/components/src/components/Navbar/index.ts @@ -0,0 +1,2 @@ +export * from './Navbar'; +export * from './types'; diff --git a/packages/components/src/components/Navbar/intl.json b/packages/components/src/components/Navbar/intl.json new file mode 100644 index 00000000..dec230e3 --- /dev/null +++ b/packages/components/src/components/Navbar/intl.json @@ -0,0 +1,10 @@ +{ + "ru-RU": { + "show navbar": "Показать", + "hide navbar": "Скрыть" + }, + "en-US": { + "show navbar": "Show", + "hide navbar": "Hide" + } +} diff --git a/packages/components/src/components/Navbar/types.ts b/packages/components/src/components/Navbar/types.ts new file mode 100644 index 00000000..4ebeac1e --- /dev/null +++ b/packages/components/src/components/Navbar/types.ts @@ -0,0 +1,29 @@ +import type { ComponentPropsWithRef } from 'react'; + +export const navbarPropVariant = ['vertical', 'horizontal'] as const; + +export type NavbarPropVariant = (typeof navbarPropVariant)[number]; + +export type NavbarProps = { + /** + * Whether the navbar is collapsed. + */ + isCollapsed?: boolean; + /** + * Whether the toggle button is hidden. + */ + isToggleButtonHidden?: boolean; + /** + * Default collapsed state when uncontrolled. + */ + defaultCollapsed?: boolean; + /** + * Navbar orientation variant. + * @default 'vertical' + */ + variant?: NavbarPropVariant; + /** + * Callback fired when collapse state changes. + */ + onCollapse?: (isCollapsed: boolean) => void; +} & ComponentPropsWithRef<'nav'>; diff --git a/packages/components/src/components/index.ts b/packages/components/src/components/index.ts index a252303c..1661fab2 100644 --- a/packages/components/src/components/index.ts +++ b/packages/components/src/components/index.ts @@ -44,6 +44,7 @@ export * from './ToastProvider'; export * from './Breadcrumbs'; export * from './Accordion'; export * from './ContenPanel'; +export * from './Navbar'; export * from './layout'; export { useListData, diff --git a/packages/primitives/package.json b/packages/primitives/package.json index c4fae489..45d9b652 100644 --- a/packages/primitives/package.json +++ b/packages/primitives/package.json @@ -58,6 +58,7 @@ "@react-aria/textfield": "^3.17.5", "@react-aria/toast": "^3.0.8", "@react-aria/toggle": "^3.12.2", + "@react-aria/toolbar": "3.0.0-beta.22", "@react-aria/tooltip": "^3.8.5", "@react-aria/visually-hidden": "^3.8.0", "@react-stately/calendar": "^3.8.2", diff --git a/packages/primitives/src/index.ts b/packages/primitives/src/index.ts index ec95e660..39f6efba 100644 --- a/packages/primitives/src/index.ts +++ b/packages/primitives/src/index.ts @@ -73,6 +73,8 @@ export * from '@react-stately/toast'; export * from '@react-aria/breadcrumbs'; +export * from '@react-aria/toolbar'; + export * from '@react-aria/disclosure'; export * from '@react-stately/disclosure'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index db98b1fa..bdc2f1e9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -388,6 +388,9 @@ importers: '@react-aria/toggle': specifier: ^3.12.2 version: 3.12.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/toolbar': + specifier: 3.0.0-beta.22 + version: 3.0.0-beta.22(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/tooltip': specifier: ^3.8.5 version: 3.8.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -482,7 +485,7 @@ importers: version: 0.19.0(react@19.2.3) next: specifier: ^15.5.0 - version: 15.5.9(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 15.5.9(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -1740,6 +1743,9 @@ packages: '@internationalized/date@3.10.0': resolution: {integrity: sha512-oxDR/NTEJ1k+UFVQElaNIk65E/Z83HK1z1WI3lQyhTtnNg4R5oVXaPzK3jcpKG8UHKDVuDQHzn+wsxSz8RP3aw==} + '@internationalized/date@3.10.1': + resolution: {integrity: sha512-oJrXtQiAXLvT9clCf1K4kxp3eKsQhIaZqxEyowkBcsvZDdZkbWrVmnGknxs5flTD0VGsxrxKgBCZty1EzoiMzA==} + '@internationalized/message@3.1.8': resolution: {integrity: sha512-Rwk3j/TlYZhn3HQ6PyXUV0XP9Uv42jqZGNegt0BXlxjE6G3+LwHjbQZAGHhCnCPdaA6Tvd3ma/7QzLlLkJxAWA==} @@ -2043,6 +2049,12 @@ packages: react: ^19.0.0 react-dom: ^19.0.0 + '@react-aria/focus@3.21.3': + resolution: {integrity: sha512-FsquWvjSCwC2/sBk4b+OqJyONETUIXQ2vM0YdPAuC+QFQh2DT6TIBo6dOZVSezlhudDla69xFBd6JvCFq1AbUw==} + peerDependencies: + react: ^19.0.0 + react-dom: ^19.0.0 + '@react-aria/form@3.0.11': resolution: {integrity: sha512-oXzjTiwVuuWjZ8muU0hp3BrDH5qjVctLOF50mjPvqUbvXQTHhoDxWweyIXPQjGshaqBd2w4pWaE4A2rG2O/apw==} peerDependencies: @@ -2096,12 +2108,24 @@ packages: react: ^19.0.0 react-dom: ^19.0.0 + '@react-aria/i18n@3.12.14': + resolution: {integrity: sha512-zYvs1FlLamFD49uneX3i5mPHrAsB3OjVpSWApTcPw8ydxOaphQDp/Q1aqrbcxlrQCcxZdXWHuvLlbkNR4+8jzw==} + peerDependencies: + react: ^19.0.0 + react-dom: ^19.0.0 + '@react-aria/interactions@3.25.6': resolution: {integrity: sha512-5UgwZmohpixwNMVkMvn9K1ceJe6TzlRlAfuYoQDUuOkk62/JVJNDLAPKIf5YMRc7d2B0rmfgaZLMtbREb0Zvkw==} peerDependencies: react: ^19.0.0 react-dom: ^19.0.0 + '@react-aria/interactions@3.26.0': + resolution: {integrity: sha512-AAEcHiltjfbmP1i9iaVw34Mb7kbkiHpYdqieWufldh4aplWgsF11YQZOfaCJW4QoR2ML4Zzoa9nfFwLXA52R7Q==} + peerDependencies: + react: ^19.0.0 + react-dom: ^19.0.0 + '@react-aria/label@3.7.22': resolution: {integrity: sha512-jLquJeA5ZNqDT64UpTc9XJ7kQYltUlNcgxZ37/v4mHe0UZ7QohCKdKQhXHONb0h2jjNUpp2HOZI8J9++jOpzxA==} peerDependencies: @@ -2307,6 +2331,12 @@ packages: react: ^19.0.0 react-dom: ^19.0.0 + '@react-aria/toolbar@3.0.0-beta.22': + resolution: {integrity: sha512-Q1gOj6N4vzvpGrIoNAxpUudEQP82UgQACENH/bcH8FnEMbSP7DHvVfDhj7GTU6ldMXO2cjqLhiidoUK53gkCiA==} + peerDependencies: + react: ^19.0.0 + react-dom: ^19.0.0 + '@react-aria/tooltip@3.8.8': resolution: {integrity: sha512-CmHUqtXtFWmG4AHMEr9hIVex+oscK6xcM2V47gq9ijNInxe3M6UBu/dBdkgGP/jYv9N7tzCAjTR8nNIHQXwvWw==} peerDependencies: @@ -7878,6 +7908,7 @@ packages: tar@6.2.1: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me tcp-port-used@1.0.2: resolution: {integrity: sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==} @@ -9669,6 +9700,10 @@ snapshots: dependencies: '@swc/helpers': 0.5.17 + '@internationalized/date@3.10.1': + dependencies: + '@swc/helpers': 0.5.17 + '@internationalized/message@3.1.8': dependencies: '@swc/helpers': 0.5.17 @@ -10077,10 +10112,20 @@ snapshots: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) + '@react-aria/focus@3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.17 + clsx: 2.1.1 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + '@react-aria/form@3.0.11(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@react-aria/interactions': 3.25.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-stately/form': 3.2.2(react@19.2.3) '@react-types/shared': 3.32.1(react@19.2.3) '@swc/helpers': 0.5.17 @@ -10091,7 +10136,7 @@ snapshots: '@react-aria/form@3.0.18(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@react-aria/interactions': 3.25.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-stately/form': 3.2.2(react@19.2.3) '@react-types/shared': 3.32.1(react@19.2.3) '@swc/helpers': 0.5.17 @@ -10101,7 +10146,7 @@ snapshots: '@react-aria/form@3.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@react-aria/interactions': 3.25.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-stately/form': 3.2.2(react@19.2.3) '@react-types/shared': 3.32.1(react@19.2.3) '@swc/helpers': 0.5.17 @@ -10111,7 +10156,7 @@ snapshots: '@react-aria/form@3.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@react-aria/interactions': 3.25.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-stately/form': 3.2.2(react@19.2.3) '@react-types/shared': 3.32.1(react@19.2.3) '@swc/helpers': 0.5.17 @@ -10125,7 +10170,7 @@ snapshots: '@react-aria/interactions': 3.25.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/live-announcer': 3.4.4 '@react-aria/selection': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-stately/collections': 3.12.8(react@19.2.3) '@react-stately/grid': 3.11.6(react@19.2.3) '@react-stately/selection': 3.20.6(react@19.2.3) @@ -10143,7 +10188,7 @@ snapshots: '@react-aria/interactions': 3.25.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/live-announcer': 3.4.4 '@react-aria/selection': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-stately/collections': 3.12.8(react@19.2.3) '@react-stately/grid': 3.11.6(react@19.2.3) '@react-stately/selection': 3.20.6(react@19.2.3) @@ -10161,7 +10206,7 @@ snapshots: '@react-aria/i18n': 3.12.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/interactions': 3.25.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/selection': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-stately/collections': 3.12.8(react@19.2.3) '@react-stately/list': 3.12.3(react@19.2.3) '@react-stately/tree': 3.9.0(react@19.2.3) @@ -10177,7 +10222,7 @@ snapshots: '@react-aria/i18n': 3.12.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/interactions': 3.25.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/selection': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-stately/list': 3.13.1(react@19.2.3) '@react-stately/tree': 3.9.3(react@19.2.3) '@react-types/shared': 3.32.1(react@19.2.3) @@ -10198,6 +10243,19 @@ snapshots: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) + '@react-aria/i18n@3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@internationalized/date': 3.10.1 + '@internationalized/message': 3.1.8 + '@internationalized/number': 3.6.5 + '@internationalized/string': 3.2.7 + '@react-aria/ssr': 3.9.10(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.17 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + '@react-aria/interactions@3.25.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@react-aria/ssr': 3.9.10(react@19.2.3) @@ -10208,6 +10266,16 @@ snapshots: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) + '@react-aria/interactions@3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/ssr': 3.9.10(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-stately/flags': 3.1.2 + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.17 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + '@react-aria/label@3.7.22(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@react-aria/utils': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -10218,7 +10286,7 @@ snapshots: '@react-aria/landmark@3.0.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: - '@react-aria/utils': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-types/shared': 3.32.1(react@19.2.3) '@swc/helpers': 0.5.17 react: 19.2.3 @@ -10254,7 +10322,7 @@ snapshots: '@react-aria/interactions': 3.25.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/label': 3.7.22(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/selection': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-stately/collections': 3.12.8(react@19.2.3) '@react-stately/list': 3.12.3(react@19.2.3) '@react-types/listbox': 3.7.1(react@19.2.3) @@ -10268,7 +10336,7 @@ snapshots: '@react-aria/interactions': 3.25.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/label': 3.7.22(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/selection': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-stately/collections': 3.12.8(react@19.2.3) '@react-stately/list': 3.13.1(react@19.2.3) '@react-types/listbox': 3.7.4(react@19.2.3) @@ -10348,7 +10416,7 @@ snapshots: dependencies: '@react-aria/i18n': 3.12.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/label': 3.7.22(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-types/progress': 3.5.16(react@19.2.3) '@react-types/shared': 3.32.1(react@19.2.3) '@swc/helpers': 0.5.17 @@ -10378,7 +10446,7 @@ snapshots: '@react-aria/i18n': 3.12.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/interactions': 3.25.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/label': 3.7.22(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-stately/radio': 3.11.2(react@19.2.3) '@react-types/radio': 3.9.2(react@19.2.3) '@react-types/shared': 3.32.1(react@19.2.3) @@ -10403,7 +10471,7 @@ snapshots: dependencies: '@react-aria/i18n': 3.12.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/textfield': 3.18.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-stately/searchfield': 3.5.16(react@19.2.3) '@react-types/button': 3.14.1(react@19.2.3) '@react-types/searchfield': 3.6.6(react@19.2.3) @@ -10440,7 +10508,7 @@ snapshots: '@react-aria/listbox': 3.15.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/menu': 3.19.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/selection': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/visually-hidden': 3.8.28(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-stately/select': 3.8.0(react@19.2.3) '@react-types/button': 3.14.1(react@19.2.3) @@ -10464,7 +10532,7 @@ snapshots: '@react-aria/separator@3.4.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: - '@react-aria/utils': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-types/shared': 3.32.1(react@19.2.3) '@swc/helpers': 0.5.17 react: 19.2.3 @@ -10482,7 +10550,7 @@ snapshots: dependencies: '@react-aria/i18n': 3.12.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/live-announcer': 3.4.4 - '@react-aria/utils': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-types/button': 3.14.1(react@19.2.3) '@react-types/shared': 3.32.1(react@19.2.3) '@swc/helpers': 0.5.17 @@ -10569,7 +10637,7 @@ snapshots: '@react-aria/interactions': 3.25.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/label': 3.7.22(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/selection': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-stately/list': 3.13.1(react@19.2.3) '@react-types/button': 3.14.1(react@19.2.3) '@react-types/shared': 3.32.1(react@19.2.3) @@ -10596,7 +10664,7 @@ snapshots: '@react-aria/form': 3.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/interactions': 3.25.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/label': 3.7.22(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-stately/form': 3.2.2(react@19.2.3) '@react-stately/utils': 3.10.8(react@19.2.3) '@react-types/shared': 3.32.1(react@19.2.3) @@ -10610,7 +10678,7 @@ snapshots: '@react-aria/form': 3.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/interactions': 3.25.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/label': 3.7.22(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-stately/form': 3.2.2(react@19.2.3) '@react-stately/utils': 3.10.8(react@19.2.3) '@react-types/shared': 3.32.1(react@19.2.3) @@ -10647,7 +10715,17 @@ snapshots: dependencies: '@react-aria/focus': 3.21.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-aria/i18n': 3.12.13(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.3) + '@swc/helpers': 0.5.17 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + '@react-aria/toolbar@3.0.0-beta.22(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-types/shared': 3.32.1(react@19.2.3) '@swc/helpers': 0.5.17 react: 19.2.3 @@ -10806,7 +10884,7 @@ snapshots: dependencies: '@react-stately/collections': 3.12.8(react@19.2.3) '@react-stately/selection': 3.20.6(react@19.2.3) - '@react-stately/utils': 3.10.8(react@19.2.3) + '@react-stately/utils': 3.11.0(react@19.2.3) '@react-types/shared': 3.32.1(react@19.2.3) '@swc/helpers': 0.5.17 react: 19.2.3 @@ -10933,7 +11011,7 @@ snapshots: '@react-stately/selection@3.20.3(react@19.2.3)': dependencies: '@react-stately/collections': 3.12.8(react@19.2.3) - '@react-stately/utils': 3.10.8(react@19.2.3) + '@react-stately/utils': 3.11.0(react@19.2.3) '@react-types/shared': 3.32.1(react@19.2.3) '@swc/helpers': 0.5.17 react: 19.2.3 @@ -11001,7 +11079,7 @@ snapshots: dependencies: '@react-stately/collections': 3.12.8(react@19.2.3) '@react-stately/selection': 3.20.6(react@19.2.3) - '@react-stately/utils': 3.10.8(react@19.2.3) + '@react-stately/utils': 3.11.0(react@19.2.3) '@react-types/shared': 3.32.1(react@19.2.3) '@swc/helpers': 0.5.17 react: 19.2.3 @@ -13619,8 +13697,8 @@ snapshots: '@typescript-eslint/parser': 8.46.2(eslint@8.57.1)(typescript@5.7.2) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.1) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.2(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.2(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1))(eslint@8.57.1) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.2(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) eslint-plugin-react: 7.37.5(eslint@8.57.1) eslint-plugin-react-hooks: 5.2.0(eslint@8.57.1) @@ -13643,7 +13721,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.1): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.2(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1))(eslint@8.57.1): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 @@ -13654,18 +13732,18 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.2(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.2(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.46.2(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.46.2(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.2(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.46.2(eslint@8.57.1)(typescript@5.7.2) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.1) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.2(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1))(eslint@8.57.1) transitivePeerDependencies: - supports-color @@ -13679,7 +13757,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.2(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.2(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -13690,7 +13768,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.46.2(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.46.2(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.2(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -16043,7 +16121,7 @@ snapshots: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - next@15.5.9(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + next@15.5.9(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: '@next/env': 15.5.9 '@swc/helpers': 0.5.15 @@ -16051,7 +16129,7 @@ snapshots: postcss: 8.4.31 react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - styled-jsx: 5.1.6(@babel/core@7.26.10)(react@19.2.3) + styled-jsx: 5.1.6(@babel/core@7.28.5)(react@19.2.3) optionalDependencies: '@next/swc-darwin-arm64': 15.5.7 '@next/swc-darwin-x64': 15.5.7 @@ -17406,12 +17484,12 @@ snapshots: stubs@3.0.0: {} - styled-jsx@5.1.6(@babel/core@7.26.10)(react@19.2.3): + styled-jsx@5.1.6(@babel/core@7.28.5)(react@19.2.3): dependencies: client-only: 0.0.1 react: 19.2.3 optionalDependencies: - '@babel/core': 7.26.10 + '@babel/core': 7.28.5 stylelint-config-css-modules@4.5.1(stylelint@16.25.0(typescript@5.7.3)): dependencies: