From 8db44cf3d16d7201a6862f8a4d4896fdefc0e5ff Mon Sep 17 00:00:00 2001 From: Michal Murawski Date: Thu, 2 Apr 2026 12:24:43 +0200 Subject: [PATCH] refactor(design-system): remove deprecated DsDropdownMenuLegacy and DsRadioGroupLegacy [AR-53409] Remove legacy implementations from DsDropdownMenu and DsRadioGroup, their ESLint deprecation rules and tests, legacy stories, legacy SCSS, and @radix-ui/react-dropdown-menu + @radix-ui/react-radio-group dependencies. Replacements: DsDropdownMenu (compound), DsRadioGroup (compound) Made-with: Cursor --- packages/design-system/package.json | 2 - .../ds-dropdown-menu-legacy.stories.tsx | 99 ---------- .../ds-dropdown-menu.module.scss | 18 -- .../ds-dropdown-menu/ds-dropdown-menu.tsx | 92 --------- .../ds-dropdown-menu.types.ts | 89 +-------- .../src/components/ds-dropdown-menu/index.ts | 2 +- .../ds-radio-group/ds-radio-group.tsx | 50 +---- .../ds-radio-group/ds-radio-group.types.ts | 62 ------- .../src/components/ds-radio-group/index.ts | 2 +- .../src/__tests__/no-deprecated.test.ts | 26 --- packages/eslint-plugin/src/index.ts | 12 -- pnpm-lock.yaml | 174 ------------------ 12 files changed, 4 insertions(+), 624 deletions(-) delete mode 100644 packages/design-system/src/components/ds-dropdown-menu/ds-dropdown-menu-legacy.stories.tsx diff --git a/packages/design-system/package.json b/packages/design-system/package.json index 0fa3dd7d2..3df828b36 100644 --- a/packages/design-system/package.json +++ b/packages/design-system/package.json @@ -60,9 +60,7 @@ "@radix-ui/react-checkbox": "^1.3.3", "@radix-ui/react-collapsible": "^1.1.12", "@radix-ui/react-dialog": "^1.1.15", - "@radix-ui/react-dropdown-menu": "^2.1.16", "@radix-ui/react-popover": "^1.1.15", - "@radix-ui/react-radio-group": "^1.3.8", "@radix-ui/react-slot": "^1.2.4", "@radix-ui/react-tooltip": "^1.2.8", "@radix-ui/react-visually-hidden": "^1.2.4", diff --git a/packages/design-system/src/components/ds-dropdown-menu/ds-dropdown-menu-legacy.stories.tsx b/packages/design-system/src/components/ds-dropdown-menu/ds-dropdown-menu-legacy.stories.tsx deleted file mode 100644 index f828be560..000000000 --- a/packages/design-system/src/components/ds-dropdown-menu/ds-dropdown-menu-legacy.stories.tsx +++ /dev/null @@ -1,99 +0,0 @@ -import type { Meta, StoryObj } from '@storybook/react-vite'; -import { expect, screen, userEvent, within } from 'storybook/test'; -import { DsDropdownMenuLegacy } from './ds-dropdown-menu'; -import './ds-dropdown-menu.stories.scss'; -import { DsIcon } from '../ds-icon'; - -const meta: Meta = { - title: 'Design System/DropdownMenuLegacy (Deprecated)', - component: DsDropdownMenuLegacy, - parameters: { - layout: 'centered', - }, - tags: ['deprecated'], - argTypes: { - children: { - control: 'text', - description: 'Content to display inside the component', - }, - contentGap: { - control: 'number', - description: 'The gap between the trigger and dropdown content in pixels', - }, - }, -}; - -export default meta; -type Story = StoryObj; - -export const Default: Story = { - parameters: { - docs: { - description: { - story: - 'Dropdown menu with a custom trigger styled to match the design. The menu items can include icons and can be disabled.', - }, - }, - }, - args: { - options: [ - { label: 'Edit', icon: 'edit', onClick: () => console.log('Edit clicked') }, - { label: 'Delete', icon: 'delete', onClick: () => console.log('Delete clicked') }, - { label: 'Share', icon: 'share', onClick: () => console.log('Share clicked') }, - { - label: 'Disabled Option', - icon: 'block', - disabled: true, - onClick: () => console.log('Disabled clicked'), - }, - ], - contentGap: 4, - }, - render: function Render(args) { - return ( - -
- Actions - -
-
- ); - }, - play: async ({ canvasElement }) => { - const canvas = within(canvasElement); - - // Check initial state - await expect(canvas.getByText('Actions')).toBeInTheDocument(); - - // Open dropdown menu - await userEvent.click(canvas.getByText('Actions')); - - // Check all menu items are present - await expect(screen.getByRole('menuitem', { name: /Edit/ })).toBeInTheDocument(); - await expect(screen.getByRole('menuitem', { name: /Delete/ })).toBeInTheDocument(); - await expect(screen.getByRole('menuitem', { name: /Share/ })).toBeInTheDocument(); - await expect(screen.getByRole('menuitem', { name: /Disabled Option/ })).toBeInTheDocument(); - - // Check disabled state - const disabledOption = screen.getByRole('menuitem', { name: /Disabled Option/ }); - await expect(disabledOption).toHaveAttribute('aria-disabled', 'true'); - - // Click an option - await userEvent.click(screen.getByRole('menuitem', { name: /Edit/ })); - - // Close dropdown with Escape key - await userEvent.keyboard('{Escape}'); - - // Open dropdown again - await userEvent.click(canvas.getByText('Actions')); - - // Check all options are shown again - await expect(screen.getByRole('menuitem', { name: /Edit/ })).toBeInTheDocument(); - await expect(screen.getByRole('menuitem', { name: /Delete/ })).toBeInTheDocument(); - await expect(screen.getByRole('menuitem', { name: /Share/ })).toBeInTheDocument(); - await expect(screen.getByRole('menuitem', { name: /Disabled Option/ })).toBeInTheDocument(); - - // Close dropdown with Escape key - await userEvent.keyboard('{Escape}'); - }, -}; diff --git a/packages/design-system/src/components/ds-dropdown-menu/ds-dropdown-menu.module.scss b/packages/design-system/src/components/ds-dropdown-menu/ds-dropdown-menu.module.scss index 5238b3ce0..9846ad024 100644 --- a/packages/design-system/src/components/ds-dropdown-menu/ds-dropdown-menu.module.scss +++ b/packages/design-system/src/components/ds-dropdown-menu/ds-dropdown-menu.module.scss @@ -1,4 +1,3 @@ -@use '../../styles/typography'; @use '../../styles/shared/dropdown'; .content { @@ -111,20 +110,3 @@ .triggerItemIcon { margin-left: auto; } - -/** Legacy classes */ -.contentLegacy { - @include dropdown.dropdown-content; - min-width: 200px; - width: var(--radix-select-trigger-width); -} - -.viewportLegacy { - @include dropdown.dropdown-viewport; -} - -.itemLegacy { - @include dropdown.dropdown-item; - @include typography.p-special; - @include typography.ellipsis; -} diff --git a/packages/design-system/src/components/ds-dropdown-menu/ds-dropdown-menu.tsx b/packages/design-system/src/components/ds-dropdown-menu/ds-dropdown-menu.tsx index de231c810..ebd76db8e 100644 --- a/packages/design-system/src/components/ds-dropdown-menu/ds-dropdown-menu.tsx +++ b/packages/design-system/src/components/ds-dropdown-menu/ds-dropdown-menu.tsx @@ -1,13 +1,11 @@ import type React from 'react'; import { createContext, Fragment, useContext, useState } from 'react'; -import * as DropdownMenu from '@radix-ui/react-dropdown-menu'; import { Menu } from '@ark-ui/react/menu'; import { Portal } from '@ark-ui/react/portal'; import classNames from 'classnames'; import styles from './ds-dropdown-menu.module.scss'; import { DsIcon } from '../ds-icon'; import { DsTypography } from '../ds-typography'; -import { DsTextInput } from '../ds-text-input'; import type { DsDropdownMenuActionsProps, DsDropdownMenuContentProps, @@ -17,7 +15,6 @@ import type { DsDropdownMenuItemGroupProps, DsDropdownMenuItemIndicatorProps, DsDropdownMenuItemProps, - DsDropdownMenuLegacyProps, DsDropdownMenuPositioning, DsDropdownMenuRootProps, DsDropdownMenuSeparatorProps, @@ -279,95 +276,6 @@ const TriggerItem: React.FC = ({ className, styl ); }; -/** - * DEPRECATED: Legacy DsDropdownMenu component with options array - * Use compound component pattern instead - * @deprecated - */ -/* c8 ignore start */ -export const DsDropdownMenuLegacy: React.FC = ({ - options, - children, - contentGap = 0, - className, - style, - align = 'center', - side = 'bottom', - disablePortal = false, - disableSearch = true, - selected, - onSelect, -}) => { - const [open, setOpen] = useState(false); - const [searchTerm, setSearchTerm] = useState(''); - - const Wrapper = disablePortal ? Fragment : DropdownMenu.Portal; - - const filteredOptions = disableSearch - ? options - : options.filter((option) => option.label.toLowerCase().includes(searchTerm.toLowerCase())); - - return ( - - {children} - - - {!disableSearch && ( - , - }} - onKeyDown={(e) => e.stopPropagation()} - /> - )} - {filteredOptions.map((option, i) => ( - { - e.stopPropagation(); - - if (!option.disabled) { - if (option.value) { - onSelect?.(option.value); - } - option.onClick?.(e); - setOpen(false); - } - }} - > - {option.icon && } - {option.label} - {option.value && selected === option.value && ( - - - - )} - - ))} - - - - ); -}; -/* c8 ignore stop */ - /** * Design system DsDropdownMenu component * diff --git a/packages/design-system/src/components/ds-dropdown-menu/ds-dropdown-menu.types.ts b/packages/design-system/src/components/ds-dropdown-menu/ds-dropdown-menu.types.ts index ccaa3d119..4c6f81b36 100644 --- a/packages/design-system/src/components/ds-dropdown-menu/ds-dropdown-menu.types.ts +++ b/packages/design-system/src/components/ds-dropdown-menu/ds-dropdown-menu.types.ts @@ -1,6 +1,5 @@ -import type { CSSProperties, MouseEvent, ReactNode } from 'react'; +import type { CSSProperties, ReactNode } from 'react'; import type { Menu } from '@ark-ui/react/menu'; -import type { IconType } from '../ds-icon'; /** * Base positioning type @@ -15,92 +14,6 @@ export type DsDropdownMenuPositioning = Pick< 'placement' | 'gutter' | 'sameWidth' | 'getAnchorRect' >; -/** - * DEPRECATED: Legacy dropdown menu option configuration - * Use compound component pattern instead - * @deprecated - */ -export interface DsDropdownMenuOptionLegacy { - /** - * Display label for the menu option - */ - label: string; - /** - * Optional icon to display - */ - icon?: IconType; - /** - * Whether this option is disabled - */ - disabled?: boolean; - /** - * Click handler for the option - */ - onClick?: (e: MouseEvent) => void; - /** - * Optional value for selection tracking - */ - value?: string; -} - -/** - * DEPRECATED: Legacy props for DsDropdownMenuLegacy component - * Use compound component pattern instead - * @deprecated - */ -export interface DsDropdownMenuLegacyProps { - /** - * The options to be displayed in the dropdown menu - */ - options: DsDropdownMenuOptionLegacy[]; - /** - * Optional children to be rendered inside the component - * Typically used for the trigger element - */ - children?: ReactNode | undefined; - /** - * The gap between the trigger and dropdown content in pixels - * @default 0 - */ - contentGap?: number; - /** - * Additional CSS class names - */ - className?: string; - /** - * Optional inline styles to apply to the component - */ - style?: CSSProperties; - /** - * The alignment of the dropdown content - * @default 'center' - */ - align?: 'start' | 'center' | 'end'; - /** - * The side of the dropdown content - * @default 'bottom' - */ - side?: 'top' | 'right' | 'bottom' | 'left'; - /** - * Whether to render in place instead of using portals - * @default false - */ - disablePortal?: boolean; - /** - * Whether to disable the search functionality - * @default false - */ - disableSearch?: boolean; - /** - * Currently selected value (for selection tracking) - */ - selected?: string; - /** - * Callback when an option with a value is selected - */ - onSelect?: (value: string) => void; -} - /** * Props for the DsDropdownMenu Root component */ diff --git a/packages/design-system/src/components/ds-dropdown-menu/index.ts b/packages/design-system/src/components/ds-dropdown-menu/index.ts index 3a6c15bb8..c12c6088a 100644 --- a/packages/design-system/src/components/ds-dropdown-menu/index.ts +++ b/packages/design-system/src/components/ds-dropdown-menu/index.ts @@ -1,2 +1,2 @@ -export { DsDropdownMenu, DsDropdownMenuLegacy } from './ds-dropdown-menu'; +export { DsDropdownMenu } from './ds-dropdown-menu'; export * from './ds-dropdown-menu.types'; diff --git a/packages/design-system/src/components/ds-radio-group/ds-radio-group.tsx b/packages/design-system/src/components/ds-radio-group/ds-radio-group.tsx index fd6c5e66a..23b17e2d6 100644 --- a/packages/design-system/src/components/ds-radio-group/ds-radio-group.tsx +++ b/packages/design-system/src/components/ds-radio-group/ds-radio-group.tsx @@ -1,13 +1,8 @@ import type React from 'react'; -import * as RadioGroupPrimitive from '@radix-ui/react-radio-group'; import { RadioGroup } from '@ark-ui/react/radio-group'; import classNames from 'classnames'; import styles from './ds-radio-group.module.scss'; -import type { - DsRadioGroupItemProps, - DsRadioGroupLegacyProps, - DsRadioGroupRootProps, -} from './ds-radio-group.types'; +import type { DsRadioGroupItemProps, DsRadioGroupRootProps } from './ds-radio-group.types'; /** * Root component - provides radio group context @@ -59,49 +54,6 @@ const Item: React.FC = ({ ); }; -/** - * DEPRECATED: Legacy DsRadioGroup component with options array - * Use compound component pattern instead: DsRadioGroup.Root + DsRadioGroup.Item - * @deprecated - */ -/* c8 ignore start */ -export const DsRadioGroupLegacy: React.FC = ({ - options, - value, - defaultValue, - onValueChange, - className, - ...props -}) => ( - - {options.map((option) => ( -
- -
- -
-
- -
- ))} -
-); -/* c8 ignore stop */ - /** * Design system RadioGroup component * diff --git a/packages/design-system/src/components/ds-radio-group/ds-radio-group.types.ts b/packages/design-system/src/components/ds-radio-group/ds-radio-group.types.ts index 0805de806..35188dcf6 100644 --- a/packages/design-system/src/components/ds-radio-group/ds-radio-group.types.ts +++ b/packages/design-system/src/components/ds-radio-group/ds-radio-group.types.ts @@ -1,5 +1,3 @@ -import type React from 'react'; -import type * as RadioGroupPrimitive from '@radix-ui/react-radio-group'; import { type RadioGroupItemProps, type RadioGroupRootProps } from '@ark-ui/react/radio-group'; /** @@ -31,63 +29,3 @@ export interface DsRadioGroupItemProps extends Pick< */ labelInfo?: string; } - -/** - * DEPRECATED: Legacy radio option configuration - * Use compound component pattern instead: - * @deprecated - */ -export interface DsRadioOptionLegacy { - /** - * Display label for the radio option - */ - label: string; - /** - * Value associated with this radio option - */ - value: ValueType; - /** - * Additional label info for the radio option - */ - labelInfo?: string; - /** - * Whether this radio option is disabled - */ - disabled?: boolean; -} - -/** - * DEPRECATED: Legacy props for DsRadioGroupLegacy component - * Use compound component pattern instead - * @deprecated - */ -export interface DsRadioGroupLegacyProps< - TOption extends DsRadioOptionLegacy = DsRadioOptionLegacy, -> extends React.ComponentPropsWithoutRef { - /** - * The radio group options - */ - options: TOption[]; - /** - * The selected value - */ - value?: TOption['value']; - /** - * The default selected value - */ - defaultValue?: TOption['value']; - /** - * Event handler called when the selected value changes - * - * @param value - */ - onValueChange?: (value: TOption['value']) => void; - /** - * Additional CSS class names - */ - className?: string; - /** - * Additional styles to apply to the component - */ - style?: React.CSSProperties; -} diff --git a/packages/design-system/src/components/ds-radio-group/index.ts b/packages/design-system/src/components/ds-radio-group/index.ts index e531d2179..44a3f31c4 100644 --- a/packages/design-system/src/components/ds-radio-group/index.ts +++ b/packages/design-system/src/components/ds-radio-group/index.ts @@ -1,2 +1,2 @@ -export { DsRadioGroup, DsRadioGroupLegacy } from './ds-radio-group'; +export { DsRadioGroup } from './ds-radio-group'; export * from './ds-radio-group.types'; diff --git a/packages/eslint-plugin/src/__tests__/no-deprecated.test.ts b/packages/eslint-plugin/src/__tests__/no-deprecated.test.ts index 9a051c04a..2afc83085 100644 --- a/packages/eslint-plugin/src/__tests__/no-deprecated.test.ts +++ b/packages/eslint-plugin/src/__tests__/no-deprecated.test.ts @@ -64,32 +64,6 @@ ruleTester.run('no-deprecated-ds-system-status', plugin.rules['no-deprecated-ds- ], }); -ruleTester.run( - 'no-deprecated-ds-dropdown-menu-legacy', - plugin.rules['no-deprecated-ds-dropdown-menu-legacy'], - { - valid: [''], - - invalid: [ - { - code: '', - errors: [{ message: `DsDropdownMenuLegacy is deprecated. Use DsDropdownMenu instead.` }], - }, - ], - }, -); - -ruleTester.run('no-deprecated-ds-radio-group-legacy', plugin.rules['no-deprecated-ds-radio-group-legacy'], { - valid: [''], - - invalid: [ - { - code: '', - errors: [{ message: `DsRadioGroupLegacy is deprecated. Use DsRadioGroup instead.` }], - }, - ], -}); - ruleTester.run('no-deprecated-ds-chip', plugin.rules['no-deprecated-ds-chip'], { valid: ['', ''], diff --git a/packages/eslint-plugin/src/index.ts b/packages/eslint-plugin/src/index.ts index ac9fe3e4c..b3a0fa3b5 100644 --- a/packages/eslint-plugin/src/index.ts +++ b/packages/eslint-plugin/src/index.ts @@ -30,18 +30,6 @@ const eslintPlugin = createPlugin( message: `DsSystemStatus is deprecated. Use DsStatusBadge instead.`, }, - { - name: 'no-deprecated-ds-dropdown-menu-legacy', - selector: JSXElement('DsDropdownMenuLegacy'), - message: `DsDropdownMenuLegacy is deprecated. Use DsDropdownMenu instead.`, - }, - - { - name: 'no-deprecated-ds-radio-group-legacy', - selector: JSXElement('DsRadioGroupLegacy'), - message: `DsRadioGroupLegacy is deprecated. Use DsRadioGroup instead.`, - }, - { name: 'no-deprecated-ds-chip', selector: JSXElement('DsChip'), diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6acc91e2b..41d4fe6c2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -171,15 +171,9 @@ importers: '@radix-ui/react-dialog': specifier: ^1.1.15 version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-dropdown-menu': - specifier: ^2.1.16 - version: 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-popover': specifier: ^1.1.15 version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-radio-group': - specifier: ^1.3.8 - version: 1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-slot': specifier: ^1.2.4 version: 1.2.4(@types/react@19.2.14)(react@19.2.4) @@ -1882,19 +1876,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-collection@1.1.7': - resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-compose-refs@1.1.2': resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} peerDependencies: @@ -1926,15 +1907,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-direction@1.1.1': - resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-dismissable-layer@1.1.11': resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} peerDependencies: @@ -1948,19 +1920,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-dropdown-menu@2.1.16': - resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-focus-guards@1.1.3': resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} peerDependencies: @@ -1992,19 +1951,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-menu@2.1.16': - resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-popover@1.1.15': resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} peerDependencies: @@ -2083,32 +2029,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-radio-group@1.3.8': - resolution: {integrity: sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-roving-focus@1.1.11': - resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-slot@1.2.3': resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} peerDependencies: @@ -7398,18 +7318,6 @@ snapshots: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 @@ -7444,12 +7352,6 @@ snapshots: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-direction@1.1.1(@types/react@19.2.14)(react@19.2.4)': - dependencies: - react: 19.2.4 - optionalDependencies: - '@types/react': 19.2.14 - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 @@ -7463,21 +7365,6 @@ snapshots: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 @@ -7502,32 +7389,6 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 - '@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - aria-hidden: 1.2.6 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 @@ -7607,41 +7468,6 @@ snapshots: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.4)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)