import { VegaSlimmer } from '../../../../vega-slimmer/vega-slimmer-core';
import { VegaTable } from '../../vega-table';
import { VegaTableDataSourceItem } from '../../interface';
/**
 * The expand row controller of VegaTable
 */
export declare class VegaTableExpandRowController extends VegaSlimmer {
  static readonly expandRowSlotNamePrefix: string;
  host: VegaTable['host'];
  expandedRowKeySet: VegaTable['expandedRowKeySet'];
  expandableRows: VegaTable['expandableRows'];
  hasExpandableRow: VegaTable['hasExpandableRow'];
  rowExpandable: VegaTable['rowExpandable'];
  currentData: VegaTable['currentData'];
  rowExpandEventEmitter: VegaTable['rowExpandEventEmitter'];
  vegaTableDataSourceController: VegaTable['vegaTableDataSourceController'];
  private mutationObserver;
  private expandObserver;
  /**
   * Component lifecycle - connectedCallback
   */
  connectedCallback(): void;
  /**
   * Component lifecycle - disconnectedCallback
   */
  disconnectedCallback(): void;
  /**
   * Component lifecycle - componentWillLoad
   */
  componentWillLoad(): void;
  /**
   * Component lifecycle - componentDidLoad
   */
  componentDidLoad(): void;
  /**
   * Toggle expandable row by rowKey
   *
   * @param {string} rowKey - The row key of the row
   */
  toggleExpandRow: (rowKey: string) => void;
  /**
   * Open expandable row by rowKey
   *
   * @param {string} rowKey - The row key of the row
   */
  openExpandRow: (rowKey: string) => void;
  /**
   * Close expanded row by rowKey
   *
   * @param {string} rowKey - The row key of the row
   */
  closeExpandRow: (rowKey: string) => void;
  /**
   * Close all expanded row
   */
  closeAllExpandRow: () => void;
  /**
   * The callback to handle [watchRowExpandable]{@link VegaTable.watchRowExpandable}
   */
  watchRowExpandable(): void;
  /**
   * Set the expandable rows based on the rowExpandable prop
   */
  watchCurrentData(): void;
  /**
   * Whether the row is expandable
   *
   * @param {VegaTableDataSourceItem} row - The row data
   * @returns {boolean} Return true if the row is expandable
   */
  isExpandableRow: (row: VegaTableDataSourceItem) => boolean;
  /**
   * Whether the row is expandable
   *
   * @param {string} rowKey - The row key of the row
   * @returns {boolean} Return true if the row is expandable
   */
  private isExpanded;
  /**
   * Close all expand row
   */
  private handleCloseAllExpandRow;
  /**
   * Toggle expand row
   *
   * @param {string} rowKey - The row key of the row
   * @param {boolean} open - set open true if you want to open the expand row, otherwise false
   */
  private handleToggleExpandRow;
  /**
   * Init the mutation observer of expand row slot
   */
  private initMutationObserver;
  /**
   * Monitoring the slot children used for expanded row
   *
   * @param {MutationRecord[]} mutations - The mutations of the observer
   * @returns {boolean} return true if it needs force update
   */
  private expandRowSlotGuard;
  /**
   * Initializes row expand observer
   */
  private initRowExpandObserver;
  /**
   * The function checks if the input is an acceptable row observer.
   *
   * @param {unknown} input - The input parameter is of type unknown, which means it can be any type.
   * @returns {boolean} a boolean value indicating whether the input is acceptable observer.
   */
  private isAcceptableTableRowObserver;
  /**
   * Sets expandable rows and hasExpandableRow based on rowExpandable and currentData
   */
  private setExpandableRows;
  /**
   * Whether the row is expandable by rowKey
   *
   * @param {string} rowKey - The row key of the row
   * @returns {boolean} Return true if the row is expandable
   */
  private isRowExpandable;
  /**
   * Clear the expand row slot which is not expandable anymore to avoid confusion,
   *    this can be triggered by the change of rowExpandable or currentData
   */
  private clearUnusedExpandRowSlot;
}
