import * as polytype from 'polytype';
import * as _angular_core from '@angular/core';
import { EventEmitter } from '@angular/core';
import { MXInputBaseValueComponent, MXLookComponent, AXEvent, AXFocusEvent } from '@acorex/cdk/common';
import { MXCalendarBaseComponent, AXDateTimePickerType, AXCalendarNavigateEvent } from '@acorex/components/calendar';
import { AXDateTimeInputComponent } from '@acorex/components/datetime-input';
import { AXDateTimePickerComponent } from '@acorex/components/datetime-picker';
import { AXDecoratorGenericComponent } from '@acorex/components/decorators';
import { MXDropdownBoxBaseComponent, AXDropdownBoxComponent } from '@acorex/components/dropdown';

declare const AXDateTimeBoxComponent_base: polytype.Polytype.ClusteredConstructor<[{
    new (): MXInputBaseValueComponent<Date>;
    ɵfac: _angular_core.ɵɵFactoryDeclaration<MXInputBaseValueComponent<any>, never>;
    ɵprov: _angular_core.ɵɵInjectableDeclaration<MXInputBaseValueComponent<any>>;
}, typeof MXCalendarBaseComponent, typeof MXDropdownBoxBaseComponent, typeof MXLookComponent, typeof AXDecoratorGenericComponent]>;
/**
 * Represents a date and time input component that allows user interaction and triggers events.
 *
 * @category Components
 */
declare class AXDateTimeBoxComponent extends AXDateTimeBoxComponent_base {
    #private;
    /**
     *  @ignore
     */
    protected input: AXDateTimeInputComponent;
    /**
     *  @ignore
     */
    protected pickerRef: AXDateTimePickerComponent;
    /**
     *  @ignore
     */
    protected dropdown: AXDropdownBoxComponent;
    /**
     * Emitted when the format of the component changes.
     *
     * @event
     */
    formatChange: EventEmitter<string>;
    /**
     * Indicates whether typing is allowed in the component.
     *
     * @defaultValue false
     */
    readonly allowTyping: _angular_core.InputSignal<boolean>;
    readonly picker: _angular_core.InputSignal<AXDateTimePickerType>;
    /**
     * @description The calendar type to use for the datetime input.
     */
    readonly calendar: _angular_core.InputSignal<string>;
    readonly weekend: _angular_core.InputSignal<number[]>;
    readonly weekdays: _angular_core.InputSignal<number[]>;
    /**
     * @deprecated use locale & mode instead
     */
    readonly format: _angular_core.InputSignal<string>;
    protected _editingDateObj: _angular_core.WritableSignal<Date>;
    protected _calendarSystem: _angular_core.WritableSignal<string>;
    private _format;
    /**
     *  @ignore
     */
    protected _handleInputModelChange(value: Date | null): void;
    /**
     *  @ignore
     */
    protected _handlePickerModelChange(value: Date | null): void;
    /**
     *  @ignore
     */
    protected _handleOnOpenedEvent(e: AXEvent): void;
    /**
     *  @ignore
     */
    protected _handleOnClosedEvent(e: AXEvent): void;
    /**
     *  @ignore
     */
    protected _handleInputOnFocusEvent(e: AXFocusEvent): void;
    /**
     *  @ignore
     */
    protected _handleInputOnBlurEvent(e: AXFocusEvent): void;
    /**
     *  @ignore
     */
    protected _handleCalendarOnNavigate(e: AXCalendarNavigateEvent): void;
    /**
     * Handles changes to the internal value.
     * @param value The new value that was set.
     * @ignore
     */
    internalValueChanged(value: any): void;
    /**
     *  @ignore
     */
    protected _handleInputOnClick(): void;
    private get __hostName();
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXDateTimeBoxComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXDateTimeBoxComponent, "ax-datetime-box", never, { "disabled": { "alias": "disabled"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "minValue": { "alias": "minValue"; "required": false; }; "maxValue": { "alias": "maxValue"; "required": false; }; "value": { "alias": "value"; "required": false; }; "state": { "alias": "state"; "required": false; }; "name": { "alias": "name"; "required": false; }; "depth": { "alias": "depth"; "required": false; }; "id": { "alias": "id"; "required": false; }; "type": { "alias": "type"; "required": false; }; "look": { "alias": "look"; "required": false; }; "holidayDates": { "alias": "holidayDates"; "required": false; }; "allowTyping": { "alias": "allowTyping"; "required": false; "isSignal": true; }; "picker": { "alias": "picker"; "required": false; "isSignal": true; }; "calendar": { "alias": "calendar"; "required": false; "isSignal": true; }; "weekend": { "alias": "weekend"; "required": false; "isSignal": true; }; "weekdays": { "alias": "weekdays"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "stateChange": "stateChange"; "onValueChanged": "onValueChanged"; "onBlur": "onBlur"; "onFocus": "onFocus"; "onOpened": "onOpened"; "onClosed": "onClosed"; "readonlyChange": "readonlyChange"; "disabledChange": "disabledChange"; "formatChange": "formatChange"; }, never, ["ax-prefix", "ax-clear-button", "ax-suffix", "ax-validation-rule"], true, never>;
}

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

export { AXDateTimeBoxComponent, AXDateTimeBoxModule };
