import { EventEmitter } from '../../stencil-public-runtime';
import { BreakpointsTokenType } from '../../types/design-token.type';
import { ResponsiveType } from '../../types/ui.type';
import { FormFieldValidationRule } from '../../helpers/validator/rules/form-field-validation-rule';
import { SelectedLabelType, SelectedLabelTypeForAllModes, SelectSourceItem, SelectType, SelectValueType, VegaDropdownPropsForSelect, VegaInputSelectSize, VegaInputSelectSourceLazyLoadCallback, VegaInputSelectTooltipProps, VegaInputSelectDropdownTooltipProps } from './types';
import { VegaInputSelectRenderer } from './slimmers/renderers/vega-input-select-renderer';
import { GlobalSlimmers } from '../../vega-slimmer/vega-slimmer-core';
import { VegaInputSelectDropdownController } from './slimmers/controllers/vega-input-select-dropdown-controller';
import { VegaInputSelectValueController } from './slimmers/controllers/vega-input-select-value-controller';
import { VegaInputSelectItemController } from './slimmers/controllers/vega-input-select-item-controller';
import { VegaInputSelectDropdownRenderer } from './slimmers/renderers/vega-input-select-dropdown-renderer';
import { FormFieldControllerSlimmer } from '../../helpers/slimmers/form-field-controller-slimmer';
import { PageResizeObserverSlimmer } from '../../helpers/slimmers/page-resize-observer-slimmer';
import { EventEmitSlimmerBase } from '../../helpers/event-manager/slimmers/event-emit-slimmer';
import { ChildNodesEventPreventSlimmer } from '../../helpers/event-manager/slimmers/child-nodes-event-prevent-slimmer';
import { VegaInputSelectLazyLoadController } from './slimmers/controllers/vega-input-select-lazy-load-controller';
import { VegaComponentUsageRuntimeMetricsSlimmer } from '../../helpers/slimmers/component-usage-runtime-metrics';
import { VegaInputSelectSourceController } from './slimmers/controllers/vega-input-select-source-controller';
import { VegaInputSelectItemsSlotController } from './slimmers/controllers/vega-input-select-items-slot-controler';
import { TranslationSlimmer } from '../../helpers/slimmers/translation';
import { VegaDropdownSearchTriggerEventDetail } from '../vega-dropdown/types';
import { VegaInputSelectPrefixIconRenderer } from './slimmers/renderers/vega-input-select-prefix-icon-renderer';
import { LabelSuffixButtonConfig } from '../vega-field-label/types';
import { Nullable } from '../../types/general';
/**
 * @vegaVersion 1.0.7
 */
export declare class VegaInputSelect {
  protected readonly globalSlimmers: GlobalSlimmers;
  protected translationSlimmer: TranslationSlimmer<HTMLVegaInputSelectElement>;
  protected readonly sourceController: VegaInputSelectSourceController;
  protected readonly vegaInputSelectRenderer: VegaInputSelectRenderer;
  protected readonly vegaInputSelectPrefixIconRenderer: VegaInputSelectPrefixIconRenderer;
  protected readonly vegaInputSelectDropdownController: VegaInputSelectDropdownController;
  protected readonly vegaInputSelectValueController: VegaInputSelectValueController;
  protected readonly vegaInputSelectDropdownRenderer: VegaInputSelectDropdownRenderer;
  protected readonly vegaInputSelectItemsSlotController: VegaInputSelectItemsSlotController;
  protected readonly vegaInputSelectItemController: VegaInputSelectItemController;
  protected readonly formFieldControllerSlimmer: FormFieldControllerSlimmer<SelectValueType<SelectType>>;
  protected readonly pageResizeObserverSlimmer: PageResizeObserverSlimmer;
  protected readonly lazyLoadController: VegaInputSelectLazyLoadController;
  protected changeEventEmitter: EventEmitSlimmerBase;
  protected searchEventEmitter: EventEmitSlimmerBase;
  protected searchTriggerEventEmitter: EventEmitSlimmerBase;
  protected showEventEmitter: EventEmitSlimmerBase;
  protected hideEventEmitter: EventEmitSlimmerBase;
  protected labelButtonClickEventEmitter: EventEmitSlimmerBase;
  protected eventPrevent: ChildNodesEventPreventSlimmer;
  protected vegaComponentUsageRuntimeMetricsSlimmer: VegaComponentUsageRuntimeMetricsSlimmer<HTMLVegaInputSelectElement>;
  host: HTMLVegaInputSelectElement;
  isDropdownShow: boolean;
  currentBreakpoint: BreakpointsTokenType;
  isLazyLoading: boolean;
  selectedItem: Nullable<SelectSourceItem | SelectSourceItem[]>;
  /**
   * Specifies the label or title for the input field.
   *
   * It provides descriptive text that helps identify the purpose or
   *    content expected in the input select field.
   *
   * @vegaVersion 1.3.0
   */
  label: string;
  /**
   * Specifies the properties for the suffix button associated with the input.
   *
   * It provides essential information and functionality
   *  related to the suffix button's role and behavior.
   *
   * @vegaVersion 2.68.0
   */
  labelSuffixButtonConfig: Nullable<LabelSuffixButtonConfig>;
  /**
   * Determines whether the input select field is required.
   *
   * @vegaVersion 1.0.7
   */
  required: boolean;
  /**
   * Allows customization of the text displayed within the
   *    select field when single or multiple items are selected.
   *    The default format for the selected label is
   *    `{0} Selected` for multiple mode only.
   *
   *	To enable all modes, use the `SelectedLabelTypeForAllModes` type.
   * 		For single mode, the default format is the `displayName` of the selected item if not set
   * 		For multiple mode, the default format is `{0} Selected` if not set
   *
   * @vegaVersion 1.35.0
   */
  selectedLabel: SelectedLabelType | SelectedLabelTypeForAllModes;
  /**
   * Controls the selection capabilities of the associated dropdown menu.
   *
   * @vegaVersion 1.35.0
   */
  selectType: SelectType;
  watchSelectType(): void;
  /**
   * Specifies the dataset used to populate the options
   *    available in the select input dropdown menu.
   *
   * @vegaVersion 1.0.7
   */
  source: SelectSourceItem[];
  watchSource(): void;
  /**
   * Specifies the ID of the item selected from the source data
   *    in the dropdown menu.
   *
   * The ID should be unique within the source collection to
   *    correctly associate the chosen option with its
   *    corresponding data entry.
   *
   * @vegaVersion 1.0.7
   */
  value: SelectValueType<SelectType>;
  watchValue(newValue: SelectValueType<SelectType>, oldValue: SelectValueType<SelectType>): void;
  /**
   * Indicates the current validation status of the user's selection
   *    from the dropdown menu.
   *
   * @vegaVersion 1.3.0
   */
  isValid: boolean | null;
  /**
   * Specifies whether the system should automatically carry out
   *    validation checks on the user's selection in real-time,
   *    ensuring that the input adheres to predefined criteria before
   *    submission or proceeding further.
   *
   * @vegaVersion 1.0.11
   */
  autoValidation: boolean;
  /**
   * Allows setting custom criteria or constraints that
   *    the user's selection in the dropdown menu must
   *    comply with.
   *
   * @vegaVersion 1.0.11
   */
  validationRules: FormFieldValidationRule<unknown>[];
  watchValidationRules(): void;
  /**
   * Specifies a prefix icon for visual context or aesthetic enhancement.
   *
   * @vegaVersion 1.3.0
   */
  prefixIcon: string;
  /**
   * Specifies whether the input select field is disabled.
   *
   * @vegaVersion 1.3.0
   */
  disabled: boolean;
  /**
   * Specifies a placeholder string that displays as a temporary hint or
   *    example inside the input select field.
   *
   * It indicates the expected format or pattern of the input.
   *
   * @vegaVersion 1.0.7
   */
  placeholder: string;
  /**
   * Provides a supplementary prompt message that assists users in
   *    understanding the expected value for the input select field.
   *
   * @vegaVersion 1.3.0
   */
  hint: string;
  /**
   * Provides partial properties for the `vega-dropdown` component used
   *    in the input select element.
   *
   * You can specify custom properties and their corresponding values as needed.
   *
   * @vegaVersion 1.3.0
   */
  vegaDropdownProps: VegaDropdownPropsForSelect;
  watchVegaDropdownProps(): void;
  /**
   * Provides tooltip configuration for the selected label text.
   *
   * Use this to control tooltip placement, width, and other display properties.
   *
   * @vegaVersion 2.82.0
   */
  selectedLabelTooltipProps: VegaInputSelectTooltipProps;
  watchSelectedLabelTooltipProps(): void;
  /**
   * Provides tooltip configuration for dropdown items.
   *
   * Use this to control tooltip placement and width for long item labels.
   *
   * @vegaVersion 2.82.0
   */
  dropdownItemTooltipProps: VegaInputSelectDropdownTooltipProps;
  watchDropdownItemTooltipProps(): void;
  /**
   * Defines the size of the input select field.
   *
   * @vegaVersion 1.18.0
   */
  size: ResponsiveType<VegaInputSelectSize>;
  /**
   *  Specifies the callback function for source lazy loading, which returns new data to load.
   *
   *  When the dropdown reaches the bottom, this function is triggered and
   *      receives the current end index as a parameter.
   *
   * @vegaVersion 2.3.0
   */
  sourceLazyLoadCallback: VegaInputSelectSourceLazyLoadCallback;
  /**
   * An event emitter notifying the change of the select value.
   *
   * @vegaVersion 1.0.11
   */
  vegaChange: EventEmitter<SelectValueType<SelectType>>;
  /**
   * An event emitter notifying the change of the select value.
   *
   * @eventSemantics namespace:native
   * @vegaVersion 2.0.0
   */
  change: EventEmitter<SelectValueType<SelectType>>;
  /**
   * An event emitter notifying the search of the dropdown.
   *
   * @vegaVersion 1.50.0
   */
  vegaSearch: EventEmitter<string>;
  /**
   * An event emitter notifying the search of the dropdown.
   *
   * @eventSemantics namespace:native
   * @vegaVersion 2.0.0
   */
  search: EventEmitter<string>;
  /**
   * An event emitter notifying the search event triggered within the dropdown,
   *    but only if `useDefaultFilter` is set to `false`.
   * Unlike the Vegasearch event, this event includes the details of the user who triggered it.
   * It can be triggered in two ways: by pressing "Enter" or through user input.
   *
   * @vegaVersion 2.30.0
   */
  vegaSearchTrigger: EventEmitter<VegaDropdownSearchTriggerEventDetail>;
  /**
   * An event emitter notifying the search event triggered within the dropdown,
   * Unlike the Vegasearch event, this event includes the details of the user who triggered it.
   * It can be triggered in two ways: by pressing "Enter" or through user input.
   *
   * @eventSemantics namespace:native
   * @vegaVersion 2.30.0
   */
  searchTrigger: EventEmitter<VegaDropdownSearchTriggerEventDetail>;
  /**
   * An event emitter notifying that the input-select has been opened,
   *    either programmatically or via user interaction.
   *
   * @vegaVersion 2.32.0
   */
  vegaShow: EventEmitter<string>;
  /**
   * Event emitter notifying that the input-select has been dismissed,
   *    either programmatically or via user interaction.
   *
   * @vegaVersion 2.32.0
   */
  vegaHide: EventEmitter<string>;
  /**
   * An event emitter notifying that the suffix button associated with the field label has been clicked.
   *
   * @vegaVersion 2.68.0
   */
  vegaLabelButtonClick: EventEmitter;
  /**
   * An event emitter notifying that the suffix button associated with the field label has been clicked.
   *
   * @eventSemantics namespace:native
   * @vegaVersion 2.68.0
   */
  labelButtonClick: EventEmitter;
  componentWillLoad(): void;
  /**
   * Invoke this method to close the select dropdown and clear
   *    the dropdown element reference.
   *
   * @vegaVersion 1.0.7
   */
  doClose(): Promise<void>;
  /**
   * Invoke this method to open the select dropdown.
   *
   * @vegaVersion 1.0.7
   */
  doOpen(): Promise<void>;
  /**
   * Invoke this method to change the ID of the select source item.
   *
   * @vegaVersion 1.0.7
   */
  doChange(value: SelectValueType<SelectType>): Promise<void>;
  render(): VegaInputSelect;
}
