import { EventEmitter } from '../../stencil-public-runtime';
import { FormFieldValidationRule } from '../../helpers/validator/rules/form-field-validation-rule';
import { DatePickerModeType, DatePickerMonthYearTypes, DatePickerValueType, DropdownConfigForDatePicker } from './types';
import { GlobalSlimmers } from '../../vega-slimmer/vega-slimmer-core';
import { FormFieldControllerSlimmer } from '../../helpers/slimmers/form-field-controller-slimmer';
import { VegaDatePickerRenderer } from './slimmers/renderers/vega-date-picker-renderer';
import { VegaDatePickerSingleInputRenderer } from './slimmers/renderers/vega-date-picker-single-input-renderer';
import { VegaDatePickerRangeInputRenderer } from './slimmers/renderers/vega-date-picker-range-input-renderer';
import { VegaDatePickerCalendarRenderer } from './slimmers/renderers/vega-date-picker-calendar-renderer';
import { VegaDatePickerValueController } from './slimmers/controllers/vega-date-picker-value-controller';
import { VegaDatePickerFormatController } from './slimmers/controllers/vega-date-picker-format-controller';
import { VegaDatePickerKeyboardController } from './slimmers/controllers/vega-date-picker-keyboard-controller';
import { EventEmitSlimmerBase } from '../../helpers/event-manager/slimmers/event-emit-slimmer';
import { ChildNodesEventPreventSlimmer } from '../../helpers/event-manager/slimmers/child-nodes-event-prevent-slimmer';
import { VegaComponentUsageRuntimeMetricsSlimmer } from '../../helpers/slimmers/component-usage-runtime-metrics';
import { TranslationSlimmer } from '../../helpers/slimmers/translation';
import { VegaDatePickerCalendarOpenStateController } from './slimmers/controllers/vega-date-picker-calendar-open-state-controller';
import { DisabledDate } from '../vega-calendar/types';
/**
 * @vegaVersion 1.3.0
 */
export declare class VegaDatePicker {
  protected readonly globalSlimmers: GlobalSlimmers;
  protected translationSlimmer: TranslationSlimmer<HTMLVegaDatePickerElement>;
  protected calendarOpenStateController: VegaDatePickerCalendarOpenStateController;
  protected vegaDatePickerValueController: VegaDatePickerValueController;
  protected vegaDatePickerFormatController: VegaDatePickerFormatController;
  protected startInputFormatController: VegaDatePickerFormatController;
  protected endInputFormatController: VegaDatePickerFormatController;
  protected vegaDatePickerKeyboardController: VegaDatePickerKeyboardController;
  protected vegaDatePickerRenderer: VegaDatePickerRenderer;
  protected vegaDatePickerSingleInputRenderer: VegaDatePickerSingleInputRenderer;
  protected vegaDatePickerRangeInputRenderer: VegaDatePickerRangeInputRenderer;
  protected vegaDatePickerCalendarRenderer: VegaDatePickerCalendarRenderer;
  protected formFieldController: FormFieldControllerSlimmer<string[] | string>;
  protected changeEventEmitter: EventEmitSlimmerBase;
  protected monthYearChangeEventEmitter: EventEmitSlimmerBase;
  protected inputEventPrevent: ChildNodesEventPreventSlimmer;
  protected vegaComponentUsageRuntimeMetricsSlimmer: VegaComponentUsageRuntimeMetricsSlimmer<HTMLVegaDatePickerElement>;
  host: HTMLVegaDatePickerElement;
  isMobileDevice: boolean;
  isCalendarShow: boolean;
  watchIsCalendarShow(): void;
  /**
   * Specifies the selection mode of the date picker.
   *
   *  - Use `single` to allow selecting a single date.
   *  - Use `range` to allow selecting a date range.
   *
   * @vegaVersion 1.3.0
   */
  mode: DatePickerModeType;
  /** Update datePicker settings property of mode is changed */
  watchMode(): void;
  /**
   * Specifies the selected date or date range in the date picker.
   *
   * @vegaVersion 1.3.0
   */
  value: DatePickerValueType<DatePickerModeType>;
  watchValue(newValue: DatePickerValueType<DatePickerModeType>, oldValue: DatePickerValueType<DatePickerModeType>): void;
  /**
   * Specifies the label or title for the date picker field.
   *
   * It provides descriptive text that helps identify the
   *    purpose or content expected in the date picker field.
   *
   * @vegaVersion 1.3.0
   */
  label: string;
  /**
   * Determines whether the date picker field is required.
   *
   * Specifies whether a date or range must be selected for
   *    the date picker to pass form validation.
   *
   * @vegaVersion 1.3.0
   */
  required: boolean;
  /**
   * Specifies the validation status of the date picker component.
   *
   * @vegaVersion 1.3.0
   */
  isValid: boolean | null;
  /**
   * Determines whether automatic validation should be implemented
   *    when a date or range is selected.
   *
   * @vegaVersion 1.3.0
   */
  autoValidation: boolean;
  /**
   * Specifies the desired date format.
   *
   * @vegaVersion 1.3.0
   */
  format: string;
  /**
   * It is decorated with the `@MapToComponentMethod` decorator,
   * which indicates that this method should be mapped to a component method called 'format'.
   *
   * @param {string} format - The value of the format.
   */
  watchFormat(format: string): void;
  /**
   * Specifies the size of the date picker field.
   *
   * @vegaVersion 1.3.0
   */
  size: 'default' | 'small';
  /**
   * Specifies custom validation rules for the date picker field.
   *
   * @vegaVersion 1.3.0
   */
  validationRules: FormFieldValidationRule<unknown>[];
  watchValidationRules(): void;
  /**
   * Specifies the minimum selectable date in the date picker.
   *
   * @vegaVersion 1.3.0
   */
  minDate: string;
  watchMinDate(value: string): void;
  /**
   * Specifies the maximum selectable date in the date picker.
   *
   * @vegaVersion 1.3.0
   */
  maxDate: string;
  watchMaxDate(value: string): void;
  /**
   * Specifies a placeholder string that displays as a temporary hint
   *    or example inside the date picker field.
   *
   * It indicates the expected format or pattern of the date picker field.
   *
   * @vegaVersion 1.3.0
   */
  placeholder: string | string[];
  /**
   * Specifies whether to display the clear button when the calendar is shown.
   *
   * @vegaVersion 1.3.0
   */
  clearButton: boolean;
  /**
   * Specifies whether the date picker field is set to read-only.
   *
   * If set to `true`, keyboards and touch devices will skip
   *    interacting with this element.
   *
   * @vegaVersion 1.3.0
   */
  readOnly: boolean;
  /**
   * Specifies whether the user is allowed to change either the
   *    start date or end date of an already selected date range
   *    without completely resetting the selected range.
   *
   * @vegaVersion 1.3.0
   */
  allowRepick: boolean;
  /** Update property of allowRepick when it is changed */
  watchAllowRepick(): void;
  /**
   * Specifies the configuration for the calendar dropdown
   *    associated with the date picker.
   *
   * @vegaVersion 1.5.0
   */
  dropdownConfig: DropdownConfigForDatePicker;
  /**
   * Determines whether the clear icon should be displayed or hidden.
   *
   * @vegaVersion 2.33.0
   */
  showClearIcon: boolean;
  /**
   * Determines whether to show months and years dropdown in date picker
   * If set to true, date picker calendar will have months and years dropdown
   *
   * @vegaVersion 2.36.0
   */
  showYearMonthDropdowns: boolean;
  watchShowYearMonthDropdowns(): void;
  /**
   * Specifies whether the date picker field is disabled.
   *
   * @vegaVersion 1.3.0
   */
  disabled: boolean;
  watchDisabled(): void;
  /**
   * 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.35.0
   */
  timezone: string;
  /**
   * 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.60.0
   */
  isDateDisabled: DisabledDate;
  /**
   * An event emitter notifying the change of the value in the date picker,
   *    whether triggered programmatically or through user interaction.
   *
   * @vegaVersion 1.3.0
   */
  vegaChange: 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.0.0
   */
  change: 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>;
  /**
   * Invoke this method to close the calendar dropdown
   *    associated with the date picker.
   *
   * @see{module:vega-date-picker-click-call-do-open-close}
   * @vegaVersion 1.3.0
   */
  doClose(): Promise<void>;
  /**
   * Invoke this method to open the calendar dropdown
   *    associated with the date picker.
   *
   * @see{module:vega-date-picker-click-call-do-open-close}
   * @vegaVersion 1.3.0
   */
  doOpen(): Promise<void>;
  render(): VegaDatePicker;
}
