import React, { PureComponent } from 'react'; import memoize from 'memoizee'; import { FixedSizeList as List, type ListOnItemsRenderedProps, type ListOnScrollProps } from 'react-window'; import { type Size } from 'react-virtualized-auto-sizer'; import { type Range } from '@deephaven/utils'; import './ItemList.scss'; export interface DefaultListItem { value?: string; displayValue?: string; } export type RenderItemProps = { item: T; itemIndex: number; isFocused: boolean; isSelected: boolean; style: React.CSSProperties; }; export type RenderItemFn = (props: RenderItemProps) => React.ReactNode; export type ItemDragEventHandler = (index: number, event: React.DragEvent) => void; export type ItemListProps = { itemCount: number; rowHeight: number; offset: number; items: readonly T[]; isDeselectOnClick: boolean; isDoubleClickSelect: boolean; isDragSelect: boolean; isMultiSelect: boolean; isStickyBottom: boolean; onFocusChange: (index: number | null) => void; onSelect: (index: number, event: React.SyntheticEvent) => void; onSelectionChange: (ranges: readonly Range[]) => void; onViewportChange: (topRow: number, bottomRow: number) => void; overscanCount: number; selectedRanges: readonly Range[]; disableSelect: boolean; renderItem: RenderItemFn; focusSelector: string; 'data-testid'?: string; }; type ItemListState = { focusIndex: number | null; mouseDownIndex: number | null; selectedRanges: readonly Range[]; overscanStartIndex: number; height: number | null; isDragging: boolean; isStuckToBottom: boolean; scrollOffset: number | null; mouseX: number | null; mouseY: number | null; }; /** * Show items in a long scrollable list. * Can be navigated via keyboard or mouse. */ export declare class ItemList extends PureComponent, ItemListState> { static CACHE_SIZE: number; static DEFAULT_ROW_HEIGHT: number; static DEFAULT_OVERSCAN: number; static defaultProps: { offset: number; items: never[]; rowHeight: number; isDeselectOnClick: boolean; isDoubleClickSelect: boolean; isDragSelect: boolean; isMultiSelect: boolean; isStickyBottom: boolean; disableSelect: boolean; onFocusChange(): void; onSelect(): void; onSelectionChange(): void; onViewportChange(): void; overscanCount: number; renderItem: typeof ItemList.renderItem; selectedRanges: never[]; focusSelector: string; 'data-testid': undefined; }; static renderItem

({ item, }: RenderItemProps

): JSX.Element; constructor(props: ItemListProps); componentDidUpdate(prevProps: ItemListProps, prevState: ItemListState): void; componentWillUnmount(): void; list: React.RefObject; listContainer: React.RefObject; getItemSelected: ((index: number, selectedRanges: readonly Range[]) => boolean) & memoize.Memoized<(index: number, selectedRanges: readonly Range[]) => boolean>; getCachedItem: ((itemIndex: number, key: number, item: T, isFocused: boolean, isSelected: boolean, renderItem: RenderItemFn, style: React.CSSProperties, disableSelect: boolean) => import("react/jsx-runtime").JSX.Element) & memoize.Memoized<(itemIndex: number, key: number, item: T, isFocused: boolean, isSelected: boolean, renderItem: RenderItemFn, style: React.CSSProperties, disableSelect: boolean) => import("react/jsx-runtime").JSX.Element>; getOuterElement: ((onKeyDown: React.KeyboardEventHandler) => React.ForwardRefExoticComponent>) & memoize.Memoized<(onKeyDown: React.KeyboardEventHandler) => React.ForwardRefExoticComponent>>; getInnerElement: (() => React.ForwardRefExoticComponent>) & memoize.Memoized<() => React.ForwardRefExoticComponent>>; getItemData: ((items: readonly T[], selectedRanges: readonly Range[], renderItem: RenderItemFn) => { items: readonly T[]; selectedRanges: readonly Range[]; renderItem: RenderItemFn; }) & memoize.Memoized<(items: readonly T[], selectedRanges: readonly Range[], renderItem: RenderItemFn) => { items: readonly T[]; selectedRanges: readonly Range[]; renderItem: RenderItemFn; }>; focus(): void; restoreScrollPosition(): void; getElement(itemIndex: number): Element | null; focusItem(itemIndex: number): void; scrollToItem(itemIndex: number): void; handleItemContextMenu(itemIndex: number, e: React.MouseEvent): void; handleItemDoubleClick(itemIndex: number, e: React.MouseEvent): void; handleItemMouseDown(index: number, e: React.MouseEvent): void; handleItemBlur(itemIndex: number, e: React.FocusEvent): void; handleItemFocus(itemIndex: number, e: React.FocusEvent): void; handleItemMouseMove(itemIndex: number, e: React.MouseEvent): void; handleItemMouseUp(index: number, e: React.MouseEvent): void; handleItemsRendered({ overscanStartIndex }: ListOnItemsRenderedProps): void; handleResize({ height }: Size): void; handleMouseLeave(): void; handleWindowMouseUp(): void; handleKeyDown(e: React.KeyboardEvent): void; handleScroll({ scrollUpdateWasRequested, scrollOffset, }: ListOnScrollProps): void; resetMouseState(): void; scrollToBottom(): void; scrollIntoView(itemIndex: number): void; /** * @param index The index to toggle selection for * @param isShiftDown True if the shift modifier key is down * @param isModifierDown True if the meta modifier key is down * @param isDeselectable True if item should be deselected if already selected */ toggleSelect(index: number, isShiftDown: boolean, isModifierDown: boolean, isDeselectable?: boolean): void; deselectAll(): void; deselectItem(index: number): void; deselectRange(range: Range): void; selectItem(index: number): void; selectRange(range: Range): void; setSelectedRanges(selectedRanges: readonly Range[]): void; sendViewportUpdate(): void; isListAtBottom({ scrollOffset, height, }?: Pick): boolean; renderInnerElement({ index: itemIndex, style, }: { index: number; style: React.CSSProperties; }): React.ReactElement | null; render(): JSX.Element; } export default ItemList; //# sourceMappingURL=ItemList.d.ts.map