import { AfterContentInit, AfterViewChecked, EventEmitter } from '@angular/core';
import { ThemePalette } from '@angular/material/core';
import { TimeAdapter } from './adapter';
import { MatTimePeriodType } from './time-period';
import * as i0 from "@angular/core";
export declare abstract class MatTimeFaceBase<T> implements AfterContentInit, AfterViewChecked {
    protected _timeAdapter: TimeAdapter<T>;
    /** The currently selected time. */
    get selected(): T | null;
    set selected(value: T | null);
    private _selected;
    /** The minimum selectable time. */
    get minTime(): T | null;
    set minTime(value: T | null);
    private _minTime;
    /** The maximum selectable time. */
    get maxTime(): T | null;
    set maxTime(value: T | null);
    private _maxTime;
    /** Step over minutes. */
    get minuteInterval(): number;
    set minuteInterval(value: number);
    private _minuteInterval;
    /** Whether the clock uses 12 hour format. */
    isMeridiem: boolean;
    /** Color palette. */
    color: ThemePalette;
    /** Emits when any hour, minute or period is selected. */
    _userSelection: EventEmitter<T>;
    selectedChange: EventEmitter<T>;
    selectedHour: number;
    selectedMinute: number;
    period: MatTimePeriodType;
    disabledPeriod: MatTimePeriodType | null;
    availableMinutes: number[];
    availableHours: number[];
    /**
     * Used for scheduling that focus should be moved to the active cell on the next tick.
     * We need to schedule it, rather than do it immediately, because we have to wait
     * for Angular to re-evaluate the view children.
     */
    private _moveFocusOnNextTick;
    constructor(_timeAdapter: TimeAdapter<T>);
    ngAfterContentInit(): void;
    ngAfterViewChecked(): void;
    /**
     * Focuses the active cell after or input the microtask queue is empty.
     *
     * Adding a 0ms setTimeout seems to fix Voiceover losing focus when pressing PageUp/PageDown.
     *
     * Determined a 0ms by gradually increasing duration from 0 and testing two use cases with screen
     * reader enabled:
     *
     * 1. Pressing PageUp/PageDown repeatedly with pausing between each key press.
     * 2. Pressing and holding the PageDown key with repeated keys enabled.
     *
     * Test 1 worked roughly 95-99% of the time with 0ms and got a little bit better as the duration
     * increased. Test 2 got slightly better until the duration was long enough to interfere with
     * repeated keys. If the repeated key speed was faster than the timeout duration, then pressing
     * and holding pagedown caused the entire page to scroll.
     *
     * Since repeated key speed can verify across machines, determined that any duration could
     * potentially interfere with repeated keys. 0ms would be best because it almost entirely
     * eliminates the focus being lost in Voiceover without causing unintended side effects.
     * Adding delay also complicates writing tests.
     */
    abstract focusActiveCell(): void;
    /** Handles hour selection. */
    _onHourSelected(hour: number): void;
    /** Handles minute selection. */
    _onMinuteSelected(minute: number): void;
    /** Handles period changing. */
    _onPeriodChanged(period: MatTimePeriodType): void;
    _getAvailableHours(): number[];
    _onKeydown(event: KeyboardEvent, view: 'hour' | 'minute'): void;
    private _handleHourKeydown;
    private _handleMinuteKeydown;
    /** Gets a correct hours based on meridiem and period. */
    private _getHourBasedOnPeriod;
    private _timeSelected;
    /** Sets min hour. */
    private _setMinHour;
    /** Sets max hour. */
    private _setMaxHour;
    /** Sets min minute. */
    private _setMinMinute;
    /** Sets max minute. */
    private _setMaxMinute;
    /** Sets disabled period. */
    private _setDisabledPeriod;
    static ɵfac: i0.ɵɵFactoryDeclaration<MatTimeFaceBase<any>, [{ optional: true; }]>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<MatTimeFaceBase<any>, never, never, { "selected": { "alias": "selected"; "required": false; }; "minTime": { "alias": "minTime"; "required": false; }; "maxTime": { "alias": "maxTime"; "required": false; }; "minuteInterval": { "alias": "minuteInterval"; "required": false; }; "isMeridiem": { "alias": "isMeridiem"; "required": false; }; "color": { "alias": "color"; "required": false; }; }, { "_userSelection": "_userSelection"; "selectedChange": "selectedChange"; }, never, never, true, never>;
}
