import { AfterViewInit, ElementRef, EventEmitter, Injector, OnChanges, OnDestroy, OnInit, QueryList, SimpleChanges, TemplateRef } from '@angular/core';
import { AbstractControl, ControlValueAccessor, ValidationErrors, Validator } from '@angular/forms';
import { IgxCalendarComponent, WEEKDAYS } from '../calendar/public_api';
import { DisplayDensityBase, IDisplayDensityOptions } from '../core/density';
import { IToggleView } from '../core/navigation';
import { IBaseCancelableBrowserEventArgs, IBaseEventArgs } from '../core/utils';
import { IgxToggleDirective } from '../directives/toggle/toggle.directive';
import { IgxInputDirective, IgxInputGroupComponent, IgxLabelDirective } from '../input-group/public_api';
import { OverlaySettings } from '../services/public_api';
import { DateRange, IgxDateRangeInputsBaseComponent, IgxPickerToggleComponent } from './date-range-picker-inputs.common';
/**
 * Provides the ability to select a range of dates from a calendar UI or editable inputs.
 *
 * @igxModule IgxDateRangeModule
 *
 * @igxTheme igx-input-group-theme, igx-calendar-theme, igx-date-range-picker-theme
 *
 * @igxKeywords date, range, date range, date picker
 *
 * @igxGroup scheduling
 *
 * @remarks
 * It displays the range selection in a single or two input fields.
 * The default template displays a single *readonly* input field
 * while projecting `igx-date-range-start` and `igx-date-range-end`
 * displays two *editable* input fields.
 *
 * @example
 * ```html
 * <igx-date-range-picker mode="dropdown"></igx-date-range-picker>
 * ```
 */
export declare class IgxDateRangePickerComponent extends DisplayDensityBase implements IToggleView, OnChanges, OnInit, AfterViewInit, OnDestroy, ControlValueAccessor, Validator {
    element: ElementRef;
    protected _displayDensityOptions: IDisplayDensityOptions;
    private localeId;
    private _injector;
    /**
     * Display calendar in either `dialog` or `dropdown` mode.
     * @remarks
     * Default mode is `dialog`
     *
     * @example
     * ```html
     * <igx-date-range-picker mode="dropdown"></igx-date-range-picker>
     * ```
     */
    mode: string;
    /**
     * The number of displayed month views.
     *
     * @remarks
     * Default is `2`.
     *
     * @example
     * ```html
     * <igx-date-range-picker [monthsViewNumber]="3"></igx-date-range-picker>
     * ```
     */
    monthsViewNumber: number;
    /**
     * Gets/Sets whether dates that are not part of the current month will be displayed.
     *
     * @remarks
     * Default value is `false`.
     *
     * @example
     * ```html
     * <igx-date-range-picker [hideOutsideDays]="true"></igx-date-range-picker>
     * ```
     */
    hideOutsideDays: boolean;
    /**
     * The start day of the week.
     *
     * @remarks
     * Can be assigned to a numeric value or to `WEEKDAYS` enum value.
     *
     * @example
     * ```html
     * <igx-date-range-picker [weekStart]="1"></igx-date-range-picker>
     * ```
     */
    weekStart: WEEKDAYS;
    /**
     * Locale settings used for value formatting and calendar.
     *
     * @remarks
     * Uses Angular's `LOCALE_ID` by default. Affects both input mask and display format if those are not set.
     * If a `locale` is set, it must be registered via `registerLocaleData`.
     * Please refer to https://angular.io/guide/i18n#i18n-pipes.
     * If it is not registered, `Intl` will be used for formatting.
     *
     * @example
     * ```html
     * <igx-date-range-picker locale="jp"></igx-date-range-picker>
     * ```
     */
    locale: string;
    /**
     * A custom formatter function, applied on the selected or passed in date.
     *
     * @example
     * ```typescript
     * private dayFormatter = new Intl.DateTimeFormat("en", { weekday: "long" });
     * private monthFormatter = new Intl.DateTimeFormat("en", { month: "long" });
     *
     * public formatter(date: Date): string {
     *  return `${this.dayFormatter.format(date)} - ${this.monthFormatter.format(date)} - ${date.getFullYear()}`;
     * }
     * ```
     * ```html
     * <igx-date-range-picker [formatter]="formatter"></igx-date-range-picker>
     * ```
     */
    formatter: (val: DateRange) => string;
    /**
     * The default text of the calendar dialog `done` button.
     *
     * @remarks
     * Default value is `Done`.
     * The button will only show up in `dialog` mode.
     *
     * @example
     * ```html
     * <igx-date-range-picker doneButtonText="完了"></igx-date-range-picker>
     * ```
     */
    doneButtonText: string;
    /**
     * Custom overlay settings that should be used to display the calendar.
     *
     * @example
     * ```html
     * <igx-date-range-picker [overlaySettings]="customOverlaySettings"></igx-date-range-picker>
     * ```
     */
    overlaySettings: OverlaySettings;
    /**
     * The format used when editable inputs are not focused.
     *
     * @remarks
     * Uses Angular's DatePipe.
     *
     * @example
     * ```html
     * <igx-date-range-picker displayFormat="EE/M/yy"></igx-date-range-picker>
     * ```
     *
     */
    displayFormat: string;
    /**
     * The expected user input format and placeholder.
     *
     * @remarks
     * Default is `"'MM/dd/yyyy'"`
     *
     * @example
     * ```html
     * <igx-date-range-picker inputFormat="dd/MM/yy"></igx-date-range-picker>
     * ```
     */
    inputFormat: string;
    /**
     * The minimum value in a valid range.
     *
     * @example
     * <igx-date-range-picker [minValue]="minDate"></igx-date-range-picker>
     */
    set minValue(value: Date | string);
    get minValue(): Date | string;
    /**
     * The maximum value in a valid range.
     *
     * @example
     * <igx-date-range-picker [maxValue]="maxDate"></igx-date-range-picker>
     */
    set maxValue(value: Date | string);
    get maxValue(): Date | string;
    /**
     * Enables/Disables the `IgxDateRangePickerComponent`.
     *  @example
     * ```html
     * <igx-date-range-picker [disabled]="'true'"></igx-date-range-picker>
     * ```
     */
    disabled: boolean;
    /**
     * Sets the `placeholder` for single-input `IgxDateRangePickerComponent`.
     *   @example
     * ```html
     * <igx-date-range-picker [placeholder]="'Choose your dates'"></igx-date-range-picker>
     * ```
     */
    placeholder: string;
    /**
     * Emitted when a range is selected.
     *
     * @example
     * ```html
     * <igx-date-range-picker (rangeSelected)="handleSelected($event)"></igx-date-range-picker>
     * ```
     */
    rangeSelected: EventEmitter<DateRange>;
    /**
     * Emitted when the calendar starts opening, cancelable.
     *
     * @example
     * ```html
     * <igx-date-range-picker (onOpening)="handleOpening($event)"></igx-date-range-picker>
     * ```
     */
    onOpening: EventEmitter<IBaseCancelableBrowserEventArgs>;
    /**
     * Emitted when the `IgxDateRangeComponent` is opened.
     *
     * @example
     * ```html
     * <igx-date-range-picker (onOpened)="handleOpened($event)"></igx-date-range-picker>
     * ```
     */
    onOpened: EventEmitter<IBaseEventArgs>;
    /**
     * Emitted when the calendar starts closing, cancelable.
     *
     * @example
     * ```html
     * <igx-date-range-picker (onClosing)="handleClosing($event)"></igx-date-range-picker>
     * ```
     */
    onClosing: EventEmitter<IBaseCancelableBrowserEventArgs>;
    /**
     * Emitted when the `IgxDateRangeComponent` is closed.
     *
     * @example
     * ```html
     * <igx-date-range-picker (onClosed)="handleClosed($event)"></igx-date-range-picker>
     * ```
     */
    onClosed: EventEmitter<IBaseEventArgs>;
    /** @hidden @internal */
    cssClass: string;
    /** @hidden @internal */
    calendar: IgxCalendarComponent;
    /** @hidden @internal */
    inputGroup: IgxInputGroupComponent;
    /** @hidden @internal */
    inputDirective: IgxInputDirective;
    /** @hidden @internal */
    toggleDirective: IgxToggleDirective;
    /** @hidden @internal */
    toggleComponents: QueryList<IgxPickerToggleComponent>;
    /** @hidden @internal */
    projectedInputs: QueryList<IgxDateRangeInputsBaseComponent>;
    label: IgxLabelDirective;
    /** @hidden @internal */
    dateSeparatorTemplate: TemplateRef<any>;
    /** @hidden @internal */
    dateSeparator: any;
    /** @hidden @internal */
    get appliedFormat(): string;
    /** @hidden @internal */
    get singleInputFormat(): string;
    /** @hidden @internal */
    get hasProjectedInputs(): boolean;
    private get dropdownOverlaySettings();
    private get dialogOverlaySettings();
    private get required();
    private _value;
    private _collapsed;
    private _ngControl;
    private $destroy;
    private _statusChanges$;
    private $toggleClickNotifier;
    private _minValue;
    private _maxValue;
    private _positionSettings;
    private _focusedInput;
    private _dialogOverlaySettings;
    private _dropDownOverlaySettings;
    private onChangeCallback;
    private onTouchCallback;
    private onValidatorChange;
    constructor(element: ElementRef, _displayDensityOptions: IDisplayDensityOptions, localeId: any, _injector: Injector);
    /** @hidden @internal */
    onKeyDown(event: KeyboardEvent): void;
    /**
     * Opens the date range picker's dropdown or dialog.
     *
     * @example
     * ```html
     * <igx-date-range-picker #dateRange></igx-date-range-picker>
     *
     * <button (click)="dateRange.open()">Open Dialog</button
     * ```
     */
    open(overlaySettings?: OverlaySettings): void;
    /**
     * Closes the date range picker's dropdown or dialog.
     *
     * @example
     * html```
     * <igx-date-range-picker #dateRange></igx-date-range-picker>
     *
     * <button (click)="dateRange.close()">Close Dialog</button>
     * ```
     */
    close(): void;
    /**
     * Toggles the date range picker's dropdown or dialog
     *
     * @example
     * html```
     * <igx-date-range-picker #dateRange></igx-date-range-picker>
     *
     * <button (click)="dateRange.toggle()">Toggle Dialog</button>
     * ```
     */
    toggle(overlaySettings?: OverlaySettings): void;
    /**
     * Gets calendar state.
     *
     * ```typescript
     * let state = this.dateRange.collapsed;
     * ```
     */
    get collapsed(): boolean;
    /**
     * The currently selected value / range from the calendar
     *
     * @remarks
     * The current value is of type `DateRange`
     *
     * @example
     * ```typescript
     * const newValue: DateRange = { start: new Date("2/2/2012"), end: new Date("3/3/2013")};
     * this.dateRangePicker.value = newValue;
     * ```
     */
    get value(): DateRange;
    set value(value: DateRange);
    private updateValue;
    /**
     * Selects a range of dates. If no `endDate` is passed, range is 1 day (only `startDate`)
     *
     * @example
     * ```typescript
     * public selectFiveDayRange() {
     *  const today = new Date();
     *  const inFiveDays = new Date(new Date().setDate(today.getDate() + 5));
     *  this.dateRange.selectRange(today, inFiveDays);
     * }
     * ```
     */
    selectRange(startDate: Date, endDate?: Date): void;
    /** @hidden @internal */
    writeValue(value: DateRange): void;
    /** @hidden @internal */
    registerOnChange(fn: any): void;
    /** @hidden @internal */
    registerOnTouched(fn: any): void;
    /** @hidden @internal */
    validate(control: AbstractControl): ValidationErrors | null;
    /** @hidden @internal */
    registerOnValidatorChange?(fn: any): void;
    /** @hidden @internal */
    setDisabledState?(isDisabled: boolean): void;
    /** @hidden @internal */
    get separatorClass(): string;
    /** @hidden */
    ngOnInit(): void;
    /** @hidden */
    ngAfterViewInit(): void;
    /** @hidden @internal */
    ngOnChanges(changes: SimpleChanges): void;
    /** @hidden @internal */
    ngOnDestroy(): void;
    /** @hidden @internal */
    handleOpening(event: IBaseCancelableBrowserEventArgs): void;
    /** @hidden @internal */
    handleOpened(): void;
    /** @hidden @internal */
    handleClosing(event: IBaseCancelableBrowserEventArgs): void;
    private updateValidityOnBlur;
    /** @hidden @internal */
    handleClosed(): void;
    /** @hidden @internal */
    handleSelection(selectionData: Date[]): void;
    protected onStatusChanged: () => void;
    private get isTouchedOrDirty();
    private updateDisabledState;
    private getInputState;
    private setRequiredToInputs;
    private parseMinValue;
    private parseMaxValue;
    private updateCalendar;
    private swapEditorDates;
    private valueInRange;
    private extractRange;
    private subscribeToDateEditorEvents;
    private attachOnTouched;
    private cacheFocusedInput;
    private configPositionStrategy;
    private configOverlaySettings;
    private initialSetValue;
    private updateInputs;
    private updateDisplayFormat;
    private updateInputFormat;
}
