import { EventEmitter } from '../../../stencil-public-runtime';
import { GlobalSlimmers } from '../../../vega-slimmer/vega-slimmer-core';
import { VegaComponentUsageRuntimeMetricsSlimmer } from '../../../helpers/slimmers/component-usage-runtime-metrics';
import { VegaDatePickerCalendarRenderer } from './slimmers/renderers/vega-date-picker-calendar-renderer';
import { VegaDatePickerCalendarYearMonthSwitcherRenderer } from './slimmers/renderers/vega-date-picker-calendar-year-month-switcher-renderer';
import { DatePickerCalendarIndicator, DatePickerCalendarRepickType, DatePickerCalendarSizeType, DatePickerModeType, DatePickerMonthYearTypes, DatePickerValueType, VegaDropdownPropsForDatePickerCalendar } from '../types';
import { TranslationSlimmer } from '../../../helpers/slimmers/translation/translation-slimmer';
import { CalendarDate, MonthPeriod } from '../../../helpers/calendar';
import { VegaDatePickerCalendarCurrentPeriodController } from './slimmers/controllers/vega-date-picker-calendar-current-period-controller';
import { VegaDatePickerCalendarTodayController } from './slimmers/controllers/vega-date-picker-calendar-today-controller';
import { VegaDatePickerMonthItemRenderer } from './slimmers/renderers/vega-date-picker-month-item-renderer';
import { EventEmitSlimmerBase } from '../../../helpers/event-manager/slimmers/event-emit-slimmer';
import { VegaDatePickerCalendarSelectionController } from './slimmers/controllers/vega-date-picker-calendar-selection-controller';
import { Nullable } from '../../../types/general';
import { VegaDatePickerCalendarMinMaxDateController } from './slimmers/controllers/vega-date-picker-calendar-min-max-date-controller';
import { VegaDatePickerCalendarAllowRepickController } from './slimmers/controllers/vega-date-picker-calendar-allow-repick-controller';
import { DisabledDate } from '../../vega-calendar/types';
import { CalendarSelection } from './dto/calendar-selection';
import { VegaDatePickerCalendarHeaderRenderer } from './slimmers/renderers/vega-date-picker-calendar-header-render';
import { VegaDatePickerCalendarIsDualMonthsController } from './slimmers/controllers/vega-date-picker-calendar-is-dual-months-controller';
/**
 * @vegaVersion 2.0.0
 */
export declare class VegaDatePickerCalendar {
  protected readonly globalSlimmers: GlobalSlimmers;
  protected renderer: VegaDatePickerCalendarRenderer;
  protected isDualMonthsController: VegaDatePickerCalendarIsDualMonthsController;
  protected monthItemRenderer: VegaDatePickerMonthItemRenderer;
  protected headerRenderer: VegaDatePickerCalendarHeaderRenderer;
  protected translationSlimmer: TranslationSlimmer<HTMLVegaDatePickerCalendarElement>;
  protected todayController: VegaDatePickerCalendarTodayController;
  protected selectionController: VegaDatePickerCalendarSelectionController;
  protected minMaxDateController: VegaDatePickerCalendarMinMaxDateController;
  protected currentPeriodController: VegaDatePickerCalendarCurrentPeriodController;
  protected yearMonthSwitcherRender: VegaDatePickerCalendarYearMonthSwitcherRenderer;
  protected allowRepickController: VegaDatePickerCalendarAllowRepickController;
  protected vegaComponentUsageRuntimeMetricsSlimmer: VegaComponentUsageRuntimeMetricsSlimmer<HTMLVegaDatePickerCalendarElement>;
  protected clearEventEmitter: EventEmitSlimmerBase;
  protected monthYearChangeEventEmitter: EventEmitSlimmerBase;
  protected vegaSelectionChangeEventEmitter: EventEmitSlimmerBase;
  host: HTMLVegaDatePickerCalendarElement;
  isMobileDevice: boolean;
  today: CalendarDate;
  currentPeriod: MonthPeriod;
  watchCurrentPeriod(): void;
  hoverDate: Nullable<CalendarDate>;
  calendarSelection: CalendarSelection;
  watchCalendarSelection(): void;
  maxCalendarDate: Nullable<CalendarDate>;
  watchMaxCalendarDate(): void;
  minCalendarDate: Nullable<CalendarDate>;
  watchMinCalendarDate(): void;
  isDualMonths: boolean;
  /**
   * Renders the calendar picker in different sizes. Defaults to regular size
   *
   * @vegaVersion 2.72.0
   */
  size: DatePickerCalendarSizeType;
  /**
   * Specifies the selection mode of the date picker calendar.
   *
   *  - Use `single` to allow selecting a single date.
   *  - Use `range` to allow selecting a date range.
   *
   * @vegaVersion 2.72.0
   */
  mode: DatePickerModeType;
  watchMode(): void;
  /**
   * Specifies the selected date or date range in the date picker calendar.
   *
   * @vegaVersion 2.72.0
   */
  selection: DatePickerValueType<DatePickerModeType>;
  watchSelection(): void;
  /**
   * Specifies the desired date format.
   *
   * @vegaVersion 2.72.0
   */
  format: string;
  /**
   * Specifies the minimum selectable date in the date picker calendar.
   *
   * @vegaVersion 2.72.0
   */
  minDate: string;
  watchMinDate(): void;
  /**
   * Specifies the maximum selectable date in the date picker calendar.
   *
   * @vegaVersion 2.72.0
   */
  maxDate: string;
  watchMaxDate(): void;
  /**
   * Specifies whether to display the clear button when the calendar is shown.
   *
   * @vegaVersion 2.72.0
   */
  clearButton: boolean;
  /**
   * Specifies the calendar is static height.
   *
   * @vegaVersion 2.72.0
   */
  staticHeight: boolean;
  /**
   * Specifies the IANA time zone or Etc/GMT±n format.
   *     It accepts values such as "America/New_York" or "Etc/GMT+12".
   *     For a complete list of IANA time zones, refer to Time Zone DB(https://timezonedb.com/time-zones).
   * 	   If not configured, the time zone will default to the system's time zone.
   *
   * @vegaVersion 2.72.0
   */
  timezone: string;
  watchTimezone(): void;
  /**
   * Determines whether to show months and years dropdown in date picker calendar
   * If set to true, date picker calendar will have months and years dropdown
   *
   * @vegaVersion 2.72.0
   */
  showYearMonthDropdowns: boolean;
  /**
   * Determines whether the year or month dropdown position is calculated relative to the screen.
   *
   * @vegaVersion 2.72.0
   */
  yearMonthDropdownProps: VegaDropdownPropsForDatePickerCalendar;
  /**
   * Determines whether to show two months in date picker calendar.
   *   It will be ignored when the device is mobile, that means the calendar will always show single month on mobile device regardless of the value of this prop.
   *
   * @vegaVersion 2.81.0
   */
  dualMonths: boolean;
  watchDualMonths(): void;
  /**
   * Specifies a predicate function that determines whether a given date in the date picker should be disabled (non-interactive).
   *
   * The function is called for each date cell before rendering.
   *
   * Return `true` to disable the cell, or false to keep it selectable.
   * Default behavior: always returns `false` (no cells are disabled).
   *
   * @param date - The `Date` object for the cell being evaluated.
   * @returns `true` if the cell should be disabled; otherwise `false`.
   * @vegaVersion 2.72.0
   */
  isDateDisabled: DisabledDate;
  /**
   * Specifies a function that returns the properties for the date indicator tooltip for a given date in the date picker.
   *
   * The function is called for each date cell before rendering.
   *
   * @vegaVersion 2.77.0
   */
  dateIndicator: DatePickerCalendarIndicator;
  /**
   * An event emitter notifying the change of the value in the date picker,
   *    whether triggered programmatically or through user interaction.
   *
   * @vegaVersion 2.72.0
   */
  vegaClear: EventEmitter<string | string[]>;
  /**
   * An event emitter notifying the change of the value in the date picker,
   *    whether triggered programmatically or through user interaction.
   * @eventSemantics namespace:native
   * @vegaVersion 2.72.0
   */
  clear: EventEmitter<string | string[]>;
  /**
   * An event emitter notifying the month and year change when the navigation buttons are clicked or the month and year dropdowns are selected in the date picker,
   *    whether triggered programmatically or through user interaction.
   *
   * @vegaVersion 2.61.0
   */
  vegaMonthYearChange: EventEmitter<DatePickerMonthYearTypes>;
  /**
   * An event emitter notifying the month and year change when the navigation buttons are clicked or the month and year dropdowns are selected in the date picker,
   * @eventSemantics namespace:native
   * @vegaVersion 2.61.0
   */
  monthYearChange: EventEmitter<DatePickerMonthYearTypes>;
  /**
   * An event emitter notifying the change of the value in the date picker,
   *    whether triggered programmatically or through user interaction.
   *
   * @vegaVersion 2.72.0
   */
  vegaSelectionChange: EventEmitter<string | string[]>;
  /**
   * An event emitter notifying the change of the value in the date picker,
   *    whether triggered programmatically or through user interaction.
   * @eventSemantics namespace:native
   * @vegaVersion 2.72.0
   */
  selectionChange: EventEmitter<string | string[]>;
  /**
   * Invoke this method to reset calendar to its initial state,
   * 	it include reset to current value and reset the current period.
   * @vegaVersion 2.72.0
   */
  reset(): Promise<void>;
  /**
   * Invoke this method to trigger repick.
   *   The param `type` is distinguishing the start date or end date can be repick.
   * @vegaVersion 2.72.0
   */
  triggerRepick(type: DatePickerCalendarRepickType): Promise<void>;
  render(): VegaDatePickerCalendar;
}
