import { EventEmitter } from '../../stencil-public-runtime';
import { ImmutableSet } from '../../helpers/immutable/immutable-set';
import { BreakpointsTokenType } from '../../types/design-token.type';
import { ResponsiveType } from '../../types/ui.type';
import { VegaTableChangePropType, VegaTableColumnConfig, VegaTableDataSourceItem, VegaTableDensityType, VegaTablePagination, VegaTableRowClickPropType, VegaTableRowSelectionConfig, VegaTableRowSelectProp, VegaTableSelectAllProp, VegaTableScrollConfig, VegaTableSortConfig, VegaTableRowSelectAllEventDetail, VegaTableRowSelectEventDetail, VegaTableRowExpandEventDetail, VegaTableGroupColumnConfig } from './interface';
import { GlobalSlimmers } from '../../vega-slimmer/vega-slimmer-core';
import { VegaTableCellRenderer } from './slimmers/renderers/vega-table-cell-renderer';
import { VegaTableExpandRowController } from './slimmers/controllers/vega-table-expand-row-controller';
import { VegaTableRowSelectionController } from './slimmers/controllers/vega-table-row-selection-controller';
import { VegaTableDataSourceController } from './slimmers/controllers/vega-table-data-source-controller';
import { VegaTableBodyRenderer } from './slimmers/renderers/vega-table-body-renderer';
import { VegaTableHeaderRenderer } from './slimmers/renderers/vega-table-header-renderer';
import { VegaTablePaginationRenderer } from './slimmers/renderers/vega-table-pagination-renderer';
import { VegaTableScrollContainerRenderer } from './slimmers/renderers/vega-table-scroll-container-renderer';
import { VegaTableRenderer } from './slimmers/renderers/vega-table-renderer';
import { VegaTablePaginationController } from './slimmers/controllers/vega-table-pagination-controller';
import { VegaTableEditableController } from './slimmers/controllers/vega-table-editable-controller';
import { VegaTableSortController } from './slimmers/controllers/vega-table-sort-controller';
import { VegaTableColGroupRenderer } from './slimmers/renderers/vega-table-col-group-renderer';
import { VegaTableChildrenController } from './slimmers/controllers/vega-table-children-controller';
import { VegaTableRowRenderer } from './slimmers/renderers/vega-table-row-renderer';
import { PageResizeObserverSlimmer } from '../../helpers/slimmers/page-resize-observer-slimmer';
import { SubStateNotifySlimmerBase } from '../../helpers/slimmers/sub-state/sub-state-notify-slimmer-base';
import { ChildNodesEventPreventSlimmer } from '../../helpers/event-manager/slimmers/child-nodes-event-prevent-slimmer';
import { EventEmitSlimmerBase } from '../../helpers/event-manager/slimmers/event-emit-slimmer';
import { ImmutableMap } from '../../helpers/immutable/immutable-map';
import { VegaTableRenderModeController } from './slimmers/controllers/vega-table-render-mode-controller';
import { VegaComponentUsageRuntimeMetricsSlimmer } from '../../helpers/slimmers/component-usage-runtime-metrics';
import { VegaTableSorter } from './slimmers/controllers/vega-table-sorter';
import { TranslationSlimmer } from '../../helpers/slimmers/translation';
import { VegaTableColumnStructureModelController } from './slimmers/controllers/vega-table-column-structure-model-controller';
import { ColumnStructureModel } from './slimmers/controllers/dto/column-structure-model';
import { VegaTableRenderInputController } from './slimmers/controllers/vega-table-render-input-controller';
import { VegaTablePinnedRenderer } from './slimmers/renderers/vega-table-pinned-renderer';
/**
 * @vegaVersion 1.3.0
 */
export declare class VegaTable {
  protected readonly globalSlimmers: GlobalSlimmers;
  protected translationSlimmer: TranslationSlimmer<HTMLVegaTableElement>;
  protected readonly vegaTableRenderModeController: VegaTableRenderModeController;
  protected readonly vegaTableColumnStructureModelController: VegaTableColumnStructureModelController;
  protected readonly vegaTableRenderInputController: VegaTableRenderInputController;
  protected readonly vegaTablePinnedRenderer: VegaTablePinnedRenderer;
  protected readonly vegaTableRenderer: VegaTableRenderer;
  protected readonly vegaTableHeaderRenderer: VegaTableHeaderRenderer;
  protected readonly vegaTableBodyRenderer: VegaTableBodyRenderer;
  protected readonly vegaTableRowRenderer: VegaTableRowRenderer;
  protected readonly vegaTableCellRenderer: VegaTableCellRenderer;
  protected readonly vegaTablePaginationRenderer: VegaTablePaginationRenderer;
  protected readonly vegaTableScrollContainerRenderer: VegaTableScrollContainerRenderer;
  protected readonly vegaTableExpandRowController: VegaTableExpandRowController;
  protected readonly vegaTableRowSelectionController: VegaTableRowSelectionController;
  protected readonly vegaTableDataSourceController: VegaTableDataSourceController;
  protected readonly vegaTablePaginationController: VegaTablePaginationController;
  protected readonly vegaTableEditableController: VegaTableEditableController;
  protected readonly vegaTableSortController: VegaTableSortController;
  protected readonly vegaTableColGroupRenderer: VegaTableColGroupRenderer;
  protected readonly vegaTableChildrenController: VegaTableChildrenController;
  /**
   * The below method is e2e-test covered in
   * @see{module:should-render-responsive-columns-with-expandable-row-and-current-breakpoint-is-smaller-than-S}
   */
  protected readonly pageResizeObserverSlimmer: PageResizeObserverSlimmer;
  protected readonly rowSelectionNotifySlimmer: SubStateNotifySlimmerBase;
  protected readonly rowExpandableNotifySlimmer: SubStateNotifySlimmerBase;
  protected readonly paddingXNotifySlimmer: SubStateNotifySlimmerBase;
  protected readonly rowClickableNotifySlimmer: SubStateNotifySlimmerBase;
  protected readonly scrollConfigNotifySlimmer: SubStateNotifySlimmerBase;
  protected eventsPrevent: ChildNodesEventPreventSlimmer;
  protected changeEventEmitter: EventEmitSlimmerBase;
  protected selectChangeEventEmitter: EventEmitSlimmerBase;
  protected selectAllChangeEventEmitter: EventEmitSlimmerBase;
  protected rowClickEventEmitter: EventEmitSlimmerBase;
  protected rowExpandEventEmitter: EventEmitSlimmerBase;
  protected readonly rowDividerNotifySlimmer: SubStateNotifySlimmerBase;
  protected readonly columnDividerNotifySlimmer: SubStateNotifySlimmerBase;
  protected readonly densityNotifySlimmer: SubStateNotifySlimmerBase;
  protected readonly isTemplateRenderModeNotifySlimmer: SubStateNotifySlimmerBase;
  protected readonly currentDataNotifySlimmer: SubStateNotifySlimmerBase;
  protected vegaComponentUsageRuntimeMetricsSlimmer: VegaComponentUsageRuntimeMetricsSlimmer<HTMLVegaTableElement>;
  protected rowSelectEventEmitter: EventEmitSlimmerBase;
  protected rowSelectAllEventEmitter: EventEmitSlimmerBase;
  host: HTMLVegaTableElement;
  selectedRowKeySet: ImmutableSet<string>;
  watchSelectedRowKeySet(): void;
  expandedRowKeySet: ImmutableSet<string>;
  currentBreakpoint: BreakpointsTokenType;
  /** Current running sorters */
  sortersMap: ImmutableMap<string, VegaTableSorter>;
  watchSortersMap(): void;
  /** The data for vega-table to render */
  currentData: VegaTableDataSourceItem[];
  watchCurrentData(newValue: VegaTableDataSourceItem[], oldValue: VegaTableDataSourceItem[]): void;
  /** The key of current selected row */
  currentClickedRowKey: string;
  /** Current page number of the table pagination */
  currentPage: number;
  watchCurrentPage(): void;
  /**
   * The page size of the table pagination
   */
  pageSize: number;
  editingRows: ImmutableSet<string>;
  isSelectedAll: boolean;
  watchSelectedAll(): void;
  /**
   * Whether the table is template render mode
   */
  isTemplateRenderMode: boolean;
  watchTemplateRenderMode(): void;
  columnStructureModel: ColumnStructureModel;
  watchColumnStructureModel(): void;
  /**
   * Defines the columns of the table.
   *
   * @vegaVersion 1.3.0
   */
  columns: VegaTableColumnConfig[];
  watchColumns(): void;
  /**
   * Defines how columns can be grouped.
   *
   * @vegaVersion 2.57.0
   */
  groupColumns: VegaTableGroupColumnConfig[];
  watchGroupColumns(): void;
  /**
   * Contains the data records to be rendered and
   *    displayed within the table.
   *
   * @vegaVersion 1.3.0
   */
  dataSource: VegaTableDataSourceItem[];
  watchDataSource(): void;
  /**
   * Defines the behavior and options related to
   *    row selection in the table.
   *
   * It allows users to select one or more rows in
   *    the table for further actions or processing.
   *
   * @vegaVersion 1.3.0
   */
  rowSelection: VegaTableRowSelectionConfig;
  watchRowSelection(): void;
  /**
   * Specifies whether rows in the table can be expanded
   *    to show additional content or details.
   */
  /**
   * Indicates whether the row is expandable.
   *
   * @vegaVersion 1.3.0
   */
  rowExpandable: boolean;
  watchRowExpandable(): void;
  /**
   * Specifies whether rows in the table can be clicked.
   *    If enabled, a `vegaRowClick` event will be
   *    dispatched when a row is clicked.
   *
   * @vegaVersion 1.3.0
   */
  rowClickable: boolean;
  watchRowClickable(): void;
  /**
   * Specifies whether dividers should be displayed
   *    between rows in the table.
   *
   * @vegaVersion 1.3.0
   */
  rowDivider: boolean;
  watchRowDivider(): void;
  /**
   * Specifies whether dividers should be displayed
   *    between columns in the table.
   *
   * @vegaVersion 1.3.0
   */
  columnDivider: boolean;
  watchColumnDivider(): void;
  /**
   * Specifies whether alternate colors should be applied
   *    to the rows of the table.
   *
   * @vegaVersion 1.3.0
   */
  striped: boolean;
  watchStriped(): void;
  /**
   * Specifies the negative space within the table's cells.
   *
   * @vegaVersion 1.3.0
   */
  density: ResponsiveType<VegaTableDensityType>;
  watchDensity(): void;
  /**
   * Controls the amount of horizontal padding applied to the table.
   *
   * @vegaVersion 1.3.0
   */
  paddingX: [string, string];
  watchPaddingX(): void;
  /**
   * Specifies whether the table header should be displayed.
   *
   * @vegaVersion 1.3.0
   */
  showHeader: boolean;
  /**
   * Specifies the pagination configuration.
   *
   * @vegaVersion 1.5.0
   */
  pagination: VegaTablePagination;
  watchPagination(): void;
  /**
   * Provides a customized message or description that is
   *    shown when the table's data source is empty.
   *
   * @vegaVersion 1.7.0
   */
  emptyDescription: string;
  /**
   * Defines a unique key for each row in the table.
   *
   * @vegaVersion 1.9.2
   */
  rowKey: string;
  /**
   * Customizes the behavior and appearance of the
   *    scrollable container that wraps the table.
   *
   * @vegaVersion 1.29.0
   */
  scrollConfig?: VegaTableScrollConfig;
  watchScrollConfig(): void;
  /**
   * Defines the column sorting options
   * Has optional property type: single | multiple
   * If not specified, it defaults to multiple column sorting
   *
   * @vegaVersion 2.22.0
   */
  sortConfig?: VegaTableSortConfig;
  /**
   * An event emitter notifying changes in the table data.
   *
   * @vegaVersion 1.3.0
   */
  vegaChange: EventEmitter<VegaTableChangePropType>;
  /**
   * An event emitter notifying changes in the table data.
   *
   * @eventSemantics namespace:native
   * @vegaVersion 2.0.0
   */
  change: EventEmitter<VegaTableChangePropType>;
  /**
   * An event emitter notifying the click event of a row
   *    in the table.
   *
   * @vegaVersion 1.3.0
   */
  vegaRowClick: EventEmitter<VegaTableRowClickPropType>;
  /**
   * An event emitter notifying the click event of a row
   *    in the table.
   *
   * @eventSemantics namespace:native
   * @vegaVersion 2.0.0
   */
  rowClick: EventEmitter<VegaTableRowClickPropType>;
  /**
   * An event emitter notifying the expanded event of a row
   *    in the table.
   *
   * @vegaVersion 2.24.0
   */
  vegaRowExpand: EventEmitter<VegaTableRowExpandEventDetail>;
  /**
   * An event emitter notifying the expanded event of a row
   *    in the table.
   *
   * @eventSemantics namespace:native
   * @vegaVersion 2.24.0
   */
  rowExpand: EventEmitter<VegaTableRowExpandEventDetail>;
  /**
   * An event emitter notifying when the row selection changes.
   *
   * @vegaVersion 1.18.0
   */
  vegaSelectChange: EventEmitter<VegaTableRowSelectProp>;
  /**
   * An event emitter notifying when the selection state of all rows changes.
   *
   * @eventSemantics namespace:native
   * @vegaVersion 2.0.0
   */
  selectChange: EventEmitter<VegaTableRowSelectProp>;
  /**
   * An event emitter notifying changes in the selection of checkboxes,
   *    particularly the "Select All" checkbox in the table header.
   *
   * @vegaVersion 1.18.0
   */
  vegaSelectAllChange: EventEmitter<VegaTableSelectAllProp>;
  /**
   * An event emitter notifying changes in the selection of checkboxes,
   *    particularly the "Select All" checkbox in the table header.
   *
   * @eventSemantics namespace:native
   * @vegaVersion 2.0.0
   */
  selectAllChange: EventEmitter<VegaTableSelectAllProp>;
  /**
   * An event emitter notifying before the selected change when select/deselect one row
   *
   * @vegaVersion 2.23.0
   */
  vegaRowSelect: EventEmitter<VegaTableRowSelectEventDetail>;
  /**
   * An event emitter notifying before the selected change when select/deselect one row
   *
   * @eventSemantics namespace:native
   * @vegaVersion 2.23.0
   */
  rowSelect: EventEmitter<VegaTableRowSelectEventDetail>;
  /**
   * An event emitter notifying before the selected change when select/deselect all rows
   *
   * @vegaVersion 2.23.0
   */
  vegaRowSelectAll: EventEmitter<VegaTableRowSelectAllEventDetail>;
  /**
   * An event emitter notifying before the selected change when select/deselect all rows
   *
   * @eventSemantics namespace:native
   * @vegaVersion 2.23.0
   */
  rowSelectAll: EventEmitter<VegaTableRowSelectAllEventDetail>;
  /**
   * Invoke this method to expand the row with the specified `rowKey`,
   *    revealing additional content.
   *
   * @param rowKey
   * @vegaVersion 1.3.0
   */
  openExpandRow(rowKey: string): Promise<void>;
  /**
   * Invoke this method to close the expanded row with the specified `rowKey`.
   *
   * @param rowKey
   * @vegaVersion 1.3.0
   */
  closeExpandRow(rowKey: string): Promise<void>;
  /**
   * Invoke this method to close all expanded rows.
   *
   * @vegaVersion 1.3.0
   */
  closeAllExpandRow(): Promise<void>;
  /**
   * Invoke this method to toggle the expandable row with the
   *    specified `rowKey`, expanding it if it is currently
   *    collapsed and collapsing it if it is currently expanded.
   *
   * @param rowKey
   * @vegaVersion 1.3.0
   */
  toggleExpandRow(rowKey: string): Promise<void>;
  /**
   * Invoke this method to clear the selected row keys,
   *    removing any current selection.
   *
   * @vegaVersion 1.3.0
   */
  clearSelection(): Promise<void>;
  /**
   * Invoke this method to retrieve the selected row keys,
   *    provided an array or list of the keys representing
   *    the currently selected rows.
   *
   * @vegaVersion 1.3.0
   */
  getSelection(): Promise<string[]>;
  /**
   * Invoke this method to set the selected row keys,
   *    specifying an array or list of keys to represent
   *    the desired selected rows.
   *
   * @param {string[]} keys - Row keys to be set as selected.
   * @vegaVersion 1.3.0
   */
  setSelection(keys: string[]): Promise<void>;
  /**
   * Invoke this method to start the edit mode for the row
   *    with the specified `rowKey`.
   *
   * @VegaWarning Note: This method only works with editable tables.
   *
   * @vegaVersion 1.19.0
   */
  startRowEditMode(rowKey: string): Promise<void>;
  /**
   * Invoke this method to stop the edit mode for the row
   *    with the specified `rowKey`.
   *
   * @VegaWarning Note: This method only works with editable tables.
   *
   * @vegaVersion 1.19.0
   */
  stopRowEditMode(rowKey: string): Promise<void>;
  /**
   * Invoke this method to stop the edit mode for all rows,
   *    exiting the edit mode for each row currently
   *    in the editing state.
   *
   * @VegaWarning Note: This method only works with editable tables.
   *
   * @vegaVersion 1.19.0
   */
  stopAllRowEditMode(): Promise<void>;
  /**
   * Invoke this method to retrieve the data of the row with
   *    the specified `rowKey`, obtaining the complete set of
   *    information associated with that row.
   *
   * @param rowKey The row's unique key.
   *
   * @VegaWarning Note: This method only works with editable tables.
   *
   * @vegaVersion 1.19.0
   */
  getRowData(rowKey: string): Promise<VegaTableDataSourceItem>;
  /**
   * Invoke this method to retrieve all rows of data,
   *    obtaining the complete set of information
   *    associated with each row.
   *
   * @VegaWarning Note: This method only works with editable tables.
   *
   * @vegaVersion 1.19.0
   */
  getRowsData(): Promise<VegaTableDataSourceItem[]>;
  /**
   * Invoke this method to retrieve the table row reference
   *    based on the provided `rowKey`.
   *
   * If the `rowKey` is empty, this method will return the
   *    reference to the table form.
   *
   * @param optional rowKey
   *
   * @VegaWarning Note: This method only works with editable tables.
   *
   * @vegaVersion 1.19.0
   */
  getFormRef(rowKey?: string): Promise<HTMLVegaFormElement>;
  /**
   * Invoke this method to add a new row to the editable table.
   *
   * @param record the default record of the new row
   * @returns {Promise<string>} the rowKey of the new row
   *
   * @VegaWarning Note: This method only works with editable tables.
   *
   * @vegaVersion 1.19.0
   */
  addNewRow(record?: VegaTableDataSourceItem): Promise<string>;
  /**
   * Invoke this method to save the edited row data to
   *    the `currentData` and stop the edit mode
   *    for that row.
   *
   * This action will not affect the editing mode of other rows.
   *
   * @VegaWarning Note: This method only works with editable tables.
   *
   * @vegaVersion 1.19.0
   */
  saveEditRow(rowKey: string): Promise<void>;
  /**
   * Invoke this method to save the data of all edited rows to
   *    the `currentData` and stop the edit mode for
   *    all rows in the table.
   *
   * @VegaWarning Note: This method only works with editable tables.
   *
   * @vegaVersion 1.19.0
   */
  saveAllEditRows(): Promise<void>;
  /**
   * Invoke this method to obtain the keys of the rows currently
   *    in the editing mode in the table.
   *
   * @VegaWarning Note: This method only works with editable tables.
   *
   * @vegaVersion 1.19.0
   */
  getEditingRowsKey(): Promise<string[]>;
  /**
   * Invoke this method to remove a row from the `currentData`
   *    based on the specified `rowKey` in the table.
   *
   * @param rowKey The rowKey of the row to remove.
   *
   * @VegaWarning Note: This method only works with editable tables.
   *
   * @vegaVersion 1.19.0
   */
  removeRow(rowKey: string): Promise<void>;
  render(): VegaTable;
}
