import { AXEvent, MXValueComponent, AXOrientation } from '@acorex/cdk/common';
import * as polytype from 'polytype';
import * as _angular_core from '@angular/core';
import * as i1 from '@angular/common';

interface AXRangeStartEvent extends AXEvent {
    data: any;
}
type AXRangeSliderValue = number | [number, number] | undefined;
type AXRangeSliderMode = 'single' | 'dual';
type AXRangeSliderSnapMode = 'both' | 'start' | 'end';
type AXRangeSliderTooltipMode = 'start' | 'end';
type AXRangeSliderHandler = 'first' | 'second';

declare const AXRangeSliderComponent_base: polytype.Polytype.ClusteredConstructor<[{
    new (): MXValueComponent<AXRangeSliderValue>;
    ɵfac: _angular_core.ɵɵFactoryDeclaration<MXValueComponent<any>, never>;
    ɵprov: _angular_core.ɵɵInjectableDeclaration<MXValueComponent<any>>;
}]>;
/**
 * @description
 * A range slider for selecting a range of values, supporting both single and dual modes.
 * The slider offers step, snap, and tooltip configurations.
 *
 * @example
 * <ax-range-slider [min]="0" [max]="100" [step]="1" [mode]="'dual'"></ax-range-slider>
 */
declare class AXRangeSliderComponent extends AXRangeSliderComponent_base {
    private zone;
    protected platformID: Object;
    /**
     * @description
     * The orientation of the slider, either 'horizontal' or 'vertical'.
     * @default 'horizontal'
     */
    readonly orientation: _angular_core.InputSignal<AXOrientation>;
    /**
     * @description
     * Color theme for the slider, affecting highlight, tooltip, and handler.
     * @default 'primary'
     */
    readonly color: _angular_core.InputSignal<"success" | "primary" | "secondary" | "warning" | "danger">;
    /**
     * @description
     * The value(s) of the slider. Can be a single number for single mode or an array of two numbers for dual mode.
     */
    values: _angular_core.ModelSignal<AXRangeSliderValue>;
    /**
     * @description
     * The mode of the slider, either 'single' or 'dual'.
     * @default 'single'
     */
    readonly mode: _angular_core.InputSignal<AXRangeSliderMode>;
    /**
     * @description
     * The minimum value of the slider.
     * @default 0
     */
    readonly min: _angular_core.InputSignal<number>;
    /**
     * @description
     * The maximum value of the slider.
     * @default 100
     */
    readonly max: _angular_core.InputSignal<number>;
    /**
     * @description
     * The step increment for value changes.
     * @default 1
     */
    readonly step: _angular_core.InputSignal<number>;
    /**
     * @description
     * The snapping increment for the slider.
     * @default 1
     */
    readonly snap: _angular_core.InputSignal<number>;
    /**
     * @description
     * Mode for displaying tooltips, can be at the start, end, or both.
     * @default 'end'
     */
    readonly tooltipMode: _angular_core.InputSignal<AXRangeSliderTooltipMode>;
    /**
     * @description
     * Mode for snapping, can snap at the start, end, or both.
     * @default 'start'
     */
    readonly snapMode: _angular_core.InputSignal<AXRangeSliderSnapMode>;
    /**
     * @description
     * Whether the slider should have steps.
     * @default true
     */
    readonly hasStep: _angular_core.InputSignal<boolean>;
    /**
     * @description
     * Whether the slider should display snapping.
     * @default false
     */
    readonly hasSnap: _angular_core.InputSignal<boolean>;
    /**
     * @description
     * Whether the slider should display labels for snapping points.
     * @default Value derived from `hasSnap()`
     */
    readonly hasLable: _angular_core.InputSignal<boolean>;
    /**
     * @description
     * Whether the slider should display tooltips.
     * @default false
     */
    readonly hasTooltip: _angular_core.InputSignal<boolean>;
    /**
     * @ignore
     */
    height: number;
    /**
     * @ignore
     */
    newHeight: string;
    /**
     * @ignore
     */
    range: _angular_core.Signal<number>;
    /**
     * @ignore
     */
    isHorizontal: _angular_core.Signal<boolean>;
    /**
     * @ignore
     */
    isDual: _angular_core.Signal<boolean>;
    /**
     * @ignore
     */
    correctMinMax: _angular_core.Signal<boolean>;
    /**
     * @ignore
     */
    protected calculateSnapBar: _angular_core.Signal<number[]>;
    /**
     * @ignore
     */
    protected calculatePos: _angular_core.Signal<AXRangeSliderValue>;
    /**
     * @ignore
     */
    private choosenHandler;
    /**
     * @ignore
     */
    private sliderElement;
    /**
     * @ignore
     */
    protected AXRangeSliderHighlight: _angular_core.Signal<{
        left: string;
        width: string;
        height?: undefined;
        bottom?: undefined;
    } | {
        height: string;
        bottom: string;
        left?: undefined;
        width?: undefined;
    }>;
    /**
     * @ignore
     */
    protected AXRangeSliderHandler1: _angular_core.Signal<{
        left: string;
        bottom?: undefined;
    } | {
        bottom: string;
        left?: undefined;
    }>;
    /**
     * @ignore
     */
    protected AXRangeSliderHandler2: _angular_core.Signal<{
        left: string;
        bottom?: undefined;
    } | {
        bottom: string;
        left?: undefined;
    }>;
    /**
     * @ignore
     */
    protected AXRangeSliderStep: _angular_core.Signal<{
        top: string;
        height: string;
        width?: undefined;
        left?: undefined;
    } | {
        top: string;
        width: string;
        height?: undefined;
        left?: undefined;
    } | {
        left: string;
        width: string;
        top?: undefined;
        height?: undefined;
    }>;
    /**
     * @ignore
     */
    protected AXRangeLabel: _angular_core.Signal<{
        top: string;
        left?: undefined;
    } | {
        left: string;
        top?: undefined;
    }>;
    isUserInteraction: boolean;
    constructor();
    /**
     * @ignore
     */
    protected ngOnInit(): void;
    /**
     * @ignore
     */
    protected ngOnDestroy(): void;
    private moveListener;
    private endListener;
    /**
     * @ignore
     */
    protected onStartHandler(event: MouseEvent | TouchEvent, circle: 'first' | 'second'): void;
    /**
     * @ignore
     */
    protected onStartBar(event: MouseEvent | TouchEvent): void;
    /**
     * @ignore
     */
    protected onMove(event: MouseEvent | TouchEvent, circle: 'first' | 'second'): void;
    /**
     * @ignore
     */
    protected onEnd(moveListener: (event: MouseEvent | TouchEvent) => void, endListener: () => void): void;
    /**
     * @ignore
     */
    private initializeValues;
    /**
     * @ignore
     */
    private fixInitializeUndefined;
    /**
     * @ignore
     */
    private fixInitializeValues;
    /**
     * @ignore
     */
    private fixInitializeStep;
    /**
     * @ignore
     */
    private fixChangingMode;
    /**
     * @ignore
     */
    private calculatePercentOnMove;
    /**
     * @ignore
     */
    private roundToStep;
    /**
     * @ignore
     */
    private checkValue;
    /**
     * @ignore
     */
    private checkValues;
    /**
     * @ignore
     */
    protected getValueFromPercent(value: number): number;
    /**
     * @ignore
     */
    protected getPercantage(value: number): number;
    /**
     * Increase a step to value if slider in single mode
     * and increase a step the second value if slider in dual mode
     * @method increaseStep
     */
    increaseStep(): void;
    /**
     * Decrease a step to value if slider in single mode
     * and decrease a step the second value if slider in dual mode
     * @method decreaseStep
     */
    decreaseStep(): void;
    /**
     * @ignore
     */
    onWheel(event: WheelEvent): void;
    /**
     * @ignore
     */
    private get __hostClass();
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXRangeSliderComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXRangeSliderComponent, "ax-range-slider", never, { "disabled": { "alias": "disabled"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "values": { "alias": "values"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "snap": { "alias": "snap"; "required": false; "isSignal": true; }; "tooltipMode": { "alias": "tooltipMode"; "required": false; "isSignal": true; }; "snapMode": { "alias": "snapMode"; "required": false; "isSignal": true; }; "hasStep": { "alias": "hasStep"; "required": false; "isSignal": true; }; "hasSnap": { "alias": "hasSnap"; "required": false; "isSignal": true; }; "hasLable": { "alias": "hasLable"; "required": false; "isSignal": true; }; "hasTooltip": { "alias": "hasTooltip"; "required": false; "isSignal": true; }; }, { "values": "valuesChange"; }, never, never, true, never>;
}

declare class AXRangeSliderModule {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXRangeSliderModule, never>;
    static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AXRangeSliderModule, never, [typeof i1.CommonModule, typeof AXRangeSliderComponent], [typeof AXRangeSliderComponent]>;
    static ɵinj: _angular_core.ɵɵInjectorDeclaration<AXRangeSliderModule>;
}

export { AXRangeSliderComponent, AXRangeSliderModule };
export type { AXRangeSliderHandler, AXRangeSliderMode, AXRangeSliderSnapMode, AXRangeSliderTooltipMode, AXRangeSliderValue, AXRangeStartEvent };
