import type { ReactNode, ReactElement, ButtonHTMLAttributes } from 'react' import type { DropdownMenuContentProps } from '@radix-ui/react-dropdown-menu' import type { SelectV2MenuRootPropsBase, SelectV2SkeletonProps, SelectV2Size, SelectV2Variant, } from '../SelectV2/selectV2.shared.types' import type { SelectV2MenuDimensions, SelectV2TriggerDimensions, SelectV2MenuPosition, SelectV2ErrorState, SelectV2SearchConfig, } from '../SingleSelectV2/singleSelectV2.types' export { SelectV2Alignment as MultiSelectV2Alignment, SelectV2Variant as MultiSelectV2Variant, SelectV2Size as MultiSelectV2Size, SelectV2Side as MultiSelectV2Side, } from '../SelectV2/selectV2.shared.types' export type { SelectV2SkeletonProps as MultiSelectV2SkeletonProps } export type { SelectV2MenuDimensions, SelectV2TriggerDimensions, SelectV2MenuPosition, SelectV2ErrorState, SelectV2SearchConfig, } // Moved to the leaf `multiSelectV2.base.types.ts` (see its header) and // re-exported here so existing consumers keep importing from this module. export { MultiSelectV2SelectionTagType } from './multiSelectV2.base.types' export type { MultiSelectV2ItemType, MultiSelectV2GroupType, FlattenedMultiSelectV2Item, MultiSelectV2PrimaryAction, MultiSelectV2SecondaryAction, MultiSelectBaseProps, } from './multiSelectV2.base.types' import type { MultiSelectV2GroupType, MultiSelectBaseProps, } from './multiSelectV2.base.types' export type MultiSelectV2MenuProps = { items: MultiSelectV2GroupType[] selected: string[] onSelect: (value: string) => void trigger: ReactElement menuDimensions?: SelectV2MenuDimensions disabled?: boolean search?: SelectV2SearchConfig enableSelectAll?: boolean selectAllText?: string onSelectAll?: ( selectAll: boolean, filteredItems: MultiSelectV2GroupType[] ) => void maxSelections?: number menuPosition?: SelectV2MenuPosition collisionBoundary?: DropdownMenuContentProps['collisionBoundary'] open?: boolean onOpenChange?: (open: boolean) => void showActionButtons?: boolean primaryAction?: { text: string onClick: (selectedValues: string[]) => void disabled?: boolean loading?: boolean } secondaryAction?: { text: string onClick: () => void disabled?: boolean loading?: boolean } enableVirtualization?: boolean virtualListItemHeight?: number virtualListOverscan?: number onEndReached?: () => void endReachedThreshold?: number hasMore?: boolean loadingComponent?: ReactNode skeleton?: SelectV2SkeletonProps size?: SelectV2Size variant?: SelectV2Variant allowCustomValue?: boolean customValueLabel?: string menuId?: string menuFooter?: ReactNode } export type MultiSelectV2MenuRootProps = SelectV2MenuRootPropsBase & { onInteractOutside?: (e: Event) => void onPointerDownOutside?: (e: Event) => void } export type MultiSelectV2Props = Omit< ButtonHTMLAttributes, 'style' | 'className' | 'onChange' | 'slot' > & MultiSelectBaseProps & { /** * Legacy per-item toggle callback. Prefer `onSelectionChange` for * the complete resulting selection. */ onChange?: (value: string | string[]) => void slot?: ReactNode search?: SelectV2SearchConfig customTrigger?: ReactElement usePanelOnMobile?: boolean triggerDimensions?: SelectV2TriggerDimensions menuDimensions?: SelectV2MenuDimensions menuPosition?: SelectV2MenuPosition enableVirtualization?: boolean virtualListItemHeight?: number virtualListOverscan?: number itemsToRender?: number loadingComponent?: ReactNode skeleton?: SelectV2SkeletonProps multiSelectGroupPosition?: 'center' | 'left' | 'right' menuFooter?: ReactNode }