import { SourceItemType, VirtualScrollPositionConfig } from './types';
import { GlobalSlimmers } from '../../vega-slimmer/vega-slimmer-core';
import { VegaVirtualScrollPositionController } from './slimmers/controllers/vega-virtual-scroll-position-controller';
import { VegaVirtualScrollScrollableController } from './slimmers/controllers/vega-virtual-scroll-scrollable-controller';
import { VegaVirtualScrollRenderer } from './slimmers/renderers/vega-virtual-scroll-renderer';
import { VegaVirtualScrollModeController } from './slimmers/controllers/vega-virtual-scroll-mode-controller';
import { VegaVirtualScrollLoadingIndicatorRenderer } from './slimmers/renderers/vega-virtual-scroll-loading-indicator-renderer';
import { VegaComponentUsageRuntimeMetricsSlimmer } from '../../helpers/slimmers/component-usage-runtime-metrics';
/**
 * @vegaVersion 1.13.0
 */
export declare class VegaVirtualScroll {
  protected readonly globalSlimmers: GlobalSlimmers;
  protected readonly modeController: VegaVirtualScrollModeController;
  protected readonly positionController: VegaVirtualScrollPositionController;
  protected readonly scrollableController: VegaVirtualScrollScrollableController;
  protected readonly renderer: VegaVirtualScrollRenderer;
  protected readonly loadingRenderer: VegaVirtualScrollLoadingIndicatorRenderer;
  protected vegaComponentUsageRuntimeMetricsSlimmer: VegaComponentUsageRuntimeMetricsSlimmer<HTMLVegaVirtualScrollElement>;
  /** current active element */
  host: HTMLVegaVirtualScrollElement;
  positionConfig: VirtualScrollPositionConfig;
  scrollTop: number;
  watchScrollTop(): void;
  /** The all items of source *
   * @vegaVersion 1.13.0
   */
  source: SourceItemType[];
  watchSourceChange(newValue: SourceItemType[], oldValue: SourceItemType[]): void;
  /** The approximate height of each item *
   * @vegaVersion 1.13.0
   */
  approxItemHeight: number;
  watchApproxItemHeight(): void;
  /** The max height of viewport *
   * @vegaVersion 1.13.0
   */
  viewportMaxHeight: number;
  watchViewportMaxHeight(): void;
  /**
   * Determines whether the dropdown displays a loading status.
   *
   * @vegaVersion 2.3.0
   */
  isLoading: boolean;
  /**
   * The count of the source that will be used as the threshold for determining whether to use virtual scrolling.
   * If the count of source exceeds this threshold, we employ virtual scrolling. Otherwise, normal item rendering is used
   * If the value is 0, it means we will disable the virtualization all the time.
   *
   * @vegaVersion 2.3.0
   */
  virtualizationThreshold: number;
  watchVirtualizationThreshold(): void;
  /** We set this key to check the source is really change and should refresh virtual scroll *
   * @vegaVersion 1.26.0
   */
  sourceItemIdentifier: string;
  /**
   * The method of render item.
   * You should bind to the host component then you can set the css and event of item on the host component.
   * example: <vega-virtual-scroll renderItem={this.renderSourceItem.bind(this)}></vega-virtual-scroll> .
   * You should watch the fixHeight, if it have value, you should set {height: `${fixHeight}px`, boxSizing: 'border-box', overflow: 'hidden'} to you item,
   * otherwise, you can do nothing.
   *
   * @vegaVersion 1.13.0
   */
  renderItem: (item: SourceItemType, index?: number, fixHeight?: number) => HTMLElement;
  /**
   * Scroll to the index of the item in the list by setting the scrollTop property of the virtual scroll
   * container to the index of the item multiplied by the approximate height of each item in the list.
   *
   * @vegaVersion 1.13.0
   */
  scrollToIndex(index: number): Promise<void>;
  render(): VegaVirtualScroll;
}
