import { DataUnit, Record, UnitMetadata } from '@sankhyalabs/core';
import { EventEmitter } from '../../stencil-public-runtime';
import { SIMPLE_CRUD_MODE, VIEW_MODE } from '../../lib/utils/constants';
import { DataState } from '../snk-data-unit/snk-data-unit';
import { FormConfigFetcher } from '../../lib';
import { Action, TaskbarManager } from '../snk-taskbar/snk-taskbar';
import InMemoryLoader from '../../lib/dataUnit/InMemoryLoader';
import { IFieldConfig, IFormConfig } from '@sankhyalabs/ezui/dist/types/utils/form/interfaces';
import { SnkMessageBuilder } from '../../lib/message/SnkMessageBuilder';
import { IGridConfig } from '@sankhyalabs/ezui/dist/types/components/ez-grid/controller/EzGridController';
import SnkMultiSelectionListDataSource from '../snk-grid/filtercolumn/SnkMultiSelectionListDataSource';
import { IAction, ICustomEditor, ICustomRender } from '@sankhyalabs/ezui/dist/types/utils';
import { SnkFormConfigManager } from '../snk-form-config/SnkFormConfigManager';
import { ICustomFormatter } from '@sankhyalabs/ezui/dist/types/components/ez-grid/interfaces';
export declare class SnkSimpleCrud {
  _viewStack: HTMLEzViewStackElement;
  _snkConfigurator: HTMLSnkConfiguratorElement;
  _inMemoryLoader: InMemoryLoader;
  _metadata: UnitMetadata;
  _multiSelectionListDataSource: SnkMultiSelectionListDataSource;
  _columnSearch: HTMLEzSearchElement;
  _fieldSearch: HTMLEzSearchElement;
  _splitButton: HTMLEzSplitButtonElement;
  _splitButtonForm: HTMLEzSplitButtonElement;
  _grid: HTMLEzGridElement;
  _snkGridConfig: HTMLSnkGridConfigElement;
  _resourceID: string;
  _formConfigManager: SnkFormConfigManager;
  _gridConfigAlreadyLoaded: boolean;
  _formConfigAlreadyLoaded: boolean;
  _formConfigFetcher: FormConfigFetcher;
  _customEditors: Map<string, ICustomEditor>;
  _customRenders: Map<string, ICustomRender>;
  private _taskbarProcessor;
  private _form;
  private _rmPrecisionCustomValueFormatter;
  private _snkDataUnit;
  private _continuousInsertUtils;
  private _snkSimpleFormConfig;
  private _keyboardManager;
  private _element;
  _container: HTMLElement;
  _showPopUpGridConfig: boolean;
  _currentViewMode: VIEW_MODE;
  _config: {};
  _fieldToGetFocus: string;
  _customContainerId: string;
  /**
   * @description Define se o componente deve usar o LockManager para controle de carregamento da aplicação.
   */
  enableLockManagerLoadingComp?: boolean;
  /**
   * @description Ativa o gerenciamento de locks na grade pela Taskbar.
   */
  enableLockManagerTaskbarClick?: boolean;
  /**
   * @description Estado atual dos dados.
   */
  dataState: DataState;
  /**
   * @description Instância do DataUnit a ser utilizada pelo componente.
   */
  dataUnit: DataUnit;
  /**
   * @description Define o nome da entidade que o componente vai utilizar para fazer as operações de CRUD.
   */
  entityName: string;
  /**
   * @description Define o modo de operação do CRUD (servidor ou em memória).
   */
  mode: SIMPLE_CRUD_MODE;
  /**
   * @description Configuração da grade.
   */
  gridConfig: IGridConfig;
  /**
   * @description Configuração do formulário.
   */
  formConfig: IFormConfig;
  _formFields: IFieldConfig[];
  private _fieldsProps;
  /**
   * @description Habilita a inserção contínua de registros.
   */
  enableContinuousInsert: boolean;
  /**
   * @description Determina se pode haver mais de uma linha selecionada na grade.
   */
  multipleSelection: boolean;
  /**
   * @description Determina se será usada mensagem de confirmação padrão na tentativa de cancelar a edição.
   */
  useCancelConfirm: boolean;
  /**
   * @description Determina quantas linhas são retornadas por página.
   */
  pageSize: number;
  /**
   * @description Identificador de recursos como configurações e acesso.
   */
  resourceID: string;
  /**
   * @description Ativa a inserção de registros no modo grade.
   */
  enableGridInsert?: boolean;
  /**
   * @description Define o modo de exibição do contador de paginação.
   */
  paginationCounterMode?: 'show' | 'hidden' | 'auto';
  /**
   * @description Emitido quando há qualquer mudança de estado no DataUnit.
   */
  dataStateChange: EventEmitter<DataState>;
  /**
   * @description Emitido quando o DataUnit está pronto.
   */
  dataUnitReady: EventEmitter<DataUnit>;
  /**
   * @description Emitido sempre que houver clique de botão ou ação na barra de tarefas.
   */
  actionClick: EventEmitter<string>;
  /**
   * @description Responsável por notificar quando ocorrer a renderização de itens do formulário.
   */
  formItemsReady: EventEmitter<Array<HTMLElement>>;
  /**
   * @description Emitido quando a configuração no configurador do CRUD é salva.
   */
  configuratorSave: EventEmitter<any>;
  /**
   * @description Emitido quando o salvamento da configuração no configurador do CRUD é cancelado.
   */
  configuratorCancel: EventEmitter<any>;
  /**
  * @description Gerenciador das barras de tarefas. É possível determinar botões específicos ou mesmo gerenciar o estado dos botões.
  */
  taskbarManager: TaskbarManager;
  /**
   * @description Responsável por flexibilizar e padronizar o uso de mensagens nos blocos de construção.
   */
  messagesBuilder: SnkMessageBuilder;
  /**
   * @description Quando verdadeiro, o ENTER fará a navegação como se fosse a tecla TAB na grade.
   */
  useEnterLikeTab: boolean;
  /**
   * @description Ações a serem colocadas no botão "Mais opções" do componente snk-taskbar.
   */
  actionsList: Array<Action>;
  /**
   * @description Usado para salvar as configurações dos blocos de construção.
   */
  configName: string;
  /**
   * @description Usado para exibir os botões de ação do snk-configurator.
   */
  showConfiguratorButtons: boolean;
  /**
   * @description Chave da configuração legada da grade.
   */
  gridLegacyConfigName: string;
  /**
   * @description Chave da configuração legada do formulário.
   */
  formLegacyConfigName: string;
  /**
   * @description Ignora os campos "somente leitura" no modo de inserção.
   */
  ignoreReadOnlyFormFields: boolean;
  /**
   * @description Define se a grade será focada ao ser carregada.
   */
  autoFocus?: boolean;
  /**
   * @description Define a chave customizada para sobrescrever as mensagens (não pegando pela entidade).
   */
  domainMessagesBuilder: string;
  /**
   * @description Habilita a edição de múltiplos registros simultâneos.
   */
  multipleEditionEnabled: boolean;
  /**
   * @description Define se o LayoutFormConfig será exibido no configurador.
   */
  layoutFormConfig: boolean;
  /**
   * Desabilita a edição na grade.
   */
  disableGridEdition: boolean;
  /**
   * @description Registra um editor customizado para campos da grade e do formulário.
   * @param {string} fieldName - O nome do campo.
   * @param {ICustomEditor} customEditor - A instância do editor customizado.
   * @returns {Promise<void>}
   */
  addCustomEditor(fieldName: string, customEditor: ICustomEditor): Promise<void>;
  /**
   * @description Registra um renderizador customizado para colunas da grade.
   * @param {string} fieldName - O nome do campo.
   * @param {ICustomRender} customRender - A instância do renderizador customizado.
   * @returns {Promise<void>}
   */
  addGridCustomRender(fieldName: string, customRender: ICustomRender): Promise<void>;
  /**
   * @description Define se a carga dos dados será feita assim que o componente for carregado.
   */
  autoLoad?: boolean;
  /**
   * @description Altera visualmente as sombras e bordas do componente.
   * Quando `false`, aplica o padrão de sombras ao componente (utilizar quando for o elemento principal do layout).
   * Quando `true`, aplica o padrão de contorno ao componente (utilizar quando estiver contido em outro elemento como um painel ou pop-up).
   */
  outlineMode?: boolean;
  handleResourceIDChanged(newValue: string, oldValue: string): Promise<void>;
  /**
   * @description Registra um formatador de valores para uma coluna da grade.
   * @param {string} columnName - O nome da coluna.
   * @param {ICustomFormatter} customFormatter - A instância do formatador customizado.
   * @returns {Promise<void>}
   */
  addCustomValueFormatter(columnName: string, customFormatter: ICustomFormatter): Promise<void>;
  /**
   * @description Remove o formatador de valores de uma coluna da grade.
   * @param {string} columnName - O nome da coluna.
   * @returns {Promise<void>}
   */
  removeCustomValueFormatter(columnName: string): Promise<void>;
  /**
   * @description Altera/adiciona uma propriedade nos metadados do campo.
   * @param {string} fieldName - O nome do campo.
   * @param {string} propName - O nome da propriedade.
   * @param {any} value - O valor da propriedade.
   * @returns {Promise<void>}
   */
  setFieldProp(fieldName: string, propName: string, value: any): Promise<void>;
  private loadTaskbarProcessor;
  private getGridSelectedButtonsCallBack;
  private getFinishEditionButtonsCallback;
  private getButtons;
  private addConfigButton;
  private get application();
  /**
   * @description Usado para alternar a visão entre GRID e FORM externamente.
   * @param {VIEW_MODE} view - A visão para a qual navegar.
   * @returns {Promise<void>}
   */
  goToView(view: VIEW_MODE): Promise<void>;
  actionClickListener(evt: CustomEvent): void;
  private handleTaskbarAction;
  onChangeEntityName(newValue: string): Promise<void>;
  onModeChange(): void;
  observeDataState(newValue: DataState, oldValue: DataState): void;
  observeFormLegacy(newValue: string, oldValue: string): Promise<void>;
  observeGridLegacy(newValue: string, oldValue: string): Promise<void>;
  private handleDataStateChange;
  private processRmPrecision;
  private handleUpdateGridLegacyConfig;
  private handleUpdateFormLegacyConfig;
  private openConfig;
  private openGridConfig;
  private openFormConfig;
  private addGridLegacyConfigName;
  private loadGridConfig;
  private formConfigIsLoaded;
  private loadFormConfig;
  componentWillRender(): Promise<void>;
  componentDidRender(): void;
  componentWillLoad(): void;
  componentDidLoad(): void;
  private dataUnitActionHandler;
  private getMessage;
  disconnectedCallback(): void;
  private setCustomRenders;
  private setCustomEditors;
  configDatasource(): void;
  private setFieldsProps;
  getTaskBarId(): string;
  initInMemoryDataUnit(): void;
  /**
   * @description Define os metadados do DataUnit.
   * @param {UnitMetadata} metadata - Os metadados a serem definidos.
   * @returns {Promise<void>}
   */
  setMetadata(metadata: UnitMetadata): Promise<void>;
  /**
   * @description Define os registros do DataUnit.
   * @param {Array<Record>} records - Os registros a serem definidos.
   * @returns {Promise<void>}
   */
  setRecords(records: Array<Record>): Promise<void>;
  /**
   * @description Obtém os registros do DataUnit.
   * @returns {Promise<Array<Record>>} Uma promessa que resolve com a lista de registros.
   */
  getRecords(): Promise<Array<Record>>;
  /**
   * @description Usado para abrir o configurador do CRUD.
   * @returns {Promise<void>}
   */
  openConfigurator(): Promise<void>;
  /**
   * @description Usado para fechar o configurador do CRUD.
   * @returns {Promise<void>}
   */
  closeConfigurator(): Promise<void>;
  /**
   * @description Atualiza a configuração do formulário.
   * @returns {Promise<void>}
   */
  updateConfig(): Promise<void>;
  processMetadata(): void;
  private addGridCustomValueFormattters;
  onDataStateChange(evt: any): void;
  getTaskBarDisabledButtons(): Array<string>;
  handleCancelEdit(): void;
  private handleConfiguratorEvent;
  private onSelectField;
  getFieldSearch(splitButton: HTMLEzSplitButtonElement, item: IAction): HTMLElement;
  private getFormFields;
  private handleFormSetFields;
  private fieldsOptionLoader;
  private isGridInsertActive;
  getColumnSearch(splitButton: HTMLEzSplitButtonElement, item: IAction): HTMLElement;
  private getActionsList;
  private getSettingsListGrid;
  private getSettingsListForm;
  private getTopTaskBarId;
  private clearFieldToFocusHandler;
  private gridConfigChangeHandler;
  private modalConfigChangeHandler;
  private dataExporterProviderStore;
  private getDataExporterStoreKey;
  private setGridConfig;
  private setFormConfig;
  private closeGridConfig;
  private getPageSize;
  private resolveResourceID;
  private getFormConfig;
  private updateFormConfig;
  private handleDataUnitOnInsertionMode;
  private initKeyboardManager;
  private handleFormConfigSaved;
  private focusToGrid;
  private focusToForm;
  private renderTaskbarContent;
  render(): any;
}
