{"version":3,"file":"static/js/1191_2b22f63b863ffba4e80c.js","mappings":"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","sources":["file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/ui/table/tableWidget.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/ui/toggle/toggle.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/ui/toolbar/toolbar.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/ui/tree/abstractTree.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/ui/tree/asyncDataTree.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/ui/tree/compressedObjectTreeModel.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/ui/tree/dataTree.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/ui/tree/indexTreeModel.js"],"sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { $, append, clearNode, createStyleSheet } from '../../dom.js';\nimport { getBaseLayerHoverDelegate } from '../hover/hoverDelegate2.js';\nimport { getDefaultHoverDelegate } from '../hover/hoverDelegateFactory.js';\nimport { List, unthemedListStyles } from '../list/listWidget.js';\nimport { SplitView } from '../splitview/splitview.js';\nimport { Emitter, Event } from '../../../common/event.js';\nimport { Disposable, DisposableStore } from '../../../common/lifecycle.js';\nimport './table.css';\nclass TableListRenderer {\n constructor(columns, renderers, getColumnSize) {\n this.columns = columns;\n this.getColumnSize = getColumnSize;\n this.templateId = TableListRenderer.TemplateId;\n this.renderedTemplates = new Set();\n const rendererMap = new Map(renderers.map(r => [r.templateId, r]));\n this.renderers = [];\n for (const column of columns) {\n const renderer = rendererMap.get(column.templateId);\n if (!renderer) {\n throw new Error(`Table cell renderer for template id ${column.templateId} not found.`);\n }\n this.renderers.push(renderer);\n }\n }\n renderTemplate(container) {\n const rowContainer = append(container, $('.monaco-table-tr'));\n const cellContainers = [];\n const cellTemplateData = [];\n for (let i = 0; i < this.columns.length; i++) {\n const renderer = this.renderers[i];\n const cellContainer = append(rowContainer, $('.monaco-table-td', { 'data-col-index': i }));\n cellContainer.style.width = `${this.getColumnSize(i)}px`;\n cellContainers.push(cellContainer);\n cellTemplateData.push(renderer.renderTemplate(cellContainer));\n }\n const result = { container, cellContainers, cellTemplateData };\n this.renderedTemplates.add(result);\n return result;\n }\n renderElement(element, index, templateData, height) {\n for (let i = 0; i < this.columns.length; i++) {\n const column = this.columns[i];\n const cell = column.project(element);\n const renderer = this.renderers[i];\n renderer.renderElement(cell, index, templateData.cellTemplateData[i], height);\n }\n }\n disposeElement(element, index, templateData, height) {\n for (let i = 0; i < this.columns.length; i++) {\n const renderer = this.renderers[i];\n if (renderer.disposeElement) {\n const column = this.columns[i];\n const cell = column.project(element);\n renderer.disposeElement(cell, index, templateData.cellTemplateData[i], height);\n }\n }\n }\n disposeTemplate(templateData) {\n for (let i = 0; i < this.columns.length; i++) {\n const renderer = this.renderers[i];\n renderer.disposeTemplate(templateData.cellTemplateData[i]);\n }\n clearNode(templateData.container);\n this.renderedTemplates.delete(templateData);\n }\n layoutColumn(index, size) {\n for (const { cellContainers } of this.renderedTemplates) {\n cellContainers[index].style.width = `${size}px`;\n }\n }\n}\nTableListRenderer.TemplateId = 'row';\nfunction asListVirtualDelegate(delegate) {\n return {\n getHeight(row) { return delegate.getHeight(row); },\n getTemplateId() { return TableListRenderer.TemplateId; },\n };\n}\nclass ColumnHeader extends Disposable {\n get minimumSize() { var _a; return (_a = this.column.minimumWidth) !== null && _a !== void 0 ? _a : 120; }\n get maximumSize() { var _a; return (_a = this.column.maximumWidth) !== null && _a !== void 0 ? _a : Number.POSITIVE_INFINITY; }\n get onDidChange() { var _a; return (_a = this.column.onDidChangeWidthConstraints) !== null && _a !== void 0 ? _a : Event.None; }\n constructor(column, index) {\n super();\n this.column = column;\n this.index = index;\n this._onDidLayout = new Emitter();\n this.onDidLayout = this._onDidLayout.event;\n this.element = $('.monaco-table-th', { 'data-col-index': index }, column.label);\n if (column.tooltip) {\n this._register(getBaseLayerHoverDelegate().setupUpdatableHover(getDefaultHoverDelegate('mouse'), this.element, column.tooltip));\n }\n }\n layout(size) {\n this._onDidLayout.fire([this.index, size]);\n }\n}\nexport class Table {\n get onDidChangeFocus() { return this.list.onDidChangeFocus; }\n get onDidChangeSelection() { return this.list.onDidChangeSelection; }\n get onDidScroll() { return this.list.onDidScroll; }\n get onMouseDblClick() { return this.list.onMouseDblClick; }\n get onPointer() { return this.list.onPointer; }\n get onDidFocus() { return this.list.onDidFocus; }\n get scrollTop() { return this.list.scrollTop; }\n set scrollTop(scrollTop) { this.list.scrollTop = scrollTop; }\n get scrollHeight() { return this.list.scrollHeight; }\n get renderHeight() { return this.list.renderHeight; }\n get onDidDispose() { return this.list.onDidDispose; }\n constructor(user, container, virtualDelegate, columns, renderers, _options) {\n this.virtualDelegate = virtualDelegate;\n this.domId = `table_id_${++Table.InstanceCount}`;\n this.disposables = new DisposableStore();\n this.cachedWidth = 0;\n this.cachedHeight = 0;\n this.domNode = append(container, $(`.monaco-table.${this.domId}`));\n const headers = columns.map((c, i) => this.disposables.add(new ColumnHeader(c, i)));\n const descriptor = {\n size: headers.reduce((a, b) => a + b.column.weight, 0),\n views: headers.map(view => ({ size: view.column.weight, view }))\n };\n this.splitview = this.disposables.add(new SplitView(this.domNode, {\n orientation: 1 /* Orientation.HORIZONTAL */,\n scrollbarVisibility: 2 /* ScrollbarVisibility.Hidden */,\n getSashOrthogonalSize: () => this.cachedHeight,\n descriptor\n }));\n this.splitview.el.style.height = `${virtualDelegate.headerRowHeight}px`;\n this.splitview.el.style.lineHeight = `${virtualDelegate.headerRowHeight}px`;\n const renderer = new TableListRenderer(columns, renderers, i => this.splitview.getViewSize(i));\n this.list = this.disposables.add(new List(user, this.domNode, asListVirtualDelegate(virtualDelegate), [renderer], _options));\n Event.any(...headers.map(h => h.onDidLayout))(([index, size]) => renderer.layoutColumn(index, size), null, this.disposables);\n this.splitview.onDidSashReset(index => {\n const totalWeight = columns.reduce((r, c) => r + c.weight, 0);\n const size = columns[index].weight / totalWeight * this.cachedWidth;\n this.splitview.resizeView(index, size);\n }, null, this.disposables);\n this.styleElement = createStyleSheet(this.domNode);\n this.style(unthemedListStyles);\n }\n updateOptions(options) {\n this.list.updateOptions(options);\n }\n splice(start, deleteCount, elements = []) {\n this.list.splice(start, deleteCount, elements);\n }\n getHTMLElement() {\n return this.domNode;\n }\n style(styles) {\n const content = [];\n content.push(`.monaco-table.${this.domId} > .monaco-split-view2 .monaco-sash.vertical::before {\n\t\t\ttop: ${this.virtualDelegate.headerRowHeight + 1}px;\n\t\t\theight: calc(100% - ${this.virtualDelegate.headerRowHeight}px);\n\t\t}`);\n this.styleElement.textContent = content.join('\\n');\n this.list.style(styles);\n }\n getSelectedElements() {\n return this.list.getSelectedElements();\n }\n getSelection() {\n return this.list.getSelection();\n }\n getFocus() {\n return this.list.getFocus();\n }\n dispose() {\n this.disposables.dispose();\n }\n}\nTable.InstanceCount = 0;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Widget } from '../widget.js';\nimport { ThemeIcon } from '../../../common/themables.js';\nimport { Emitter } from '../../../common/event.js';\nimport './toggle.css';\nimport { getDefaultHoverDelegate } from '../hover/hoverDelegateFactory.js';\nimport { getBaseLayerHoverDelegate } from '../hover/hoverDelegate2.js';\nexport const unthemedToggleStyles = {\n inputActiveOptionBorder: '#007ACC00',\n inputActiveOptionForeground: '#FFFFFF',\n inputActiveOptionBackground: '#0E639C50'\n};\nexport class Toggle extends Widget {\n constructor(opts) {\n var _a;\n super();\n this._onChange = this._register(new Emitter());\n this.onChange = this._onChange.event;\n this._onKeyDown = this._register(new Emitter());\n this.onKeyDown = this._onKeyDown.event;\n this._opts = opts;\n this._checked = this._opts.isChecked;\n const classes = ['monaco-custom-toggle'];\n if (this._opts.icon) {\n this._icon = this._opts.icon;\n classes.push(...ThemeIcon.asClassNameArray(this._icon));\n }\n if (this._opts.actionClassName) {\n classes.push(...this._opts.actionClassName.split(' '));\n }\n if (this._checked) {\n classes.push('checked');\n }\n this.domNode = document.createElement('div');\n this._hover = this._register(getBaseLayerHoverDelegate().setupUpdatableHover((_a = opts.hoverDelegate) !== null && _a !== void 0 ? _a : getDefaultHoverDelegate('mouse'), this.domNode, this._opts.title));\n this.domNode.classList.add(...classes);\n if (!this._opts.notFocusable) {\n this.domNode.tabIndex = 0;\n }\n this.domNode.setAttribute('role', 'checkbox');\n this.domNode.setAttribute('aria-checked', String(this._checked));\n this.domNode.setAttribute('aria-label', this._opts.title);\n this.applyStyles();\n this.onclick(this.domNode, (ev) => {\n if (this.enabled) {\n this.checked = !this._checked;\n this._onChange.fire(false);\n ev.preventDefault();\n }\n });\n this._register(this.ignoreGesture(this.domNode));\n this.onkeydown(this.domNode, (keyboardEvent) => {\n if (keyboardEvent.keyCode === 10 /* KeyCode.Space */ || keyboardEvent.keyCode === 3 /* KeyCode.Enter */) {\n this.checked = !this._checked;\n this._onChange.fire(true);\n keyboardEvent.preventDefault();\n keyboardEvent.stopPropagation();\n return;\n }\n this._onKeyDown.fire(keyboardEvent);\n });\n }\n get enabled() {\n return this.domNode.getAttribute('aria-disabled') !== 'true';\n }\n focus() {\n this.domNode.focus();\n }\n get checked() {\n return this._checked;\n }\n set checked(newIsChecked) {\n this._checked = newIsChecked;\n this.domNode.setAttribute('aria-checked', String(this._checked));\n this.domNode.classList.toggle('checked', this._checked);\n this.applyStyles();\n }\n width() {\n return 2 /*margin left*/ + 2 /*border*/ + 2 /*padding*/ + 16 /* icon width */;\n }\n applyStyles() {\n if (this.domNode) {\n this.domNode.style.borderColor = (this._checked && this._opts.inputActiveOptionBorder) || '';\n this.domNode.style.color = (this._checked && this._opts.inputActiveOptionForeground) || 'inherit';\n this.domNode.style.backgroundColor = (this._checked && this._opts.inputActiveOptionBackground) || '';\n }\n }\n enable() {\n this.domNode.setAttribute('aria-disabled', String(false));\n }\n disable() {\n this.domNode.setAttribute('aria-disabled', String(true));\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { ActionBar } from '../actionbar/actionbar.js';\nimport { DropdownMenuActionViewItem } from '../dropdown/dropdownActionViewItem.js';\nimport { Action, SubmenuAction } from '../../../common/actions.js';\nimport { Codicon } from '../../../common/codicons.js';\nimport { ThemeIcon } from '../../../common/themables.js';\nimport { EventMultiplexer } from '../../../common/event.js';\nimport { Disposable, DisposableStore } from '../../../common/lifecycle.js';\nimport './toolbar.css';\nimport * as nls from '../../../../nls.js';\nimport { createInstantHoverDelegate } from '../hover/hoverDelegateFactory.js';\n/**\n * A widget that combines an action bar for primary actions and a dropdown for secondary actions.\n */\nexport class ToolBar extends Disposable {\n constructor(container, contextMenuProvider, options = { orientation: 0 /* ActionsOrientation.HORIZONTAL */ }) {\n var _a;\n super();\n this.submenuActionViewItems = [];\n this.hasSecondaryActions = false;\n this._onDidChangeDropdownVisibility = this._register(new EventMultiplexer());\n this.onDidChangeDropdownVisibility = this._onDidChangeDropdownVisibility.event;\n this.disposables = this._register(new DisposableStore());\n options.hoverDelegate = (_a = options.hoverDelegate) !== null && _a !== void 0 ? _a : this._register(createInstantHoverDelegate());\n this.options = options;\n this.lookupKeybindings = typeof this.options.getKeyBinding === 'function';\n this.toggleMenuAction = this._register(new ToggleMenuAction(() => { var _a; return (_a = this.toggleMenuActionViewItem) === null || _a === void 0 ? void 0 : _a.show(); }, options.toggleMenuTitle));\n this.element = document.createElement('div');\n this.element.className = 'monaco-toolbar';\n container.appendChild(this.element);\n this.actionBar = this._register(new ActionBar(this.element, {\n orientation: options.orientation,\n ariaLabel: options.ariaLabel,\n actionRunner: options.actionRunner,\n allowContextMenu: options.allowContextMenu,\n highlightToggledItems: options.highlightToggledItems,\n hoverDelegate: options.hoverDelegate,\n actionViewItemProvider: (action, viewItemOptions) => {\n var _a;\n if (action.id === ToggleMenuAction.ID) {\n this.toggleMenuActionViewItem = new DropdownMenuActionViewItem(action, action.menuActions, contextMenuProvider, {\n actionViewItemProvider: this.options.actionViewItemProvider,\n actionRunner: this.actionRunner,\n keybindingProvider: this.options.getKeyBinding,\n classNames: ThemeIcon.asClassNameArray((_a = options.moreIcon) !== null && _a !== void 0 ? _a : Codicon.toolBarMore),\n anchorAlignmentProvider: this.options.anchorAlignmentProvider,\n menuAsChild: !!this.options.renderDropdownAsChildElement,\n skipTelemetry: this.options.skipTelemetry,\n isMenu: true,\n hoverDelegate: this.options.hoverDelegate\n });\n this.toggleMenuActionViewItem.setActionContext(this.actionBar.context);\n this.disposables.add(this._onDidChangeDropdownVisibility.add(this.toggleMenuActionViewItem.onDidChangeVisibility));\n return this.toggleMenuActionViewItem;\n }\n if (options.actionViewItemProvider) {\n const result = options.actionViewItemProvider(action, viewItemOptions);\n if (result) {\n return result;\n }\n }\n if (action instanceof SubmenuAction) {\n const result = new DropdownMenuActionViewItem(action, action.actions, contextMenuProvider, {\n actionViewItemProvider: this.options.actionViewItemProvider,\n actionRunner: this.actionRunner,\n keybindingProvider: this.options.getKeyBinding,\n classNames: action.class,\n anchorAlignmentProvider: this.options.anchorAlignmentProvider,\n menuAsChild: !!this.options.renderDropdownAsChildElement,\n skipTelemetry: this.options.skipTelemetry,\n hoverDelegate: this.options.hoverDelegate\n });\n result.setActionContext(this.actionBar.context);\n this.submenuActionViewItems.push(result);\n this.disposables.add(this._onDidChangeDropdownVisibility.add(result.onDidChangeVisibility));\n return result;\n }\n return undefined;\n }\n }));\n }\n set actionRunner(actionRunner) {\n this.actionBar.actionRunner = actionRunner;\n }\n get actionRunner() {\n return this.actionBar.actionRunner;\n }\n getElement() {\n return this.element;\n }\n getItemAction(indexOrElement) {\n return this.actionBar.getAction(indexOrElement);\n }\n setActions(primaryActions, secondaryActions) {\n this.clear();\n const primaryActionsToSet = primaryActions ? primaryActions.slice(0) : [];\n // Inject additional action to open secondary actions if present\n this.hasSecondaryActions = !!(secondaryActions && secondaryActions.length > 0);\n if (this.hasSecondaryActions && secondaryActions) {\n this.toggleMenuAction.menuActions = secondaryActions.slice(0);\n primaryActionsToSet.push(this.toggleMenuAction);\n }\n primaryActionsToSet.forEach(action => {\n this.actionBar.push(action, { icon: true, label: false, keybinding: this.getKeybindingLabel(action) });\n });\n }\n getKeybindingLabel(action) {\n var _a, _b, _c;\n const key = this.lookupKeybindings ? (_b = (_a = this.options).getKeyBinding) === null || _b === void 0 ? void 0 : _b.call(_a, action) : undefined;\n return (_c = key === null || key === void 0 ? void 0 : key.getLabel()) !== null && _c !== void 0 ? _c : undefined;\n }\n clear() {\n this.submenuActionViewItems = [];\n this.disposables.clear();\n this.actionBar.clear();\n }\n dispose() {\n this.clear();\n this.disposables.dispose();\n super.dispose();\n }\n}\nexport class ToggleMenuAction extends Action {\n constructor(toggleDropdownMenu, title) {\n title = title || nls.localize('moreActions', \"More Actions...\");\n super(ToggleMenuAction.ID, title, undefined, true);\n this._menuActions = [];\n this.toggleDropdownMenu = toggleDropdownMenu;\n }\n async run() {\n this.toggleDropdownMenu();\n }\n get menuActions() {\n return this._menuActions;\n }\n set menuActions(actions) {\n this._menuActions = actions;\n }\n}\nToggleMenuAction.ID = 'toolbar.toggle.more';\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { $, append, clearNode, createStyleSheet, getWindow, h, hasParentWithClass, asCssValueWithDefault, isKeyboardEvent } from '../../dom.js';\nimport { DomEmitter } from '../../event.js';\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\nimport { ActionBar } from '../actionbar/actionbar.js';\nimport { FindInput } from '../findinput/findInput.js';\nimport { unthemedInboxStyles } from '../inputbox/inputBox.js';\nimport { ElementsDragAndDropData } from '../list/listView.js';\nimport { isActionItem, isButton, isInputElement, isMonacoCustomToggle, isMonacoEditor, isStickyScrollContainer, isStickyScrollElement, List, MouseController } from '../list/listWidget.js';\nimport { Toggle, unthemedToggleStyles } from '../toggle/toggle.js';\nimport { getVisibleState, isFilterResult } from './indexTreeModel.js';\nimport { TreeMouseEventTarget } from './tree.js';\nimport { Action } from '../../../common/actions.js';\nimport { distinct, equals, range } from '../../../common/arrays.js';\nimport { Delayer, disposableTimeout, timeout } from '../../../common/async.js';\nimport { Codicon } from '../../../common/codicons.js';\nimport { ThemeIcon } from '../../../common/themables.js';\nimport { SetMap } from '../../../common/map.js';\nimport { Emitter, Event, EventBufferer, Relay } from '../../../common/event.js';\nimport { fuzzyScore, FuzzyScore } from '../../../common/filters.js';\nimport { Disposable, DisposableStore, dispose, toDisposable } from '../../../common/lifecycle.js';\nimport { clamp } from '../../../common/numbers.js';\nimport { isNumber } from '../../../common/types.js';\nimport './media/tree.css';\nimport { localize } from '../../../../nls.js';\nimport { createInstantHoverDelegate, getDefaultHoverDelegate } from '../hover/hoverDelegateFactory.js';\nimport { autorun, constObservable } from '../../../common/observable.js';\nclass TreeElementsDragAndDropData extends ElementsDragAndDropData {\n constructor(data) {\n super(data.elements.map(node => node.element));\n this.data = data;\n }\n}\nfunction asTreeDragAndDropData(data) {\n if (data instanceof ElementsDragAndDropData) {\n return new TreeElementsDragAndDropData(data);\n }\n return data;\n}\nclass TreeNodeListDragAndDrop {\n constructor(modelProvider, dnd) {\n this.modelProvider = modelProvider;\n this.dnd = dnd;\n this.autoExpandDisposable = Disposable.None;\n this.disposables = new DisposableStore();\n }\n getDragURI(node) {\n return this.dnd.getDragURI(node.element);\n }\n getDragLabel(nodes, originalEvent) {\n if (this.dnd.getDragLabel) {\n return this.dnd.getDragLabel(nodes.map(node => node.element), originalEvent);\n }\n return undefined;\n }\n onDragStart(data, originalEvent) {\n var _a, _b;\n (_b = (_a = this.dnd).onDragStart) === null || _b === void 0 ? void 0 : _b.call(_a, asTreeDragAndDropData(data), originalEvent);\n }\n onDragOver(data, targetNode, targetIndex, targetSector, originalEvent, raw = true) {\n const result = this.dnd.onDragOver(asTreeDragAndDropData(data), targetNode && targetNode.element, targetIndex, targetSector, originalEvent);\n const didChangeAutoExpandNode = this.autoExpandNode !== targetNode;\n if (didChangeAutoExpandNode) {\n this.autoExpandDisposable.dispose();\n this.autoExpandNode = targetNode;\n }\n if (typeof targetNode === 'undefined') {\n return result;\n }\n if (didChangeAutoExpandNode && typeof result !== 'boolean' && result.autoExpand) {\n this.autoExpandDisposable = disposableTimeout(() => {\n const model = this.modelProvider();\n const ref = model.getNodeLocation(targetNode);\n if (model.isCollapsed(ref)) {\n model.setCollapsed(ref, false);\n }\n this.autoExpandNode = undefined;\n }, 500, this.disposables);\n }\n if (typeof result === 'boolean' || !result.accept || typeof result.bubble === 'undefined' || result.feedback) {\n if (!raw) {\n const accept = typeof result === 'boolean' ? result : result.accept;\n const effect = typeof result === 'boolean' ? undefined : result.effect;\n return { accept, effect, feedback: [targetIndex] };\n }\n return result;\n }\n if (result.bubble === 1 /* TreeDragOverBubble.Up */) {\n const model = this.modelProvider();\n const ref = model.getNodeLocation(targetNode);\n const parentRef = model.getParentNodeLocation(ref);\n const parentNode = model.getNode(parentRef);\n const parentIndex = parentRef && model.getListIndex(parentRef);\n return this.onDragOver(data, parentNode, parentIndex, targetSector, originalEvent, false);\n }\n const model = this.modelProvider();\n const ref = model.getNodeLocation(targetNode);\n const start = model.getListIndex(ref);\n const length = model.getListRenderCount(ref);\n return { ...result, feedback: range(start, start + length) };\n }\n drop(data, targetNode, targetIndex, targetSector, originalEvent) {\n this.autoExpandDisposable.dispose();\n this.autoExpandNode = undefined;\n this.dnd.drop(asTreeDragAndDropData(data), targetNode && targetNode.element, targetIndex, targetSector, originalEvent);\n }\n onDragEnd(originalEvent) {\n var _a, _b;\n (_b = (_a = this.dnd).onDragEnd) === null || _b === void 0 ? void 0 : _b.call(_a, originalEvent);\n }\n dispose() {\n this.disposables.dispose();\n this.dnd.dispose();\n }\n}\nfunction asListOptions(modelProvider, options) {\n return options && {\n ...options,\n identityProvider: options.identityProvider && {\n getId(el) {\n return options.identityProvider.getId(el.element);\n }\n },\n dnd: options.dnd && new TreeNodeListDragAndDrop(modelProvider, options.dnd),\n multipleSelectionController: options.multipleSelectionController && {\n isSelectionSingleChangeEvent(e) {\n return options.multipleSelectionController.isSelectionSingleChangeEvent({ ...e, element: e.element });\n },\n isSelectionRangeChangeEvent(e) {\n return options.multipleSelectionController.isSelectionRangeChangeEvent({ ...e, element: e.element });\n }\n },\n accessibilityProvider: options.accessibilityProvider && {\n ...options.accessibilityProvider,\n getSetSize(node) {\n const model = modelProvider();\n const ref = model.getNodeLocation(node);\n const parentRef = model.getParentNodeLocation(ref);\n const parentNode = model.getNode(parentRef);\n return parentNode.visibleChildrenCount;\n },\n getPosInSet(node) {\n return node.visibleChildIndex + 1;\n },\n isChecked: options.accessibilityProvider && options.accessibilityProvider.isChecked ? (node) => {\n return options.accessibilityProvider.isChecked(node.element);\n } : undefined,\n getRole: options.accessibilityProvider && options.accessibilityProvider.getRole ? (node) => {\n return options.accessibilityProvider.getRole(node.element);\n } : () => 'treeitem',\n getAriaLabel(e) {\n return options.accessibilityProvider.getAriaLabel(e.element);\n },\n getWidgetAriaLabel() {\n return options.accessibilityProvider.getWidgetAriaLabel();\n },\n getWidgetRole: options.accessibilityProvider && options.accessibilityProvider.getWidgetRole ? () => options.accessibilityProvider.getWidgetRole() : () => 'tree',\n getAriaLevel: options.accessibilityProvider && options.accessibilityProvider.getAriaLevel ? (node) => options.accessibilityProvider.getAriaLevel(node.element) : (node) => {\n return node.depth;\n },\n getActiveDescendantId: options.accessibilityProvider.getActiveDescendantId && (node => {\n return options.accessibilityProvider.getActiveDescendantId(node.element);\n })\n },\n keyboardNavigationLabelProvider: options.keyboardNavigationLabelProvider && {\n ...options.keyboardNavigationLabelProvider,\n getKeyboardNavigationLabel(node) {\n return options.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(node.element);\n }\n }\n };\n}\nexport class ComposedTreeDelegate {\n constructor(delegate) {\n this.delegate = delegate;\n }\n getHeight(element) {\n return this.delegate.getHeight(element.element);\n }\n getTemplateId(element) {\n return this.delegate.getTemplateId(element.element);\n }\n hasDynamicHeight(element) {\n return !!this.delegate.hasDynamicHeight && this.delegate.hasDynamicHeight(element.element);\n }\n setDynamicHeight(element, height) {\n var _a, _b;\n (_b = (_a = this.delegate).setDynamicHeight) === null || _b === void 0 ? void 0 : _b.call(_a, element.element, height);\n }\n}\nexport var RenderIndentGuides;\n(function (RenderIndentGuides) {\n RenderIndentGuides[\"None\"] = \"none\";\n RenderIndentGuides[\"OnHover\"] = \"onHover\";\n RenderIndentGuides[\"Always\"] = \"always\";\n})(RenderIndentGuides || (RenderIndentGuides = {}));\nclass EventCollection {\n get elements() {\n return this._elements;\n }\n constructor(onDidChange, _elements = []) {\n this._elements = _elements;\n this.disposables = new DisposableStore();\n this.onDidChange = Event.forEach(onDidChange, elements => this._elements = elements, this.disposables);\n }\n dispose() {\n this.disposables.dispose();\n }\n}\nexport class TreeRenderer {\n constructor(renderer, modelProvider, onDidChangeCollapseState, activeNodes, renderedIndentGuides, options = {}) {\n var _a;\n this.renderer = renderer;\n this.modelProvider = modelProvider;\n this.activeNodes = activeNodes;\n this.renderedIndentGuides = renderedIndentGuides;\n this.renderedElements = new Map();\n this.renderedNodes = new Map();\n this.indent = TreeRenderer.DefaultIndent;\n this.hideTwistiesOfChildlessElements = false;\n this.shouldRenderIndentGuides = false;\n this.activeIndentNodes = new Set();\n this.indentGuidesDisposable = Disposable.None;\n this.disposables = new DisposableStore();\n this.templateId = renderer.templateId;\n this.updateOptions(options);\n Event.map(onDidChangeCollapseState, e => e.node)(this.onDidChangeNodeTwistieState, this, this.disposables);\n (_a = renderer.onDidChangeTwistieState) === null || _a === void 0 ? void 0 : _a.call(renderer, this.onDidChangeTwistieState, this, this.disposables);\n }\n updateOptions(options = {}) {\n if (typeof options.indent !== 'undefined') {\n const indent = clamp(options.indent, 0, 40);\n if (indent !== this.indent) {\n this.indent = indent;\n for (const [node, templateData] of this.renderedNodes) {\n this.renderTreeElement(node, templateData);\n }\n }\n }\n if (typeof options.renderIndentGuides !== 'undefined') {\n const shouldRenderIndentGuides = options.renderIndentGuides !== RenderIndentGuides.None;\n if (shouldRenderIndentGuides !== this.shouldRenderIndentGuides) {\n this.shouldRenderIndentGuides = shouldRenderIndentGuides;\n for (const [node, templateData] of this.renderedNodes) {\n this._renderIndentGuides(node, templateData);\n }\n this.indentGuidesDisposable.dispose();\n if (shouldRenderIndentGuides) {\n const disposables = new DisposableStore();\n this.activeNodes.onDidChange(this._onDidChangeActiveNodes, this, disposables);\n this.indentGuidesDisposable = disposables;\n this._onDidChangeActiveNodes(this.activeNodes.elements);\n }\n }\n }\n if (typeof options.hideTwistiesOfChildlessElements !== 'undefined') {\n this.hideTwistiesOfChildlessElements = options.hideTwistiesOfChildlessElements;\n }\n }\n renderTemplate(container) {\n const el = append(container, $('.monaco-tl-row'));\n const indent = append(el, $('.monaco-tl-indent'));\n const twistie = append(el, $('.monaco-tl-twistie'));\n const contents = append(el, $('.monaco-tl-contents'));\n const templateData = this.renderer.renderTemplate(contents);\n return { container, indent, twistie, indentGuidesDisposable: Disposable.None, templateData };\n }\n renderElement(node, index, templateData, height) {\n this.renderedNodes.set(node, templateData);\n this.renderedElements.set(node.element, node);\n this.renderTreeElement(node, templateData);\n this.renderer.renderElement(node, index, templateData.templateData, height);\n }\n disposeElement(node, index, templateData, height) {\n var _a, _b;\n templateData.indentGuidesDisposable.dispose();\n (_b = (_a = this.renderer).disposeElement) === null || _b === void 0 ? void 0 : _b.call(_a, node, index, templateData.templateData, height);\n if (typeof height === 'number') {\n this.renderedNodes.delete(node);\n this.renderedElements.delete(node.element);\n }\n }\n disposeTemplate(templateData) {\n this.renderer.disposeTemplate(templateData.templateData);\n }\n onDidChangeTwistieState(element) {\n const node = this.renderedElements.get(element);\n if (!node) {\n return;\n }\n this.onDidChangeNodeTwistieState(node);\n }\n onDidChangeNodeTwistieState(node) {\n const templateData = this.renderedNodes.get(node);\n if (!templateData) {\n return;\n }\n this._onDidChangeActiveNodes(this.activeNodes.elements);\n this.renderTreeElement(node, templateData);\n }\n renderTreeElement(node, templateData) {\n const indent = TreeRenderer.DefaultIndent + (node.depth - 1) * this.indent;\n templateData.twistie.style.paddingLeft = `${indent}px`;\n templateData.indent.style.width = `${indent + this.indent - 16}px`;\n if (node.collapsible) {\n templateData.container.setAttribute('aria-expanded', String(!node.collapsed));\n }\n else {\n templateData.container.removeAttribute('aria-expanded');\n }\n templateData.twistie.classList.remove(...ThemeIcon.asClassNameArray(Codicon.treeItemExpanded));\n let twistieRendered = false;\n if (this.renderer.renderTwistie) {\n twistieRendered = this.renderer.renderTwistie(node.element, templateData.twistie);\n }\n if (node.collapsible && (!this.hideTwistiesOfChildlessElements || node.visibleChildrenCount > 0)) {\n if (!twistieRendered) {\n templateData.twistie.classList.add(...ThemeIcon.asClassNameArray(Codicon.treeItemExpanded));\n }\n templateData.twistie.classList.add('collapsible');\n templateData.twistie.classList.toggle('collapsed', node.collapsed);\n }\n else {\n templateData.twistie.classList.remove('collapsible', 'collapsed');\n }\n this._renderIndentGuides(node, templateData);\n }\n _renderIndentGuides(node, templateData) {\n clearNode(templateData.indent);\n templateData.indentGuidesDisposable.dispose();\n if (!this.shouldRenderIndentGuides) {\n return;\n }\n const disposableStore = new DisposableStore();\n const model = this.modelProvider();\n while (true) {\n const ref = model.getNodeLocation(node);\n const parentRef = model.getParentNodeLocation(ref);\n if (!parentRef) {\n break;\n }\n const parent = model.getNode(parentRef);\n const guide = $('.indent-guide', { style: `width: ${this.indent}px` });\n if (this.activeIndentNodes.has(parent)) {\n guide.classList.add('active');\n }\n if (templateData.indent.childElementCount === 0) {\n templateData.indent.appendChild(guide);\n }\n else {\n templateData.indent.insertBefore(guide, templateData.indent.firstElementChild);\n }\n this.renderedIndentGuides.add(parent, guide);\n disposableStore.add(toDisposable(() => this.renderedIndentGuides.delete(parent, guide)));\n node = parent;\n }\n templateData.indentGuidesDisposable = disposableStore;\n }\n _onDidChangeActiveNodes(nodes) {\n if (!this.shouldRenderIndentGuides) {\n return;\n }\n const set = new Set();\n const model = this.modelProvider();\n nodes.forEach(node => {\n const ref = model.getNodeLocation(node);\n try {\n const parentRef = model.getParentNodeLocation(ref);\n if (node.collapsible && node.children.length > 0 && !node.collapsed) {\n set.add(node);\n }\n else if (parentRef) {\n set.add(model.getNode(parentRef));\n }\n }\n catch (_a) {\n // noop\n }\n });\n this.activeIndentNodes.forEach(node => {\n if (!set.has(node)) {\n this.renderedIndentGuides.forEach(node, line => line.classList.remove('active'));\n }\n });\n set.forEach(node => {\n if (!this.activeIndentNodes.has(node)) {\n this.renderedIndentGuides.forEach(node, line => line.classList.add('active'));\n }\n });\n this.activeIndentNodes = set;\n }\n dispose() {\n this.renderedNodes.clear();\n this.renderedElements.clear();\n this.indentGuidesDisposable.dispose();\n dispose(this.disposables);\n }\n}\nTreeRenderer.DefaultIndent = 8;\nclass FindFilter {\n get totalCount() { return this._totalCount; }\n get matchCount() { return this._matchCount; }\n constructor(tree, keyboardNavigationLabelProvider, _filter) {\n this.tree = tree;\n this.keyboardNavigationLabelProvider = keyboardNavigationLabelProvider;\n this._filter = _filter;\n this._totalCount = 0;\n this._matchCount = 0;\n this._pattern = '';\n this._lowercasePattern = '';\n this.disposables = new DisposableStore();\n tree.onWillRefilter(this.reset, this, this.disposables);\n }\n filter(element, parentVisibility) {\n let visibility = 1 /* TreeVisibility.Visible */;\n if (this._filter) {\n const result = this._filter.filter(element, parentVisibility);\n if (typeof result === 'boolean') {\n visibility = result ? 1 /* TreeVisibility.Visible */ : 0 /* TreeVisibility.Hidden */;\n }\n else if (isFilterResult(result)) {\n visibility = getVisibleState(result.visibility);\n }\n else {\n visibility = result;\n }\n if (visibility === 0 /* TreeVisibility.Hidden */) {\n return false;\n }\n }\n this._totalCount++;\n if (!this._pattern) {\n this._matchCount++;\n return { data: FuzzyScore.Default, visibility };\n }\n const label = this.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(element);\n const labels = Array.isArray(label) ? label : [label];\n for (const l of labels) {\n const labelStr = l && l.toString();\n if (typeof labelStr === 'undefined') {\n return { data: FuzzyScore.Default, visibility };\n }\n let score;\n if (this.tree.findMatchType === TreeFindMatchType.Contiguous) {\n const index = labelStr.toLowerCase().indexOf(this._lowercasePattern);\n if (index > -1) {\n score = [Number.MAX_SAFE_INTEGER, 0];\n for (let i = this._lowercasePattern.length; i > 0; i--) {\n score.push(index + i - 1);\n }\n }\n }\n else {\n score = fuzzyScore(this._pattern, this._lowercasePattern, 0, labelStr, labelStr.toLowerCase(), 0, { firstMatchCanBeWeak: true, boostFullMatch: true });\n }\n if (score) {\n this._matchCount++;\n return labels.length === 1 ?\n { data: score, visibility } :\n { data: { label: labelStr, score: score }, visibility };\n }\n }\n if (this.tree.findMode === TreeFindMode.Filter) {\n if (typeof this.tree.options.defaultFindVisibility === 'number') {\n return this.tree.options.defaultFindVisibility;\n }\n else if (this.tree.options.defaultFindVisibility) {\n return this.tree.options.defaultFindVisibility(element);\n }\n else {\n return 2 /* TreeVisibility.Recurse */;\n }\n }\n else {\n return { data: FuzzyScore.Default, visibility };\n }\n }\n reset() {\n this._totalCount = 0;\n this._matchCount = 0;\n }\n dispose() {\n dispose(this.disposables);\n }\n}\nexport class ModeToggle extends Toggle {\n constructor(opts) {\n var _a, _b;\n super({\n icon: Codicon.listFilter,\n title: localize('filter', \"Filter\"),\n isChecked: (_a = opts.isChecked) !== null && _a !== void 0 ? _a : false,\n hoverDelegate: (_b = opts.hoverDelegate) !== null && _b !== void 0 ? _b : getDefaultHoverDelegate('element'),\n inputActiveOptionBorder: opts.inputActiveOptionBorder,\n inputActiveOptionForeground: opts.inputActiveOptionForeground,\n inputActiveOptionBackground: opts.inputActiveOptionBackground\n });\n }\n}\nexport class FuzzyToggle extends Toggle {\n constructor(opts) {\n var _a, _b;\n super({\n icon: Codicon.searchFuzzy,\n title: localize('fuzzySearch', \"Fuzzy Match\"),\n isChecked: (_a = opts.isChecked) !== null && _a !== void 0 ? _a : false,\n hoverDelegate: (_b = opts.hoverDelegate) !== null && _b !== void 0 ? _b : getDefaultHoverDelegate('element'),\n inputActiveOptionBorder: opts.inputActiveOptionBorder,\n inputActiveOptionForeground: opts.inputActiveOptionForeground,\n inputActiveOptionBackground: opts.inputActiveOptionBackground\n });\n }\n}\nconst unthemedFindWidgetStyles = {\n inputBoxStyles: unthemedInboxStyles,\n toggleStyles: unthemedToggleStyles,\n listFilterWidgetBackground: undefined,\n listFilterWidgetNoMatchesOutline: undefined,\n listFilterWidgetOutline: undefined,\n listFilterWidgetShadow: undefined\n};\nexport var TreeFindMode;\n(function (TreeFindMode) {\n TreeFindMode[TreeFindMode[\"Highlight\"] = 0] = \"Highlight\";\n TreeFindMode[TreeFindMode[\"Filter\"] = 1] = \"Filter\";\n})(TreeFindMode || (TreeFindMode = {}));\nexport var TreeFindMatchType;\n(function (TreeFindMatchType) {\n TreeFindMatchType[TreeFindMatchType[\"Fuzzy\"] = 0] = \"Fuzzy\";\n TreeFindMatchType[TreeFindMatchType[\"Contiguous\"] = 1] = \"Contiguous\";\n})(TreeFindMatchType || (TreeFindMatchType = {}));\nclass FindWidget extends Disposable {\n set mode(mode) {\n this.modeToggle.checked = mode === TreeFindMode.Filter;\n this.findInput.inputBox.setPlaceHolder(mode === TreeFindMode.Filter ? localize('type to filter', \"Type to filter\") : localize('type to search', \"Type to search\"));\n }\n set matchType(matchType) {\n this.matchTypeToggle.checked = matchType === TreeFindMatchType.Fuzzy;\n }\n constructor(container, tree, contextViewProvider, mode, matchType, options) {\n var _a;\n super();\n this.tree = tree;\n this.elements = h('.monaco-tree-type-filter', [\n h('.monaco-tree-type-filter-grab.codicon.codicon-debug-gripper@grab', { tabIndex: 0 }),\n h('.monaco-tree-type-filter-input@findInput'),\n h('.monaco-tree-type-filter-actionbar@actionbar'),\n ]);\n this.width = 0;\n this.right = 0;\n this.top = 0;\n this._onDidDisable = new Emitter();\n container.appendChild(this.elements.root);\n this._register(toDisposable(() => container.removeChild(this.elements.root)));\n const styles = (_a = options === null || options === void 0 ? void 0 : options.styles) !== null && _a !== void 0 ? _a : unthemedFindWidgetStyles;\n if (styles.listFilterWidgetBackground) {\n this.elements.root.style.backgroundColor = styles.listFilterWidgetBackground;\n }\n if (styles.listFilterWidgetShadow) {\n this.elements.root.style.boxShadow = `0 0 8px 2px ${styles.listFilterWidgetShadow}`;\n }\n const toggleHoverDelegate = this._register(createInstantHoverDelegate());\n this.modeToggle = this._register(new ModeToggle({ ...styles.toggleStyles, isChecked: mode === TreeFindMode.Filter, hoverDelegate: toggleHoverDelegate }));\n this.matchTypeToggle = this._register(new FuzzyToggle({ ...styles.toggleStyles, isChecked: matchType === TreeFindMatchType.Fuzzy, hoverDelegate: toggleHoverDelegate }));\n this.onDidChangeMode = Event.map(this.modeToggle.onChange, () => this.modeToggle.checked ? TreeFindMode.Filter : TreeFindMode.Highlight, this._store);\n this.onDidChangeMatchType = Event.map(this.matchTypeToggle.onChange, () => this.matchTypeToggle.checked ? TreeFindMatchType.Fuzzy : TreeFindMatchType.Contiguous, this._store);\n this.findInput = this._register(new FindInput(this.elements.findInput, contextViewProvider, {\n label: localize('type to search', \"Type to search\"),\n additionalToggles: [this.modeToggle, this.matchTypeToggle],\n showCommonFindToggles: false,\n inputBoxStyles: styles.inputBoxStyles,\n toggleStyles: styles.toggleStyles,\n history: options === null || options === void 0 ? void 0 : options.history\n }));\n this.actionbar = this._register(new ActionBar(this.elements.actionbar));\n this.mode = mode;\n const emitter = this._register(new DomEmitter(this.findInput.inputBox.inputElement, 'keydown'));\n const onKeyDown = Event.chain(emitter.event, $ => $.map(e => new StandardKeyboardEvent(e)));\n this._register(onKeyDown((e) => {\n // Using equals() so we reserve modified keys for future use\n if (e.equals(3 /* KeyCode.Enter */)) {\n // This is the only keyboard way to return to the tree from a history item that isn't the last one\n e.preventDefault();\n e.stopPropagation();\n this.findInput.inputBox.addToHistory();\n this.tree.domFocus();\n return;\n }\n if (e.equals(18 /* KeyCode.DownArrow */)) {\n e.preventDefault();\n e.stopPropagation();\n if (this.findInput.inputBox.isAtLastInHistory() || this.findInput.inputBox.isNowhereInHistory()) {\n // Retain original pre-history DownArrow behavior\n this.findInput.inputBox.addToHistory();\n this.tree.domFocus();\n }\n else {\n // Downward through history\n this.findInput.inputBox.showNextValue();\n }\n return;\n }\n if (e.equals(16 /* KeyCode.UpArrow */)) {\n e.preventDefault();\n e.stopPropagation();\n // Upward through history\n this.findInput.inputBox.showPreviousValue();\n return;\n }\n }));\n const closeAction = this._register(new Action('close', localize('close', \"Close\"), 'codicon codicon-close', true, () => this.dispose()));\n this.actionbar.push(closeAction, { icon: true, label: false });\n const onGrabMouseDown = this._register(new DomEmitter(this.elements.grab, 'mousedown'));\n this._register(onGrabMouseDown.event(e => {\n const disposables = new DisposableStore();\n const onWindowMouseMove = disposables.add(new DomEmitter(getWindow(e), 'mousemove'));\n const onWindowMouseUp = disposables.add(new DomEmitter(getWindow(e), 'mouseup'));\n const startRight = this.right;\n const startX = e.pageX;\n const startTop = this.top;\n const startY = e.pageY;\n this.elements.grab.classList.add('grabbing');\n const transition = this.elements.root.style.transition;\n this.elements.root.style.transition = 'unset';\n const update = (e) => {\n const deltaX = e.pageX - startX;\n this.right = startRight - deltaX;\n const deltaY = e.pageY - startY;\n this.top = startTop + deltaY;\n this.layout();\n };\n disposables.add(onWindowMouseMove.event(update));\n disposables.add(onWindowMouseUp.event(e => {\n update(e);\n this.elements.grab.classList.remove('grabbing');\n this.elements.root.style.transition = transition;\n disposables.dispose();\n }));\n }));\n const onGrabKeyDown = Event.chain(this._register(new DomEmitter(this.elements.grab, 'keydown')).event, $ => $.map(e => new StandardKeyboardEvent(e)));\n this._register(onGrabKeyDown((e) => {\n let right;\n let top;\n if (e.keyCode === 15 /* KeyCode.LeftArrow */) {\n right = Number.POSITIVE_INFINITY;\n }\n else if (e.keyCode === 17 /* KeyCode.RightArrow */) {\n right = 0;\n }\n else if (e.keyCode === 10 /* KeyCode.Space */) {\n right = this.right === 0 ? Number.POSITIVE_INFINITY : 0;\n }\n if (e.keyCode === 16 /* KeyCode.UpArrow */) {\n top = 0;\n }\n else if (e.keyCode === 18 /* KeyCode.DownArrow */) {\n top = Number.POSITIVE_INFINITY;\n }\n if (right !== undefined) {\n e.preventDefault();\n e.stopPropagation();\n this.right = right;\n this.layout();\n }\n if (top !== undefined) {\n e.preventDefault();\n e.stopPropagation();\n this.top = top;\n const transition = this.elements.root.style.transition;\n this.elements.root.style.transition = 'unset';\n this.layout();\n setTimeout(() => {\n this.elements.root.style.transition = transition;\n }, 0);\n }\n }));\n this.onDidChangeValue = this.findInput.onDidChange;\n }\n layout(width = this.width) {\n this.width = width;\n this.right = clamp(this.right, 0, Math.max(0, width - 212));\n this.elements.root.style.right = `${this.right}px`;\n this.top = clamp(this.top, 0, 24);\n this.elements.root.style.top = `${this.top}px`;\n }\n showMessage(message) {\n this.findInput.showMessage(message);\n }\n clearMessage() {\n this.findInput.clearMessage();\n }\n async dispose() {\n this._onDidDisable.fire();\n this.elements.root.classList.add('disabled');\n await timeout(300);\n super.dispose();\n }\n}\nclass FindController {\n get pattern() { return this._pattern; }\n get mode() { return this._mode; }\n set mode(mode) {\n if (mode === this._mode) {\n return;\n }\n this._mode = mode;\n if (this.widget) {\n this.widget.mode = this._mode;\n }\n this.tree.refilter();\n this.render();\n this._onDidChangeMode.fire(mode);\n }\n get matchType() { return this._matchType; }\n set matchType(matchType) {\n if (matchType === this._matchType) {\n return;\n }\n this._matchType = matchType;\n if (this.widget) {\n this.widget.matchType = this._matchType;\n }\n this.tree.refilter();\n this.render();\n this._onDidChangeMatchType.fire(matchType);\n }\n constructor(tree, model, view, filter, contextViewProvider, options = {}) {\n var _a, _b;\n this.tree = tree;\n this.view = view;\n this.filter = filter;\n this.contextViewProvider = contextViewProvider;\n this.options = options;\n this._pattern = '';\n this.width = 0;\n this._onDidChangeMode = new Emitter();\n this.onDidChangeMode = this._onDidChangeMode.event;\n this._onDidChangeMatchType = new Emitter();\n this.onDidChangeMatchType = this._onDidChangeMatchType.event;\n this._onDidChangePattern = new Emitter();\n this._onDidChangeOpenState = new Emitter();\n this.onDidChangeOpenState = this._onDidChangeOpenState.event;\n this.enabledDisposables = new DisposableStore();\n this.disposables = new DisposableStore();\n this._mode = (_a = tree.options.defaultFindMode) !== null && _a !== void 0 ? _a : TreeFindMode.Highlight;\n this._matchType = (_b = tree.options.defaultFindMatchType) !== null && _b !== void 0 ? _b : TreeFindMatchType.Fuzzy;\n model.onDidSplice(this.onDidSpliceModel, this, this.disposables);\n }\n updateOptions(optionsUpdate = {}) {\n if (optionsUpdate.defaultFindMode !== undefined) {\n this.mode = optionsUpdate.defaultFindMode;\n }\n if (optionsUpdate.defaultFindMatchType !== undefined) {\n this.matchType = optionsUpdate.defaultFindMatchType;\n }\n }\n onDidSpliceModel() {\n if (!this.widget || this.pattern.length === 0) {\n return;\n }\n this.tree.refilter();\n this.render();\n }\n render() {\n var _a, _b, _c, _d;\n const noMatches = this.filter.totalCount > 0 && this.filter.matchCount === 0;\n if (this.pattern && noMatches) {\n if ((_a = this.tree.options.showNotFoundMessage) !== null && _a !== void 0 ? _a : true) {\n (_b = this.widget) === null || _b === void 0 ? void 0 : _b.showMessage({ type: 2 /* MessageType.WARNING */, content: localize('not found', \"No elements found.\") });\n }\n else {\n (_c = this.widget) === null || _c === void 0 ? void 0 : _c.showMessage({ type: 2 /* MessageType.WARNING */ });\n }\n }\n else {\n (_d = this.widget) === null || _d === void 0 ? void 0 : _d.clearMessage();\n }\n }\n shouldAllowFocus(node) {\n if (!this.widget || !this.pattern) {\n return true;\n }\n if (this.filter.totalCount > 0 && this.filter.matchCount <= 1) {\n return true;\n }\n return !FuzzyScore.isDefault(node.filterData);\n }\n layout(width) {\n var _a;\n this.width = width;\n (_a = this.widget) === null || _a === void 0 ? void 0 : _a.layout(width);\n }\n dispose() {\n this._history = undefined;\n this._onDidChangePattern.dispose();\n this.enabledDisposables.dispose();\n this.disposables.dispose();\n }\n}\nfunction stickyScrollNodeStateEquals(node1, node2) {\n return node1.position === node2.position && stickyScrollNodeEquals(node1, node2);\n}\nfunction stickyScrollNodeEquals(node1, node2) {\n return node1.node.element === node2.node.element &&\n node1.startIndex === node2.startIndex &&\n node1.height === node2.height &&\n node1.endIndex === node2.endIndex;\n}\nclass StickyScrollState {\n constructor(stickyNodes = []) {\n this.stickyNodes = stickyNodes;\n }\n get count() { return this.stickyNodes.length; }\n equal(state) {\n return equals(this.stickyNodes, state.stickyNodes, stickyScrollNodeStateEquals);\n }\n lastNodePartiallyVisible() {\n if (this.count === 0) {\n return false;\n }\n const lastStickyNode = this.stickyNodes[this.count - 1];\n if (this.count === 1) {\n return lastStickyNode.position !== 0;\n }\n const secondLastStickyNode = this.stickyNodes[this.count - 2];\n return secondLastStickyNode.position + secondLastStickyNode.height !== lastStickyNode.position;\n }\n animationStateChanged(previousState) {\n if (!equals(this.stickyNodes, previousState.stickyNodes, stickyScrollNodeEquals)) {\n return false;\n }\n if (this.count === 0) {\n return false;\n }\n const lastStickyNode = this.stickyNodes[this.count - 1];\n const previousLastStickyNode = previousState.stickyNodes[previousState.count - 1];\n return lastStickyNode.position !== previousLastStickyNode.position;\n }\n}\nclass DefaultStickyScrollDelegate {\n constrainStickyScrollNodes(stickyNodes, stickyScrollMaxItemCount, maxWidgetHeight) {\n for (let i = 0; i < stickyNodes.length; i++) {\n const stickyNode = stickyNodes[i];\n const stickyNodeBottom = stickyNode.position + stickyNode.height;\n if (stickyNodeBottom > maxWidgetHeight || i >= stickyScrollMaxItemCount) {\n return stickyNodes.slice(0, i);\n }\n }\n return stickyNodes;\n }\n}\nclass StickyScrollController extends Disposable {\n constructor(tree, model, view, renderers, treeDelegate, options = {}) {\n var _a;\n super();\n this.tree = tree;\n this.model = model;\n this.view = view;\n this.treeDelegate = treeDelegate;\n this.maxWidgetViewRatio = 0.4;\n const stickyScrollOptions = this.validateStickySettings(options);\n this.stickyScrollMaxItemCount = stickyScrollOptions.stickyScrollMaxItemCount;\n this.stickyScrollDelegate = (_a = options.stickyScrollDelegate) !== null && _a !== void 0 ? _a : new DefaultStickyScrollDelegate();\n this._widget = this._register(new StickyScrollWidget(view.getScrollableElement(), view, tree, renderers, treeDelegate, options.accessibilityProvider));\n this.onDidChangeHasFocus = this._widget.onDidChangeHasFocus;\n this.onContextMenu = this._widget.onContextMenu;\n this._register(view.onDidScroll(() => this.update()));\n this._register(view.onDidChangeContentHeight(() => this.update()));\n this._register(tree.onDidChangeCollapseState(() => this.update()));\n this.update();\n }\n get height() {\n return this._widget.height;\n }\n getNodeAtHeight(height) {\n let index;\n if (height === 0) {\n index = this.view.firstVisibleIndex;\n }\n else {\n index = this.view.indexAt(height + this.view.scrollTop);\n }\n if (index < 0 || index >= this.view.length) {\n return undefined;\n }\n return this.view.element(index);\n }\n update() {\n const firstVisibleNode = this.getNodeAtHeight(0);\n // Don't render anything if there are no elements\n if (!firstVisibleNode || this.tree.scrollTop === 0) {\n this._widget.setState(undefined);\n return;\n }\n const stickyState = this.findStickyState(firstVisibleNode);\n this._widget.setState(stickyState);\n }\n findStickyState(firstVisibleNode) {\n const stickyNodes = [];\n let firstVisibleNodeUnderWidget = firstVisibleNode;\n let stickyNodesHeight = 0;\n let nextStickyNode = this.getNextStickyNode(firstVisibleNodeUnderWidget, undefined, stickyNodesHeight);\n while (nextStickyNode) {\n stickyNodes.push(nextStickyNode);\n stickyNodesHeight += nextStickyNode.height;\n if (stickyNodes.length <= this.stickyScrollMaxItemCount) {\n firstVisibleNodeUnderWidget = this.getNextVisibleNode(nextStickyNode);\n if (!firstVisibleNodeUnderWidget) {\n break;\n }\n }\n nextStickyNode = this.getNextStickyNode(firstVisibleNodeUnderWidget, nextStickyNode.node, stickyNodesHeight);\n }\n const contrainedStickyNodes = this.constrainStickyNodes(stickyNodes);\n return contrainedStickyNodes.length ? new StickyScrollState(contrainedStickyNodes) : undefined;\n }\n getNextVisibleNode(previousStickyNode) {\n return this.getNodeAtHeight(previousStickyNode.position + previousStickyNode.height);\n }\n getNextStickyNode(firstVisibleNodeUnderWidget, previousStickyNode, stickyNodesHeight) {\n const nextStickyNode = this.getAncestorUnderPrevious(firstVisibleNodeUnderWidget, previousStickyNode);\n if (!nextStickyNode) {\n return undefined;\n }\n if (nextStickyNode === firstVisibleNodeUnderWidget) {\n if (!this.nodeIsUncollapsedParent(firstVisibleNodeUnderWidget)) {\n return undefined;\n }\n if (this.nodeTopAlignsWithStickyNodesBottom(firstVisibleNodeUnderWidget, stickyNodesHeight)) {\n return undefined;\n }\n }\n return this.createStickyScrollNode(nextStickyNode, stickyNodesHeight);\n }\n nodeTopAlignsWithStickyNodesBottom(node, stickyNodesHeight) {\n const nodeIndex = this.getNodeIndex(node);\n const elementTop = this.view.getElementTop(nodeIndex);\n const stickyPosition = stickyNodesHeight;\n return this.view.scrollTop === elementTop - stickyPosition;\n }\n createStickyScrollNode(node, currentStickyNodesHeight) {\n const height = this.treeDelegate.getHeight(node);\n const { startIndex, endIndex } = this.getNodeRange(node);\n const position = this.calculateStickyNodePosition(endIndex, currentStickyNodesHeight, height);\n return { node, position, height, startIndex, endIndex };\n }\n getAncestorUnderPrevious(node, previousAncestor = undefined) {\n let currentAncestor = node;\n let parentOfcurrentAncestor = this.getParentNode(currentAncestor);\n while (parentOfcurrentAncestor) {\n if (parentOfcurrentAncestor === previousAncestor) {\n return currentAncestor;\n }\n currentAncestor = parentOfcurrentAncestor;\n parentOfcurrentAncestor = this.getParentNode(currentAncestor);\n }\n if (previousAncestor === undefined) {\n return currentAncestor;\n }\n return undefined;\n }\n calculateStickyNodePosition(lastDescendantIndex, stickyRowPositionTop, stickyNodeHeight) {\n let lastChildRelativeTop = this.view.getRelativeTop(lastDescendantIndex);\n // If the last descendant is only partially visible at the top of the view, getRelativeTop() returns null\n // In that case, utilize the next node's relative top to calculate the sticky node's position\n if (lastChildRelativeTop === null && this.view.firstVisibleIndex === lastDescendantIndex && lastDescendantIndex + 1 < this.view.length) {\n const nodeHeight = this.treeDelegate.getHeight(this.view.element(lastDescendantIndex));\n const nextNodeRelativeTop = this.view.getRelativeTop(lastDescendantIndex + 1);\n lastChildRelativeTop = nextNodeRelativeTop ? nextNodeRelativeTop - nodeHeight / this.view.renderHeight : null;\n }\n if (lastChildRelativeTop === null) {\n return stickyRowPositionTop;\n }\n const lastChildNode = this.view.element(lastDescendantIndex);\n const lastChildHeight = this.treeDelegate.getHeight(lastChildNode);\n const topOfLastChild = lastChildRelativeTop * this.view.renderHeight;\n const bottomOfLastChild = topOfLastChild + lastChildHeight;\n if (stickyRowPositionTop + stickyNodeHeight > bottomOfLastChild && stickyRowPositionTop <= bottomOfLastChild) {\n return bottomOfLastChild - stickyNodeHeight;\n }\n return stickyRowPositionTop;\n }\n constrainStickyNodes(stickyNodes) {\n if (stickyNodes.length === 0) {\n return [];\n }\n // Check if sticky nodes need to be constrained\n const maximumStickyWidgetHeight = this.view.renderHeight * this.maxWidgetViewRatio;\n const lastStickyNode = stickyNodes[stickyNodes.length - 1];\n if (stickyNodes.length <= this.stickyScrollMaxItemCount && lastStickyNode.position + lastStickyNode.height <= maximumStickyWidgetHeight) {\n return stickyNodes;\n }\n // constrain sticky nodes\n const constrainedStickyNodes = this.stickyScrollDelegate.constrainStickyScrollNodes(stickyNodes, this.stickyScrollMaxItemCount, maximumStickyWidgetHeight);\n if (!constrainedStickyNodes.length) {\n return [];\n }\n // Validate constraints\n const lastConstrainedStickyNode = constrainedStickyNodes[constrainedStickyNodes.length - 1];\n if (constrainedStickyNodes.length > this.stickyScrollMaxItemCount || lastConstrainedStickyNode.position + lastConstrainedStickyNode.height > maximumStickyWidgetHeight) {\n throw new Error('stickyScrollDelegate violates constraints');\n }\n return constrainedStickyNodes;\n }\n getParentNode(node) {\n const nodeLocation = this.model.getNodeLocation(node);\n const parentLocation = this.model.getParentNodeLocation(nodeLocation);\n return parentLocation ? this.model.getNode(parentLocation) : undefined;\n }\n nodeIsUncollapsedParent(node) {\n const nodeLocation = this.model.getNodeLocation(node);\n return this.model.getListRenderCount(nodeLocation) > 1;\n }\n getNodeIndex(node) {\n const nodeLocation = this.model.getNodeLocation(node);\n const nodeIndex = this.model.getListIndex(nodeLocation);\n return nodeIndex;\n }\n getNodeRange(node) {\n const nodeLocation = this.model.getNodeLocation(node);\n const startIndex = this.model.getListIndex(nodeLocation);\n if (startIndex < 0) {\n throw new Error('Node not found in tree');\n }\n const renderCount = this.model.getListRenderCount(nodeLocation);\n const endIndex = startIndex + renderCount - 1;\n return { startIndex, endIndex };\n }\n nodePositionTopBelowWidget(node) {\n const ancestors = [];\n let currentAncestor = this.getParentNode(node);\n while (currentAncestor) {\n ancestors.push(currentAncestor);\n currentAncestor = this.getParentNode(currentAncestor);\n }\n let widgetHeight = 0;\n for (let i = 0; i < ancestors.length && i < this.stickyScrollMaxItemCount; i++) {\n widgetHeight += this.treeDelegate.getHeight(ancestors[i]);\n }\n return widgetHeight;\n }\n domFocus() {\n this._widget.domFocus();\n }\n // Whether sticky scroll was the last focused part in the tree or not\n focusedLast() {\n return this._widget.focusedLast();\n }\n updateOptions(optionsUpdate = {}) {\n if (!optionsUpdate.stickyScrollMaxItemCount) {\n return;\n }\n const validatedOptions = this.validateStickySettings(optionsUpdate);\n if (this.stickyScrollMaxItemCount !== validatedOptions.stickyScrollMaxItemCount) {\n this.stickyScrollMaxItemCount = validatedOptions.stickyScrollMaxItemCount;\n this.update();\n }\n }\n validateStickySettings(options) {\n let stickyScrollMaxItemCount = 7;\n if (typeof options.stickyScrollMaxItemCount === 'number') {\n stickyScrollMaxItemCount = Math.max(options.stickyScrollMaxItemCount, 1);\n }\n return { stickyScrollMaxItemCount };\n }\n}\nclass StickyScrollWidget {\n constructor(container, view, tree, treeRenderers, treeDelegate, accessibilityProvider) {\n this.view = view;\n this.tree = tree;\n this.treeRenderers = treeRenderers;\n this.treeDelegate = treeDelegate;\n this.accessibilityProvider = accessibilityProvider;\n this._previousElements = [];\n this._previousStateDisposables = new DisposableStore();\n this._rootDomNode = $('.monaco-tree-sticky-container.empty');\n container.appendChild(this._rootDomNode);\n const shadow = $('.monaco-tree-sticky-container-shadow');\n this._rootDomNode.appendChild(shadow);\n this.stickyScrollFocus = new StickyScrollFocus(this._rootDomNode, view);\n this.onDidChangeHasFocus = this.stickyScrollFocus.onDidChangeHasFocus;\n this.onContextMenu = this.stickyScrollFocus.onContextMenu;\n }\n get height() {\n if (!this._previousState) {\n return 0;\n }\n const lastElement = this._previousState.stickyNodes[this._previousState.count - 1];\n return lastElement.position + lastElement.height;\n }\n setState(state) {\n const wasVisible = !!this._previousState && this._previousState.count > 0;\n const isVisible = !!state && state.count > 0;\n // If state has not changed, do nothing\n if ((!wasVisible && !isVisible) || (wasVisible && isVisible && this._previousState.equal(state))) {\n return;\n }\n // Update visibility of the widget if changed\n if (wasVisible !== isVisible) {\n this.setVisible(isVisible);\n }\n if (!isVisible) {\n this._previousState = undefined;\n this._previousElements = [];\n this._previousStateDisposables.clear();\n return;\n }\n const lastStickyNode = state.stickyNodes[state.count - 1];\n // If the new state is only a change in the last node's position, update the position of the last element\n if (this._previousState && state.animationStateChanged(this._previousState)) {\n this._previousElements[this._previousState.count - 1].style.top = `${lastStickyNode.position}px`;\n }\n // create new dom elements\n else {\n this._previousStateDisposables.clear();\n const elements = Array(state.count);\n for (let stickyIndex = state.count - 1; stickyIndex >= 0; stickyIndex--) {\n const stickyNode = state.stickyNodes[stickyIndex];\n const { element, disposable } = this.createElement(stickyNode, stickyIndex, state.count);\n elements[stickyIndex] = element;\n this._rootDomNode.appendChild(element);\n this._previousStateDisposables.add(disposable);\n }\n this.stickyScrollFocus.updateElements(elements, state);\n this._previousElements = elements;\n }\n this._previousState = state;\n // Set the height of the widget to the bottom of the last sticky node\n this._rootDomNode.style.height = `${lastStickyNode.position + lastStickyNode.height}px`;\n }\n createElement(stickyNode, stickyIndex, stickyNodesTotal) {\n const nodeIndex = stickyNode.startIndex;\n // Sticky element container\n const stickyElement = document.createElement('div');\n stickyElement.style.top = `${stickyNode.position}px`;\n if (this.tree.options.setRowHeight !== false) {\n stickyElement.style.height = `${stickyNode.height}px`;\n }\n if (this.tree.options.setRowLineHeight !== false) {\n stickyElement.style.lineHeight = `${stickyNode.height}px`;\n }\n stickyElement.classList.add('monaco-tree-sticky-row');\n stickyElement.classList.add('monaco-list-row');\n stickyElement.setAttribute('data-index', `${nodeIndex}`);\n stickyElement.setAttribute('data-parity', nodeIndex % 2 === 0 ? 'even' : 'odd');\n stickyElement.setAttribute('id', this.view.getElementID(nodeIndex));\n const accessibilityDisposable = this.setAccessibilityAttributes(stickyElement, stickyNode.node.element, stickyIndex, stickyNodesTotal);\n // Get the renderer for the node\n const nodeTemplateId = this.treeDelegate.getTemplateId(stickyNode.node);\n const renderer = this.treeRenderers.find((renderer) => renderer.templateId === nodeTemplateId);\n if (!renderer) {\n throw new Error(`No renderer found for template id ${nodeTemplateId}`);\n }\n // To make sure we do not influence the original node, we create a copy of the node\n // We need to check if it is already a unique instance of the node by the delegate\n let nodeCopy = stickyNode.node;\n if (nodeCopy === this.tree.getNode(this.tree.getNodeLocation(stickyNode.node))) {\n nodeCopy = new Proxy(stickyNode.node, {});\n }\n // Render the element\n const templateData = renderer.renderTemplate(stickyElement);\n renderer.renderElement(nodeCopy, stickyNode.startIndex, templateData, stickyNode.height);\n // Remove the element from the DOM when state is disposed\n const disposable = toDisposable(() => {\n accessibilityDisposable.dispose();\n renderer.disposeElement(nodeCopy, stickyNode.startIndex, templateData, stickyNode.height);\n renderer.disposeTemplate(templateData);\n stickyElement.remove();\n });\n return { element: stickyElement, disposable };\n }\n setAccessibilityAttributes(container, element, stickyIndex, stickyNodesTotal) {\n var _a;\n if (!this.accessibilityProvider) {\n return Disposable.None;\n }\n if (this.accessibilityProvider.getSetSize) {\n container.setAttribute('aria-setsize', String(this.accessibilityProvider.getSetSize(element, stickyIndex, stickyNodesTotal)));\n }\n if (this.accessibilityProvider.getPosInSet) {\n container.setAttribute('aria-posinset', String(this.accessibilityProvider.getPosInSet(element, stickyIndex)));\n }\n if (this.accessibilityProvider.getRole) {\n container.setAttribute('role', (_a = this.accessibilityProvider.getRole(element)) !== null && _a !== void 0 ? _a : 'treeitem');\n }\n const ariaLabel = this.accessibilityProvider.getAriaLabel(element);\n const observable = (ariaLabel && typeof ariaLabel !== 'string') ? ariaLabel : constObservable(ariaLabel);\n const result = autorun(reader => {\n const value = reader.readObservable(observable);\n if (value) {\n container.setAttribute('aria-label', value);\n }\n else {\n container.removeAttribute('aria-label');\n }\n });\n if (typeof ariaLabel === 'string') {\n }\n else if (ariaLabel) {\n container.setAttribute('aria-label', ariaLabel.get());\n }\n const ariaLevel = this.accessibilityProvider.getAriaLevel && this.accessibilityProvider.getAriaLevel(element);\n if (typeof ariaLevel === 'number') {\n container.setAttribute('aria-level', `${ariaLevel}`);\n }\n // Sticky Scroll elements can not be selected\n container.setAttribute('aria-selected', String(false));\n return result;\n }\n setVisible(visible) {\n this._rootDomNode.classList.toggle('empty', !visible);\n if (!visible) {\n this.stickyScrollFocus.updateElements([], undefined);\n }\n }\n domFocus() {\n this.stickyScrollFocus.domFocus();\n }\n focusedLast() {\n return this.stickyScrollFocus.focusedLast();\n }\n dispose() {\n this.stickyScrollFocus.dispose();\n this._previousStateDisposables.dispose();\n this._rootDomNode.remove();\n }\n}\nclass StickyScrollFocus extends Disposable {\n get domHasFocus() { return this._domHasFocus; }\n set domHasFocus(hasFocus) {\n if (hasFocus !== this._domHasFocus) {\n this._onDidChangeHasFocus.fire(hasFocus);\n this._domHasFocus = hasFocus;\n }\n }\n constructor(container, view) {\n super();\n this.container = container;\n this.view = view;\n this.focusedIndex = -1;\n this.elements = [];\n this._onDidChangeHasFocus = new Emitter();\n this.onDidChangeHasFocus = this._onDidChangeHasFocus.event;\n this._onContextMenu = new Emitter();\n this.onContextMenu = this._onContextMenu.event;\n this._domHasFocus = false;\n this.container.addEventListener('focus', () => this.onFocus());\n this.container.addEventListener('blur', () => this.onBlur());\n this._register(this.view.onDidFocus(() => this.toggleStickyScrollFocused(false)));\n this._register(this.view.onKeyDown((e) => this.onKeyDown(e)));\n this._register(this.view.onMouseDown((e) => this.onMouseDown(e)));\n this._register(this.view.onContextMenu((e) => this.handleContextMenu(e)));\n }\n handleContextMenu(e) {\n const target = e.browserEvent.target;\n if (!isStickyScrollContainer(target) && !isStickyScrollElement(target)) {\n if (this.focusedLast()) {\n this.view.domFocus();\n }\n return;\n }\n // The list handles the context menu triggered by a mouse event\n // In that case only set the focus of the element clicked and leave the rest to the list to handle\n if (!isKeyboardEvent(e.browserEvent)) {\n if (!this.state) {\n throw new Error('Context menu should not be triggered when state is undefined');\n }\n const stickyIndex = this.state.stickyNodes.findIndex(stickyNode => { var _a; return stickyNode.node.element === ((_a = e.element) === null || _a === void 0 ? void 0 : _a.element); });\n if (stickyIndex === -1) {\n throw new Error('Context menu should not be triggered when element is not in sticky scroll widget');\n }\n this.container.focus();\n this.setFocus(stickyIndex);\n return;\n }\n if (!this.state || this.focusedIndex < 0) {\n throw new Error('Context menu key should not be triggered when focus is not in sticky scroll widget');\n }\n const stickyNode = this.state.stickyNodes[this.focusedIndex];\n const element = stickyNode.node.element;\n const anchor = this.elements[this.focusedIndex];\n this._onContextMenu.fire({ element, anchor, browserEvent: e.browserEvent, isStickyScroll: true });\n }\n onKeyDown(e) {\n // Sticky Scroll Navigation\n if (this.domHasFocus && this.state) {\n // Move up\n if (e.key === 'ArrowUp') {\n this.setFocusedElement(Math.max(0, this.focusedIndex - 1));\n e.preventDefault();\n e.stopPropagation();\n }\n // Move down, if last sticky node is focused, move focus into first child of last sticky node\n else if (e.key === 'ArrowDown' || e.key === 'ArrowRight') {\n if (this.focusedIndex >= this.state.count - 1) {\n const nodeIndexToFocus = this.state.stickyNodes[this.state.count - 1].startIndex + 1;\n this.view.domFocus();\n this.view.setFocus([nodeIndexToFocus]);\n this.scrollNodeUnderWidget(nodeIndexToFocus, this.state);\n }\n else {\n this.setFocusedElement(this.focusedIndex + 1);\n }\n e.preventDefault();\n e.stopPropagation();\n }\n }\n }\n onMouseDown(e) {\n const target = e.browserEvent.target;\n if (!isStickyScrollContainer(target) && !isStickyScrollElement(target)) {\n return;\n }\n e.browserEvent.preventDefault();\n e.browserEvent.stopPropagation();\n }\n updateElements(elements, state) {\n if (state && state.count === 0) {\n throw new Error('Sticky scroll state must be undefined when there are no sticky nodes');\n }\n if (state && state.count !== elements.length) {\n throw new Error('Sticky scroll focus received illigel state');\n }\n const previousIndex = this.focusedIndex;\n this.removeFocus();\n this.elements = elements;\n this.state = state;\n if (state) {\n const newFocusedIndex = clamp(previousIndex, 0, state.count - 1);\n this.setFocus(newFocusedIndex);\n }\n else {\n if (this.domHasFocus) {\n this.view.domFocus();\n }\n }\n // must come last as it calls blur()\n this.container.tabIndex = state ? 0 : -1;\n }\n setFocusedElement(stickyIndex) {\n // doesn't imply that the widget has (or will have) focus\n const state = this.state;\n if (!state) {\n throw new Error('Cannot set focus when state is undefined');\n }\n this.setFocus(stickyIndex);\n if (stickyIndex < state.count - 1) {\n return;\n }\n // If the last sticky node is not fully visible, scroll it into view\n if (state.lastNodePartiallyVisible()) {\n const lastStickyNode = state.stickyNodes[stickyIndex];\n this.scrollNodeUnderWidget(lastStickyNode.endIndex + 1, state);\n }\n }\n scrollNodeUnderWidget(nodeIndex, state) {\n const lastStickyNode = state.stickyNodes[state.count - 1];\n const secondLastStickyNode = state.count > 1 ? state.stickyNodes[state.count - 2] : undefined;\n const elementScrollTop = this.view.getElementTop(nodeIndex);\n const elementTargetViewTop = secondLastStickyNode ? secondLastStickyNode.position + secondLastStickyNode.height + lastStickyNode.height : lastStickyNode.height;\n this.view.scrollTop = elementScrollTop - elementTargetViewTop;\n }\n domFocus() {\n if (!this.state) {\n throw new Error('Cannot focus when state is undefined');\n }\n this.container.focus();\n }\n focusedLast() {\n if (!this.state) {\n return false;\n }\n return this.view.getHTMLElement().classList.contains('sticky-scroll-focused');\n }\n removeFocus() {\n if (this.focusedIndex === -1) {\n return;\n }\n this.toggleElementFocus(this.elements[this.focusedIndex], false);\n this.focusedIndex = -1;\n }\n setFocus(newFocusIndex) {\n if (0 > newFocusIndex) {\n throw new Error('addFocus() can not remove focus');\n }\n if (!this.state && newFocusIndex >= 0) {\n throw new Error('Cannot set focus index when state is undefined');\n }\n if (this.state && newFocusIndex >= this.state.count) {\n throw new Error('Cannot set focus index to an index that does not exist');\n }\n const oldIndex = this.focusedIndex;\n if (oldIndex >= 0) {\n this.toggleElementFocus(this.elements[oldIndex], false);\n }\n if (newFocusIndex >= 0) {\n this.toggleElementFocus(this.elements[newFocusIndex], true);\n }\n this.focusedIndex = newFocusIndex;\n }\n toggleElementFocus(element, focused) {\n this.toggleElementActiveFocus(element, focused && this.domHasFocus);\n this.toggleElementPassiveFocus(element, focused);\n }\n toggleCurrentElementActiveFocus(focused) {\n if (this.focusedIndex === -1) {\n return;\n }\n this.toggleElementActiveFocus(this.elements[this.focusedIndex], focused);\n }\n toggleElementActiveFocus(element, focused) {\n // active focus is set when sticky scroll has focus\n element.classList.toggle('focused', focused);\n }\n toggleElementPassiveFocus(element, focused) {\n // passive focus allows to show focus when sticky scroll does not have focus\n // for example when the context menu has focus\n element.classList.toggle('passive-focused', focused);\n }\n toggleStickyScrollFocused(focused) {\n // Weather the last focus in the view was sticky scroll and not the list\n // Is only removed when the focus is back in the tree an no longer in sticky scroll\n this.view.getHTMLElement().classList.toggle('sticky-scroll-focused', focused);\n }\n onFocus() {\n if (!this.state || this.elements.length === 0) {\n throw new Error('Cannot focus when state is undefined or elements are empty');\n }\n this.domHasFocus = true;\n this.toggleStickyScrollFocused(true);\n this.toggleCurrentElementActiveFocus(true);\n if (this.focusedIndex === -1) {\n this.setFocus(0);\n }\n }\n onBlur() {\n this.domHasFocus = false;\n this.toggleCurrentElementActiveFocus(false);\n }\n dispose() {\n this.toggleStickyScrollFocused(false);\n this._onDidChangeHasFocus.fire(false);\n super.dispose();\n }\n}\nfunction asTreeMouseEvent(event) {\n let target = TreeMouseEventTarget.Unknown;\n if (hasParentWithClass(event.browserEvent.target, 'monaco-tl-twistie', 'monaco-tl-row')) {\n target = TreeMouseEventTarget.Twistie;\n }\n else if (hasParentWithClass(event.browserEvent.target, 'monaco-tl-contents', 'monaco-tl-row')) {\n target = TreeMouseEventTarget.Element;\n }\n else if (hasParentWithClass(event.browserEvent.target, 'monaco-tree-type-filter', 'monaco-list')) {\n target = TreeMouseEventTarget.Filter;\n }\n return {\n browserEvent: event.browserEvent,\n element: event.element ? event.element.element : null,\n target\n };\n}\nfunction asTreeContextMenuEvent(event) {\n const isStickyScroll = isStickyScrollContainer(event.browserEvent.target);\n return {\n element: event.element ? event.element.element : null,\n browserEvent: event.browserEvent,\n anchor: event.anchor,\n isStickyScroll\n };\n}\nfunction dfs(node, fn) {\n fn(node);\n node.children.forEach(child => dfs(child, fn));\n}\n/**\n * The trait concept needs to exist at the tree level, because collapsed\n * tree nodes will not be known by the list.\n */\nclass Trait {\n get nodeSet() {\n if (!this._nodeSet) {\n this._nodeSet = this.createNodeSet();\n }\n return this._nodeSet;\n }\n constructor(getFirstViewElementWithTrait, identityProvider) {\n this.getFirstViewElementWithTrait = getFirstViewElementWithTrait;\n this.identityProvider = identityProvider;\n this.nodes = [];\n this._onDidChange = new Emitter();\n this.onDidChange = this._onDidChange.event;\n }\n set(nodes, browserEvent) {\n if (!(browserEvent === null || browserEvent === void 0 ? void 0 : browserEvent.__forceEvent) && equals(this.nodes, nodes)) {\n return;\n }\n this._set(nodes, false, browserEvent);\n }\n _set(nodes, silent, browserEvent) {\n this.nodes = [...nodes];\n this.elements = undefined;\n this._nodeSet = undefined;\n if (!silent) {\n const that = this;\n this._onDidChange.fire({ get elements() { return that.get(); }, browserEvent });\n }\n }\n get() {\n if (!this.elements) {\n this.elements = this.nodes.map(node => node.element);\n }\n return [...this.elements];\n }\n getNodes() {\n return this.nodes;\n }\n has(node) {\n return this.nodeSet.has(node);\n }\n onDidModelSplice({ insertedNodes, deletedNodes }) {\n if (!this.identityProvider) {\n const set = this.createNodeSet();\n const visit = (node) => set.delete(node);\n deletedNodes.forEach(node => dfs(node, visit));\n this.set([...set.values()]);\n return;\n }\n const deletedNodesIdSet = new Set();\n const deletedNodesVisitor = (node) => deletedNodesIdSet.add(this.identityProvider.getId(node.element).toString());\n deletedNodes.forEach(node => dfs(node, deletedNodesVisitor));\n const insertedNodesMap = new Map();\n const insertedNodesVisitor = (node) => insertedNodesMap.set(this.identityProvider.getId(node.element).toString(), node);\n insertedNodes.forEach(node => dfs(node, insertedNodesVisitor));\n const nodes = [];\n for (const node of this.nodes) {\n const id = this.identityProvider.getId(node.element).toString();\n const wasDeleted = deletedNodesIdSet.has(id);\n if (!wasDeleted) {\n nodes.push(node);\n }\n else {\n const insertedNode = insertedNodesMap.get(id);\n if (insertedNode && insertedNode.visible) {\n nodes.push(insertedNode);\n }\n }\n }\n if (this.nodes.length > 0 && nodes.length === 0) {\n const node = this.getFirstViewElementWithTrait();\n if (node) {\n nodes.push(node);\n }\n }\n this._set(nodes, true);\n }\n createNodeSet() {\n const set = new Set();\n for (const node of this.nodes) {\n set.add(node);\n }\n return set;\n }\n}\nclass TreeNodeListMouseController extends MouseController {\n constructor(list, tree, stickyScrollProvider) {\n super(list);\n this.tree = tree;\n this.stickyScrollProvider = stickyScrollProvider;\n }\n onViewPointer(e) {\n if (isButton(e.browserEvent.target) ||\n isInputElement(e.browserEvent.target) ||\n isMonacoEditor(e.browserEvent.target)) {\n return;\n }\n if (e.browserEvent.isHandledByList) {\n return;\n }\n const node = e.element;\n if (!node) {\n return super.onViewPointer(e);\n }\n if (this.isSelectionRangeChangeEvent(e) || this.isSelectionSingleChangeEvent(e)) {\n return super.onViewPointer(e);\n }\n const target = e.browserEvent.target;\n const onTwistie = target.classList.contains('monaco-tl-twistie')\n || (target.classList.contains('monaco-icon-label') && target.classList.contains('folder-icon') && e.browserEvent.offsetX < 16);\n const isStickyElement = isStickyScrollElement(e.browserEvent.target);\n let expandOnlyOnTwistieClick = false;\n if (isStickyElement) {\n expandOnlyOnTwistieClick = true;\n }\n else if (typeof this.tree.expandOnlyOnTwistieClick === 'function') {\n expandOnlyOnTwistieClick = this.tree.expandOnlyOnTwistieClick(node.element);\n }\n else {\n expandOnlyOnTwistieClick = !!this.tree.expandOnlyOnTwistieClick;\n }\n if (!isStickyElement) {\n if (expandOnlyOnTwistieClick && !onTwistie && e.browserEvent.detail !== 2) {\n return super.onViewPointer(e);\n }\n if (!this.tree.expandOnDoubleClick && e.browserEvent.detail === 2) {\n return super.onViewPointer(e);\n }\n }\n else {\n this.handleStickyScrollMouseEvent(e, node);\n }\n if (node.collapsible && (!isStickyElement || onTwistie)) {\n const location = this.tree.getNodeLocation(node);\n const recursive = e.browserEvent.altKey;\n this.tree.setFocus([location]);\n this.tree.toggleCollapsed(location, recursive);\n if (onTwistie) {\n // Do not set this before calling a handler on the super class, because it will reject it as handled\n e.browserEvent.isHandledByList = true;\n return;\n }\n }\n if (!isStickyElement) {\n super.onViewPointer(e);\n }\n }\n handleStickyScrollMouseEvent(e, node) {\n if (isMonacoCustomToggle(e.browserEvent.target) || isActionItem(e.browserEvent.target)) {\n return;\n }\n const stickyScrollController = this.stickyScrollProvider();\n if (!stickyScrollController) {\n throw new Error('Sticky scroll controller not found');\n }\n const nodeIndex = this.list.indexOf(node);\n const elementScrollTop = this.list.getElementTop(nodeIndex);\n const elementTargetViewTop = stickyScrollController.nodePositionTopBelowWidget(node);\n this.tree.scrollTop = elementScrollTop - elementTargetViewTop;\n this.list.domFocus();\n this.list.setFocus([nodeIndex]);\n this.list.setSelection([nodeIndex]);\n }\n onDoubleClick(e) {\n const onTwistie = e.browserEvent.target.classList.contains('monaco-tl-twistie');\n if (onTwistie || !this.tree.expandOnDoubleClick) {\n return;\n }\n if (e.browserEvent.isHandledByList) {\n return;\n }\n super.onDoubleClick(e);\n }\n // to make sure dom focus is not stolen (for example with context menu)\n onMouseDown(e) {\n const target = e.browserEvent.target;\n if (!isStickyScrollContainer(target) && !isStickyScrollElement(target)) {\n super.onMouseDown(e);\n return;\n }\n }\n onContextMenu(e) {\n const target = e.browserEvent.target;\n if (!isStickyScrollContainer(target) && !isStickyScrollElement(target)) {\n super.onContextMenu(e);\n return;\n }\n }\n}\n/**\n * We use this List subclass to restore selection and focus as nodes\n * get rendered in the list, possibly due to a node expand() call.\n */\nclass TreeNodeList extends List {\n constructor(user, container, virtualDelegate, renderers, focusTrait, selectionTrait, anchorTrait, options) {\n super(user, container, virtualDelegate, renderers, options);\n this.focusTrait = focusTrait;\n this.selectionTrait = selectionTrait;\n this.anchorTrait = anchorTrait;\n }\n createMouseController(options) {\n return new TreeNodeListMouseController(this, options.tree, options.stickyScrollProvider);\n }\n splice(start, deleteCount, elements = []) {\n super.splice(start, deleteCount, elements);\n if (elements.length === 0) {\n return;\n }\n const additionalFocus = [];\n const additionalSelection = [];\n let anchor;\n elements.forEach((node, index) => {\n if (this.focusTrait.has(node)) {\n additionalFocus.push(start + index);\n }\n if (this.selectionTrait.has(node)) {\n additionalSelection.push(start + index);\n }\n if (this.anchorTrait.has(node)) {\n anchor = start + index;\n }\n });\n if (additionalFocus.length > 0) {\n super.setFocus(distinct([...super.getFocus(), ...additionalFocus]));\n }\n if (additionalSelection.length > 0) {\n super.setSelection(distinct([...super.getSelection(), ...additionalSelection]));\n }\n if (typeof anchor === 'number') {\n super.setAnchor(anchor);\n }\n }\n setFocus(indexes, browserEvent, fromAPI = false) {\n super.setFocus(indexes, browserEvent);\n if (!fromAPI) {\n this.focusTrait.set(indexes.map(i => this.element(i)), browserEvent);\n }\n }\n setSelection(indexes, browserEvent, fromAPI = false) {\n super.setSelection(indexes, browserEvent);\n if (!fromAPI) {\n this.selectionTrait.set(indexes.map(i => this.element(i)), browserEvent);\n }\n }\n setAnchor(index, fromAPI = false) {\n super.setAnchor(index);\n if (!fromAPI) {\n if (typeof index === 'undefined') {\n this.anchorTrait.set([]);\n }\n else {\n this.anchorTrait.set([this.element(index)]);\n }\n }\n }\n}\nexport class AbstractTree {\n get onDidScroll() { return this.view.onDidScroll; }\n get onDidChangeFocus() { return this.eventBufferer.wrapEvent(this.focus.onDidChange); }\n get onDidChangeSelection() { return this.eventBufferer.wrapEvent(this.selection.onDidChange); }\n get onMouseDblClick() { return Event.filter(Event.map(this.view.onMouseDblClick, asTreeMouseEvent), e => e.target !== TreeMouseEventTarget.Filter); }\n get onMouseOver() { return Event.map(this.view.onMouseOver, asTreeMouseEvent); }\n get onMouseOut() { return Event.map(this.view.onMouseOut, asTreeMouseEvent); }\n get onContextMenu() { var _a, _b; return Event.any(Event.filter(Event.map(this.view.onContextMenu, asTreeContextMenuEvent), e => !e.isStickyScroll), (_b = (_a = this.stickyScrollController) === null || _a === void 0 ? void 0 : _a.onContextMenu) !== null && _b !== void 0 ? _b : Event.None); }\n get onPointer() { return Event.map(this.view.onPointer, asTreeMouseEvent); }\n get onKeyDown() { return this.view.onKeyDown; }\n get onDidFocus() { return this.view.onDidFocus; }\n get onDidChangeModel() { return Event.signal(this.model.onDidSplice); }\n get onDidChangeCollapseState() { return this.model.onDidChangeCollapseState; }\n get findMode() { var _a, _b; return (_b = (_a = this.findController) === null || _a === void 0 ? void 0 : _a.mode) !== null && _b !== void 0 ? _b : TreeFindMode.Highlight; }\n set findMode(findMode) { if (this.findController) {\n this.findController.mode = findMode;\n } }\n get findMatchType() { var _a, _b; return (_b = (_a = this.findController) === null || _a === void 0 ? void 0 : _a.matchType) !== null && _b !== void 0 ? _b : TreeFindMatchType.Fuzzy; }\n set findMatchType(findFuzzy) { if (this.findController) {\n this.findController.matchType = findFuzzy;\n } }\n get expandOnDoubleClick() { return typeof this._options.expandOnDoubleClick === 'undefined' ? true : this._options.expandOnDoubleClick; }\n get expandOnlyOnTwistieClick() { return typeof this._options.expandOnlyOnTwistieClick === 'undefined' ? true : this._options.expandOnlyOnTwistieClick; }\n get onDidDispose() { return this.view.onDidDispose; }\n constructor(_user, container, delegate, renderers, _options = {}) {\n var _a;\n this._user = _user;\n this._options = _options;\n this.eventBufferer = new EventBufferer();\n this.onDidChangeFindOpenState = Event.None;\n this.onDidChangeStickyScrollFocused = Event.None;\n this.disposables = new DisposableStore();\n this._onWillRefilter = new Emitter();\n this.onWillRefilter = this._onWillRefilter.event;\n this._onDidUpdateOptions = new Emitter();\n this.treeDelegate = new ComposedTreeDelegate(delegate);\n const onDidChangeCollapseStateRelay = new Relay();\n const onDidChangeActiveNodes = new Relay();\n const activeNodes = this.disposables.add(new EventCollection(onDidChangeActiveNodes.event));\n const renderedIndentGuides = new SetMap();\n this.renderers = renderers.map(r => new TreeRenderer(r, () => this.model, onDidChangeCollapseStateRelay.event, activeNodes, renderedIndentGuides, _options));\n for (const r of this.renderers) {\n this.disposables.add(r);\n }\n let filter;\n if (_options.keyboardNavigationLabelProvider) {\n filter = new FindFilter(this, _options.keyboardNavigationLabelProvider, _options.filter);\n _options = { ..._options, filter: filter }; // TODO need typescript help here\n this.disposables.add(filter);\n }\n this.focus = new Trait(() => this.view.getFocusedElements()[0], _options.identityProvider);\n this.selection = new Trait(() => this.view.getSelectedElements()[0], _options.identityProvider);\n this.anchor = new Trait(() => this.view.getAnchorElement(), _options.identityProvider);\n this.view = new TreeNodeList(_user, container, this.treeDelegate, this.renderers, this.focus, this.selection, this.anchor, { ...asListOptions(() => this.model, _options), tree: this, stickyScrollProvider: () => this.stickyScrollController });\n this.model = this.createModel(_user, this.view, _options);\n onDidChangeCollapseStateRelay.input = this.model.onDidChangeCollapseState;\n const onDidModelSplice = Event.forEach(this.model.onDidSplice, e => {\n this.eventBufferer.bufferEvents(() => {\n this.focus.onDidModelSplice(e);\n this.selection.onDidModelSplice(e);\n });\n }, this.disposables);\n // Make sure the `forEach` always runs\n onDidModelSplice(() => null, null, this.disposables);\n // Active nodes can change when the model changes or when focus or selection change.\n // We debounce it with 0 delay since these events may fire in the same stack and we only\n // want to run this once. It also doesn't matter if it runs on the next tick since it's only\n // a nice to have UI feature.\n const activeNodesEmitter = this.disposables.add(new Emitter());\n const activeNodesDebounce = this.disposables.add(new Delayer(0));\n this.disposables.add(Event.any(onDidModelSplice, this.focus.onDidChange, this.selection.onDidChange)(() => {\n activeNodesDebounce.trigger(() => {\n const set = new Set();\n for (const node of this.focus.getNodes()) {\n set.add(node);\n }\n for (const node of this.selection.getNodes()) {\n set.add(node);\n }\n activeNodesEmitter.fire([...set.values()]);\n });\n }));\n onDidChangeActiveNodes.input = activeNodesEmitter.event;\n if (_options.keyboardSupport !== false) {\n const onKeyDown = Event.chain(this.view.onKeyDown, $ => $.filter(e => !isInputElement(e.target))\n .map(e => new StandardKeyboardEvent(e)));\n Event.chain(onKeyDown, $ => $.filter(e => e.keyCode === 15 /* KeyCode.LeftArrow */))(this.onLeftArrow, this, this.disposables);\n Event.chain(onKeyDown, $ => $.filter(e => e.keyCode === 17 /* KeyCode.RightArrow */))(this.onRightArrow, this, this.disposables);\n Event.chain(onKeyDown, $ => $.filter(e => e.keyCode === 10 /* KeyCode.Space */))(this.onSpace, this, this.disposables);\n }\n if (((_a = _options.findWidgetEnabled) !== null && _a !== void 0 ? _a : true) && _options.keyboardNavigationLabelProvider && _options.contextViewProvider) {\n const opts = this.options.findWidgetStyles ? { styles: this.options.findWidgetStyles } : undefined;\n this.findController = new FindController(this, this.model, this.view, filter, _options.contextViewProvider, opts);\n this.focusNavigationFilter = node => this.findController.shouldAllowFocus(node);\n this.onDidChangeFindOpenState = this.findController.onDidChangeOpenState;\n this.disposables.add(this.findController);\n this.onDidChangeFindMode = this.findController.onDidChangeMode;\n this.onDidChangeFindMatchType = this.findController.onDidChangeMatchType;\n }\n else {\n this.onDidChangeFindMode = Event.None;\n this.onDidChangeFindMatchType = Event.None;\n }\n if (_options.enableStickyScroll) {\n this.stickyScrollController = new StickyScrollController(this, this.model, this.view, this.renderers, this.treeDelegate, _options);\n this.onDidChangeStickyScrollFocused = this.stickyScrollController.onDidChangeHasFocus;\n }\n this.styleElement = createStyleSheet(this.view.getHTMLElement());\n this.getHTMLElement().classList.toggle('always', this._options.renderIndentGuides === RenderIndentGuides.Always);\n }\n updateOptions(optionsUpdate = {}) {\n var _a;\n this._options = { ...this._options, ...optionsUpdate };\n for (const renderer of this.renderers) {\n renderer.updateOptions(optionsUpdate);\n }\n this.view.updateOptions(this._options);\n (_a = this.findController) === null || _a === void 0 ? void 0 : _a.updateOptions(optionsUpdate);\n this.updateStickyScroll(optionsUpdate);\n this._onDidUpdateOptions.fire(this._options);\n this.getHTMLElement().classList.toggle('always', this._options.renderIndentGuides === RenderIndentGuides.Always);\n }\n get options() {\n return this._options;\n }\n updateStickyScroll(optionsUpdate) {\n var _a;\n if (!this.stickyScrollController && this._options.enableStickyScroll) {\n this.stickyScrollController = new StickyScrollController(this, this.model, this.view, this.renderers, this.treeDelegate, this._options);\n this.onDidChangeStickyScrollFocused = this.stickyScrollController.onDidChangeHasFocus;\n }\n else if (this.stickyScrollController && !this._options.enableStickyScroll) {\n this.onDidChangeStickyScrollFocused = Event.None;\n this.stickyScrollController.dispose();\n this.stickyScrollController = undefined;\n }\n (_a = this.stickyScrollController) === null || _a === void 0 ? void 0 : _a.updateOptions(optionsUpdate);\n }\n // Widget\n getHTMLElement() {\n return this.view.getHTMLElement();\n }\n get scrollTop() {\n return this.view.scrollTop;\n }\n set scrollTop(scrollTop) {\n this.view.scrollTop = scrollTop;\n }\n get scrollHeight() {\n return this.view.scrollHeight;\n }\n get renderHeight() {\n return this.view.renderHeight;\n }\n get ariaLabel() {\n return this.view.ariaLabel;\n }\n set ariaLabel(value) {\n this.view.ariaLabel = value;\n }\n domFocus() {\n var _a;\n if ((_a = this.stickyScrollController) === null || _a === void 0 ? void 0 : _a.focusedLast()) {\n this.stickyScrollController.domFocus();\n }\n else {\n this.view.domFocus();\n }\n }\n layout(height, width) {\n var _a;\n this.view.layout(height, width);\n if (isNumber(width)) {\n (_a = this.findController) === null || _a === void 0 ? void 0 : _a.layout(width);\n }\n }\n style(styles) {\n var _a, _b;\n const suffix = `.${this.view.domId}`;\n const content = [];\n if (styles.treeIndentGuidesStroke) {\n content.push(`.monaco-list${suffix}:hover .monaco-tl-indent > .indent-guide, .monaco-list${suffix}.always .monaco-tl-indent > .indent-guide { border-color: ${styles.treeInactiveIndentGuidesStroke}; }`);\n content.push(`.monaco-list${suffix} .monaco-tl-indent > .indent-guide.active { border-color: ${styles.treeIndentGuidesStroke}; }`);\n }\n // Sticky Scroll Background\n const stickyScrollBackground = (_a = styles.treeStickyScrollBackground) !== null && _a !== void 0 ? _a : styles.listBackground;\n if (stickyScrollBackground) {\n content.push(`.monaco-list${suffix} .monaco-scrollable-element .monaco-tree-sticky-container { background-color: ${stickyScrollBackground}; }`);\n content.push(`.monaco-list${suffix} .monaco-scrollable-element .monaco-tree-sticky-container .monaco-tree-sticky-row { background-color: ${stickyScrollBackground}; }`);\n }\n // Sticky Scroll Border\n if (styles.treeStickyScrollBorder) {\n content.push(`.monaco-list${suffix} .monaco-scrollable-element .monaco-tree-sticky-container { border-bottom: 1px solid ${styles.treeStickyScrollBorder}; }`);\n }\n // Sticky Scroll Shadow\n if (styles.treeStickyScrollShadow) {\n content.push(`.monaco-list${suffix} .monaco-scrollable-element .monaco-tree-sticky-container .monaco-tree-sticky-container-shadow { box-shadow: ${styles.treeStickyScrollShadow} 0 6px 6px -6px inset; height: 3px; }`);\n }\n // Sticky Scroll Focus\n if (styles.listFocusForeground) {\n content.push(`.monaco-list${suffix}.sticky-scroll-focused .monaco-scrollable-element .monaco-tree-sticky-container:focus .monaco-list-row.focused { color: ${styles.listFocusForeground}; }`);\n content.push(`.monaco-list${suffix}:not(.sticky-scroll-focused) .monaco-scrollable-element .monaco-tree-sticky-container .monaco-list-row.focused { color: inherit; }`);\n }\n // Sticky Scroll Focus Outlines\n const focusAndSelectionOutline = asCssValueWithDefault(styles.listFocusAndSelectionOutline, asCssValueWithDefault(styles.listSelectionOutline, (_b = styles.listFocusOutline) !== null && _b !== void 0 ? _b : ''));\n if (focusAndSelectionOutline) { // default: listFocusOutline\n content.push(`.monaco-list${suffix}.sticky-scroll-focused .monaco-scrollable-element .monaco-tree-sticky-container:focus .monaco-list-row.focused.selected { outline: 1px solid ${focusAndSelectionOutline}; outline-offset: -1px;}`);\n content.push(`.monaco-list${suffix}:not(.sticky-scroll-focused) .monaco-scrollable-element .monaco-tree-sticky-container .monaco-list-row.focused.selected { outline: inherit;}`);\n }\n if (styles.listFocusOutline) { // default: set\n content.push(`.monaco-list${suffix}.sticky-scroll-focused .monaco-scrollable-element .monaco-tree-sticky-container:focus .monaco-list-row.focused { outline: 1px solid ${styles.listFocusOutline}; outline-offset: -1px; }`);\n content.push(`.monaco-list${suffix}:not(.sticky-scroll-focused) .monaco-scrollable-element .monaco-tree-sticky-container .monaco-list-row.focused { outline: inherit; }`);\n content.push(`.monaco-workbench.context-menu-visible .monaco-list${suffix}.last-focused.sticky-scroll-focused .monaco-scrollable-element .monaco-tree-sticky-container .monaco-list-row.passive-focused { outline: 1px solid ${styles.listFocusOutline}; outline-offset: -1px; }`);\n content.push(`.monaco-workbench.context-menu-visible .monaco-list${suffix}.last-focused.sticky-scroll-focused .monaco-list-rows .monaco-list-row.focused { outline: inherit; }`);\n content.push(`.monaco-workbench.context-menu-visible .monaco-list${suffix}.last-focused:not(.sticky-scroll-focused) .monaco-tree-sticky-container .monaco-list-rows .monaco-list-row.focused { outline: inherit; }`);\n }\n this.styleElement.textContent = content.join('\\n');\n this.view.style(styles);\n }\n // Tree navigation\n getParentElement(location) {\n const parentRef = this.model.getParentNodeLocation(location);\n const parentNode = this.model.getNode(parentRef);\n return parentNode.element;\n }\n getFirstElementChild(location) {\n return this.model.getFirstElementChild(location);\n }\n // Tree\n getNode(location) {\n return this.model.getNode(location);\n }\n getNodeLocation(node) {\n return this.model.getNodeLocation(node);\n }\n collapse(location, recursive = false) {\n return this.model.setCollapsed(location, true, recursive);\n }\n expand(location, recursive = false) {\n return this.model.setCollapsed(location, false, recursive);\n }\n toggleCollapsed(location, recursive = false) {\n return this.model.setCollapsed(location, undefined, recursive);\n }\n isCollapsible(location) {\n return this.model.isCollapsible(location);\n }\n setCollapsible(location, collapsible) {\n return this.model.setCollapsible(location, collapsible);\n }\n isCollapsed(location) {\n return this.model.isCollapsed(location);\n }\n refilter() {\n this._onWillRefilter.fire(undefined);\n this.model.refilter();\n }\n setSelection(elements, browserEvent) {\n this.eventBufferer.bufferEvents(() => {\n const nodes = elements.map(e => this.model.getNode(e));\n this.selection.set(nodes, browserEvent);\n const indexes = elements.map(e => this.model.getListIndex(e)).filter(i => i > -1);\n this.view.setSelection(indexes, browserEvent, true);\n });\n }\n getSelection() {\n return this.selection.get();\n }\n setFocus(elements, browserEvent) {\n this.eventBufferer.bufferEvents(() => {\n const nodes = elements.map(e => this.model.getNode(e));\n this.focus.set(nodes, browserEvent);\n const indexes = elements.map(e => this.model.getListIndex(e)).filter(i => i > -1);\n this.view.setFocus(indexes, browserEvent, true);\n });\n }\n focusNext(n = 1, loop = false, browserEvent, filter = (isKeyboardEvent(browserEvent) && browserEvent.altKey) ? undefined : this.focusNavigationFilter) {\n this.view.focusNext(n, loop, browserEvent, filter);\n }\n focusPrevious(n = 1, loop = false, browserEvent, filter = (isKeyboardEvent(browserEvent) && browserEvent.altKey) ? undefined : this.focusNavigationFilter) {\n this.view.focusPrevious(n, loop, browserEvent, filter);\n }\n focusNextPage(browserEvent, filter = (isKeyboardEvent(browserEvent) && browserEvent.altKey) ? undefined : this.focusNavigationFilter) {\n return this.view.focusNextPage(browserEvent, filter);\n }\n focusPreviousPage(browserEvent, filter = (isKeyboardEvent(browserEvent) && browserEvent.altKey) ? undefined : this.focusNavigationFilter) {\n return this.view.focusPreviousPage(browserEvent, filter, () => { var _a, _b; return (_b = (_a = this.stickyScrollController) === null || _a === void 0 ? void 0 : _a.height) !== null && _b !== void 0 ? _b : 0; });\n }\n focusFirst(browserEvent, filter = (isKeyboardEvent(browserEvent) && browserEvent.altKey) ? undefined : this.focusNavigationFilter) {\n this.view.focusFirst(browserEvent, filter);\n }\n getFocus() {\n return this.focus.get();\n }\n reveal(location, relativeTop) {\n this.model.expandTo(location);\n const index = this.model.getListIndex(location);\n if (index === -1) {\n return;\n }\n if (!this.stickyScrollController) {\n this.view.reveal(index, relativeTop);\n }\n else {\n const paddingTop = this.stickyScrollController.nodePositionTopBelowWidget(this.getNode(location));\n this.view.reveal(index, relativeTop, paddingTop);\n }\n }\n // List\n onLeftArrow(e) {\n e.preventDefault();\n e.stopPropagation();\n const nodes = this.view.getFocusedElements();\n if (nodes.length === 0) {\n return;\n }\n const node = nodes[0];\n const location = this.model.getNodeLocation(node);\n const didChange = this.model.setCollapsed(location, true);\n if (!didChange) {\n const parentLocation = this.model.getParentNodeLocation(location);\n if (!parentLocation) {\n return;\n }\n const parentListIndex = this.model.getListIndex(parentLocation);\n this.view.reveal(parentListIndex);\n this.view.setFocus([parentListIndex]);\n }\n }\n onRightArrow(e) {\n e.preventDefault();\n e.stopPropagation();\n const nodes = this.view.getFocusedElements();\n if (nodes.length === 0) {\n return;\n }\n const node = nodes[0];\n const location = this.model.getNodeLocation(node);\n const didChange = this.model.setCollapsed(location, false);\n if (!didChange) {\n if (!node.children.some(child => child.visible)) {\n return;\n }\n const [focusedIndex] = this.view.getFocus();\n const firstChildIndex = focusedIndex + 1;\n this.view.reveal(firstChildIndex);\n this.view.setFocus([firstChildIndex]);\n }\n }\n onSpace(e) {\n e.preventDefault();\n e.stopPropagation();\n const nodes = this.view.getFocusedElements();\n if (nodes.length === 0) {\n return;\n }\n const node = nodes[0];\n const location = this.model.getNodeLocation(node);\n const recursive = e.browserEvent.altKey;\n this.model.setCollapsed(location, undefined, recursive);\n }\n dispose() {\n var _a;\n dispose(this.disposables);\n (_a = this.stickyScrollController) === null || _a === void 0 ? void 0 : _a.dispose();\n this.view.dispose();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { ElementsDragAndDropData } from '../list/listView.js';\nimport { ComposedTreeDelegate } from './abstractTree.js';\nimport { getVisibleState, isFilterResult } from './indexTreeModel.js';\nimport { CompressibleObjectTree, ObjectTree } from './objectTree.js';\nimport { ObjectTreeElementCollapseState, TreeError, WeakMapper } from './tree.js';\nimport { createCancelablePromise, Promises, timeout } from '../../../common/async.js';\nimport { Codicon } from '../../../common/codicons.js';\nimport { ThemeIcon } from '../../../common/themables.js';\nimport { isCancellationError, onUnexpectedError } from '../../../common/errors.js';\nimport { Emitter, Event } from '../../../common/event.js';\nimport { Iterable } from '../../../common/iterator.js';\nimport { DisposableStore, dispose } from '../../../common/lifecycle.js';\nimport { isIterable } from '../../../common/types.js';\nfunction createAsyncDataTreeNode(props) {\n return {\n ...props,\n children: [],\n refreshPromise: undefined,\n stale: true,\n slow: false,\n forceExpanded: false\n };\n}\nfunction isAncestor(ancestor, descendant) {\n if (!descendant.parent) {\n return false;\n }\n else if (descendant.parent === ancestor) {\n return true;\n }\n else {\n return isAncestor(ancestor, descendant.parent);\n }\n}\nfunction intersects(node, other) {\n return node === other || isAncestor(node, other) || isAncestor(other, node);\n}\nclass AsyncDataTreeNodeWrapper {\n get element() { return this.node.element.element; }\n get children() { return this.node.children.map(node => new AsyncDataTreeNodeWrapper(node)); }\n get depth() { return this.node.depth; }\n get visibleChildrenCount() { return this.node.visibleChildrenCount; }\n get visibleChildIndex() { return this.node.visibleChildIndex; }\n get collapsible() { return this.node.collapsible; }\n get collapsed() { return this.node.collapsed; }\n get visible() { return this.node.visible; }\n get filterData() { return this.node.filterData; }\n constructor(node) {\n this.node = node;\n }\n}\nclass AsyncDataTreeRenderer {\n constructor(renderer, nodeMapper, onDidChangeTwistieState) {\n this.renderer = renderer;\n this.nodeMapper = nodeMapper;\n this.onDidChangeTwistieState = onDidChangeTwistieState;\n this.renderedNodes = new Map();\n this.templateId = renderer.templateId;\n }\n renderTemplate(container) {\n const templateData = this.renderer.renderTemplate(container);\n return { templateData };\n }\n renderElement(node, index, templateData, height) {\n this.renderer.renderElement(this.nodeMapper.map(node), index, templateData.templateData, height);\n }\n renderTwistie(element, twistieElement) {\n if (element.slow) {\n twistieElement.classList.add(...ThemeIcon.asClassNameArray(Codicon.treeItemLoading));\n return true;\n }\n else {\n twistieElement.classList.remove(...ThemeIcon.asClassNameArray(Codicon.treeItemLoading));\n return false;\n }\n }\n disposeElement(node, index, templateData, height) {\n var _a, _b;\n (_b = (_a = this.renderer).disposeElement) === null || _b === void 0 ? void 0 : _b.call(_a, this.nodeMapper.map(node), index, templateData.templateData, height);\n }\n disposeTemplate(templateData) {\n this.renderer.disposeTemplate(templateData.templateData);\n }\n dispose() {\n this.renderedNodes.clear();\n }\n}\nfunction asTreeEvent(e) {\n return {\n browserEvent: e.browserEvent,\n elements: e.elements.map(e => e.element)\n };\n}\nfunction asTreeMouseEvent(e) {\n return {\n browserEvent: e.browserEvent,\n element: e.element && e.element.element,\n target: e.target\n };\n}\nclass AsyncDataTreeElementsDragAndDropData extends ElementsDragAndDropData {\n constructor(data) {\n super(data.elements.map(node => node.element));\n this.data = data;\n }\n}\nfunction asAsyncDataTreeDragAndDropData(data) {\n if (data instanceof ElementsDragAndDropData) {\n return new AsyncDataTreeElementsDragAndDropData(data);\n }\n return data;\n}\nclass AsyncDataTreeNodeListDragAndDrop {\n constructor(dnd) {\n this.dnd = dnd;\n }\n getDragURI(node) {\n return this.dnd.getDragURI(node.element);\n }\n getDragLabel(nodes, originalEvent) {\n if (this.dnd.getDragLabel) {\n return this.dnd.getDragLabel(nodes.map(node => node.element), originalEvent);\n }\n return undefined;\n }\n onDragStart(data, originalEvent) {\n var _a, _b;\n (_b = (_a = this.dnd).onDragStart) === null || _b === void 0 ? void 0 : _b.call(_a, asAsyncDataTreeDragAndDropData(data), originalEvent);\n }\n onDragOver(data, targetNode, targetIndex, targetSector, originalEvent, raw = true) {\n return this.dnd.onDragOver(asAsyncDataTreeDragAndDropData(data), targetNode && targetNode.element, targetIndex, targetSector, originalEvent);\n }\n drop(data, targetNode, targetIndex, targetSector, originalEvent) {\n this.dnd.drop(asAsyncDataTreeDragAndDropData(data), targetNode && targetNode.element, targetIndex, targetSector, originalEvent);\n }\n onDragEnd(originalEvent) {\n var _a, _b;\n (_b = (_a = this.dnd).onDragEnd) === null || _b === void 0 ? void 0 : _b.call(_a, originalEvent);\n }\n dispose() {\n this.dnd.dispose();\n }\n}\nfunction asObjectTreeOptions(options) {\n return options && {\n ...options,\n collapseByDefault: true,\n identityProvider: options.identityProvider && {\n getId(el) {\n return options.identityProvider.getId(el.element);\n }\n },\n dnd: options.dnd && new AsyncDataTreeNodeListDragAndDrop(options.dnd),\n multipleSelectionController: options.multipleSelectionController && {\n isSelectionSingleChangeEvent(e) {\n return options.multipleSelectionController.isSelectionSingleChangeEvent({ ...e, element: e.element });\n },\n isSelectionRangeChangeEvent(e) {\n return options.multipleSelectionController.isSelectionRangeChangeEvent({ ...e, element: e.element });\n }\n },\n accessibilityProvider: options.accessibilityProvider && {\n ...options.accessibilityProvider,\n getPosInSet: undefined,\n getSetSize: undefined,\n getRole: options.accessibilityProvider.getRole ? (el) => {\n return options.accessibilityProvider.getRole(el.element);\n } : () => 'treeitem',\n isChecked: options.accessibilityProvider.isChecked ? (e) => {\n var _a;\n return !!((_a = options.accessibilityProvider) === null || _a === void 0 ? void 0 : _a.isChecked(e.element));\n } : undefined,\n getAriaLabel(e) {\n return options.accessibilityProvider.getAriaLabel(e.element);\n },\n getWidgetAriaLabel() {\n return options.accessibilityProvider.getWidgetAriaLabel();\n },\n getWidgetRole: options.accessibilityProvider.getWidgetRole ? () => options.accessibilityProvider.getWidgetRole() : () => 'tree',\n getAriaLevel: options.accessibilityProvider.getAriaLevel && (node => {\n return options.accessibilityProvider.getAriaLevel(node.element);\n }),\n getActiveDescendantId: options.accessibilityProvider.getActiveDescendantId && (node => {\n return options.accessibilityProvider.getActiveDescendantId(node.element);\n })\n },\n filter: options.filter && {\n filter(e, parentVisibility) {\n return options.filter.filter(e.element, parentVisibility);\n }\n },\n keyboardNavigationLabelProvider: options.keyboardNavigationLabelProvider && {\n ...options.keyboardNavigationLabelProvider,\n getKeyboardNavigationLabel(e) {\n return options.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(e.element);\n }\n },\n sorter: undefined,\n expandOnlyOnTwistieClick: typeof options.expandOnlyOnTwistieClick === 'undefined' ? undefined : (typeof options.expandOnlyOnTwistieClick !== 'function' ? options.expandOnlyOnTwistieClick : (e => options.expandOnlyOnTwistieClick(e.element))),\n defaultFindVisibility: e => {\n if (e.hasChildren && e.stale) {\n return 1 /* TreeVisibility.Visible */;\n }\n else if (typeof options.defaultFindVisibility === 'number') {\n return options.defaultFindVisibility;\n }\n else if (typeof options.defaultFindVisibility === 'undefined') {\n return 2 /* TreeVisibility.Recurse */;\n }\n else {\n return options.defaultFindVisibility(e.element);\n }\n }\n };\n}\nfunction dfs(node, fn) {\n fn(node);\n node.children.forEach(child => dfs(child, fn));\n}\nexport class AsyncDataTree {\n get onDidScroll() { return this.tree.onDidScroll; }\n get onDidChangeFocus() { return Event.map(this.tree.onDidChangeFocus, asTreeEvent); }\n get onDidChangeSelection() { return Event.map(this.tree.onDidChangeSelection, asTreeEvent); }\n get onMouseDblClick() { return Event.map(this.tree.onMouseDblClick, asTreeMouseEvent); }\n get onPointer() { return Event.map(this.tree.onPointer, asTreeMouseEvent); }\n get onDidFocus() { return this.tree.onDidFocus; }\n /**\n * To be used internally only!\n * @deprecated\n */\n get onDidChangeModel() { return this.tree.onDidChangeModel; }\n get onDidChangeCollapseState() { return this.tree.onDidChangeCollapseState; }\n get onDidChangeFindOpenState() { return this.tree.onDidChangeFindOpenState; }\n get onDidChangeStickyScrollFocused() { return this.tree.onDidChangeStickyScrollFocused; }\n get onDidDispose() { return this.tree.onDidDispose; }\n constructor(user, container, delegate, renderers, dataSource, options = {}) {\n this.user = user;\n this.dataSource = dataSource;\n this.nodes = new Map();\n this.subTreeRefreshPromises = new Map();\n this.refreshPromises = new Map();\n this._onDidRender = new Emitter();\n this._onDidChangeNodeSlowState = new Emitter();\n this.nodeMapper = new WeakMapper(node => new AsyncDataTreeNodeWrapper(node));\n this.disposables = new DisposableStore();\n this.identityProvider = options.identityProvider;\n this.autoExpandSingleChildren = typeof options.autoExpandSingleChildren === 'undefined' ? false : options.autoExpandSingleChildren;\n this.sorter = options.sorter;\n this.getDefaultCollapseState = e => options.collapseByDefault ? (options.collapseByDefault(e) ? ObjectTreeElementCollapseState.PreserveOrCollapsed : ObjectTreeElementCollapseState.PreserveOrExpanded) : undefined;\n this.tree = this.createTree(user, container, delegate, renderers, options);\n this.onDidChangeFindMode = this.tree.onDidChangeFindMode;\n this.onDidChangeFindMatchType = this.tree.onDidChangeFindMatchType;\n this.root = createAsyncDataTreeNode({\n element: undefined,\n parent: null,\n hasChildren: true,\n defaultCollapseState: undefined\n });\n if (this.identityProvider) {\n this.root = {\n ...this.root,\n id: null\n };\n }\n this.nodes.set(null, this.root);\n this.tree.onDidChangeCollapseState(this._onDidChangeCollapseState, this, this.disposables);\n }\n createTree(user, container, delegate, renderers, options) {\n const objectTreeDelegate = new ComposedTreeDelegate(delegate);\n const objectTreeRenderers = renderers.map(r => new AsyncDataTreeRenderer(r, this.nodeMapper, this._onDidChangeNodeSlowState.event));\n const objectTreeOptions = asObjectTreeOptions(options) || {};\n return new ObjectTree(user, container, objectTreeDelegate, objectTreeRenderers, objectTreeOptions);\n }\n updateOptions(options = {}) {\n this.tree.updateOptions(options);\n }\n // Widget\n getHTMLElement() {\n return this.tree.getHTMLElement();\n }\n get scrollTop() {\n return this.tree.scrollTop;\n }\n set scrollTop(scrollTop) {\n this.tree.scrollTop = scrollTop;\n }\n get scrollHeight() {\n return this.tree.scrollHeight;\n }\n get renderHeight() {\n return this.tree.renderHeight;\n }\n domFocus() {\n this.tree.domFocus();\n }\n layout(height, width) {\n this.tree.layout(height, width);\n }\n style(styles) {\n this.tree.style(styles);\n }\n // Model\n getInput() {\n return this.root.element;\n }\n async setInput(input, viewState) {\n this.refreshPromises.forEach(promise => promise.cancel());\n this.refreshPromises.clear();\n this.root.element = input;\n const viewStateContext = viewState && { viewState, focus: [], selection: [] };\n await this._updateChildren(input, true, false, viewStateContext);\n if (viewStateContext) {\n this.tree.setFocus(viewStateContext.focus);\n this.tree.setSelection(viewStateContext.selection);\n }\n if (viewState && typeof viewState.scrollTop === 'number') {\n this.scrollTop = viewState.scrollTop;\n }\n }\n async _updateChildren(element = this.root.element, recursive = true, rerender = false, viewStateContext, options) {\n if (typeof this.root.element === 'undefined') {\n throw new TreeError(this.user, 'Tree input not set');\n }\n if (this.root.refreshPromise) {\n await this.root.refreshPromise;\n await Event.toPromise(this._onDidRender.event);\n }\n const node = this.getDataNode(element);\n await this.refreshAndRenderNode(node, recursive, viewStateContext, options);\n if (rerender) {\n try {\n this.tree.rerender(node);\n }\n catch (_a) {\n // missing nodes are fine, this could've resulted from\n // parallel refresh calls, removing `node` altogether\n }\n }\n }\n // View\n rerender(element) {\n if (element === undefined || element === this.root.element) {\n this.tree.rerender();\n return;\n }\n const node = this.getDataNode(element);\n this.tree.rerender(node);\n }\n // Tree\n getNode(element = this.root.element) {\n const dataNode = this.getDataNode(element);\n const node = this.tree.getNode(dataNode === this.root ? null : dataNode);\n return this.nodeMapper.map(node);\n }\n collapse(element, recursive = false) {\n const node = this.getDataNode(element);\n return this.tree.collapse(node === this.root ? null : node, recursive);\n }\n async expand(element, recursive = false) {\n if (typeof this.root.element === 'undefined') {\n throw new TreeError(this.user, 'Tree input not set');\n }\n if (this.root.refreshPromise) {\n await this.root.refreshPromise;\n await Event.toPromise(this._onDidRender.event);\n }\n const node = this.getDataNode(element);\n if (this.tree.hasElement(node) && !this.tree.isCollapsible(node)) {\n return false;\n }\n if (node.refreshPromise) {\n await this.root.refreshPromise;\n await Event.toPromise(this._onDidRender.event);\n }\n if (node !== this.root && !node.refreshPromise && !this.tree.isCollapsed(node)) {\n return false;\n }\n const result = this.tree.expand(node === this.root ? null : node, recursive);\n if (node.refreshPromise) {\n await this.root.refreshPromise;\n await Event.toPromise(this._onDidRender.event);\n }\n return result;\n }\n setSelection(elements, browserEvent) {\n const nodes = elements.map(e => this.getDataNode(e));\n this.tree.setSelection(nodes, browserEvent);\n }\n getSelection() {\n const nodes = this.tree.getSelection();\n return nodes.map(n => n.element);\n }\n setFocus(elements, browserEvent) {\n const nodes = elements.map(e => this.getDataNode(e));\n this.tree.setFocus(nodes, browserEvent);\n }\n getFocus() {\n const nodes = this.tree.getFocus();\n return nodes.map(n => n.element);\n }\n reveal(element, relativeTop) {\n this.tree.reveal(this.getDataNode(element), relativeTop);\n }\n // Tree navigation\n getParentElement(element) {\n const node = this.tree.getParentElement(this.getDataNode(element));\n return (node && node.element);\n }\n getFirstElementChild(element = this.root.element) {\n const dataNode = this.getDataNode(element);\n const node = this.tree.getFirstElementChild(dataNode === this.root ? null : dataNode);\n return (node && node.element);\n }\n // Implementation\n getDataNode(element) {\n const node = this.nodes.get((element === this.root.element ? null : element));\n if (!node) {\n throw new TreeError(this.user, `Data tree node not found: ${element}`);\n }\n return node;\n }\n async refreshAndRenderNode(node, recursive, viewStateContext, options) {\n await this.refreshNode(node, recursive, viewStateContext);\n if (this.disposables.isDisposed) {\n return; // tree disposed during refresh (#199264)\n }\n this.render(node, viewStateContext, options);\n }\n async refreshNode(node, recursive, viewStateContext) {\n let result;\n this.subTreeRefreshPromises.forEach((refreshPromise, refreshNode) => {\n if (!result && intersects(refreshNode, node)) {\n result = refreshPromise.then(() => this.refreshNode(node, recursive, viewStateContext));\n }\n });\n if (result) {\n return result;\n }\n if (node !== this.root) {\n const treeNode = this.tree.getNode(node);\n if (treeNode.collapsed) {\n node.hasChildren = !!this.dataSource.hasChildren(node.element);\n node.stale = true;\n this.setChildren(node, [], recursive, viewStateContext);\n return;\n }\n }\n return this.doRefreshSubTree(node, recursive, viewStateContext);\n }\n async doRefreshSubTree(node, recursive, viewStateContext) {\n let done;\n node.refreshPromise = new Promise(c => done = c);\n this.subTreeRefreshPromises.set(node, node.refreshPromise);\n node.refreshPromise.finally(() => {\n node.refreshPromise = undefined;\n this.subTreeRefreshPromises.delete(node);\n });\n try {\n const childrenToRefresh = await this.doRefreshNode(node, recursive, viewStateContext);\n node.stale = false;\n await Promises.settled(childrenToRefresh.map(child => this.doRefreshSubTree(child, recursive, viewStateContext)));\n }\n finally {\n done();\n }\n }\n async doRefreshNode(node, recursive, viewStateContext) {\n node.hasChildren = !!this.dataSource.hasChildren(node.element);\n let childrenPromise;\n if (!node.hasChildren) {\n childrenPromise = Promise.resolve(Iterable.empty());\n }\n else {\n const children = this.doGetChildren(node);\n if (isIterable(children)) {\n childrenPromise = Promise.resolve(children);\n }\n else {\n const slowTimeout = timeout(800);\n slowTimeout.then(() => {\n node.slow = true;\n this._onDidChangeNodeSlowState.fire(node);\n }, _ => null);\n childrenPromise = children.finally(() => slowTimeout.cancel());\n }\n }\n try {\n const children = await childrenPromise;\n return this.setChildren(node, children, recursive, viewStateContext);\n }\n catch (err) {\n if (node !== this.root && this.tree.hasElement(node)) {\n this.tree.collapse(node);\n }\n if (isCancellationError(err)) {\n return [];\n }\n throw err;\n }\n finally {\n if (node.slow) {\n node.slow = false;\n this._onDidChangeNodeSlowState.fire(node);\n }\n }\n }\n doGetChildren(node) {\n let result = this.refreshPromises.get(node);\n if (result) {\n return result;\n }\n const children = this.dataSource.getChildren(node.element);\n if (isIterable(children)) {\n return this.processChildren(children);\n }\n else {\n result = createCancelablePromise(async () => this.processChildren(await children));\n this.refreshPromises.set(node, result);\n return result.finally(() => { this.refreshPromises.delete(node); });\n }\n }\n _onDidChangeCollapseState({ node, deep }) {\n if (node.element === null) {\n return;\n }\n if (!node.collapsed && node.element.stale) {\n if (deep) {\n this.collapse(node.element.element);\n }\n else {\n this.refreshAndRenderNode(node.element, false)\n .catch(onUnexpectedError);\n }\n }\n }\n setChildren(node, childrenElementsIterable, recursive, viewStateContext) {\n const childrenElements = [...childrenElementsIterable];\n // perf: if the node was and still is a leaf, avoid all this hassle\n if (node.children.length === 0 && childrenElements.length === 0) {\n return [];\n }\n const nodesToForget = new Map();\n const childrenTreeNodesById = new Map();\n for (const child of node.children) {\n nodesToForget.set(child.element, child);\n if (this.identityProvider) {\n childrenTreeNodesById.set(child.id, { node: child, collapsed: this.tree.hasElement(child) && this.tree.isCollapsed(child) });\n }\n }\n const childrenToRefresh = [];\n const children = childrenElements.map(element => {\n const hasChildren = !!this.dataSource.hasChildren(element);\n if (!this.identityProvider) {\n const asyncDataTreeNode = createAsyncDataTreeNode({ element, parent: node, hasChildren, defaultCollapseState: this.getDefaultCollapseState(element) });\n if (hasChildren && asyncDataTreeNode.defaultCollapseState === ObjectTreeElementCollapseState.PreserveOrExpanded) {\n childrenToRefresh.push(asyncDataTreeNode);\n }\n return asyncDataTreeNode;\n }\n const id = this.identityProvider.getId(element).toString();\n const result = childrenTreeNodesById.get(id);\n if (result) {\n const asyncDataTreeNode = result.node;\n nodesToForget.delete(asyncDataTreeNode.element);\n this.nodes.delete(asyncDataTreeNode.element);\n this.nodes.set(element, asyncDataTreeNode);\n asyncDataTreeNode.element = element;\n asyncDataTreeNode.hasChildren = hasChildren;\n if (recursive) {\n if (result.collapsed) {\n asyncDataTreeNode.children.forEach(node => dfs(node, node => this.nodes.delete(node.element)));\n asyncDataTreeNode.children.splice(0, asyncDataTreeNode.children.length);\n asyncDataTreeNode.stale = true;\n }\n else {\n childrenToRefresh.push(asyncDataTreeNode);\n }\n }\n else if (hasChildren && !result.collapsed) {\n childrenToRefresh.push(asyncDataTreeNode);\n }\n return asyncDataTreeNode;\n }\n const childAsyncDataTreeNode = createAsyncDataTreeNode({ element, parent: node, id, hasChildren, defaultCollapseState: this.getDefaultCollapseState(element) });\n if (viewStateContext && viewStateContext.viewState.focus && viewStateContext.viewState.focus.indexOf(id) > -1) {\n viewStateContext.focus.push(childAsyncDataTreeNode);\n }\n if (viewStateContext && viewStateContext.viewState.selection && viewStateContext.viewState.selection.indexOf(id) > -1) {\n viewStateContext.selection.push(childAsyncDataTreeNode);\n }\n if (viewStateContext && viewStateContext.viewState.expanded && viewStateContext.viewState.expanded.indexOf(id) > -1) {\n childrenToRefresh.push(childAsyncDataTreeNode);\n }\n else if (hasChildren && childAsyncDataTreeNode.defaultCollapseState === ObjectTreeElementCollapseState.PreserveOrExpanded) {\n childrenToRefresh.push(childAsyncDataTreeNode);\n }\n return childAsyncDataTreeNode;\n });\n for (const node of nodesToForget.values()) {\n dfs(node, node => this.nodes.delete(node.element));\n }\n for (const child of children) {\n this.nodes.set(child.element, child);\n }\n node.children.splice(0, node.children.length, ...children);\n // TODO@joao this doesn't take filter into account\n if (node !== this.root && this.autoExpandSingleChildren && children.length === 1 && childrenToRefresh.length === 0) {\n children[0].forceExpanded = true;\n childrenToRefresh.push(children[0]);\n }\n return childrenToRefresh;\n }\n render(node, viewStateContext, options) {\n const children = node.children.map(node => this.asTreeElement(node, viewStateContext));\n const objectTreeOptions = options && {\n ...options,\n diffIdentityProvider: options.diffIdentityProvider && {\n getId(node) {\n return options.diffIdentityProvider.getId(node.element);\n }\n }\n };\n this.tree.setChildren(node === this.root ? null : node, children, objectTreeOptions);\n if (node !== this.root) {\n this.tree.setCollapsible(node, node.hasChildren);\n }\n this._onDidRender.fire();\n }\n asTreeElement(node, viewStateContext) {\n if (node.stale) {\n return {\n element: node,\n collapsible: node.hasChildren,\n collapsed: true\n };\n }\n let collapsed;\n if (viewStateContext && viewStateContext.viewState.expanded && node.id && viewStateContext.viewState.expanded.indexOf(node.id) > -1) {\n collapsed = false;\n }\n else if (node.forceExpanded) {\n collapsed = false;\n node.forceExpanded = false;\n }\n else {\n collapsed = node.defaultCollapseState;\n }\n return {\n element: node,\n children: node.hasChildren ? Iterable.map(node.children, child => this.asTreeElement(child, viewStateContext)) : [],\n collapsible: node.hasChildren,\n collapsed\n };\n }\n processChildren(children) {\n if (this.sorter) {\n children = [...children].sort(this.sorter.compare.bind(this.sorter));\n }\n return children;\n }\n dispose() {\n this.disposables.dispose();\n this.tree.dispose();\n }\n}\nclass CompressibleAsyncDataTreeNodeWrapper {\n get element() {\n return {\n elements: this.node.element.elements.map(e => e.element),\n incompressible: this.node.element.incompressible\n };\n }\n get children() { return this.node.children.map(node => new CompressibleAsyncDataTreeNodeWrapper(node)); }\n get depth() { return this.node.depth; }\n get visibleChildrenCount() { return this.node.visibleChildrenCount; }\n get visibleChildIndex() { return this.node.visibleChildIndex; }\n get collapsible() { return this.node.collapsible; }\n get collapsed() { return this.node.collapsed; }\n get visible() { return this.node.visible; }\n get filterData() { return this.node.filterData; }\n constructor(node) {\n this.node = node;\n }\n}\nclass CompressibleAsyncDataTreeRenderer {\n constructor(renderer, nodeMapper, compressibleNodeMapperProvider, onDidChangeTwistieState) {\n this.renderer = renderer;\n this.nodeMapper = nodeMapper;\n this.compressibleNodeMapperProvider = compressibleNodeMapperProvider;\n this.onDidChangeTwistieState = onDidChangeTwistieState;\n this.renderedNodes = new Map();\n this.disposables = [];\n this.templateId = renderer.templateId;\n }\n renderTemplate(container) {\n const templateData = this.renderer.renderTemplate(container);\n return { templateData };\n }\n renderElement(node, index, templateData, height) {\n this.renderer.renderElement(this.nodeMapper.map(node), index, templateData.templateData, height);\n }\n renderCompressedElements(node, index, templateData, height) {\n this.renderer.renderCompressedElements(this.compressibleNodeMapperProvider().map(node), index, templateData.templateData, height);\n }\n renderTwistie(element, twistieElement) {\n if (element.slow) {\n twistieElement.classList.add(...ThemeIcon.asClassNameArray(Codicon.treeItemLoading));\n return true;\n }\n else {\n twistieElement.classList.remove(...ThemeIcon.asClassNameArray(Codicon.treeItemLoading));\n return false;\n }\n }\n disposeElement(node, index, templateData, height) {\n var _a, _b;\n (_b = (_a = this.renderer).disposeElement) === null || _b === void 0 ? void 0 : _b.call(_a, this.nodeMapper.map(node), index, templateData.templateData, height);\n }\n disposeCompressedElements(node, index, templateData, height) {\n var _a, _b;\n (_b = (_a = this.renderer).disposeCompressedElements) === null || _b === void 0 ? void 0 : _b.call(_a, this.compressibleNodeMapperProvider().map(node), index, templateData.templateData, height);\n }\n disposeTemplate(templateData) {\n this.renderer.disposeTemplate(templateData.templateData);\n }\n dispose() {\n this.renderedNodes.clear();\n this.disposables = dispose(this.disposables);\n }\n}\nfunction asCompressibleObjectTreeOptions(options) {\n const objectTreeOptions = options && asObjectTreeOptions(options);\n return objectTreeOptions && {\n ...objectTreeOptions,\n keyboardNavigationLabelProvider: objectTreeOptions.keyboardNavigationLabelProvider && {\n ...objectTreeOptions.keyboardNavigationLabelProvider,\n getCompressedNodeKeyboardNavigationLabel(els) {\n return options.keyboardNavigationLabelProvider.getCompressedNodeKeyboardNavigationLabel(els.map(e => e.element));\n }\n }\n };\n}\nexport class CompressibleAsyncDataTree extends AsyncDataTree {\n constructor(user, container, virtualDelegate, compressionDelegate, renderers, dataSource, options = {}) {\n super(user, container, virtualDelegate, renderers, dataSource, options);\n this.compressionDelegate = compressionDelegate;\n this.compressibleNodeMapper = new WeakMapper(node => new CompressibleAsyncDataTreeNodeWrapper(node));\n this.filter = options.filter;\n }\n createTree(user, container, delegate, renderers, options) {\n const objectTreeDelegate = new ComposedTreeDelegate(delegate);\n const objectTreeRenderers = renderers.map(r => new CompressibleAsyncDataTreeRenderer(r, this.nodeMapper, () => this.compressibleNodeMapper, this._onDidChangeNodeSlowState.event));\n const objectTreeOptions = asCompressibleObjectTreeOptions(options) || {};\n return new CompressibleObjectTree(user, container, objectTreeDelegate, objectTreeRenderers, objectTreeOptions);\n }\n asTreeElement(node, viewStateContext) {\n return {\n incompressible: this.compressionDelegate.isIncompressible(node.element),\n ...super.asTreeElement(node, viewStateContext)\n };\n }\n updateOptions(options = {}) {\n this.tree.updateOptions(options);\n }\n render(node, viewStateContext, options) {\n if (!this.identityProvider) {\n return super.render(node, viewStateContext);\n }\n // Preserve traits across compressions. Hacky but does the trick.\n // This is hard to fix properly since it requires rewriting the traits\n // across trees and lists. Let's just keep it this way for now.\n const getId = (element) => this.identityProvider.getId(element).toString();\n const getUncompressedIds = (nodes) => {\n const result = new Set();\n for (const node of nodes) {\n const compressedNode = this.tree.getCompressedTreeNode(node === this.root ? null : node);\n if (!compressedNode.element) {\n continue;\n }\n for (const node of compressedNode.element.elements) {\n result.add(getId(node.element));\n }\n }\n return result;\n };\n const oldSelection = getUncompressedIds(this.tree.getSelection());\n const oldFocus = getUncompressedIds(this.tree.getFocus());\n super.render(node, viewStateContext, options);\n const selection = this.getSelection();\n let didChangeSelection = false;\n const focus = this.getFocus();\n let didChangeFocus = false;\n const visit = (node) => {\n const compressedNode = node.element;\n if (compressedNode) {\n for (let i = 0; i < compressedNode.elements.length; i++) {\n const id = getId(compressedNode.elements[i].element);\n const element = compressedNode.elements[compressedNode.elements.length - 1].element;\n // github.com/microsoft/vscode/issues/85938\n if (oldSelection.has(id) && selection.indexOf(element) === -1) {\n selection.push(element);\n didChangeSelection = true;\n }\n if (oldFocus.has(id) && focus.indexOf(element) === -1) {\n focus.push(element);\n didChangeFocus = true;\n }\n }\n }\n node.children.forEach(visit);\n };\n visit(this.tree.getCompressedTreeNode(node === this.root ? null : node));\n if (didChangeSelection) {\n this.setSelection(selection);\n }\n if (didChangeFocus) {\n this.setFocus(focus);\n }\n }\n // For compressed async data trees, `TreeVisibility.Recurse` doesn't currently work\n // and we have to filter everything beforehand\n // Related to #85193 and #85835\n processChildren(children) {\n if (this.filter) {\n children = Iterable.filter(children, e => {\n const result = this.filter.filter(e, 1 /* TreeVisibility.Visible */);\n const visibility = getVisibility(result);\n if (visibility === 2 /* TreeVisibility.Recurse */) {\n throw new Error('Recursive tree visibility not supported in async data compressed trees');\n }\n return visibility === 1 /* TreeVisibility.Visible */;\n });\n }\n return super.processChildren(children);\n }\n}\nfunction getVisibility(filterResult) {\n if (typeof filterResult === 'boolean') {\n return filterResult ? 1 /* TreeVisibility.Visible */ : 0 /* TreeVisibility.Hidden */;\n }\n else if (isFilterResult(filterResult)) {\n return getVisibleState(filterResult.visibility);\n }\n else {\n return getVisibleState(filterResult);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { ObjectTreeModel } from './objectTreeModel.js';\nimport { TreeError, WeakMapper } from './tree.js';\nimport { equals } from '../../../common/arrays.js';\nimport { Event } from '../../../common/event.js';\nimport { Iterable } from '../../../common/iterator.js';\nfunction noCompress(element) {\n const elements = [element.element];\n const incompressible = element.incompressible || false;\n return {\n element: { elements, incompressible },\n children: Iterable.map(Iterable.from(element.children), noCompress),\n collapsible: element.collapsible,\n collapsed: element.collapsed\n };\n}\n// Exported only for test reasons, do not use directly\nexport function compress(element) {\n const elements = [element.element];\n const incompressible = element.incompressible || false;\n let childrenIterator;\n let children;\n while (true) {\n [children, childrenIterator] = Iterable.consume(Iterable.from(element.children), 2);\n if (children.length !== 1) {\n break;\n }\n if (children[0].incompressible) {\n break;\n }\n element = children[0];\n elements.push(element.element);\n }\n return {\n element: { elements, incompressible },\n children: Iterable.map(Iterable.concat(children, childrenIterator), compress),\n collapsible: element.collapsible,\n collapsed: element.collapsed\n };\n}\nfunction _decompress(element, index = 0) {\n let children;\n if (index < element.element.elements.length - 1) {\n children = [_decompress(element, index + 1)];\n }\n else {\n children = Iterable.map(Iterable.from(element.children), el => _decompress(el, 0));\n }\n if (index === 0 && element.element.incompressible) {\n return {\n element: element.element.elements[index],\n children,\n incompressible: true,\n collapsible: element.collapsible,\n collapsed: element.collapsed\n };\n }\n return {\n element: element.element.elements[index],\n children,\n collapsible: element.collapsible,\n collapsed: element.collapsed\n };\n}\n// Exported only for test reasons, do not use directly\nexport function decompress(element) {\n return _decompress(element, 0);\n}\nfunction splice(treeElement, element, children) {\n if (treeElement.element === element) {\n return { ...treeElement, children };\n }\n return { ...treeElement, children: Iterable.map(Iterable.from(treeElement.children), e => splice(e, element, children)) };\n}\nconst wrapIdentityProvider = (base) => ({\n getId(node) {\n return node.elements.map(e => base.getId(e).toString()).join('\\0');\n }\n});\n// Exported only for test reasons, do not use directly\nexport class CompressedObjectTreeModel {\n get onDidSplice() { return this.model.onDidSplice; }\n get onDidChangeCollapseState() { return this.model.onDidChangeCollapseState; }\n get onDidChangeRenderNodeCount() { return this.model.onDidChangeRenderNodeCount; }\n constructor(user, list, options = {}) {\n this.user = user;\n this.rootRef = null;\n this.nodes = new Map();\n this.model = new ObjectTreeModel(user, list, options);\n this.enabled = typeof options.compressionEnabled === 'undefined' ? true : options.compressionEnabled;\n this.identityProvider = options.identityProvider;\n }\n setChildren(element, children = Iterable.empty(), options) {\n // Diffs must be deep, since the compression can affect nested elements.\n // @see https://github.com/microsoft/vscode/pull/114237#issuecomment-759425034\n const diffIdentityProvider = options.diffIdentityProvider && wrapIdentityProvider(options.diffIdentityProvider);\n if (element === null) {\n const compressedChildren = Iterable.map(children, this.enabled ? compress : noCompress);\n this._setChildren(null, compressedChildren, { diffIdentityProvider, diffDepth: Infinity });\n return;\n }\n const compressedNode = this.nodes.get(element);\n if (!compressedNode) {\n throw new TreeError(this.user, 'Unknown compressed tree node');\n }\n const node = this.model.getNode(compressedNode);\n const compressedParentNode = this.model.getParentNodeLocation(compressedNode);\n const parent = this.model.getNode(compressedParentNode);\n const decompressedElement = decompress(node);\n const splicedElement = splice(decompressedElement, element, children);\n const recompressedElement = (this.enabled ? compress : noCompress)(splicedElement);\n // If the recompressed node is identical to the original, just set its children.\n // Saves work and churn diffing the parent element.\n const elementComparator = options.diffIdentityProvider\n ? ((a, b) => options.diffIdentityProvider.getId(a) === options.diffIdentityProvider.getId(b))\n : undefined;\n if (equals(recompressedElement.element.elements, node.element.elements, elementComparator)) {\n this._setChildren(compressedNode, recompressedElement.children || Iterable.empty(), { diffIdentityProvider, diffDepth: 1 });\n return;\n }\n const parentChildren = parent.children\n .map(child => child === node ? recompressedElement : child);\n this._setChildren(parent.element, parentChildren, {\n diffIdentityProvider,\n diffDepth: node.depth - parent.depth,\n });\n }\n isCompressionEnabled() {\n return this.enabled;\n }\n setCompressionEnabled(enabled) {\n if (enabled === this.enabled) {\n return;\n }\n this.enabled = enabled;\n const root = this.model.getNode();\n const rootChildren = root.children;\n const decompressedRootChildren = Iterable.map(rootChildren, decompress);\n const recompressedRootChildren = Iterable.map(decompressedRootChildren, enabled ? compress : noCompress);\n // it should be safe to always use deep diff mode here if an identity\n // provider is available, since we know the raw nodes are unchanged.\n this._setChildren(null, recompressedRootChildren, {\n diffIdentityProvider: this.identityProvider,\n diffDepth: Infinity,\n });\n }\n _setChildren(node, children, options) {\n const insertedElements = new Set();\n const onDidCreateNode = (node) => {\n for (const element of node.element.elements) {\n insertedElements.add(element);\n this.nodes.set(element, node.element);\n }\n };\n const onDidDeleteNode = (node) => {\n for (const element of node.element.elements) {\n if (!insertedElements.has(element)) {\n this.nodes.delete(element);\n }\n }\n };\n this.model.setChildren(node, children, { ...options, onDidCreateNode, onDidDeleteNode });\n }\n has(element) {\n return this.nodes.has(element);\n }\n getListIndex(location) {\n const node = this.getCompressedNode(location);\n return this.model.getListIndex(node);\n }\n getListRenderCount(location) {\n const node = this.getCompressedNode(location);\n return this.model.getListRenderCount(node);\n }\n getNode(location) {\n if (typeof location === 'undefined') {\n return this.model.getNode();\n }\n const node = this.getCompressedNode(location);\n return this.model.getNode(node);\n }\n // TODO: review this\n getNodeLocation(node) {\n const compressedNode = this.model.getNodeLocation(node);\n if (compressedNode === null) {\n return null;\n }\n return compressedNode.elements[compressedNode.elements.length - 1];\n }\n // TODO: review this\n getParentNodeLocation(location) {\n const compressedNode = this.getCompressedNode(location);\n const parentNode = this.model.getParentNodeLocation(compressedNode);\n if (parentNode === null) {\n return null;\n }\n return parentNode.elements[parentNode.elements.length - 1];\n }\n getFirstElementChild(location) {\n const compressedNode = this.getCompressedNode(location);\n return this.model.getFirstElementChild(compressedNode);\n }\n isCollapsible(location) {\n const compressedNode = this.getCompressedNode(location);\n return this.model.isCollapsible(compressedNode);\n }\n setCollapsible(location, collapsible) {\n const compressedNode = this.getCompressedNode(location);\n return this.model.setCollapsible(compressedNode, collapsible);\n }\n isCollapsed(location) {\n const compressedNode = this.getCompressedNode(location);\n return this.model.isCollapsed(compressedNode);\n }\n setCollapsed(location, collapsed, recursive) {\n const compressedNode = this.getCompressedNode(location);\n return this.model.setCollapsed(compressedNode, collapsed, recursive);\n }\n expandTo(location) {\n const compressedNode = this.getCompressedNode(location);\n this.model.expandTo(compressedNode);\n }\n rerender(location) {\n const compressedNode = this.getCompressedNode(location);\n this.model.rerender(compressedNode);\n }\n refilter() {\n this.model.refilter();\n }\n getCompressedNode(element) {\n if (element === null) {\n return null;\n }\n const node = this.nodes.get(element);\n if (!node) {\n throw new TreeError(this.user, `Tree element not found: ${element}`);\n }\n return node;\n }\n}\nexport const DefaultElementMapper = elements => elements[elements.length - 1];\nclass CompressedTreeNodeWrapper {\n get element() { return this.node.element === null ? null : this.unwrapper(this.node.element); }\n get children() { return this.node.children.map(node => new CompressedTreeNodeWrapper(this.unwrapper, node)); }\n get depth() { return this.node.depth; }\n get visibleChildrenCount() { return this.node.visibleChildrenCount; }\n get visibleChildIndex() { return this.node.visibleChildIndex; }\n get collapsible() { return this.node.collapsible; }\n get collapsed() { return this.node.collapsed; }\n get visible() { return this.node.visible; }\n get filterData() { return this.node.filterData; }\n constructor(unwrapper, node) {\n this.unwrapper = unwrapper;\n this.node = node;\n }\n}\nfunction mapList(nodeMapper, list) {\n return {\n splice(start, deleteCount, toInsert) {\n list.splice(start, deleteCount, toInsert.map(node => nodeMapper.map(node)));\n },\n updateElementHeight(index, height) {\n list.updateElementHeight(index, height);\n }\n };\n}\nfunction mapOptions(compressedNodeUnwrapper, options) {\n return {\n ...options,\n identityProvider: options.identityProvider && {\n getId(node) {\n return options.identityProvider.getId(compressedNodeUnwrapper(node));\n }\n },\n sorter: options.sorter && {\n compare(node, otherNode) {\n return options.sorter.compare(node.elements[0], otherNode.elements[0]);\n }\n },\n filter: options.filter && {\n filter(node, parentVisibility) {\n return options.filter.filter(compressedNodeUnwrapper(node), parentVisibility);\n }\n }\n };\n}\nexport class CompressibleObjectTreeModel {\n get onDidSplice() {\n return Event.map(this.model.onDidSplice, ({ insertedNodes, deletedNodes }) => ({\n insertedNodes: insertedNodes.map(node => this.nodeMapper.map(node)),\n deletedNodes: deletedNodes.map(node => this.nodeMapper.map(node)),\n }));\n }\n get onDidChangeCollapseState() {\n return Event.map(this.model.onDidChangeCollapseState, ({ node, deep }) => ({\n node: this.nodeMapper.map(node),\n deep\n }));\n }\n get onDidChangeRenderNodeCount() {\n return Event.map(this.model.onDidChangeRenderNodeCount, node => this.nodeMapper.map(node));\n }\n constructor(user, list, options = {}) {\n this.rootRef = null;\n this.elementMapper = options.elementMapper || DefaultElementMapper;\n const compressedNodeUnwrapper = node => this.elementMapper(node.elements);\n this.nodeMapper = new WeakMapper(node => new CompressedTreeNodeWrapper(compressedNodeUnwrapper, node));\n this.model = new CompressedObjectTreeModel(user, mapList(this.nodeMapper, list), mapOptions(compressedNodeUnwrapper, options));\n }\n setChildren(element, children = Iterable.empty(), options = {}) {\n this.model.setChildren(element, children, options);\n }\n isCompressionEnabled() {\n return this.model.isCompressionEnabled();\n }\n setCompressionEnabled(enabled) {\n this.model.setCompressionEnabled(enabled);\n }\n has(location) {\n return this.model.has(location);\n }\n getListIndex(location) {\n return this.model.getListIndex(location);\n }\n getListRenderCount(location) {\n return this.model.getListRenderCount(location);\n }\n getNode(location) {\n return this.nodeMapper.map(this.model.getNode(location));\n }\n getNodeLocation(node) {\n return node.element;\n }\n getParentNodeLocation(location) {\n return this.model.getParentNodeLocation(location);\n }\n getFirstElementChild(location) {\n const result = this.model.getFirstElementChild(location);\n if (result === null || typeof result === 'undefined') {\n return result;\n }\n return this.elementMapper(result.elements);\n }\n isCollapsible(location) {\n return this.model.isCollapsible(location);\n }\n setCollapsible(location, collapsed) {\n return this.model.setCollapsible(location, collapsed);\n }\n isCollapsed(location) {\n return this.model.isCollapsed(location);\n }\n setCollapsed(location, collapsed, recursive) {\n return this.model.setCollapsed(location, collapsed, recursive);\n }\n expandTo(location) {\n return this.model.expandTo(location);\n }\n rerender(location) {\n return this.model.rerender(location);\n }\n refilter() {\n return this.model.refilter();\n }\n getCompressedTreeNode(location = null) {\n return this.model.getNode(location);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { AbstractTree } from './abstractTree.js';\nimport { ObjectTreeModel } from './objectTreeModel.js';\nexport class DataTree extends AbstractTree {\n constructor(user, container, delegate, renderers, dataSource, options = {}) {\n super(user, container, delegate, renderers, options);\n this.user = user;\n this.dataSource = dataSource;\n this.identityProvider = options.identityProvider;\n }\n createModel(user, view, options) {\n return new ObjectTreeModel(user, view, options);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { TreeError } from './tree.js';\nimport { splice, tail2 } from '../../../common/arrays.js';\nimport { Delayer } from '../../../common/async.js';\nimport { MicrotaskDelay } from '../../../common/symbols.js';\nimport { LcsDiff } from '../../../common/diff/diff.js';\nimport { Emitter, EventBufferer } from '../../../common/event.js';\nimport { Iterable } from '../../../common/iterator.js';\nexport function isFilterResult(obj) {\n return typeof obj === 'object' && 'visibility' in obj && 'data' in obj;\n}\nexport function getVisibleState(visibility) {\n switch (visibility) {\n case true: return 1 /* TreeVisibility.Visible */;\n case false: return 0 /* TreeVisibility.Hidden */;\n default: return visibility;\n }\n}\nfunction isCollapsibleStateUpdate(update) {\n return typeof update.collapsible === 'boolean';\n}\nexport class IndexTreeModel {\n constructor(user, list, rootElement, options = {}) {\n var _a;\n this.user = user;\n this.list = list;\n this.rootRef = [];\n this.eventBufferer = new EventBufferer();\n this._onDidChangeCollapseState = new Emitter();\n this.onDidChangeCollapseState = this.eventBufferer.wrapEvent(this._onDidChangeCollapseState.event);\n this._onDidChangeRenderNodeCount = new Emitter();\n this.onDidChangeRenderNodeCount = this.eventBufferer.wrapEvent(this._onDidChangeRenderNodeCount.event);\n this._onDidSplice = new Emitter();\n this.onDidSplice = this._onDidSplice.event;\n this.refilterDelayer = new Delayer(MicrotaskDelay);\n this.collapseByDefault = typeof options.collapseByDefault === 'undefined' ? false : options.collapseByDefault;\n this.allowNonCollapsibleParents = (_a = options.allowNonCollapsibleParents) !== null && _a !== void 0 ? _a : false;\n this.filter = options.filter;\n this.autoExpandSingleChildren = typeof options.autoExpandSingleChildren === 'undefined' ? false : options.autoExpandSingleChildren;\n this.root = {\n parent: undefined,\n element: rootElement,\n children: [],\n depth: 0,\n visibleChildrenCount: 0,\n visibleChildIndex: -1,\n collapsible: false,\n collapsed: false,\n renderNodeCount: 0,\n visibility: 1 /* TreeVisibility.Visible */,\n visible: true,\n filterData: undefined\n };\n }\n splice(location, deleteCount, toInsert = Iterable.empty(), options = {}) {\n if (location.length === 0) {\n throw new TreeError(this.user, 'Invalid tree location');\n }\n if (options.diffIdentityProvider) {\n this.spliceSmart(options.diffIdentityProvider, location, deleteCount, toInsert, options);\n }\n else {\n this.spliceSimple(location, deleteCount, toInsert, options);\n }\n }\n spliceSmart(identity, location, deleteCount, toInsertIterable, options, recurseLevels) {\n var _a;\n if (toInsertIterable === void 0) { toInsertIterable = Iterable.empty(); }\n if (recurseLevels === void 0) { recurseLevels = (_a = options.diffDepth) !== null && _a !== void 0 ? _a : 0; }\n const { parentNode } = this.getParentNodeWithListIndex(location);\n if (!parentNode.lastDiffIds) {\n return this.spliceSimple(location, deleteCount, toInsertIterable, options);\n }\n const toInsert = [...toInsertIterable];\n const index = location[location.length - 1];\n const diff = new LcsDiff({ getElements: () => parentNode.lastDiffIds }, {\n getElements: () => [\n ...parentNode.children.slice(0, index),\n ...toInsert,\n ...parentNode.children.slice(index + deleteCount),\n ].map(e => identity.getId(e.element).toString())\n }).ComputeDiff(false);\n // if we were given a 'best effort' diff, use default behavior\n if (diff.quitEarly) {\n parentNode.lastDiffIds = undefined;\n return this.spliceSimple(location, deleteCount, toInsert, options);\n }\n const locationPrefix = location.slice(0, -1);\n const recurseSplice = (fromOriginal, fromModified, count) => {\n if (recurseLevels > 0) {\n for (let i = 0; i < count; i++) {\n fromOriginal--;\n fromModified--;\n this.spliceSmart(identity, [...locationPrefix, fromOriginal, 0], Number.MAX_SAFE_INTEGER, toInsert[fromModified].children, options, recurseLevels - 1);\n }\n }\n };\n let lastStartO = Math.min(parentNode.children.length, index + deleteCount);\n let lastStartM = toInsert.length;\n for (const change of diff.changes.sort((a, b) => b.originalStart - a.originalStart)) {\n recurseSplice(lastStartO, lastStartM, lastStartO - (change.originalStart + change.originalLength));\n lastStartO = change.originalStart;\n lastStartM = change.modifiedStart - index;\n this.spliceSimple([...locationPrefix, lastStartO], change.originalLength, Iterable.slice(toInsert, lastStartM, lastStartM + change.modifiedLength), options);\n }\n // at this point, startO === startM === count since any remaining prefix should match\n recurseSplice(lastStartO, lastStartM, lastStartO);\n }\n spliceSimple(location, deleteCount, toInsert = Iterable.empty(), { onDidCreateNode, onDidDeleteNode, diffIdentityProvider }) {\n const { parentNode, listIndex, revealed, visible } = this.getParentNodeWithListIndex(location);\n const treeListElementsToInsert = [];\n const nodesToInsertIterator = Iterable.map(toInsert, el => this.createTreeNode(el, parentNode, parentNode.visible ? 1 /* TreeVisibility.Visible */ : 0 /* TreeVisibility.Hidden */, revealed, treeListElementsToInsert, onDidCreateNode));\n const lastIndex = location[location.length - 1];\n // figure out what's the visible child start index right before the\n // splice point\n let visibleChildStartIndex = 0;\n for (let i = lastIndex; i >= 0 && i < parentNode.children.length; i--) {\n const child = parentNode.children[i];\n if (child.visible) {\n visibleChildStartIndex = child.visibleChildIndex;\n break;\n }\n }\n const nodesToInsert = [];\n let insertedVisibleChildrenCount = 0;\n let renderNodeCount = 0;\n for (const child of nodesToInsertIterator) {\n nodesToInsert.push(child);\n renderNodeCount += child.renderNodeCount;\n if (child.visible) {\n child.visibleChildIndex = visibleChildStartIndex + insertedVisibleChildrenCount++;\n }\n }\n const deletedNodes = splice(parentNode.children, lastIndex, deleteCount, nodesToInsert);\n if (!diffIdentityProvider) {\n parentNode.lastDiffIds = undefined;\n }\n else if (parentNode.lastDiffIds) {\n splice(parentNode.lastDiffIds, lastIndex, deleteCount, nodesToInsert.map(n => diffIdentityProvider.getId(n.element).toString()));\n }\n else {\n parentNode.lastDiffIds = parentNode.children.map(n => diffIdentityProvider.getId(n.element).toString());\n }\n // figure out what is the count of deleted visible children\n let deletedVisibleChildrenCount = 0;\n for (const child of deletedNodes) {\n if (child.visible) {\n deletedVisibleChildrenCount++;\n }\n }\n // and adjust for all visible children after the splice point\n if (deletedVisibleChildrenCount !== 0) {\n for (let i = lastIndex + nodesToInsert.length; i < parentNode.children.length; i++) {\n const child = parentNode.children[i];\n if (child.visible) {\n child.visibleChildIndex -= deletedVisibleChildrenCount;\n }\n }\n }\n // update parent's visible children count\n parentNode.visibleChildrenCount += insertedVisibleChildrenCount - deletedVisibleChildrenCount;\n if (revealed && visible) {\n const visibleDeleteCount = deletedNodes.reduce((r, node) => r + (node.visible ? node.renderNodeCount : 0), 0);\n this._updateAncestorsRenderNodeCount(parentNode, renderNodeCount - visibleDeleteCount);\n this.list.splice(listIndex, visibleDeleteCount, treeListElementsToInsert);\n }\n if (deletedNodes.length > 0 && onDidDeleteNode) {\n const visit = (node) => {\n onDidDeleteNode(node);\n node.children.forEach(visit);\n };\n deletedNodes.forEach(visit);\n }\n this._onDidSplice.fire({ insertedNodes: nodesToInsert, deletedNodes });\n let node = parentNode;\n while (node) {\n if (node.visibility === 2 /* TreeVisibility.Recurse */) {\n // delayed to avoid excessive refiltering, see #135941\n this.refilterDelayer.trigger(() => this.refilter());\n break;\n }\n node = node.parent;\n }\n }\n rerender(location) {\n if (location.length === 0) {\n throw new TreeError(this.user, 'Invalid tree location');\n }\n const { node, listIndex, revealed } = this.getTreeNodeWithListIndex(location);\n if (node.visible && revealed) {\n this.list.splice(listIndex, 1, [node]);\n }\n }\n has(location) {\n return this.hasTreeNode(location);\n }\n getListIndex(location) {\n const { listIndex, visible, revealed } = this.getTreeNodeWithListIndex(location);\n return visible && revealed ? listIndex : -1;\n }\n getListRenderCount(location) {\n return this.getTreeNode(location).renderNodeCount;\n }\n isCollapsible(location) {\n return this.getTreeNode(location).collapsible;\n }\n setCollapsible(location, collapsible) {\n const node = this.getTreeNode(location);\n if (typeof collapsible === 'undefined') {\n collapsible = !node.collapsible;\n }\n const update = { collapsible };\n return this.eventBufferer.bufferEvents(() => this._setCollapseState(location, update));\n }\n isCollapsed(location) {\n return this.getTreeNode(location).collapsed;\n }\n setCollapsed(location, collapsed, recursive) {\n const node = this.getTreeNode(location);\n if (typeof collapsed === 'undefined') {\n collapsed = !node.collapsed;\n }\n const update = { collapsed, recursive: recursive || false };\n return this.eventBufferer.bufferEvents(() => this._setCollapseState(location, update));\n }\n _setCollapseState(location, update) {\n const { node, listIndex, revealed } = this.getTreeNodeWithListIndex(location);\n const result = this._setListNodeCollapseState(node, listIndex, revealed, update);\n if (node !== this.root && this.autoExpandSingleChildren && result && !isCollapsibleStateUpdate(update) && node.collapsible && !node.collapsed && !update.recursive) {\n let onlyVisibleChildIndex = -1;\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n if (child.visible) {\n if (onlyVisibleChildIndex > -1) {\n onlyVisibleChildIndex = -1;\n break;\n }\n else {\n onlyVisibleChildIndex = i;\n }\n }\n }\n if (onlyVisibleChildIndex > -1) {\n this._setCollapseState([...location, onlyVisibleChildIndex], update);\n }\n }\n return result;\n }\n _setListNodeCollapseState(node, listIndex, revealed, update) {\n const result = this._setNodeCollapseState(node, update, false);\n if (!revealed || !node.visible || !result) {\n return result;\n }\n const previousRenderNodeCount = node.renderNodeCount;\n const toInsert = this.updateNodeAfterCollapseChange(node);\n const deleteCount = previousRenderNodeCount - (listIndex === -1 ? 0 : 1);\n this.list.splice(listIndex + 1, deleteCount, toInsert.slice(1));\n return result;\n }\n _setNodeCollapseState(node, update, deep) {\n let result;\n if (node === this.root) {\n result = false;\n }\n else {\n if (isCollapsibleStateUpdate(update)) {\n result = node.collapsible !== update.collapsible;\n node.collapsible = update.collapsible;\n }\n else if (!node.collapsible) {\n result = false;\n }\n else {\n result = node.collapsed !== update.collapsed;\n node.collapsed = update.collapsed;\n }\n if (result) {\n this._onDidChangeCollapseState.fire({ node, deep });\n }\n }\n if (!isCollapsibleStateUpdate(update) && update.recursive) {\n for (const child of node.children) {\n result = this._setNodeCollapseState(child, update, true) || result;\n }\n }\n return result;\n }\n expandTo(location) {\n this.eventBufferer.bufferEvents(() => {\n let node = this.getTreeNode(location);\n while (node.parent) {\n node = node.parent;\n location = location.slice(0, location.length - 1);\n if (node.collapsed) {\n this._setCollapseState(location, { collapsed: false, recursive: false });\n }\n }\n });\n }\n refilter() {\n const previousRenderNodeCount = this.root.renderNodeCount;\n const toInsert = this.updateNodeAfterFilterChange(this.root);\n this.list.splice(0, previousRenderNodeCount, toInsert);\n this.refilterDelayer.cancel();\n }\n createTreeNode(treeElement, parent, parentVisibility, revealed, treeListElements, onDidCreateNode) {\n const node = {\n parent,\n element: treeElement.element,\n children: [],\n depth: parent.depth + 1,\n visibleChildrenCount: 0,\n visibleChildIndex: -1,\n collapsible: typeof treeElement.collapsible === 'boolean' ? treeElement.collapsible : (typeof treeElement.collapsed !== 'undefined'),\n collapsed: typeof treeElement.collapsed === 'undefined' ? this.collapseByDefault : treeElement.collapsed,\n renderNodeCount: 1,\n visibility: 1 /* TreeVisibility.Visible */,\n visible: true,\n filterData: undefined\n };\n const visibility = this._filterNode(node, parentVisibility);\n node.visibility = visibility;\n if (revealed) {\n treeListElements.push(node);\n }\n const childElements = treeElement.children || Iterable.empty();\n const childRevealed = revealed && visibility !== 0 /* TreeVisibility.Hidden */ && !node.collapsed;\n let visibleChildrenCount = 0;\n let renderNodeCount = 1;\n for (const el of childElements) {\n const child = this.createTreeNode(el, node, visibility, childRevealed, treeListElements, onDidCreateNode);\n node.children.push(child);\n renderNodeCount += child.renderNodeCount;\n if (child.visible) {\n child.visibleChildIndex = visibleChildrenCount++;\n }\n }\n if (!this.allowNonCollapsibleParents) {\n node.collapsible = node.collapsible || node.children.length > 0;\n }\n node.visibleChildrenCount = visibleChildrenCount;\n node.visible = visibility === 2 /* TreeVisibility.Recurse */ ? visibleChildrenCount > 0 : (visibility === 1 /* TreeVisibility.Visible */);\n if (!node.visible) {\n node.renderNodeCount = 0;\n if (revealed) {\n treeListElements.pop();\n }\n }\n else if (!node.collapsed) {\n node.renderNodeCount = renderNodeCount;\n }\n onDidCreateNode === null || onDidCreateNode === void 0 ? void 0 : onDidCreateNode(node);\n return node;\n }\n updateNodeAfterCollapseChange(node) {\n const previousRenderNodeCount = node.renderNodeCount;\n const result = [];\n this._updateNodeAfterCollapseChange(node, result);\n this._updateAncestorsRenderNodeCount(node.parent, result.length - previousRenderNodeCount);\n return result;\n }\n _updateNodeAfterCollapseChange(node, result) {\n if (node.visible === false) {\n return 0;\n }\n result.push(node);\n node.renderNodeCount = 1;\n if (!node.collapsed) {\n for (const child of node.children) {\n node.renderNodeCount += this._updateNodeAfterCollapseChange(child, result);\n }\n }\n this._onDidChangeRenderNodeCount.fire(node);\n return node.renderNodeCount;\n }\n updateNodeAfterFilterChange(node) {\n const previousRenderNodeCount = node.renderNodeCount;\n const result = [];\n this._updateNodeAfterFilterChange(node, node.visible ? 1 /* TreeVisibility.Visible */ : 0 /* TreeVisibility.Hidden */, result);\n this._updateAncestorsRenderNodeCount(node.parent, result.length - previousRenderNodeCount);\n return result;\n }\n _updateNodeAfterFilterChange(node, parentVisibility, result, revealed = true) {\n let visibility;\n if (node !== this.root) {\n visibility = this._filterNode(node, parentVisibility);\n if (visibility === 0 /* TreeVisibility.Hidden */) {\n node.visible = false;\n node.renderNodeCount = 0;\n return false;\n }\n if (revealed) {\n result.push(node);\n }\n }\n const resultStartLength = result.length;\n node.renderNodeCount = node === this.root ? 0 : 1;\n let hasVisibleDescendants = false;\n if (!node.collapsed || visibility !== 0 /* TreeVisibility.Hidden */) {\n let visibleChildIndex = 0;\n for (const child of node.children) {\n hasVisibleDescendants = this._updateNodeAfterFilterChange(child, visibility, result, revealed && !node.collapsed) || hasVisibleDescendants;\n if (child.visible) {\n child.visibleChildIndex = visibleChildIndex++;\n }\n }\n node.visibleChildrenCount = visibleChildIndex;\n }\n else {\n node.visibleChildrenCount = 0;\n }\n if (node !== this.root) {\n node.visible = visibility === 2 /* TreeVisibility.Recurse */ ? hasVisibleDescendants : (visibility === 1 /* TreeVisibility.Visible */);\n node.visibility = visibility;\n }\n if (!node.visible) {\n node.renderNodeCount = 0;\n if (revealed) {\n result.pop();\n }\n }\n else if (!node.collapsed) {\n node.renderNodeCount += result.length - resultStartLength;\n }\n this._onDidChangeRenderNodeCount.fire(node);\n return node.visible;\n }\n _updateAncestorsRenderNodeCount(node, diff) {\n if (diff === 0) {\n return;\n }\n while (node) {\n node.renderNodeCount += diff;\n this._onDidChangeRenderNodeCount.fire(node);\n node = node.parent;\n }\n }\n _filterNode(node, parentVisibility) {\n const result = this.filter ? this.filter.filter(node.element, parentVisibility) : 1 /* TreeVisibility.Visible */;\n if (typeof result === 'boolean') {\n node.filterData = undefined;\n return result ? 1 /* TreeVisibility.Visible */ : 0 /* TreeVisibility.Hidden */;\n }\n else if (isFilterResult(result)) {\n node.filterData = result.data;\n return getVisibleState(result.visibility);\n }\n else {\n node.filterData = undefined;\n return getVisibleState(result);\n }\n }\n // cheap\n hasTreeNode(location, node = this.root) {\n if (!location || location.length === 0) {\n return true;\n }\n const [index, ...rest] = location;\n if (index < 0 || index > node.children.length) {\n return false;\n }\n return this.hasTreeNode(rest, node.children[index]);\n }\n // cheap\n getTreeNode(location, node = this.root) {\n if (!location || location.length === 0) {\n return node;\n }\n const [index, ...rest] = location;\n if (index < 0 || index > node.children.length) {\n throw new TreeError(this.user, 'Invalid tree location');\n }\n return this.getTreeNode(rest, node.children[index]);\n }\n // expensive\n getTreeNodeWithListIndex(location) {\n if (location.length === 0) {\n return { node: this.root, listIndex: -1, revealed: true, visible: false };\n }\n const { parentNode, listIndex, revealed, visible } = this.getParentNodeWithListIndex(location);\n const index = location[location.length - 1];\n if (index < 0 || index > parentNode.children.length) {\n throw new TreeError(this.user, 'Invalid tree location');\n }\n const node = parentNode.children[index];\n return { node, listIndex, revealed, visible: visible && node.visible };\n }\n getParentNodeWithListIndex(location, node = this.root, listIndex = 0, revealed = true, visible = true) {\n const [index, ...rest] = location;\n if (index < 0 || index > node.children.length) {\n throw new TreeError(this.user, 'Invalid tree location');\n }\n // TODO@joao perf!\n for (let i = 0; i < index; i++) {\n listIndex += node.children[i].renderNodeCount;\n }\n revealed = revealed && !node.collapsed;\n visible = visible && node.visible;\n if (rest.length === 0) {\n return { parentNode: node, listIndex, revealed, visible };\n }\n return this.getParentNodeWithListIndex(rest, node.children[index], listIndex + 1, revealed, visible);\n }\n getNode(location = []) {\n return this.getTreeNode(location);\n }\n // TODO@joao perf!\n getNodeLocation(node) {\n const location = [];\n let indexTreeNode = node; // typing woes\n while (indexTreeNode.parent) {\n location.push(indexTreeNode.parent.children.indexOf(indexTreeNode));\n indexTreeNode = indexTreeNode.parent;\n }\n return location.reverse();\n }\n getParentNodeLocation(location) {\n if (location.length === 0) {\n return undefined;\n }\n else if (location.length === 1) {\n return [];\n }\n else {\n return tail2(location)[0];\n }\n }\n getFirstElementChild(location) {\n const node = this.getTreeNode(location);\n if (node.children.length === 0) {\n return undefined;\n }\n return node.children[0].element;\n }\n}\n"],"names":["TableListRenderer","constructor","columns","renderers","getColumnSize","this","templateId","TemplateId","renderedTemplates","Set","rendererMap","Map","map","r","column","renderer","get","Error","push","renderTemplate","container","rowContainer","$","cellContainers","cellTemplateData","i","length","cellContainer","style","width","result","add","renderElement","element","index","templateData","height","cell","project","disposeElement","disposeTemplate","delete","layoutColumn","size","ColumnHeader","minimumSize","_a","minimumWidth","maximumSize","maximumWidth","Number","POSITIVE_INFINITY","onDidChange","onDidChangeWidthConstraints","super","_onDidLayout","onDidLayout","event","label","tooltip","_register","setupUpdatableHover","layout","fire","Table","onDidChangeFocus","list","onDidChangeSelection","onDidScroll","onMouseDblClick","onPointer","onDidFocus","scrollTop","scrollHeight","renderHeight","onDidDispose","user","virtualDelegate","_options","domId","InstanceCount","disposables","cachedWidth","cachedHeight","domNode","headers","c","descriptor","reduce","a","b","weight","views","view","splitview","orientation","scrollbarVisibility","getSashOrthogonalSize","el","headerRowHeight","lineHeight","getViewSize","delegate","getHeight","row","getTemplateId","h","onDidSashReset","totalWeight","resizeView","styleElement","updateOptions","options","splice","start","deleteCount","elements","getHTMLElement","styles","content","textContent","join","getSelectedElements","getSelection","getFocus","dispose","unthemedToggleStyles","inputActiveOptionBorder","inputActiveOptionForeground","inputActiveOptionBackground","Toggle","opts","_onChange","onChange","_onKeyDown","onKeyDown","_opts","_checked","isChecked","classes","icon","_icon","actionClassName","split","document","createElement","_hover","hoverDelegate","title","classList","notFocusable","tabIndex","setAttribute","String","applyStyles","onclick","ev","enabled","checked","preventDefault","ignoreGesture","onkeydown","keyboardEvent","keyCode","stopPropagation","getAttribute","focus","newIsChecked","toggle","borderColor","color","backgroundColor","enable","disable","ToolBar","contextMenuProvider","submenuActionViewItems","hasSecondaryActions","_onDidChangeDropdownVisibility","onDidChangeDropdownVisibility","lookupKeybindings","getKeyBinding","toggleMenuAction","ToggleMenuAction","toggleMenuActionViewItem","show","toggleMenuTitle","className","appendChild","actionBar","ariaLabel","actionRunner","allowContextMenu","highlightToggledItems","actionViewItemProvider","action","viewItemOptions","id","ID","menuActions","keybindingProvider","classNames","moreIcon","anchorAlignmentProvider","menuAsChild","renderDropdownAsChildElement","skipTelemetry","isMenu","setActionContext","context","onDidChangeVisibility","actions","class","getElement","getItemAction","indexOrElement","getAction","setActions","primaryActions","secondaryActions","clear","primaryActionsToSet","slice","forEach","keybinding","getKeybindingLabel","_b","_c","key","call","undefined","getLabel","toggleDropdownMenu","_menuActions","run","RenderIndentGuides","TreeElementsDragAndDropData","data","node","asTreeDragAndDropData","TreeNodeListDragAndDrop","modelProvider","dnd","autoExpandDisposable","getDragURI","getDragLabel","nodes","originalEvent","onDragStart","onDragOver","targetNode","targetIndex","targetSector","raw","didChangeAutoExpandNode","autoExpandNode","autoExpand","model","ref","getNodeLocation","isCollapsed","setCollapsed","accept","bubble","feedback","effect","parentRef","getParentNodeLocation","parentNode","getNode","parentIndex","getListIndex","getListRenderCount","drop","onDragEnd","ComposedTreeDelegate","hasDynamicHeight","setDynamicHeight","EventCollection","_elements","TreeRenderer","onDidChangeCollapseState","activeNodes","renderedIndentGuides","renderedElements","renderedNodes","indent","DefaultIndent","hideTwistiesOfChildlessElements","shouldRenderIndentGuides","activeIndentNodes","indentGuidesDisposable","e","onDidChangeNodeTwistieState","onDidChangeTwistieState","renderTreeElement","renderIndentGuides","None","_renderIndentGuides","_onDidChangeActiveNodes","twistie","contents","set","depth","paddingLeft","collapsible","collapsed","removeAttribute","remove","twistieRendered","renderTwistie","visibleChildrenCount","disposableStore","parent","guide","has","childElementCount","insertBefore","firstElementChild","children","line","FindFilter","totalCount","_totalCount","matchCount","_matchCount","tree","keyboardNavigationLabelProvider","_filter","_pattern","_lowercasePattern","onWillRefilter","reset","filter","parentVisibility","visibility","getKeyboardNavigationLabel","labels","Array","isArray","l","labelStr","toString","score","findMatchType","TreeFindMatchType","Contiguous","toLowerCase","indexOf","MAX_SAFE_INTEGER","firstMatchCanBeWeak","boostFullMatch","findMode","TreeFindMode","Filter","defaultFindVisibility","FindController","pattern","mode","_mode","widget","refilter","render","_onDidChangeMode","matchType","_matchType","_onDidChangeMatchType","contextViewProvider","onDidChangeMode","onDidChangeMatchType","_onDidChangePattern","_onDidChangeOpenState","onDidChangeOpenState","enabledDisposables","defaultFindMode","Highlight","defaultFindMatchType","Fuzzy","onDidSplice","onDidSpliceModel","optionsUpdate","_d","noMatches","showNotFoundMessage","showMessage","type","clearMessage","shouldAllowFocus","filterData","_history","stickyScrollNodeStateEquals","node1","node2","position","stickyScrollNodeEquals","startIndex","endIndex","StickyScrollState","stickyNodes","count","equal","state","lastNodePartiallyVisible","lastStickyNode","secondLastStickyNode","animationStateChanged","previousState","previousLastStickyNode","DefaultStickyScrollDelegate","constrainStickyScrollNodes","stickyScrollMaxItemCount","maxWidgetHeight","stickyNode","StickyScrollController","treeDelegate","maxWidgetViewRatio","stickyScrollOptions","validateStickySettings","stickyScrollDelegate","_widget","StickyScrollWidget","getScrollableElement","accessibilityProvider","onDidChangeHasFocus","onContextMenu","update","onDidChangeContentHeight","getNodeAtHeight","firstVisibleIndex","indexAt","firstVisibleNode","setState","stickyState","findStickyState","firstVisibleNodeUnderWidget","stickyNodesHeight","nextStickyNode","getNextStickyNode","getNextVisibleNode","contrainedStickyNodes","constrainStickyNodes","previousStickyNode","getAncestorUnderPrevious","nodeIsUncollapsedParent","nodeTopAlignsWithStickyNodesBottom","createStickyScrollNode","nodeIndex","getNodeIndex","elementTop","getElementTop","stickyPosition","currentStickyNodesHeight","getNodeRange","calculateStickyNodePosition","previousAncestor","currentAncestor","parentOfcurrentAncestor","getParentNode","lastDescendantIndex","stickyRowPositionTop","stickyNodeHeight","lastChildRelativeTop","getRelativeTop","nodeHeight","nextNodeRelativeTop","lastChildNode","lastChildHeight","bottomOfLastChild","maximumStickyWidgetHeight","constrainedStickyNodes","lastConstrainedStickyNode","nodeLocation","parentLocation","nodePositionTopBelowWidget","ancestors","widgetHeight","domFocus","focusedLast","validatedOptions","Math","max","treeRenderers","_previousElements","_previousStateDisposables","_rootDomNode","shadow","stickyScrollFocus","StickyScrollFocus","_previousState","lastElement","wasVisible","isVisible","setVisible","top","stickyIndex","disposable","updateElements","stickyNodesTotal","stickyElement","setRowHeight","setRowLineHeight","getElementID","accessibilityDisposable","setAccessibilityAttributes","nodeTemplateId","find","nodeCopy","Proxy","getSetSize","getPosInSet","getRole","getAriaLabel","observable","reader","value","readObservable","ariaLevel","getAriaLevel","visible","domHasFocus","_domHasFocus","hasFocus","_onDidChangeHasFocus","focusedIndex","_onContextMenu","addEventListener","onFocus","onBlur","toggleStickyScrollFocused","onMouseDown","handleContextMenu","target","browserEvent","findIndex","setFocus","anchor","isStickyScroll","setFocusedElement","nodeIndexToFocus","scrollNodeUnderWidget","previousIndex","removeFocus","newFocusedIndex","elementScrollTop","elementTargetViewTop","contains","toggleElementFocus","newFocusIndex","oldIndex","focused","toggleElementActiveFocus","toggleElementPassiveFocus","toggleCurrentElementActiveFocus","asTreeMouseEvent","asTreeContextMenuEvent","dfs","fn","child","Trait","nodeSet","_nodeSet","createNodeSet","getFirstViewElementWithTrait","identityProvider","_onDidChange","__forceEvent","_set","silent","that","getNodes","onDidModelSplice","insertedNodes","deletedNodes","visit","values","deletedNodesIdSet","deletedNodesVisitor","getId","insertedNodesMap","insertedNodesVisitor","insertedNode","TreeNodeListMouseController","stickyScrollProvider","onViewPointer","isHandledByList","isSelectionRangeChangeEvent","isSelectionSingleChangeEvent","onTwistie","offsetX","isStickyElement","expandOnlyOnTwistieClick","handleStickyScrollMouseEvent","detail","expandOnDoubleClick","location","recursive","altKey","toggleCollapsed","stickyScrollController","setSelection","onDoubleClick","TreeNodeList","focusTrait","selectionTrait","anchorTrait","createMouseController","additionalFocus","additionalSelection","setAnchor","indexes","fromAPI","AbstractTree","eventBufferer","wrapEvent","selection","onMouseOver","onMouseOut","onDidChangeModel","findController","findFuzzy","_user","onDidChangeFindOpenState","onDidChangeStickyScrollFocused","_onWillRefilter","_onDidUpdateOptions","onDidChangeCollapseStateRelay","onDidChangeActiveNodes","getFocusedElements","getAnchorElement","multipleSelectionController","visibleChildIndex","getWidgetAriaLabel","getWidgetRole","getActiveDescendantId","createModel","input","bufferEvents","activeNodesEmitter","activeNodesDebounce","trigger","keyboardSupport","onLeftArrow","onRightArrow","onSpace","findWidgetEnabled","findWidgetStyles","focusNavigationFilter","onDidChangeFindMode","onDidChangeFindMatchType","enableStickyScroll","Always","updateStickyScroll","suffix","treeIndentGuidesStroke","treeInactiveIndentGuidesStroke","stickyScrollBackground","treeStickyScrollBackground","listBackground","treeStickyScrollBorder","treeStickyScrollShadow","listFocusForeground","focusAndSelectionOutline","listFocusAndSelectionOutline","listSelectionOutline","listFocusOutline","getParentElement","getFirstElementChild","collapse","expand","isCollapsible","setCollapsible","focusNext","n","loop","focusPrevious","focusNextPage","focusPreviousPage","focusFirst","reveal","relativeTop","expandTo","paddingTop","parentListIndex","some","firstChildIndex","createAsyncDataTreeNode","props","refreshPromise","stale","slow","forceExpanded","isAncestor","ancestor","descendant","AsyncDataTreeNodeWrapper","AsyncDataTreeRenderer","nodeMapper","twistieElement","asTreeEvent","AsyncDataTreeElementsDragAndDropData","asAsyncDataTreeDragAndDropData","AsyncDataTreeNodeListDragAndDrop","asObjectTreeOptions","collapseByDefault","sorter","hasChildren","AsyncDataTree","dataSource","subTreeRefreshPromises","refreshPromises","_onDidRender","_onDidChangeNodeSlowState","autoExpandSingleChildren","getDefaultCollapseState","createTree","root","defaultCollapseState","_onDidChangeCollapseState","objectTreeDelegate","objectTreeRenderers","objectTreeOptions","getInput","setInput","viewState","promise","cancel","viewStateContext","_updateChildren","rerender","getDataNode","refreshAndRenderNode","dataNode","hasElement","refreshNode","isDisposed","other","intersects","then","setChildren","doRefreshSubTree","done","Promise","finally","childrenToRefresh","doRefreshNode","childrenPromise","doGetChildren","resolve","slowTimeout","_","err","getChildren","processChildren","async","deep","catch","childrenElementsIterable","childrenElements","nodesToForget","childrenTreeNodesById","asyncDataTreeNode","childAsyncDataTreeNode","expanded","asTreeElement","diffIdentityProvider","sort","compare","bind","CompressibleAsyncDataTreeNodeWrapper","incompressible","CompressibleAsyncDataTreeRenderer","compressibleNodeMapperProvider","renderCompressedElements","disposeCompressedElements","CompressibleAsyncDataTree","compressionDelegate","compressibleNodeMapper","getCompressedNodeKeyboardNavigationLabel","els","asCompressibleObjectTreeOptions","isIncompressible","getUncompressedIds","compressedNode","getCompressedTreeNode","oldSelection","oldFocus","didChangeSelection","didChangeFocus","filterResult","noCompress","compress","childrenIterator","_decompress","decompress","treeElement","CompressedObjectTreeModel","onDidChangeRenderNodeCount","rootRef","compressionEnabled","base","compressedChildren","_setChildren","diffDepth","Infinity","compressedParentNode","splicedElement","recompressedElement","elementComparator","parentChildren","isCompressionEnabled","setCompressionEnabled","rootChildren","decompressedRootChildren","recompressedRootChildren","insertedElements","onDidCreateNode","onDidDeleteNode","getCompressedNode","DefaultElementMapper","CompressedTreeNodeWrapper","unwrapper","CompressibleObjectTreeModel","elementMapper","compressedNodeUnwrapper","toInsert","updateElementHeight","mapList","otherNode","mapOptions","DataTree","isFilterResult","obj","getVisibleState","isCollapsibleStateUpdate","IndexTreeModel","rootElement","_onDidChangeRenderNodeCount","_onDidSplice","refilterDelayer","allowNonCollapsibleParents","renderNodeCount","spliceSmart","spliceSimple","identity","toInsertIterable","recurseLevels","getParentNodeWithListIndex","lastDiffIds","diff","getElements","ComputeDiff","quitEarly","locationPrefix","recurseSplice","fromOriginal","fromModified","lastStartO","min","lastStartM","change","changes","originalStart","originalLength","modifiedStart","modifiedLength","listIndex","revealed","treeListElementsToInsert","nodesToInsertIterator","createTreeNode","lastIndex","visibleChildStartIndex","nodesToInsert","insertedVisibleChildrenCount","deletedVisibleChildrenCount","visibleDeleteCount","_updateAncestorsRenderNodeCount","getTreeNodeWithListIndex","hasTreeNode","getTreeNode","_setCollapseState","_setListNodeCollapseState","onlyVisibleChildIndex","_setNodeCollapseState","previousRenderNodeCount","updateNodeAfterCollapseChange","updateNodeAfterFilterChange","treeListElements","_filterNode","childElements","childRevealed","pop","_updateNodeAfterCollapseChange","_updateNodeAfterFilterChange","resultStartLength","hasVisibleDescendants","rest","indexTreeNode","reverse"],"sourceRoot":""}