smooth-dnd
Version:
Drag and Drop library
158 lines (157 loc) • 4.65 kB
TypeScript
import { ContainerOptions } from './exportTypes';
export declare type Position = {
x: number;
y: number;
};
export declare type MousePosition = {
clientX: number;
clientY: number;
};
export interface Rect {
left: number;
right: number;
top: number;
bottom: number;
}
export declare type OffsetSize = {
offsetWidth: number;
offsetHeight: number;
};
export declare type Axis = 'x' | 'y';
export declare enum ScrollAxis {
x = "x",
y = "y",
xy = "xy"
}
export declare type Boundary = {
begin: number;
end: number;
};
export declare type TopLeft = {
top: number;
left: number;
};
export declare type Dictionary = {
[key: string]: any;
};
export declare type Orientation = 'horizontal' | 'vertical';
export declare type ElementX = HTMLElement & Dictionary;
export interface ScrolableInfo {
element: HTMLElement;
getRect: () => Rect;
descendants: ScrolableInfo[];
axis: Axis;
}
export interface DragInfo {
dragResult: DragResult;
draggableInfo: DraggableInfo;
}
export interface DragResult {
pos: number;
addedIndex: number | null;
removedIndex: number | null;
elementSize: number;
shadowBeginEnd: Boundary & {
beginAdjustment: number;
rect?: TopLeft;
dropArea?: Boundary;
};
containerBoxChanged?: boolean;
dropPlaceholderContainer?: HTMLDivElement;
}
export interface DraggableInfo {
invalidateShadow: boolean | null;
targetElement: HTMLElement | null;
payload?: any;
element?: HTMLElement;
size: OffsetSize;
container: IContainer;
elementIndex: number;
position: Position;
mousePosition: Position;
groupName?: string;
ghostParent: HTMLElement | null;
relevantContainers: IContainer[];
cancelDrop?: boolean;
}
export interface ContainerProps {
element: ElementX;
draggables: ElementX[];
getOptions: () => ContainerOptions;
layout: LayoutManager;
}
export interface IContainer {
element: HTMLElement;
draggables: HTMLElement[];
layout: LayoutManager;
isDragRelevant: (sourceContainer: IContainer, payload: any) => boolean;
dispose: (container: IContainer) => void;
prepareDrag: (container: IContainer, relevantContainer: IContainer[]) => void;
handleDrag: (draggableInfo: DraggableInfo) => DragResult | null;
handleDrop: (draggableInfo: DraggableInfo) => void;
getDragResult: () => DragResult | null;
getTranslateCalculator: (info: {
dragResult: DragResult;
}) => any;
onTranslated: () => void;
getOptions: () => ContainerOptions;
setDraggables: () => void;
fireRemoveElement: () => void;
getScrollMaxSpeed: () => number | undefined;
setOptions: (options: ContainerOptions, merge?: boolean) => void;
shouldUseTransformForGhost: () => boolean;
}
export interface GhostInfo {
topLeft: {
x: number;
y: number;
};
ghost: HTMLElement;
centerDelta: Position;
positionDelta: {
left: number;
top: number;
};
}
export interface LayoutManager {
getSize: (element: HTMLElement | OffsetSize) => number;
getContainerRectangles: () => {
rect: any;
visibleRect: any;
lastVisibleRect: any;
};
getBeginEndOfDOMRect: (rect: Rect) => {
begin: any;
end: any;
};
getBeginEndOfContainer: () => {
begin: any;
end: any;
};
getBeginEndOfContainerVisibleRect: () => {
begin: any;
end: any;
};
getBeginEnd: (element: HTMLElement) => {
begin: number;
end: number;
};
getAxisValue: (position: Position) => Axis;
setTranslation: (element: ElementX, translation: number) => void;
getTranslation: (element: ElementX) => number;
setVisibility: (element: ElementX, isVisible: boolean) => void;
isVisible: (element: ElementX) => boolean;
isInVisibleRect: (x: number, y: number) => boolean;
setSize: (element: HTMLElement | CSSStyleDeclaration, size: string) => void;
getTopLeftOfElementBegin: (begin: number) => {
top: number;
left: number;
};
getScrollSize: (element: HTMLElement) => number;
getScrollValue: (element: HTMLElement) => number;
setScrollValue: (element: HTMLElement, val: number) => void;
invalidate: () => void;
invalidateRects: () => void;
getPosition: (position: Position) => Rect;
setBegin: (style: CSSStyleDeclaration, value: string) => void;
}