import * as i0 from '@angular/core';
import { OnInit, OnChanges, EventEmitter, SimpleChanges } from '@angular/core';
import { JalaliDateTimeCalendar, JalaliDateTimePeriod } from '@webilix/jalali-date-time';
import { ActivatedRoute, Router } from '@angular/router';
import { NgxHelperContainerService } from '@webilix/ngx-helper-m3';

type NgxCalendar = 'DATE' | 'WEEK' | 'MONTH' | 'YEAR' | 'PERIOD';
interface INgxCalendar {
    readonly calendar: NgxCalendar;
    readonly period: {
        readonly from: Date;
        readonly to: Date;
    };
    readonly title: string;
}
interface INgxCalendarMoment {
    readonly moment: Date;
    readonly title: string;
    readonly jalali: string;
}
interface INgxCalendarDate {
    readonly date: Date;
    readonly title: string;
    readonly jalali: string;
}
interface INgxCalendarWeek {
    readonly period: {
        readonly from: Date;
        readonly to: Date;
    };
    readonly title: string;
}
interface INgxCalendarMonth {
    readonly period: {
        readonly from: Date;
        readonly to: Date;
    };
    readonly title: string;
    readonly jalali: string;
}
interface INgxCalendarYear {
    readonly period: {
        readonly from: Date;
        readonly to: Date;
    };
    readonly year: number;
}

declare class NgxCalendarDateComponent implements OnInit, OnChanges {
    private className;
    value?: Date;
    minDate?: 'NOW' | Date;
    maxDate?: 'NOW' | Date;
    onChange: EventEmitter<INgxCalendarDate>;
    view: 'CALENDAR' | 'MONTH';
    values: {
        today: string;
        selected: string;
        minDate: string;
        maxDate: string;
    };
    calendar: JalaliDateTimeCalendar;
    year: number;
    years: number[];
    seasons: {
        title: string;
        month: string;
    }[][];
    private jalali;
    ngOnInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    formatDate(date: Date): string;
    initValues(): void;
    changeMonth(change: number): void;
    setDate(value: string): void;
    toggleView(): void;
    changeYear(year?: number): void;
    setMonth(month: string): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgxCalendarDateComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<NgxCalendarDateComponent, "ngx-calendar-date", never, { "value": { "alias": "value"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; }, { "onChange": "onChange"; }, never, never, true, never>;
}

declare class NgxCalendarMomentComponent implements OnInit, OnChanges {
    private className;
    value?: Date;
    minDate?: 'NOW' | Date;
    maxDate?: 'NOW' | Date;
    onChange: EventEmitter<INgxCalendarMoment>;
    canSubmit: boolean;
    dateString: string;
    hour: string;
    hours: string[];
    minute: string;
    minutes: string[];
    private jalali;
    ngOnInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    formatDate(date: Date): string;
    getMinMax(): {
        minDate: Date | undefined;
        maxDate: Date | undefined;
    };
    initValues(): void;
    updateValue(): void;
    setDate(date: INgxCalendarDate): void;
    checkHour(hour: string): boolean;
    setHour(hour: string): void;
    checkMinute(minute: string): boolean;
    setMinute(minute: string): void;
    onSubmit(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgxCalendarMomentComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<NgxCalendarMomentComponent, "ngx-calendar-moment", never, { "value": { "alias": "value"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; }, { "onChange": "onChange"; }, never, never, true, never>;
}

declare class NgxCalendarWeekComponent implements OnInit, OnChanges {
    private className;
    value?: Date | {
        from: Date;
        to: Date;
    };
    minDate?: 'NOW' | Date;
    maxDate?: 'NOW' | Date;
    onChange: EventEmitter<INgxCalendarWeek>;
    view: 'CALENDAR' | 'MONTH';
    values: {
        today: string;
        selected: string;
        minDate: string;
        maxDate: string;
    };
    calendar: JalaliDateTimeCalendar;
    year: number;
    years: number[];
    seasons: {
        title: string;
        month: string;
    }[][];
    private jalali;
    ngOnInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    formatDate(date: Date): string;
    initValues(): void;
    changeMonth(change: number): void;
    setDate(value: string): void;
    toggleView(): void;
    changeYear(year?: number): void;
    setMonth(month: string): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgxCalendarWeekComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<NgxCalendarWeekComponent, "ngx-calendar-week", never, { "value": { "alias": "value"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; }, { "onChange": "onChange"; }, never, never, true, never>;
}

declare class NgxCalendarMonthComponent implements OnInit, OnChanges {
    private className;
    value?: Date | {
        from: Date;
        to: Date;
    };
    minDate?: 'NOW' | Date;
    maxDate?: 'NOW' | Date;
    onChange: EventEmitter<INgxCalendarMonth>;
    values: {
        today: string;
        selected: string;
        minDate: string;
        maxDate: string;
    };
    year: number;
    years: number[];
    seasons: {
        title: string;
        month: string;
    }[][];
    private jalali;
    ngOnInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    initValues(): void;
    changeYear(year?: number): void;
    setMonth(value: string): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgxCalendarMonthComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<NgxCalendarMonthComponent, "ngx-calendar-month", never, { "value": { "alias": "value"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; }, { "onChange": "onChange"; }, never, never, true, never>;
}

declare class NgxCalendarYearComponent implements OnInit, OnChanges {
    private className;
    value?: Date | {
        from: Date;
        to: Date;
    };
    minDate?: 'NOW' | Date;
    maxDate?: 'NOW' | Date;
    onChange: EventEmitter<INgxCalendarYear>;
    values: {
        today: string;
        selected: string;
        minDate: string;
        maxDate: string;
    };
    years: number[];
    private jalali;
    ngOnInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    initValues(): void;
    changeYear(year: number): void;
    setYear(value: string): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgxCalendarYearComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<NgxCalendarYearComponent, "ngx-calendar-year", never, { "value": { "alias": "value"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; }, { "onChange": "onChange"; }, never, never, true, never>;
}

interface IContainer {
    readonly value?: {
        readonly from: Date;
        readonly to: Date;
    };
    readonly minDate?: 'NOW' | Date;
    readonly maxDate?: 'NOW' | Date;
}

interface ICalendar {
    readonly title: string;
    readonly value: Date;
    readonly minDate: 'NOW' | Date;
    readonly maxDate: 'NOW' | Date;
}
interface ICalendarMoment extends ICalendar {
}
interface ICalendarDate extends ICalendar {
}
interface ICalendarWeek extends Omit<ICalendar, 'value'> {
    readonly value: Date | {
        readonly from: Date;
        readonly to: Date;
    };
}
interface ICalendarMonth extends Omit<ICalendar, 'value'> {
    readonly value: Date | {
        readonly from: Date;
        readonly to: Date;
    };
}
interface ICalendarYear extends Omit<ICalendar, 'value'> {
    readonly value: Date | {
        readonly from: Date;
        readonly to: Date;
    };
}
declare class NgxCalendarClass<R> {
    private readonly calendar;
    private readonly container;
    private readonly ngxHelperContainerService;
    private readonly title?;
    constructor(calendar: NgxCalendar | 'MOMENT', container: IContainer, ngxHelperContainerService: NgxHelperContainerService, title?: string | undefined);
    private getTitle;
    dialog(onResponse: (response: R) => void): void;
    dialog(onResponse: (response: R) => void, onDismiss: () => void): void;
    bottomSheet(onResponse: (response: R) => void): void;
    bottomSheet(onResponse: (response: R) => void, onDismiss: () => void): void;
}
declare class NgxCalendarService {
    private readonly ngxHelperContainerService;
    constructor(ngxHelperContainerService: NgxHelperContainerService);
    getDate(): NgxCalendarClass<INgxCalendarDate>;
    getDate(options: Partial<ICalendarDate>): NgxCalendarClass<INgxCalendarDate>;
    getMoment(): NgxCalendarClass<INgxCalendarMoment>;
    getMoment(options: Partial<ICalendarMoment>): NgxCalendarClass<INgxCalendarMoment>;
    getWeek(): NgxCalendarClass<INgxCalendarWeek>;
    getWeek(options: Partial<ICalendarWeek>): NgxCalendarClass<INgxCalendarWeek>;
    getMonth(): NgxCalendarClass<INgxCalendarMonth>;
    getMonth(options: Partial<ICalendarMonth>): NgxCalendarClass<INgxCalendarMonth>;
    getYear(): NgxCalendarClass<INgxCalendarYear>;
    getYear(options: Partial<ICalendarYear>): NgxCalendarClass<INgxCalendarYear>;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgxCalendarService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<NgxCalendarService>;
}

declare class NgxCalendarComponent implements OnInit {
    private readonly activatedRoute;
    private readonly router;
    private readonly ngxCalendarService;
    private className;
    cssWidth: string;
    cssHeight: string;
    calendars: NgxCalendar[];
    minDate?: 'NOW' | Date;
    maxDate?: 'NOW' | Date;
    width?: string;
    height: string;
    route: string[];
    container: 'DIALOG' | 'BOTTONSHEET';
    onChanged: EventEmitter<INgxCalendar>;
    calendar: NgxCalendar;
    calendarTitle: string;
    periodTitle: string | [string, string];
    from: Date;
    to: Date;
    previous: {
        active: boolean;
        date: Date;
    };
    next: {
        active: boolean;
        date: Date;
    };
    private jalali;
    list: NgxCalendar[];
    calendarsList: {
        [key in NgxCalendar]: {
            title: string;
            icon: string;
            method: (v: number, d?: Date, t?: string) => JalaliDateTimePeriod;
        };
    };
    constructor(activatedRoute: ActivatedRoute, router: Router, ngxCalendarService: NgxCalendarService);
    ngOnInit(): void;
    getMinMax(): {
        minDate: Date | undefined;
        maxDate: Date | undefined;
    };
    updateView(): void;
    setCalendar(calendar: NgxCalendar, from?: Date, to?: Date): void;
    setPrevious(): void;
    setNext(): void;
    getDate(): void;
    getWeek(): void;
    getMonth(): void;
    getYear(): void;
    getPeriodFrom(): void;
    getPeriodTo(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgxCalendarComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<NgxCalendarComponent, "ngx-calendar", never, { "calendars": { "alias": "calendars"; "required": true; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "width": { "alias": "width"; "required": false; }; "height": { "alias": "height"; "required": false; }; "route": { "alias": "route"; "required": false; }; "container": { "alias": "container"; "required": false; }; }, { "onChanged": "onChanged"; }, never, never, true, never>;
}

export { NgxCalendarComponent, NgxCalendarDateComponent, NgxCalendarMomentComponent, NgxCalendarMonthComponent, NgxCalendarService, NgxCalendarWeekComponent, NgxCalendarYearComponent };
export type { INgxCalendar, INgxCalendarDate, INgxCalendarMoment, INgxCalendarMonth, INgxCalendarWeek, INgxCalendarYear, NgxCalendar };
