import * as i0 from '@angular/core';
import { OnChanges, OnInit, AfterViewInit, ElementRef, QueryList, ChangeDetectorRef, Renderer2 } from '@angular/core';
import { LiveAnnouncer } from '@angular/cdk/a11y';
import { Platform } from '@angular/cdk/platform';
import * as i2 from '@angular/forms';
import { ControlValueAccessor } from '@angular/forms';
import { BehaviorSubject } from 'rxjs';
import * as i3 from '@fundamental-ngx/cdk/utils';
import { CssClassBuilder, Nullable } from '@fundamental-ngx/cdk/utils';
import * as i4 from '@fundamental-ngx/core/content-density';
import { ContentDensityObserver } from '@fundamental-ngx/core/content-density';
import { FormItemControl } from '@fundamental-ngx/core/form';
import * as i1 from '@fundamental-ngx/core/popover';
import { PopoverComponent } from '@fundamental-ngx/core/popover';
import * as i5 from '@fundamental-ngx/i18n';

declare class SliderPositionDirective implements OnChanges {
    /** Position of the slider */
    position: number;
    /** Whether the slider is rendered vertically. */
    vertical: boolean;
    /** @hidden */
    private readonly _isRtl;
    /** @hidden */
    private readonly _rtlService;
    /** @hidden */
    private readonly _elementRef;
    /** @hidden */
    private readonly _renderer;
    /** @hidden */
    constructor();
    /** @hidden */
    ngOnChanges(): void;
    /** @hidden */
    private _setPosition;
    static ɵfac: i0.ɵɵFactoryDeclaration<SliderPositionDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<SliderPositionDirective, "[fd-slider-position]", never, { "position": { "alias": "position"; "required": false; }; "vertical": { "alias": "vertical"; "required": false; }; }, {}, never, never, true, never>;
}

declare enum SliderValueTargets {
    SINGLE_SLIDER = 0,
    RANGE_SLIDER1 = 1,
    RANGE_SLIDER2 = 2
}
declare enum SliderRangeHandles {
    First = 0,
    Second = 1,
    Both = 2
}
interface SliderTickMark {
    value: number | string;
    label: string;
    position?: number;
}
type SliderCustomValue = Omit<SliderTickMark, 'position'>;
type SliderControlValue = number | number[] | SliderTickMark | SliderTickMark[];

declare const SLIDER_VALUE_ACCESSOR: {
    provide: i0.InjectionToken<readonly ControlValueAccessor[]>;
    useExisting: i0.Type<any>;
    multi: boolean;
};
declare class SliderComponent implements OnInit, OnChanges, AfterViewInit, ControlValueAccessor, CssClassBuilder, FormItemControl {
    readonly elementRef: ElementRef;
    private readonly _cdr;
    private readonly _renderer;
    private readonly _platform;
    private readonly _liveAnnouncer;
    readonly _contentDensityObserver: ContentDensityObserver;
    /** Slider id, it has some default value if not set,  */
    id: string;
    /** User's custom classes */
    class: string;
    /** ID of the element that labels slider. */
    ariaLabelledBy: Nullable<string>;
    /** Aria label for the slider. */
    ariaLabel: Nullable<string>;
    /** Minimum value. */
    set min(value: number);
    get min(): number;
    /** Maximum value. */
    set max(value: number);
    get max(): number;
    /** Step value. */
    set step(value: number);
    get step(): number;
    /** Jump value. */
    set jump(value: number);
    get jump(): number;
    /** Put a label on every N-th tickmark. */
    set tickmarksBetweenLabels(value: number);
    get tickmarksBetweenLabels(): number;
    /**
     * Slider mode.
     * Options include: 'single' | 'range'
     * The default is set to 'single'
     */
    mode: 'single' | 'range';
    /** Toggles the visibility of tick marks. */
    showTicks: boolean;
    /** Toggles the visibility of tick mark labels. Must be used in conjunction with 'showTicks' */
    showTicksLabels: boolean;
    /** Array of custom values to use for Slider. */
    customValues: SliderCustomValue[];
    /** Tooltip can be two types, 'readonly' to display value and 'editable' to make the ability to set and display value. */
    tooltipMode: 'readonly' | 'editable';
    /** Hides display of colored progress bar. */
    hideProgressBar: boolean;
    /** Whether the control is disabled. */
    disabled: boolean;
    /**
     * Whether slider should have vertical alignment.
     */
    vertical: boolean;
    /** @hidden */
    _position: number | number[];
    /** Control value */
    set value(value: SliderControlValue);
    get value(): SliderControlValue;
    /** @hidden */
    get _popoverValueRef(): number[];
    /** @hidden */
    trackEl: ElementRef<HTMLDivElement>;
    /** @hidden */
    handle: ElementRef<HTMLDivElement>;
    /** @hidden */
    rangeHandle1: ElementRef<HTMLDivElement>;
    /** @hidden */
    rangeHandle2: ElementRef<HTMLDivElement>;
    /** @hidden */
    _rangeGroupHandle: ElementRef<HTMLDivElement>;
    /** @hidden */
    _popovers: QueryList<PopoverComponent>;
    /** @hidden */
    _sliderTooltipWrappers: QueryList<ElementRef<HTMLDivElement>>;
    /** @hidden */
    _value: number | SliderTickMark | SliderTickMark[] | number[];
    /** @hidden */
    _progress: number;
    /** @hidden */
    _isRange: boolean;
    /** @hidden */
    _handle1Position: number;
    /** @hidden */
    _handle2Position: number;
    /** @hidden */
    _handle1Value: number;
    /** @hidden */
    _handle2Value: number;
    /** @hidden */
    _rangeProgress: number;
    /** @hidden */
    _tickMarks: SliderTickMark[];
    /** @hidden */
    _sliderValueTargets: typeof SliderValueTargets;
    /** @hidden */
    _popoverInputFieldClass: string;
    /**
     * @hidden
     * whether to use value with a prefix for announcing
     */
    _useSliderValuePrefix: boolean;
    /** @hidden */
    _handles: typeof SliderRangeHandles;
    /** @hidden */
    private _min;
    /** @hidden */
    private _max;
    /** @hidden */
    private _step;
    /** @hidden */
    private _jump;
    /** @hidden */
    private _tickmarksBetweenLabels;
    /** @hidden */
    private _valuesBySteps;
    /**
     * @hidden
     * An RxJS Subject that will kill the data stream upon component’s destruction (for unsubscribing)
     */
    private readonly _destroyRef;
    /** @hidden */
    readonly _componentHovered$: BehaviorSubject<boolean>;
    /** @hidden */
    readonly _handleFocused$: BehaviorSubject<boolean>;
    /** @hidden */
    readonly _rangeHandle1Focused$: BehaviorSubject<boolean>;
    /** @hidden */
    readonly _rangeHandle2Focused$: BehaviorSubject<boolean>;
    /** @hidden */
    readonly _popoverInputFieldFocused$: BehaviorSubject<boolean>;
    /** @hidden */
    readonly _popoverInputFieldHovered$: BehaviorSubject<boolean>;
    /** @hidden */
    private readonly _isRtl;
    /** @hidden */
    private readonly _rtlService;
    /** @hidden */
    constructor(elementRef: ElementRef, _cdr: ChangeDetectorRef, _renderer: Renderer2, _platform: Platform, _liveAnnouncer: LiveAnnouncer, _contentDensityObserver: ContentDensityObserver);
    /**
     * @hidden
     * CssClassBuilder interface implementation
     * function must return single string
     * function is responsible for order which css classes are applied
     */
    buildComponentCssClass(): string[];
    /** @hidden */
    ngOnInit(): void;
    /** @hidden */
    ngOnChanges(): void;
    /** @hidden */
    ngAfterViewInit(): void;
    /** @hidden */
    getValuenow(position: number | number[], sliderValueTarget: SliderValueTargets): string | number;
    /** @hidden */
    get minValue(): string | number;
    /** @hidden */
    get maxValue(): string | number;
    /** @hidden */
    onChange: (value: SliderControlValue) => void;
    /** @hidden */
    onTouched: () => void;
    /** @hidden */
    registerOnChange(fn: (value: SliderControlValue) => void): void;
    /** @hidden */
    registerOnTouched(fn: () => void): void;
    /** @hidden */
    setDisabledState(isDisabled: boolean): void;
    /** @hidden */
    writeValue(value: SliderControlValue): void;
    /** @hidden */
    onTrackClick(event: MouseEvent): void;
    /** @hidden */
    onHandleClick(event: MouseEvent, group?: boolean): void;
    /** @hidden */
    onKeyDown(event: KeyboardEvent, handle?: SliderRangeHandles): void;
    /** @hidden */
    _updateValueFromInput(value: string, target: SliderValueTargets): void;
    /** @hidden */
    private _handleRangeKeydown;
    /** @hidden */
    private _setValue;
    /** @hidden */
    private _updatePopoversPosition;
    /** @hidden */
    private _calculateValueFromPointerPosition;
    /** @hidden */
    private _processNewValue;
    /** @hidden */
    private _setRangeHandleValueAndPosition;
    /** @hidden */
    private _constructRangeModelValue;
    /** @hidden */
    private _attachResizeListener;
    /** @hidden */
    private _onResize;
    /** @hidden */
    private _constructValuesBySteps;
    /** @hidden */
    private _constructTickMarks;
    /** @hidden */
    private get _maxTickMarksNumber();
    /** @hidden */
    private _calcProgress;
    /** @hidden */
    private _recalcHandlePositions;
    /** @hidden */
    private _checkIsInRangeMode;
    /** @hidden */
    private _initSingeMode;
    /** @hidden */
    private _initSingeModeDefault;
    /** @hidden */
    private _initSingeModeWithCustomValue;
    /** @hidden */
    private _initRangeMode;
    /** @hidden */
    private _initRangeModeDefault;
    /** @hidden */
    private _initRangeModeWithCustomValues;
    /** @hidden */
    private _getCustomValuesPosition;
    /** @hidden */
    private _getCustomValuesPositions;
    /** @hidden */
    private _instanceOfCustomValue;
    /** @hidden */
    private _listenToInteractionChanges;
    /** @hidden reset default prefix on leaving the slider */
    private _resetPrefix;
    /**
     * @hidden
     * Checks whether input popover element is hovered.
     * Will also return true, when hovering the gap between handle and the tooltip.
     * If yes, returns "true" instantly and "false" once it's not hovered anymore.
     */
    private _isPopoverHovered;
    static ɵfac: i0.ɵɵFactoryDeclaration<SliderComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<SliderComponent, "fd-slider", never, { "id": { "alias": "id"; "required": false; }; "class": { "alias": "class"; "required": false; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "step": { "alias": "step"; "required": false; }; "jump": { "alias": "jump"; "required": false; }; "tickmarksBetweenLabels": { "alias": "tickmarksBetweenLabels"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "showTicks": { "alias": "showTicks"; "required": false; }; "showTicksLabels": { "alias": "showTicksLabels"; "required": false; }; "customValues": { "alias": "customValues"; "required": false; }; "tooltipMode": { "alias": "tooltipMode"; "required": false; }; "hideProgressBar": { "alias": "hideProgressBar"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "vertical": { "alias": "vertical"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, {}, never, never, true, never>;
}

/**
 * @deprecated
 * Use direct imports of components and directives.
 */
declare class SliderModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<SliderModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<SliderModule, never, [typeof i1.PopoverModule, typeof i2.FormsModule, typeof i3.OnlyDigitsModule, typeof i4.ContentDensityModule, typeof i5.I18nModule, typeof SliderComponent, typeof SliderPositionDirective], [typeof SliderComponent, typeof SliderPositionDirective]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<SliderModule>;
}

export { SLIDER_VALUE_ACCESSOR, SliderComponent, SliderModule, SliderPositionDirective, SliderRangeHandles, SliderValueTargets };
export type { SliderControlValue, SliderCustomValue, SliderTickMark };
