import { NumberInput } from '@angular/cdk/coercion';
import { TemplatePortal } from '@angular/cdk/portal';
import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
import { SubscriptionLike } from 'rxjs';
import { DatetimeAdapter } from '@ng-matero/extensions/core';
import { MtxClockView } from './clock';
import { MtxDatetimepickerFilterType } from './datetimepicker-filtertype';
import { MtxDatetimepickerIntl } from './datetimepicker-intl';
import { MtxAMPM } from './datetimepicker-types';
import * as i0 from "@angular/core";
export declare class MtxTimeInput implements OnDestroy {
    private element;
    private cdr;
    set timeInterval(value: NumberInput);
    private _interval;
    set timeMin(value: NumberInput);
    private _min;
    set timeMax(value: NumberInput);
    private _max;
    set timeValue(value: NumberInput);
    timeValueChanged: EventEmitter<NumberInput>;
    private _value;
    private keyDownListener;
    private keyPressListener;
    private inputEventListener;
    constructor(element: ElementRef, cdr: ChangeDetectorRef);
    get hasFocus(): any;
    get inputElement(): HTMLInputElement;
    get valid(): boolean;
    get invalid(): boolean;
    blur(): void;
    focus(): void;
    /**
     * Write value to inputElement
     * @param value NumberInput
     */
    writeValue(value: NumberInput): void;
    /**
     * Writes value to placeholder
     * @param value NumberInput
     */
    writePlaceholder(value: NumberInput): void;
    keyDownHandler(event: KeyboardEvent): void;
    /**
     * Prevent non number inputs in the inputElement with the exception of Enter/BackSpace
     * @param event KeyboardEvent
     */
    keyPressHandler(event: KeyboardEvent): void;
    inputChangedHandler(): void;
    clampInputValue(): void;
    /**
     * Remove event listeners on destruction
     */
    ngOnDestroy(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<MtxTimeInput, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<MtxTimeInput, "input.mtx-time-input", ["mtxTimeInput"], { "timeInterval": { "alias": "timeInterval"; "required": false; }; "timeMin": { "alias": "timeMin"; "required": false; }; "timeMax": { "alias": "timeMax"; "required": false; }; "timeValue": { "alias": "timeValue"; "required": false; }; }, { "timeValueChanged": "timeValueChanged"; }, never, never, true, never>;
}
export declare class MtxTime<D> implements OnChanges, AfterViewInit, OnDestroy {
    private _adapter;
    private _changeDetectorRef;
    protected _datetimepickerIntl: MtxDatetimepickerIntl;
    /** Emits when the currently selected date changes. */
    readonly selectedChange: EventEmitter<D>;
    /** Emits when any date changes. */
    readonly activeDateChange: EventEmitter<D>;
    /** Emits when any date is selected. */
    readonly _userSelection: EventEmitter<void>;
    /** Emits when AM/PM button are clicked. */
    readonly ampmChange: EventEmitter<MtxAMPM>;
    /** Emits when AM/PM button are clicked. */
    readonly clockViewChange: EventEmitter<MtxClockView>;
    /** A function used to filter which dates are selectable. */
    dateFilter: (date: D, type: MtxDatetimepickerFilterType) => boolean;
    /** Step over minutes. */
    interval: number;
    /** Input for action buttons. */
    actionsPortal: TemplatePortal | null;
    protected hourInputElement: ElementRef<HTMLInputElement> | undefined;
    protected hourInputDirective: MtxTimeInput | undefined;
    protected minuteInputElement: ElementRef<HTMLInputElement> | undefined;
    protected minuteInputDirective: MtxTimeInput | undefined;
    datetimepickerIntlChangesSubscription: SubscriptionLike;
    /** Whether the clock uses 12 hour format. */
    twelvehour: boolean;
    /** Whether the time is now in AM or PM. */
    AMPM: MtxAMPM;
    /**
     * The date to display in this clock view.
     */
    get activeDate(): D;
    set activeDate(value: D);
    private _activeDate;
    /** The currently selected date. */
    get selected(): D | null;
    set selected(value: D | null);
    private _selected;
    /** The minimum selectable date. */
    get minDate(): D | null;
    set minDate(value: D | null);
    private _minDate;
    /** The maximum selectable date. */
    get maxDate(): D | null;
    set maxDate(value: D | null);
    private _maxDate;
    /** Whether the clock should be started in hour or minute view. */
    get clockView(): MtxClockView;
    set clockView(value: MtxClockView);
    /** Whether the clock is in hour view. */
    private _clockView;
    get isHourView(): boolean;
    get isMinuteView(): boolean;
    get hour(): string;
    get minute(): string;
    prefixWithZero(value: number): string;
    constructor(_adapter: DatetimeAdapter<D>, _changeDetectorRef: ChangeDetectorRef, _datetimepickerIntl: MtxDatetimepickerIntl);
    ngOnChanges(changes: SimpleChanges): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    focusInputElement(): void;
    _handleHourInputChange(value: NumberInput): void;
    _updateHourForAmPm(value: number): number;
    _handleMinuteInputChange(value: NumberInput): void;
    _handleFocus(clockView: MtxClockView): void;
    _timeSelected(date: D): void;
    _onActiveDateChange(date: D): void;
    _handleSelection(): void;
    _handleOk(): void;
    _handleCancel(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<MtxTime<any>, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<MtxTime<any>, "mtx-time", ["mtxTime"], { "dateFilter": { "alias": "dateFilter"; "required": false; }; "interval": { "alias": "interval"; "required": false; }; "actionsPortal": { "alias": "actionsPortal"; "required": false; }; "twelvehour": { "alias": "twelvehour"; "required": false; }; "AMPM": { "alias": "AMPM"; "required": false; }; "activeDate": { "alias": "activeDate"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "clockView": { "alias": "clockView"; "required": false; }; }, { "selectedChange": "selectedChange"; "activeDateChange": "activeDateChange"; "_userSelection": "_userSelection"; "ampmChange": "ampmChange"; "clockViewChange": "clockViewChange"; }, never, never, true, never>;
    static ngAcceptInputType_twelvehour: unknown;
}
