import { Base, Constructor } from './index';
import { Listeners } from '../utility/listeners';
export interface SortableFieldComponent {
    sortableUi: SortableUiComponent;
}
export interface SortableUiComponent {
    /**
     * Is the sortable component currently draggable?
     *
     * If a user is focused inside a draggable object don't allow the
     * item to be dragged.
     *
     * For instance, if there is an `input` inside of a draggable item
     * you do not want to allow it to be dragged while in the input
     * as that would mess up things like selecting text using the mouse.
     */
    canDrag: boolean;
    listeners: Listeners;
    handleDragEnter(evt: DragEvent): void;
    handleDragLeave(evt: DragEvent): void;
    handleDragOver(evt: DragEvent): void;
    handleDragStart(evt: DragEvent): void;
    handleDrop(evt: DragEvent): void;
    handleFocusIn(evt: FocusEvent): void;
    handleFocusOut(evt: FocusEvent): void;
}
export declare type SortableHandler = (startIndex: number, endIndex: number) => void;
export declare function SortableMixin<TBase extends Constructor>(Base: TBase): {
    new (...args: any[]): {
        _sortableUi?: SortableUiComponent | undefined;
        sortableUi: SortableUiComponent;
    };
} & TBase;
declare const SortableUi_base: {
    new (...args: any[]): {
        _uuid?: string | undefined;
        readonly uuid: string;
        readonly uid: string;
    };
} & typeof Base;
export declare class SortableUi extends SortableUi_base implements SortableUiComponent {
    private dragOrigin?;
    private dragFocused?;
    listeners: Listeners;
    constructor();
    private findDragTarget;
    get canDrag(): boolean;
    handleDragEnter(evt: DragEvent): void;
    handleDragLeave(evt: DragEvent): void;
    handleDragOver(evt: DragEvent): void;
    handleDragStart(evt: DragEvent): void;
    handleFocusIn(evt: FocusEvent): void;
    handleFocusOut(evt: FocusEvent): void;
    handleDrop(evt: DragEvent): void;
    get transferType(): string;
}
export {};
