jamis
Version:
一种支持通过JSON配置方式生成页面的组件库
51 lines (50 loc) • 1.53 kB
TypeScript
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;
}