import { IDragAndDropData } from "../../dnd.js"; import { IKeyboardEvent } from "../../keyboardEvent.js"; import { IMouseEvent } from "../../mouseEvent.js"; import { GestureEvent } from "../../touch.js"; import { ListViewTargetSector } from "./listView.js"; import { IDisposable } from "../../../common/lifecycle.js"; export interface IListVirtualDelegate { 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 IListElementRenderDetails { readonly height?: number; readonly onScroll?: boolean; } export interface IListRenderer { readonly templateId: string; renderTemplate(container: HTMLElement): TTemplateData; renderElement(element: T, index: number, templateData: TTemplateData, details?: IListElementRenderDetails): void; disposeElement?(element: T, index: number, templateData: TTemplateData, details?: IListElementRenderDetails): void; disposeTemplate(templateData: TTemplateData): void; } export interface IListEvent { readonly elements: readonly T[]; readonly indexes: readonly number[]; readonly browserEvent?: UIEvent; } export interface IListBrowserMouseEvent extends MouseEvent { isHandledByList?: boolean; } export interface IListMouseEvent { readonly browserEvent: IListBrowserMouseEvent; readonly element: T | undefined; readonly index: number | undefined; } export interface IListTouchEvent { readonly browserEvent: TouchEvent; readonly element: T | undefined; readonly index: number | undefined; } export interface IListGestureEvent { readonly browserEvent: GestureEvent; readonly element: T | undefined; readonly index: number | undefined; } export interface IListDragEvent { readonly browserEvent: DragEvent; readonly element: T | undefined; readonly index: number | undefined; readonly sector: ListViewTargetSector | undefined; } export interface IListContextMenuEvent { readonly browserEvent: UIEvent; readonly element: T | undefined; readonly index: number | undefined; readonly anchor: HTMLElement | IMouseEvent; } export declare const NotSelectableGroupId = "notSelectable"; export type NotSelectableGroupIdType = typeof NotSelectableGroupId; export interface IIdentityProvider { getId(element: T): { toString(): string; }; getGroupId?(element: T): number | NotSelectableGroupIdType; } export interface IKeyboardNavigationLabelProvider { /** * 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 enum ListDragOverEffectType { Copy = 0, Move = 1 } export declare enum ListDragOverEffectPosition { Over = "drop-target", Before = "drop-target-before", After = "drop-target-after" } export interface ListDragOverEffect { type: ListDragOverEffectType; position?: ListDragOverEffectPosition; } export interface IListDragOverReaction { accept: boolean; effect?: ListDragOverEffect; feedback?: number[]; } export declare const ListDragOverReactions: { reject(): IListDragOverReaction; accept(): IListDragOverReaction; }; /** * Warning: Once passed to a list, that list takes up * the responsibility of disposing it. */ export interface IListDragAndDrop extends IDisposable { 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, targetSector: ListViewTargetSector | 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, targetSector: ListViewTargetSector | undefined, originalEvent: DragEvent): void; onDragEnd?(originalEvent: DragEvent): void; } export declare class ListError extends Error { constructor(user: string, message: string); } export declare abstract class CachedListVirtualDelegate implements IListVirtualDelegate { private cache; getHeight(element: T): number; protected abstract estimateHeight(element: T): number; abstract getTemplateId(element: T): string; setDynamicHeight(element: T, height: number): void; }