import * as i0 from '@angular/core';
import { InjectionToken, Provider, PipeTransform, TemplateRef } from '@angular/core';
import * as i1 from '@angular/material/core';
import { DateAdapter } from '@angular/material/core';
import * as i1$1 from '@angular/common';
import { Observable } from 'rxjs';

interface MtxDatetimeFormats {
    parse: {
        dateInput?: any;
        monthInput?: any;
        yearInput?: any;
        timeInput?: any;
        datetimeInput?: any;
    };
    display: {
        dateInput: any;
        monthInput: any;
        yearInput?: any;
        timeInput: any;
        datetimeInput: any;
        monthYearLabel: any;
        dateA11yLabel: any;
        monthYearA11yLabel: any;
        popupHeaderDateLabel: any;
    };
}
declare const MTX_DATETIME_FORMATS: InjectionToken<MtxDatetimeFormats>;

declare class NativeDatetimeModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<NativeDatetimeModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<NativeDatetimeModule, never, [typeof i1.NativeDateModule], never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<NativeDatetimeModule>;
}
declare function provideNativeDatetimeAdapter(formats?: MtxDatetimeFormats): Provider[];
declare class MtxNativeDatetimeModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<MtxNativeDatetimeModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<MtxNativeDatetimeModule, never, never, never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<MtxNativeDatetimeModule>;
}

declare abstract class DatetimeAdapter<D> extends DateAdapter<D> {
    protected _delegate: DateAdapter<D, any>;
    abstract getHour(date: D): number;
    abstract getMinute(date: D): number;
    abstract getFirstDateOfMonth(date: D): D;
    abstract getWeek(date: D, firstDayOfWeek: number): number;
    abstract isInNextMonth(startDate: D, endDate: D): boolean;
    abstract getHourNames(): string[];
    abstract getMinuteNames(): string[];
    abstract addCalendarHours(date: D, months: number): D;
    abstract addCalendarMinutes(date: D, minutes: number): D;
    abstract createDatetime(year: number, month: number, date: number, hour: number, minute: number): D;
    getValidDateOrNull(obj: any): D | null;
    compareDatetime(first: D, second: D, respectMinutePart?: boolean): number | boolean;
    sameDatetime(first: D | null, second: D | null): boolean;
    sameYear(first: D, second: D): boolean;
    sameDay(first: D, second: D): boolean;
    sameHour(first: D, second: D): boolean;
    sameMinute(first: D, second: D): boolean;
    sameMonthAndYear(first: D | null, second: D | null): boolean;
    clone(date: D): D;
    addCalendarYears(date: D, years: number): D;
    addCalendarMonths(date: D, months: number): D;
    addCalendarDays(date: D, days: number): D;
    getYear(date: D): number;
    getMonth(date: D): number;
    getDate(date: D): number;
    getDayOfWeek(date: D): number;
    getMonthNames(style: any): string[];
    getDateNames(): string[];
    getDayOfWeekNames(style: any): string[];
    getYearName(date: D): string;
    getFirstDayOfWeek(): number;
    getNumDaysInMonth(date: D): number;
    createDate(year: number, month: number, date: number): D;
    today(): D;
    parse(value: any, parseFormat: any): D | null;
    format(date: D, displayFormat: any): string;
    toIso8601(date: D): string;
    isDateInstance(obj: any): boolean;
    isValid(date: D): boolean;
    invalid(): D;
    clampDate(date: D, min?: D | null, max?: D | null): D;
}

declare class NativeDatetimeAdapter extends DatetimeAdapter<Date> {
    constructor();
    clone(date: Date): Date;
    getHour(date: Date): number;
    getMinute(date: Date): number;
    isInNextMonth(startDate: Date, endDate: Date): boolean;
    getWeek(date: Date, firstDayOfWeek: number): number;
    createDatetime(year: number, month: number, date: number, hour: number, minute: number): Date;
    getFirstDateOfMonth(date: Date): Date;
    getHourNames(): string[];
    getMinuteNames(): string[];
    addCalendarYears(date: Date, years: number): Date;
    addCalendarMonths(date: Date, months: number): Date;
    addCalendarDays(date: Date, days: number): Date;
    addCalendarHours(date: Date, hours: number): Date;
    addCalendarMinutes(date: Date, minutes: number): Date;
    toIso8601(date: Date): string;
    private getDateInNextMonth;
    /**
     * Strip out unicode LTR and RTL characters. Edge and IE insert these into formatted dates while
     * other browsers do not. We remove them to make output consistent and because they interfere with
     * date parsing.
     * @param str The string to strip direction characters from.
     * @returns The stripped string.
     */
    private _stripDirectionalityCharacters;
    /**
     * Pads a number to make it two digits.
     * @param n The number to pad.
     * @returns The padded number.
     */
    private _2digit;
    /** Creates a date but allows the month and date to overflow. */
    private _createDateWithOverflow;
    static ɵfac: i0.ɵɵFactoryDeclaration<NativeDatetimeAdapter, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<NativeDatetimeAdapter>;
}

declare const MTX_NATIVE_DATETIME_FORMATS: MtxDatetimeFormats;

declare class MtxToObservablePipe implements PipeTransform {
    transform(value: Observable<any> | unknown): Observable<any>;
    static ɵfac: i0.ɵɵFactoryDeclaration<MtxToObservablePipe, never>;
    static ɵpipe: i0.ɵɵPipeDeclaration<MtxToObservablePipe, "toObservable", true>;
}

declare class MtxIsTemplateRefPipe implements PipeTransform {
    transform(obj: any): obj is TemplateRef<any>;
    static ɵfac: i0.ɵɵFactoryDeclaration<MtxIsTemplateRefPipe, never>;
    static ɵpipe: i0.ɵɵPipeDeclaration<MtxIsTemplateRefPipe, "isTemplateRef", true>;
}

declare class MtxPipesModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<MtxPipesModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<MtxPipesModule, never, [typeof i1$1.CommonModule, typeof MtxToObservablePipe, typeof MtxIsTemplateRefPipe], [typeof MtxToObservablePipe, typeof MtxIsTemplateRefPipe]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<MtxPipesModule>;
}

export { DatetimeAdapter, MTX_DATETIME_FORMATS, MTX_NATIVE_DATETIME_FORMATS, MtxIsTemplateRefPipe, MtxNativeDatetimeModule, MtxPipesModule, MtxToObservablePipe, NativeDatetimeAdapter, NativeDatetimeModule, provideNativeDatetimeAdapter };
export type { MtxDatetimeFormats };
