import type { Direction, DragAxis, IDragRefConfig, IPoint } from './Types';
/**
 * Reference to a draggable element.
 * Core class for drag functionality - framework agnostic.
 *
 * @public
 */
export declare class DragRef<TData = unknown> {
    private readonly _element;
    private _rootElement;
    private readonly _config;
    private readonly _state;
    private readonly _registry;
    private _dropContainer;
    private _boundaryElement;
    private readonly _listeners;
    private _dragStartTimer;
    private _data;
    private _handles;
    private _pointerDownListener;
    private readonly _nextDropListRef;
    private _parentDragRef;
    /**
     * @param element - Element to make draggable.
     * @param config - Configuration options.
     *
     * @public
     */
    constructor(element: HTMLElement, config?: IDragRefConfig);
    /**
     * The native element.
     *
     * @public
     */
    get element(): HTMLElement;
    /**
     * Whether dragging is currently active.
     *
     * @public
     */
    get isDragging(): boolean;
    /**
     * Whether dragging is disabled.
     *
     * @public
     */
    get disabled(): boolean;
    set disabled(value: boolean);
    /**
     * Lock axis.
     *
     * @public
     */
    get lockAxis(): DragAxis;
    set lockAxis(value: DragAxis);
    /**
     * Arbitrary data attached to this drag item.
     *
     * @public
     */
    get data(): TData | undefined;
    set data(value: TData | undefined);
    /**
     * Scale factor.
     *
     * @public
     */
    get scale(): number;
    set scale(value: number);
    /**
     * Reset drag item to its original position.
     *
     * @public
     */
    reset(): void;
    /**
     * Reset drag item to boundary edge if outside boundary.
     *
     * @public
     */
    resetToBoundary(): void;
    /**
     * Get free drag position (for standalone dragging).
     *
     * @returns Current position.
     *
     * @public
     */
    getFreeDragPosition(): Readonly<IPoint>;
    /**
     * Set free drag position programmatically.
     *
     * @param value - Position to set.
     *
     * @public
     */
    setFreeDragPosition(value: IPoint): void;
    /**
     * Get placeholder element.
     *
     * @returns Placeholder element or null.
     *
     * @public
     */
    getPlaceholderElement(): HTMLElement | null;
    /**
     * Get root element.
     *
     * @returns Root element.
     *
     * @public
     */
    getRootElement(): HTMLElement;
    /**
     * Get visible element (returns preview during drag, root element otherwise).
     *
     * @returns Currently visible element.
     *
     * @public
     */
    getVisibleElement(): HTMLElement;
    /**
     * Add a drag handle.
     *
     * @param handle - Handle element.
     *
     * @public
     */
    withHandles(handles: Array<HTMLElement>): this;
    /**
     * Update root element.
     *
     * @param element - New root element.
     *
     * @public
     */
    withRootElement(element: HTMLElement): this;
    /**
     * Update boundary element.
     *
     * @param boundary - Boundary element or selector.
     *
     * @public
     */
    withBoundaryElement(boundary: string | HTMLElement | null): this;
    /**
     * Set preview container element.
     *
     * @param container - Container for preview element.
     *
     * @public
     */
    withPreviewContainer(container: HTMLElement | null): this;
    /**
     * Disable a specific drag handle.
     *
     * @param handle - Handle element to disable.
     *
     * @public
     */
    disableHandle(handle: HTMLElement): void;
    /**
     * Enable a specific drag handle.
     *
     * @param handle - Handle element to enable.
     *
     * @public
     */
    enableHandle(handle: HTMLElement): void;
    /**
     * Set layout direction (ltr/rtl).
     *
     * @param direction - Layout direction.
     *
     * @public
     */
    withDirection(direction: Direction): this;
    /**
     * Set parent DragRef (for nested draggables).
     *
     * @param parent - Parent DragRef.
     *
     * @public
     */
    withParent(parent: DragRef | null): this;
    /**
     * Set custom preview template.
     *
     * @param template - Preview template element or factory function.
     *
     * @public
     */
    withPreviewTemplate(template: HTMLElement | (() => HTMLElement) | null): this;
    /**
     * Set custom placeholder template.
     *
     * @param template - Placeholder template element or factory function.
     *
     * @public
     */
    withPlaceholderTemplate(template: HTMLElement | (() => HTMLElement) | null): this;
    /**
     * Dispose of this drag ref.
     *
     * @public
     */
    dispose(): void;
    /**
     * Attach pointer event listeners.
     *
     * @private
     */
    private attachPointerListeners;
    /**
     * Detach pointer event listeners.
     *
     * @private
     */
    private detachPointerListeners;
    /**
     * Reattach pointer listeners (after handle changes).
     *
     * @private
     */
    private reattachPointerListeners;
    /**
     * Handle pointerdown event.
     *
     * @param event - Pointer event.
     *
     * @private
     */
    private onPointerDown;
    /**
     * Initialize drag sequence.
     *
     * @param event - Trigger event.
     *
     * @private
     */
    private initializeDragSequence;
    /**
     * Start drag sequence (after start event).
     *
     * @param event - Trigger event.
     *
     * @private
     */
    private startDragSequence;
    /**
     * Handle pointermove during drag.
     *
     * @param event - Pointer event.
     *
     * @private
     */
    private onPointerMove;
    /**
     * Handle pointerup (end drag).
     *
     * @param event - Pointer event.
     *
     * @private
     */
    private onPointerUp;
    /**
     * Handle lost pointer capture.
     *
     * @private
     */
    private onLostPointerCapture;
    /**
     * Calculate target position based on pointer.
     *
     * @param pointerPosition - Current pointer position.
     * @returns Target position for element (transform delta from initial position).
     *
     * @private
     */
    private calculateTargetPosition;
    /**
     * Apply all constraints to a position.
     *
     * @param position - Unconstrained position.
     * @returns Constrained position.
     *
     * @private
     */
    private applyConstraints;
    /**
     * Update drag position (transform).
     *
     * @param position - New position.
     *
     * @private
     */
    private updateDragPosition;
    /**
     * Update pointer direction.
     *
     * @param currentPosition - Current pointer position.
     *
     * @private
     */
    private updatePointerDirection;
    /**
     * Create preview element (ghost).
     *
     * @private
     */
    private createPreviewElement;
    /**
     * Get container for preview element.
     *
     * @returns Container element.
     *
     * @private
     */
    private getPreviewContainer;
    /**
     * Create placeholder element.
     *
     * @private
     */
    private createPlaceholderElement;
    /**
     * Remove preview element.
     *
     * @private
     */
    private removePreviewElement;
    /**
     * Remove placeholder element.
     *
     * @private
     */
    private removePlaceholderElement;
    /**
     * Check if pointer intersects with a drop list.
     *
     * @param pointerPosition - Current pointer position.
     *
     * @private
     */
    private checkDropListIntersection;
    /**
     * Enter a drop list.
     *
     * @param dropList - Drop list to enter.
     * @param pointerPosition - Pointer position.
     *
     * @private
     */
    private enterDropList;
    /**
     * Exit a drop list.
     *
     * @param dropList - Drop list to exit.
     *
     * @private
     */
    private exitDropList;
    /**
     * End drag sequence.
     *
     * @param dropped - Whether item was dropped (true) or cancelled (false).
     *
     * @private
     */
    private endDragSequence;
    /**
     * Animate preview back to placeholder position.
     *
     * @param callback - Callback when animation completes.
     *
     * @private
     */
    private animatePreviewToPlaceholder;
    /**
     * Cleanup drag artifacts.
     *
     * @private
     */
    private cleanupDragArtifacts;
    /**
     * Finalize drag sequence.
     *
     * @private
     */
    private finalizeDragSequence;
    /**
     * Attach drag event listeners.
     *
     * @private
     */
    private attachDragListeners;
    /**
     * Detach drag event listeners.
     *
     * @private
     */
    private detachDragListeners;
    /**
     * Create base event detail.
     *
     * @param event - Native event (optional).
     * @returns Base event detail.
     *
     * @private
     */
    private createBaseEventDetail;
    /**
     * Create drag start event.
     *
     * @param event - Native event.
     * @returns Drag start event.
     *
     * @private
     */
    private createDragStartEvent;
    /**
     * Create drag move event.
     *
     * @param event - Native event.
     * @returns Drag move event.
     *
     * @private
     */
    private createDragMoveEvent;
    /**
     * Create drag release event.
     *
     * @returns Drag release event.
     *
     * @private
     */
    private createDragReleaseEvent;
    /**
     * Create drag end event.
     *
     * @param dropped - Whether item was dropped.
     * @returns Drag end event.
     *
     * @private
     */
    private createDragEndEvent;
    /**
     * Create drag enter event.
     *
     * @param container - Container being entered.
     * @returns Drag enter event.
     *
     * @private
     */
    private createDragEnterEvent;
    /**
     * Create drag exit event.
     *
     * @param container - Container being exited.
     * @returns Drag exit event.
     *
     * @private
     */
    private createDragExitEvent;
    /**
     * Apply default configuration values.
     *
     * @param config - User config.
     * @returns Full config with defaults.
     *
     * @private
     */
    private applyConfigDefaults;
    /**
     * Get start delay based on pointer type.
     *
     * @param event - Pointer event.
     * @returns Delay in ms.
     *
     * @private
     */
    private getStartDelay;
}
/**
 * Create a new DragRef instance.
 *
 * @param element - Element to make draggable.
 * @param config - Configuration options.
 * @returns DragRef instance.
 *
 * @public
 */
export declare function createDragRef<TData = unknown>(element: HTMLElement, config?: IDragRefConfig): DragRef<TData>;
//# sourceMappingURL=DragRef.d.ts.map