import * as _angular_cdk_overlay from '@angular/cdk/overlay';
import { ConnectedOverlayPositionChange } from '@angular/cdk/overlay';
import * as _angular_core from '@angular/core';
import { OnInit, AfterViewInit, OnChanges, ElementRef, TemplateRef, EventEmitter, SimpleChanges, DebugElement } from '@angular/core';
import * as _angular_cdk_bidi from '@angular/cdk/bidi';
import { ControlValueAccessor } from '@angular/forms';
import { Observable } from 'rxjs';
import { NzConfigKey, NzConfigService } from 'ng-zorro-antd/core/config';
import { NgClassInterface, NzValidateStatus, NzSizeLDSType, NzStatus, NzVariant, NzSafeAny, NzPlacement } from 'ng-zorro-antd/core/types';
import { NzI18nService } from 'ng-zorro-antd/i18n';
import * as i1 from 'ng-zorro-antd/space';
import { NzDateAdapter } from 'ng-zorro-antd/core/time';

declare class NzTimePickerComponent implements ControlValueAccessor, OnInit, AfterViewInit, OnChanges {
    readonly _nzModuleName: NzConfigKey;
    readonly nzConfigService: NzConfigService;
    protected readonly i18n: NzI18nService;
    protected readonly dir: _angular_core.WritableSignal<_angular_cdk_bidi.Direction>;
    private readonly elementRef;
    private readonly renderer;
    private readonly cdr;
    private readonly dateAdapter;
    private readonly platform;
    private readonly destroyRef;
    private _onChange?;
    private _onTouched?;
    private isNzDisableFirstChange;
    isInit: boolean;
    focused: boolean;
    inputValue: string;
    value: Date | null;
    preValue: Date | null;
    inputSize?: number;
    i18nPlaceHolder$: Observable<string | undefined>;
    prefixCls: string;
    statusCls: NgClassInterface;
    status: NzValidateStatus;
    hasFeedback: boolean;
    get origin(): ElementRef;
    inputRef: ElementRef<HTMLInputElement>;
    nzId: string | null;
    nzSize: NzSizeLDSType;
    nzStatus: NzStatus;
    nzVariant: NzVariant | undefined;
    nzHourStep: number;
    nzMinuteStep: number;
    nzSecondStep: number;
    nzClearText: string;
    nzNowText: string;
    nzOkText: string;
    nzPopupClassName: string;
    nzPlaceHolder: string;
    nzAddOn?: TemplateRef<void>;
    nzDefaultOpenValue?: Date;
    nzDisabledHours?: () => number[];
    nzDisabledMinutes?: (hour: number) => number[];
    nzDisabledSeconds?: (hour: number, minute: number) => number[];
    nzFormat: string;
    nzOpen: boolean;
    nzUse12Hours: boolean;
    nzSuffixIcon: string | TemplateRef<NzSafeAny>;
    readonly nzOpenChange: EventEmitter<boolean>;
    nzHideDisabledOptions: boolean;
    nzAllowEmpty: boolean;
    nzDisabled: boolean;
    nzAutoFocus: boolean;
    nzBackdrop: boolean;
    nzInputReadOnly: boolean;
    private readonly formSize;
    private readonly formVariant;
    private hasConfirmed;
    readonly nzPrefix: _angular_core.InputSignal<string | TemplateRef<void> | undefined>;
    readonly nzNeedConfirm: _angular_core.InputSignalWithTransform<boolean, unknown>;
    readonly nzPlacement: _angular_core.InputSignal<NzPlacement>;
    protected readonly currentPosition: _angular_core.WritableSignal<_angular_cdk_overlay.ConnectionPositionPair>;
    protected readonly overlayPositions: _angular_core.Signal<_angular_cdk_overlay.ConnectionPositionPair[]>;
    protected readonly timepickerAnimationEnter: _angular_core.Signal<string>;
    protected readonly timepickerAnimationLeave: _angular_core.Signal<string>;
    emitValue(value: Date | null): void;
    setValue(value: Date | null, syncPreValue?: boolean): void;
    open(): void;
    close(): void;
    updateAutoFocus(): void;
    onClickClearBtn(event: MouseEvent): void;
    onClickOutside(event: MouseEvent): void;
    onFocus(value: boolean): void;
    focus(): void;
    blur(): void;
    onKeyupEsc(): void;
    onKeyupEnter(): void;
    onInputChange(str: string): void;
    onPanelValueChange(value: Date): void;
    closePanel(): void;
    setCurrentValueAndClose(): void;
    onPositionChange(position: ConnectedOverlayPositionChange): void;
    protected finalSize: _angular_core.Signal<NzSizeLDSType | undefined>;
    protected readonly finalVariant: _angular_core.Signal<NzVariant>;
    protected dropdownTimePickerClass: _angular_core.Signal<string[]>;
    private size;
    private readonly variant;
    private compactSize;
    private nzFormStatusService;
    ngOnInit(): void;
    ngOnChanges({ nzUse12Hours, nzFormat, nzDisabled, nzAutoFocus, nzStatus, nzSize, nzVariant }: SimpleChanges): void;
    parseTimeString(str: string): void;
    ngAfterViewInit(): void;
    writeValue(time: Date | null | undefined): void;
    registerOnChange(fn: (time: Date | null) => void): void;
    registerOnTouched(fn: () => void): void;
    setDisabledState(isDisabled: boolean): void;
    private checkTimeValid;
    private setStatusStyles;
    private generateClass;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<NzTimePickerComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<NzTimePickerComponent, "nz-time-picker", ["nzTimePicker"], { "nzId": { "alias": "nzId"; "required": false; }; "nzSize": { "alias": "nzSize"; "required": false; }; "nzStatus": { "alias": "nzStatus"; "required": false; }; "nzVariant": { "alias": "nzVariant"; "required": false; }; "nzHourStep": { "alias": "nzHourStep"; "required": false; }; "nzMinuteStep": { "alias": "nzMinuteStep"; "required": false; }; "nzSecondStep": { "alias": "nzSecondStep"; "required": false; }; "nzClearText": { "alias": "nzClearText"; "required": false; }; "nzNowText": { "alias": "nzNowText"; "required": false; }; "nzOkText": { "alias": "nzOkText"; "required": false; }; "nzPopupClassName": { "alias": "nzPopupClassName"; "required": false; }; "nzPlaceHolder": { "alias": "nzPlaceHolder"; "required": false; }; "nzAddOn": { "alias": "nzAddOn"; "required": false; }; "nzDefaultOpenValue": { "alias": "nzDefaultOpenValue"; "required": false; }; "nzDisabledHours": { "alias": "nzDisabledHours"; "required": false; }; "nzDisabledMinutes": { "alias": "nzDisabledMinutes"; "required": false; }; "nzDisabledSeconds": { "alias": "nzDisabledSeconds"; "required": false; }; "nzFormat": { "alias": "nzFormat"; "required": false; }; "nzOpen": { "alias": "nzOpen"; "required": false; }; "nzUse12Hours": { "alias": "nzUse12Hours"; "required": false; }; "nzSuffixIcon": { "alias": "nzSuffixIcon"; "required": false; }; "nzHideDisabledOptions": { "alias": "nzHideDisabledOptions"; "required": false; }; "nzAllowEmpty": { "alias": "nzAllowEmpty"; "required": false; }; "nzDisabled": { "alias": "nzDisabled"; "required": false; }; "nzAutoFocus": { "alias": "nzAutoFocus"; "required": false; }; "nzBackdrop": { "alias": "nzBackdrop"; "required": false; }; "nzInputReadOnly": { "alias": "nzInputReadOnly"; "required": false; }; "nzPrefix": { "alias": "nzPrefix"; "required": false; "isSignal": true; }; "nzNeedConfirm": { "alias": "nzNeedConfirm"; "required": false; "isSignal": true; }; "nzPlacement": { "alias": "nzPlacement"; "required": false; "isSignal": true; }; }, { "nzOpenChange": "nzOpenChange"; }, never, never, true, [{ directive: typeof i1.NzSpaceCompactItemDirective; inputs: {}; outputs: {}; }]>;
    static ngAcceptInputType_nzUse12Hours: unknown;
    static ngAcceptInputType_nzHideDisabledOptions: unknown;
    static ngAcceptInputType_nzAllowEmpty: unknown;
    static ngAcceptInputType_nzDisabled: unknown;
    static ngAcceptInputType_nzAutoFocus: unknown;
    static ngAcceptInputType_nzInputReadOnly: 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
 */

declare class TimeHolder {
    selected12Hours: string | undefined;
    private _value;
    private _use12Hours;
    private _defaultOpenValue;
    private _changes;
    setMinutes(value: number, disabled: boolean): this;
    setHours(value: number, disabled: boolean): this;
    setSeconds(value: number, disabled: boolean): this;
    setUse12Hours(value: boolean): this;
    get changes(): Observable<Date>;
    setValue(value: Date | undefined, use12Hours?: boolean): this;
    initValue(): void;
    clear(): void;
    get isEmpty(): boolean;
    private _clear;
    private update;
    changed(): void;
    /**
     * @description
     * UI view hours
     * Get viewHours which is selected in `time-picker-panel` and its range is [12, 1, 2, ..., 11]
     */
    get viewHours(): number | undefined;
    setSelected12Hours(value: string | undefined): void;
    get value(): Date;
    get hours(): number | undefined;
    get minutes(): number | undefined;
    get seconds(): number | undefined;
    setDefaultOpenValue(value: Date): this;
    private calculateViewHour;
}

type NzTimePickerUnit = 'hour' | 'minute' | 'second' | '12-hour';
declare class NzTimePickerPanelComponent implements ControlValueAccessor, OnInit, OnChanges {
    protected readonly dateAdapter: NzDateAdapter<any, any>;
    private readonly ngZone;
    private readonly cdr;
    private readonly elementRef;
    private readonly destroyRef;
    private _nzHourStep;
    private _nzMinuteStep;
    private _nzSecondStep;
    private onChange?;
    private onTouch?;
    private _format;
    private _disabledHours?;
    private _disabledMinutes?;
    private _disabledSeconds?;
    private _allowEmpty;
    time: TimeHolder;
    hourEnabled: boolean;
    minuteEnabled: boolean;
    secondEnabled: boolean;
    firstScrolled: boolean;
    enabledColumns: number;
    hourRange: ReadonlyArray<{
        index: number;
        disabled: boolean;
    }>;
    minuteRange: ReadonlyArray<{
        index: number;
        disabled: boolean;
    }>;
    secondRange: ReadonlyArray<{
        index: number;
        disabled: boolean;
    }>;
    use12HoursRange: ReadonlyArray<{
        index: number;
        value: string;
    }>;
    hourListElement?: DebugElement;
    minuteListElement?: DebugElement;
    secondListElement?: DebugElement;
    use12HoursListElement?: DebugElement;
    nzInDatePicker: boolean;
    nzAddOn?: TemplateRef<void>;
    nzHideDisabledOptions: boolean;
    nzClearText?: string;
    nzNowText?: string;
    nzOkText?: string;
    nzPlaceHolder?: string | null;
    nzUse12Hours: boolean;
    nzDefaultOpenValue?: Date;
    readonly closePanel: EventEmitter<void>;
    set nzAllowEmpty(value: boolean);
    get nzAllowEmpty(): boolean;
    set nzDisabledHours(value: undefined | (() => number[]));
    get nzDisabledHours(): undefined | (() => number[]);
    set nzDisabledMinutes(value: undefined | ((hour: number) => number[]));
    get nzDisabledMinutes(): undefined | ((hour: number) => number[]);
    set nzDisabledSeconds(value: undefined | ((hour: number, minute: number) => number[]));
    get nzDisabledSeconds(): undefined | ((hour: number, minute: number) => number[]);
    set format(value: string);
    get format(): string;
    set nzHourStep(value: number);
    get nzHourStep(): number;
    set nzMinuteStep(value: number);
    get nzMinuteStep(): number;
    set nzSecondStep(value: number);
    get nzSecondStep(): number;
    buildHours(): void;
    buildMinutes(): void;
    buildSeconds(): void;
    build12Hours(): void;
    buildTimes(): void;
    scrollToTime(delay?: number): void;
    selectHour(hour: {
        index: number;
        disabled: boolean;
    }): void;
    selectMinute(minute: {
        index: number;
        disabled: boolean;
    }): void;
    selectSecond(second: {
        index: number;
        disabled: boolean;
    }): void;
    select12Hours(value: {
        index: number;
        value: string;
    }): void;
    scrollToSelected(instance: HTMLElement, index: number, duration: number | undefined, unit: NzTimePickerUnit): void;
    translateIndex(index: number, unit: NzTimePickerUnit): number;
    scrollTo(element: HTMLElement, to: number, duration: number): void;
    calcIndex(array: number[] | undefined, index: number): number;
    protected changed(): void;
    protected touched(): void;
    timeDisabled(value: Date): boolean;
    onClickNow(): void;
    onClickOk(): void;
    isSelectedHour(hour: {
        index: number;
        disabled: boolean;
    }): boolean;
    isSelectedMinute(minute: {
        index: number;
        disabled: boolean;
    }): boolean;
    isSelectedSecond(second: {
        index: number;
        disabled: boolean;
    }): boolean;
    isSelected12Hours(value: {
        index: number;
        value: string;
    }): boolean;
    formatTimeValue(): string;
    ngOnInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    writeValue(value: Date): void;
    registerOnChange(fn: (value: Date) => void): void;
    registerOnTouched(fn: () => void): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<NzTimePickerPanelComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<NzTimePickerPanelComponent, "nz-time-picker-panel", ["nzTimePickerPanel"], { "nzInDatePicker": { "alias": "nzInDatePicker"; "required": false; }; "nzAddOn": { "alias": "nzAddOn"; "required": false; }; "nzHideDisabledOptions": { "alias": "nzHideDisabledOptions"; "required": false; }; "nzClearText": { "alias": "nzClearText"; "required": false; }; "nzNowText": { "alias": "nzNowText"; "required": false; }; "nzOkText": { "alias": "nzOkText"; "required": false; }; "nzPlaceHolder": { "alias": "nzPlaceHolder"; "required": false; }; "nzUse12Hours": { "alias": "nzUse12Hours"; "required": false; }; "nzDefaultOpenValue": { "alias": "nzDefaultOpenValue"; "required": false; }; "nzAllowEmpty": { "alias": "nzAllowEmpty"; "required": false; }; "nzDisabledHours": { "alias": "nzDisabledHours"; "required": false; }; "nzDisabledMinutes": { "alias": "nzDisabledMinutes"; "required": false; }; "nzDisabledSeconds": { "alias": "nzDisabledSeconds"; "required": false; }; "format": { "alias": "format"; "required": false; }; "nzHourStep": { "alias": "nzHourStep"; "required": false; }; "nzMinuteStep": { "alias": "nzMinuteStep"; "required": false; }; "nzSecondStep": { "alias": "nzSecondStep"; "required": false; }; }, { "closePanel": "closePanel"; }, never, never, true, never>;
    static ngAcceptInputType_nzInDatePicker: unknown;
    static ngAcceptInputType_nzUse12Hours: unknown;
    static ngAcceptInputType_nzAllowEmpty: unknown;
    static ngAcceptInputType_nzHourStep: unknown;
    static ngAcceptInputType_nzMinuteStep: unknown;
    static ngAcceptInputType_nzSecondStep: unknown;
}

declare class NzTimePickerModule {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<NzTimePickerModule, never>;
    static ɵmod: _angular_core.ɵɵNgModuleDeclaration<NzTimePickerModule, never, [typeof NzTimePickerComponent, typeof NzTimePickerPanelComponent], [typeof NzTimePickerPanelComponent, typeof NzTimePickerComponent]>;
    static ɵinj: _angular_core.ɵɵInjectorDeclaration<NzTimePickerModule>;
}

export { NzTimePickerComponent, NzTimePickerModule, NzTimePickerPanelComponent };
export type { NzTimePickerUnit };
