react-movable
Version:
Drag and drop lists.
64 lines (63 loc) • 1.81 kB
TypeScript
/// <reference types="react" />
interface IVoiceover {
item: (position: number) => string;
lifted: (position: number) => string;
dropped: (from: number, to: number) => string;
moved: (position: number, up: boolean) => string;
canceled: (position: number) => string;
}
export interface IItemProps {
key?: number;
tabIndex?: number;
"aria-roledescription"?: string;
onKeyDown?: (e: React.KeyboardEvent) => void;
onWheel?: (e: React.WheelEvent) => void;
style?: React.CSSProperties;
ref?: React.RefObject<any>;
}
export interface RenderItemParams<Value> {
value: Value;
props: IItemProps;
index?: number;
isDragged: boolean;
isSelected: boolean;
isDisabled: boolean;
isOutOfBounds: boolean;
}
export interface RenderListParams {
children: React.ReactNode;
isDragged: boolean;
props: {
ref: React.RefObject<any>;
};
}
export interface BeforeDragParams {
elements: Element[];
index: number;
}
export interface AfterDragParams {
elements: Element[];
oldIndex: number;
newIndex: number;
}
export interface OnChangeMeta {
oldIndex: number;
newIndex: number;
targetRect: DOMRect;
}
export interface IProps<Value> {
disabled?: boolean;
beforeDrag?: (params: BeforeDragParams) => void;
afterDrag?: (params: AfterDragParams) => void;
renderItem: (params: RenderItemParams<Value>) => React.ReactNode;
renderList: (props: RenderListParams) => React.ReactNode;
values: Value[];
onChange: (meta: OnChangeMeta) => void;
transitionDuration: number;
removableByMove: boolean;
lockVertically: boolean;
voiceover: IVoiceover;
container?: Element | null;
}
export type TEvent = React.MouseEvent | React.TouchEvent | React.KeyboardEvent;
export {};