import { EventEmitter } from '../../stencil-public-runtime';
import { DataUnit } from '@sankhyalabs/core';
import { IRecordValidator } from '@sankhyalabs/ezui/dist/types/utils/form/interfaces';
import { IStatusResolver, StatusResolverFunction } from '@sankhyalabs/ezui/dist/types/components/ez-grid/controller/EzGridController';
import { ICustomFormatter, ISelectionToastConfig } from '@sankhyalabs/ezui/dist/types/components/ez-grid/interfaces';
import { DataState } from '../snk-data-unit/snk-data-unit';
import { Action, TaskbarManager } from '../snk-taskbar/snk-taskbar';
import { PresentationMode } from '../../lib';
import { VIEW_MODE } from '../../lib/utils/constants';
import { SnkMessageBuilder } from '../../lib/message/SnkMessageBuilder';
import { ICustomRender, ICustomEditor } from '@sankhyalabs/ezui/dist/types/utils';
import { IExporterStrategyMode } from '../snk-data-exporter/interfaces/IRecordID';
export declare class SnkCrud {
  _viewStack: HTMLEzViewStackElement;
  _snkConfigurator: HTMLSnkConfiguratorElement;
  _snkAttach: HTMLSnkAttachElement;
  _snkDataUnit: HTMLSnkDataUnitElement;
  _snkGrid: HTMLSnkGridElement;
  _guidesViewer: HTMLSnkGuidesViewerElement;
  _backToGrid: boolean;
  private _application;
  private _viewHistory;
  private _customEditors;
  private _customRenders;
  private _keyboardManager;
  _element: HTMLElement;
  _dataUnit: DataUnit;
  _dataState: DataState;
  attachmentRegisterKey: string;
  _currentViewMode: VIEW_MODE;
  _canEdit: boolean;
  _resourceID: string;
  /**
   * Define se o componente deve usar o LockManager para controle de carregamento da aplicação
   */
  enableLockManagerLoadingComp?: boolean;
  /**
   * Ativa o gerenciamento de locks na grade pela Taskbar.
   */
  enableLockManagerTaskbarClick?: boolean;
  /**
   * Usado para salvar as configurações dos blocos de construção.
   */
  configName: string;
  /**
   * Título que será apresentado na barra de filtros
   */
  filterBarTitle: string;
  /**
   * Configuração da seleção de grade no toast.
   */
  selectionToastConfig: ISelectionToastConfig;
  /**
   * Usado para exibir os botões de ação do snk-configurator
   */
  showActionButtons: boolean;
  /**
   * Ações a serem colocadas no botão "Mais opções" do componente snk-taskbar.
   */
  actionsList: Array<Action>;
  /**
  * Gerenciador das barras de tarefas. É possível determinar botões específicos
  * ou mesmo gerenciar o estado dos botões.
  */
  taskbarManager: TaskbarManager;
  /**
  * Validador responsável por checar a integridade das informações do registro.
  */
  recordsValidator: IRecordValidator;
  /**
   * Configuração do valor da coluna de status.
   * Exemplo: { "RECDESP": { "-1" : "#BD0025", "1" : "#157A00" } }
   */
  statusResolver: IStatusResolver | StatusResolverFunction;
  /**
   * Determina se pode haver mais de uma linha selecionada na grade.
   */
  multipleSelection: boolean;
  /**
   * Altera o modo de apresentação dos botões do snk-taskbar.
  */
  presentationMode: PresentationMode;
  /**
  * Responsável por flexibilizar e padronizar o uso de mensagens nos blocos de construção.
  */
  messagesBuilder: SnkMessageBuilder;
  /**
   * Quando verdadeiro, o ENTER fará a navegação como se fosse a tecla TAB na grade.
   */
  useEnterLikeTab: boolean;
  /**
   * Chave da configuração legado da grade.
   */
  gridLegacyConfigName: string;
  /**
   * Chave da configuração legado da barra de filtros.
   */
  filterBarLegacyConfigName: string;
  /**
   * Chave da configuração legado do formulário.
   */
  formLegacyConfigName: string;
  /**
 * Desabilita a apresentação da opção de filtros personalizados na filter bar (chip de filtros)
 * e no modal lateral de filtros (container de filtros personalizados).
 */
  disablePersonalizedFilter: boolean;
  /**
   * Define se a carga dos dados será feita assim que o componente for carregado.
   */
  autoLoad?: boolean;
  /**
   * Define se a grid será focada ao ser carregada.
   */
  autoFocus?: boolean;
  /**
   * Ativa inserção de registros no modo grade.
   */
  enableGridInsert?: boolean;
  /**
  * Define a chave customizada para sobrescrever as mensagens (Não pegando pela entidade)
  */
  domainMessagesBuilder: string;
  /**
   * Ignora os campos "somente leitura" no modo de inserção.
   */
  ignoreReadOnlyFormFields?: boolean;
  /**
   * Define uma função para configurar um título cusotmizado no modo formulário.
   */
  setCustomFormTitle: () => string;
  /**
   * Modo de exportação dos dados.
   */
  strategyExporter: IExporterStrategyMode;
  /**
   * Define se o LayoutFormConfig será exibido no configurador.
   */
  layoutFormConfig: boolean;
  /**
   * Habilita a edição de múltiplos registros simultâneos.
   */
  multipleEditionEnabled: boolean;
  /**
   * Define se a grid será focada ao ser carregada.
   */
  paginationCounterMode?: 'show' | 'hidden' | 'auto';
  customContainerId: string;
  /**
   * Emitido pela taskbar sempre que houver click de botão ou ação.
   */
  actionClick: EventEmitter<string>;
  /**
  * Emitido quando salva a configuração no configurator do CRUD.
  */
  configuratorSave: EventEmitter<any>;
  /**
  * Emitido quando cancela o salvamento da configuração no configurator do CRUD.
  */
  configuratorCancel: EventEmitter<any>;
  /**
   * Responsável por notificar quando ocorrer a renderização de itens do formulário.
   */
  formItemsReady: EventEmitter<Array<HTMLElement>>;
  viewModeChanged: EventEmitter<VIEW_MODE>;
  /**
   * Usado para alternar a visão entre GRID e FORM externamente.
   */
  goToView(mode: string): Promise<void>;
  /**
   * Usado para abrir o configurator do CRUD
   */
  openConfigurator(): Promise<void>;
  /**
   * Usado para fechar o configurator do CRUD
   */
  closeConfigurator(): Promise<void>;
  /**
   * Faz o recarregamento da filter-bar do crud, buscando o state no servidor.
   */
  reloadFilterBar(): Promise<void>;
  /**
   * Retorna o elemento da filter-bar da grade.
   */
  getFilterBar(): Promise<HTMLSnkFilterBarElement>;
  /**
   * Registra um editor customizado para campos da grade e formulário.
   */
  addCustomEditor(fieldName: string, customEditor: ICustomEditor): Promise<void>;
  /**
   * Registra um render customizado para colunas da grid.
   */
  addGridCustomRender(fieldName: string, customRender: ICustomRender): Promise<void>;
  /**
   * Registra um formatador de valores para uma coluna da grid.
   */
  addCustomValueFormatter(columnName: string, customFormatter: ICustomFormatter): Promise<void>;
  /**
   * Remove o formatador de valores de uma coluna da grid.
   */
  removeCustomValueFormatter(columnName: string): Promise<void>;
  /**
   * Altera/adiciona uma propriedade nos metadados do campo.
   */
  setFieldProp(fieldName: string, propName: string, value: any): Promise<void>;
  currentViewModeWatcher(currentView: VIEW_MODE): void;
  gridToForm(keepFormMode?: boolean): Promise<void>;
  executeAction(act: string): Promise<void>;
  private backView;
  private setViewMode;
  private openConfig;
  private addDataElementID;
  insertionModeHandler(): void;
  cancelHandler(): void;
  private getAttachmentRegisterKey;
  private setCustomRenders;
  private setCustomEditors;
  componentDidRender(): void;
  componentWillLoad(): void;
  componentDidLoad(): void;
  disconnectedCallback(): void;
  private handleDataStateChange;
  private initKeyboardManager;
  private getMessage;
  private removeShortcuts;
  private toggleView;
  private initDataUnit;
  private handleConfiguratorEvent;
  render(): any;
}
