import * as i0 from '@angular/core';
import { OnInit, WritableSignal, ModelSignal, InputSignal, InputSignalWithTransform, Signal, ElementRef, OutputEmitterRef, InjectionToken, OnDestroy, AfterViewInit, AfterViewChecked, ModuleWithProviders, EnvironmentProviders } from '@angular/core';
import { Dayjs } from 'dayjs';
import * as i1 from '@angular/common';
import * as i2 from '@angular/forms';

declare enum SideEnum {
    left = "left",
    right = "right"
}

declare class NgxDaterangepickerBootstrapComponent implements OnInit {
    private _localeService;
    $event: any;
    chosenLabel?: string;
    calendarVariables: {
        left: any;
        right: any;
    };
    timepickerVariables: {
        left: any;
        right: any;
    };
    readonly applyBtnDisabled: WritableSignal<Boolean>;
    chosenRange?: string | null;
    rangesArray: Array<any>;
    inline: boolean;
    showCalInRanges: Boolean;
    private tooltiptext;
    private leftCalendar;
    private rightCalendar;
    private nowHoveredDate;
    private pickingDate;
    private _old;
    _minDate?: Dayjs | null;
    _maxDate?: Dayjs | null;
    private _ranges;
    readonly startDate: ModelSignal<Dayjs | null | undefined>;
    readonly endDate: ModelSignal<Dayjs | null | undefined>;
    readonly dateLimit: InputSignal<number | null>;
    readonly autoApply: InputSignal<Boolean>;
    readonly singleDatePicker: InputSignal<Boolean>;
    readonly showDropdowns: InputSignal<Boolean>;
    readonly showWeekNumbers: InputSignal<Boolean>;
    readonly showISOWeekNumbers: InputSignal<Boolean>;
    readonly linkedCalendars: InputSignal<Boolean>;
    readonly autoUpdateInput: InputSignal<Boolean>;
    readonly alwaysShowCalendars: InputSignal<Boolean>;
    readonly maxSpan: InputSignal<Boolean>;
    readonly lockStartDate: InputSignal<Boolean>;
    readonly timePicker: InputSignal<Boolean>;
    readonly timePicker24Hour: InputSignal<Boolean>;
    readonly timePickerIncrement: InputSignal<number>;
    readonly timePicker24HourInterval: InputSignal<number[]>;
    readonly timePickerSeconds: InputSignal<Boolean>;
    readonly showClearButton: InputSignal<Boolean>;
    readonly firstMonthDayClass: InputSignal<string | null | undefined>;
    readonly lastMonthDayClass: InputSignal<string | null | undefined>;
    readonly emptyWeekRowClass: InputSignal<string | null | undefined>;
    readonly emptyWeekColumnClass: InputSignal<string | null | undefined>;
    readonly firstDayOfNextMonthClass: InputSignal<string | null | undefined>;
    readonly lastDayOfPreviousMonthClass: InputSignal<string | null | undefined>;
    readonly showCustomRangeLabel: InputSignal<boolean | undefined>;
    readonly showCancel: InputSignal<boolean>;
    readonly keepCalendarOpeningWithRange: InputSignal<boolean>;
    readonly showRangeLabelOnInput: InputSignal<boolean>;
    readonly customRangeDirection: InputSignal<boolean>;
    readonly drops: InputSignal<string | undefined>;
    readonly opens: InputSignal<string | undefined>;
    readonly closeOnAutoApply: InputSignal<boolean>;
    readonly minDate: InputSignalWithTransform<Dayjs | null | undefined, Dayjs | string>;
    readonly maxDate: InputSignalWithTransform<Dayjs | null | undefined, Dayjs | string>;
    readonly locale: InputSignal<any>;
    readonly _locale: Signal<any>;
    readonly ranges: InputSignalWithTransform<any, any>;
    readonly isInvalidDate: InputSignal<Function | null | undefined>;
    readonly isCustomDate: InputSignal<Function | null | undefined>;
    readonly isTooltipDate: InputSignal<Function | null | undefined>;
    readonly isShown: WritableSignal<Boolean>;
    readonly pickerContainer: Signal<ElementRef | undefined>;
    readonly chosenDate: OutputEmitterRef<Object>;
    readonly rangeClicked: OutputEmitterRef<Object>;
    readonly datesUpdated: OutputEmitterRef<Object>;
    readonly startDateChanged: OutputEmitterRef<Object>;
    readonly endDateChanged: OutputEmitterRef<Object>;
    readonly cancelClicked: OutputEmitterRef<void>;
    readonly clearClicked: OutputEmitterRef<void>;
    constructor();
    ngOnInit(): void;
    renderRanges(): void;
    renderTimePicker(side: SideEnum): void;
    renderCalendar(side: SideEnum): void;
    setStartDate(startDate: any): void;
    setEndDate(endDate: any): void;
    updateView(): void;
    updateMonthsInView(): void;
    /**
     *  This is responsible for updating the calendars
     */
    updateCalendars(): void;
    updateElement(): void;
    remove(): void;
    /**
     * this should calculate the label
     */
    calculateChosenLabel(): void;
    clickApply(e?: any): void;
    clickCancel(e: any): void;
    /**
     * called when month is changed
     * @param object get month value in $event.target.value / side left or right
     */
    monthChanged(object: {
        $event: any;
        side: SideEnum;
    }): void;
    /**
     * called when year is changed
     * @param object get year value in $event.target.value / side left or right
     */
    yearChanged(object: {
        $event: any;
        side: SideEnum;
    }): void;
    /**
     * called when time is changed
     * @param object time $event / side left or right
     */
    timeChanged(object: {
        $event: any;
        side: SideEnum;
    }): void;
    /**
     *  call when month or year changed
     * @param month month number 0 -11
     * @param year year eg: 1995
     * @param side left or right
     */
    monthOrYearChanged(month: number, year: number, side: SideEnum): void;
    /**
     * Click on previous month
     * @param object previous $event / side left or right calendar
     */
    clickPrev(object: {
        $event: MouseEvent;
        side: SideEnum;
    }): void;
    /**
     * Click on next month
     * @param object next $event / side left or right calendar
     */
    clickNext(object: {
        $event: MouseEvent;
        side: SideEnum;
    }): void;
    /**
     * When hovering a date
     * @param object get value by $event.target.value / side left or right / row or col position of the current date clicked
     */
    hoverDate(object: {
        $event: any;
        side: SideEnum;
        row: number;
        col: number;
    }): void;
    /**
     * When selecting a date
     * @param object get value by $event.target.value / side left or right / row or col position of the current date clicked
     */
    clickDate(object: {
        $event: any;
        side: SideEnum;
        row: number;
        col: number;
    }): void;
    /**
     *  Click on the custom range
     * @param object $event / label
     */
    clickRange(object: {
        $event: MouseEvent;
        label: string;
    }): void;
    show(e?: any): void;
    hide(e?: any): void;
    clearIncompleteDateSelection(): void;
    /**
     * handle click on all element in the component, useful for outside of click
     * @param e event
     */
    handleInternalClick(e: any): void;
    /**
     * update the locale options
     * @param locale
     */
    updateLocale(locale: any): void;
    /**
     *  clear the daterange picker
     */
    clickClear($event: any): void;
    /**
     * Find out if the selected range should be disabled if it doesn't
     * fit into minDate and maxDate limitations.
     */
    disableRange(range: any): any;
    /**
     *
     * @param date the date to add time
     * @param side left or right
     */
    private _getDateWithTime;
    /**
     *  build the locale config
     */
    private _buildLocale;
    private _buildCells;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgxDaterangepickerBootstrapComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<NgxDaterangepickerBootstrapComponent, "ngx-daterangepicker-bootstrap", never, { "startDate": { "alias": "startDate"; "required": false; "isSignal": true; }; "endDate": { "alias": "endDate"; "required": false; "isSignal": true; }; "dateLimit": { "alias": "dateLimit"; "required": false; "isSignal": true; }; "autoApply": { "alias": "autoApply"; "required": false; "isSignal": true; }; "singleDatePicker": { "alias": "singleDatePicker"; "required": false; "isSignal": true; }; "showDropdowns": { "alias": "showDropdowns"; "required": false; "isSignal": true; }; "showWeekNumbers": { "alias": "showWeekNumbers"; "required": false; "isSignal": true; }; "showISOWeekNumbers": { "alias": "showISOWeekNumbers"; "required": false; "isSignal": true; }; "linkedCalendars": { "alias": "linkedCalendars"; "required": false; "isSignal": true; }; "autoUpdateInput": { "alias": "autoUpdateInput"; "required": false; "isSignal": true; }; "alwaysShowCalendars": { "alias": "alwaysShowCalendars"; "required": false; "isSignal": true; }; "maxSpan": { "alias": "maxSpan"; "required": false; "isSignal": true; }; "lockStartDate": { "alias": "lockStartDate"; "required": false; "isSignal": true; }; "timePicker": { "alias": "timePicker"; "required": false; "isSignal": true; }; "timePicker24Hour": { "alias": "timePicker24Hour"; "required": false; "isSignal": true; }; "timePickerIncrement": { "alias": "timePickerIncrement"; "required": false; "isSignal": true; }; "timePicker24HourInterval": { "alias": "timePicker24HourInterval"; "required": false; "isSignal": true; }; "timePickerSeconds": { "alias": "timePickerSeconds"; "required": false; "isSignal": true; }; "showClearButton": { "alias": "showClearButton"; "required": false; "isSignal": true; }; "firstMonthDayClass": { "alias": "firstMonthDayClass"; "required": false; "isSignal": true; }; "lastMonthDayClass": { "alias": "lastMonthDayClass"; "required": false; "isSignal": true; }; "emptyWeekRowClass": { "alias": "emptyWeekRowClass"; "required": false; "isSignal": true; }; "emptyWeekColumnClass": { "alias": "emptyWeekColumnClass"; "required": false; "isSignal": true; }; "firstDayOfNextMonthClass": { "alias": "firstDayOfNextMonthClass"; "required": false; "isSignal": true; }; "lastDayOfPreviousMonthClass": { "alias": "lastDayOfPreviousMonthClass"; "required": false; "isSignal": true; }; "showCustomRangeLabel": { "alias": "showCustomRangeLabel"; "required": false; "isSignal": true; }; "showCancel": { "alias": "showCancel"; "required": false; "isSignal": true; }; "keepCalendarOpeningWithRange": { "alias": "keepCalendarOpeningWithRange"; "required": false; "isSignal": true; }; "showRangeLabelOnInput": { "alias": "showRangeLabelOnInput"; "required": false; "isSignal": true; }; "customRangeDirection": { "alias": "customRangeDirection"; "required": false; "isSignal": true; }; "drops": { "alias": "drops"; "required": false; "isSignal": true; }; "opens": { "alias": "opens"; "required": false; "isSignal": true; }; "closeOnAutoApply": { "alias": "closeOnAutoApply"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "ranges": { "alias": "ranges"; "required": false; "isSignal": true; }; "isInvalidDate": { "alias": "isInvalidDate"; "required": false; "isSignal": true; }; "isCustomDate": { "alias": "isCustomDate"; "required": false; "isSignal": true; }; "isTooltipDate": { "alias": "isTooltipDate"; "required": false; "isSignal": true; }; }, { "startDate": "startDateChange"; "endDate": "endDateChange"; "locale": "localeChange"; "chosenDate": "chosenDate"; "rangeClicked": "rangeClicked"; "datesUpdated": "datesUpdated"; "startDateChanged": "startDateChanged"; "endDateChanged": "endDateChanged"; "cancelClicked": "cancelClicked"; "clearClicked": "clearClicked"; }, never, never, true, never>;
}

declare const LOCALE_CONFIG: InjectionToken<LocaleConfig>;
/**
 *  LocaleConfig Interface
 */
interface LocaleConfig {
    direction?: string;
    separator?: string;
    weekLabel?: string;
    applyLabel?: string;
    cancelLabel?: string;
    clearLabel?: string;
    customRangeLabel?: string;
    daysOfWeek?: string[];
    monthNames?: string[];
    firstDay?: number;
    format?: string;
    displayFormat?: string;
    startDate?: string;
    endDate?: string;
}
/**
 *  DefaultLocaleConfig
 */
declare const DefaultLocaleConfig: LocaleConfig;

declare class NgxDaterangepickerBootstrapDirective implements OnInit, OnDestroy, AfterViewInit, AfterViewChecked {
    private viewContainerRef;
    private injector;
    private applicationRef;
    private elementRef;
    private _renderer;
    private _localeService;
    $event: any;
    daterangepicker: NgxDaterangepickerBootstrapComponent | any;
    private daterangepickerRef?;
    private daterangepickerElement?;
    private firstMonthDayClass?;
    private _onChange;
    private _onTouched;
    private _disabled?;
    private _value;
    private _resizeObserver?;
    readonly minDate: InputSignal<Dayjs | null | undefined>;
    readonly maxDate: InputSignal<Dayjs | null | undefined>;
    readonly autoApply: InputSignal<boolean>;
    readonly alwaysShowCalendars: InputSignal<boolean>;
    readonly showCustomRangeLabel: InputSignal<boolean | undefined>;
    readonly linkedCalendars: InputSignal<boolean>;
    readonly dateLimit: InputSignal<number | null>;
    readonly singleDatePicker: InputSignal<boolean>;
    readonly showWeekNumbers: InputSignal<boolean>;
    readonly showISOWeekNumbers: InputSignal<boolean>;
    readonly showDropdowns: InputSignal<boolean>;
    readonly isInvalidDate: InputSignal<Function | null | undefined>;
    readonly isCustomDate: InputSignal<Function | null | undefined>;
    readonly isTooltipDate: InputSignal<Function | null | undefined>;
    readonly showClearButton: InputSignal<boolean>;
    readonly customRangeDirection: InputSignal<boolean>;
    readonly ranges: InputSignal<any>;
    readonly opens: ModelSignal<string>;
    readonly drops: ModelSignal<string>;
    readonly lastMonthDayClass: InputSignal<string | null | undefined>;
    readonly emptyWeekRowClass: InputSignal<string | null | undefined>;
    readonly emptyWeekColumnClass: InputSignal<string | null | undefined>;
    readonly firstDayOfNextMonthClass: InputSignal<string | null | undefined>;
    readonly lastDayOfPreviousMonthClass: InputSignal<string | null | undefined>;
    readonly keepCalendarOpeningWithRange: InputSignal<boolean>;
    readonly showRangeLabelOnInput: InputSignal<boolean>;
    readonly showCancel: InputSignal<boolean>;
    readonly lockStartDate: InputSignal<Boolean>;
    readonly closeOnAutoApply: InputSignal<boolean>;
    readonly timePicker: InputSignal<Boolean>;
    readonly timePicker24Hour: InputSignal<Boolean>;
    readonly timePickerIncrement: InputSignal<number>;
    readonly timePicker24HourInterval: InputSignal<number[]>;
    readonly timePickerSeconds: InputSignal<Boolean>;
    readonly formlyCustomField: InputSignal<Boolean>;
    readonly startKey: InputSignal<string>;
    readonly endKey: InputSignal<string>;
    readonly locale: InputSignal<object>;
    readonly _startKey: Signal<string>;
    readonly _endKey: Signal<string>;
    readonly _locale: Signal<LocaleConfig>;
    readonly change: OutputEmitterRef<Object>;
    readonly rangeClicked: OutputEmitterRef<Object>;
    readonly datesUpdated: OutputEmitterRef<Object>;
    readonly startDateChanged: OutputEmitterRef<Object>;
    readonly endDateChanged: OutputEmitterRef<Object>;
    readonly clearClicked: OutputEmitterRef<void>;
    get disabled(): boolean | undefined;
    get value(): any;
    set value(val: any);
    private rangeClickedSubs;
    private datesUpdatedSubs;
    private startDateChangedSubs;
    private endDateChangedSubs;
    private clearClickedSubs;
    private chosenDateSubs;
    constructor();
    ngOnInit(): void;
    ngOnDestroy(): void;
    ngAfterViewInit(): void;
    ngAfterViewChecked(): void;
    onWindowResize(event?: any): void;
    open(event?: any): void;
    hide(event?: any): void;
    onBlur(): void;
    toggle(event?: any): void;
    clear(): void;
    writeValue(value: any): void;
    registerOnChange(fn: any): void;
    registerOnTouched(fn: any): void;
    setDisabledState(state: boolean): void;
    private setValue;
    pickerResizeObserver(): void;
    /**
     * Set position of the calendar, this works as expected only if you add daterangepickerElement to DOM body
     */
    setPosition(): void;
    getOffset(element: any): {
        top: any;
        left: any;
        width: any;
        height: any;
    };
    inputChanged(event: any): void;
    /**
     * For click outside the calendar's container
     * @param event event object
     */
    outsideClick(event: any): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgxDaterangepickerBootstrapDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<NgxDaterangepickerBootstrapDirective, "input[ngxDaterangepickerBootstrap]", never, { "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "autoApply": { "alias": "autoApply"; "required": false; "isSignal": true; }; "alwaysShowCalendars": { "alias": "alwaysShowCalendars"; "required": false; "isSignal": true; }; "showCustomRangeLabel": { "alias": "showCustomRangeLabel"; "required": false; "isSignal": true; }; "linkedCalendars": { "alias": "linkedCalendars"; "required": false; "isSignal": true; }; "dateLimit": { "alias": "dateLimit"; "required": false; "isSignal": true; }; "singleDatePicker": { "alias": "singleDatePicker"; "required": false; "isSignal": true; }; "showWeekNumbers": { "alias": "showWeekNumbers"; "required": false; "isSignal": true; }; "showISOWeekNumbers": { "alias": "showISOWeekNumbers"; "required": false; "isSignal": true; }; "showDropdowns": { "alias": "showDropdowns"; "required": false; "isSignal": true; }; "isInvalidDate": { "alias": "isInvalidDate"; "required": false; "isSignal": true; }; "isCustomDate": { "alias": "isCustomDate"; "required": false; "isSignal": true; }; "isTooltipDate": { "alias": "isTooltipDate"; "required": false; "isSignal": true; }; "showClearButton": { "alias": "showClearButton"; "required": false; "isSignal": true; }; "customRangeDirection": { "alias": "customRangeDirection"; "required": false; "isSignal": true; }; "ranges": { "alias": "ranges"; "required": false; "isSignal": true; }; "opens": { "alias": "opens"; "required": false; "isSignal": true; }; "drops": { "alias": "drops"; "required": false; "isSignal": true; }; "lastMonthDayClass": { "alias": "lastMonthDayClass"; "required": false; "isSignal": true; }; "emptyWeekRowClass": { "alias": "emptyWeekRowClass"; "required": false; "isSignal": true; }; "emptyWeekColumnClass": { "alias": "emptyWeekColumnClass"; "required": false; "isSignal": true; }; "firstDayOfNextMonthClass": { "alias": "firstDayOfNextMonthClass"; "required": false; "isSignal": true; }; "lastDayOfPreviousMonthClass": { "alias": "lastDayOfPreviousMonthClass"; "required": false; "isSignal": true; }; "keepCalendarOpeningWithRange": { "alias": "keepCalendarOpeningWithRange"; "required": false; "isSignal": true; }; "showRangeLabelOnInput": { "alias": "showRangeLabelOnInput"; "required": false; "isSignal": true; }; "showCancel": { "alias": "showCancel"; "required": false; "isSignal": true; }; "lockStartDate": { "alias": "lockStartDate"; "required": false; "isSignal": true; }; "closeOnAutoApply": { "alias": "closeOnAutoApply"; "required": false; "isSignal": true; }; "timePicker": { "alias": "timePicker"; "required": false; "isSignal": true; }; "timePicker24Hour": { "alias": "timePicker24Hour"; "required": false; "isSignal": true; }; "timePickerIncrement": { "alias": "timePickerIncrement"; "required": false; "isSignal": true; }; "timePicker24HourInterval": { "alias": "timePicker24HourInterval"; "required": false; "isSignal": true; }; "timePickerSeconds": { "alias": "timePickerSeconds"; "required": false; "isSignal": true; }; "formlyCustomField": { "alias": "formlyCustomField"; "required": false; "isSignal": true; }; "startKey": { "alias": "startKey"; "required": false; "isSignal": true; }; "endKey": { "alias": "endKey"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; }, { "opens": "opensChange"; "drops": "dropsChange"; "startKey": "startKeyChange"; "endKey": "endKeyChange"; "locale": "localeChange"; "change": "change"; "rangeClicked": "rangeClicked"; "datesUpdated": "datesUpdated"; "startDateChanged": "startDateChanged"; "endDateChanged": "endDateChanged"; "clearClicked": "clearClicked"; }, never, never, true, never>;
}

declare class NgxDaterangepickerBootstrapModule {
    static forRoot(config?: LocaleConfig): ModuleWithProviders<NgxDaterangepickerBootstrapModule>;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgxDaterangepickerBootstrapModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<NgxDaterangepickerBootstrapModule, never, [typeof i1.CommonModule, typeof i2.FormsModule, typeof i2.ReactiveFormsModule, typeof NgxDaterangepickerBootstrapComponent, typeof NgxDaterangepickerBootstrapDirective], [typeof NgxDaterangepickerBootstrapComponent, typeof NgxDaterangepickerBootstrapDirective]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<NgxDaterangepickerBootstrapModule>;
}

declare class NgxDaterangepickerLocaleService {
    private _config;
    get config(): LocaleConfig;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgxDaterangepickerLocaleService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<NgxDaterangepickerLocaleService>;
}

declare function provideDaterangepickerLocale(config?: LocaleConfig): EnvironmentProviders;

export { DefaultLocaleConfig, LOCALE_CONFIG, NgxDaterangepickerBootstrapComponent, NgxDaterangepickerBootstrapDirective, NgxDaterangepickerBootstrapModule, NgxDaterangepickerLocaleService, provideDaterangepickerLocale };
export type { LocaleConfig };
