import { ControllerBase, type ControllerHost } from '../../Controls/Controllers/Abstracts/ControllerBase';
import { type DragRef } from '../Core/DragRef';
import type { IDragRefConfig } from '../Core/Types';
/**
 * Lit Reactive Controller for drag functionality.
 * Wraps DragRef to integrate with Lit components.
 *
 * @public
 */
export declare class DragController<TData = unknown> extends ControllerBase {
    private _dragRef;
    private _config;
    private _initialized;
    private readonly _listeners;
    /**
     * Create a new DragController.
     *
     * @param host - Host component.
     * @param config - Configuration options.
     */
    constructor(host: ControllerHost, config?: IDragRefConfig);
    /**
     * Called when the host connects to the DOM.
     *
     * @public
     * @override
     */
    hostConnected(): void;
    /**
     * Called when the host disconnects from the DOM.
     *
     * @public
     * @override
     */
    hostDisconnected(): void;
    /**
     * Get the underlying DragRef.
     *
     * @public
     */
    get dragRef(): DragRef<TData> | null;
    /**
     * Get whether dragging is currently active.
     *
     * @public
     */
    get isDragging(): boolean;
    /**
     * Get/set disabled state.
     *
     * @public
     */
    get disabled(): boolean;
    set disabled(value: boolean);
    /**
     * Get/set lock axis.
     *
     * @public
     */
    get lockAxis(): 'x' | 'y' | null;
    set lockAxis(value: 'x' | 'y' | null);
    /**
     * Get/set associated data.
     *
     * @public
     */
    get data(): TData | undefined;
    set data(value: TData | undefined);
    /**
     * Update configuration.
     *
     * @param config - New configuration.
     *
     * @public
     */
    updateConfig(config: Partial<IDragRefConfig>): void;
    /**
     * Reset drag position.
     *
     * @public
     */
    reset(): void;
    /**
     * Specify drag handles.
     *
     * @param handles - Handle elements.
     *
     * @public
     */
    withHandles(handles: Array<HTMLElement>): void;
    /**
     * Specify boundary element.
     *
     * @param boundary - Boundary element or selector.
     *
     * @public
     */
    withBoundaryElement(boundary: string | HTMLElement | null): void;
    /**
     * Initialize the controller.
     *
     * @private
     */
    private _initialize;
    /**
     * Set up event forwarding from DragRef to host.
     *
     * @private
     */
    private _setupEventForwarding;
    /**
     * Add an event listener and track it for cleanup.
     *
     * @param type - Event type.
     * @param handler - Event handler.
     *
     * @private
     */
    private _addListener;
    /**
     * Cleanup resources.
     *
     * @private
     */
    private _cleanup;
}
//# sourceMappingURL=DragController.d.ts.map