UNPKG

dockview-core

Version:

Zero dependency layout manager supporting tabs, groups, grids and splitviews for vanilla TypeScript

61 lines (60 loc) 2.33 kB
import { Event } from '../../events'; import { CompositeDisposable, IDisposable } from '../../lifecycle'; import { PointerGhost } from './pointerGhost'; import { IPointerDropTargetHandle, PointerDragEvent } from './types'; export interface ActiveDrag { readonly pointerId: number; readonly startX: number; readonly startY: number; readonly source: HTMLElement; } /** * Singleton — only one pointer-driven drag active at a time. * * State is shared across every Dockview instance on the page. Targets * from instance B receive hit-tests from drags originating in instance A; * that's intentional for cross-instance drops since `LocalSelectionTransfer` * is also process-wide. The corollary is that every Tabs subscriber to * `onDragMove` fires for every pointer drag globally — each subscriber * hit-tests against its own DOM, so this is O(N) per pointermove where N * is the number of registered listeners across all instances. */ export declare class PointerDragController extends CompositeDisposable { private static _instance; static getInstance(): PointerDragController; private readonly _targets; /** Kept in sync with `_targets` so hit-testing is allocation-free. */ private readonly _targetByElement; private _active; private _currentTarget; private _dataDisposable; private _ghost; private _moveListener; private _upListener; private _cancelListener; private _iframeShield; private _onDragMoveCallback?; private _onDragEndCallback?; private readonly _onDragStart; readonly onDragStart: Event<PointerDragEvent>; private readonly _onDragMove; readonly onDragMove: Event<PointerDragEvent>; private readonly _onDragEnd; readonly onDragEnd: Event<PointerDragEvent>; private constructor(); get active(): ActiveDrag | undefined; registerTarget(target: IPointerDropTargetHandle): IDisposable; beginDrag(args: { pointerEvent: PointerEvent; source: HTMLElement; getData: () => IDisposable; ghost?: PointerGhost; onDragMove?: (e: PointerDragEvent) => void; onDragEnd?: (e: PointerDragEvent, dropped: boolean) => void; }): void; cancel(): void; private _findTargetUnder; private _handleMove; private _handleEnd; private _teardown; }