import { NumberInput, BooleanInput } from '@angular/cdk/coercion';
import * as i0 from '@angular/core';
import { ElementRef, EventEmitter, QueryList } from '@angular/core';
import { Subject } from 'rxjs';

type NgxSplitterDirection = 'horizontal' | 'vertical';

/**
 * Created by rtr on 22.12.2016.
 */

/**
 * Directive representing a panel in a Splitter Component
 */
declare class NgxSplitAreaDirective {
    private elementRef;
    order?: number;
    protected _size: number | null;
    direction: NgxSplitterDirection;
    /**
     * Size in percent of the current area
     */
    set size(value: NumberInput);
    get size(): number | undefined;
    get sizeinPixels(): number;
    /**
     * Min size in percent of the current area
     */
    set minSizePixel(value: NumberInput);
    get minSizePixel(): number;
    protected get minWidth(): number | undefined;
    protected get minHeight(): number | undefined;
    private _minSizePixel;
    constructor(elementRef: ElementRef<HTMLElement>);
    static ɵfac: i0.ɵɵFactoryDeclaration<NgxSplitAreaDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<NgxSplitAreaDirective, "ngx-split-area", never, { "size": { "alias": "size"; "required": false; }; "minSizePixel": { "alias": "minSizePixel"; "required": false; }; }, {}, never, never, true, never>;
}

interface DraggingEvent {
    event: MouseEvent | TouchEvent;
    index: number;
}
/**
 * Splitter Component for Angular
 *
 * The splitter component allows to split horizontally or vertically, a container in N resizable part.
 */
declare class NgxSplitterComponent {
    /**
     * Event triggered when the user start to drag the cursor
     */
    readonly dragStart: EventEmitter<any>;
    /**
     * Event triggered during the cursor's drag
     */
    readonly dragProgress: EventEmitter<number>;
    /**
     * Event triggered when the user stop to drag the cursor
     */
    readonly dragEnd: EventEmitter<any>;
    /**
     * Direction of the split
     * Can be `horizontal` or `vertical`
     */
    set direction(direction: NgxSplitterDirection);
    get direction(): NgxSplitterDirection;
    /**
    * Size of the gutter in pixels
    * By default `10px`
    */
    set gutterSize(gutterSize: NumberInput);
    get gutterSize(): NumberInput;
    protected get styleFlexDirection(): string;
    protected set spliterAreas(spliterAreas: QueryList<NgxSplitAreaDirective>);
    protected _direction: NgxSplitterDirection;
    protected _disabled: boolean | null;
    protected startDragging$: Subject<DraggingEvent>;
    protected areas: readonly NgxSplitAreaDirective[];
    private _gutterSize;
    /** Retourne ou definit si le selecteur est desactivé. */
    set disabled(value: BooleanInput);
    get disabled(): BooleanInput;
    private elementRef;
    private changeDetectorRef;
    private destroyRef;
    constructor();
    private ensureDirections;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgxSplitterComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<NgxSplitterComponent, "ngx-splitter", never, { "direction": { "alias": "direction"; "required": false; }; "gutterSize": { "alias": "gutterSize"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "dragStart": "dragStart"; "dragProgress": "dragProgress"; "dragEnd": "dragEnd"; }, ["spliterAreas"], ["*"], true, never>;
}

export { NgxSplitAreaDirective, NgxSplitterComponent };
export type { NgxSplitterDirection };
