import type { FocusEvent, KeyboardEvent, RefObject } from "react"; import type { CollectionItem } from "./collectionTypes"; import type { SelectionStrategy, SingleSelectionStrategy } from "./selectionTypes"; export interface NavigationProps { cycleFocus?: boolean; defaultHighlightedIndex?: number; disableHighlightOnFocus?: boolean; focusOnHighlight?: boolean; focusVisible?: number; highlightedIndex?: number; indexPositions: CollectionItem[]; onHighlight?: (idx: number) => void; onKeyboardNavigation?: (evt: KeyboardEvent, idx: number) => void; restoreLastFocus?: boolean; } export interface NavigationHookProps extends NavigationProps { containerRef: RefObject; label?: string; selected?: Selection extends SingleSelectionStrategy ? CollectionItem | null : CollectionItem[]; } export interface KeyboardHookListProps { onBlur: (evt: FocusEvent) => void; onFocus: (evt: FocusEvent) => void; onKeyDown: (evt: KeyboardEvent) => void; onMouseDownCapture: () => void; onMouseMove: () => void; onMouseLeave: () => void; } export interface NavigationHookResult { focusVisible: number; controlledHighlighting: boolean; highlightedIndex: number; setHighlightedIndex: (idx: number) => void; keyboardNavigation: RefObject; listProps: KeyboardHookListProps; setIgnoreFocus: (ignoreFocus: boolean) => void; }