import * as i0 from '@angular/core';
import { OnInit, AfterViewInit, OnDestroy, EventEmitter, ElementRef, ChangeDetectorRef } from '@angular/core';
import { LiveAnnouncer } from '@angular/cdk/a11y';
import { ControlValueAccessor } from '@angular/forms';
import { SafeHtml } from '@angular/platform-browser';
import { FormStates } from '@fundamental-ngx/cdk/forms';
import { Nullable } from '@fundamental-ngx/cdk/utils';
import * as i2 from '@fundamental-ngx/core/content-density';
import { ContentDensityObserver } from '@fundamental-ngx/core/content-density';
import { FormItemControl } from '@fundamental-ngx/core/form';

declare class StepInputComponent implements OnInit, AfterViewInit, OnDestroy, ControlValueAccessor, FormItemControl {
    private _changeDetectorRef;
    private readonly _liveAnnouncer;
    readonly _contentDensityObserver: ContentDensityObserver;
    private readonly _elementRef;
    /** Sets compact mode */
    compact?: boolean;
    /** Sets control in readonly mode */
    readonly: boolean;
    /** Sets control in disabled mode */
    disabled: boolean;
    /** If it is mandatory field */
    required: boolean;
    /** Sets locale used to format numeric value */
    locale: string;
    /** Sets the Step Input to take the full width of the container element */
    isFullWidth: boolean;
    /** Specifies algorithm used to match locale. Check Intl.NumberFormat documentation for more information */
    localeMatcher: Nullable<'lookup' | 'best fit'>;
    /** Sets icon displayed in Increment Button */
    incrementButtonIcon: string;
    /** Sets icon displayed in Decrement Button */
    decrementButtonIcon: string;
    /** Sets input aria-label attribute */
    ariaLabel: Nullable<string>;
    /** Sets input aria-labelledby attribute */
    ariaLabelledBy: Nullable<string>;
    /** Aria defines role description for the Step Input. */
    ariaRoleDescription: string;
    /** Sets input id */
    inputId: string;
    /** Set control value */
    set value(value: Nullable<number>);
    /** Control value */
    get value(): number | null;
    /** Sets minimum value boundary */
    min: number;
    /** Sets maximum value boundary */
    max: number;
    /** Sets input step value */
    step: number;
    /** Sets input name attribute */
    name: Nullable<string>;
    /** Sets input title attribute */
    inputTitle: string;
    /** Whether the wheel event should be disabled. Default value is false */
    disableWheel: boolean;
    /** Sets formatting mode */
    mode: 'decimal' | 'currency';
    /** Sets state of the control. Can be `success`, `error`, `warning`, `information` or blank for default. */
    state: FormStates;
    /** Holds the message with respect to state */
    stateMessage: string | SafeHtml;
    /** Custom unit displayed as a label next to the input */
    unit: string;
    /** Whether to use grouping when formatting value */
    useGrouping: boolean;
    /** Defines minimal number of fractional digits for control value */
    minFractionDigits: number;
    /** Defines maximal number of fractional digits for control value */
    maxFractionDigits: number;
    /** Currency used to format value. Check Intl.NumberFormat documentation for more information*/
    currency: string;
    /** Currency used to format value. Check Intl.NumberFormat documentation for more information */
    currencyDisplay: string;
    /** Whether StepInput should display Increase/Decrease buttons */
    hasStepButtons: boolean;
    /** Horizontally aligns value inside input */
    textAlign: 'left' | 'center' | 'right';
    /** Hint displayed inside input before user writes value */
    placeholder: string;
    /** Emits event when input gets focused */
    onFocusIn: EventEmitter<void>;
    /** Emits event when input loses focus */
    onFocusOut: EventEmitter<void>;
    /** Emits new value when control value has changed */
    valueChange: EventEmitter<number | null>;
    /** @hidden */
    incrementButton: ElementRef<HTMLButtonElement>;
    /** @hidden */
    decrementButton: ElementRef<HTMLButtonElement>;
    /** @hidden */
    inputElement: ElementRef;
    /** @hidden */
    lastEmittedValue: Nullable<number>;
    /** @hidden */
    currencySign: string;
    /** @hidden */
    focused: boolean;
    /** @hidden Signal to track if increment is allowed */
    protected readonly _canIncrementSignal: i0.WritableSignal<boolean>;
    /** @hidden Signal to track if decrement is allowed */
    protected readonly _canDecrementSignal: i0.WritableSignal<boolean>;
    /** @hidden */
    private _value;
    /** @hidden */
    private _numerals;
    /** @hidden */
    private _decimalSeparator;
    /** @hidden */
    private _currency;
    /** @hidden */
    private _minusSign;
    /** @hidden */
    private _groupSeparator;
    /** @hidden */
    private _numberFormat;
    /** @hidden */
    private _subscriptions;
    /** @hidden */
    private _index;
    /** @hidden */
    private _firstEmittedValue;
    /** @hidden */
    constructor(locale: any, _changeDetectorRef: ChangeDetectorRef, _liveAnnouncer: LiveAnnouncer, _contentDensityObserver: ContentDensityObserver, _elementRef: ElementRef);
    /** @hidden */
    onChange: (value: Nullable<number>) => void;
    /** @hidden */
    onTouched: () => void;
    /** @hidden */
    ngOnInit(): void;
    /** @hidden */
    ngAfterViewInit(): void;
    /** @hidden */
    ngOnDestroy(): void;
    /** @hidden */
    registerOnChange(fn: (value: Nullable<number>) => void): void;
    /** @hidden */
    registerOnTouched(fn: () => void): void;
    /** @hidden */
    writeValue(value: number | null): void;
    /** @hidden */
    setDisabledState(isDisabled: boolean): void;
    /** @hidden */
    get canIncrement(): boolean;
    /** @hidden */
    get canDecrement(): boolean;
    /** @hidden */
    get canDisplayLabel(): boolean;
    /** Increment input value by step value */
    increment(): void;
    /** Decrement input value by step value */
    decrement(): void;
    /** @hidden */
    handleKeyDown(event: KeyboardEvent): void;
    /** @hidden */
    handleFocusIn(): void;
    /** @hidden */
    handleFocusOut(event: FocusEvent): void;
    /** @hidden */
    handleScroll(event: WheelEvent): void;
    /** @hidden Updates viewValue and conditionally emits new value.
     * This method is called on (change) event, when user leaves input control. */
    updateOnInputChanged(): void;
    /** @hidden Track parsed value when user changes value of the input control. */
    trackInputValue(event: any): void;
    /** @hidden */
    private _incrementOrDecrement;
    /** @hidden */
    private get _canChangeValue();
    /** @hidden */
    private _cutFloatingNumberDistortion;
    /** @hidden */
    private _checkValueLimits;
    /** @hidden */
    private _emitChangedValue;
    /** @hidden */
    private get _max();
    /** @hidden */
    private get _min();
    /** @hidden */
    private _updateViewValue;
    /** @hidden */
    private _listenOnButtonsClick;
    /** @hidden Update button state signals based on current value */
    private _updateButtonStates;
    /**
     * @hidden
     * Listens for click or space/enter keydown events.
     *
     * For long clicks will continuously emit event until "mouseup" event is detected
     */
    private _setupButtonListener;
    /** @hidden */
    private _parseValue;
    /** @hidden */
    private _getNumberFormat;
    /** @hidden */
    private _getNumeralsExpressions;
    /** @hidden */
    private _getDecimalSeparator;
    /** @hidden */
    private _getGroupingSeparator;
    /** @hidden */
    private _getMinusSignExpression;
    /** @hidden */
    private _getCurrencyExpression;
    /** @hidden */
    private _buildRegExps;
    /** @hidden */
    private _formatToViewValue;
    static ɵfac: i0.ɵɵFactoryDeclaration<StepInputComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<StepInputComponent, "fd-step-input", never, { "compact": { "alias": "compact"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; "locale": { "alias": "locale"; "required": false; }; "isFullWidth": { "alias": "isFullWidth"; "required": false; }; "localeMatcher": { "alias": "localeMatcher"; "required": false; }; "incrementButtonIcon": { "alias": "incrementButtonIcon"; "required": false; }; "decrementButtonIcon": { "alias": "decrementButtonIcon"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; }; "ariaRoleDescription": { "alias": "ariaRoleDescription"; "required": false; }; "inputId": { "alias": "inputId"; "required": false; }; "value": { "alias": "value"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "step": { "alias": "step"; "required": false; }; "name": { "alias": "name"; "required": false; }; "inputTitle": { "alias": "inputTitle"; "required": false; }; "disableWheel": { "alias": "disableWheel"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "state": { "alias": "state"; "required": false; }; "stateMessage": { "alias": "stateMessage"; "required": false; }; "unit": { "alias": "unit"; "required": false; }; "useGrouping": { "alias": "useGrouping"; "required": false; }; "minFractionDigits": { "alias": "minFractionDigits"; "required": false; }; "maxFractionDigits": { "alias": "maxFractionDigits"; "required": false; }; "currency": { "alias": "currency"; "required": false; }; "currencyDisplay": { "alias": "currencyDisplay"; "required": false; }; "hasStepButtons": { "alias": "hasStepButtons"; "required": false; }; "textAlign": { "alias": "textAlign"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; }, { "onFocusIn": "onFocusIn"; "onFocusOut": "onFocusOut"; "valueChange": "valueChange"; }, never, never, true, never>;
    static ngAcceptInputType_disableWheel: unknown;
}

/**
 * @deprecated
 * Use direct imports of components and directives.
 */
declare class StepInputModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<StepInputModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<StepInputModule, never, [typeof StepInputComponent, typeof i2.ContentDensityModule], [typeof StepInputComponent, typeof i2.ContentDensityModule]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<StepInputModule>;
}

export { StepInputComponent, StepInputModule };
