import { Injector, OnChanges, SimpleChanges } from '@angular/core';
import { FormControl } from '@angular/forms';
import { DateLike } from '@microsoft/windows-admin-center-sdk/core/base/date/date-like';
import { DateType } from '@microsoft/windows-admin-center-sdk/core/base/date/date-type';
import { ValidationAlerts } from '../../validation-alert/validation-alert';
import { SmeInternalFormFieldComponent } from '../form-field.component';
import * as i0 from "@angular/core";
export declare abstract class DateLikeFormFieldComponent extends SmeInternalFormFieldComponent<DateLike> implements OnChanges {
    /**
     * Indicates the expected output type of the date like value.
     * if not provided, this control will attempt to detect the date type when 'value' is set
     */
    dateType: DateType;
    /**
     * Indicates the maximum date value allowed
     */
    max: DateLike;
    /**
     * Indicates the minimum date value allowed
     */
    min: DateLike;
    /**
     * Now, as a date.
     */
    protected now: Date;
    /**
     * Gets the year of now
     */
    protected get nowYear(): number;
    /**
     * Gets the month of now
     */
    protected get nowMonth(): number;
    /**
     * Gets the day of the month of now
     */
    protected get nowDay(): number;
    /**
     * Gets the Hour of now
     */
    protected get nowHour(): number;
    /**
     * Gets the minutes of now
     */
    protected get nowMinute(): number;
    /**
     * The auto-detected type of this fields value.
     */
    protected detectedDateType: DateType;
    /**
     * Initializes a new instance of the @see CalendarFormFieldComponent class.
     * @param injector The angular injection service. required by @see SmeInjectableBase decorator in the @see BaseComponent class
     */
    constructor(injector: Injector);
    /**
     * Angular OnChanges implementation
     */
    ngOnChanges(changes: SimpleChanges): void;
    /**
     * Occurs every time the value of the control changes, in the UI or programmatically.
     * @param value the value of the form control
     */
    protected onValueChanged(value: DateLike): void;
    /**
     * Validates the control as a date (time is not considered)
     */
    protected validateAsDate(c: FormControl): ValidationAlerts | null;
    /**
     * Validates the control as a time (date is not considered)
     */
    protected validateAsTime(c: FormControl): ValidationAlerts | null;
    /**
     * Validates the control as a datetime (date and time are both considered)
     */
    protected validateAsDateTime(c: FormControl): ValidationAlerts | null;
    static ɵfac: i0.ɵɵFactoryDeclaration<DateLikeFormFieldComponent, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<DateLikeFormFieldComponent, never, never, { "dateType": "dateType"; "max": "max"; "min": "min"; }, {}, never, never, false, never>;
}
