import { IIdentityProvider, IListVirtualDelegate } from "../list/list.js"; import { IListStyles } from "../list/listWidget.js"; import { TreeFindMode, IAbstractTreeOptions, IAbstractTreeOptionsUpdate, TreeFindMatchType, AbstractTreePart } from "./abstractTree.js"; import { ICompressedTreeElement, ICompressedTreeNode } from "./compressedObjectTreeModel.js"; import { CompressibleObjectTree, ICompressibleKeyboardNavigationLabelProvider, ICompressibleTreeRenderer, IObjectTreeSetChildrenOptions, ObjectTree } from "./objectTree.js"; import { IAsyncDataSource, ICollapseStateChangeEvent, IObjectTreeElement, ITreeContextMenuEvent, ITreeEvent, ITreeMouseEvent, ITreeNavigator, ITreeNode, ITreeRenderer, ITreeSorter, ObjectTreeElementCollapseState, WeakMapper } from "./tree.js"; import { CancelablePromise } from "../../../common/async.js"; import { Emitter, Event } from "../../../common/event.js"; import { DisposableStore, IDisposable } from "../../../common/lifecycle.js"; import { ScrollEvent } from "../../../common/scrollable.js"; import { CancellationToken } from "../../../common/cancellation.js"; export interface IAsyncDataTreeNode { element: TInput | T; readonly parent: IAsyncDataTreeNode | null; readonly children: IAsyncDataTreeNode[]; readonly id?: string | null; refreshPromise: CancelablePromise | undefined; hasChildren: boolean; stale: boolean; slow: boolean; readonly defaultCollapseState: undefined | ObjectTreeElementCollapseState.PreserveOrCollapsed | ObjectTreeElementCollapseState.PreserveOrExpanded; forceExpanded: boolean; } type AsyncDataTreeNodeMapper = WeakMapper | null, TFilterData>, ITreeNode>; export interface IAsyncFindToggles { matchType: TreeFindMatchType; findMode: TreeFindMode; } export interface IAsyncFindResult { warningMessage?: string; matchCount: number; isMatch(element: T): boolean; } export interface IAsyncFindProvider { /** * `startSession` is called when the user enters the first character in the find widget. * This can be used to allocate some state to preserve for the session. */ startSession?(): void; /** * `find` is called when the user types one or more character into the find input. */ find(pattern: string, toggles: IAsyncFindToggles, token: CancellationToken): Promise | undefined>; /** * `isVisible` is called to check if an element should be visible. * For an element to be visible, all its ancestors must also be visible and the label must match the find pattern. */ isVisible?(element: T): boolean; /** * End Session is called when the user either closes the find widget or has an empty find input. * This can be used to deallocate any state that was allocated. */ endSession?(): Promise; } export interface IAsyncDataTreeOptionsUpdate extends IAbstractTreeOptionsUpdate { } export interface IAsyncDataTreeUpdateChildrenOptions extends IObjectTreeSetChildrenOptions { } export interface IAsyncDataTreeOptions extends IAsyncDataTreeOptionsUpdate, Pick, Exclude, "collapseByDefault">> { readonly collapseByDefault?: { (e: T): boolean; }; readonly identityProvider?: IIdentityProvider; readonly sorter?: ITreeSorter; readonly autoExpandSingleChildren?: boolean; readonly findProvider?: IAsyncFindProvider; } export interface IAsyncDataTreeViewState { readonly focus?: string[]; readonly selection?: string[]; readonly expanded?: string[]; readonly scrollTop?: number; } interface IAsyncDataTreeViewStateContext { readonly viewState: IAsyncDataTreeViewState; readonly selection: IAsyncDataTreeNode[]; readonly focus: IAsyncDataTreeNode[]; } export declare class AsyncDataTree implements IDisposable { protected user: string; private dataSource; protected readonly tree: ObjectTree, TFilterData>; protected readonly root: IAsyncDataTreeNode; private readonly nodes; private readonly sorter?; private readonly findController?; private readonly getDefaultCollapseState; private readonly subTreeRefreshPromises; private readonly refreshPromises; protected readonly identityProvider?: IIdentityProvider; private readonly autoExpandSingleChildren; private readonly _onDidRender; protected readonly _onDidChangeNodeSlowState: Emitter>; protected readonly nodeMapper: AsyncDataTreeNodeMapper; protected readonly disposables: DisposableStore; get onDidScroll(): Event; get onDidChangeFocus(): Event>; get onDidChangeSelection(): Event>; get onKeyDown(): Event; get onMouseClick(): Event>; get onMouseDblClick(): Event>; get onContextMenu(): Event>; get onTap(): Event>; get onPointer(): Event>; get onDidFocus(): Event; get onDidBlur(): Event; /** * To be used internally only! * @deprecated */ get onDidChangeModel(): Event; get onDidChangeCollapseState(): Event | null, TFilterData>>; get onDidUpdateOptions(): Event>>; private focusNavigationFilter; readonly onDidChangeFindOpenState: Event; get onDidChangeStickyScrollFocused(): Event; get findMode(): TreeFindMode; set findMode(mode: TreeFindMode); readonly onDidChangeFindMode: Event; get findMatchType(): TreeFindMatchType; set findMatchType(matchType: TreeFindMatchType); readonly onDidChangeFindMatchType: Event; get expandOnlyOnTwistieClick(): boolean | ((e: T) => boolean); get onDidDispose(): Event; constructor(user: string, container: HTMLElement, delegate: IListVirtualDelegate, renderers: ITreeRenderer[], dataSource: IAsyncDataSource, options?: IAsyncDataTreeOptions); protected createTree(user: string, container: HTMLElement, delegate: IListVirtualDelegate, renderers: ITreeRenderer[], options: IAsyncDataTreeOptions): ObjectTree, TFilterData>; updateOptions(optionsUpdate?: IAsyncDataTreeOptionsUpdate | null>): void; get options(): IAsyncDataTreeOptions; getHTMLElement(): HTMLElement; get contentHeight(): number; get contentWidth(): number; get onDidChangeContentHeight(): Event; get onDidChangeContentWidth(): Event; get scrollTop(): number; set scrollTop(scrollTop: number); get scrollLeft(): number; set scrollLeft(scrollLeft: number); get scrollHeight(): number; get renderHeight(): number; get lastVisibleElement(): T; get ariaLabel(): string; set ariaLabel(value: string); domFocus(): void; isDOMFocused(): boolean; navigate(start?: T): AsyncDataTreeNavigator; layout(height?: number, width?: number): void; style(styles: IListStyles): void; getInput(): TInput | undefined; setInput(input: TInput, viewState?: IAsyncDataTreeViewState): Promise; updateChildren(element?: TInput | T, recursive?: boolean, rerender?: boolean, options?: IAsyncDataTreeUpdateChildrenOptions): Promise; cancelAllRefreshPromises(includeSubTrees?: boolean): void; private _updateChildren; resort(element?: TInput | T, recursive?: boolean): void; hasNode(element: TInput | T): boolean; rerender(element?: T): void; updateElementHeight(element: T, height: number | undefined): void; updateWidth(element: T): void; getNode(element?: TInput | T): ITreeNode; collapse(element: T, recursive?: boolean): boolean; expand(element: T, recursive?: boolean): Promise; toggleCollapsed(element: T, recursive?: boolean): boolean; expandAll(): void; expandTo(element: T): Promise; collapseAll(): void; isCollapsible(element: T): boolean; isCollapsed(element: TInput | T): boolean; triggerTypeNavigation(): void; openFind(): void; closeFind(): void; refilter(): void; setAnchor(element: T | undefined): void; getAnchor(): T | undefined; setSelection(elements: T[], browserEvent?: UIEvent): void; getSelection(): T[]; setFocus(elements: T[], browserEvent?: UIEvent): void; focusNext(n?: number, loop?: boolean, browserEvent?: UIEvent): void; focusPrevious(n?: number, loop?: boolean, browserEvent?: UIEvent): void; focusNextPage(browserEvent?: UIEvent): Promise; focusPreviousPage(browserEvent?: UIEvent): Promise; focusLast(browserEvent?: UIEvent): void; focusFirst(browserEvent?: UIEvent): void; getFocus(): T[]; getStickyScrollFocus(): T[]; getFocusedPart(): AbstractTreePart; reveal(element: T, relativeTop?: number): void; getRelativeTop(element: T): number | null; getParentElement(element: T): TInput | T; getFirstElementChild(element?: TInput | T): TInput | T | undefined; protected getDataNode(element: TInput | T): IAsyncDataTreeNode; private refreshAndRenderNode; private refreshNode; private doRefreshSubTree; private doRefreshNode; private doGetChildren; private _onDidChangeCollapseState; private setChildren; protected render(node: IAsyncDataTreeNode, viewStateContext?: IAsyncDataTreeViewStateContext, options?: IAsyncDataTreeUpdateChildrenOptions): void; protected asTreeElement(node: IAsyncDataTreeNode, viewStateContext?: IAsyncDataTreeViewStateContext): IObjectTreeElement>; protected processChildren(children: Iterable): Iterable; getViewState(): IAsyncDataTreeViewState; dispose(): void; } type CompressibleAsyncDataTreeNodeMapper = WeakMapper>, TFilterData>, ITreeNode, TFilterData>>; export interface ITreeCompressionDelegate { isIncompressible(element: T): boolean; } export interface ICompressibleAsyncDataTreeOptions extends IAsyncDataTreeOptions { readonly compressionEnabled?: boolean; readonly keyboardNavigationLabelProvider?: ICompressibleKeyboardNavigationLabelProvider; } export interface ICompressibleAsyncDataTreeOptionsUpdate extends IAsyncDataTreeOptionsUpdate { readonly compressionEnabled?: boolean; } export declare class CompressibleAsyncDataTree extends AsyncDataTree { private compressionDelegate; protected readonly tree: CompressibleObjectTree, TFilterData>; protected readonly compressibleNodeMapper: CompressibleAsyncDataTreeNodeMapper; private filter?; constructor(user: string, container: HTMLElement, virtualDelegate: IListVirtualDelegate, compressionDelegate: ITreeCompressionDelegate, renderers: ICompressibleTreeRenderer[], dataSource: IAsyncDataSource, options?: ICompressibleAsyncDataTreeOptions); getCompressedTreeNode(e: T | TInput): ICompressedTreeNode> | null; protected createTree(user: string, container: HTMLElement, delegate: IListVirtualDelegate, renderers: ICompressibleTreeRenderer[], options: ICompressibleAsyncDataTreeOptions): ObjectTree, TFilterData>; protected asTreeElement(node: IAsyncDataTreeNode, viewStateContext?: IAsyncDataTreeViewStateContext): ICompressedTreeElement>; getViewState(): IAsyncDataTreeViewState; protected render(node: IAsyncDataTreeNode, viewStateContext?: IAsyncDataTreeViewStateContext, options?: IAsyncDataTreeUpdateChildrenOptions): void; protected processChildren(children: Iterable): Iterable; navigate(start?: T): AsyncDataTreeNavigator; } declare class AsyncDataTreeNavigator implements ITreeNavigator { private navigator; constructor(navigator: ITreeNavigator | null>); current(): T | null; previous(): T | null; first(): T | null; last(): T | null; next(): T | null; } export {};