sussudio
Version:
An unofficial VS Code Internal API
108 lines (107 loc) • 4.11 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 { IKeyboardEvent } from "../../keyboardEvent.mjs";
import { GestureEvent } from "../../touch.mjs";
export interface IListVirtualDelegate<T> {
getHeight(element: T): number;
getTemplateId(element: T): string;
hasDynamicHeight?(element: T): boolean;
getDynamicHeight?(element: T): number | null;
setDynamicHeight?(element: T, height: number): void;
}
export interface IListRenderer<T, TTemplateData> {
readonly templateId: string;
renderTemplate(container: HTMLElement): TTemplateData;
renderElement(element: T, index: number, templateData: TTemplateData, height: number | undefined): void;
disposeElement?(element: T, index: number, templateData: TTemplateData, height: number | undefined): void;
disposeTemplate(templateData: TTemplateData): void;
}
export interface IListEvent<T> {
elements: T[];
indexes: number[];
browserEvent?: UIEvent;
}
export interface IListMouseEvent<T> {
browserEvent: MouseEvent;
element: T | undefined;
index: number | undefined;
}
export interface IListTouchEvent<T> {
browserEvent: TouchEvent;
element: T | undefined;
index: number | undefined;
}
export interface IListGestureEvent<T> {
browserEvent: GestureEvent;
element: T | undefined;
index: number | undefined;
}
export interface IListDragEvent<T> {
browserEvent: DragEvent;
element: T | undefined;
index: number | undefined;
}
export interface IListContextMenuEvent<T> {
browserEvent: UIEvent;
element: T | undefined;
index: number | undefined;
anchor: HTMLElement | {
x: number;
y: number;
};
}
export interface IIdentityProvider<T> {
getId(element: T): {
toString(): string;
};
}
export interface IKeyboardNavigationLabelProvider<T> {
/**
* Return a keyboard navigation label(s) which will be used by
* the list for filtering/navigating. Return `undefined` to make
* an element always match.
*/
getKeyboardNavigationLabel(element: T): {
toString(): string | undefined;
} | {
toString(): string | undefined;
}[] | undefined;
}
export interface IKeyboardNavigationDelegate {
mightProducePrintableCharacter(event: IKeyboardEvent): boolean;
}
export declare const enum ListDragOverEffect {
Copy = 0,
Move = 1
}
export interface IListDragOverReaction {
accept: boolean;
effect?: ListDragOverEffect;
feedback?: number[];
}
export declare const ListDragOverReactions: {
reject(): IListDragOverReaction;
accept(): IListDragOverReaction;
};
export interface IListDragAndDrop<T> {
getDragURI(element: T): string | null;
getDragLabel?(elements: T[], originalEvent: DragEvent): string | undefined;
onDragStart?(data: IDragAndDropData, originalEvent: DragEvent): void;
onDragOver(data: IDragAndDropData, targetElement: T | undefined, targetIndex: number | undefined, originalEvent: DragEvent): boolean | IListDragOverReaction;
onDragLeave?(data: IDragAndDropData, targetElement: T | undefined, targetIndex: number | undefined, originalEvent: DragEvent): void;
drop(data: IDragAndDropData, targetElement: T | undefined, targetIndex: number | undefined, originalEvent: DragEvent): void;
onDragEnd?(originalEvent: DragEvent): void;
}
export declare class ListError extends Error {
constructor(user: string, message: string);
}
export declare abstract class CachedListVirtualDelegate<T extends object> implements IListVirtualDelegate<T> {
private cache;
getHeight(element: T): number;
protected abstract estimateHeight(element: T): number;
abstract getTemplateId(element: T): string;
setDynamicHeight(element: T, height: number): void;
}