import type { ComponentInterface, EventEmitter } from '../../stencil-public-runtime';
import type { HTMLStencilElement } from '../../utils/element-interface';
import type { ItemReorderEventDetail, ReorderMoveEventDetail, ReorderEndEventDetail } from './reorder-group-interface';
declare const enum ReorderGroupState {
    Idle = 0,
    Active = 1,
    Complete = 2
}
/**
 * @virtualProp {"ios" | "md"} mode - The mode determines the platform behaviors of the component.
 * @virtualProp {"ios" | "md" | "ionic"} theme - The theme determines the visual appearance of the component.
 */
export declare class ReorderGroup implements ComponentInterface {
    private selectedItemEl?;
    private selectedItemHeight;
    private lastToIndex;
    private cachedHeights;
    private scrollEl?;
    private gesture?;
    private scrollElTop;
    private scrollElBottom;
    private scrollElInitial;
    private containerTop;
    private containerBottom;
    state: ReorderGroupState;
    el: HTMLStencilElement;
    /**
     * If `true`, the reorder will be hidden.
     */
    disabled: boolean;
    disabledChanged(): void;
    /**
     * Event that needs to be listened to in order to complete the reorder action.
     * @deprecated Use `ionReorderEnd` instead. If you are accessing
     * `event.detail.from` or `event.detail.to` and relying on them
     * being different you should now add checks as they are always emitted
     * in `ionReorderEnd`, even when they are the same.
     */
    ionItemReorder: EventEmitter<ItemReorderEventDetail>;
    /**
     * Event that is emitted when the reorder gesture starts.
     */
    ionReorderStart: EventEmitter<void>;
    /**
     * Event that is emitted as the reorder gesture moves.
     */
    ionReorderMove: EventEmitter<ReorderMoveEventDetail>;
    /**
     * Event that is emitted when the reorder gesture ends.
     * The from and to properties are always available, regardless of
     * if the reorder gesture moved the item. If the item did not change
     * from its start position, the from and to properties will be the same.
     * Once the event has been emitted, the `complete()` method then needs
     * to be called in order to finalize the reorder action.
     */
    ionReorderEnd: EventEmitter<ReorderEndEventDetail>;
    connectedCallback(): Promise<void>;
    disconnectedCallback(): void;
    /**
     * Completes the reorder operation. Must be called by the `ionReorderEnd` event.
     *
     * If a list of items is passed, the list will be reordered and returned in the
     * proper order.
     *
     * If no parameters are passed or if `true` is passed in, the reorder will complete
     * and the item will remain in the position it was dragged to. If `false` is passed,
     * the reorder will complete and the item will bounce back to its original position.
     *
     * @param listOrReorder A list of items to be sorted and returned in the new order or a
     * boolean of whether or not the reorder should reposition the item.
     */
    complete(listOrReorder?: boolean | any[]): Promise<any>;
    private canStart;
    private onStart;
    private onMove;
    private onEnd;
    private completeReorder;
    private itemIndexForTop;
    /********* DOM WRITE ********* */
    private reorderMove;
    private autoscroll;
    render(): any;
}
export {};
