import { AfterViewInit, ElementRef, EventEmitter, OnChanges, OnInit, SimpleChanges } from '@angular/core';
import { ControlValueAccessor } from '@angular/forms';
import * as i0 from "@angular/core";
/**
 * @description Componente de controle deslizante (slider) para seleção de valores numéricos
 * dentro de um intervalo definido. Suporta modo simples (um valor) e modo de intervalo
 * (dois valores: início e fim). Implementa {@link ControlValueAccessor} para integração
 * com Reactive Forms e Template-driven Forms do Angular.
 *
 * @example
 * ```html
 * <!-- Slider simples -->
 * <s-slider formControlName="volume" [min]="0" [max]="100" [step]="5" />
 *
 * <!-- Slider de intervalo -->
 * <s-slider formControlName="faixa" [multiple]="true" [min]="0" [max]="1000" />
 * ```
 *
 * @category Inputs
 */
export declare class SliderComponent implements OnInit, AfterViewInit, ControlValueAccessor, OnChanges {
    private readonly MAX_RANGE_VALUE;
    private readonly MIN_RANGE_VALUE;
    track: ElementRef;
    /**
     * @description Habilita o modo de intervalo, permitindo selecionar um valor mínimo e máximo.
     * Quando `true`, o valor do componente é um array `[inicio, fim]`.
     *
     * @default false
     */
    multiple: boolean;
    /**
     * @description Valor atual do slider. No modo simples é um número; no modo de
     * intervalo (`multiple: true`) é um array `[inicio, fim]`.
     *
     * @default 0
     */
    value: number | [number, number];
    /**
     * @description Emitido sempre que o valor do slider é alterado pelo usuário.
     * Emite o novo valor (número ou array de dois números no modo de intervalo).
     */
    valueChange: EventEmitter<number | [number, number]>;
    /**
     * @description Incremento aplicado a cada movimento do thumb do slider.
     *
     * @default 1
     */
    step: number;
    /**
     * @description Oculta visualmente o thumb (botão arrastável) do slider.
     * Útil para visualizações onde apenas a faixa de progresso deve ser exibida.
     *
     * @default false
     */
    hiddenThumb: boolean;
    /**
     * @description Desabilita a interação do usuário com o slider.
     *
     * @default false
     */
    disabled: boolean;
    /**
     * @description Valor mínimo permitido no slider.
     *
     * @default 0
     */
    min: number;
    /**
     * @description Valor máximo permitido no slider.
     *
     * @default 100
     */
    max: number;
    /**
     * @description Label exibido abaixo ou ao lado do valor mínimo do slider.
     * Útil para indicar semanticamente os extremos do intervalo.
     */
    minValueLabel?: string;
    /**
     * @description Label exibido abaixo ou ao lado do valor máximo do slider.
     * Útil para indicar semanticamente os extremos do intervalo.
     */
    maxValueLabel?: string;
    /**
     * @description Índice de tabulação do elemento, controlando a ordem de foco via teclado.
     *
     * @default 0
     */
    tabindex: number;
    startValue: number;
    endValue: number;
    movingProgressBar: boolean;
    progressLeft: number;
    progressWidth: string;
    onChange: (value: number | [number, number]) => void;
    onTouched: (value: number | [number, number]) => void;
    private draggingThumb;
    private progressBarEventPositionStart;
    private startValueBeforeProgressBarEvent;
    private rangeBetweenElementsBeforeProgressBarEvent;
    private totalRangeBeforeProgressBarEvent;
    /**
     * Map of valid values for values in range.
     * @example
     * with min = -10 and max = 10 will have this map.
     * {
     *     -10: { 0 },
     *     -9: { 10 },
     *      ...
     *     10: { 10 }
     * }
     */
    private mapRangeValuesForSlider;
    private activeMouseDown;
    private focusActive;
    ngOnInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    ngAfterViewInit(): void;
    onKeydown($event: KeyboardEvent): void;
    get tooltipStartText(): string;
    get tooltipEndText(): string;
    writeValue(obj: number | [number, number]): void;
    registerOnChange(fn: (value: number | [number, number]) => void): void;
    registerOnTouched(fn: () => void): void;
    setDisabledState(isDisabled: boolean): void;
    onFocusIn(): void;
    onBlur(): void;
    onTrackClick(evt: MouseEvent): void;
    onProgressMouseDown(evt: MouseEvent): void;
    onMouseDown(_: MouseEvent, thumb: 'start' | 'end'): void;
    private setRangeValues;
    private onThumbMove;
    private onMouseUp;
    private handleProgressBarMove;
    private handleProgressBarMoveEnd;
    private setProgress;
    /**
     * Get the percentage of a mouse event from the track's left edge
     * @param mouseEvent mouse event
     * @returns percentage from the left edge
     */
    private getPercentageByEvent;
    private setValue;
    private setUserRangeMapValues;
    /**
     * Returns the user value from the given slider value by using the map of range values.
     * @example
     * If the map is 0: { 0 }, 1: { 10 }, 2: { 30 }, 3: { 40 }, 4: { 50 }
     * and the sliderValue is 37, the function returns 3
     * or the slider value is 40, the function returns 4
     * @param sliderValue the value of the slider (values only between range MIN and MAX)
     * @returns the user value from the given slider value
     */
    private getValueFromMapByValue;
    /**
     * Retrieves the key from the map that is closest to the given slider value.
     * @param userValue - The value to find the closest key for. (values only between 0 - 100)
     * @returns The key that corresponds to the closest mapped value.
     */
    private getClosestValueFromMapSlider;
    private handleArrowKeyLeft;
    private handleArrowKeyRight;
    private _incrementOrDecrementStartAndEndValue;
    private _incrementOrDecrementEndValue;
    private get needParseValues();
    static ɵfac: i0.ɵɵFactoryDeclaration<SliderComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<SliderComponent, "s-slider", never, { "multiple": { "alias": "multiple"; "required": false; }; "value": { "alias": "value"; "required": false; }; "step": { "alias": "step"; "required": false; }; "hiddenThumb": { "alias": "hiddenThumb"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "minValueLabel": { "alias": "minValueLabel"; "required": false; }; "maxValueLabel": { "alias": "maxValueLabel"; "required": false; }; "tabindex": { "alias": "tabindex"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
}
