import * as i0 from '@angular/core';
import { OnInit, OnChanges, TemplateRef, EventEmitter, SimpleChanges } from '@angular/core';
import { CandyDate } from 'ng-zorro-antd/core/time';
import { NzSelectSizeType } from 'ng-zorro-antd/select';
import { Direction } from '@angular/cdk/bidi';
import { ControlValueAccessor } from '@angular/forms';

/**
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
 */

declare class NzCalendarHeaderComponent implements OnInit, OnChanges {
    private readonly dateHelper;
    private readonly i18n;
    mode: 'month' | 'year';
    fullscreen: boolean;
    activeDate: CandyDate;
    nzCustomHeader?: string | TemplateRef<void>;
    readonly modeChange: EventEmitter<"month" | "year">;
    readonly yearChange: EventEmitter<number>;
    readonly monthChange: EventEmitter<number>;
    yearOffset: number;
    yearTotal: number;
    years: Array<{
        label: string;
        value: number;
    }>;
    months: Array<{
        label: string;
        value: number;
    }>;
    get activeYear(): number;
    get activeMonth(): number;
    get size(): NzSelectSizeType;
    get yearTypeText(): string;
    get monthTypeText(): string;
    ngOnInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    updateYear(year: number): void;
    private setUpYears;
    private setUpMonths;
    static ɵfac: i0.ɵɵFactoryDeclaration<NzCalendarHeaderComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<NzCalendarHeaderComponent, "nz-calendar-header", ["nzCalendarHeader"], { "mode": { "alias": "mode"; "required": false; }; "fullscreen": { "alias": "fullscreen"; "required": false; }; "activeDate": { "alias": "activeDate"; "required": false; }; "nzCustomHeader": { "alias": "nzCustomHeader"; "required": false; }; }, { "modeChange": "modeChange"; "yearChange": "yearChange"; "monthChange": "monthChange"; }, never, never, true, never>;
    static ngAcceptInputType_fullscreen: unknown;
}

/**
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
 */

type NzCalendarMode = 'month' | 'year';
type NzCalendarDateTemplate = TemplateRef<{
    $implicit: Date;
}>;
declare class NzCalendarComponent implements ControlValueAccessor, OnChanges, OnInit {
    private cdr;
    private directionality;
    private destroyRef;
    activeDate: CandyDate;
    prefixCls: string;
    dir: Direction;
    private onChangeFn;
    private onTouchFn;
    nzMode: NzCalendarMode;
    nzValue?: Date;
    nzDisabledDate?: (date: Date) => boolean;
    readonly nzModeChange: EventEmitter<NzCalendarMode>;
    readonly nzPanelChange: EventEmitter<{
        date: Date;
        mode: NzCalendarMode;
    }>;
    readonly nzSelectChange: EventEmitter<Date>;
    readonly nzValueChange: EventEmitter<Date>;
    /**
     * Cannot use @Input and @ContentChild on one variable
     * because { static: false } will make @Input property get delayed
     **/
    nzDateCell?: NzCalendarDateTemplate;
    nzDateCellChild?: NzCalendarDateTemplate;
    get dateCell(): NzCalendarDateTemplate;
    nzDateFullCell?: NzCalendarDateTemplate;
    nzDateFullCellChild?: NzCalendarDateTemplate;
    get dateFullCell(): NzCalendarDateTemplate;
    nzMonthCell?: NzCalendarDateTemplate;
    nzMonthCellChild?: NzCalendarDateTemplate;
    get monthCell(): NzCalendarDateTemplate;
    nzMonthFullCell?: NzCalendarDateTemplate;
    nzMonthFullCellChild?: NzCalendarDateTemplate;
    get monthFullCell(): NzCalendarDateTemplate;
    nzCustomHeader?: string | TemplateRef<void>;
    nzFullscreen: boolean;
    ngOnInit(): void;
    onModeChange(mode: NzCalendarMode): void;
    onYearSelect(year: number): void;
    onMonthSelect(month: number): void;
    onDateSelect(date: CandyDate): void;
    writeValue(value: Date | null): void;
    registerOnChange(fn: (date: Date) => void): void;
    registerOnTouched(fn: () => void): void;
    private updateDate;
    ngOnChanges(changes: SimpleChanges): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<NzCalendarComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<NzCalendarComponent, "nz-calendar", ["nzCalendar"], { "nzMode": { "alias": "nzMode"; "required": false; }; "nzValue": { "alias": "nzValue"; "required": false; }; "nzDisabledDate": { "alias": "nzDisabledDate"; "required": false; }; "nzDateCell": { "alias": "nzDateCell"; "required": false; }; "nzDateFullCell": { "alias": "nzDateFullCell"; "required": false; }; "nzMonthCell": { "alias": "nzMonthCell"; "required": false; }; "nzMonthFullCell": { "alias": "nzMonthFullCell"; "required": false; }; "nzCustomHeader": { "alias": "nzCustomHeader"; "required": false; }; "nzFullscreen": { "alias": "nzFullscreen"; "required": false; }; }, { "nzModeChange": "nzModeChange"; "nzPanelChange": "nzPanelChange"; "nzSelectChange": "nzSelectChange"; "nzValueChange": "nzValueChange"; }, ["nzDateCellChild", "nzDateFullCellChild", "nzMonthCellChild", "nzMonthFullCellChild"], never, true, never>;
    static ngAcceptInputType_nzFullscreen: unknown;
}

declare class NzDateCellDirective {
    static ɵfac: i0.ɵɵFactoryDeclaration<NzDateCellDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<NzDateCellDirective, "[nzDateCell]", ["nzDateCell"], {}, {}, never, never, true, never>;
}
declare class NzMonthCellDirective {
    static ɵfac: i0.ɵɵFactoryDeclaration<NzMonthCellDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<NzMonthCellDirective, "[nzMonthCell]", ["nzMonthCell"], {}, {}, never, never, true, never>;
}
declare class NzDateFullCellDirective {
    static ɵfac: i0.ɵɵFactoryDeclaration<NzDateFullCellDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<NzDateFullCellDirective, "[nzDateFullCell]", ["nzDateFullCell"], {}, {}, never, never, true, never>;
}
declare class NzMonthFullCellDirective {
    static ɵfac: i0.ɵɵFactoryDeclaration<NzMonthFullCellDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<NzMonthFullCellDirective, "[nzMonthFullCell]", ["nzMonthFullCell"], {}, {}, never, never, true, never>;
}

declare class NzCalendarModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<NzCalendarModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<NzCalendarModule, never, [typeof NzCalendarHeaderComponent, typeof NzCalendarComponent, typeof NzDateCellDirective, typeof NzDateFullCellDirective, typeof NzMonthCellDirective, typeof NzMonthFullCellDirective], [typeof NzCalendarComponent, typeof NzDateCellDirective, typeof NzDateFullCellDirective, typeof NzMonthCellDirective, typeof NzMonthFullCellDirective]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<NzCalendarModule>;
}

export { NzCalendarComponent, NzCalendarHeaderComponent, NzCalendarModule, NzDateCellDirective, NzDateFullCellDirective, NzMonthCellDirective, NzMonthFullCellDirective };
export type { NzCalendarMode };
