/** * Generic draggable utility based on Pointer Events API. * Zero dependencies — replaces ad-hoc pointer event loops across the library. * * Supports: mouse, touch, pen. Uses pointer capture for reliable tracking. * * @example Svelte attachment for horizontal reordering * ```svelte * * *
{ element.style.opacity = '0.4'; }, * onDragMove: ({ clientX, clientY }) => { updateDropIndicator(clientX, clientY); }, * onDragEnd: ({ element }) => { element.style.opacity = ''; finalizeReorder(); }, * })}>
* ``` */ import type { Attachment } from 'svelte/attachments'; export interface DragStartEvent { /** The element being dragged */ element: HTMLElement; /** Initial pointer X */ startX: number; /** Initial pointer Y */ startY: number; /** Current pointer X */ clientX: number; /** Current pointer Y */ clientY: number; /** Original PointerEvent */ originalEvent: PointerEvent; } export interface DragMoveEvent { element: HTMLElement; startX: number; startY: number; clientX: number; clientY: number; /** Delta from start X */ deltaX: number; /** Delta from start Y */ deltaY: number; originalEvent: PointerEvent; } export interface DragEndEvent { element: HTMLElement; startX: number; startY: number; clientX: number; clientY: number; deltaX: number; deltaY: number; /** Whether the drag exceeded the threshold (true = real drag, false = cancelled/tap) */ didDrag: boolean; originalEvent: PointerEvent; } export interface DraggableOptions { /** * Pixel distance before drag activates (prevents accidental drags on click). * @default 5 */ threshold?: number; /** * Constrain drag to an axis. `'both'` allows free movement. * @default 'both' */ axis?: 'horizontal' | 'vertical' | 'both'; /** * Whether dragging is disabled. * @default false */ disabled?: boolean; /** * Cursor to show during drag. * @default 'grabbing' */ cursor?: string; /** * Called once when drag threshold is exceeded. */ onDragStart?: (event: DragStartEvent) => void; /** * Called on every pointer move during an active drag. */ onDragMove?: (event: DragMoveEvent) => void; /** * Called when the pointer is released or cancelled. */ onDragEnd?: (event: DragEndEvent) => void; } /** * Svelte attachment that makes an element draggable via Pointer Events. * * Usage: `
` */ export declare function createDraggable(opts: DraggableOptions): Attachment; /** * Finds the closest element with a specific data attribute under the pointer. * Useful for identifying drop targets during drag. */ export declare function findDropTarget(clientX: number, clientY: number, attribute: string): HTMLElement | null;