/** Live state of an in-progress drag — the pointer delta from where it started. */ export interface DragLive { id: string; dx: number; dy: number; } export interface PointerDragApi { /** Non-null only while a drag is active (past the threshold). Consumers render * live feedback (translate / resize) from `dx`/`dy`. */ live: DragLive | null; /** Ref for a draggable element — attaches a pointerdown listener tagged with * `id`. Stable per id, so it doesn't thrash listeners across renders. * * The grip's `cursor` and its `touch-action: none` (without which a touch * drag scrolls the page instead) belong to the CALLER's stylesheet: written * here they were inline declarations no consumer could beat. */ bind: (id: string) => (node: HTMLElement | null) => void; } /** * Self-contained pointer-event drag for time-axis primitives (calendar event * chips, gantt bar handles). Mirrors the kanban's proven approach — pointerdown * on the element, a movement threshold to distinguish taps, then window-level * pointermove/up — but with no floating clone and no column/card coupling. On * release, `onDrop` receives the final client pointer position plus the total * delta; the consumer maps that to a date. */ export declare function usePointerDrag(onDrop: (id: string, pointer: { x: number; y: number; }, delta: { dx: number; dy: number; }) => void): PointerDragApi;