import { EventEmitter } from '../../stencil-public-runtime';
import { ListItem } from '../ez-sortable-list/ez-sortable-list';
export interface DoubleListSlotConfig {
  itemLeftSlotBuilder?: (item: any) => HTMLElement | string;
  itemRightSlotBuilder?: (item: any) => HTMLElement | string;
}
export interface DoubleListSlots {
  LEFT_LIST?: DoubleListSlotConfig;
  RIGHT_LIST?: DoubleListSlotConfig;
}
export interface EmptyMessage {
  LEFT_LIST?: string;
  RIGHT_LIST?: string;
}
export declare class EzDoubleList {
  readonly LEFT_LIST_ID = "LEFT-LIST-ID";
  readonly RIGHT_LIST_ID = "RIGHT-LIST-ID";
  /**
   * Define a lista origem.
   */
  leftList: ListItem[];
  /**
   * Define o título da lista origem.
   */
  leftTitle: string;
  /**
   * Define a lista destino.
   */
  rightList: ListItem[];
  /**
   * Nome da entidade listada.
   * Exemplo: "Campo", "Item", "Empresa".
   */
  entityLabel: string;
  /**
   * Variação plural do nome da entidade listada.
   * Exemplo: "Campos", "Itens", "Empresas".
   */
  entityLabelPlural: string;
  /**
   * Rótulo da lista esquerda.
   */
  leftListLabel: string;
  /**
   * Rótulo da lista direita.
   */
  rightListLabel: string;
  /**
   * Define se irá exibir apenas a lista da direita.
   */
  useOnlyRightList: boolean;
  /**
   * Define o título da lista destino.
   */
  rightTitle: string;
  /** Objeto que define as mensagens a serem exibidas quando a lista está vazia
   * Exemplo:
   * {
   *  LEFT_LIST?: "Lista lado esquerdo vazia.",
   *  RIGHT_LIST?: "Lista lado direito vazia.";
   * }
   */
  emptyMessage: EmptyMessage;
  /**
   * Objeto que define os métodos de construção dos elementos visuais para os itens de cada lista.
   *
   * Este objeto permite configurar dinamicamente os elementos HTML que serão exibidos ao lado
   * esquerdo e direito dos itens em ambas as listas (`LEFT_LIST` e `RIGHT_LIST`).
   */
  slotsListBuilder: DoubleListSlots;
  leftFilteredList: ListItem[];
  rightFilteredList: ListItem[];
  selectedLeftList: string[];
  selectedRightList: string[];
  isFilteringLeft: boolean;
  isFilteringRight: boolean;
  /**
   * Emitido ao realizar uma alteração na lista esquerda do componente.
   */
  ezLeftListChanged: EventEmitter<Array<ListItem>>;
  /**
   * Emitido ao realizar uma alteração na lista direita do componente.
   */
  ezRightListChanged: EventEmitter<Array<ListItem>>;
  resetSelectedLists(): Promise<void>;
  observeLeftList(newValue: any, oldValue: any): void;
  observeRightList(newValue: any, oldValue: any): void;
  private leftEzListInstance;
  private rightEzListInstance;
  private i18n;
  componentWillLoad(): Promise<void>;
  handleChangeLeft({ detail }: CustomEvent): Promise<void>;
  handleChangeRight({ detail }: CustomEvent): Promise<void>;
  private reorderArray;
  private enableTransferAllToRight;
  private enableTransferAllToLeft;
  private enableTransferToRight;
  private enableTransferToLeft;
  private enableMoveUp;
  private enableMoveDown;
  private getRightSelectedItemsIndex;
  private transferToRight;
  private transferToLeft;
  handleTransferAllToRight(): Promise<void>;
  handleTransferAllToLeft(): Promise<void>;
  private buildTransferToRightConfig;
  private buildTransferToLeftConfig;
  handleMoveUp(): void;
  handleMoveDown(): void;
  handleMoveToTop(): void;
  handleMoveToBottom(): void;
  handleSelectLeftItem({ detail }: CustomEvent): void;
  handleSelectRightItem({ detail }: CustomEvent): void;
  getItemsToKeepAndToMove(): {
    itemsToKeep: ListItem[];
    itemsToMove: ListItem[];
  };
  handleTransferToRight(): Promise<void>;
  handleTransferToLeft(): Promise<void>;
  clearSelectionAll(): Promise<void>;
  handleChooseLeft(): void;
  handleChooseRight(): void;
  private renderList;
  render(): any;
}
