import { VegaSlimmer } from '../../../../vega-slimmer/vega-slimmer-core';
import { VegaDropdown } from '../../vega-dropdown';
/**
 * The `VegaDropdownSelectedController` class handles the selection of items in a dropdown menu,
 * either adding them to an array or setting them as the only selected item.
 */
export declare class VegaDropdownSelectedController extends VegaSlimmer {
  host: VegaDropdown['host'];
  selectType: VegaDropdown['selectType'];
  source: VegaDropdown['source'];
  selectedSourceKey: VegaDropdown['selectedSourceKey'];
  preserveValueIfNotInSource: VegaDropdown['preserveValueIfNotInSource'];
  vegaDropdownClick: VegaDropdown['vegaDropdownClick'];
  appenderController: VegaDropdown['appenderController'];
  childrenController: VegaDropdown['childrenController'];
  renderModeController: VegaDropdown['renderModeController'];
  dropdownClickEventEmitter: VegaDropdown['dropdownClickEventEmitter'];
  resetEventEmitter: VegaDropdown['resetEventEmitter'];
  /**
   * Component lifecycle - componentWillLoad
   */
  componentWillLoad(): void;
  /**
   * The function clears the selected source key based on the select type.
   */
  clearSelection(): void;
  /**
   * The callback to handle [getSelection]{@link VegaTable.getSelection}
   *
   * @returns {string[] | string} The selected row keys array
   */
  getSelection(): string[] | string;
  /**
   * The function `watchSelectedRowKeySet` sets the `selectedSourceKey` property based on the
   * `selectType` and the provided `keys`.
   *
   * @param {string[] | string} keys - The parameter "keys" can be either a string or an array of
   * strings.
   * @returns {void} -.
   */
  watchSelectedRowKeySet(keys: string[] | string): void;
  /**
   * The function `watchSelectType()` updates the value of `selectedSourceKey` based on the value of
   * `selectType`.
   *
   * @returns {void} -.
   */
  watchSelectType(): void;
  /**
   * The function "watchSelectedSourceKey" assigns a value to the variable "selectedSourceKey" by calling
   * the function "checkSelectedSourceKey" with the current value of "selectedSourceKey" as an argument.
   *
   * @param {string[] | string} newValue - new value.
   * @param {string[] | string} oldValue - old value.
   */
  watchSelectedSourceKey(newValue: VegaDropdown['selectedSourceKey'], oldValue: VegaDropdown['selectedSourceKey']): void;
  /**
   * The function "watchSource" synchronizes the dropdown current data and checks the selected source
   * key.
   */
  watchSource(): void;
  /**
   * The function checks if the input is an acceptable item selection observer.
   *
   * @param {unknown} input - The input parameter is of type unknown, which means it can be any type.
   * @returns {boolean} a boolean value.
   */
  isAcceptableItemSelectionObserver<T>(input: unknown): input is T;
  /**
   * The select function handles the selection of a key, either adding it to the selectedSourceKey array
   * or setting it as the only selected key.
   *
   * @param {string} key - The key parameter is a string that represents the selected item.
   */
  select(key: string): void;
  /**
   * The reset action.
   */
  reset(): void;
  /**
   * The function checks if the given item belongs to the current dropdown.
   * There have two cases:
   *   <vega-dropdown trigger="click">
   *      <div slot="items">
   *          // Case 1:
   *          // This item is in current vega-dropdown-content-box
   *	        <vega-dropdown-item label="Item 1" item-key="item1"></vega-dropdown-item>
   *          <vega-dropdown trigger="click">
   *              // Case 2:
   *              // This item is in current vega-dropdown-content-box, but it also in nest dropdown content slot
   *              // and not the realy item of parent dropdown, So we should have filter it out.
   *              <vega-dropdown-item label="Item 2" item-key="item2"></vega-dropdown-item>
   *              <div slot="items">
   *                 ...
   *              </div>
   *          </vega-dropdown>
   *      </div>
   *  <vega-dropdown>
   *
   * @param {HTMLElement} item - The `item` parameter is an HTMLElement, which represents an element in
   * the DOM (Document Object Model). It is the element that we want to check if it is currently in a
   * dropdown.
   * @returns {boolean} a boolean value.
   */
  private isCurrentDropdown;
  /**
   * The function `checkSelectedSourceKey` checks if the selected source key is valid based on the select
   * type and returns the key or an empty array/string if it is invalid.
   *
   * @param {string | string[]} key - The `key` parameter can be either a string or an array of strings.
   * @returns {void} The function `checkSelectedSourceKey` returns either a string or an array of strings.
   */
  private checkSelectedSourceKey;
  /**
   * The function checks if multiple selected keys exist and removes invalid keys, returning the valid
   * keys.
   *
   * @param {string[]} keys - An array of strings representing the selected keys.
   * @returns {string[]} an array of valid keys after removing any invalid keys from the input array.
   */
  private checkMultipleSelectedKeys;
}
