import { SwappableEvents, SwappableItemData, SwappableOptions } from './types'; export default class Swappable { container: HTMLElement; itemsData: SwappableItemData[]; options: Required; private isPotentialDrag; private isDragging; private startEvent; private longPressTimeout; private draggedItem; private targetItem; private ghostElement; private dragRAF; private eventListeners; private ghostOffset; private containerRectCache; private itemHeightCache; constructor(containerOrSelector: string | HTMLElement, options?: SwappableOptions); private _initItems; private _getEventCoords; private _bindEvents; private _handleDragStart; private _initializeDrag; private _throttledDragMove; private _handleDragMove; private _handleDragEnd; private _cleanupDragState; private _createGhost; private _moveGhost; private _findAndHighlightTarget; _triggerEvent(event: keyof SwappableEvents, data: any): void; on(event: keyof SwappableEvents, callback: SwappableEvents[typeof event]): this; off(event: keyof SwappableEvents): this; layout(duration?: number): void; _internalSwap: (fromIndex: number, toIndex: number) => this; _internalAdd: (element: HTMLElement, index?: number) => SwappableItemData; _internalRemove: (target: HTMLElement | number) => SwappableItemData | null; swap: (fromIndex: number, toIndex: number) => this; add: (element: HTMLElement, index?: number) => SwappableItemData; remove: (target: HTMLElement | number) => SwappableItemData | null; enable: () => void; disable: () => void; detach: () => void; destroy: () => void; refresh: () => void; select: (target: number | HTMLElement) => SwappableItemData | null; getSize: () => number; }