import { VegaSlimmer } from '../../../../vega-slimmer/vega-slimmer-core';
import { VegaTable } from '../../vega-table';
import { DraggableElementSlimmer } from '../../../../helpers/slimmers/draggable-element-slimmer';
/**
 * The row draggable controller for the vega-table
 */
export declare class VegaTableRowDraggableController extends VegaSlimmer {
  rowDraggable: VegaTable['rowDraggable'];
  protected host: VegaTable['host'];
  protected vegaTableDataSourceController: VegaTable['vegaTableDataSourceController'];
  protected isTemplateRenderMode: VegaTable['isTemplateRenderMode'];
  protected vegaTableBodyRenderer: VegaTable['vegaTableBodyRenderer'];
  protected vegaTableSortController: VegaTable['vegaTableSortController'];
  protected rowDragDropEventEmitter: VegaTable['rowDragDropEventEmitter'];
  protected readonly draggableElementSlimmer: DraggableElementSlimmer;
  /**
   * Component lifecycle - [connectedCallback]{@link VegaPopover.connectedCallback}
   */
  connectedCallback(): void;
  /**
   * Component lifecycle - [disconnectedCallback]{@link VegaPopover.disconnectedCallback}
   */
  disconnectedCallback(): void;
  /**
   * Component lifecycle - [componentDidLoad]{@link VegaPopover.componentDidLoad}
   */
  componentDidLoad(): void;
  /**
   * Watches for changes to the rowDraggable property and initializes or destroys the DraggableElement instance accordingly.
   * If rowDraggable is true, it calls setRowDraggableElement to initialize the instance;
   * if false, it calls destroyRowDraggableElement to clean up.
   */
  watchRowDraggable(): void;
  /**
   * Resolve the draggable container for current render mode.
   *
   * @returns {Nullable<HTMLElement>} The table body container used by drag behavior.
   */
  private getDragContainer;
  /**
   * Handles the drag and drop event emitted by the DraggableElement instance, re-emitting it through the rowDragDropEventEmitter with additional details.
   *
   * @param {DragDropEventPayload} payload - An object containing payload about the drag event.
   */
  private onDragDrop;
  /**
   * Handles the logic for reordering rows in the table when a drag and drop action is completed.
   *
   * @param {DragDropEventPayload} payload - An object containing details about the completed drag event, including fromIndex and toIndex.
   */
  private onDragEnd;
}
