import { VegaDatePickerCalendar } from '../../vega-date-picker-calendar';
import { DatePickerModeType, DatePickerValueType } from '../../../types';
import { CalendarDate } from '../../../../../helpers/calendar';
import { VegaDatePickerCalendarStateBaseAbstract } from './vega-date-picker-calendar-state-base.abstract';
/** Selection controller */
export declare class VegaDatePickerCalendarSelectionController extends VegaDatePickerCalendarStateBaseAbstract {
  host: VegaDatePickerCalendar['host'];
  mode: VegaDatePickerCalendar['mode'];
  format: VegaDatePickerCalendar['format'];
  selection: VegaDatePickerCalendar['selection'];
  calendarSelection: VegaDatePickerCalendar['calendarSelection'];
  hoverDate: VegaDatePickerCalendar['hoverDate'];
  clearEventEmitter: VegaDatePickerCalendar['clearEventEmitter'];
  vegaSelectionChangeEventEmitter: VegaDatePickerCalendar['vegaSelectionChangeEventEmitter'];
  allowRepickController: VegaDatePickerCalendar['allowRepickController'];
  translationSlimmer: VegaDatePickerCalendar['translationSlimmer'];
  private previousCalendarSelection;
  /** componentWillLoad */
  componentWillLoad(): void;
  /**
   * Listen selection changed
   *
   * @param {DatePickerValueType<DatePickerModeType>} newSelection - newSelection.
   */
  watchSelection(newSelection: DatePickerValueType<DatePickerModeType>): void;
  /** Reset selecting range date */
  resetRange(): void;
  /** Listen calendarSelection changed */
  watchCalendarSelection(): void;
  /** Clear the current selection */
  clear(): void;
  /**
   * Listen the day be clicked.
   *
   * @param {CalendarDate} day - clicked day.
   */
  onDayClick(day: CalendarDate): void;
  /**
   * Listen the day be hovered.
   * Need set the hoverDate after the first click in range mode.
   * For repick, we should clear start or end date according the input which have been clicked.
   * Note: repick is working at hover any day in range.
   *
   * @param {CalendarDate} day - hovered day.
   */
  onDayHover(day: CalendarDate): void;
  /**
   * Sets calendar selection for date picker calendar based on selection value.
   *
   * @param {DatePickerValueType<DatePickerModeType>} selection - selection.
   */
  private setCalendarSelectionBySelection;
  /**
   * Sets calendar selection for date picker calendar based on range dates.
   *
   * @param {Nullable<CalendarDate>} startDate - startDate.
   * @param {Nullable<CalendarDate>} endDate - endDate.
   */
  private setCalendarSelectionByRange;
  /**
   * Sets selection for date picker calendar and emits a change event with the new value.
   *
   * @param {DatePickerValueType<DatePickerModeType>} selection - selection.
   */
  private setSelection;
  /**
   * Check the previous selection and current selection is same.
   *
   * @param {DatePickerValueType<DatePickerModeType>} previous - New selection.
   * @param {DatePickerValueType<DatePickerModeType>} current - Old selection.
   * @returns {boolean} -
   */
  private isSameSelection;
  /** Notify to update current period */
  private notifyPeriodChange;
}
