import type { CSSProperties } from 'react'; import type { PickClassStyleType } from 'jamis-core'; import type { ALIGNMENT, DIRECTION } from './constants'; export type ItemSizeGetter = (index: number) => number; export type ItemSize = number | number[] | ItemSizeGetter; export { DIRECTION as ScrollDirection } from './constants'; export type ItemPosition = 'absolute' | 'sticky'; export interface ItemStyle { position: ItemPosition; top?: number; left: number; width: string | number; height?: number; marginTop?: number; marginLeft?: number; marginRight?: number; marginBottom?: number; zIndex?: number; } export interface SizeAndPosition { size: number; offset: number; } export interface ItemInfo { index: number; style: ItemStyle; } export interface RenderedRows { startIndex: number; stopIndex: number; } export interface VListProps extends PickClassStyleType { className?: string; estimatedItemSize?: number; height: CSSProperties['height']; itemCount: number; itemSize: number; overscanCount?: number; scrollOffset?: number; scrollToIndex?: number; scrollToAlignment?: ALIGNMENT; scrollDirection?: DIRECTION; stickyIndices?: number[]; style?: CSSProperties; width?: CSSProperties['width']; prefix?: React.ReactNode | null; onItemsRendered?({ startIndex, stopIndex }: RenderedRows): void; onScroll?(offset: number, event: UIEvent): void; renderItem(itemInfo: ItemInfo): React.ReactNode; }