import { AfterViewInit, ElementRef, EventEmitter, ModelSignal, OnChanges, OnDestroy, OnInit, QueryList, SimpleChanges } from '@angular/core';
import { ControlValueAccessor, FormGroup } from '@angular/forms';
import { BreakpointObserver } from '@angular/cdk/layout';
import { Subscription } from 'rxjs';
import { Options } from '@popperjs/core';
import { DateFilterType, DayFormatType, WeekdayFormatType } from '../../calendar/calendar.service';
import { Colors } from '../../coreui.types';
import { TemplateIdDirective } from '../../shared';
import * as i0 from "@angular/core";
export interface ICalendarRanges {
    [key: string]: Date[];
}
export type TCustomRange = [string, Date[]];
/** Must be a valid date string */
export declare class DateRangePickerComponent implements OnInit, OnDestroy, ControlValueAccessor, AfterViewInit, OnChanges {
    #private;
    private breakpointObserver;
    constructor(breakpointObserver: BreakpointObserver);
    /**
     * Set the format of day name.
     * @default 'numeric'
     * @type DayFormatType
     */
    dayFormat: DayFormatType;
    /**
     * The number of calendars that render on desktop devices.
     * @type number
     * @default 2
     */
    calendars: number;
    /**
     * Toggle visibility or set the content of the cleaner button.
     * @type boolean
     * @default true
     */
    cleaner: boolean;
    /**
     * Determine if the dropdown should be closed after value setting.
     * @type boolean
     * @default false
     */
    closeOnSelect: boolean;
    /**
     * Set date format.
     * We use Angular formatDate() function, see:
     * - https://angular.io/api/common/formatDate
     * - https://angular.io/api/common/DatePipe#pre-defined-format-options
     */
    format?: string;
    /**
     * Toggle visibility or set the content of the input indicator.
     * @type boolean
     * @default true
     */
    indicator: boolean;
    /**
     * Custom function to format the selected date into a string according to a custom format.
     * @since v5.0.0
     */
    inputDateFormat?: (date: Date) => string;
    /**
     * Custom function to parse the input value into a valid Date object.
     * @since v5.0.0
     */
    inputDateParse?: (date: string | Date) => Date;
    /**
     * Toggle the readonly state for the component.
     * @type boolean
     * @default false
     */
    set inputReadOnly(value: boolean);
    get inputReadOnly(): boolean;
    /**
     * Reorder year-month navigation, and render year first.
     * @type boolean
     * @default false
     */
    navYearFirst: boolean;
    /**
     * Specifies short hints that are visible in start date and end date inputs.
     * type string
     */
    placeholder: string | string[];
    /**
     * Predefined date ranges the user can select from.
     * @type ICalendarRanges
     */
    ranges?: ICalendarRanges;
    /**
     * Sets the color context of the cancel button to one of CoreUI’s themed colors.
     * @type 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'dark' | 'light' | string
     * @default 'secondary'
     */
    rangesButtonsColor: Colors;
    /**
     * Size the ranges button small or large.
     * @type 'sm' | 'lg' | ''
     */
    rangesButtonsSize: 'sm' | 'lg' | '';
    /**
     * Set the ranges button variant to an outlined button or a ghost button.
     * @type 'outline' | 'ghost' | undefined
     */
    rangesButtonsVariant?: 'outline' | 'ghost';
    /**
     * Default icon or character that separates two dates.
     * @type boolean
     * @default true
     */
    separator: boolean;
    /**
     * Size the component small or large.
     * @type 'sm' | 'lg' | undefined
     * @default undefined
     */
    size?: 'sm' | 'lg';
    /**
     * Provide an additional time selection by adding select boxes to choose time.
     * @type boolean
     * @default false
     */
    set timepicker(value: boolean);
    get timepicker(): boolean;
    /**
     * Toggle visual validation feedback.
     * @type boolean | undefined
     * @default undefined
     */
    valid?: boolean;
    /**
     * Toggle the visibility of the dropdown date-picker component.
     * @type boolean
     * @default false
     */
    visible: boolean;
    readonly startDateModel: ModelSignal<Date | null | undefined>;
    readonly dateModelEffect: import("@angular/core").EffectRef;
    readonly startDateChange: import("rxjs").Observable<Date | null | undefined>;
    readonly startDate: import("@angular/core").Signal<Date | null>;
    readonly endDateModel: ModelSignal<Date | null | undefined>;
    readonly endDateChange: import("rxjs").Observable<Date | null | undefined>;
    readonly endDate: import("@angular/core").Signal<Date | null>;
    calendarDate: Date;
    disabledDates: (Date[] | Date)[];
    /**
     * Set first day of week.
     * @type number
     * @default 1 (Monday)
     */
    firstDayOfWeek: number;
    readonly locale: import("@angular/core").InputSignal<string>;
    maxDate: Date | null;
    minDate: Date | null;
    /**
     * Show calendar navigation.
     * @type boolean
     * @default true
     */
    navigation: boolean;
    /**
     * Allow range selection.
     * @type boolean
     * @default false
     */
    range: boolean;
    dateFilter?: DateFilterType;
    set disabled(value: boolean);
    get disabled(): boolean;
    set value(value: any);
    get value(): any;
    private _value;
    /**
     * Set length or format of day name.
     * @type WeekdayFormatType
     * @default 'short'
     */
    weekdayFormat: WeekdayFormatType;
    /**
     * Optional popper Options object
     * @type Partial<Options>
     */
    popperjsOptions: Partial<Options>;
    /**
     * Set whether days in adjacent months shown before or after the current month are selectable. This only applies if the `showAdjacentDays` option is set to true.
     * @type boolean
     * @default false
     * @since 4.4.10
     */
    selectAdjacentDays: boolean;
    /**
     * Set whether to display dates in adjacent months (non-selectable) at the start and end of the current month.
     * @type boolean
     * @default true
     * @since 4.4.10
     */
    showAdjacentDays: boolean;
    /**
     * Specify the type of date selection as day, week, month, or year.
     * @type 'day' | 'week' | 'month' | 'year'
     * @default 'day'
     * @since 5.0.0
     */
    selectionType: 'day' | 'week' | 'month' | 'year';
    /**
     * Set whether to display week numbers in the calendar.
     * @type boolean
     * @default false
     * @since 5.0.0
     */
    showWeekNumber: boolean;
    /**
     * Label displayed over week numbers in the calendar.
     * @type string
     * @default undefined
     * @since 5.0.0
     */
    weekNumbersLabel?: string;
    readonly valueChange: EventEmitter<Date | Date[] | undefined>;
    calendarCellHover: EventEmitter<Date | null>;
    calendarDateChange: EventEmitter<Date>;
    startDateElementRef: ElementRef<HTMLInputElement>;
    endDateElementRef: ElementRef<HTMLInputElement>;
    templates: any;
    contentTemplates: QueryList<TemplateIdDirective>;
    protected dateChangeSubscriptions: Subscription[];
    protected subscribeDateChange(subscribe?: boolean): void;
    onBlur(): void;
    isMobile: boolean;
    customRanges: TCustomRange[];
    showRanges: boolean;
    startDateValue: import("@angular/core").Signal<string>;
    endDateValue: import("@angular/core").Signal<string>;
    get startDatePlaceholder(): string;
    get endDatePlaceholder(): string;
    private layoutChanges;
    dateRangeGroup: FormGroup;
    set inputStartHoverValue(value: Date | null);
    get inputStartHoverValue(): Date | null;
    private _inputStartHoverValue;
    set inputEndHoverValue(value: Date | null);
    get inputEndHoverValue(): Date | null;
    private _inputEndHoverValue;
    get datePickerClasses(): {
        [x: string]: boolean | "sm" | "lg" | undefined;
        'date-picker': boolean;
        disabled: boolean;
        'is-valid': boolean;
        'is-invalid': boolean;
    };
    formatDate(date: Date | null | undefined): string;
    ngOnInit(): void;
    ngOnDestroy(): void;
    ngAfterViewInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    convertValueToDate(value: Date | string | number | undefined | null): Date | null;
    inputParse(date: string): Date | undefined;
    getCustomRangeKey(customRange: any): any;
    setCustomRange(customRange: any): void;
    handleCalendarCellHover($event: Date | null): void;
    handleCalendarDateChange($event: Date): void;
    handleStartDateChange(date: Date | null): void;
    handleEndDateChange(date: Date | null): void;
    handleClear($event?: MouseEvent): void;
    handleStartDateInputChange($event: any): void;
    handleEndDateInputChange($event: any): void;
    forbiddenDate(date: Date): boolean;
    setInputValue: (elementRef: ElementRef, date: Date | null) => void;
    onChange: any;
    onTouched: any;
    registerOnChange(fn: any): void;
    registerOnTouched(fn: any): void;
    setDisabledState(isDisabled: boolean): void;
    writeValue(value: any): void;
    handleStartTimeChange(time: Date | undefined): void;
    handleEndTimeChange(time: Date | undefined): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<DateRangePickerComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DateRangePickerComponent, "c-date-range-picker", ["cDateRangePicker"], { "dayFormat": { "alias": "dayFormat"; "required": false; }; "calendars": { "alias": "calendars"; "required": false; }; "cleaner": { "alias": "cleaner"; "required": false; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; }; "format": { "alias": "format"; "required": false; }; "indicator": { "alias": "indicator"; "required": false; }; "inputDateFormat": { "alias": "inputDateFormat"; "required": false; }; "inputDateParse": { "alias": "inputDateParse"; "required": false; }; "inputReadOnly": { "alias": "inputReadOnly"; "required": false; }; "navYearFirst": { "alias": "navYearFirst"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "ranges": { "alias": "ranges"; "required": false; }; "rangesButtonsColor": { "alias": "rangesButtonsColor"; "required": false; }; "rangesButtonsSize": { "alias": "rangesButtonsSize"; "required": false; }; "rangesButtonsVariant": { "alias": "rangesButtonsVariant"; "required": false; }; "separator": { "alias": "separator"; "required": false; }; "size": { "alias": "size"; "required": false; }; "timepicker": { "alias": "timepicker"; "required": false; }; "valid": { "alias": "valid"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "startDateModel": { "alias": "startDate"; "required": false; "isSignal": true; }; "endDateModel": { "alias": "endDate"; "required": false; "isSignal": true; }; "calendarDate": { "alias": "calendarDate"; "required": false; }; "disabledDates": { "alias": "disabledDates"; "required": false; }; "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "navigation": { "alias": "navigation"; "required": false; }; "range": { "alias": "range"; "required": false; }; "dateFilter": { "alias": "dateFilter"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "value": { "alias": "value"; "required": false; }; "weekdayFormat": { "alias": "weekdayFormat"; "required": false; }; "popperjsOptions": { "alias": "popperOptions"; "required": false; }; "selectAdjacentDays": { "alias": "selectAdjacentDays"; "required": false; }; "showAdjacentDays": { "alias": "showAdjacentDays"; "required": false; }; "selectionType": { "alias": "selectionType"; "required": false; }; "showWeekNumber": { "alias": "showWeekNumber"; "required": false; }; "weekNumbersLabel": { "alias": "weekNumbersLabel"; "required": false; }; }, { "startDateModel": "startDateChange"; "endDateModel": "endDateChange"; "valueChange": "valueChange"; "calendarCellHover": "calendarCellHover"; "calendarDateChange": "calendarDateChange"; }, ["contentTemplates"], ["*"], true, never>;
    static ngAcceptInputType_calendars: unknown;
    static ngAcceptInputType_cleaner: unknown;
    static ngAcceptInputType_closeOnSelect: unknown;
    static ngAcceptInputType_indicator: unknown;
    static ngAcceptInputType_inputReadOnly: unknown;
    static ngAcceptInputType_navYearFirst: unknown;
    static ngAcceptInputType_separator: unknown;
    static ngAcceptInputType_timepicker: unknown;
    static ngAcceptInputType_visible: unknown;
    static ngAcceptInputType_calendarDate: Date | number;
    static ngAcceptInputType_firstDayOfWeek: unknown;
    static ngAcceptInputType_navigation: unknown;
    static ngAcceptInputType_range: unknown;
    static ngAcceptInputType_disabled: unknown;
    static ngAcceptInputType_selectAdjacentDays: unknown;
    static ngAcceptInputType_showAdjacentDays: unknown;
    static ngAcceptInputType_showWeekNumber: unknown;
}
