sussudio
Version:
An unofficial VS Code Internal API
196 lines (195 loc) • 7.97 kB
text/typescript
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { IDragAndDropData } from "../../dnd.mjs";
import { Dimension } from "../../dom.mjs";
import { IMouseWheelEvent } from "../../mouseEvent.mjs";
import { Event } from "../../../common/event.mjs";
import { IDisposable } from "../../../common/lifecycle.mjs";
import { ScrollbarVisibility, ScrollEvent } from "../../../common/scrollable.mjs";
import { ISpliceable } from "../../../common/sequence.mjs";
import { IListDragAndDrop, IListGestureEvent, IListMouseEvent, IListRenderer, IListTouchEvent, IListVirtualDelegate } from "./list.mjs";
import { IObservableValue } from "../../../common/observableValue.mjs";
import { AriaRole } from "../aria/aria.mjs";
export interface IListViewDragAndDrop<T> extends IListDragAndDrop<T> {
getDragElements(element: T): T[];
}
export interface IListViewAccessibilityProvider<T> {
getSetSize?(element: T, index: number, listLength: number): number;
getPosInSet?(element: T, index: number): number;
getRole?(element: T): AriaRole | undefined;
isChecked?(element: T): boolean | IObservableValue<boolean> | undefined;
}
export interface IListViewOptionsUpdate {
readonly additionalScrollHeight?: number;
readonly smoothScrolling?: boolean;
readonly horizontalScrolling?: boolean;
readonly mouseWheelScrollSensitivity?: number;
readonly fastScrollSensitivity?: number;
}
export interface IListViewOptions<T> extends IListViewOptionsUpdate {
readonly dnd?: IListViewDragAndDrop<T>;
readonly useShadows?: boolean;
readonly verticalScrollMode?: ScrollbarVisibility;
readonly setRowLineHeight?: boolean;
readonly setRowHeight?: boolean;
readonly supportDynamicHeights?: boolean;
readonly mouseSupport?: boolean;
readonly accessibilityProvider?: IListViewAccessibilityProvider<T>;
readonly transformOptimization?: boolean;
readonly alwaysConsumeMouseWheel?: boolean;
readonly initialSize?: Dimension;
}
export declare class ElementsDragAndDropData<T, TContext = void> 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<T> 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(): any;
}
/**
* 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<T> implements ISpliceable<T>, IDisposable {
private virtualDelegate;
private static InstanceCount;
readonly domId: string;
readonly domNode: HTMLElement;
private items;
private itemId;
private rangeMap;
private cache;
private renderers;
private lastRenderTop;
private lastRenderHeight;
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 additionalScrollHeight;
private accessibilityProvider;
private scrollWidth;
private dnd;
private canDrop;
private currentDragData;
private currentDragFeedback;
private currentDragFeedbackDisposable;
private onDragLeaveTimeout;
private readonly disposables;
private readonly _onDidChangeContentHeight;
readonly onDidChangeContentHeight: Event<number>;
get contentHeight(): number;
get onDidScroll(): Event<ScrollEvent>;
get onWillScroll(): Event<ScrollEvent>;
get containerDomNode(): HTMLElement;
get scrollableElementDomNode(): HTMLElement;
private _horizontalScrolling;
private get horizontalScrolling();
private set horizontalScrolling(value);
constructor(container: HTMLElement, virtualDelegate: IListVirtualDelegate<T>, renderers: IListRenderer<any, any>[], options?: IListViewOptions<T>);
updateOptions(options: IListViewOptionsUpdate): void;
delegateScrollFromMouseWheelEvent(browserEvent: IMouseWheelEvent): void;
delegateVerticalScrollbarPointerDown(browserEvent: PointerEvent): void;
updateElementHeight(index: number, size: number | undefined, anchorIndex: number | null): void;
splice(start: number, deleteCount: number, elements?: readonly T[]): T[];
private _splice;
private eventuallyUpdateScrollDimensions;
private eventuallyUpdateScrollWidth;
private updateScrollWidth;
updateWidth(index: number): void;
rerender(): void;
get length(): number;
get renderHeight(): number;
get firstVisibleIndex(): 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;
private render;
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<IListMouseEvent<T>>;
get onMouseDblClick(): Event<IListMouseEvent<T>>;
get onMouseMiddleClick(): Event<IListMouseEvent<T>>;
get onMouseUp(): Event<IListMouseEvent<T>>;
get onMouseDown(): Event<IListMouseEvent<T>>;
get onMouseOver(): Event<IListMouseEvent<T>>;
get onMouseMove(): Event<IListMouseEvent<T>>;
get onMouseOut(): Event<IListMouseEvent<T>>;
get onContextMenu(): Event<IListMouseEvent<T> | IListGestureEvent<T>>;
get onTouchStart(): Event<IListTouchEvent<T>>;
get onTap(): Event<IListGestureEvent<T>>;
private toMouseEvent;
private toTouchEvent;
private toGestureEvent;
private toDragEvent;
private onScroll;
private onTouchChange;
private onDragStart;
private onDragOver;
private onDragLeave;
private onDrop;
private onDragEnd;
private clearDragOverFeedback;
private setupDragAndDropScrollTopAnimation;
private animateDragAndDropScrollTop;
private teardownDragAndDropScrollTopAnimation;
private getItemIndexFromEventTarget;
private getRenderRange;
/**
* 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.
*/
private _rerender;
private probeDynamicHeight;
private getNextToLastElement;
getElementDomId(index: number): string;
dispose(): void;
}