import { useVirtualizer } from '@tanstack/react-virtual'; import { type RefObject } from 'react'; import { type FlatMultipleSelectBoxOption, type VirtualOptionTypes } from '../MultipleSelectBox.types'; export type UseVirtualizedMultipleSelectBoxOptionsParams = Record> = { /** * Enable virtualization for the option list */ enabled: boolean; /** * Reference to the scrollable parent element */ parentRef: RefObject; /** * Flat array of all options */ flatOptions: FlatMultipleSelectBoxOption[]; } & Partial; export type UseVirtualizedMultipleSelectBoxOptionsReturn = { /** * The virtualizer instance from @tanstack/react-virtual * Null when virtualization is disabled */ virtualizer: ReturnType> | null; /** * Array of virtual items to render (only visible + overscan items) */ virtualItems: ReturnType>['getVirtualItems'] extends () => infer R ? R : never; /** * Total height of all items combined */ totalSize: number; /** * Scroll to a specific option by index */ scrollToIndex: (index: number, options?: { align?: 'start' | 'center' | 'end' | 'auto'; behavior?: 'auto' | 'smooth'; }) => void; /** * Whether virtualization is currently enabled */ isVirtualized: boolean; }; /** * Custom hook for virtualizing large option lists in MultipleSelectBox using @tanstack/react-virtual. * Only renders visible items + overscan for improved performance. * * @param params - Virtualization configuration * * @returns Virtualizer instance and helper methods * * @example * ```tsx * const { virtualItems, totalSize, scrollToIndex, isVirtualized } = useVirtualizedMultipleSelectBoxOptions({ * enabled: true, * parentRef: optionPanelRef, * flatOptions, * estimateSize: () => 36, // or (index) => index < 10 ? 40 : 36 for dynamic sizing * overscan: 5, * }); * ``` */ export declare function useVirtualizedMultipleSelectBoxOptions = Record>({ enabled, parentRef, flatOptions, estimateSize, overscan, }: UseVirtualizedMultipleSelectBoxOptionsParams): UseVirtualizedMultipleSelectBoxOptionsReturn;