import { IDragAndDropData } from "../../dnd.js"; import { Dimension } from "../../dom.js"; import { IMouseWheelEvent } from "../../mouseEvent.js"; import { Event, IValueWithChangeEvent } from "../../../common/event.js"; import { IDisposable } from "../../../common/lifecycle.js"; import { IRange } from "../../../common/range.js"; import { ScrollbarVisibility, ScrollEvent } from "../../../common/scrollable.js"; import { ISpliceable } from "../../../common/sequence.js"; import { IListDragAndDrop, IListGestureEvent, IListMouseEvent, IListRenderer, IListTouchEvent, IListVirtualDelegate } from "./list.js"; import { IRangeMap } from "./rangeMap.js"; import { AriaRole } from "../aria/aria.js"; export interface IListViewDragAndDrop extends IListDragAndDrop { getDragElements(element: T): T[]; } export declare enum ListViewTargetSector { TOP = 0,// [0%-25%) CENTER_TOP = 1,// [25%-50%) CENTER_BOTTOM = 2,// [50%-75%) BOTTOM = 3 } export type CheckBoxAccessibleState = boolean | "mixed"; export interface IListViewAccessibilityProvider { getSetSize?(element: T, index: number, listLength: number): number; getPosInSet?(element: T, index: number): number; getRole?(element: T): AriaRole | undefined; isChecked?(element: T): CheckBoxAccessibleState | IValueWithChangeEvent | undefined; } export interface IListViewOptionsUpdate { readonly smoothScrolling?: boolean; readonly horizontalScrolling?: boolean; readonly scrollByPage?: boolean; readonly mouseWheelScrollSensitivity?: number; readonly fastScrollSensitivity?: number; readonly paddingTop?: number; readonly paddingBottom?: number; } export interface IListViewOptions extends IListViewOptionsUpdate { readonly dnd?: IListViewDragAndDrop; readonly useShadows?: boolean; readonly verticalScrollMode?: ScrollbarVisibility; readonly setRowLineHeight?: boolean; readonly setRowHeight?: boolean; readonly supportDynamicHeights?: boolean; readonly mouseSupport?: boolean; readonly userSelection?: boolean; readonly accessibilityProvider?: IListViewAccessibilityProvider; readonly transformOptimization?: boolean; readonly alwaysConsumeMouseWheel?: boolean; readonly initialSize?: Dimension; readonly scrollToActiveElement?: boolean; } export declare class ElementsDragAndDropData implements IDragAndDropData { readonly elements: T[]; private _context; get context(): TContext | undefined; set context(value: TContext | undefined); constructor(elements: T[]); update(): void; getData(): T[]; } export declare class ExternalElementsDragAndDropData implements IDragAndDropData { readonly elements: T[]; constructor(elements: T[]); update(): void; getData(): T[]; } export declare class NativeDragAndDropData implements IDragAndDropData { readonly types: any[]; readonly files: any[]; constructor(); update(dataTransfer: DataTransfer): void; getData(): { types: any[]; files: any[]; }; } export interface IListView extends ISpliceable, IDisposable { readonly domId: string; readonly domNode: HTMLElement; readonly containerDomNode: HTMLElement; readonly scrollableElementDomNode: HTMLElement; readonly length: number; readonly contentHeight: number; readonly contentWidth: number; readonly onDidChangeContentHeight: Event; readonly onDidChangeContentWidth: Event; readonly renderHeight: number; readonly scrollHeight: number; readonly firstVisibleIndex: number; readonly firstMostlyVisibleIndex: number; readonly lastVisibleIndex: number; onDidScroll: Event; onWillScroll: Event; onMouseClick: Event>; onMouseDblClick: Event>; onMouseMiddleClick: Event>; onMouseUp: Event>; onMouseDown: Event>; onMouseOver: Event>; onMouseMove: Event>; onMouseOut: Event>; onContextMenu: Event>; onTouchStart: Event>; onTap: Event>; element(index: number): T; domElement(index: number): HTMLElement | null; getElementDomId(index: number): string; elementHeight(index: number): number; elementTop(index: number): number; indexOf(element: T): number; indexAt(position: number): number; indexAfter(position: number): number; updateOptions(options: IListViewOptionsUpdate): void; getScrollTop(): number; setScrollTop(scrollTop: number, reuseAnimation?: boolean): void; getScrollLeft(): number; setScrollLeft(scrollLeft: number): void; delegateScrollFromMouseWheelEvent(browserEvent: IMouseWheelEvent): void; delegateVerticalScrollbarPointerDown(browserEvent: PointerEvent): void; updateWidth(index: number): void; updateElementHeight(index: number, size: number | undefined, anchorIndex: number | null): void; rerender(): void; layout(height?: number, width?: number): void; } /** * The {@link ListView} is a virtual scrolling engine. * * Given that it only renders elements within its viewport, it can hold large * collections of elements and stay very performant. The performance bottleneck * usually lies within the user's rendering code for each element. * * @remarks It is a low-level widget, not meant to be used directly. Refer to the * List widget instead. */ export declare class ListView implements IListView { private virtualDelegate; private static InstanceCount; readonly domId: string; readonly domNode: HTMLElement; private items; private itemId; protected rangeMap: IRangeMap; private cache; private renderers; protected lastRenderTop: number; protected lastRenderHeight: number; private renderWidth; private rowsContainer; private scrollable; private scrollableElement; private _scrollHeight; private scrollableElementUpdateDisposable; private scrollableElementWidthDelayer; private splicing; private dragOverAnimationDisposable; private dragOverAnimationStopDisposable; private dragOverMouseY; private setRowLineHeight; private setRowHeight; private supportDynamicHeights; private paddingBottom; private accessibilityProvider; private scrollWidth; private dnd; private canDrop; private currentDragData; private currentDragFeedback; private currentDragFeedbackPosition; private currentDragFeedbackDisposable; private onDragLeaveTimeout; private currentSelectionDisposable; private currentSelectionBounds; private activeElement; private readonly disposables; private readonly _onDidChangeContentHeight; private readonly _onDidChangeContentWidth; readonly onDidChangeContentHeight: Event; readonly onDidChangeContentWidth: Event; get contentHeight(): number; get contentWidth(): number; get onDidScroll(): Event; get onWillScroll(): Event; get containerDomNode(): HTMLElement; get scrollableElementDomNode(): HTMLElement; private _horizontalScrolling; private get horizontalScrolling(); private set horizontalScrolling(value); constructor(container: HTMLElement, virtualDelegate: IListVirtualDelegate, renderers: IListRenderer[], options?: IListViewOptions); private _setupFocusObserver; private _scrollToActiveElement; updateOptions(options: IListViewOptionsUpdate): void; delegateScrollFromMouseWheelEvent(browserEvent: IMouseWheelEvent): void; delegateVerticalScrollbarPointerDown(browserEvent: PointerEvent): void; updateElementHeight(index: number, size: number | undefined, anchorIndex: number | null): void; protected createRangeMap(paddingTop: number): IRangeMap; splice(start: number, deleteCount: number, elements?: readonly T[]): T[]; private _splice; protected eventuallyUpdateScrollDimensions(): void; private eventuallyUpdateScrollWidth; private updateScrollWidth; updateWidth(index: number): void; rerender(): void; get length(): number; get renderHeight(): number; get firstVisibleIndex(): number; get firstMostlyVisibleIndex(): number; get lastVisibleIndex(): number; element(index: number): T; indexOf(element: T): number; domElement(index: number): HTMLElement | null; elementHeight(index: number): number; elementTop(index: number): number; indexAt(position: number): number; indexAfter(position: number): number; layout(height?: number, width?: number): void; protected render(previousRenderRange: IRange, renderTop: number, renderHeight: number, renderLeft: number | undefined, scrollWidth: number | undefined, updateItemsInDOM?: boolean, onScroll?: boolean): void; private insertItemInDOM; private measureItemWidth; private updateItemInDOM; private removeItemFromDOM; getScrollTop(): number; setScrollTop(scrollTop: number, reuseAnimation?: boolean): void; getScrollLeft(): number; setScrollLeft(scrollLeft: number): void; get scrollTop(): number; set scrollTop(scrollTop: number); get scrollHeight(): number; get onMouseClick(): Event>; get onMouseDblClick(): Event>; get onMouseMiddleClick(): Event>; get onMouseUp(): Event>; get onMouseDown(): Event>; get onMouseOver(): Event>; get onMouseMove(): Event>; get onMouseOut(): Event>; get onContextMenu(): Event | IListGestureEvent>; get onTouchStart(): Event>; get onTap(): Event>; private toMouseEvent; private toTouchEvent; private toGestureEvent; private toDragEvent; private onScroll; private onTouchChange; private onDragStart; private onPotentialSelectionStart; private getIndexOfListElement; private onDragOver; private onDragLeave; private onDrop; private onDragEnd; private clearDragOverFeedback; private setupDragAndDropScrollTopAnimation; private animateDragAndDropScrollTop; private teardownDragAndDropScrollTopAnimation; private getTargetSector; private getItemIndexFromEventTarget; private getVisibleRange; protected getRenderRange(renderTop: number, renderHeight: number): IRange; /** * Given a stable rendered state, checks every rendered element whether it needs * to be probed for dynamic height. Adjusts scroll height and top if necessary. */ protected _rerender(renderTop: number, renderHeight: number, inSmoothScrolling?: boolean): void; private probeDynamicHeight; private probeDynamicHeightForItem; getElementDomId(index: number): string; dispose(): void; }