import { EventEmitter } from '../../stencil-public-runtime';
import { ElementAppenderAlignmentType, ElementAppenderPlacementType, ResponsiveType, SizeType, TranslocationType, VegaEATriggerType } from '../../types/ui.type';
import { GlobalSlimmers } from '../../vega-slimmer/vega-slimmer-core';
import { VegaDropdownRenderer } from './slimmers/renderers/vega-dropdown-renderer';
import { VegaDropdownSourceController } from './slimmers/controllers/vega-dropdown-source-controller';
import { VegaDropdownCreateRenderer } from './slimmers/renderers/vega-dropdown-create-renderer';
import { VegaDropdownListRenderer } from './slimmers/renderers/vega-dropdown-list-renderer';
import { VegaDropdownItemLevelRenderer } from './slimmers/renderers/vega-dropdown-item-level-renderer';
import { VegaDropdownSearchRenderer } from './slimmers/renderers/vega-dropdown-search-renderer';
import { VegaDropdownKeyboardController } from './slimmers/controllers/vega-dropdown-keyboard-conttroller';
import { VegaDropdownAppenderController } from './slimmers/controllers/vega-dropdown-appender-controller';
import { VegaDropdownSearchTriggerEventDetail, VegaDropdownSearchTriggerByType, VegaDropdownSourceItem } from './types';
import { VegaDropdownGroupLevelRenderer } from './slimmers/renderers/vega-dropdown-group-level-renderer';
import { VegaDropdownSearchController } from './slimmers/controllers/vega-dropdown-search-controller';
import { VegaDropdownSelectedController } from './slimmers/controllers/vega-dropdown-selected-controller';
import { VegaDropdownRenderModeController } from './slimmers/controllers/vega-dropdown-render-mode-controller';
import { SubStateNotifySlimmerBase } from '../../helpers/slimmers/sub-state/sub-state-notify-slimmer-base';
import { VegaDropdownChildrenController } from './slimmers/controllers/vega-dropdown-children-controller';
import { EventEmitSlimmerBase } from '../../helpers/event-manager/slimmers/event-emit-slimmer';
import { ChildNodesNotifyObserverSlimmer } from '../../helpers/event-manager/slimmers/child-nodes-notify-observer-slimmer';
import { VegaDropdownItemClickEvent } from './vega-dropdown-item/types';
import { VegaComponentUsageRuntimeMetricsSlimmer } from '../../helpers/slimmers/component-usage-runtime-metrics';
import { VegaDropdownScrollableController } from './slimmers/controllers/vega-dropdown-scrollable-controller';
import { VegaDropdownRemoteInvocationController } from './slimmers/controllers/vega-dropdown-remote-invocation-controller';
import { TranslationSlimmer } from '../../helpers/slimmers/translation';
import { VegaDropdownResetRenderer } from './slimmers/renderers/vega-dropdown-reset-renderer';
/**
 * @vegaVersion 1.3.0
 */
export declare class VegaDropdown {
  protected readonly globalSlimmers: GlobalSlimmers;
  protected translationSlimmer: TranslationSlimmer<HTMLVegaDropdownElement>;
  protected readonly renderer: VegaDropdownRenderer;
  protected readonly sourceController: VegaDropdownSourceController;
  protected readonly searchRenderer: VegaDropdownSearchRenderer;
  protected readonly createRenderer: VegaDropdownCreateRenderer;
  protected readonly listRenderer: VegaDropdownListRenderer;
  protected readonly resetRenderer: VegaDropdownResetRenderer;
  protected readonly groupLevelRenderer: VegaDropdownGroupLevelRenderer;
  protected readonly itemLevelRenderer: VegaDropdownItemLevelRenderer;
  protected readonly keyboardController: VegaDropdownKeyboardController;
  protected readonly appenderController: VegaDropdownAppenderController;
  protected readonly searchController: VegaDropdownSearchController;
  /**
   * childrenController should be defined before selectedController,
   *     which can ensure collecting information before verifying it.
   */
  protected readonly childrenController: VegaDropdownChildrenController;
  protected readonly selectedController: VegaDropdownSelectedController;
  protected readonly renderModeController: VegaDropdownRenderModeController;
  protected readonly scrollableController: VegaDropdownScrollableController;
  protected readonly remoteInvocationController: VegaDropdownRemoteInvocationController;
  protected readonly selectTypeNotifySlimmer: SubStateNotifySlimmerBase;
  protected readonly selectedSourceKeyNotifySlimmer: SubStateNotifySlimmerBase;
  protected readonly prefixIconSlotNotifySlimmer: SubStateNotifySlimmerBase;
  protected readonly itemTooltipPropsNotifySlimmer: SubStateNotifySlimmerBase;
  protected itemClickObserver: ChildNodesNotifyObserverSlimmer<VegaDropdownItemClickEvent>;
  protected showEventEmitter: EventEmitSlimmerBase;
  protected hideEventEmitter: EventEmitSlimmerBase;
  protected dropdownClickEventEmitter: EventEmitSlimmerBase;
  protected resetEventEmitter: EventEmitSlimmerBase;
  protected createEventEmitter: EventEmitSlimmerBase;
  protected searchEventEmitter: EventEmitSlimmerBase;
  protected searchTriggerEventEmitter: EventEmitSlimmerBase;
  protected readonly itemDisplayRuleNotifySlimmer: SubStateNotifySlimmerBase;
  protected vegaComponentUsageRuntimeMetricsSlimmer: VegaComponentUsageRuntimeMetricsSlimmer<HTMLVegaDropdownElement>;
  host: HTMLVegaDropdownElement;
  searchString: string;
  isDropdownShow: boolean;
  sourceForRender: VegaDropdownSourceItem[];
  watchIsDropdownShow(): void;
  /**
   * Specifies the size of the dropdown.
   *    It can be provided as a number or a ResponsiveType.
   *
   * If no size is set, the dropdown will default to fitting the item content width.
   *
   * @vegaVersion 1.3.0
   */
  size: ResponsiveType<SizeType>;
  /**
   * Specifies the trigger mode for the dropdown.
   *   hover: The dropdown is shown/hidden on hover, and listens for global area clicks.
   *   click: The dropdown is shown/hidden on click, and listens for global area clicks.
   *   none: The dropdown does not listen for any events; you must control its visibility within the component.
   *   custom: Custom trigger strategy, more information can refer to https://gethired.atlassian.net/wiki/spaces/VKB/pages/657031171/Trigger+strategy.
   *
   * @vegaVersion 1.3.0
   */
  trigger: VegaEATriggerType;
  /**
   * Specifies the position adjustment for the dropdown
   *    relative to the target element.
   *
   * By default, the dropdown is displayed on the left-bottom of the target.
   *
   * @vegaVersion 1.3.0
   */
  translocation: ResponsiveType<TranslocationType>;
  /**
   * Sets the source array of items for the dropdown,
   *    where each item must have a `key` and `label` property.
   *
   * @vegaVersion 1.3.0
   */
  source: VegaDropdownSourceItem[];
  watchSource(): void;
  /**
   * Specifies the relative positioning of the dropdown menu
   *    in relation to its container.
   *
   * If not specified, the dropdown will be appended to the menu by default.
   *    Adjust this property when facing scrolling positioning problems.
   *
   * @VegaWarning The value of this property should be an element that is
   * 		the parent of this component or an ancestor of the parent element.
   *		Using any other element may lead to unexpected behavior.
   * @vegaVersion 1.3.0
   */
  positionRelativeTo: string;
  /**
   * Controls the dropdown menu's selection. It accepts three values:
   *
   * - `none`:
   *      After an item is selected, this option not only triggers the `vegaDropdownClick`
   *      event but also conceals the dropdown menu immediately.
   * - `single`:
   *      Upon selection of an item whose key matches the `selectedSourceKey` property,
   *      this setting both dispatches the `vegaDropdownClick` event and
   *      hides the dropdown menu.
   * - `multiple`:
   *      When an item with a key found in the `selectedSourceKey` array is selected,
   *      this mode releases the `vegaDropdownClick` event. Unlike the others, however,
   *      Determines the selection mode for multiple item selection.
   *
   * @vegaVersion 1.3.0
   */
  selectType: 'none' | 'single' | 'multiple';
  watchSelectType(): void;
  /**
   * Represents the key corresponding to the selected item in the dropdown menu.
   *    It becomes active only when `selectType` is set to `single` or `multiple`.
   *
   * @vegaVersion 1.3.0
   */
  selectedSourceKey: string | string[];
  watchSelectedSourceKey(): void;
  /**
   * Controls whether the prefix icon occupy a position, even if prefix has no value.
   *
   * @vegaVersion 1.47.0
   */
  prefixIconSlot: boolean;
  watchPrefixIconSlot(): void;
  /**
   * Specifies the maximum height for the dropdown.
   *
   * @vegaVersion 1.3.0
   */
  maxHeight: number;
  /**
   * Controls whether the dropdown list can be searched.
   *
   * @vegaVersion 1.3.0
   */
  searchable: boolean;
  /**
   * Determines whether the dropdown should have the
   *    same width as the target element.
   *
   * @vegaVersion 1.3.0
   */
  matchTargetWidth: boolean;
  /**
   * Specifies the minimum width of the dropdown. It can be provided as
   *    a number or a ResponsiveType.
   *
   * @vegaVersion 1.13.0
   */
  minWidth: ResponsiveType<SizeType>;
  /**
   * Specifies the maximum width of the dropdown. It can be provided as
   *    a number or a ResponsiveType.
   *
   * @vegaVersion 1.13.0
   */
  maxWidth: ResponsiveType<SizeType>;
  /**
   * Specifies the display rule for items in the dropdown.
   *
   * @VegaWarning Specifies the display rule for items in the dropdown, only be active if matchTargetWidth is true or maxWidth has value.
   * @vegaVersion 1.13.0
   */
  itemDisplayRule: 'ellipsis' | 'newline';
  watchItemDisplayRule(): void;
  /**
   * Provides tooltip configuration options for dropdown items.
   *
   * Useful for controlling tooltip width for long item labels.
   *
   * @vegaVersion 2.82.0
   */
  itemTooltipProps: Partial<Pick<HTMLVegaTooltipElement, 'placement' | 'maxWidth' | 'minWidth'>>;
  watchItemTooltipProps(): void;
  /**
   * Determines if the dropdown height should be automatically adjusted
   *    to fit its container height.
   *
   * If set to `true`, the dropdown will always be positioned at
   *    the bottom of the available space.
   *
   * @vegaVersion 1.3.0
   */
  matchContainerHeight: boolean;
  /**
   * Specifies whether the search source list is case-sensitive.
   *
   * Note that the default filter rules are fuzzy matching and case-insensitive.
   *    This parameter only takes effect when `searchable` is set to `true`.
   *
   * @vegaVersion 1.4.0
   */
  caseSensitive: boolean;
  watchCaseSensitive(): void;
  /**
   * Controls whether the dropdown can add a new item when
   *    no proper item is available. It becomes active only when
   *    `searchable` is set to `true`.
   *
   * @vegaVersion 1.16.0
   */
  dynamicOption: boolean;
  /**
   * Determines whether to enable source filtering based on input words.
   *
   * When set to 'false', the component will emit a `vegaSearch` event
   *    when input words are provided. In this case, you are responsible for
   *    managing the source, including adding, deleting, and updating the source.
   *
   * Note that the `dynamicOption` property will not work when
   *    this property is set to `false`.
   *
   * @VegaWarning Set `preserveValueIfNotInSource` to 'true' to get custom filter fully supported when set to 'false'.
   * @vegaVersion 1.24.0
   */
  useDefaultFilter: boolean;
  /**
   * Determines whether the dropdown displays a loading status.
   *
   * @vegaVersion 1.24.0
   */
  isLoading: boolean;
  /**
   * Specifies the vertical positioning of the dropdown
   *    within its container or relative to a reference point.
   *
   * @vegaVersion 1.41.0
   */
  placement: ElementAppenderPlacementType;
  /**
   * Determines the horizontal positioning of the dropdown
   *    within its container or relative to a reference point.
   *
   * @vegaVersion 1.41.0
   */
  alignment: ElementAppenderAlignmentType;
  /**
   * Determines whether the dropdown displays a lazy loading status.
   *
   * @vegaVersion 2.3.0
   */
  isLazyLoading: boolean;
  /**
   * Determines whether the dropdown search is triggered by input or pressing the Enter key.
   *
   * @vegaVersion 2.26.0
   */
  searchTriggerBy: VegaDropdownSearchTriggerByType;
  /**
   * Determines whether the dropdown position is calculated relative to the screen.
   *
   * @VegaWarning - It will overrides the positionRelativeTo and matchContainerHeight properties, rendering them ineffective.
   * 			    - Currently, when set to true, the position calculation may be inaccurate if the popover is placed inside a scrollable container within a shadowRoot (e.g., inside a vega-modal with scrollable content).
   * @vegaVersion 2.36.0
   */
  isScreenPosition: boolean;
  /**
   * Specifies whether the selected option in the dropdown can be cleared.
   *    It allows users to reset the selectedSourceKey when a selection has already been made.
   *
   * @vegaVersion 2.46.0
   */
  resettable: boolean;
  /**
   * The count of the source that will be used as the threshold for determining whether to use virtual scrolling.
   * If the count of source exceeds this threshold, we employ virtual scrolling. Otherwise, normal item rendering is used
   * If the value is 0, it means we will disable the virtualization all the time.
   *
   * @vegaVersion 2.54.0
   */
  virtualizationThreshold: number;
  /**
   * Controls whether the value of selectedSourceKey is preserved when it does not exist in the source.
   *
   * @vegaVersion 2.69.0
   */
  preserveValueIfNotInSource: boolean;
  /**
   * Specifies the no search results text for the dropdown.
   *
   * @vegaVersion 2.74.0
   */
  searchNoResultsText: string;
  /**
   * An event emitter notifying that a dropdown item has been clicked.
   *
   * The event's `detail` property contains the key of the clicked item.
   *
   * @vegaVersion 1.11.0
   */
  vegaDropdownClick: EventEmitter<string>;
  /**
   * An event emitter notifying that a dropdown item has been clicked.
   *
   * The event's `detail` property contains the key of the clicked item.
   * @eventSemantics namespace:native
   * @vegaVersion 2.0.0
   */
  dropdownClick: EventEmitter<string>;
  /**
   * An event emitter notifying that the dropdown has been displayed,
   *    either programmatically or via user interaction.
   *
   * @vegaVersion 1.3.0
   */
  vegaShow: EventEmitter<string>;
  /**
   * An event emitter notifying that the dropdown has been displayed,
   *    either programmatically or via user interaction. The name is not `show` because already has a method `show`.
   *
   * @eventSemantics namespace:native
   * @vegaVersion 2.0.0
   */
  dropdownShow: EventEmitter<string>;
  /**
   * Event emitter notifying that the dropdown has been dismissed,
   *    either programmatically or via user interaction.
   *
   * @vegaVersion 1.3.0
   */
  vegaHide: EventEmitter<string>;
  /**
   * An event emitter notifying that the dropdown has been dismissed,
   *    either programmatically or via user interaction. The name is not `hide` because already has a method `hide`.
   *
   * @eventSemantics namespace:native
   * @vegaVersion 2.0.0
   */
  dropdownHide: EventEmitter<string>;
  /**
   * An event emitter notifying the addition of a new value
   *    to the dropdown source list.
   *
   * The event's `detail` property contains the new value.
   *
   * The dropdown _does not_ automatically add the new value to the source list.
   *
   * @vegaVersion 1.14.0
   */
  vegaCreate: EventEmitter<string>;
  /**
   * An event emitter notifying the addition of a new value
   *    to the dropdown source list.
   *
   * The event's `detail` property contains the new value.
   *
   * The dropdown _does not_ automatically add the new value to the source list.
   *
   * @eventSemantics namespace:native
   * @vegaVersion 2.0.0
   */
  create: EventEmitter<string>;
  /**
   * An event emitter notifying the search event in the dropdown,
   *    but only if `useDefaultFilter` is set to `false`.
   *
   * @vegaVersion 1.24.0
   */
  vegaSearch: EventEmitter<string>;
  /**
   * An event emitter notifying the search event in the dropdown,
   *    but only if `useDefaultFilter` is set to `false`. The name is not `search` because already has a method `search`.
   *
   * @eventSemantics namespace:native
   * @vegaVersion 2.0.0
   */
  dropdownSearch: EventEmitter<string>;
  /**
   * An event emitter notifying the reset event in the dropdown.
   *
   * @vegaVersion 2.46.0
   */
  vegaReset: EventEmitter<string>;
  /**
   * An event emitter notifying the reset event in the dropdown.
   *
   * @eventSemantics namespace:native
   * @vegaVersion 2.46.0
   */
  reset: 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,
   *    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.
   *
   * @eventSemantics namespace:native
   * @vegaVersion 2.30.0
   */
  searchTrigger: EventEmitter<VegaDropdownSearchTriggerEventDetail>;
  /**
   * Invoke this method to programmatically display the dropdown menu.
   *
   * @vegaVersion 1.3.0
   */
  show(): Promise<void>;
  /**
   * Invoke this method to programmatically dismiss the dropdown menu.
   *
   * @vegaVersion 1.3.0
   */
  hide(): Promise<void>;
  /**
   * Invoke this method to set the search input value and
   *    filter the list of items in the dropdown.
   *
   * This method is applicable only when the dropdown is searchable.
   *
   * @vegaVersion 1.11.0
   */
  search(input: string): Promise<void>;
  /**
   * Invoke this method to clear the selected items keys,
   *    removing any current selection.
   *
   * @vegaVersion 1.47.0
   */
  clearSelection(): Promise<void>;
  /**
   * Invoke this method to retrieve the selected items keys,
   *    providing an key or list of the keys representing
   *    the currently selected items.
   *
   * @vegaVersion 1.47.0
   */
  getSelection(): Promise<string[] | string>;
  /**
   * Invoke this method to set the selected items keys,
   *    specifying an array or list of keys to represent
   *    the desired selected items.
   *
   * @param {string[]} keys - Row keys to be set as selected.
   * @vegaVersion 1.47.0
   */
  setSelection(keys: string[] | string): Promise<void>;
  render(): VegaDropdown;
}
