import { EventEmitter } from '../../stencil-public-runtime';
export interface ListItem {
  label: string;
  selected?: boolean;
  sort?: string;
  id?: string;
  check?: boolean;
}
export interface ListGroup {
  group: string;
  items: ListItem[];
  sort?: string;
}
export interface ListItemGroup {
  item: ListItem;
  groupName?: string;
  index?: number;
}
export type TListMode = {
  regular: string;
  check: string;
};
export type SlotBuilder = (item: ListItem, group?: ListGroup) => HTMLElement | string;
export declare class EzList {
  private i18n;
  _listItems: ListItem[];
  _listGroupItems: ListGroup[];
  private _dragStartItem;
  private _listItemsHistory;
  private _groupContainer;
  private _element;
  private _itemContainer;
  private _changeDeboucingTimeout;
  /**
   * Define a lista inicial do componente.
   */
  dataSource: Array<ListGroup | ListItem>;
  /**
   * Define o modo de apresentação da lista.
   */
  listMode?: keyof TListMode;
  /**
   * Se true os grupos serão exibidos.
   */
  useGroups: boolean;
  /**
   * Se true habilita `drag and drop` para os itens.
   */
  ezDraggable: boolean;
  /**
   * Se true os itens serão selecionáveis.
   */
  ezSelectable: boolean;
  /**
   * Função builder que possibilita alterar como o item da lista vai ser apresentado.
   * Observação: No react ele se transforma em VNode e não como HTMLElement.
   */
  itemSlotBuilder: SlotBuilder;
  /**
   * Função builder que possibilita gerar conteúdo dinâmico à esquerda do item da lista.
   * * Observação: No react ele se transforma em VNode e não como HTMLElement.
   */
  itemLeftSlotBuilder: SlotBuilder;
  /**
   * Quando verdadeiro, ativa o feedback visual ao efetuar houver nos itens da lista.
   */
  hoverFeedback: boolean;
  /**
   * Habilita seleção de múltiplos items.
   */
  enableMultipleSelection: boolean;
  /**
   * Habilita a seleção de checkbox.
   */
  enabled: boolean;
  /**
   * Emitido quando acontece a alteração de estado da lista.
   */
  ezChange: EventEmitter<Array<ListItem | ListGroup>>;
  /**
   * Emitido sempre que um item da lista for selecionado.
   */
  ezSelectItem: EventEmitter<ListItem>;
  /**
   * Emitido sempre que um ou vários item da lista for selecionado.
   */
  ezSelectMultipleItems: EventEmitter<ListItem[]>;
  /**
   * Emitido quando acontece a alteração de um item do checkbox.
   */
  ezCheckChange?: EventEmitter<ListItem>;
  /**
   * Emitido quando ocorre um duplo clique em um item da lista.
   */
  ezDoubleClick?: EventEmitter<ListItem>;
  /**
   * Limpa o histórico da lista.
   */
  clearHistory(): Promise<void>;
  /**
   * Traz o conteúdo da lista para a área visível.
   */
  scrollToTop(): Promise<void>;
  /**
   * Aplica seleção nas linhas da lista.
   */
  setSelection(selectedItem: ListItem, scrollToOption?: boolean, shitkey?: boolean, ctrlKey?: boolean): Promise<void>;
  private emitSelectedItems;
  private setSelectionRange;
  private setSelectionMultiple;
  private setSelectionSingleItem;
  private setSelectionWithGroups;
  /**
   * Obtém o item selecionado.
   */
  getSelection(): Promise<ListItem>;
  /**
   * Obtém a lista de items ou grupos.
   */
  getList(): Promise<Array<ListItem | ListGroup>>;
  /**
   * Limpa a seleção atual
   */
  removeSelection(): Promise<void>;
  private applyUUID;
  private createList;
  private sortGroup;
  buildIdDraggableListAndSelectable(): void;
  componentWillLoad(): Promise<void>;
  componentWillRender(): void;
  componentDidLoad(): void;
  onDrop(ev: any, dragEndItem: ListItemGroup): void;
  private buildDragHandlerConfig;
  private onDropWithGroups;
  onDropLastIndex(ev: any, groupDropped?: any): void;
  private onDropLastItemWithGroups;
  onDropGroup(groupSelected: any): void;
  onDragEnd(): void;
  addOverClass(element: any): void;
  addOverGroupClass(ev: any, group: ListGroup): void;
  removeOverClass(): void;
  removeOverGroupClass(ev: any, group: any): void;
  onDragStart(item: any, group?: any, index?: any): void;
  private onDragStartWithGroups;
  selectFirstItem(): void;
  nextOption(selectedItem: ListItem): void;
  private nextOptionWithGroups;
  previousOption(selectedItem: ListItem): void;
  private previousOptionWithGroups;
  private keyDownHandler;
  getDivGroupId(groupName: String): string;
  getGroupOverlayId(groupName: string): string;
  onDragOverGroup(event: DragEvent, group: ListGroup): void;
  onDragOverItem(event: DragEvent): void;
  onDragOverLastIndex(ev: any): void;
  showOverlays(groupDragStart: any): void;
  hideOverlays(): void;
  getContainerItemBuilder(slotPosition: 'left' | 'right', item: ListItem, group?: ListGroup, className?: string): HTMLElement;
  doubleClickItem(item: ListItem): void;
  private buildItem;
  private renderListWithGroups;
  private renderList;
  render(): any;
}
