import * as polytype from 'polytype';
import * as _angular_core from '@angular/core';
import { OnInit, InjectionToken } from '@angular/core';
import { MXValueComponent, AXValueChangedEvent } from '@acorex/cdk/common';
import { MXCalendarBaseComponent, AXCalendarNavigationLookType, AXCalendarYearRange, AXDateTimePickerType, AXCalendarNavigateEvent } from '@acorex/components/calendar';
import { AXTabsComponent, AXTabStripChangedEvent } from '@acorex/components/tabs';
import { AXDateTimeParts, AXDateTime } from '@acorex/core/date-time';

declare const AXDateTimePickerComponent_base: polytype.Polytype.ClusteredConstructor<[typeof MXCalendarBaseComponent, {
    new (): MXValueComponent<Date>;
    ɵfac: _angular_core.ɵɵFactoryDeclaration<MXValueComponent<any>, never>;
    ɵprov: _angular_core.ɵɵInjectableDeclaration<MXValueComponent<any>>;
}]>;
/**
 * allows users to select a date and time from a calendar and time picker interface.
 *
 * @category Components
 */
declare class AXDateTimePickerComponent extends AXDateTimePickerComponent_base implements OnInit {
    #private;
    private formatService;
    weekend: _angular_core.InputSignal<number[]>;
    weekdays: _angular_core.InputSignal<number[]>;
    /**
     * Day view navigation style of the embedded calendar.
     */
    calendarLook: _angular_core.InputSignal<AXCalendarNavigationLookType>;
    /**
     * Years shown in the year selector when `calendarLook` is `select`.
     * Use a number for equal past/future ranges, or `{ past, future }` for asymmetric ranges.
     * `minValue` and `maxValue` take priority when set.
     */
    yearRange: _angular_core.InputSignal<AXCalendarYearRange>;
    protected buttonText: _angular_core.Signal<"dateTime.today" | "dateTime.now">;
    private defaultConfig;
    protected pickerHoursMinValue: _angular_core.WritableSignal<number>;
    protected pickerHoursMaxValue: _angular_core.WritableSignal<number>;
    protected pickerMinuteMinValue: _angular_core.WritableSignal<number>;
    protected pickerMinuteMaxValue: _angular_core.WritableSignal<number>;
    protected pickerSecondMinValue: _angular_core.WritableSignal<number>;
    protected pickerSecondMaxValue: _angular_core.WritableSignal<number>;
    /**
     *  @ignore
     */
    private _currentTimeButton;
    /**
     * Determines whether a button for selecting the current time is displayed.
     */
    get currentTimeButton(): boolean;
    /**
     * Sets whether the button for selecting the current time is displayed.
     */
    set currentTimeButton(v: boolean);
    /**
     *  @ignore
     */
    protected tabs: AXTabsComponent;
    /**
     *  @ignore
     */
    protected hours: any[];
    minutes: any[];
    /**
     *  @ignore
     */
    protected _parts: AXDateTimeParts;
    /**
     *  @ignore
     */
    protected _activePart: _angular_core.WritableSignal<"date" | "time">;
    /**
     *  @ignore
     */
    protected get _hasDatePart(): boolean;
    /**
     *  @ignore
     */
    protected get _hasTimePart(): boolean;
    /**
     * @description The calendar type to use for the datetime input.
     */
    calendar: _angular_core.InputSignal<string>;
    protected readonly _calendarSystem: _angular_core.Signal<string>;
    editingDateObj: _angular_core.WritableSignal<AXDateTime>;
    picker: _angular_core.InputSignal<AXDateTimePickerType>;
    protected readonly _resolvedFormat: _angular_core.Signal<string>;
    /**
     * @deprecated use locale & mode instead
     */
    format: _angular_core.InputSignal<string>;
    /**
     *  @ignore
     */
    ngOnInit(): Promise<void>;
    /**
     * Handles changes to the internal value of the component.
     * @param value - The new date value. If not provided, defaults to the current date.
     */
    internalValueChanged(value?: Date): void;
    /**
     *  @ignore
     */
    protected _handleViewChanged(e: AXTabStripChangedEvent): void;
    /**
     *  @ignore
     */
    protected _handlePickerOnValueChanged(e: AXValueChangedEvent<Date>, part: string): void;
    /**
     *  @ignore
     */
    protected _handleCalendarOnNavigate(e: AXCalendarNavigateEvent): void;
    /**
     *  @ignore
     */
    protected _handleCalendarOnValueChanged(e: AXValueChangedEvent<Date>): void;
    private checkSelectedMinValue;
    private checkSelectedMaxValue;
    /**
     *  @ignore
     */
    private _detectParts;
    /**
     *  @ignore
     */
    protected _handleSetClick(): void;
    /**
     *  @ignore
     */
    protected _handleNowClick(): void;
    /**
     *  @ignore
     */
    protected isDisabled(date: AXDateTime): boolean;
    /**
     *  @ignore
     */
    protected internalSetValue(value: Date): Date | null;
    protected isTodayDisabled(): boolean;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXDateTimePickerComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXDateTimePickerComponent, "ax-datetime-picker", never, { "disabled": { "alias": "disabled"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "value": { "alias": "value"; "required": false; }; "state": { "alias": "state"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "depth": { "alias": "depth"; "required": false; }; "activeView": { "alias": "activeView"; "required": false; }; "minValue": { "alias": "minValue"; "required": false; }; "maxValue": { "alias": "maxValue"; "required": false; }; "disabledDates": { "alias": "disabledDates"; "required": false; }; "holidayDates": { "alias": "holidayDates"; "required": false; }; "type": { "alias": "type"; "required": false; }; "cellTemplate": { "alias": "cellTemplate"; "required": false; }; "cellClass": { "alias": "cellClass"; "required": false; }; "showNavigation": { "alias": "showNavigation"; "required": false; }; "weekend": { "alias": "weekend"; "required": false; "isSignal": true; }; "weekdays": { "alias": "weekdays"; "required": false; "isSignal": true; }; "calendarLook": { "alias": "calendarLook"; "required": false; "isSignal": true; }; "yearRange": { "alias": "yearRange"; "required": false; "isSignal": true; }; "currentTimeButton": { "alias": "currentTimeButton"; "required": false; }; "calendar": { "alias": "calendar"; "required": false; "isSignal": true; }; "picker": { "alias": "picker"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "stateChange": "stateChange"; "onValueChanged": "onValueChanged"; "onBlur": "onBlur"; "onFocus": "onFocus"; "onClick": "onClick"; "readonlyChange": "readonlyChange"; "disabledChange": "disabledChange"; "depthChange": "depthChange"; "typeChange": "typeChange"; "activeViewChange": "activeViewChange"; "disabledDatesChange": "disabledDatesChange"; "holidayDatesChange": "holidayDatesChange"; "onNavigate": "onNavigate"; "onSlotClick": "onSlotClick"; }, never, never, true, never>;
}

interface AXDateTimePickerConfig {
    currentTimeButton: boolean;
}
declare const AX_DATETIME_PICKER_CONFIG: InjectionToken<AXDateTimePickerConfig>;
declare const AXDateTimePickerDefaultConfig: AXDateTimePickerConfig;
type PartialDateTimePickerConfig = Partial<AXDateTimePickerConfig>;
declare function dateTimePickerConfig(config?: PartialDateTimePickerConfig): AXDateTimePickerConfig;

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

export { AXDateTimePickerComponent, AXDateTimePickerDefaultConfig, AXDateTimePickerModule, AX_DATETIME_PICKER_CONFIG, dateTimePickerConfig };
export type { AXDateTimePickerConfig, PartialDateTimePickerConfig };
