import { ChangeDetectorRef, EventEmitter, OnChanges, OnDestroy, OnInit } from '@angular/core';
import { AbstractControl, ControlContainer, ControlValueAccessor } from '@angular/forms';
import { TranslateService } from '@ngx-translate/core';
import { QdPopoverOnClickDirective } from '../../core/popover/popover-on-click/popover-on-click.directive';
import { QdFormDatepickerConfiguration, QdFormTimepickerConfiguration, QdInputValue, QdInputValueWithUnit } from '../model/forms.interface';
import { QdFormsActionEmitterService } from '../shared/services/action-emitter.service';
import { TimePickerService } from './service/timepicker.service';
import { QdEventBrokerService } from '../../core/services/event-broker.service';
import * as i0 from "@angular/core";
type QdInputRawEventValue = QdInputValue | QdInputValueWithUnit | undefined;
/**
 * The **QdDatepicker** component provides a FormElement that can be used to select a date.<br />
 * The format of the input and the output is the Javascript Date Object. It can be used with Quadrel Reactive Forms or with model binding.
 *
 * ####**Usage with Reactive Forms**
 *
 * ```ts
 * form = new QdFormGroup({
 *   datepicker: new QdFormControl(new Date(2023, 3, 22), QdValidators.date())
 * });
 * ```
 * ```html
 * <form [formGroup]="form">
 *   <qd-datepicker [formControlName]="datepicker" [config]="config"></qd-datepicker>
 * </form>
 * ```
 *
 * ####**Usage with Model Binding**
 * ```ts
 * value = new Date(2023, 3, 22);
 * ```
 * ```html
 * <qd-datepicker [(value)]="value" [config]="config"></qd-datepicker>
 * ```
 */
export declare class QdDatepickerComponent implements ControlValueAccessor, OnInit, OnChanges, OnDestroy {
    private readonly actionEmitterService;
    private readonly timePickerService;
    private readonly translateService;
    private readonly controlContainer;
    private readonly changeDetectorRef;
    private readonly eventBrokerService;
    /**
     * Configuration object
     *
     * @example
     * {
     *   "label": {
     *     "i18n": "i18n.label"
     *   },
     *   "hint": {
     *     "i18n": "i18n.hint"
     *   }
     * }
     */
    config: QdFormDatepickerConfiguration;
    /**
     * The form control name can be assigned here if you want to use Reactive Forms.
     */
    formControlName: string;
    /**
     * The current form item value, if you are working with Model Binding.
     * * Input format: Javascript Date object.
     *
     * @example
     * <qd-datepicker [(value)]="value" [config]="config"></qd-datepicker>
     */
    value: Date;
    /**
     * Controls the layout of the datepicker component. If set to "true", a compact mode is activated and only the calendar icon is displayed.
     * It also sets all margins to zero.
     *
     * An example of a use case is the implementation in the Quadrel filter.
     *
     * * @default false
     */
    hasCalendarOnly: boolean;
    /**
     * A static test ID for integration tests can be set. <br />
     * The value for the HTML attribute [data-test-id].
     */
    testId: string;
    /**
     * Emits event when the value has changed.
     * Return value matches the current value.
     * * Output format: Javascript Date object.
     */
    readonly valueChange: EventEmitter<Date>;
    /**
     * Emits `true`, when the user clicks the placeholder value '-' in the timepicker dropdown list.
     * * Output format: a boolean.
     */
    readonly clickTimePlaceholder: EventEmitter<boolean>;
    /**
     * Emits event when the hint is clicked/tapped. `hintAction` must be set to `true` for this.
     * No Parameter here.
     */
    readonly clickHint: EventEmitter<null>;
    /**
     * Emits event when the readonly value is clicked/tapped. `clickReadonly ` must be set to `true` for this.
     * No Parameter here.
     */
    readonly clickReadonly: EventEmitter<null>;
    /**
     * Emits event when the viewonly value is clicked/tapped. `clickViewonly ` must be set to `true` for this.
     * No Parameter here.
     */
    readonly clickViewonly: EventEmitter<null>;
    popover: QdPopoverOnClickDirective;
    readonly: boolean;
    viewonly: boolean;
    hintAction: boolean;
    disabled: boolean;
    get hasError(): boolean;
    displayedDate: string;
    displayedTime: string;
    displayedDateTime: string;
    label: string;
    hint: string;
    readonlyAction: boolean;
    viewonlyAction: boolean;
    language: string;
    qdPopoverOnClick: QdPopoverOnClickDirective;
    control: AbstractControl;
    timePicker?: QdFormTimepickerConfiguration;
    private _disabledDatesValidator;
    private _disabledTimesValidator;
    private _subs;
    private _onChange;
    private _onTouched;
    constructor(actionEmitterService: QdFormsActionEmitterService, timePickerService: TimePickerService, translateService: TranslateService, controlContainer: ControlContainer, changeDetectorRef: ChangeDetectorRef, eventBrokerService: QdEventBrokerService);
    ngOnInit(): void;
    ngOnChanges(changes: any): void;
    ngOnDestroy(): void;
    registerOnChange(fn: () => void): void;
    registerOnTouched(fn: () => void): void;
    writeValue(date: Date): void;
    setDisabledState(disabled: boolean): void;
    handleUpdatedDate($rawValue: QdInputRawEventValue): void;
    handleUpdatedTime($event: string): void;
    handleUpdatedDateTime($rawValue: QdInputRawEventValue): void;
    private subscribeToLanguageChange;
    private subscribeToActionEmitterEvents;
    private initControl;
    private initInnerControl;
    private updateConfiguration;
    private updateDisplayedDate;
    private updateDisplayedDateTime;
    private validateDisabledDates;
    private validateDisabledTimes;
    private isValidDateInput;
    private isValidDateTimeInput;
    private initOpModeSubscription;
    private extractInputStringValue;
    static ɵfac: i0.ɵɵFactoryDeclaration<QdDatepickerComponent, [null, null, { optional: true; }, { optional: true; host: true; skipSelf: true; }, null, { optional: true; }]>;
    static ɵcmp: i0.ɵɵComponentDeclaration<QdDatepickerComponent, "qd-datepicker", never, { "config": { "alias": "config"; "required": false; }; "formControlName": { "alias": "formControlName"; "required": false; }; "value": { "alias": "value"; "required": false; }; "hasCalendarOnly": { "alias": "hasCalendarOnly"; "required": false; }; "testId": { "alias": "data-test-id"; "required": false; }; }, { "valueChange": "valueChange"; "clickTimePlaceholder": "clickTimePlaceholder"; "clickHint": "clickHint"; "clickReadonly": "clickReadonly"; "clickViewonly": "clickViewonly"; }, never, never, false, never>;
}
export {};
//# sourceMappingURL=datepicker.component.d.ts.map