import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, OnChanges, OnDestroy, OnInit, QueryList, SimpleChanges } from '@angular/core';
import { CarouselConfig, CarouselDirective, CarouselItemDirective, PanEndOutput } from '@fundamental-ngx/core/carousel';
import { Nullable } from '@fundamental-ngx/cdk/utils';
import { SelectableViewItem } from '../models';
import { TimeColumnConfig } from './time-column-config';
import * as i0 from "@angular/core";
export interface TimeColumnItemOutput<T> {
    value: T;
    after?: boolean;
}
export declare class TimeColumnComponent<K extends number, T extends SelectableViewItem<K> = SelectableViewItem<K>> implements AfterViewInit, OnInit, OnDestroy, OnChanges {
    private _changeDetRef;
    private _elmRef;
    /** items in row */
    rows: T[];
    /**
     * @Input When set to false, hides the buttons that increment
     * and decrement the corresponding columns.
     */
    spinners: boolean;
    /** Currently chosen, centered time column item */
    set activeValue(activeItem: Nullable<T>);
    get activeValue(): Nullable<T>;
    /** Defines if column is active, it has impact on behavior and visual  */
    set active(value: boolean);
    get active(): boolean;
    /** Whether time column is meridian */
    meridian: boolean;
    /** Id of column, initiated with some default value */
    id: string;
    /** I18n and labels */
    timeConfig: Nullable<TimeColumnConfig>;
    /** I18n and labels */
    columnTranslationsPreset: 'seconds' | 'minutes' | 'hours' | 'period';
    /**
     * Offset for carousel directive, active item is always the first one.
     * In case of having more items in carousel than 1, middle element should be active
     */
    set offset(value: number);
    get offset(): number;
    /**
     * Quantity of the elements to be shown at the same time in column
     */
    set elementsAtOnce(value: number);
    /** Event emitted, when active item is changed, by carousel */
    activeValueChange: EventEmitter<TimeColumnItemOutput<T>>;
    /** Event emitted, when certain column is activated */
    activeStateChange: EventEmitter<void>;
    /** @hidden */
    carousel: CarouselDirective;
    /** @hidden */
    items: QueryList<CarouselItemDirective<T>>;
    /** @hidden */
    indicator: ElementRef;
    /** @hidden */
    wrapperHeight: number;
    /**
     * Time to wait in milliseconds after the last keydown before
     * focusing or selecting option based on numeric/alpha keys.
     * @hidden
     */
    typeaheadDebounceInterval: number;
    /** @hidden */
    config: CarouselConfig;
    /** @hidden */
    internalTranslationConfig: TimeColumnConfig | null;
    /** @hidden */
    get currentIndicatorId(): string;
    /** @hidden */
    get currentIndicatorValueId(): string;
    /** @hidden */
    private _elementsAtOnce$;
    /** @hidden */
    private _offset$;
    /** @hidden */
    private _active;
    /** @hidden */
    private _queryKeyDownEvent;
    /** @hidden */
    private _activeValue;
    /** @hidden */
    private _activeCarouselItem;
    /** @hidden */
    private _isDragging;
    /** @hidden */
    private _viewInit$;
    /** @hidden */
    private _resize$;
    /** @hidden */
    private _subscriptions;
    /** @hidden
     * logs numeric key inputs to set time using keyboard input.
     */
    private _keyLog;
    /** @hidden
     * Timeout variable used to set timeout for subsequent numeric key input to set time.
     */
    private _numericInputTimeout;
    /** @hidden */
    constructor(_changeDetRef: ChangeDetectorRef, _elmRef: ElementRef);
    /** @hidden */
    onItemClick(): void;
    /** @hidden */
    keyDownHandler(event: KeyboardEvent): void;
    /** @hidden */
    mouseScrollHandler(event: WheelEvent): void;
    /** @hidden */
    ngOnInit(): void;
    /** @hidden */
    ngAfterViewInit(): void;
    /** @hidde */
    ngOnChanges(changes: SimpleChanges): void;
    /** @hidden */
    ngOnDestroy(): void;
    /** @hidden */
    spinnerButtonKeyupHandle(event: KeyboardEvent, upButton?: boolean): void;
    /** @hidden */
    setValueOfActive(): void;
    /** It prevents from accidentally change the item by click event */
    handleDrag(isDragging: boolean): void;
    /** Method that handles active item change */
    activeChangedHandle(output: PanEndOutput): void;
    /** Method that changes active item and triggers carousel scroll */
    pick(item: CarouselItemDirective<T>, index: number): void;
    /** Method triggered by keyboard, or increment button */
    scrollUp(event?: MouseEvent): void;
    /** Method triggered by keyboard, or decrement button */
    scrollDown(): void;
    /** Focus on column */
    focus(): void;
    /**
     * Create id for column item
     * @param index column item index
     * @returns column item id
     * @hidden
     */
    _createColumnItemIdByIndex(index: number): string;
    /**
     * On focus callback
     * @hidden
     */
    _onFocusIndicator(): void;
    /** @hidden
     * handles alphabetical key inputs to set period.
     */
    private _alphaKeyInputHandler;
    /** @hidden
     * handles numeric key inputs to set time.
     */
    private _numericKeyInputHandler;
    /** @hidden
     * set the time for given item value. used by _numericKeyInputHandler.
     */
    private _pickTimeOnValue;
    /**
     * Method triggered by keyboard, or decrement button
     * Args:
     * item => picked carousel item, that should be centered
     * smooth => defines if transition time should be included in transform
     * emitEvent => defines if EventEmitter should be triggered by this change, set to false, when changed from outside
     * after => Defines if value was incremented/decremented, needed for hours to trigger AM/PM change
     * @hidden
     */
    private _pickTime;
    /**
     * Returns item with passed value
     * @hidden
     */
    private _getItem;
    /** @hidden */
    private _triggerCarousel;
    /**
     * Focus current indicator, which allows to handle keydown events inside column
     * @hidden
     */
    private _focusIndicator;
    /** @hidden */
    private _getValue;
    /** @hidden */
    private _setUpQuerySubscription;
    /** @hidden */
    private _setUpCarouselConfiguration;
    /** @hidden */
    private _setUpInitialValue;
    /** @hidden */
    private _updateInternalTranslationConfig;
    static ɵfac: i0.ɵɵFactoryDeclaration<TimeColumnComponent<any, any>, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<TimeColumnComponent<any, any>, "fd-time-column", never, { "rows": { "alias": "rows"; "required": false; }; "spinners": { "alias": "spinners"; "required": false; }; "activeValue": { "alias": "activeValue"; "required": false; }; "active": { "alias": "active"; "required": false; }; "meridian": { "alias": "meridian"; "required": false; }; "id": { "alias": "id"; "required": false; }; "timeConfig": { "alias": "timeConfig"; "required": false; }; "columnTranslationsPreset": { "alias": "columnTranslationsPreset"; "required": false; }; "offset": { "alias": "offset"; "required": false; }; "elementsAtOnce": { "alias": "elementsAtOnce"; "required": false; }; }, { "activeValueChange": "activeValueChange"; "activeStateChange": "activeStateChange"; }, never, never, true, never>;
}
