import FixedDistributor from "./distributors/fixed";
import ResizeItem from "./item";
import Sizer from "./sizer";
interface IClassNames {
    handle?: string;
    reverse?: string;
    vertical?: string;
    resizing?: string;
}
export interface IConfig {
    onResizeStart?(): void;
    onResizeStop?(): void;
    onResized?(size: number | null, id: string | null, element: HTMLElement): void;
    handler?: HTMLDivElement;
}
export default class Resizer<C extends IConfig, I extends ResizeItem<C> = ResizeItem<C>> {
    container: HTMLElement | null;
    private readonly distributorCtor;
    readonly config?: C | undefined;
    private classNames;
    constructor(container: HTMLElement | null, distributorCtor: {
        new (item: I): FixedDistributor<C, I>;
        createItem(resizeHandle: HTMLDivElement, resizer: Resizer<C, I>, sizer: Sizer, container?: HTMLElement): I;
        createSizer(containerElement: HTMLElement | null, vertical: boolean, reverse: boolean): Sizer;
    }, config?: C | undefined);
    setClassNames(classNames: IClassNames): void;
    attach(): void;
    detach(): void;
    /**
    Gives the distributor for a specific resize handle, as if you would have started
    to drag that handle. Can be used to manipulate the size of an item programmatically.
    @param {number} handleIndex the index of the resize handle in the container
    @return {FixedDistributor} a new distributor for the given handle
    */
    forHandleAt(handleIndex: number): FixedDistributor<C, I> | undefined;
    forHandleWithId(id: string): FixedDistributor<C, I> | undefined;
    isReverseResizeHandle(el: HTMLElement): boolean;
    isResizeHandle(el: HTMLElement): boolean;
    private onMouseDown;
    private onResize;
    getDistributors: () => FixedDistributor<C, I>[];
    private createSizerAndDistributor;
    private getResizeHandles;
}
export {};
