import { VegaSlimmer } from '../../../../vega-slimmer/vega-slimmer-core';
import { VegaTable } from '../../vega-table';
import { VegaTableDataSourceItem } from '../../interface';
/**
 * Edit table controller
 */
export declare class VegaTableEditableController extends VegaSlimmer {
  static readonly rowFormKeyPrefix: string;
  editingRows: VegaTable['editingRows'];
  rowKey: VegaTable['rowKey'];
  columns: VegaTable['columns'];
  vegaTableDataSourceController: VegaTable['vegaTableDataSourceController'];
  vegaTableBodyRenderer: VegaTable['vegaTableBodyRenderer'];
  private rowFormRefMap;
  /**
   * Get the map of the row form refs
   *
   * @returns {Map<string, HTMLVegaFormElement>} The map of row form refs
   */
  getRowFormRefMap(): Map<string, HTMLVegaFormElement>;
  /**
   * The callback to handle [saveAllEditRows]{@link VegaTable.saveAllEditRows}
   */
  saveAllEditRows(): Promise<void>;
  /**
   * The callback to handle [stopAllRowEditMode]{@link VegaTable.stopAllRowEditMode}
   */
  stopAllRowEditMode(): void;
  /**
   * Stop the removed editing row when the data source changed
   *
   * @param {VegaTableDataSourceItem[]} newValue - The new data source
   */
  watchDataSource(newValue: VegaTableDataSourceItem[]): void;
  /**
   * The callback to handle [saveEditRow]{@link VegaTable.saveEditRow}
   *
   * @param {string} rowKey - The key of the row's record
   */
  saveEditRow(rowKey: string): Promise<void>;
  /**
   * The callback to handle [stopRowEditMode]{@link VegaTable.stopRowEditMode}
   *
   * @param {string} rowKey - The key of the row's record
   */
  stopRowEditMode(rowKey: string): void;
  /**
   * The callback to handle [removeRow]{@link VegaTable.removeRow}
   *
   * @param {string} rowKey - The key of the row's record
   */
  removeRow(rowKey: string): void;
  /**
   * The callback to handle [startRowEditMode]{@link VegaTable.startRowEditMode}
   *
   * @param {string} rowKey - The key of the row's record
   */
  startRowEditMode(rowKey: string): void;
  /**
   * The callback to handle [addNewRow]{@link VegaTable.addNewRow}
   *
   * @param {VegaTableDataSourceItem} record - The record for adding
   * @returns {string} The rowKey of the new added row record
   */
  addNewRow(record?: VegaTableDataSourceItem): string;
  /**
   * The callback to handle [getRowsData]{@link VegaTable.getRowsData}
   */
  getRowsData(): Promise<VegaTableDataSourceItem[]>;
  /**
   * The callback to handle [getEditingRowsKey]{@link VegaTable.getEditingRowsKey}
   *
   * @returns {string[]} The key of the rows which is editing
   */
  getEditingRowsKey(): string[];
  /**
   * The callback to handle [getFormRef]{@link VegaTable.getFormRef}
   *
   * @param {string} rowKey - The key of the row's record
   * @returns {HTMLVegaFormElement} The form ref of the row
   */
  getFormRef(rowKey?: string): HTMLVegaFormElement;
  /**
   * The callback to handle [getRowData]{@link VegaTable.getRowData}
   *
   * @param {string} rowKey - The key of the row's record
   * @returns {Promise<VegaTableDataSourceItem>} The promise of the row data
   */
  getRowData(rowKey: string): Promise<VegaTableDataSourceItem>;
  /**
   * Whether the row is in editing status
   *
   * @param {string} rowKey - The key of the row's record
   * @returns {boolean} return true if the row is in editing status, otherwise false
   */
  isEditing(rowKey: string): boolean;
  /**
   * The function `isEditableTable` checks if any column in a table is editable.
   *
   * @returns {boolean} The `isEditableTable` method is returning a boolean value. It checks if any of the columns
   * in the `columns` array have the `editable` property set to true. If at least one column is editable,
   * the method returns `true`, otherwise it returns `false`.
   */
  private isEditableTable;
  /**
   * The function `canMethodBeInvokedInCurrentState` checks if the table is editable and logs a warning message if not.
   *
   * @param {string} methodName - The `methodName` parameter is a string that represents the name of the
   * method being processed in the `canMethodBeInvokedInCurrentState` function.
   * @returns {boolean} The method `canMethodBeInvokedInCurrentState` is returning a boolean value. If the table is not editable,
   * it will log a warning message and return `false`. Otherwise, it will return `true`.
   */
  private canMethodBeInvokedInCurrentState;
}
