dockview-core
Version:
Zero dependency layout manager supporting tabs, groups, grids and splitviews for vanilla TypeScript
62 lines (61 loc) • 2.63 kB
TypeScript
import { CompositeDisposable, IDisposable } from '../../lifecycle';
import { PointerGhost } from './pointerGhost';
import { PointerDragEvent } from './types';
export interface PointerDragSourceOptions {
/** Populate transfer data; returned disposer clears it on drag end. */
getData: (event: PointerEvent) => IDisposable;
onDragStart?: (event: PointerEvent) => void;
onDragMove?: (event: PointerDragEvent) => void;
onDragEnd?: (event: PointerDragEvent, dropped: boolean) => void;
/** Cancels the drag at pointerdown time. */
isCancelled?: (event: PointerEvent) => boolean;
/** Default 5px. Touch pointers also need `touchInitiationDelay` to elapse. */
threshold?: number;
/**
* Touch-only long-press; movement past `pressTolerance` during the delay
* still arms the drag (any flick is drag intent). Default 250ms. May be
* a function so callers can vary it per gesture (e.g. require a longer
* hold for floating-group redock vs docked-group rearrange).
*/
touchInitiationDelay?: number | (() => number);
/** Default 8px. May be a function — see `touchInitiationDelay`. */
pressTolerance?: number | (() => number);
/** Default true: mouse defers to HTML5; pointer path handles touch / pen only. */
touchOnly?: boolean;
/** Follow-finger ghost factory; if omitted the user only sees drop overlays. */
createGhost?: (event: PointerEvent) => PointerGhost | undefined;
}
/**
* Pointer-event drag source. Waits for movement past `threshold` (and
* touch-only `touchInitiationDelay`) before promoting to a drag so taps
* pass through unaffected.
*/
export declare class PointerDragSource extends CompositeDisposable {
private readonly element;
private readonly options;
private _disabled;
private _touchOnly;
private _pendingPointerId;
private _pendingMoveListener;
private _pendingUpListener;
private _pendingCancelListener;
private _armTimer;
private _armed;
private _startX;
private _startY;
private _startEvent;
constructor(element: HTMLElement, options: PointerDragSourceOptions);
setDisabled(value: boolean): void;
/**
* `false` lets the pointer source also handle mouse pointers; used when
* `dndStrategy: 'pointer'` to drive every input type through this path.
*/
setTouchOnly(value: boolean): void;
private _shouldHandle;
private _onPointerDown;
/** For sibling gesture detectors (e.g. LongPressDetector) to dismiss a pending drag. */
cancelPending(): void;
private _cancelPending;
private _beginDrag;
dispose(): void;
}