UNPKG

@snapdrag/core

Version:

Core logic for Snapdrag drag and drop library

135 lines (130 loc) 4.8 kB
type PointerEventHandler = (event: PointerEvent) => void; type Destructor = () => void; type DropTargetsMap = Map<HTMLElement, IDroppable>; type DragStarHandlerArgs = { event: PointerEvent; dragElement: HTMLElement; dragStartEvent: PointerEvent; data?: any; }; type DragHandlerArgs = { event: PointerEvent; dragElement: HTMLElement; dragStartEvent: PointerEvent; dropTargets: DropTargetsMap; data?: any; }; type PluginType = { onDragStart?: (args: DragStarHandlerArgs) => boolean | undefined | void; onDragMove?: (args: DragHandlerArgs) => void; onDragEnd?: (args: DragHandlerArgs) => void; cleanup?: () => void; }; type PointerConfig = { pointerDown?: (element: HTMLElement, handler: PointerEventHandler) => Destructor; pointerMove?: (handler: PointerEventHandler) => Destructor; pointerUp?: (handler: PointerEventHandler) => Destructor; pointerCancel?: (handler: PointerEventHandler) => Destructor; }; type DraggableDataFactory = (args: { dragElement: HTMLElement; dragStartEvent: PointerEvent; }) => any; type Kind = string | symbol; type DraggableConfig = { disabled?: boolean; kind: Kind; data: any | DraggableDataFactory; shouldDrag?: (args: DragStarHandlerArgs) => boolean; onDragStart?: (args: DragStarHandlerArgs) => void; onDragEnd?: (args: DragHandlerArgs) => void; onDragMove?: (args: DragHandlerArgs) => void; pointerConfig?: PointerConfig; plugins?: Array<PluginType>; }; type DropHandlerArgs = { event: PointerEvent; sourceType: string | symbol; sourceData: any; dragStartEvent: PointerEvent; dragElement: HTMLElement; dropTarget: IDroppable; dropTargets: DropTargetsMap; dropElement: HTMLElement; }; type DropHandler = (args: DropHandlerArgs) => void; type DroppableAccepts = (args: { kind: string | symbol; data: any; element: HTMLElement; event: PointerEvent; }) => boolean; type DroppableConfig = { disabled?: boolean; accepts: Kind | Kind[] | DroppableAccepts; data?: any; onDragIn?: DropHandler; onDragOut?: DropHandler; onDragMove?: DropHandler; onDrop?: DropHandler; }; declare class IDraggable { constructor(config: DraggableConfig); setConfig: (config: DraggableConfig) => void; listen: (element: HTMLElement, setAttribute?: boolean) => Destructor; } declare class IDroppable { constructor(config: DroppableConfig); setConfig: (config: DroppableConfig) => void; listen: (element: HTMLElement) => Destructor; readonly config: DroppableConfig; readonly data: any; readonly disabled: boolean; } declare class Draggable implements IDraggable { config: DraggableConfig; private _dragElement; private _dragStartTriggered; private _dragStartEvent; private _newDropTargets; private _currentDropTargets; private _pointerEventsDestructor; private _pluginsSnapshot; private _currentData; private _disabledDropTargets; private _acceptedDropTargets; constructor(config: DraggableConfig); private _getDropTargets; private _handleDragStart; private _handleDragMove; private _handleDragSourceEnd; private _getDropHandlerArgs; private _handleTargetDragInOrMove; private _handleTargetDragOut; private _pointerDownHandler; private _populateDisabledDropTargets; private _pointerMoveHandler; private _pointerUpHandler; private _pointerCancelHandler; private _cleanup; private _safePointerMoveHandler; private _safePointerUpHandler; private _safePointerCancelHandler; private _safePointerDownHandler; setConfig: (config: DraggableConfig) => void; listen: (element: HTMLElement, setAttribute?: boolean) => Destructor; } declare function createDraggable<T extends DraggableConfig>(config: T): Draggable; declare class Droppable implements IDroppable { config: DroppableConfig; constructor(config: DroppableConfig); setConfig: (config: DroppableConfig) => void; listen: (element: HTMLElement) => Destructor; get data(): any; get disabled(): boolean; } declare function createDroppable(config: DroppableConfig): IDroppable; declare const DRAGGABLE_ATTRIBUTE = "data-draggable"; declare const DROPPABLE_ATTRIBUTE = "data-droppable"; declare const DROPPABLE_FORCE_ATTRIBUTE = "data-droppable-force"; export { DRAGGABLE_ATTRIBUTE, DROPPABLE_ATTRIBUTE, DROPPABLE_FORCE_ATTRIBUTE, type Destructor, type DragStarHandlerArgs, Draggable, type DraggableConfig, type DraggableDataFactory, type DropHandler, type DropHandlerArgs, type DropTargetsMap, Droppable, type DroppableAccepts, type DroppableConfig, IDraggable, IDroppable, type Kind, type PluginType, type PointerConfig, type PointerEventHandler, createDraggable, createDroppable };