import { IContextViewProvider } from "../contextview/contextview.js"; import { IInputBoxStyles } from "../inputbox/inputBox.js"; import { IIdentityProvider, IKeyboardNavigationLabelProvider, IListElementRenderDetails, IListRenderer, IListVirtualDelegate } from "../list/list.js"; import { IListOptions, IListStyles, List, MouseController, TypeNavigationMode } from "../list/listWidget.js"; import { IToggleStyles } from "../toggle/toggle.js"; import { ICollapseStateChangeEvent, ITreeContextMenuEvent, ITreeDragAndDrop, ITreeEvent, ITreeFilter, ITreeModel, ITreeModelSpliceEvent, ITreeMouseEvent, ITreeNavigator, ITreeNode, ITreeRenderer, TreeFilterResult, TreeVisibility } from "./tree.js"; import { ThemeIcon } from "../../../common/themables.js"; import { SetMap } from "../../../common/map.js"; import { Event } from "../../../common/event.js"; import { FuzzyScore } from "../../../common/filters.js"; import { Disposable, DisposableStore, IDisposable } from "../../../common/lifecycle.js"; import { ScrollEvent } from "../../../common/scrollable.js"; import { IMouseWheelEvent } from "../../mouseEvent.js"; export declare class ComposedTreeDelegate implements IListVirtualDelegate { private delegate; constructor(delegate: IListVirtualDelegate); getHeight(element: N): number; getTemplateId(element: N): string; hasDynamicHeight(element: N): boolean; setDynamicHeight(element: N, height: number): void; } interface ITreeListTemplateData { readonly container: HTMLElement; readonly indent: HTMLElement; readonly twistie: HTMLElement; indentGuidesDisposable: IDisposable; indentSize: number; readonly templateData: T; } export interface IAbstractTreeViewState { readonly focus: Iterable; readonly selection: Iterable; readonly expanded: { [id: string]: 1 | 0; }; readonly scrollTop: number; } export declare class AbstractTreeViewState implements IAbstractTreeViewState { readonly focus: Set; readonly selection: Set; readonly expanded: { [id: string]: 1 | 0; }; scrollTop: number; static lift(state: IAbstractTreeViewState): AbstractTreeViewState; static empty(scrollTop?: number): AbstractTreeViewState; protected constructor(state: IAbstractTreeViewState); toJSON(): IAbstractTreeViewState; } export declare enum RenderIndentGuides { None = "none", OnHover = "onHover", Always = "always" } interface ITreeRendererOptions { readonly indent?: number; readonly defaultIndent?: number; readonly renderIndentGuides?: RenderIndentGuides; readonly hideTwistiesOfChildlessElements?: boolean; readonly twistieAdditionalCssClass?: (element: T) => string | undefined; } interface Collection { readonly elements: T[]; readonly onDidChange: Event; } export declare class TreeRenderer implements IListRenderer, ITreeListTemplateData> { private readonly renderer; private readonly model; private readonly activeNodes; private readonly renderedIndentGuides; private static readonly DefaultIndent; readonly templateId: string; private renderedElements; private renderedNodes; private indent; private defaultIndent; private hideTwistiesOfChildlessElements; private twistieAdditionalCssClass?; private shouldRenderIndentGuides; private activeIndentNodes; private indentGuidesDisposable; private readonly disposables; constructor(renderer: ITreeRenderer, model: ITreeModel, onDidChangeCollapseState: Event>, activeNodes: Collection>, renderedIndentGuides: SetMap, HTMLDivElement>, options?: ITreeRendererOptions); updateOptions(options?: ITreeRendererOptions): void; renderTemplate(container: HTMLElement): ITreeListTemplateData; renderElement(node: ITreeNode, index: number, templateData: ITreeListTemplateData, details?: IListElementRenderDetails): void; disposeElement(node: ITreeNode, index: number, templateData: ITreeListTemplateData, details?: IListElementRenderDetails): void; disposeTemplate(templateData: ITreeListTemplateData): void; private onDidChangeTwistieState; private onDidChangeNodeTwistieState; private renderTreeElement; private _renderIndentGuides; private _onDidChangeActiveNodes; dispose(): void; } export declare function contiguousFuzzyScore(patternLower: string, wordLower: string): FuzzyScore | undefined; export type LabelFuzzyScore = { label: string; score: FuzzyScore; }; export interface IFindFilter extends ITreeFilter { filter(element: T, parentVisibility: TreeVisibility): TreeFilterResult; pattern: string; } export declare class FindFilter implements IFindFilter, IDisposable { private readonly _keyboardNavigationLabelProvider; private readonly _filter?; private readonly _defaultFindVisibility?; private _totalCount; get totalCount(): number; private _matchCount; get matchCount(): number; private _findMatchType; set findMatchType(type: TreeFindMatchType); get findMatchType(): TreeFindMatchType; private _findMode; set findMode(mode: TreeFindMode); get findMode(): TreeFindMode; private _pattern; private _lowercasePattern; private readonly disposables; set pattern(pattern: string); constructor(_keyboardNavigationLabelProvider: IKeyboardNavigationLabelProvider, _filter?: ITreeFilter | undefined, _defaultFindVisibility?: (TreeVisibility | ((node: T) => TreeVisibility)) | undefined); filter(element: T, parentVisibility: TreeVisibility): TreeFilterResult; reset(): void; dispose(): void; } export interface ITreeFindToggleContribution { id: string; title: string; icon: ThemeIcon; isChecked: boolean; } export declare class FindToggles { private stateMap; constructor(startStates: ITreeFindToggleContribution[]); states(): ITreeFindToggleContribution[]; get(id: string): boolean; set(id: string, value: boolean): boolean; } export interface ITreeFindToggleChangeEvent { readonly id: string; readonly isChecked: boolean; } export interface IFindWidgetStyles { listFilterWidgetBackground: string | undefined; listFilterWidgetOutline: string | undefined; listFilterWidgetNoMatchesOutline: string | undefined; listFilterWidgetShadow: string | undefined; readonly toggleStyles: IToggleStyles; readonly inputBoxStyles: IInputBoxStyles; } export interface IFindWidgetOptions { readonly history?: string[]; readonly styles?: IFindWidgetStyles; } export declare enum TreeFindMode { Highlight = 0, Filter = 1 } export declare enum TreeFindMatchType { Fuzzy = 0, Contiguous = 1 } interface IAbstractFindControllerOptions extends IFindWidgetOptions { placeholder?: string; toggles?: ITreeFindToggleContribution[]; showNotFoundMessage?: boolean; } export interface IFindControllerOptions extends IAbstractFindControllerOptions { defaultFindMode?: TreeFindMode; defaultFindMatchType?: TreeFindMatchType; } export declare abstract class AbstractFindController implements IDisposable { protected tree: AbstractTree; protected filter: IFindFilter; protected readonly contextViewProvider: IContextViewProvider; protected readonly options: IAbstractFindControllerOptions; private _history; private _pattern; get pattern(): string; private previousPattern; protected readonly toggles: FindToggles; private _placeholder; protected get placeholder(): string; protected set placeholder(value: string); private widget; private readonly _onDidChangePattern; readonly onDidChangePattern: Event; private readonly _onDidChangeOpenState; readonly onDidChangeOpenState: Event; private readonly enabledDisposables; protected readonly disposables: DisposableStore; constructor(tree: AbstractTree, filter: IFindFilter, contextViewProvider: IContextViewProvider, options?: IAbstractFindControllerOptions); isOpened(): boolean; open(): void; close(): void; protected onDidChangeValue(pattern: string): void; protected abstract applyPattern(pattern: string): void; protected onDidToggleChange(e: ITreeFindToggleChangeEvent): void; protected updateToggleState(id: string, checked: boolean): void; protected renderMessage(showNotFound: boolean, warningMessage?: string): void; protected alertResults(results: number): void; dispose(): void; } export declare class FindController extends AbstractFindController { protected filter: FindFilter; get mode(): TreeFindMode; set mode(mode: TreeFindMode); get matchType(): TreeFindMatchType; set matchType(matchType: TreeFindMatchType); private readonly _onDidChangeMode; readonly onDidChangeMode: Event; private readonly _onDidChangeMatchType; readonly onDidChangeMatchType: Event; constructor(tree: AbstractTree, filter: FindFilter, contextViewProvider: IContextViewProvider, options?: IFindControllerOptions); updateOptions(optionsUpdate?: IAbstractTreeOptionsUpdate): void; protected applyPattern(pattern: string): void; shouldAllowFocus(node: ITreeNode): boolean; protected onDidToggleChange(e: ITreeFindToggleChangeEvent): void; protected render(): void; } export interface StickyScrollNode { readonly node: ITreeNode; readonly startIndex: number; readonly endIndex: number; readonly height: number; readonly position: number; } export interface IStickyScrollDelegate { constrainStickyScrollNodes(stickyNodes: StickyScrollNode[], stickyScrollMaxItemCount: number, maxWidgetHeight: number): StickyScrollNode[]; } declare class StickyScrollController extends Disposable { private readonly tree; private readonly model; private readonly view; private readonly treeDelegate; readonly onDidChangeHasFocus: Event; readonly onContextMenu: Event>; private readonly stickyScrollDelegate; private stickyScrollMaxItemCount; private readonly maxWidgetViewRatio; private readonly _widget; private paddingTop; constructor(tree: AbstractTree, model: ITreeModel, view: List>, renderers: TreeRenderer[], treeDelegate: IListVirtualDelegate>, options?: IAbstractTreeOptions); get height(): number; get count(): number; getNode(node: ITreeNode): StickyScrollNode | undefined; private getNodeAtHeight; private update; private findStickyState; private getNextVisibleNode; private getNextStickyNode; private nodeTopAlignsWithStickyNodesBottom; private createStickyScrollNode; private getAncestorUnderPrevious; private calculateStickyNodePosition; private constrainStickyNodes; private getParentNode; private nodeIsUncollapsedParent; private getNodeIndex; private getNodeRange; nodePositionTopBelowWidget(node: ITreeNode): number; getFocus(): T | undefined; domFocus(): void; focusedLast(): boolean; updateOptions(optionsUpdate?: IAbstractTreeOptionsUpdate): void; validateStickySettings(options: IAbstractTreeOptionsUpdate): { stickyScrollMaxItemCount: number; }; } export interface IAbstractTreeOptionsUpdate extends ITreeRendererOptions { readonly defaultIndent?: number; readonly multipleSelectionSupport?: boolean; readonly typeNavigationEnabled?: boolean; readonly typeNavigationMode?: TypeNavigationMode; readonly defaultFindMode?: TreeFindMode; readonly defaultFindMatchType?: TreeFindMatchType; readonly showNotFoundMessage?: boolean; readonly smoothScrolling?: boolean; readonly horizontalScrolling?: boolean; readonly scrollByPage?: boolean; readonly mouseWheelScrollSensitivity?: number; readonly fastScrollSensitivity?: number; readonly expandOnDoubleClick?: boolean; readonly expandOnlyOnTwistieClick?: boolean | ((e: T) => boolean); readonly enableStickyScroll?: boolean; readonly stickyScrollMaxItemCount?: number; readonly paddingTop?: number; } export interface IAbstractTreeOptions extends IAbstractTreeOptionsUpdate, IListOptions { readonly contextViewProvider?: IContextViewProvider; readonly collapseByDefault?: boolean; readonly allowNonCollapsibleParents?: boolean; readonly filter?: ITreeFilter; readonly dnd?: ITreeDragAndDrop; readonly paddingBottom?: number; readonly findWidgetEnabled?: boolean; readonly findWidgetStyles?: IFindWidgetStyles; readonly defaultFindVisibility?: TreeVisibility | ((e: T) => TreeVisibility); readonly stickyScrollDelegate?: IStickyScrollDelegate; readonly disableExpandOnSpacebar?: boolean; } /** * The trait concept needs to exist at the tree level, because collapsed * tree nodes will not be known by the list. */ declare class Trait { private getFirstViewElementWithTrait; private identityProvider?; private nodes; private elements; private readonly _onDidChange; readonly onDidChange: Event>; private _nodeSet; private get nodeSet(); constructor(getFirstViewElementWithTrait: () => ITreeNode | undefined, identityProvider?: IIdentityProvider | undefined); set(nodes: ITreeNode[], browserEvent?: UIEvent): void; private _set; get(): T[]; getNodes(): readonly ITreeNode[]; has(node: ITreeNode): boolean; onDidModelSplice({ insertedNodes, deletedNodes }: ITreeModelSpliceEvent): void; private createNodeSet; } interface ITreeNodeListOptions extends IListOptions> { readonly tree: AbstractTree; readonly stickyScrollProvider: () => StickyScrollController | undefined; } /** * We use this List subclass to restore selection and focus as nodes * get rendered in the list, possibly due to a node expand() call. */ declare class TreeNodeList extends List> { private focusTrait; private selectionTrait; private anchorTrait; constructor(user: string, container: HTMLElement, virtualDelegate: IListVirtualDelegate>, renderers: IListRenderer, unknown>[], focusTrait: Trait, selectionTrait: Trait, anchorTrait: Trait, options: ITreeNodeListOptions); protected createMouseController(options: ITreeNodeListOptions): MouseController>; splice(start: number, deleteCount: number, elements?: readonly ITreeNode[]): void; setFocus(indexes: number[], browserEvent?: UIEvent, fromAPI?: boolean): void; setSelection(indexes: number[], browserEvent?: UIEvent, fromAPI?: boolean): void; setAnchor(index: number | undefined, fromAPI?: boolean): void; } export declare enum AbstractTreePart { Tree = 0, StickyScroll = 1 } export declare abstract class AbstractTree implements IDisposable { private readonly _user; private _options; protected view: TreeNodeList; private renderers; protected model: ITreeModel; private treeDelegate; private focus; private selection; private anchor; private eventBufferer; private findController?; private findFilter?; readonly onDidChangeFindOpenState: Event; onDidChangeStickyScrollFocused: Event; private focusNavigationFilter; private stickyScrollController?; private styleElement; protected readonly disposables: DisposableStore; get onDidScroll(): Event; get onDidChangeFocus(): Event>; get onDidChangeSelection(): Event>; get onMouseClick(): Event>; get onMouseDblClick(): Event>; get onMouseMiddleClick(): Event>; get onMouseOver(): Event>; get onMouseOut(): Event>; get onContextMenu(): Event>; get onTap(): Event>; get onPointer(): Event>; get onKeyDown(): Event; get onKeyUp(): Event; get onKeyPress(): Event; get onDidFocus(): Event; get onDidBlur(): Event; private readonly onDidSwapModel; private readonly onDidChangeModelRelay; private readonly onDidSpliceModelRelay; private readonly onDidChangeCollapseStateRelay; private readonly onDidChangeRenderNodeCountRelay; private readonly onDidChangeActiveNodesRelay; get onDidChangeModel(): Event; get onDidChangeCollapseState(): Event>; get onDidChangeRenderNodeCount(): Event>; private readonly _onWillRefilter; readonly onWillRefilter: Event; get findMode(): TreeFindMode; set findMode(findMode: TreeFindMode); readonly onDidChangeFindMode: Event; get findMatchType(): TreeFindMatchType; set findMatchType(findFuzzy: TreeFindMatchType); readonly onDidChangeFindMatchType: Event; get onDidChangeFindPattern(): Event; get expandOnDoubleClick(): boolean; get expandOnlyOnTwistieClick(): boolean | ((e: T) => boolean); private readonly _onDidUpdateOptions; readonly onDidUpdateOptions: Event>; get onDidDispose(): Event; constructor(_user: string, container: HTMLElement, delegate: IListVirtualDelegate, renderers: ITreeRenderer[], _options?: IAbstractTreeOptions); updateOptions(optionsUpdate?: IAbstractTreeOptionsUpdate): void; get options(): IAbstractTreeOptions; private updateStickyScroll; updateWidth(element: TRef): void; 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 firstVisibleElement(): T | undefined; get lastVisibleElement(): T; get ariaLabel(): string; set ariaLabel(value: string); get selectionSize(): number; domFocus(): void; isDOMFocused(): boolean; layout(height?: number, width?: number): void; style(styles: IListStyles): void; getParentElement(location: TRef): T; getFirstElementChild(location: TRef): T | undefined; getNode(location?: TRef): ITreeNode; getNodeLocation(node: ITreeNode): TRef; collapse(location: TRef, recursive?: boolean): boolean; expand(location: TRef, recursive?: boolean): boolean; toggleCollapsed(location: TRef, recursive?: boolean): boolean; expandAll(): void; collapseAll(): void; isCollapsible(location: TRef): boolean; setCollapsible(location: TRef, collapsible?: boolean): boolean; isCollapsed(location: TRef): boolean; expandTo(location: TRef): void; triggerTypeNavigation(): void; openFind(): void; closeFind(): void; refilter(): void; setAnchor(element: TRef | undefined): void; getAnchor(): T | undefined; setSelection(elements: TRef[], browserEvent?: UIEvent): void; getSelection(): T[]; setFocus(elements: TRef[], browserEvent?: UIEvent): void; focusNext(n?: number, loop?: boolean, browserEvent?: UIEvent, filter?: ((node: ITreeNode) => boolean) | undefined): void; focusPrevious(n?: number, loop?: boolean, browserEvent?: UIEvent, filter?: ((node: ITreeNode) => boolean) | undefined): void; focusNextPage(browserEvent?: UIEvent, filter?: ((node: ITreeNode) => boolean) | undefined): Promise; focusPreviousPage(browserEvent?: UIEvent, filter?: ((node: ITreeNode) => boolean) | undefined): Promise; focusLast(browserEvent?: UIEvent, filter?: ((node: ITreeNode) => boolean) | undefined): void; focusFirst(browserEvent?: UIEvent, filter?: ((node: ITreeNode) => boolean) | undefined): void; getFocus(): T[]; getStickyScrollFocus(): T[]; getFocusedPart(): AbstractTreePart; reveal(location: TRef, relativeTop?: number): void; /** * Returns the relative position of an element rendered in the list. * Returns `null` if the element isn't *entirely* in the visible viewport. */ getRelativeTop(location: TRef): number | null; getViewState(identityProvider?: IIdentityProvider | undefined): AbstractTreeViewState; private onLeftArrow; private onRightArrow; private onSpace; protected abstract createModel(user: string, options: IAbstractTreeOptions): ITreeModel; private readonly modelDisposables; private setupModel; navigate(start?: TRef): ITreeNavigator; delegateScrollFromMouseWheelEvent(browserEvent: IMouseWheelEvent): void; dispose(): void; } export {};