import { DataUnit, KeyboardManager } from '@sankhyalabs/core';
import { IGridConfig, 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 { IMultiSelectionListDataSource } from '@sankhyalabs/ezui/dist/types/components/ez-multi-selection-list/interfaces/IMultiSelectionListDataSource';
import { ICustomEditor, ICustomRender } from '@sankhyalabs/ezui/dist/types/utils';
import { IRecordValidator } from '@sankhyalabs/ezui/dist/types/utils/form/interfaces';
import { EventEmitter } from '../../stencil-public-runtime';
import { PresentationMode } from '../../lib/@types';
import RmPrecisionCustomValueFormatter from '../../lib/DefaultCustomFormatters/RmPrecisionCustomValueFormatter';
import { SnkMessageBuilder } from '../../lib/message/SnkMessageBuilder';
import { SnkApplication } from '../snk-application/snk-application';
import { IExporterStrategyMode } from '../snk-data-exporter/interfaces/IRecordID';
import { DataState, SnkDataUnit } from '../snk-data-unit/snk-data-unit';
import { SnkFilterItemConfig } from '../snk-filter-bar/filter-item/snk-filter-item';
import TaskbarProcessor from '../snk-taskbar/processor/taskbar-processor';
import { Action, TaskbarManager } from '../snk-taskbar/snk-taskbar';
export declare class SnkGrid {
  _grid: HTMLEzGridElement;
  _snkDataUnit: HTMLSnkDataUnitElement;
  _snkGridConfig: HTMLSnkGridConfigElement;
  _snkEmailSender: HTMLSnkExporterEmailSenderElement;
  _snkFilterBar: HTMLSnkFilterBarElement;
  _columnSearch: HTMLEzSearchElement;
  _moreOptions: HTMLEzActionsButtonElement;
  _customEditors: Map<string, {
    customEditor: ICustomEditor;
    detailContext: string;
  }>;
  _customRenders: Map<string, {
    customRender: ICustomRender;
    detailContext: string;
  }>;
  _snkDataUnitInstance: SnkDataUnit;
  _rmPrecisionCustomValueFormatter: RmPrecisionCustomValueFormatter;
  _keyboardManager: KeyboardManager;
  _topTaskbarProcessor: TaskbarProcessor;
  _headerTaskbarProcessor: TaskbarProcessor;
  private getGridHeaderSelectedBtns;
  private _continuousInsertUtils;
  _element: HTMLElement;
  _dataUnit: DataUnit;
  _dataState: DataState;
  _gridConfig: IGridConfig;
  _popUpGridConfig: boolean;
  _showSnkFilterBar: boolean;
  _enableContinuousInsert: boolean;
  _application: SnkApplication;
  /**
   * Define o data source para o filtro de colunas.
   */
  columnFilterDataSource: IMultiSelectionListDataSource;
  refreshColumnFilterDataSource(): Promise<void>;
  /**
   * 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;
  /**
   * Nome usado para salvar e recuperar a configuração da grade.
   */
  configName: string;
  /**
   * Título que será apresentado na barra de filtros.
   */
  filterBarTitle: string;
  /**
   * Identificador de recursos, como configurações e permissões de acesso.
   */
  resourceID: string;
  /**
   * Configuração do toast de seleção da grade.
   */
  selectionToastConfig: ISelectionToastConfig;
  /**
   * Lista de ações que devem ser usadas no botão "Mais opções" do `snk-taskbar`.
   */
  actionsList: Array<Action>;
  /**
   * Determina se a grade está vinculada a um detalhe de outra tela.
   */
  isDetail: boolean;
  /**
   * Gerenciador das barras de tarefas. Permite determinar botões específicos
   * ou gerenciar o estado dos botões.
   */
  taskbarManager: TaskbarManager;
  /**
   * Define a configuração de cores para a coluna de status.
   * @example
   * ```json
   * '{ "RECDESP": { "-1" : "#BD0025", "1" : "#157A00" } }'
   * ```
   */
  statusResolver: IStatusResolver | StatusResolverFunction;
  /**
   * Determina se a seleção de múltiplas linhas é permitida.
   */
  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 `true`, a tecla ENTER navega entre as células como a tecla TAB.
   */
  useEnterLikeTab: boolean;
  /**
   * Validador responsável por verificar a integridade dos dados de um registro.
   */
  recordsValidator: IRecordValidator;
  /**
   * Define se a edição de dados na grade está habilitada.
   */
  canEdit: boolean;
  /**
   * Define o identificador do contêiner de elementos customizados da `Taskbar`.
   */
  taskbarCustomContainerId: string;
  /**
   * Define o nome do slot para elementos customizados na `Taskbar` do cabeçalho da grade.
   */
  gridHeaderCustomSlotId: string;
  /**
   * Define o nome do slot para elementos customizados na `Taskbar` principal do componente.
   */
  topTaskbarCustomSlotId: string;
  /**
   * Desabilita a apresentação da opção de filtros personalizados na barra de filtros (chip de filtros)
   * e no modal lateral de filtros (contêiner de filtros personalizados).
   */
  disablePersonalizedFilter: boolean;
  /**
   * Chave da configuração legada da grade.
   */
  gridLegacyConfigName: string;
  /**
   * Chave da configuração legada da barra de filtros.
   */
  filterBarLegacyConfigName: string;
  /**
   * Define se os dados serão carregados automaticamente na inicialização do componente.
   */
  autoLoad?: boolean;
  /**
   * Define se a grade receberá o foco automaticamente ao ser carregada.
   */
  autoFocus?: boolean;
  /**
   * Habilita a inserção de registros diretamente na grade.
   */
  enableGridInsert?: boolean;
  /**
   * Altera a aparência das bordas e sombras do componente.
   * Se `false`, aplica o padrão de sombras (ideal para o elemento principal do layout).
   * Se `true`, aplica um contorno (ideal para quando o componente está dentro de outro, como um painel ou pop-up).
   */
  outlineMode?: boolean;
  /**
   * Define se a grade deve suprimir a barra de rolagem horizontal.
   */
  suppressHorizontalScroll: boolean;
  /**
   * Define o modo de exportação dos dados.
   */
  strategyExporter: IExporterStrategyMode;
  /**
   * Define se a grade deve exibir um buscador de colunas ao pressionar `Ctrl+F`.
   */
  useSearchColumn: boolean;
  /**
   * Habilita a edição de múltiplos registros simultaneamente.
   */
  multipleEditionEnabled: boolean;
  /**
   * Define o modo de exibição do contador de paginação.
   */
  paginationCounterMode?: 'show' | 'hidden' | 'auto';
  /**
   * Informa se a coluna de checkbox deve ser suprimida.
   */
  suppressCheckboxColumn: boolean;
  /**
   * Informa se a grade deve suprimir o filtro de coluna.
   */
  suppressFilterColumn?: boolean;
  /**
   * Define se a grade deve ser exibida em modo compacto.
   */
  compact: boolean;
  /**
   * @description Configuração customizada dos filtros.
   * @param {Array<SnkFilterItemConfig>} config - Lista de configurações de filtros.
   */
  filterCustomConfig?: Array<SnkFilterItemConfig>;
  /**
   * @description Intercepta a configuração dos filtros antes de serem aplicadas.
   * @param {Array<SnkFilterItemConfig>} config - Lista de configurações de filtros.
   * @returns {Array<SnkFilterItemConfig>} Retorna a lista de configurações de filtros.
   */
  filterCustomConfigInterceptor?: (config: Array<SnkFilterItemConfig>) => Array<SnkFilterItemConfig>;
  /**
   * Emitido ao clicar em um botão de ação ou item de menu.
   * @description Este evento é acionado quando o usuário clica em um botão de ação ou item de menu na grade, permitindo a execução de ações específicas.
   * @param {string} detail - O identificador da ação clicada, que pode ser usado para determinar qual ação executar.
   */
  actionClick: EventEmitter<string>;
  /**
   * Emitido ao realizar um duplo clique em uma linha da grade.
   * @description Este evento é acionado quando o usuário clica duas vezes em uma linha da grade, permitindo ações como edição rápida ou visualização de detalhes.
   * @param {any} detail - Detalhes do evento, contendo a linha clicada.
   */
  gridDoubleClick: EventEmitter<any>;
  /**
   * Emitido quando o componente estiver completamente carregado.
   */
  componentReady: EventEmitter<void>;
  /**
   * Recarrega a configuração da grade.
   * @description Este método força o recarregamento da configuração da grade a partir do `ConfigStorage`. A operação é assíncrona, mas o método não aguarda sua conclusão.
   */
  reloadConfig(): void;
  /**
   * Exibe a janela de configurações da grade.
   * @async
   * @description Este método abre o pop-up de configuração de colunas da grade, permitindo ao usuário ajustar a visibilidade, ordem e largura das colunas.
   * @returns {Promise<void>} Uma promessa que é resolvida quando a janela de configuração é exibida.
   */
  showConfig(): Promise<void>;
  /**
   * Fecha a janela de configurações da grade.
   * @async
   * @description Este método fecha o pop-up de configuração de colunas da grade.
   * @returns {Promise<void>} Uma promessa que é resolvida quando a janela de configuração é fechada.
   */
  hideConfig(): Promise<void>;
  /**
   * Define a configuração da grade.
   * @async
   * @description Aplica uma nova configuração de colunas e ordenação à grade.
   * @param {IGridConfig} config O objeto de configuração a ser aplicado na grade.
   * @returns {Promise<void>} Uma promessa que é resolvida quando a configuração é aplicada.
   */
  setConfig(config: IGridConfig): Promise<void>;
  /**
   * Recarrega a barra de filtros da grade, buscando o estado do servidor.
   * @async
   * @description Força o recarregamento da barra de filtros, atualizando suas configurações e filtros a partir do servidor.
   * @returns {Promise<void>} Uma promessa que é resolvida quando a barra de filtros é recarregada.
   */
  reloadFilterBar(): Promise<void>;
  /**
   * Retorna o elemento da barra de filtros da grade.
   * @async
   * @description Este método permite acessar o elemento da barra de filtros, que pode ser útil para manipulações adicionais ou para obter o estado atual dos filtros aplicados.
   * @returns {Promise<HTMLSnkFilterBarElement>} O elemento da barra de filtros.
   */
  getFilterBar(): Promise<HTMLSnkFilterBarElement>;
  /**
   * Registra um editor customizado para um campo da grade ou formulário.
   * @async
   * @description Adiciona um componente de edição personalizado para um campo específico. Este editor será usado tanto na edição em linha na grade quanto em formulários de detalhe.
   * @param {string} fieldName O nome do campo que receberá o editor customizado.
   * @param {ICustomEditor} customEditor A instância do editor customizado.
   * @param {string} [detailContext] O contexto de detalhe onde o editor será aplicado (opcional).
   * @returns {Promise<void>} Uma promessa que é resolvida quando o editor é registrado.
   */
  addCustomEditor(fieldName: string, customEditor: ICustomEditor, detailContext?: string): Promise<void>;
  /**
   * Registra um renderizador customizado para uma coluna da grade.
   * @async
   * @description Adiciona um componente de renderização personalizado para uma coluna específica, permitindo a exibição de conteúdo customizado nas células.
   * @param {string} fieldName O nome do campo (coluna) que receberá o renderizador customizado.
   * @param {ICustomRender} customRender A instância do renderizador customizado.
   * @param {string} [detailContext] O contexto de detalhe onde o renderizador será aplicado (opcional).
   * @returns {Promise<void>} Uma promessa que é resolvida quando o renderizador é registrado.
   */
  addGridCustomRender(fieldName: string, customRender: ICustomRender, detailContext?: string): Promise<void>;
  /**
   * Registra um formatador de valor customizado para uma coluna da grade.
   * @async
   * @description Adiciona uma função de formatação personalizada para os valores de uma coluna específica, afetando como os dados são exibidos.
   * @param {string} columnName O nome da coluna que receberá o formatador.
   * @param {ICustomFormatter} customFormatter A instância do formatador de valor.
   * @returns {Promise<void>} Uma promessa que é resolvida quando o formatador é registrado.
   */
  addCustomValueFormatter(columnName: string, customFormatter: ICustomFormatter): Promise<void>;
  /**
   * Remove um formatador de valor customizado de uma coluna da grade.
   * @async
   * @description Remove uma função de formatação personalizada previamente registrada para uma coluna.
   * @param {string} columnName O nome da coluna da qual o formatador será removido.
   * @returns {Promise<void>} Uma promessa que é resolvida quando o formatador é removido.
   */
  removeCustomValueFormatter(columnName: string): Promise<void>;
  /**
   * Atribui o foco para a grade.
   * @async
   * @description Move o foco do navegador para o componente da grade, permitindo a navegação por teclado.
   * @returns {Promise<void>} Uma promessa que é resolvida quando o foco é atribuído.
   */
  setFocus(): Promise<void>;
  handleClick(event: MouseEvent): Promise<void>;
  private hasToBlockEvent;
  handleGridLegacyConfigName(newLegacyConfig: string, oldLegacyConfig: string): Promise<void>;
  private handleAddFormMode;
  private openGridConfig;
  private closeGridConfig;
  private setGridConfig;
  private fixColumNameCharset;
  private normalizeGridConfig;
  private loadConfig;
  private addGridLegacyConfigName;
  private hasCalculatedFields;
  private gridConfigChangeHandler;
  private modalConfigChangeHandler;
  private hasToForceClientSideExporter;
  private dataExporterProviderStore;
  private addElementID;
  private loadGridCustomFormatters;
  private interceptMetadataLoaded;
  private interceptLoadData;
  private dataUnitInterceptor;
  private finishLoading;
  private setCustomRenders;
  private setCustomEditors;
  componentWillLoad(): void;
  componentDidRender(): void;
  private handleDataStateChange;
  getHeaderDisabledButtons(): Array<string>;
  private getInvisibleButtons;
  componentWillRender(): void;
  private getHeaderTaskbarId;
  private getTopTaskBarId;
  private getPrimaryButton;
  private getColumnSearch;
  private getActionsList;
  private getActionsSettingsList;
  private handleFilterConfigUpdated;
  private getGridHeaderButtons;
  private isGridInsertActive;
  render(): any;
}
