{"version":3,"file":"static/js/8681_46d8719b1da197404990.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/keybindingLabel/keybindingLabel.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/list/listPaging.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/list/rangeMap.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/list/rowCache.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/list/listView.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/list/splice.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/list/list.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/list/listWidget.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/menu/menu.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 * as dom from '../../dom.js';\nimport { getBaseLayerHoverDelegate } from '../hover/hoverDelegate2.js';\nimport { getDefaultHoverDelegate } from '../hover/hoverDelegateFactory.js';\nimport { UILabelProvider } from '../../../common/keybindingLabels.js';\nimport { Disposable } from '../../../common/lifecycle.js';\nimport { equals } from '../../../common/objects.js';\nimport './keybindingLabel.css';\nimport { localize } from '../../../../nls.js';\nconst $ = dom.$;\nexport const unthemedKeybindingLabelOptions = {\n keybindingLabelBackground: undefined,\n keybindingLabelForeground: undefined,\n keybindingLabelBorder: undefined,\n keybindingLabelBottomBorder: undefined,\n keybindingLabelShadow: undefined\n};\nexport class KeybindingLabel extends Disposable {\n constructor(container, os, options) {\n super();\n this.os = os;\n this.keyElements = new Set();\n this.options = options || Object.create(null);\n const labelForeground = this.options.keybindingLabelForeground;\n this.domNode = dom.append(container, $('.monaco-keybinding'));\n if (labelForeground) {\n this.domNode.style.color = labelForeground;\n }\n this.hover = this._register(getBaseLayerHoverDelegate().setupUpdatableHover(getDefaultHoverDelegate('mouse'), this.domNode, ''));\n this.didEverRender = false;\n container.appendChild(this.domNode);\n }\n get element() {\n return this.domNode;\n }\n set(keybinding, matches) {\n if (this.didEverRender && this.keybinding === keybinding && KeybindingLabel.areSame(this.matches, matches)) {\n return;\n }\n this.keybinding = keybinding;\n this.matches = matches;\n this.render();\n }\n render() {\n var _a;\n this.clear();\n if (this.keybinding) {\n const chords = this.keybinding.getChords();\n if (chords[0]) {\n this.renderChord(this.domNode, chords[0], this.matches ? this.matches.firstPart : null);\n }\n for (let i = 1; i < chords.length; i++) {\n dom.append(this.domNode, $('span.monaco-keybinding-key-chord-separator', undefined, ' '));\n this.renderChord(this.domNode, chords[i], this.matches ? this.matches.chordPart : null);\n }\n const title = ((_a = this.options.disableTitle) !== null && _a !== void 0 ? _a : false) ? undefined : this.keybinding.getAriaLabel() || undefined;\n this.hover.update(title);\n this.domNode.setAttribute('aria-label', title || '');\n }\n else if (this.options && this.options.renderUnboundKeybindings) {\n this.renderUnbound(this.domNode);\n }\n this.didEverRender = true;\n }\n clear() {\n dom.clearNode(this.domNode);\n this.keyElements.clear();\n }\n renderChord(parent, chord, match) {\n const modifierLabels = UILabelProvider.modifierLabels[this.os];\n if (chord.ctrlKey) {\n this.renderKey(parent, modifierLabels.ctrlKey, Boolean(match === null || match === void 0 ? void 0 : match.ctrlKey), modifierLabels.separator);\n }\n if (chord.shiftKey) {\n this.renderKey(parent, modifierLabels.shiftKey, Boolean(match === null || match === void 0 ? void 0 : match.shiftKey), modifierLabels.separator);\n }\n if (chord.altKey) {\n this.renderKey(parent, modifierLabels.altKey, Boolean(match === null || match === void 0 ? void 0 : match.altKey), modifierLabels.separator);\n }\n if (chord.metaKey) {\n this.renderKey(parent, modifierLabels.metaKey, Boolean(match === null || match === void 0 ? void 0 : match.metaKey), modifierLabels.separator);\n }\n const keyLabel = chord.keyLabel;\n if (keyLabel) {\n this.renderKey(parent, keyLabel, Boolean(match === null || match === void 0 ? void 0 : match.keyCode), '');\n }\n }\n renderKey(parent, label, highlight, separator) {\n dom.append(parent, this.createKeyElement(label, highlight ? '.highlight' : ''));\n if (separator) {\n dom.append(parent, $('span.monaco-keybinding-key-separator', undefined, separator));\n }\n }\n renderUnbound(parent) {\n dom.append(parent, this.createKeyElement(localize('unbound', \"Unbound\")));\n }\n createKeyElement(label, extraClass = '') {\n const keyElement = $('span.monaco-keybinding-key' + extraClass, undefined, label);\n this.keyElements.add(keyElement);\n if (this.options.keybindingLabelBackground) {\n keyElement.style.backgroundColor = this.options.keybindingLabelBackground;\n }\n if (this.options.keybindingLabelBorder) {\n keyElement.style.borderColor = this.options.keybindingLabelBorder;\n }\n if (this.options.keybindingLabelBottomBorder) {\n keyElement.style.borderBottomColor = this.options.keybindingLabelBottomBorder;\n }\n if (this.options.keybindingLabelShadow) {\n keyElement.style.boxShadow = `inset 0 -1px 0 ${this.options.keybindingLabelShadow}`;\n }\n return keyElement;\n }\n static areSame(a, b) {\n if (a === b || (!a && !b)) {\n return true;\n }\n return !!a && !!b && equals(a.firstPart, b.firstPart) && equals(a.chordPart, b.chordPart);\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 { range } from '../../../common/arrays.js';\nimport { CancellationTokenSource } from '../../../common/cancellation.js';\nimport { Event } from '../../../common/event.js';\nimport { Disposable } from '../../../common/lifecycle.js';\nimport './list.css';\nimport { List } from './listWidget.js';\nclass PagedRenderer {\n get templateId() { return this.renderer.templateId; }\n constructor(renderer, modelProvider) {\n this.renderer = renderer;\n this.modelProvider = modelProvider;\n }\n renderTemplate(container) {\n const data = this.renderer.renderTemplate(container);\n return { data, disposable: Disposable.None };\n }\n renderElement(index, _, data, height) {\n var _a;\n (_a = data.disposable) === null || _a === void 0 ? void 0 : _a.dispose();\n if (!data.data) {\n return;\n }\n const model = this.modelProvider();\n if (model.isResolved(index)) {\n return this.renderer.renderElement(model.get(index), index, data.data, height);\n }\n const cts = new CancellationTokenSource();\n const promise = model.resolve(index, cts.token);\n data.disposable = { dispose: () => cts.cancel() };\n this.renderer.renderPlaceholder(index, data.data);\n promise.then(entry => this.renderer.renderElement(entry, index, data.data, height));\n }\n disposeTemplate(data) {\n if (data.disposable) {\n data.disposable.dispose();\n data.disposable = undefined;\n }\n if (data.data) {\n this.renderer.disposeTemplate(data.data);\n data.data = undefined;\n }\n }\n}\nclass PagedAccessibilityProvider {\n constructor(modelProvider, accessibilityProvider) {\n this.modelProvider = modelProvider;\n this.accessibilityProvider = accessibilityProvider;\n }\n getWidgetAriaLabel() {\n return this.accessibilityProvider.getWidgetAriaLabel();\n }\n getAriaLabel(index) {\n const model = this.modelProvider();\n if (!model.isResolved(index)) {\n return null;\n }\n return this.accessibilityProvider.getAriaLabel(model.get(index));\n }\n}\nfunction fromPagedListOptions(modelProvider, options) {\n return {\n ...options,\n accessibilityProvider: options.accessibilityProvider && new PagedAccessibilityProvider(modelProvider, options.accessibilityProvider)\n };\n}\nexport class PagedList {\n constructor(user, container, virtualDelegate, renderers, options = {}) {\n const modelProvider = () => this.model;\n const pagedRenderers = renderers.map(r => new PagedRenderer(r, modelProvider));\n this.list = new List(user, container, virtualDelegate, pagedRenderers, fromPagedListOptions(modelProvider, options));\n }\n updateOptions(options) {\n this.list.updateOptions(options);\n }\n getHTMLElement() {\n return this.list.getHTMLElement();\n }\n get onDidFocus() {\n return this.list.onDidFocus;\n }\n get widget() {\n return this.list;\n }\n get onDidDispose() {\n return this.list.onDidDispose;\n }\n get onMouseDblClick() {\n return Event.map(this.list.onMouseDblClick, ({ element, index, browserEvent }) => ({ element: element === undefined ? undefined : this._model.get(element), index, browserEvent }));\n }\n get onPointer() {\n return Event.map(this.list.onPointer, ({ element, index, browserEvent }) => ({ element: element === undefined ? undefined : this._model.get(element), index, browserEvent }));\n }\n get onDidChangeSelection() {\n return Event.map(this.list.onDidChangeSelection, ({ elements, indexes, browserEvent }) => ({ elements: elements.map(e => this._model.get(e)), indexes, browserEvent }));\n }\n get model() {\n return this._model;\n }\n set model(model) {\n this._model = model;\n this.list.splice(0, this.list.length, range(model.length));\n }\n getFocus() {\n return this.list.getFocus();\n }\n getSelection() {\n return this.list.getSelection();\n }\n getSelectedElements() {\n return this.getSelection().map(i => this.model.get(i));\n }\n style(styles) {\n this.list.style(styles);\n }\n dispose() {\n this.list.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 { Range } from '../../../common/range.js';\n/**\n * Returns the intersection between a ranged group and a range.\n * Returns `[]` if the intersection is empty.\n */\nexport function groupIntersect(range, groups) {\n const result = [];\n for (const r of groups) {\n if (range.start >= r.range.end) {\n continue;\n }\n if (range.end < r.range.start) {\n break;\n }\n const intersection = Range.intersect(range, r.range);\n if (Range.isEmpty(intersection)) {\n continue;\n }\n result.push({\n range: intersection,\n size: r.size\n });\n }\n return result;\n}\n/**\n * Shifts a range by that `much`.\n */\nexport function shift({ start, end }, much) {\n return { start: start + much, end: end + much };\n}\n/**\n * Consolidates a collection of ranged groups.\n *\n * Consolidation is the process of merging consecutive ranged groups\n * that share the same `size`.\n */\nexport function consolidate(groups) {\n const result = [];\n let previousGroup = null;\n for (const group of groups) {\n const start = group.range.start;\n const end = group.range.end;\n const size = group.size;\n if (previousGroup && size === previousGroup.size) {\n previousGroup.range.end = end;\n continue;\n }\n previousGroup = { range: { start, end }, size };\n result.push(previousGroup);\n }\n return result;\n}\n/**\n * Concatenates several collections of ranged groups into a single\n * collection.\n */\nfunction concat(...groups) {\n return consolidate(groups.reduce((r, g) => r.concat(g), []));\n}\nexport class RangeMap {\n get paddingTop() {\n return this._paddingTop;\n }\n set paddingTop(paddingTop) {\n this._size = this._size + paddingTop - this._paddingTop;\n this._paddingTop = paddingTop;\n }\n constructor(topPadding) {\n this.groups = [];\n this._size = 0;\n this._paddingTop = 0;\n this._paddingTop = topPadding !== null && topPadding !== void 0 ? topPadding : 0;\n this._size = this._paddingTop;\n }\n splice(index, deleteCount, items = []) {\n const diff = items.length - deleteCount;\n const before = groupIntersect({ start: 0, end: index }, this.groups);\n const after = groupIntersect({ start: index + deleteCount, end: Number.POSITIVE_INFINITY }, this.groups)\n .map(g => ({ range: shift(g.range, diff), size: g.size }));\n const middle = items.map((item, i) => ({\n range: { start: index + i, end: index + i + 1 },\n size: item.size\n }));\n this.groups = concat(before, middle, after);\n this._size = this._paddingTop + this.groups.reduce((t, g) => t + (g.size * (g.range.end - g.range.start)), 0);\n }\n /**\n * Returns the number of items in the range map.\n */\n get count() {\n const len = this.groups.length;\n if (!len) {\n return 0;\n }\n return this.groups[len - 1].range.end;\n }\n /**\n * Returns the sum of the sizes of all items in the range map.\n */\n get size() {\n return this._size;\n }\n /**\n * Returns the index of the item at the given position.\n */\n indexAt(position) {\n if (position < 0) {\n return -1;\n }\n if (position < this._paddingTop) {\n return 0;\n }\n let index = 0;\n let size = this._paddingTop;\n for (const group of this.groups) {\n const count = group.range.end - group.range.start;\n const newSize = size + (count * group.size);\n if (position < newSize) {\n return index + Math.floor((position - size) / group.size);\n }\n index += count;\n size = newSize;\n }\n return index;\n }\n /**\n * Returns the index of the item right after the item at the\n * index of the given position.\n */\n indexAfter(position) {\n return Math.min(this.indexAt(position) + 1, this.count);\n }\n /**\n * Returns the start position of the item at the given index.\n */\n positionAt(index) {\n if (index < 0) {\n return -1;\n }\n let position = 0;\n let count = 0;\n for (const group of this.groups) {\n const groupCount = group.range.end - group.range.start;\n const newCount = count + groupCount;\n if (index < newCount) {\n return this._paddingTop + position + ((index - count) * group.size);\n }\n position += groupCount * group.size;\n count = newCount;\n }\n return -1;\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 { $ } from '../../dom.js';\nfunction removeFromParent(element) {\n var _a;\n try {\n (_a = element.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(element);\n }\n catch (e) {\n // this will throw if this happens due to a blur event, nasty business\n }\n}\nexport class RowCache {\n constructor(renderers) {\n this.renderers = renderers;\n this.cache = new Map();\n this.transactionNodesPendingRemoval = new Set();\n this.inTransaction = false;\n }\n /**\n * Returns a row either by creating a new one or reusing\n * a previously released row which shares the same templateId.\n *\n * @returns A row and `isReusingConnectedDomNode` if the row's node is already in the dom in a stale position.\n */\n alloc(templateId) {\n let result = this.getTemplateCache(templateId).pop();\n let isStale = false;\n if (result) {\n isStale = this.transactionNodesPendingRemoval.has(result.domNode);\n if (isStale) {\n this.transactionNodesPendingRemoval.delete(result.domNode);\n }\n }\n else {\n const domNode = $('.monaco-list-row');\n const renderer = this.getRenderer(templateId);\n const templateData = renderer.renderTemplate(domNode);\n result = { domNode, templateId, templateData };\n }\n return { row: result, isReusingConnectedDomNode: isStale };\n }\n /**\n * Releases the row for eventual reuse.\n */\n release(row) {\n if (!row) {\n return;\n }\n this.releaseRow(row);\n }\n /**\n * Begin a set of changes that use the cache. This lets us skip work when a row is removed and then inserted again.\n */\n transact(makeChanges) {\n if (this.inTransaction) {\n throw new Error('Already in transaction');\n }\n this.inTransaction = true;\n try {\n makeChanges();\n }\n finally {\n for (const domNode of this.transactionNodesPendingRemoval) {\n this.doRemoveNode(domNode);\n }\n this.transactionNodesPendingRemoval.clear();\n this.inTransaction = false;\n }\n }\n releaseRow(row) {\n const { domNode, templateId } = row;\n if (domNode) {\n if (this.inTransaction) {\n this.transactionNodesPendingRemoval.add(domNode);\n }\n else {\n this.doRemoveNode(domNode);\n }\n }\n const cache = this.getTemplateCache(templateId);\n cache.push(row);\n }\n doRemoveNode(domNode) {\n domNode.classList.remove('scrolling');\n removeFromParent(domNode);\n }\n getTemplateCache(templateId) {\n let result = this.cache.get(templateId);\n if (!result) {\n result = [];\n this.cache.set(templateId, result);\n }\n return result;\n }\n dispose() {\n this.cache.forEach((cachedRows, templateId) => {\n for (const cachedRow of cachedRows) {\n const renderer = this.getRenderer(templateId);\n renderer.disposeTemplate(cachedRow.templateData);\n cachedRow.templateData = null;\n }\n });\n this.cache.clear();\n this.transactionNodesPendingRemoval.clear();\n }\n getRenderer(templateId) {\n const renderer = this.renderers.get(templateId);\n if (!renderer) {\n throw new Error(`No renderer found for ${templateId}`);\n }\n return renderer;\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { DataTransfers } from '../../dnd.js';\nimport { $, addDisposableListener, animate, getContentHeight, getContentWidth, getTopLeftOffset, getWindow, isAncestor, isHTMLElement, scheduleAtNextAnimationFrame } from '../../dom.js';\nimport { DomEmitter } from '../../event.js';\nimport { EventType as TouchEventType, Gesture } from '../../touch.js';\nimport { SmoothScrollableElement } from '../scrollbar/scrollableElement.js';\nimport { distinct, equals } from '../../../common/arrays.js';\nimport { Delayer, disposableTimeout } from '../../../common/async.js';\nimport { memoize } from '../../../common/decorators.js';\nimport { Emitter, Event } from '../../../common/event.js';\nimport { Disposable, DisposableStore, toDisposable } from '../../../common/lifecycle.js';\nimport { Range } from '../../../common/range.js';\nimport { Scrollable } from '../../../common/scrollable.js';\nimport { RangeMap, shift } from './rangeMap.js';\nimport { RowCache } from './rowCache.js';\nimport { BugIndicatingError } from '../../../common/errors.js';\nimport { clamp } from '../../../common/numbers.js';\nconst StaticDND = {\n CurrentDragAndDropData: undefined\n};\nconst DefaultOptions = {\n useShadows: true,\n verticalScrollMode: 1 /* ScrollbarVisibility.Auto */,\n setRowLineHeight: true,\n setRowHeight: true,\n supportDynamicHeights: false,\n dnd: {\n getDragElements(e) { return [e]; },\n getDragURI() { return null; },\n onDragStart() { },\n onDragOver() { return false; },\n drop() { },\n dispose() { }\n },\n horizontalScrolling: false,\n transformOptimization: true,\n alwaysConsumeMouseWheel: true,\n};\nexport class ElementsDragAndDropData {\n constructor(elements) {\n this.elements = elements;\n }\n update() { }\n getData() {\n return this.elements;\n }\n}\nexport class ExternalElementsDragAndDropData {\n constructor(elements) {\n this.elements = elements;\n }\n update() { }\n getData() {\n return this.elements;\n }\n}\nexport class NativeDragAndDropData {\n constructor() {\n this.types = [];\n this.files = [];\n }\n update(dataTransfer) {\n if (dataTransfer.types) {\n this.types.splice(0, this.types.length, ...dataTransfer.types);\n }\n if (dataTransfer.files) {\n this.files.splice(0, this.files.length);\n for (let i = 0; i < dataTransfer.files.length; i++) {\n const file = dataTransfer.files.item(i);\n if (file && (file.size || file.type)) {\n this.files.push(file);\n }\n }\n }\n }\n getData() {\n return {\n types: this.types,\n files: this.files\n };\n }\n}\nfunction equalsDragFeedback(f1, f2) {\n if (Array.isArray(f1) && Array.isArray(f2)) {\n return equals(f1, f2);\n }\n return f1 === f2;\n}\nclass ListViewAccessibilityProvider {\n constructor(accessibilityProvider) {\n if (accessibilityProvider === null || accessibilityProvider === void 0 ? void 0 : accessibilityProvider.getSetSize) {\n this.getSetSize = accessibilityProvider.getSetSize.bind(accessibilityProvider);\n }\n else {\n this.getSetSize = (e, i, l) => l;\n }\n if (accessibilityProvider === null || accessibilityProvider === void 0 ? void 0 : accessibilityProvider.getPosInSet) {\n this.getPosInSet = accessibilityProvider.getPosInSet.bind(accessibilityProvider);\n }\n else {\n this.getPosInSet = (e, i) => i + 1;\n }\n if (accessibilityProvider === null || accessibilityProvider === void 0 ? void 0 : accessibilityProvider.getRole) {\n this.getRole = accessibilityProvider.getRole.bind(accessibilityProvider);\n }\n else {\n this.getRole = _ => 'listitem';\n }\n if (accessibilityProvider === null || accessibilityProvider === void 0 ? void 0 : accessibilityProvider.isChecked) {\n this.isChecked = accessibilityProvider.isChecked.bind(accessibilityProvider);\n }\n else {\n this.isChecked = _ => undefined;\n }\n }\n}\n/**\n * The {@link ListView} is a virtual scrolling engine.\n *\n * Given that it only renders elements within its viewport, it can hold large\n * collections of elements and stay very performant. The performance bottleneck\n * usually lies within the user's rendering code for each element.\n *\n * @remarks It is a low-level widget, not meant to be used directly. Refer to the\n * List widget instead.\n */\nexport class ListView {\n get contentHeight() { return this.rangeMap.size; }\n get onDidScroll() { return this.scrollableElement.onScroll; }\n get scrollableElementDomNode() { return this.scrollableElement.getDomNode(); }\n get horizontalScrolling() { return this._horizontalScrolling; }\n set horizontalScrolling(value) {\n if (value === this._horizontalScrolling) {\n return;\n }\n if (value && this.supportDynamicHeights) {\n throw new Error('Horizontal scrolling and dynamic heights not supported simultaneously');\n }\n this._horizontalScrolling = value;\n this.domNode.classList.toggle('horizontal-scrolling', this._horizontalScrolling);\n if (this._horizontalScrolling) {\n for (const item of this.items) {\n this.measureItemWidth(item);\n }\n this.updateScrollWidth();\n this.scrollableElement.setScrollDimensions({ width: getContentWidth(this.domNode) });\n this.rowsContainer.style.width = `${Math.max(this.scrollWidth || 0, this.renderWidth)}px`;\n }\n else {\n this.scrollableElementWidthDelayer.cancel();\n this.scrollableElement.setScrollDimensions({ width: this.renderWidth, scrollWidth: this.renderWidth });\n this.rowsContainer.style.width = '';\n }\n }\n constructor(container, virtualDelegate, renderers, options = DefaultOptions) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;\n this.virtualDelegate = virtualDelegate;\n this.domId = `list_id_${++ListView.InstanceCount}`;\n this.renderers = new Map();\n this.renderWidth = 0;\n this._scrollHeight = 0;\n this.scrollableElementUpdateDisposable = null;\n this.scrollableElementWidthDelayer = new Delayer(50);\n this.splicing = false;\n this.dragOverAnimationStopDisposable = Disposable.None;\n this.dragOverMouseY = 0;\n this.canDrop = false;\n this.currentDragFeedbackDisposable = Disposable.None;\n this.onDragLeaveTimeout = Disposable.None;\n this.disposables = new DisposableStore();\n this._onDidChangeContentHeight = new Emitter();\n this._onDidChangeContentWidth = new Emitter();\n this.onDidChangeContentHeight = Event.latch(this._onDidChangeContentHeight.event, undefined, this.disposables);\n this._horizontalScrolling = false;\n if (options.horizontalScrolling && options.supportDynamicHeights) {\n throw new Error('Horizontal scrolling and dynamic heights not supported simultaneously');\n }\n this.items = [];\n this.itemId = 0;\n this.rangeMap = this.createRangeMap((_a = options.paddingTop) !== null && _a !== void 0 ? _a : 0);\n for (const renderer of renderers) {\n this.renderers.set(renderer.templateId, renderer);\n }\n this.cache = this.disposables.add(new RowCache(this.renderers));\n this.lastRenderTop = 0;\n this.lastRenderHeight = 0;\n this.domNode = document.createElement('div');\n this.domNode.className = 'monaco-list';\n this.domNode.classList.add(this.domId);\n this.domNode.tabIndex = 0;\n this.domNode.classList.toggle('mouse-support', typeof options.mouseSupport === 'boolean' ? options.mouseSupport : true);\n this._horizontalScrolling = (_b = options.horizontalScrolling) !== null && _b !== void 0 ? _b : DefaultOptions.horizontalScrolling;\n this.domNode.classList.toggle('horizontal-scrolling', this._horizontalScrolling);\n this.paddingBottom = typeof options.paddingBottom === 'undefined' ? 0 : options.paddingBottom;\n this.accessibilityProvider = new ListViewAccessibilityProvider(options.accessibilityProvider);\n this.rowsContainer = document.createElement('div');\n this.rowsContainer.className = 'monaco-list-rows';\n const transformOptimization = (_c = options.transformOptimization) !== null && _c !== void 0 ? _c : DefaultOptions.transformOptimization;\n if (transformOptimization) {\n this.rowsContainer.style.transform = 'translate3d(0px, 0px, 0px)';\n this.rowsContainer.style.overflow = 'hidden';\n this.rowsContainer.style.contain = 'strict';\n }\n this.disposables.add(Gesture.addTarget(this.rowsContainer));\n this.scrollable = this.disposables.add(new Scrollable({\n forceIntegerValues: true,\n smoothScrollDuration: ((_d = options.smoothScrolling) !== null && _d !== void 0 ? _d : false) ? 125 : 0,\n scheduleAtNextAnimationFrame: cb => scheduleAtNextAnimationFrame(getWindow(this.domNode), cb)\n }));\n this.scrollableElement = this.disposables.add(new SmoothScrollableElement(this.rowsContainer, {\n alwaysConsumeMouseWheel: (_e = options.alwaysConsumeMouseWheel) !== null && _e !== void 0 ? _e : DefaultOptions.alwaysConsumeMouseWheel,\n horizontal: 1 /* ScrollbarVisibility.Auto */,\n vertical: (_f = options.verticalScrollMode) !== null && _f !== void 0 ? _f : DefaultOptions.verticalScrollMode,\n useShadows: (_g = options.useShadows) !== null && _g !== void 0 ? _g : DefaultOptions.useShadows,\n mouseWheelScrollSensitivity: options.mouseWheelScrollSensitivity,\n fastScrollSensitivity: options.fastScrollSensitivity,\n scrollByPage: options.scrollByPage\n }, this.scrollable));\n this.domNode.appendChild(this.scrollableElement.getDomNode());\n container.appendChild(this.domNode);\n this.scrollableElement.onScroll(this.onScroll, this, this.disposables);\n this.disposables.add(addDisposableListener(this.rowsContainer, TouchEventType.Change, e => this.onTouchChange(e)));\n // Prevent the monaco-scrollable-element from scrolling\n // https://github.com/microsoft/vscode/issues/44181\n this.disposables.add(addDisposableListener(this.scrollableElement.getDomNode(), 'scroll', e => e.target.scrollTop = 0));\n this.disposables.add(addDisposableListener(this.domNode, 'dragover', e => this.onDragOver(this.toDragEvent(e))));\n this.disposables.add(addDisposableListener(this.domNode, 'drop', e => this.onDrop(this.toDragEvent(e))));\n this.disposables.add(addDisposableListener(this.domNode, 'dragleave', e => this.onDragLeave(this.toDragEvent(e))));\n this.disposables.add(addDisposableListener(this.domNode, 'dragend', e => this.onDragEnd(e)));\n this.setRowLineHeight = (_h = options.setRowLineHeight) !== null && _h !== void 0 ? _h : DefaultOptions.setRowLineHeight;\n this.setRowHeight = (_j = options.setRowHeight) !== null && _j !== void 0 ? _j : DefaultOptions.setRowHeight;\n this.supportDynamicHeights = (_k = options.supportDynamicHeights) !== null && _k !== void 0 ? _k : DefaultOptions.supportDynamicHeights;\n this.dnd = (_l = options.dnd) !== null && _l !== void 0 ? _l : this.disposables.add(DefaultOptions.dnd);\n this.layout((_m = options.initialSize) === null || _m === void 0 ? void 0 : _m.height, (_o = options.initialSize) === null || _o === void 0 ? void 0 : _o.width);\n }\n updateOptions(options) {\n if (options.paddingBottom !== undefined) {\n this.paddingBottom = options.paddingBottom;\n this.scrollableElement.setScrollDimensions({ scrollHeight: this.scrollHeight });\n }\n if (options.smoothScrolling !== undefined) {\n this.scrollable.setSmoothScrollDuration(options.smoothScrolling ? 125 : 0);\n }\n if (options.horizontalScrolling !== undefined) {\n this.horizontalScrolling = options.horizontalScrolling;\n }\n let scrollableOptions;\n if (options.scrollByPage !== undefined) {\n scrollableOptions = { ...(scrollableOptions !== null && scrollableOptions !== void 0 ? scrollableOptions : {}), scrollByPage: options.scrollByPage };\n }\n if (options.mouseWheelScrollSensitivity !== undefined) {\n scrollableOptions = { ...(scrollableOptions !== null && scrollableOptions !== void 0 ? scrollableOptions : {}), mouseWheelScrollSensitivity: options.mouseWheelScrollSensitivity };\n }\n if (options.fastScrollSensitivity !== undefined) {\n scrollableOptions = { ...(scrollableOptions !== null && scrollableOptions !== void 0 ? scrollableOptions : {}), fastScrollSensitivity: options.fastScrollSensitivity };\n }\n if (scrollableOptions) {\n this.scrollableElement.updateOptions(scrollableOptions);\n }\n if (options.paddingTop !== undefined && options.paddingTop !== this.rangeMap.paddingTop) {\n // trigger a rerender\n const lastRenderRange = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);\n const offset = options.paddingTop - this.rangeMap.paddingTop;\n this.rangeMap.paddingTop = options.paddingTop;\n this.render(lastRenderRange, Math.max(0, this.lastRenderTop + offset), this.lastRenderHeight, undefined, undefined, true);\n this.setScrollTop(this.lastRenderTop);\n this.eventuallyUpdateScrollDimensions();\n if (this.supportDynamicHeights) {\n this._rerender(this.lastRenderTop, this.lastRenderHeight);\n }\n }\n }\n createRangeMap(paddingTop) {\n return new RangeMap(paddingTop);\n }\n splice(start, deleteCount, elements = []) {\n if (this.splicing) {\n throw new Error('Can\\'t run recursive splices.');\n }\n this.splicing = true;\n try {\n return this._splice(start, deleteCount, elements);\n }\n finally {\n this.splicing = false;\n this._onDidChangeContentHeight.fire(this.contentHeight);\n }\n }\n _splice(start, deleteCount, elements = []) {\n const previousRenderRange = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);\n const deleteRange = { start, end: start + deleteCount };\n const removeRange = Range.intersect(previousRenderRange, deleteRange);\n // try to reuse rows, avoid removing them from DOM\n const rowsToDispose = new Map();\n for (let i = removeRange.end - 1; i >= removeRange.start; i--) {\n const item = this.items[i];\n item.dragStartDisposable.dispose();\n item.checkedDisposable.dispose();\n if (item.row) {\n let rows = rowsToDispose.get(item.templateId);\n if (!rows) {\n rows = [];\n rowsToDispose.set(item.templateId, rows);\n }\n const renderer = this.renderers.get(item.templateId);\n if (renderer && renderer.disposeElement) {\n renderer.disposeElement(item.element, i, item.row.templateData, item.size);\n }\n rows.unshift(item.row);\n }\n item.row = null;\n item.stale = true;\n }\n const previousRestRange = { start: start + deleteCount, end: this.items.length };\n const previousRenderedRestRange = Range.intersect(previousRestRange, previousRenderRange);\n const previousUnrenderedRestRanges = Range.relativeComplement(previousRestRange, previousRenderRange);\n const inserted = elements.map(element => ({\n id: String(this.itemId++),\n element,\n templateId: this.virtualDelegate.getTemplateId(element),\n size: this.virtualDelegate.getHeight(element),\n width: undefined,\n hasDynamicHeight: !!this.virtualDelegate.hasDynamicHeight && this.virtualDelegate.hasDynamicHeight(element),\n lastDynamicHeightWidth: undefined,\n row: null,\n uri: undefined,\n dropTarget: false,\n dragStartDisposable: Disposable.None,\n checkedDisposable: Disposable.None,\n stale: false\n }));\n let deleted;\n // TODO@joao: improve this optimization to catch even more cases\n if (start === 0 && deleteCount >= this.items.length) {\n this.rangeMap = this.createRangeMap(this.rangeMap.paddingTop);\n this.rangeMap.splice(0, 0, inserted);\n deleted = this.items;\n this.items = inserted;\n }\n else {\n this.rangeMap.splice(start, deleteCount, inserted);\n deleted = this.items.splice(start, deleteCount, ...inserted);\n }\n const delta = elements.length - deleteCount;\n const renderRange = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);\n const renderedRestRange = shift(previousRenderedRestRange, delta);\n const updateRange = Range.intersect(renderRange, renderedRestRange);\n for (let i = updateRange.start; i < updateRange.end; i++) {\n this.updateItemInDOM(this.items[i], i);\n }\n const removeRanges = Range.relativeComplement(renderedRestRange, renderRange);\n for (const range of removeRanges) {\n for (let i = range.start; i < range.end; i++) {\n this.removeItemFromDOM(i);\n }\n }\n const unrenderedRestRanges = previousUnrenderedRestRanges.map(r => shift(r, delta));\n const elementsRange = { start, end: start + elements.length };\n const insertRanges = [elementsRange, ...unrenderedRestRanges].map(r => Range.intersect(renderRange, r)).reverse();\n for (const range of insertRanges) {\n for (let i = range.end - 1; i >= range.start; i--) {\n const item = this.items[i];\n const rows = rowsToDispose.get(item.templateId);\n const row = rows === null || rows === void 0 ? void 0 : rows.pop();\n this.insertItemInDOM(i, row);\n }\n }\n for (const rows of rowsToDispose.values()) {\n for (const row of rows) {\n this.cache.release(row);\n }\n }\n this.eventuallyUpdateScrollDimensions();\n if (this.supportDynamicHeights) {\n this._rerender(this.scrollTop, this.renderHeight);\n }\n return deleted.map(i => i.element);\n }\n eventuallyUpdateScrollDimensions() {\n this._scrollHeight = this.contentHeight;\n this.rowsContainer.style.height = `${this._scrollHeight}px`;\n if (!this.scrollableElementUpdateDisposable) {\n this.scrollableElementUpdateDisposable = scheduleAtNextAnimationFrame(getWindow(this.domNode), () => {\n this.scrollableElement.setScrollDimensions({ scrollHeight: this.scrollHeight });\n this.updateScrollWidth();\n this.scrollableElementUpdateDisposable = null;\n });\n }\n }\n eventuallyUpdateScrollWidth() {\n if (!this.horizontalScrolling) {\n this.scrollableElementWidthDelayer.cancel();\n return;\n }\n this.scrollableElementWidthDelayer.trigger(() => this.updateScrollWidth());\n }\n updateScrollWidth() {\n if (!this.horizontalScrolling) {\n return;\n }\n let scrollWidth = 0;\n for (const item of this.items) {\n if (typeof item.width !== 'undefined') {\n scrollWidth = Math.max(scrollWidth, item.width);\n }\n }\n this.scrollWidth = scrollWidth;\n this.scrollableElement.setScrollDimensions({ scrollWidth: scrollWidth === 0 ? 0 : (scrollWidth + 10) });\n this._onDidChangeContentWidth.fire(this.scrollWidth);\n }\n rerender() {\n if (!this.supportDynamicHeights) {\n return;\n }\n for (const item of this.items) {\n item.lastDynamicHeightWidth = undefined;\n }\n this._rerender(this.lastRenderTop, this.lastRenderHeight);\n }\n get length() {\n return this.items.length;\n }\n get renderHeight() {\n const scrollDimensions = this.scrollableElement.getScrollDimensions();\n return scrollDimensions.height;\n }\n get firstVisibleIndex() {\n const range = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);\n return range.start;\n }\n element(index) {\n return this.items[index].element;\n }\n indexOf(element) {\n return this.items.findIndex(item => item.element === element);\n }\n domElement(index) {\n const row = this.items[index].row;\n return row && row.domNode;\n }\n elementHeight(index) {\n return this.items[index].size;\n }\n elementTop(index) {\n return this.rangeMap.positionAt(index);\n }\n indexAt(position) {\n return this.rangeMap.indexAt(position);\n }\n indexAfter(position) {\n return this.rangeMap.indexAfter(position);\n }\n layout(height, width) {\n const scrollDimensions = {\n height: typeof height === 'number' ? height : getContentHeight(this.domNode)\n };\n if (this.scrollableElementUpdateDisposable) {\n this.scrollableElementUpdateDisposable.dispose();\n this.scrollableElementUpdateDisposable = null;\n scrollDimensions.scrollHeight = this.scrollHeight;\n }\n this.scrollableElement.setScrollDimensions(scrollDimensions);\n if (typeof width !== 'undefined') {\n this.renderWidth = width;\n if (this.supportDynamicHeights) {\n this._rerender(this.scrollTop, this.renderHeight);\n }\n }\n if (this.horizontalScrolling) {\n this.scrollableElement.setScrollDimensions({\n width: typeof width === 'number' ? width : getContentWidth(this.domNode)\n });\n }\n }\n // Render\n render(previousRenderRange, renderTop, renderHeight, renderLeft, scrollWidth, updateItemsInDOM = false) {\n const renderRange = this.getRenderRange(renderTop, renderHeight);\n const rangesToInsert = Range.relativeComplement(renderRange, previousRenderRange).reverse();\n const rangesToRemove = Range.relativeComplement(previousRenderRange, renderRange);\n if (updateItemsInDOM) {\n const rangesToUpdate = Range.intersect(previousRenderRange, renderRange);\n for (let i = rangesToUpdate.start; i < rangesToUpdate.end; i++) {\n this.updateItemInDOM(this.items[i], i);\n }\n }\n this.cache.transact(() => {\n for (const range of rangesToRemove) {\n for (let i = range.start; i < range.end; i++) {\n this.removeItemFromDOM(i);\n }\n }\n for (const range of rangesToInsert) {\n for (let i = range.end - 1; i >= range.start; i--) {\n this.insertItemInDOM(i);\n }\n }\n });\n if (renderLeft !== undefined) {\n this.rowsContainer.style.left = `-${renderLeft}px`;\n }\n this.rowsContainer.style.top = `-${renderTop}px`;\n if (this.horizontalScrolling && scrollWidth !== undefined) {\n this.rowsContainer.style.width = `${Math.max(scrollWidth, this.renderWidth)}px`;\n }\n this.lastRenderTop = renderTop;\n this.lastRenderHeight = renderHeight;\n }\n // DOM operations\n insertItemInDOM(index, row) {\n var _a, _b, _c;\n const item = this.items[index];\n if (!item.row) {\n if (row) {\n item.row = row;\n item.stale = true;\n }\n else {\n const result = this.cache.alloc(item.templateId);\n item.row = result.row;\n item.stale || (item.stale = result.isReusingConnectedDomNode);\n }\n }\n const role = this.accessibilityProvider.getRole(item.element) || 'listitem';\n item.row.domNode.setAttribute('role', role);\n const checked = this.accessibilityProvider.isChecked(item.element);\n if (typeof checked === 'boolean') {\n item.row.domNode.setAttribute('aria-checked', String(!!checked));\n }\n else if (checked) {\n const update = (checked) => item.row.domNode.setAttribute('aria-checked', String(!!checked));\n update(checked.value);\n item.checkedDisposable = checked.onDidChange(() => update(checked.value));\n }\n if (item.stale || !item.row.domNode.parentElement) {\n const referenceNode = (_c = (_b = (_a = this.items.at(index + 1)) === null || _a === void 0 ? void 0 : _a.row) === null || _b === void 0 ? void 0 : _b.domNode) !== null && _c !== void 0 ? _c : null;\n if (item.row.domNode.parentElement !== this.rowsContainer || item.row.domNode.nextElementSibling !== referenceNode) {\n this.rowsContainer.insertBefore(item.row.domNode, referenceNode);\n }\n item.stale = false;\n }\n this.updateItemInDOM(item, index);\n const renderer = this.renderers.get(item.templateId);\n if (!renderer) {\n throw new Error(`No renderer found for template id ${item.templateId}`);\n }\n renderer === null || renderer === void 0 ? void 0 : renderer.renderElement(item.element, index, item.row.templateData, item.size);\n const uri = this.dnd.getDragURI(item.element);\n item.dragStartDisposable.dispose();\n item.row.domNode.draggable = !!uri;\n if (uri) {\n item.dragStartDisposable = addDisposableListener(item.row.domNode, 'dragstart', event => this.onDragStart(item.element, uri, event));\n }\n if (this.horizontalScrolling) {\n this.measureItemWidth(item);\n this.eventuallyUpdateScrollWidth();\n }\n }\n measureItemWidth(item) {\n if (!item.row || !item.row.domNode) {\n return;\n }\n item.row.domNode.style.width = 'fit-content';\n item.width = getContentWidth(item.row.domNode);\n const style = getWindow(item.row.domNode).getComputedStyle(item.row.domNode);\n if (style.paddingLeft) {\n item.width += parseFloat(style.paddingLeft);\n }\n if (style.paddingRight) {\n item.width += parseFloat(style.paddingRight);\n }\n item.row.domNode.style.width = '';\n }\n updateItemInDOM(item, index) {\n item.row.domNode.style.top = `${this.elementTop(index)}px`;\n if (this.setRowHeight) {\n item.row.domNode.style.height = `${item.size}px`;\n }\n if (this.setRowLineHeight) {\n item.row.domNode.style.lineHeight = `${item.size}px`;\n }\n item.row.domNode.setAttribute('data-index', `${index}`);\n item.row.domNode.setAttribute('data-last-element', index === this.length - 1 ? 'true' : 'false');\n item.row.domNode.setAttribute('data-parity', index % 2 === 0 ? 'even' : 'odd');\n item.row.domNode.setAttribute('aria-setsize', String(this.accessibilityProvider.getSetSize(item.element, index, this.length)));\n item.row.domNode.setAttribute('aria-posinset', String(this.accessibilityProvider.getPosInSet(item.element, index)));\n item.row.domNode.setAttribute('id', this.getElementDomId(index));\n item.row.domNode.classList.toggle('drop-target', item.dropTarget);\n }\n removeItemFromDOM(index) {\n const item = this.items[index];\n item.dragStartDisposable.dispose();\n item.checkedDisposable.dispose();\n if (item.row) {\n const renderer = this.renderers.get(item.templateId);\n if (renderer && renderer.disposeElement) {\n renderer.disposeElement(item.element, index, item.row.templateData, item.size);\n }\n this.cache.release(item.row);\n item.row = null;\n }\n if (this.horizontalScrolling) {\n this.eventuallyUpdateScrollWidth();\n }\n }\n getScrollTop() {\n const scrollPosition = this.scrollableElement.getScrollPosition();\n return scrollPosition.scrollTop;\n }\n setScrollTop(scrollTop, reuseAnimation) {\n if (this.scrollableElementUpdateDisposable) {\n this.scrollableElementUpdateDisposable.dispose();\n this.scrollableElementUpdateDisposable = null;\n this.scrollableElement.setScrollDimensions({ scrollHeight: this.scrollHeight });\n }\n this.scrollableElement.setScrollPosition({ scrollTop, reuseAnimation });\n }\n get scrollTop() {\n return this.getScrollTop();\n }\n set scrollTop(scrollTop) {\n this.setScrollTop(scrollTop);\n }\n get scrollHeight() {\n return this._scrollHeight + (this.horizontalScrolling ? 10 : 0) + this.paddingBottom;\n }\n // Events\n get onMouseClick() { return Event.map(this.disposables.add(new DomEmitter(this.domNode, 'click')).event, e => this.toMouseEvent(e), this.disposables); }\n get onMouseDblClick() { return Event.map(this.disposables.add(new DomEmitter(this.domNode, 'dblclick')).event, e => this.toMouseEvent(e), this.disposables); }\n get onMouseMiddleClick() { return Event.filter(Event.map(this.disposables.add(new DomEmitter(this.domNode, 'auxclick')).event, e => this.toMouseEvent(e), this.disposables), e => e.browserEvent.button === 1, this.disposables); }\n get onMouseDown() { return Event.map(this.disposables.add(new DomEmitter(this.domNode, 'mousedown')).event, e => this.toMouseEvent(e), this.disposables); }\n get onMouseOver() { return Event.map(this.disposables.add(new DomEmitter(this.domNode, 'mouseover')).event, e => this.toMouseEvent(e), this.disposables); }\n get onMouseOut() { return Event.map(this.disposables.add(new DomEmitter(this.domNode, 'mouseout')).event, e => this.toMouseEvent(e), this.disposables); }\n get onContextMenu() { return Event.any(Event.map(this.disposables.add(new DomEmitter(this.domNode, 'contextmenu')).event, e => this.toMouseEvent(e), this.disposables), Event.map(this.disposables.add(new DomEmitter(this.domNode, TouchEventType.Contextmenu)).event, e => this.toGestureEvent(e), this.disposables)); }\n get onTouchStart() { return Event.map(this.disposables.add(new DomEmitter(this.domNode, 'touchstart')).event, e => this.toTouchEvent(e), this.disposables); }\n get onTap() { return Event.map(this.disposables.add(new DomEmitter(this.rowsContainer, TouchEventType.Tap)).event, e => this.toGestureEvent(e), this.disposables); }\n toMouseEvent(browserEvent) {\n const index = this.getItemIndexFromEventTarget(browserEvent.target || null);\n const item = typeof index === 'undefined' ? undefined : this.items[index];\n const element = item && item.element;\n return { browserEvent, index, element };\n }\n toTouchEvent(browserEvent) {\n const index = this.getItemIndexFromEventTarget(browserEvent.target || null);\n const item = typeof index === 'undefined' ? undefined : this.items[index];\n const element = item && item.element;\n return { browserEvent, index, element };\n }\n toGestureEvent(browserEvent) {\n const index = this.getItemIndexFromEventTarget(browserEvent.initialTarget || null);\n const item = typeof index === 'undefined' ? undefined : this.items[index];\n const element = item && item.element;\n return { browserEvent, index, element };\n }\n toDragEvent(browserEvent) {\n const index = this.getItemIndexFromEventTarget(browserEvent.target || null);\n const item = typeof index === 'undefined' ? undefined : this.items[index];\n const element = item && item.element;\n const sector = this.getTargetSector(browserEvent, index);\n return { browserEvent, index, element, sector };\n }\n onScroll(e) {\n try {\n const previousRenderRange = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);\n this.render(previousRenderRange, e.scrollTop, e.height, e.scrollLeft, e.scrollWidth);\n if (this.supportDynamicHeights) {\n this._rerender(e.scrollTop, e.height, e.inSmoothScrolling);\n }\n }\n catch (err) {\n console.error('Got bad scroll event:', e);\n throw err;\n }\n }\n onTouchChange(event) {\n event.preventDefault();\n event.stopPropagation();\n this.scrollTop -= event.translationY;\n }\n // DND\n onDragStart(element, uri, event) {\n var _a, _b;\n if (!event.dataTransfer) {\n return;\n }\n const elements = this.dnd.getDragElements(element);\n event.dataTransfer.effectAllowed = 'copyMove';\n event.dataTransfer.setData(DataTransfers.TEXT, uri);\n if (event.dataTransfer.setDragImage) {\n let label;\n if (this.dnd.getDragLabel) {\n label = this.dnd.getDragLabel(elements, event);\n }\n if (typeof label === 'undefined') {\n label = String(elements.length);\n }\n const dragImage = $('.monaco-drag-image');\n dragImage.textContent = label;\n const getDragImageContainer = (e) => {\n while (e && !e.classList.contains('monaco-workbench')) {\n e = e.parentElement;\n }\n return e || this.domNode.ownerDocument;\n };\n const container = getDragImageContainer(this.domNode);\n container.appendChild(dragImage);\n event.dataTransfer.setDragImage(dragImage, -10, -10);\n setTimeout(() => container.removeChild(dragImage), 0);\n }\n this.domNode.classList.add('dragging');\n this.currentDragData = new ElementsDragAndDropData(elements);\n StaticDND.CurrentDragAndDropData = new ExternalElementsDragAndDropData(elements);\n (_b = (_a = this.dnd).onDragStart) === null || _b === void 0 ? void 0 : _b.call(_a, this.currentDragData, event);\n }\n onDragOver(event) {\n var _a, _b;\n event.browserEvent.preventDefault(); // needed so that the drop event fires (https://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)\n this.onDragLeaveTimeout.dispose();\n if (StaticDND.CurrentDragAndDropData && StaticDND.CurrentDragAndDropData.getData() === 'vscode-ui') {\n return false;\n }\n this.setupDragAndDropScrollTopAnimation(event.browserEvent);\n if (!event.browserEvent.dataTransfer) {\n return false;\n }\n // Drag over from outside\n if (!this.currentDragData) {\n if (StaticDND.CurrentDragAndDropData) {\n // Drag over from another list\n this.currentDragData = StaticDND.CurrentDragAndDropData;\n }\n else {\n // Drag over from the desktop\n if (!event.browserEvent.dataTransfer.types) {\n return false;\n }\n this.currentDragData = new NativeDragAndDropData();\n }\n }\n const result = this.dnd.onDragOver(this.currentDragData, event.element, event.index, event.sector, event.browserEvent);\n this.canDrop = typeof result === 'boolean' ? result : result.accept;\n if (!this.canDrop) {\n this.currentDragFeedback = undefined;\n this.currentDragFeedbackDisposable.dispose();\n return false;\n }\n event.browserEvent.dataTransfer.dropEffect = (typeof result !== 'boolean' && ((_a = result.effect) === null || _a === void 0 ? void 0 : _a.type) === 0 /* ListDragOverEffectType.Copy */) ? 'copy' : 'move';\n let feedback;\n if (typeof result !== 'boolean' && result.feedback) {\n feedback = result.feedback;\n }\n else {\n if (typeof event.index === 'undefined') {\n feedback = [-1];\n }\n else {\n feedback = [event.index];\n }\n }\n // sanitize feedback list\n feedback = distinct(feedback).filter(i => i >= -1 && i < this.length).sort((a, b) => a - b);\n feedback = feedback[0] === -1 ? [-1] : feedback;\n let dragOverEffectPosition = typeof result !== 'boolean' && result.effect && result.effect.position ? result.effect.position : \"drop-target\" /* ListDragOverEffectPosition.Over */;\n if (equalsDragFeedback(this.currentDragFeedback, feedback) && this.currentDragFeedbackPosition === dragOverEffectPosition) {\n return true;\n }\n this.currentDragFeedback = feedback;\n this.currentDragFeedbackPosition = dragOverEffectPosition;\n this.currentDragFeedbackDisposable.dispose();\n if (feedback[0] === -1) { // entire list feedback\n this.domNode.classList.add(dragOverEffectPosition);\n this.rowsContainer.classList.add(dragOverEffectPosition);\n this.currentDragFeedbackDisposable = toDisposable(() => {\n this.domNode.classList.remove(dragOverEffectPosition);\n this.rowsContainer.classList.remove(dragOverEffectPosition);\n });\n }\n else {\n if (feedback.length > 1 && dragOverEffectPosition !== \"drop-target\" /* ListDragOverEffectPosition.Over */) {\n throw new Error('Can\\'t use multiple feedbacks with position different than \\'over\\'');\n }\n // Make sure there is no flicker when moving between two items\n // Always use the before feedback if possible\n if (dragOverEffectPosition === \"drop-target-after\" /* ListDragOverEffectPosition.After */) {\n if (feedback[0] < this.length - 1) {\n feedback[0] += 1;\n dragOverEffectPosition = \"drop-target-before\" /* ListDragOverEffectPosition.Before */;\n }\n }\n for (const index of feedback) {\n const item = this.items[index];\n item.dropTarget = true;\n (_b = item.row) === null || _b === void 0 ? void 0 : _b.domNode.classList.add(dragOverEffectPosition);\n }\n this.currentDragFeedbackDisposable = toDisposable(() => {\n var _a;\n for (const index of feedback) {\n const item = this.items[index];\n item.dropTarget = false;\n (_a = item.row) === null || _a === void 0 ? void 0 : _a.domNode.classList.remove(dragOverEffectPosition);\n }\n });\n }\n return true;\n }\n onDragLeave(event) {\n var _a, _b;\n this.onDragLeaveTimeout.dispose();\n this.onDragLeaveTimeout = disposableTimeout(() => this.clearDragOverFeedback(), 100, this.disposables);\n if (this.currentDragData) {\n (_b = (_a = this.dnd).onDragLeave) === null || _b === void 0 ? void 0 : _b.call(_a, this.currentDragData, event.element, event.index, event.browserEvent);\n }\n }\n onDrop(event) {\n if (!this.canDrop) {\n return;\n }\n const dragData = this.currentDragData;\n this.teardownDragAndDropScrollTopAnimation();\n this.clearDragOverFeedback();\n this.domNode.classList.remove('dragging');\n this.currentDragData = undefined;\n StaticDND.CurrentDragAndDropData = undefined;\n if (!dragData || !event.browserEvent.dataTransfer) {\n return;\n }\n event.browserEvent.preventDefault();\n dragData.update(event.browserEvent.dataTransfer);\n this.dnd.drop(dragData, event.element, event.index, event.sector, event.browserEvent);\n }\n onDragEnd(event) {\n var _a, _b;\n this.canDrop = false;\n this.teardownDragAndDropScrollTopAnimation();\n this.clearDragOverFeedback();\n this.domNode.classList.remove('dragging');\n this.currentDragData = undefined;\n StaticDND.CurrentDragAndDropData = undefined;\n (_b = (_a = this.dnd).onDragEnd) === null || _b === void 0 ? void 0 : _b.call(_a, event);\n }\n clearDragOverFeedback() {\n this.currentDragFeedback = undefined;\n this.currentDragFeedbackPosition = undefined;\n this.currentDragFeedbackDisposable.dispose();\n this.currentDragFeedbackDisposable = Disposable.None;\n }\n // DND scroll top animation\n setupDragAndDropScrollTopAnimation(event) {\n if (!this.dragOverAnimationDisposable) {\n const viewTop = getTopLeftOffset(this.domNode).top;\n this.dragOverAnimationDisposable = animate(getWindow(this.domNode), this.animateDragAndDropScrollTop.bind(this, viewTop));\n }\n this.dragOverAnimationStopDisposable.dispose();\n this.dragOverAnimationStopDisposable = disposableTimeout(() => {\n if (this.dragOverAnimationDisposable) {\n this.dragOverAnimationDisposable.dispose();\n this.dragOverAnimationDisposable = undefined;\n }\n }, 1000, this.disposables);\n this.dragOverMouseY = event.pageY;\n }\n animateDragAndDropScrollTop(viewTop) {\n if (this.dragOverMouseY === undefined) {\n return;\n }\n const diff = this.dragOverMouseY - viewTop;\n const upperLimit = this.renderHeight - 35;\n if (diff < 35) {\n this.scrollTop += Math.max(-14, Math.floor(0.3 * (diff - 35)));\n }\n else if (diff > upperLimit) {\n this.scrollTop += Math.min(14, Math.floor(0.3 * (diff - upperLimit)));\n }\n }\n teardownDragAndDropScrollTopAnimation() {\n this.dragOverAnimationStopDisposable.dispose();\n if (this.dragOverAnimationDisposable) {\n this.dragOverAnimationDisposable.dispose();\n this.dragOverAnimationDisposable = undefined;\n }\n }\n // Util\n getTargetSector(browserEvent, targetIndex) {\n if (targetIndex === undefined) {\n return undefined;\n }\n const relativePosition = browserEvent.offsetY / this.items[targetIndex].size;\n const sector = Math.floor(relativePosition / 0.25);\n return clamp(sector, 0, 3);\n }\n getItemIndexFromEventTarget(target) {\n const scrollableElement = this.scrollableElement.getDomNode();\n let element = target;\n while (isHTMLElement(element) && element !== this.rowsContainer && scrollableElement.contains(element)) {\n const rawIndex = element.getAttribute('data-index');\n if (rawIndex) {\n const index = Number(rawIndex);\n if (!isNaN(index)) {\n return index;\n }\n }\n element = element.parentElement;\n }\n return undefined;\n }\n getRenderRange(renderTop, renderHeight) {\n return {\n start: this.rangeMap.indexAt(renderTop),\n end: this.rangeMap.indexAfter(renderTop + renderHeight - 1)\n };\n }\n /**\n * Given a stable rendered state, checks every rendered element whether it needs\n * to be probed for dynamic height. Adjusts scroll height and top if necessary.\n */\n _rerender(renderTop, renderHeight, inSmoothScrolling) {\n const previousRenderRange = this.getRenderRange(renderTop, renderHeight);\n // Let's remember the second element's position, this helps in scrolling up\n // and preserving a linear upwards scroll movement\n let anchorElementIndex;\n let anchorElementTopDelta;\n if (renderTop === this.elementTop(previousRenderRange.start)) {\n anchorElementIndex = previousRenderRange.start;\n anchorElementTopDelta = 0;\n }\n else if (previousRenderRange.end - previousRenderRange.start > 1) {\n anchorElementIndex = previousRenderRange.start + 1;\n anchorElementTopDelta = this.elementTop(anchorElementIndex) - renderTop;\n }\n let heightDiff = 0;\n while (true) {\n const renderRange = this.getRenderRange(renderTop, renderHeight);\n let didChange = false;\n for (let i = renderRange.start; i < renderRange.end; i++) {\n const diff = this.probeDynamicHeight(i);\n if (diff !== 0) {\n this.rangeMap.splice(i, 1, [this.items[i]]);\n }\n heightDiff += diff;\n didChange = didChange || diff !== 0;\n }\n if (!didChange) {\n if (heightDiff !== 0) {\n this.eventuallyUpdateScrollDimensions();\n }\n const unrenderRanges = Range.relativeComplement(previousRenderRange, renderRange);\n for (const range of unrenderRanges) {\n for (let i = range.start; i < range.end; i++) {\n if (this.items[i].row) {\n this.removeItemFromDOM(i);\n }\n }\n }\n const renderRanges = Range.relativeComplement(renderRange, previousRenderRange).reverse();\n for (const range of renderRanges) {\n for (let i = range.end - 1; i >= range.start; i--) {\n this.insertItemInDOM(i);\n }\n }\n for (let i = renderRange.start; i < renderRange.end; i++) {\n if (this.items[i].row) {\n this.updateItemInDOM(this.items[i], i);\n }\n }\n if (typeof anchorElementIndex === 'number') {\n // To compute a destination scroll top, we need to take into account the current smooth scrolling\n // animation, and then reuse it with a new target (to avoid prolonging the scroll)\n // See https://github.com/microsoft/vscode/issues/104144\n // See https://github.com/microsoft/vscode/pull/104284\n // See https://github.com/microsoft/vscode/issues/107704\n const deltaScrollTop = this.scrollable.getFutureScrollPosition().scrollTop - renderTop;\n const newScrollTop = this.elementTop(anchorElementIndex) - anchorElementTopDelta + deltaScrollTop;\n this.setScrollTop(newScrollTop, inSmoothScrolling);\n }\n this._onDidChangeContentHeight.fire(this.contentHeight);\n return;\n }\n }\n }\n probeDynamicHeight(index) {\n var _a, _b, _c;\n const item = this.items[index];\n if (!!this.virtualDelegate.getDynamicHeight) {\n const newSize = this.virtualDelegate.getDynamicHeight(item.element);\n if (newSize !== null) {\n const size = item.size;\n item.size = newSize;\n item.lastDynamicHeightWidth = this.renderWidth;\n return newSize - size;\n }\n }\n if (!item.hasDynamicHeight || item.lastDynamicHeightWidth === this.renderWidth) {\n return 0;\n }\n if (!!this.virtualDelegate.hasDynamicHeight && !this.virtualDelegate.hasDynamicHeight(item.element)) {\n return 0;\n }\n const size = item.size;\n if (item.row) {\n item.row.domNode.style.height = '';\n item.size = item.row.domNode.offsetHeight;\n if (item.size === 0 && !isAncestor(item.row.domNode, getWindow(item.row.domNode).document.body)) {\n console.warn('Measuring item node that is not in DOM! Add ListView to the DOM before measuring row height!');\n }\n item.lastDynamicHeightWidth = this.renderWidth;\n return item.size - size;\n }\n const { row } = this.cache.alloc(item.templateId);\n row.domNode.style.height = '';\n this.rowsContainer.appendChild(row.domNode);\n const renderer = this.renderers.get(item.templateId);\n if (!renderer) {\n throw new BugIndicatingError('Missing renderer for templateId: ' + item.templateId);\n }\n renderer.renderElement(item.element, index, row.templateData, undefined);\n item.size = row.domNode.offsetHeight;\n (_a = renderer.disposeElement) === null || _a === void 0 ? void 0 : _a.call(renderer, item.element, index, row.templateData, undefined);\n (_c = (_b = this.virtualDelegate).setDynamicHeight) === null || _c === void 0 ? void 0 : _c.call(_b, item.element, item.size);\n item.lastDynamicHeightWidth = this.renderWidth;\n this.rowsContainer.removeChild(row.domNode);\n this.cache.release(row);\n return item.size - size;\n }\n getElementDomId(index) {\n return `${this.domId}_${index}`;\n }\n // Dispose\n dispose() {\n var _a, _b;\n for (const item of this.items) {\n item.dragStartDisposable.dispose();\n item.checkedDisposable.dispose();\n if (item.row) {\n const renderer = this.renderers.get(item.row.templateId);\n if (renderer) {\n (_a = renderer.disposeElement) === null || _a === void 0 ? void 0 : _a.call(renderer, item.element, -1, item.row.templateData, undefined);\n renderer.disposeTemplate(item.row.templateData);\n }\n }\n }\n this.items = [];\n if (this.domNode && this.domNode.parentNode) {\n this.domNode.parentNode.removeChild(this.domNode);\n }\n (_b = this.dragOverAnimationDisposable) === null || _b === void 0 ? void 0 : _b.dispose();\n this.disposables.dispose();\n }\n}\nListView.InstanceCount = 0;\n__decorate([\n memoize\n], ListView.prototype, \"onMouseClick\", null);\n__decorate([\n memoize\n], ListView.prototype, \"onMouseDblClick\", null);\n__decorate([\n memoize\n], ListView.prototype, \"onMouseMiddleClick\", null);\n__decorate([\n memoize\n], ListView.prototype, \"onMouseDown\", null);\n__decorate([\n memoize\n], ListView.prototype, \"onMouseOver\", null);\n__decorate([\n memoize\n], ListView.prototype, \"onMouseOut\", null);\n__decorate([\n memoize\n], ListView.prototype, \"onContextMenu\", null);\n__decorate([\n memoize\n], ListView.prototype, \"onTouchStart\", null);\n__decorate([\n memoize\n], ListView.prototype, \"onTap\", null);\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 *--------------------------------------------------------------------------------------------*/\nexport class CombinedSpliceable {\n constructor(spliceables) {\n this.spliceables = spliceables;\n }\n splice(start, deleteCount, elements) {\n this.spliceables.forEach(s => s.splice(start, deleteCount, elements));\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 *--------------------------------------------------------------------------------------------*/\nexport class ListError extends Error {\n constructor(user, message) {\n super(`ListError [${user}] ${message}`);\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { asCssValueWithDefault, createStyleSheet, EventHelper, getActiveElement, getWindow, isHTMLElement, isMouseEvent } from '../../dom.js';\nimport { DomEmitter } from '../../event.js';\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\nimport { Gesture } from '../../touch.js';\nimport { alert } from '../aria/aria.js';\nimport { CombinedSpliceable } from './splice.js';\nimport { binarySearch, firstOrDefault, range } from '../../../common/arrays.js';\nimport { timeout } from '../../../common/async.js';\nimport { Color } from '../../../common/color.js';\nimport { memoize } from '../../../common/decorators.js';\nimport { Emitter, Event, EventBufferer } from '../../../common/event.js';\nimport { matchesFuzzy2, matchesPrefix } from '../../../common/filters.js';\nimport { DisposableStore, dispose } from '../../../common/lifecycle.js';\nimport { clamp } from '../../../common/numbers.js';\nimport * as platform from '../../../common/platform.js';\nimport { isNumber } from '../../../common/types.js';\nimport './list.css';\nimport { ListError } from './list.js';\nimport { ListView } from './listView.js';\nimport { StandardMouseEvent } from '../../mouseEvent.js';\nimport { autorun, constObservable } from '../../../common/observable.js';\nclass TraitRenderer {\n constructor(trait) {\n this.trait = trait;\n this.renderedElements = [];\n }\n get templateId() {\n return `template:${this.trait.name}`;\n }\n renderTemplate(container) {\n return container;\n }\n renderElement(element, index, templateData) {\n const renderedElementIndex = this.renderedElements.findIndex(el => el.templateData === templateData);\n if (renderedElementIndex >= 0) {\n const rendered = this.renderedElements[renderedElementIndex];\n this.trait.unrender(templateData);\n rendered.index = index;\n }\n else {\n const rendered = { index, templateData };\n this.renderedElements.push(rendered);\n }\n this.trait.renderIndex(index, templateData);\n }\n splice(start, deleteCount, insertCount) {\n const rendered = [];\n for (const renderedElement of this.renderedElements) {\n if (renderedElement.index < start) {\n rendered.push(renderedElement);\n }\n else if (renderedElement.index >= start + deleteCount) {\n rendered.push({\n index: renderedElement.index + insertCount - deleteCount,\n templateData: renderedElement.templateData\n });\n }\n }\n this.renderedElements = rendered;\n }\n renderIndexes(indexes) {\n for (const { index, templateData } of this.renderedElements) {\n if (indexes.indexOf(index) > -1) {\n this.trait.renderIndex(index, templateData);\n }\n }\n }\n disposeTemplate(templateData) {\n const index = this.renderedElements.findIndex(el => el.templateData === templateData);\n if (index < 0) {\n return;\n }\n this.renderedElements.splice(index, 1);\n }\n}\nclass Trait {\n get name() { return this._trait; }\n get renderer() {\n return new TraitRenderer(this);\n }\n constructor(_trait) {\n this._trait = _trait;\n this.indexes = [];\n this.sortedIndexes = [];\n this._onChange = new Emitter();\n this.onChange = this._onChange.event;\n }\n splice(start, deleteCount, elements) {\n const diff = elements.length - deleteCount;\n const end = start + deleteCount;\n const sortedIndexes = [];\n let i = 0;\n while (i < this.sortedIndexes.length && this.sortedIndexes[i] < start) {\n sortedIndexes.push(this.sortedIndexes[i++]);\n }\n for (let j = 0; j < elements.length; j++) {\n if (elements[j]) {\n sortedIndexes.push(j + start);\n }\n }\n while (i < this.sortedIndexes.length && this.sortedIndexes[i] >= end) {\n sortedIndexes.push(this.sortedIndexes[i++] + diff);\n }\n this.renderer.splice(start, deleteCount, elements.length);\n this._set(sortedIndexes, sortedIndexes);\n }\n renderIndex(index, container) {\n container.classList.toggle(this._trait, this.contains(index));\n }\n unrender(container) {\n container.classList.remove(this._trait);\n }\n /**\n * Sets the indexes which should have this trait.\n *\n * @param indexes Indexes which should have this trait.\n * @return The old indexes which had this trait.\n */\n set(indexes, browserEvent) {\n return this._set(indexes, [...indexes].sort(numericSort), browserEvent);\n }\n _set(indexes, sortedIndexes, browserEvent) {\n const result = this.indexes;\n const sortedResult = this.sortedIndexes;\n this.indexes = indexes;\n this.sortedIndexes = sortedIndexes;\n const toRender = disjunction(sortedResult, indexes);\n this.renderer.renderIndexes(toRender);\n this._onChange.fire({ indexes, browserEvent });\n return result;\n }\n get() {\n return this.indexes;\n }\n contains(index) {\n return binarySearch(this.sortedIndexes, index, numericSort) >= 0;\n }\n dispose() {\n dispose(this._onChange);\n }\n}\n__decorate([\n memoize\n], Trait.prototype, \"renderer\", null);\nclass SelectionTrait extends Trait {\n constructor(setAriaSelected) {\n super('selected');\n this.setAriaSelected = setAriaSelected;\n }\n renderIndex(index, container) {\n super.renderIndex(index, container);\n if (this.setAriaSelected) {\n if (this.contains(index)) {\n container.setAttribute('aria-selected', 'true');\n }\n else {\n container.setAttribute('aria-selected', 'false');\n }\n }\n }\n}\n/**\n * The TraitSpliceable is used as a util class to be able\n * to preserve traits across splice calls, given an identity\n * provider.\n */\nclass TraitSpliceable {\n constructor(trait, view, identityProvider) {\n this.trait = trait;\n this.view = view;\n this.identityProvider = identityProvider;\n }\n splice(start, deleteCount, elements) {\n if (!this.identityProvider) {\n return this.trait.splice(start, deleteCount, new Array(elements.length).fill(false));\n }\n const pastElementsWithTrait = this.trait.get().map(i => this.identityProvider.getId(this.view.element(i)).toString());\n if (pastElementsWithTrait.length === 0) {\n return this.trait.splice(start, deleteCount, new Array(elements.length).fill(false));\n }\n const pastElementsWithTraitSet = new Set(pastElementsWithTrait);\n const elementsWithTrait = elements.map(e => pastElementsWithTraitSet.has(this.identityProvider.getId(e).toString()));\n this.trait.splice(start, deleteCount, elementsWithTrait);\n }\n}\nexport function isInputElement(e) {\n return e.tagName === 'INPUT' || e.tagName === 'TEXTAREA';\n}\nfunction isListElementDescendantOfClass(e, className) {\n if (e.classList.contains(className)) {\n return true;\n }\n if (e.classList.contains('monaco-list')) {\n return false;\n }\n if (!e.parentElement) {\n return false;\n }\n return isListElementDescendantOfClass(e.parentElement, className);\n}\nexport function isMonacoEditor(e) {\n return isListElementDescendantOfClass(e, 'monaco-editor');\n}\nexport function isMonacoCustomToggle(e) {\n return isListElementDescendantOfClass(e, 'monaco-custom-toggle');\n}\nexport function isActionItem(e) {\n return isListElementDescendantOfClass(e, 'action-item');\n}\nexport function isStickyScrollElement(e) {\n return isListElementDescendantOfClass(e, 'monaco-tree-sticky-row');\n}\nexport function isStickyScrollContainer(e) {\n return e.classList.contains('monaco-tree-sticky-container');\n}\nexport function isButton(e) {\n if ((e.tagName === 'A' && e.classList.contains('monaco-button')) ||\n (e.tagName === 'DIV' && e.classList.contains('monaco-button-dropdown'))) {\n return true;\n }\n if (e.classList.contains('monaco-list')) {\n return false;\n }\n if (!e.parentElement) {\n return false;\n }\n return isButton(e.parentElement);\n}\nclass KeyboardController {\n get onKeyDown() {\n return Event.chain(this.disposables.add(new DomEmitter(this.view.domNode, 'keydown')).event, $ => $.filter(e => !isInputElement(e.target))\n .map(e => new StandardKeyboardEvent(e)));\n }\n constructor(list, view, options) {\n this.list = list;\n this.view = view;\n this.disposables = new DisposableStore();\n this.multipleSelectionDisposables = new DisposableStore();\n this.multipleSelectionSupport = options.multipleSelectionSupport;\n this.disposables.add(this.onKeyDown(e => {\n switch (e.keyCode) {\n case 3 /* KeyCode.Enter */:\n return this.onEnter(e);\n case 16 /* KeyCode.UpArrow */:\n return this.onUpArrow(e);\n case 18 /* KeyCode.DownArrow */:\n return this.onDownArrow(e);\n case 11 /* KeyCode.PageUp */:\n return this.onPageUpArrow(e);\n case 12 /* KeyCode.PageDown */:\n return this.onPageDownArrow(e);\n case 9 /* KeyCode.Escape */:\n return this.onEscape(e);\n case 31 /* KeyCode.KeyA */:\n if (this.multipleSelectionSupport && (platform.isMacintosh ? e.metaKey : e.ctrlKey)) {\n this.onCtrlA(e);\n }\n }\n }));\n }\n updateOptions(optionsUpdate) {\n if (optionsUpdate.multipleSelectionSupport !== undefined) {\n this.multipleSelectionSupport = optionsUpdate.multipleSelectionSupport;\n }\n }\n onEnter(e) {\n e.preventDefault();\n e.stopPropagation();\n this.list.setSelection(this.list.getFocus(), e.browserEvent);\n }\n onUpArrow(e) {\n e.preventDefault();\n e.stopPropagation();\n this.list.focusPrevious(1, false, e.browserEvent);\n const el = this.list.getFocus()[0];\n this.list.setAnchor(el);\n this.list.reveal(el);\n this.view.domNode.focus();\n }\n onDownArrow(e) {\n e.preventDefault();\n e.stopPropagation();\n this.list.focusNext(1, false, e.browserEvent);\n const el = this.list.getFocus()[0];\n this.list.setAnchor(el);\n this.list.reveal(el);\n this.view.domNode.focus();\n }\n onPageUpArrow(e) {\n e.preventDefault();\n e.stopPropagation();\n this.list.focusPreviousPage(e.browserEvent);\n const el = this.list.getFocus()[0];\n this.list.setAnchor(el);\n this.list.reveal(el);\n this.view.domNode.focus();\n }\n onPageDownArrow(e) {\n e.preventDefault();\n e.stopPropagation();\n this.list.focusNextPage(e.browserEvent);\n const el = this.list.getFocus()[0];\n this.list.setAnchor(el);\n this.list.reveal(el);\n this.view.domNode.focus();\n }\n onCtrlA(e) {\n e.preventDefault();\n e.stopPropagation();\n this.list.setSelection(range(this.list.length), e.browserEvent);\n this.list.setAnchor(undefined);\n this.view.domNode.focus();\n }\n onEscape(e) {\n if (this.list.getSelection().length) {\n e.preventDefault();\n e.stopPropagation();\n this.list.setSelection([], e.browserEvent);\n this.list.setAnchor(undefined);\n this.view.domNode.focus();\n }\n }\n dispose() {\n this.disposables.dispose();\n this.multipleSelectionDisposables.dispose();\n }\n}\n__decorate([\n memoize\n], KeyboardController.prototype, \"onKeyDown\", null);\nexport var TypeNavigationMode;\n(function (TypeNavigationMode) {\n TypeNavigationMode[TypeNavigationMode[\"Automatic\"] = 0] = \"Automatic\";\n TypeNavigationMode[TypeNavigationMode[\"Trigger\"] = 1] = \"Trigger\";\n})(TypeNavigationMode || (TypeNavigationMode = {}));\nvar TypeNavigationControllerState;\n(function (TypeNavigationControllerState) {\n TypeNavigationControllerState[TypeNavigationControllerState[\"Idle\"] = 0] = \"Idle\";\n TypeNavigationControllerState[TypeNavigationControllerState[\"Typing\"] = 1] = \"Typing\";\n})(TypeNavigationControllerState || (TypeNavigationControllerState = {}));\nexport const DefaultKeyboardNavigationDelegate = new class {\n mightProducePrintableCharacter(event) {\n if (event.ctrlKey || event.metaKey || event.altKey) {\n return false;\n }\n return (event.keyCode >= 31 /* KeyCode.KeyA */ && event.keyCode <= 56 /* KeyCode.KeyZ */)\n || (event.keyCode >= 21 /* KeyCode.Digit0 */ && event.keyCode <= 30 /* KeyCode.Digit9 */)\n || (event.keyCode >= 98 /* KeyCode.Numpad0 */ && event.keyCode <= 107 /* KeyCode.Numpad9 */)\n || (event.keyCode >= 85 /* KeyCode.Semicolon */ && event.keyCode <= 95 /* KeyCode.Quote */);\n }\n};\nclass TypeNavigationController {\n constructor(list, view, keyboardNavigationLabelProvider, keyboardNavigationEventFilter, delegate) {\n this.list = list;\n this.view = view;\n this.keyboardNavigationLabelProvider = keyboardNavigationLabelProvider;\n this.keyboardNavigationEventFilter = keyboardNavigationEventFilter;\n this.delegate = delegate;\n this.enabled = false;\n this.state = TypeNavigationControllerState.Idle;\n this.mode = TypeNavigationMode.Automatic;\n this.triggered = false;\n this.previouslyFocused = -1;\n this.enabledDisposables = new DisposableStore();\n this.disposables = new DisposableStore();\n this.updateOptions(list.options);\n }\n updateOptions(options) {\n var _a, _b;\n if ((_a = options.typeNavigationEnabled) !== null && _a !== void 0 ? _a : true) {\n this.enable();\n }\n else {\n this.disable();\n }\n this.mode = (_b = options.typeNavigationMode) !== null && _b !== void 0 ? _b : TypeNavigationMode.Automatic;\n }\n enable() {\n if (this.enabled) {\n return;\n }\n let typing = false;\n const onChar = Event.chain(this.enabledDisposables.add(new DomEmitter(this.view.domNode, 'keydown')).event, $ => $.filter(e => !isInputElement(e.target))\n .filter(() => this.mode === TypeNavigationMode.Automatic || this.triggered)\n .map(event => new StandardKeyboardEvent(event))\n .filter(e => typing || this.keyboardNavigationEventFilter(e))\n .filter(e => this.delegate.mightProducePrintableCharacter(e))\n .forEach(e => EventHelper.stop(e, true))\n .map(event => event.browserEvent.key));\n const onClear = Event.debounce(onChar, () => null, 800, undefined, undefined, undefined, this.enabledDisposables);\n const onInput = Event.reduce(Event.any(onChar, onClear), (r, i) => i === null ? null : ((r || '') + i), undefined, this.enabledDisposables);\n onInput(this.onInput, this, this.enabledDisposables);\n onClear(this.onClear, this, this.enabledDisposables);\n onChar(() => typing = true, undefined, this.enabledDisposables);\n onClear(() => typing = false, undefined, this.enabledDisposables);\n this.enabled = true;\n this.triggered = false;\n }\n disable() {\n if (!this.enabled) {\n return;\n }\n this.enabledDisposables.clear();\n this.enabled = false;\n this.triggered = false;\n }\n onClear() {\n var _a;\n const focus = this.list.getFocus();\n if (focus.length > 0 && focus[0] === this.previouslyFocused) {\n // List: re-announce element on typing end since typed keys will interrupt aria label of focused element\n // Do not announce if there was a focus change at the end to prevent duplication https://github.com/microsoft/vscode/issues/95961\n const ariaLabel = (_a = this.list.options.accessibilityProvider) === null || _a === void 0 ? void 0 : _a.getAriaLabel(this.list.element(focus[0]));\n if (typeof ariaLabel === 'string') {\n alert(ariaLabel);\n }\n else if (ariaLabel) {\n alert(ariaLabel.get());\n }\n }\n this.previouslyFocused = -1;\n }\n onInput(word) {\n if (!word) {\n this.state = TypeNavigationControllerState.Idle;\n this.triggered = false;\n return;\n }\n const focus = this.list.getFocus();\n const start = focus.length > 0 ? focus[0] : 0;\n const delta = this.state === TypeNavigationControllerState.Idle ? 1 : 0;\n this.state = TypeNavigationControllerState.Typing;\n for (let i = 0; i < this.list.length; i++) {\n const index = (start + i + delta) % this.list.length;\n const label = this.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(this.view.element(index));\n const labelStr = label && label.toString();\n if (this.list.options.typeNavigationEnabled) {\n if (typeof labelStr !== 'undefined') {\n // If prefix is found, focus and return early\n if (matchesPrefix(word, labelStr)) {\n this.previouslyFocused = start;\n this.list.setFocus([index]);\n this.list.reveal(index);\n return;\n }\n const fuzzy = matchesFuzzy2(word, labelStr);\n if (fuzzy) {\n const fuzzyScore = fuzzy[0].end - fuzzy[0].start;\n // ensures that when fuzzy matching, doesn't clash with prefix matching (1 input vs 1+ should be prefix and fuzzy respecitvely). Also makes sure that exact matches are prioritized.\n if (fuzzyScore > 1 && fuzzy.length === 1) {\n this.previouslyFocused = start;\n this.list.setFocus([index]);\n this.list.reveal(index);\n return;\n }\n }\n }\n }\n else if (typeof labelStr === 'undefined' || matchesPrefix(word, labelStr)) {\n this.previouslyFocused = start;\n this.list.setFocus([index]);\n this.list.reveal(index);\n return;\n }\n }\n }\n dispose() {\n this.disable();\n this.enabledDisposables.dispose();\n this.disposables.dispose();\n }\n}\nclass DOMFocusController {\n constructor(list, view) {\n this.list = list;\n this.view = view;\n this.disposables = new DisposableStore();\n const onKeyDown = Event.chain(this.disposables.add(new DomEmitter(view.domNode, 'keydown')).event, $ => $\n .filter(e => !isInputElement(e.target))\n .map(e => new StandardKeyboardEvent(e)));\n const onTab = Event.chain(onKeyDown, $ => $.filter(e => e.keyCode === 2 /* KeyCode.Tab */ && !e.ctrlKey && !e.metaKey && !e.shiftKey && !e.altKey));\n onTab(this.onTab, this, this.disposables);\n }\n onTab(e) {\n if (e.target !== this.view.domNode) {\n return;\n }\n const focus = this.list.getFocus();\n if (focus.length === 0) {\n return;\n }\n const focusedDomElement = this.view.domElement(focus[0]);\n if (!focusedDomElement) {\n return;\n }\n const tabIndexElement = focusedDomElement.querySelector('[tabIndex]');\n if (!tabIndexElement || !(isHTMLElement(tabIndexElement)) || tabIndexElement.tabIndex === -1) {\n return;\n }\n const style = getWindow(tabIndexElement).getComputedStyle(tabIndexElement);\n if (style.visibility === 'hidden' || style.display === 'none') {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n tabIndexElement.focus();\n }\n dispose() {\n this.disposables.dispose();\n }\n}\nexport function isSelectionSingleChangeEvent(event) {\n return platform.isMacintosh ? event.browserEvent.metaKey : event.browserEvent.ctrlKey;\n}\nexport function isSelectionRangeChangeEvent(event) {\n return event.browserEvent.shiftKey;\n}\nfunction isMouseRightClick(event) {\n return isMouseEvent(event) && event.button === 2;\n}\nconst DefaultMultipleSelectionController = {\n isSelectionSingleChangeEvent,\n isSelectionRangeChangeEvent\n};\nexport class MouseController {\n constructor(list) {\n this.list = list;\n this.disposables = new DisposableStore();\n this._onPointer = new Emitter();\n this.onPointer = this._onPointer.event;\n if (list.options.multipleSelectionSupport !== false) {\n this.multipleSelectionController = this.list.options.multipleSelectionController || DefaultMultipleSelectionController;\n }\n this.mouseSupport = typeof list.options.mouseSupport === 'undefined' || !!list.options.mouseSupport;\n if (this.mouseSupport) {\n list.onMouseDown(this.onMouseDown, this, this.disposables);\n list.onContextMenu(this.onContextMenu, this, this.disposables);\n list.onMouseDblClick(this.onDoubleClick, this, this.disposables);\n list.onTouchStart(this.onMouseDown, this, this.disposables);\n this.disposables.add(Gesture.addTarget(list.getHTMLElement()));\n }\n Event.any(list.onMouseClick, list.onMouseMiddleClick, list.onTap)(this.onViewPointer, this, this.disposables);\n }\n updateOptions(optionsUpdate) {\n if (optionsUpdate.multipleSelectionSupport !== undefined) {\n this.multipleSelectionController = undefined;\n if (optionsUpdate.multipleSelectionSupport) {\n this.multipleSelectionController = this.list.options.multipleSelectionController || DefaultMultipleSelectionController;\n }\n }\n }\n isSelectionSingleChangeEvent(event) {\n if (!this.multipleSelectionController) {\n return false;\n }\n return this.multipleSelectionController.isSelectionSingleChangeEvent(event);\n }\n isSelectionRangeChangeEvent(event) {\n if (!this.multipleSelectionController) {\n return false;\n }\n return this.multipleSelectionController.isSelectionRangeChangeEvent(event);\n }\n isSelectionChangeEvent(event) {\n return this.isSelectionSingleChangeEvent(event) || this.isSelectionRangeChangeEvent(event);\n }\n onMouseDown(e) {\n if (isMonacoEditor(e.browserEvent.target)) {\n return;\n }\n if (getActiveElement() !== e.browserEvent.target) {\n this.list.domFocus();\n }\n }\n onContextMenu(e) {\n if (isInputElement(e.browserEvent.target) || isMonacoEditor(e.browserEvent.target)) {\n return;\n }\n const focus = typeof e.index === 'undefined' ? [] : [e.index];\n this.list.setFocus(focus, e.browserEvent);\n }\n onViewPointer(e) {\n if (!this.mouseSupport) {\n return;\n }\n if (isInputElement(e.browserEvent.target) || isMonacoEditor(e.browserEvent.target)) {\n return;\n }\n if (e.browserEvent.isHandledByList) {\n return;\n }\n e.browserEvent.isHandledByList = true;\n const focus = e.index;\n if (typeof focus === 'undefined') {\n this.list.setFocus([], e.browserEvent);\n this.list.setSelection([], e.browserEvent);\n this.list.setAnchor(undefined);\n return;\n }\n if (this.isSelectionChangeEvent(e)) {\n return this.changeSelection(e);\n }\n this.list.setFocus([focus], e.browserEvent);\n this.list.setAnchor(focus);\n if (!isMouseRightClick(e.browserEvent)) {\n this.list.setSelection([focus], e.browserEvent);\n }\n this._onPointer.fire(e);\n }\n onDoubleClick(e) {\n if (isInputElement(e.browserEvent.target) || isMonacoEditor(e.browserEvent.target)) {\n return;\n }\n if (this.isSelectionChangeEvent(e)) {\n return;\n }\n if (e.browserEvent.isHandledByList) {\n return;\n }\n e.browserEvent.isHandledByList = true;\n const focus = this.list.getFocus();\n this.list.setSelection(focus, e.browserEvent);\n }\n changeSelection(e) {\n const focus = e.index;\n let anchor = this.list.getAnchor();\n if (this.isSelectionRangeChangeEvent(e)) {\n if (typeof anchor === 'undefined') {\n const currentFocus = this.list.getFocus()[0];\n anchor = currentFocus !== null && currentFocus !== void 0 ? currentFocus : focus;\n this.list.setAnchor(anchor);\n }\n const min = Math.min(anchor, focus);\n const max = Math.max(anchor, focus);\n const rangeSelection = range(min, max + 1);\n const selection = this.list.getSelection();\n const contiguousRange = getContiguousRangeContaining(disjunction(selection, [anchor]), anchor);\n if (contiguousRange.length === 0) {\n return;\n }\n const newSelection = disjunction(rangeSelection, relativeComplement(selection, contiguousRange));\n this.list.setSelection(newSelection, e.browserEvent);\n this.list.setFocus([focus], e.browserEvent);\n }\n else if (this.isSelectionSingleChangeEvent(e)) {\n const selection = this.list.getSelection();\n const newSelection = selection.filter(i => i !== focus);\n this.list.setFocus([focus]);\n this.list.setAnchor(focus);\n if (selection.length === newSelection.length) {\n this.list.setSelection([...newSelection, focus], e.browserEvent);\n }\n else {\n this.list.setSelection(newSelection, e.browserEvent);\n }\n }\n }\n dispose() {\n this.disposables.dispose();\n }\n}\nexport class DefaultStyleController {\n constructor(styleElement, selectorSuffix) {\n this.styleElement = styleElement;\n this.selectorSuffix = selectorSuffix;\n }\n style(styles) {\n var _a, _b;\n const suffix = this.selectorSuffix && `.${this.selectorSuffix}`;\n const content = [];\n if (styles.listBackground) {\n content.push(`.monaco-list${suffix} .monaco-list-rows { background: ${styles.listBackground}; }`);\n }\n if (styles.listFocusBackground) {\n content.push(`.monaco-list${suffix}:focus .monaco-list-row.focused { background-color: ${styles.listFocusBackground}; }`);\n content.push(`.monaco-list${suffix}:focus .monaco-list-row.focused:hover { background-color: ${styles.listFocusBackground}; }`); // overwrite :hover style in this case!\n }\n if (styles.listFocusForeground) {\n content.push(`.monaco-list${suffix}:focus .monaco-list-row.focused { color: ${styles.listFocusForeground}; }`);\n }\n if (styles.listActiveSelectionBackground) {\n content.push(`.monaco-list${suffix}:focus .monaco-list-row.selected { background-color: ${styles.listActiveSelectionBackground}; }`);\n content.push(`.monaco-list${suffix}:focus .monaco-list-row.selected:hover { background-color: ${styles.listActiveSelectionBackground}; }`); // overwrite :hover style in this case!\n }\n if (styles.listActiveSelectionForeground) {\n content.push(`.monaco-list${suffix}:focus .monaco-list-row.selected { color: ${styles.listActiveSelectionForeground}; }`);\n }\n if (styles.listActiveSelectionIconForeground) {\n content.push(`.monaco-list${suffix}:focus .monaco-list-row.selected .codicon { color: ${styles.listActiveSelectionIconForeground}; }`);\n }\n if (styles.listFocusAndSelectionBackground) {\n content.push(`\n\t\t\t\t.monaco-drag-image,\n\t\t\t\t.monaco-list${suffix}:focus .monaco-list-row.selected.focused { background-color: ${styles.listFocusAndSelectionBackground}; }\n\t\t\t`);\n }\n if (styles.listFocusAndSelectionForeground) {\n content.push(`\n\t\t\t\t.monaco-drag-image,\n\t\t\t\t.monaco-list${suffix}:focus .monaco-list-row.selected.focused { color: ${styles.listFocusAndSelectionForeground}; }\n\t\t\t`);\n }\n if (styles.listInactiveFocusForeground) {\n content.push(`.monaco-list${suffix} .monaco-list-row.focused { color: ${styles.listInactiveFocusForeground}; }`);\n content.push(`.monaco-list${suffix} .monaco-list-row.focused:hover { color: ${styles.listInactiveFocusForeground}; }`); // overwrite :hover style in this case!\n }\n if (styles.listInactiveSelectionIconForeground) {\n content.push(`.monaco-list${suffix} .monaco-list-row.focused .codicon { color: ${styles.listInactiveSelectionIconForeground}; }`);\n }\n if (styles.listInactiveFocusBackground) {\n content.push(`.monaco-list${suffix} .monaco-list-row.focused { background-color: ${styles.listInactiveFocusBackground}; }`);\n content.push(`.monaco-list${suffix} .monaco-list-row.focused:hover { background-color: ${styles.listInactiveFocusBackground}; }`); // overwrite :hover style in this case!\n }\n if (styles.listInactiveSelectionBackground) {\n content.push(`.monaco-list${suffix} .monaco-list-row.selected { background-color: ${styles.listInactiveSelectionBackground}; }`);\n content.push(`.monaco-list${suffix} .monaco-list-row.selected:hover { background-color: ${styles.listInactiveSelectionBackground}; }`); // overwrite :hover style in this case!\n }\n if (styles.listInactiveSelectionForeground) {\n content.push(`.monaco-list${suffix} .monaco-list-row.selected { color: ${styles.listInactiveSelectionForeground}; }`);\n }\n if (styles.listHoverBackground) {\n content.push(`.monaco-list${suffix}:not(.drop-target):not(.dragging) .monaco-list-row:hover:not(.selected):not(.focused) { background-color: ${styles.listHoverBackground}; }`);\n }\n if (styles.listHoverForeground) {\n content.push(`.monaco-list${suffix}:not(.drop-target):not(.dragging) .monaco-list-row:hover:not(.selected):not(.focused) { color: ${styles.listHoverForeground}; }`);\n }\n /**\n * Outlines\n */\n const focusAndSelectionOutline = asCssValueWithDefault(styles.listFocusAndSelectionOutline, asCssValueWithDefault(styles.listSelectionOutline, (_a = styles.listFocusOutline) !== null && _a !== void 0 ? _a : ''));\n if (focusAndSelectionOutline) { // default: listFocusOutline\n content.push(`.monaco-list${suffix}:focus .monaco-list-row.focused.selected { outline: 1px solid ${focusAndSelectionOutline}; outline-offset: -1px;}`);\n }\n if (styles.listFocusOutline) { // default: set\n content.push(`\n\t\t\t\t.monaco-drag-image,\n\t\t\t\t.monaco-list${suffix}:focus .monaco-list-row.focused { outline: 1px solid ${styles.listFocusOutline}; outline-offset: -1px; }\n\t\t\t\t.monaco-workbench.context-menu-visible .monaco-list${suffix}.last-focused .monaco-list-row.focused { outline: 1px solid ${styles.listFocusOutline}; outline-offset: -1px; }\n\t\t\t`);\n }\n const inactiveFocusAndSelectionOutline = asCssValueWithDefault(styles.listSelectionOutline, (_b = styles.listInactiveFocusOutline) !== null && _b !== void 0 ? _b : '');\n if (inactiveFocusAndSelectionOutline) {\n content.push(`.monaco-list${suffix} .monaco-list-row.focused.selected { outline: 1px dotted ${inactiveFocusAndSelectionOutline}; outline-offset: -1px; }`);\n }\n if (styles.listSelectionOutline) { // default: activeContrastBorder\n content.push(`.monaco-list${suffix} .monaco-list-row.selected { outline: 1px dotted ${styles.listSelectionOutline}; outline-offset: -1px; }`);\n }\n if (styles.listInactiveFocusOutline) { // default: null\n content.push(`.monaco-list${suffix} .monaco-list-row.focused { outline: 1px dotted ${styles.listInactiveFocusOutline}; outline-offset: -1px; }`);\n }\n if (styles.listHoverOutline) { // default: activeContrastBorder\n content.push(`.monaco-list${suffix} .monaco-list-row:hover { outline: 1px dashed ${styles.listHoverOutline}; outline-offset: -1px; }`);\n }\n if (styles.listDropOverBackground) {\n content.push(`\n\t\t\t\t.monaco-list${suffix}.drop-target,\n\t\t\t\t.monaco-list${suffix} .monaco-list-rows.drop-target,\n\t\t\t\t.monaco-list${suffix} .monaco-list-row.drop-target { background-color: ${styles.listDropOverBackground} !important; color: inherit !important; }\n\t\t\t`);\n }\n if (styles.listDropBetweenBackground) {\n content.push(`\n\t\t\t.monaco-list${suffix} .monaco-list-rows.drop-target-before .monaco-list-row:first-child::before,\n\t\t\t.monaco-list${suffix} .monaco-list-row.drop-target-before::before {\n\t\t\t\tcontent: \"\"; position: absolute; top: 0px; left: 0px; width: 100%; height: 1px;\n\t\t\t\tbackground-color: ${styles.listDropBetweenBackground};\n\t\t\t}`);\n content.push(`\n\t\t\t.monaco-list${suffix} .monaco-list-rows.drop-target-after .monaco-list-row:last-child::after,\n\t\t\t.monaco-list${suffix} .monaco-list-row.drop-target-after::after {\n\t\t\t\tcontent: \"\"; position: absolute; bottom: 0px; left: 0px; width: 100%; height: 1px;\n\t\t\t\tbackground-color: ${styles.listDropBetweenBackground};\n\t\t\t}`);\n }\n if (styles.tableColumnsBorder) {\n content.push(`\n\t\t\t\t.monaco-table > .monaco-split-view2,\n\t\t\t\t.monaco-table > .monaco-split-view2 .monaco-sash.vertical::before,\n\t\t\t\t.monaco-workbench:not(.reduce-motion) .monaco-table:hover > .monaco-split-view2,\n\t\t\t\t.monaco-workbench:not(.reduce-motion) .monaco-table:hover > .monaco-split-view2 .monaco-sash.vertical::before {\n\t\t\t\t\tborder-color: ${styles.tableColumnsBorder};\n\t\t\t\t}\n\n\t\t\t\t.monaco-workbench:not(.reduce-motion) .monaco-table > .monaco-split-view2,\n\t\t\t\t.monaco-workbench:not(.reduce-motion) .monaco-table > .monaco-split-view2 .monaco-sash.vertical::before {\n\t\t\t\t\tborder-color: transparent;\n\t\t\t\t}\n\t\t\t`);\n }\n if (styles.tableOddRowsBackgroundColor) {\n content.push(`\n\t\t\t\t.monaco-table .monaco-list-row[data-parity=odd]:not(.focused):not(.selected):not(:hover) .monaco-table-tr,\n\t\t\t\t.monaco-table .monaco-list:not(:focus) .monaco-list-row[data-parity=odd].focused:not(.selected):not(:hover) .monaco-table-tr,\n\t\t\t\t.monaco-table .monaco-list:not(.focused) .monaco-list-row[data-parity=odd].focused:not(.selected):not(:hover) .monaco-table-tr {\n\t\t\t\t\tbackground-color: ${styles.tableOddRowsBackgroundColor};\n\t\t\t\t}\n\t\t\t`);\n }\n this.styleElement.textContent = content.join('\\n');\n }\n}\nexport const unthemedListStyles = {\n listFocusBackground: '#7FB0D0',\n listActiveSelectionBackground: '#0E639C',\n listActiveSelectionForeground: '#FFFFFF',\n listActiveSelectionIconForeground: '#FFFFFF',\n listFocusAndSelectionOutline: '#90C2F9',\n listFocusAndSelectionBackground: '#094771',\n listFocusAndSelectionForeground: '#FFFFFF',\n listInactiveSelectionBackground: '#3F3F46',\n listInactiveSelectionIconForeground: '#FFFFFF',\n listHoverBackground: '#2A2D2E',\n listDropOverBackground: '#383B3D',\n listDropBetweenBackground: '#EEEEEE',\n treeIndentGuidesStroke: '#a9a9a9',\n treeInactiveIndentGuidesStroke: Color.fromHex('#a9a9a9').transparent(0.4).toString(),\n tableColumnsBorder: Color.fromHex('#cccccc').transparent(0.2).toString(),\n tableOddRowsBackgroundColor: Color.fromHex('#cccccc').transparent(0.04).toString(),\n listBackground: undefined,\n listFocusForeground: undefined,\n listInactiveSelectionForeground: undefined,\n listInactiveFocusForeground: undefined,\n listInactiveFocusBackground: undefined,\n listHoverForeground: undefined,\n listFocusOutline: undefined,\n listInactiveFocusOutline: undefined,\n listSelectionOutline: undefined,\n listHoverOutline: undefined,\n treeStickyScrollBackground: undefined,\n treeStickyScrollBorder: undefined,\n treeStickyScrollShadow: undefined\n};\nconst DefaultOptions = {\n keyboardSupport: true,\n mouseSupport: true,\n multipleSelectionSupport: true,\n dnd: {\n getDragURI() { return null; },\n onDragStart() { },\n onDragOver() { return false; },\n drop() { },\n dispose() { }\n }\n};\n// TODO@Joao: move these utils into a SortedArray class\nfunction getContiguousRangeContaining(range, value) {\n const index = range.indexOf(value);\n if (index === -1) {\n return [];\n }\n const result = [];\n let i = index - 1;\n while (i >= 0 && range[i] === value - (index - i)) {\n result.push(range[i--]);\n }\n result.reverse();\n i = index;\n while (i < range.length && range[i] === value + (i - index)) {\n result.push(range[i++]);\n }\n return result;\n}\n/**\n * Given two sorted collections of numbers, returns the intersection\n * between them (OR).\n */\nfunction disjunction(one, other) {\n const result = [];\n let i = 0, j = 0;\n while (i < one.length || j < other.length) {\n if (i >= one.length) {\n result.push(other[j++]);\n }\n else if (j >= other.length) {\n result.push(one[i++]);\n }\n else if (one[i] === other[j]) {\n result.push(one[i]);\n i++;\n j++;\n continue;\n }\n else if (one[i] < other[j]) {\n result.push(one[i++]);\n }\n else {\n result.push(other[j++]);\n }\n }\n return result;\n}\n/**\n * Given two sorted collections of numbers, returns the relative\n * complement between them (XOR).\n */\nfunction relativeComplement(one, other) {\n const result = [];\n let i = 0, j = 0;\n while (i < one.length || j < other.length) {\n if (i >= one.length) {\n result.push(other[j++]);\n }\n else if (j >= other.length) {\n result.push(one[i++]);\n }\n else if (one[i] === other[j]) {\n i++;\n j++;\n continue;\n }\n else if (one[i] < other[j]) {\n result.push(one[i++]);\n }\n else {\n j++;\n }\n }\n return result;\n}\nconst numericSort = (a, b) => a - b;\nclass PipelineRenderer {\n constructor(_templateId, renderers) {\n this._templateId = _templateId;\n this.renderers = renderers;\n }\n get templateId() {\n return this._templateId;\n }\n renderTemplate(container) {\n return this.renderers.map(r => r.renderTemplate(container));\n }\n renderElement(element, index, templateData, height) {\n let i = 0;\n for (const renderer of this.renderers) {\n renderer.renderElement(element, index, templateData[i++], height);\n }\n }\n disposeElement(element, index, templateData, height) {\n var _a;\n let i = 0;\n for (const renderer of this.renderers) {\n (_a = renderer.disposeElement) === null || _a === void 0 ? void 0 : _a.call(renderer, element, index, templateData[i], height);\n i += 1;\n }\n }\n disposeTemplate(templateData) {\n let i = 0;\n for (const renderer of this.renderers) {\n renderer.disposeTemplate(templateData[i++]);\n }\n }\n}\nclass AccessibiltyRenderer {\n constructor(accessibilityProvider) {\n this.accessibilityProvider = accessibilityProvider;\n this.templateId = 'a18n';\n }\n renderTemplate(container) {\n return { container, disposables: new DisposableStore() };\n }\n renderElement(element, index, data) {\n const ariaLabel = this.accessibilityProvider.getAriaLabel(element);\n const observable = (ariaLabel && typeof ariaLabel !== 'string') ? ariaLabel : constObservable(ariaLabel);\n data.disposables.add(autorun(reader => {\n this.setAriaLabel(reader.readObservable(observable), data.container);\n }));\n const ariaLevel = this.accessibilityProvider.getAriaLevel && this.accessibilityProvider.getAriaLevel(element);\n if (typeof ariaLevel === 'number') {\n data.container.setAttribute('aria-level', `${ariaLevel}`);\n }\n else {\n data.container.removeAttribute('aria-level');\n }\n }\n setAriaLabel(ariaLabel, element) {\n if (ariaLabel) {\n element.setAttribute('aria-label', ariaLabel);\n }\n else {\n element.removeAttribute('aria-label');\n }\n }\n disposeElement(element, index, templateData, height) {\n templateData.disposables.clear();\n }\n disposeTemplate(templateData) {\n templateData.disposables.dispose();\n }\n}\nclass ListViewDragAndDrop {\n constructor(list, dnd) {\n this.list = list;\n this.dnd = dnd;\n }\n getDragElements(element) {\n const selection = this.list.getSelectedElements();\n const elements = selection.indexOf(element) > -1 ? selection : [element];\n return elements;\n }\n getDragURI(element) {\n return this.dnd.getDragURI(element);\n }\n getDragLabel(elements, originalEvent) {\n if (this.dnd.getDragLabel) {\n return this.dnd.getDragLabel(elements, 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, data, originalEvent);\n }\n onDragOver(data, targetElement, targetIndex, targetSector, originalEvent) {\n return this.dnd.onDragOver(data, targetElement, targetIndex, targetSector, originalEvent);\n }\n onDragLeave(data, targetElement, targetIndex, originalEvent) {\n var _a, _b;\n (_b = (_a = this.dnd).onDragLeave) === null || _b === void 0 ? void 0 : _b.call(_a, data, targetElement, targetIndex, 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 drop(data, targetElement, targetIndex, targetSector, originalEvent) {\n this.dnd.drop(data, targetElement, targetIndex, targetSector, originalEvent);\n }\n dispose() {\n this.dnd.dispose();\n }\n}\n/**\n * The {@link List} is a virtual scrolling widget, built on top of the {@link ListView}\n * widget.\n *\n * Features:\n * - Customizable keyboard and mouse support\n * - Element traits: focus, selection, achor\n * - Accessibility support\n * - Touch support\n * - Performant template-based rendering\n * - Horizontal scrolling\n * - Variable element height support\n * - Dynamic element height support\n * - Drag-and-drop support\n */\nexport class List {\n get onDidChangeFocus() {\n return Event.map(this.eventBufferer.wrapEvent(this.focus.onChange), e => this.toListEvent(e), this.disposables);\n }\n get onDidChangeSelection() {\n return Event.map(this.eventBufferer.wrapEvent(this.selection.onChange), e => this.toListEvent(e), this.disposables);\n }\n get domId() { return this.view.domId; }\n get onDidScroll() { return this.view.onDidScroll; }\n get onMouseClick() { return this.view.onMouseClick; }\n get onMouseDblClick() { return this.view.onMouseDblClick; }\n get onMouseMiddleClick() { return this.view.onMouseMiddleClick; }\n get onPointer() { return this.mouseController.onPointer; }\n get onMouseDown() { return this.view.onMouseDown; }\n get onMouseOver() { return this.view.onMouseOver; }\n get onMouseOut() { return this.view.onMouseOut; }\n get onTouchStart() { return this.view.onTouchStart; }\n get onTap() { return this.view.onTap; }\n /**\n * Possible context menu trigger events:\n * - ContextMenu key\n * - Shift F10\n * - Ctrl Option Shift M (macOS with VoiceOver)\n * - Mouse right click\n */\n get onContextMenu() {\n let didJustPressContextMenuKey = false;\n const fromKeyDown = Event.chain(this.disposables.add(new DomEmitter(this.view.domNode, 'keydown')).event, $ => $.map(e => new StandardKeyboardEvent(e))\n .filter(e => didJustPressContextMenuKey = e.keyCode === 58 /* KeyCode.ContextMenu */ || (e.shiftKey && e.keyCode === 68 /* KeyCode.F10 */))\n .map(e => EventHelper.stop(e, true))\n .filter(() => false));\n const fromKeyUp = Event.chain(this.disposables.add(new DomEmitter(this.view.domNode, 'keyup')).event, $ => $.forEach(() => didJustPressContextMenuKey = false)\n .map(e => new StandardKeyboardEvent(e))\n .filter(e => e.keyCode === 58 /* KeyCode.ContextMenu */ || (e.shiftKey && e.keyCode === 68 /* KeyCode.F10 */))\n .map(e => EventHelper.stop(e, true))\n .map(({ browserEvent }) => {\n const focus = this.getFocus();\n const index = focus.length ? focus[0] : undefined;\n const element = typeof index !== 'undefined' ? this.view.element(index) : undefined;\n const anchor = typeof index !== 'undefined' ? this.view.domElement(index) : this.view.domNode;\n return { index, element, anchor, browserEvent };\n }));\n const fromMouse = Event.chain(this.view.onContextMenu, $ => $.filter(_ => !didJustPressContextMenuKey)\n .map(({ element, index, browserEvent }) => ({ element, index, anchor: new StandardMouseEvent(getWindow(this.view.domNode), browserEvent), browserEvent })));\n return Event.any(fromKeyDown, fromKeyUp, fromMouse);\n }\n get onKeyDown() { return this.disposables.add(new DomEmitter(this.view.domNode, 'keydown')).event; }\n get onDidFocus() { return Event.signal(this.disposables.add(new DomEmitter(this.view.domNode, 'focus', true)).event); }\n get onDidBlur() { return Event.signal(this.disposables.add(new DomEmitter(this.view.domNode, 'blur', true)).event); }\n constructor(user, container, virtualDelegate, renderers, _options = DefaultOptions) {\n var _a, _b, _c, _d;\n this.user = user;\n this._options = _options;\n this.focus = new Trait('focused');\n this.anchor = new Trait('anchor');\n this.eventBufferer = new EventBufferer();\n this._ariaLabel = '';\n this.disposables = new DisposableStore();\n this._onDidDispose = new Emitter();\n this.onDidDispose = this._onDidDispose.event;\n const role = this._options.accessibilityProvider && this._options.accessibilityProvider.getWidgetRole ? (_a = this._options.accessibilityProvider) === null || _a === void 0 ? void 0 : _a.getWidgetRole() : 'list';\n this.selection = new SelectionTrait(role !== 'listbox');\n const baseRenderers = [this.focus.renderer, this.selection.renderer];\n this.accessibilityProvider = _options.accessibilityProvider;\n if (this.accessibilityProvider) {\n baseRenderers.push(new AccessibiltyRenderer(this.accessibilityProvider));\n (_c = (_b = this.accessibilityProvider).onDidChangeActiveDescendant) === null || _c === void 0 ? void 0 : _c.call(_b, this.onDidChangeActiveDescendant, this, this.disposables);\n }\n renderers = renderers.map(r => new PipelineRenderer(r.templateId, [...baseRenderers, r]));\n const viewOptions = {\n ..._options,\n dnd: _options.dnd && new ListViewDragAndDrop(this, _options.dnd)\n };\n this.view = this.createListView(container, virtualDelegate, renderers, viewOptions);\n this.view.domNode.setAttribute('role', role);\n if (_options.styleController) {\n this.styleController = _options.styleController(this.view.domId);\n }\n else {\n const styleElement = createStyleSheet(this.view.domNode);\n this.styleController = new DefaultStyleController(styleElement, this.view.domId);\n }\n this.spliceable = new CombinedSpliceable([\n new TraitSpliceable(this.focus, this.view, _options.identityProvider),\n new TraitSpliceable(this.selection, this.view, _options.identityProvider),\n new TraitSpliceable(this.anchor, this.view, _options.identityProvider),\n this.view\n ]);\n this.disposables.add(this.focus);\n this.disposables.add(this.selection);\n this.disposables.add(this.anchor);\n this.disposables.add(this.view);\n this.disposables.add(this._onDidDispose);\n this.disposables.add(new DOMFocusController(this, this.view));\n if (typeof _options.keyboardSupport !== 'boolean' || _options.keyboardSupport) {\n this.keyboardController = new KeyboardController(this, this.view, _options);\n this.disposables.add(this.keyboardController);\n }\n if (_options.keyboardNavigationLabelProvider) {\n const delegate = _options.keyboardNavigationDelegate || DefaultKeyboardNavigationDelegate;\n this.typeNavigationController = new TypeNavigationController(this, this.view, _options.keyboardNavigationLabelProvider, (_d = _options.keyboardNavigationEventFilter) !== null && _d !== void 0 ? _d : (() => true), delegate);\n this.disposables.add(this.typeNavigationController);\n }\n this.mouseController = this.createMouseController(_options);\n this.disposables.add(this.mouseController);\n this.onDidChangeFocus(this._onFocusChange, this, this.disposables);\n this.onDidChangeSelection(this._onSelectionChange, this, this.disposables);\n if (this.accessibilityProvider) {\n this.ariaLabel = this.accessibilityProvider.getWidgetAriaLabel();\n }\n if (this._options.multipleSelectionSupport !== false) {\n this.view.domNode.setAttribute('aria-multiselectable', 'true');\n }\n }\n createListView(container, virtualDelegate, renderers, viewOptions) {\n return new ListView(container, virtualDelegate, renderers, viewOptions);\n }\n createMouseController(options) {\n return new MouseController(this);\n }\n updateOptions(optionsUpdate = {}) {\n var _a, _b;\n this._options = { ...this._options, ...optionsUpdate };\n (_a = this.typeNavigationController) === null || _a === void 0 ? void 0 : _a.updateOptions(this._options);\n if (this._options.multipleSelectionController !== undefined) {\n if (this._options.multipleSelectionSupport) {\n this.view.domNode.setAttribute('aria-multiselectable', 'true');\n }\n else {\n this.view.domNode.removeAttribute('aria-multiselectable');\n }\n }\n this.mouseController.updateOptions(optionsUpdate);\n (_b = this.keyboardController) === null || _b === void 0 ? void 0 : _b.updateOptions(optionsUpdate);\n this.view.updateOptions(optionsUpdate);\n }\n get options() {\n return this._options;\n }\n splice(start, deleteCount, elements = []) {\n if (start < 0 || start > this.view.length) {\n throw new ListError(this.user, `Invalid start index: ${start}`);\n }\n if (deleteCount < 0) {\n throw new ListError(this.user, `Invalid delete count: ${deleteCount}`);\n }\n if (deleteCount === 0 && elements.length === 0) {\n return;\n }\n this.eventBufferer.bufferEvents(() => this.spliceable.splice(start, deleteCount, elements));\n }\n rerender() {\n this.view.rerender();\n }\n element(index) {\n return this.view.element(index);\n }\n indexOf(element) {\n return this.view.indexOf(element);\n }\n indexAt(position) {\n return this.view.indexAt(position);\n }\n get length() {\n return this.view.length;\n }\n get contentHeight() {\n return this.view.contentHeight;\n }\n get onDidChangeContentHeight() {\n return this.view.onDidChangeContentHeight;\n }\n get scrollTop() {\n return this.view.getScrollTop();\n }\n set scrollTop(scrollTop) {\n this.view.setScrollTop(scrollTop);\n }\n get scrollHeight() {\n return this.view.scrollHeight;\n }\n get renderHeight() {\n return this.view.renderHeight;\n }\n get firstVisibleIndex() {\n return this.view.firstVisibleIndex;\n }\n get ariaLabel() {\n return this._ariaLabel;\n }\n set ariaLabel(value) {\n this._ariaLabel = value;\n this.view.domNode.setAttribute('aria-label', value);\n }\n domFocus() {\n this.view.domNode.focus({ preventScroll: true });\n }\n layout(height, width) {\n this.view.layout(height, width);\n }\n setSelection(indexes, browserEvent) {\n for (const index of indexes) {\n if (index < 0 || index >= this.length) {\n throw new ListError(this.user, `Invalid index ${index}`);\n }\n }\n this.selection.set(indexes, browserEvent);\n }\n getSelection() {\n return this.selection.get();\n }\n getSelectedElements() {\n return this.getSelection().map(i => this.view.element(i));\n }\n setAnchor(index) {\n if (typeof index === 'undefined') {\n this.anchor.set([]);\n return;\n }\n if (index < 0 || index >= this.length) {\n throw new ListError(this.user, `Invalid index ${index}`);\n }\n this.anchor.set([index]);\n }\n getAnchor() {\n return firstOrDefault(this.anchor.get(), undefined);\n }\n getAnchorElement() {\n const anchor = this.getAnchor();\n return typeof anchor === 'undefined' ? undefined : this.element(anchor);\n }\n setFocus(indexes, browserEvent) {\n for (const index of indexes) {\n if (index < 0 || index >= this.length) {\n throw new ListError(this.user, `Invalid index ${index}`);\n }\n }\n this.focus.set(indexes, browserEvent);\n }\n focusNext(n = 1, loop = false, browserEvent, filter) {\n if (this.length === 0) {\n return;\n }\n const focus = this.focus.get();\n const index = this.findNextIndex(focus.length > 0 ? focus[0] + n : 0, loop, filter);\n if (index > -1) {\n this.setFocus([index], browserEvent);\n }\n }\n focusPrevious(n = 1, loop = false, browserEvent, filter) {\n if (this.length === 0) {\n return;\n }\n const focus = this.focus.get();\n const index = this.findPreviousIndex(focus.length > 0 ? focus[0] - n : 0, loop, filter);\n if (index > -1) {\n this.setFocus([index], browserEvent);\n }\n }\n async focusNextPage(browserEvent, filter) {\n let lastPageIndex = this.view.indexAt(this.view.getScrollTop() + this.view.renderHeight);\n lastPageIndex = lastPageIndex === 0 ? 0 : lastPageIndex - 1;\n const currentlyFocusedElementIndex = this.getFocus()[0];\n if (currentlyFocusedElementIndex !== lastPageIndex && (currentlyFocusedElementIndex === undefined || lastPageIndex > currentlyFocusedElementIndex)) {\n const lastGoodPageIndex = this.findPreviousIndex(lastPageIndex, false, filter);\n if (lastGoodPageIndex > -1 && currentlyFocusedElementIndex !== lastGoodPageIndex) {\n this.setFocus([lastGoodPageIndex], browserEvent);\n }\n else {\n this.setFocus([lastPageIndex], browserEvent);\n }\n }\n else {\n const previousScrollTop = this.view.getScrollTop();\n let nextpageScrollTop = previousScrollTop + this.view.renderHeight;\n if (lastPageIndex > currentlyFocusedElementIndex) {\n // scroll last page element to the top only if the last page element is below the focused element\n nextpageScrollTop -= this.view.elementHeight(lastPageIndex);\n }\n this.view.setScrollTop(nextpageScrollTop);\n if (this.view.getScrollTop() !== previousScrollTop) {\n this.setFocus([]);\n // Let the scroll event listener run\n await timeout(0);\n await this.focusNextPage(browserEvent, filter);\n }\n }\n }\n async focusPreviousPage(browserEvent, filter, getPaddingTop = () => 0) {\n let firstPageIndex;\n const paddingTop = getPaddingTop();\n const scrollTop = this.view.getScrollTop() + paddingTop;\n if (scrollTop === 0) {\n firstPageIndex = this.view.indexAt(scrollTop);\n }\n else {\n firstPageIndex = this.view.indexAfter(scrollTop - 1);\n }\n const currentlyFocusedElementIndex = this.getFocus()[0];\n if (currentlyFocusedElementIndex !== firstPageIndex && (currentlyFocusedElementIndex === undefined || currentlyFocusedElementIndex >= firstPageIndex)) {\n const firstGoodPageIndex = this.findNextIndex(firstPageIndex, false, filter);\n if (firstGoodPageIndex > -1 && currentlyFocusedElementIndex !== firstGoodPageIndex) {\n this.setFocus([firstGoodPageIndex], browserEvent);\n }\n else {\n this.setFocus([firstPageIndex], browserEvent);\n }\n }\n else {\n const previousScrollTop = scrollTop;\n this.view.setScrollTop(scrollTop - this.view.renderHeight - paddingTop);\n if (this.view.getScrollTop() + getPaddingTop() !== previousScrollTop) {\n this.setFocus([]);\n // Let the scroll event listener run\n await timeout(0);\n await this.focusPreviousPage(browserEvent, filter, getPaddingTop);\n }\n }\n }\n focusLast(browserEvent, filter) {\n if (this.length === 0) {\n return;\n }\n const index = this.findPreviousIndex(this.length - 1, false, filter);\n if (index > -1) {\n this.setFocus([index], browserEvent);\n }\n }\n focusFirst(browserEvent, filter) {\n this.focusNth(0, browserEvent, filter);\n }\n focusNth(n, browserEvent, filter) {\n if (this.length === 0) {\n return;\n }\n const index = this.findNextIndex(n, false, filter);\n if (index > -1) {\n this.setFocus([index], browserEvent);\n }\n }\n findNextIndex(index, loop = false, filter) {\n for (let i = 0; i < this.length; i++) {\n if (index >= this.length && !loop) {\n return -1;\n }\n index = index % this.length;\n if (!filter || filter(this.element(index))) {\n return index;\n }\n index++;\n }\n return -1;\n }\n findPreviousIndex(index, loop = false, filter) {\n for (let i = 0; i < this.length; i++) {\n if (index < 0 && !loop) {\n return -1;\n }\n index = (this.length + (index % this.length)) % this.length;\n if (!filter || filter(this.element(index))) {\n return index;\n }\n index--;\n }\n return -1;\n }\n getFocus() {\n return this.focus.get();\n }\n getFocusedElements() {\n return this.getFocus().map(i => this.view.element(i));\n }\n reveal(index, relativeTop, paddingTop = 0) {\n if (index < 0 || index >= this.length) {\n throw new ListError(this.user, `Invalid index ${index}`);\n }\n const scrollTop = this.view.getScrollTop();\n const elementTop = this.view.elementTop(index);\n const elementHeight = this.view.elementHeight(index);\n if (isNumber(relativeTop)) {\n // y = mx + b\n const m = elementHeight - this.view.renderHeight + paddingTop;\n this.view.setScrollTop(m * clamp(relativeTop, 0, 1) + elementTop - paddingTop);\n }\n else {\n const viewItemBottom = elementTop + elementHeight;\n const scrollBottom = scrollTop + this.view.renderHeight;\n if (elementTop < scrollTop + paddingTop && viewItemBottom >= scrollBottom) {\n // The element is already overflowing the viewport, no-op\n }\n else if (elementTop < scrollTop + paddingTop || (viewItemBottom >= scrollBottom && elementHeight >= this.view.renderHeight)) {\n this.view.setScrollTop(elementTop - paddingTop);\n }\n else if (viewItemBottom >= scrollBottom) {\n this.view.setScrollTop(viewItemBottom - this.view.renderHeight);\n }\n }\n }\n /**\n * Returns the relative position of an element rendered in the list.\n * Returns `null` if the element isn't *entirely* in the visible viewport.\n */\n getRelativeTop(index, paddingTop = 0) {\n if (index < 0 || index >= this.length) {\n throw new ListError(this.user, `Invalid index ${index}`);\n }\n const scrollTop = this.view.getScrollTop();\n const elementTop = this.view.elementTop(index);\n const elementHeight = this.view.elementHeight(index);\n if (elementTop < scrollTop + paddingTop || elementTop + elementHeight > scrollTop + this.view.renderHeight) {\n return null;\n }\n // y = mx + b\n const m = elementHeight - this.view.renderHeight + paddingTop;\n return Math.abs((scrollTop + paddingTop - elementTop) / m);\n }\n getHTMLElement() {\n return this.view.domNode;\n }\n getScrollableElement() {\n return this.view.scrollableElementDomNode;\n }\n getElementID(index) {\n return this.view.getElementDomId(index);\n }\n getElementTop(index) {\n return this.view.elementTop(index);\n }\n style(styles) {\n this.styleController.style(styles);\n }\n toListEvent({ indexes, browserEvent }) {\n return { indexes, elements: indexes.map(i => this.view.element(i)), browserEvent };\n }\n _onFocusChange() {\n const focus = this.focus.get();\n this.view.domNode.classList.toggle('element-focused', focus.length > 0);\n this.onDidChangeActiveDescendant();\n }\n onDidChangeActiveDescendant() {\n var _a;\n const focus = this.focus.get();\n if (focus.length > 0) {\n let id;\n if ((_a = this.accessibilityProvider) === null || _a === void 0 ? void 0 : _a.getActiveDescendantId) {\n id = this.accessibilityProvider.getActiveDescendantId(this.view.element(focus[0]));\n }\n this.view.domNode.setAttribute('aria-activedescendant', id || this.view.getElementDomId(focus[0]));\n }\n else {\n this.view.domNode.removeAttribute('aria-activedescendant');\n }\n }\n _onSelectionChange() {\n const selection = this.selection.get();\n this.view.domNode.classList.toggle('selection-none', selection.length === 0);\n this.view.domNode.classList.toggle('selection-single', selection.length === 1);\n this.view.domNode.classList.toggle('selection-multiple', selection.length > 1);\n }\n dispose() {\n this._onDidDispose.fire();\n this.disposables.dispose();\n this._onDidDispose.dispose();\n }\n}\n__decorate([\n memoize\n], List.prototype, \"onDidChangeFocus\", null);\n__decorate([\n memoize\n], List.prototype, \"onDidChangeSelection\", null);\n__decorate([\n memoize\n], List.prototype, \"onContextMenu\", null);\n__decorate([\n memoize\n], List.prototype, \"onKeyDown\", null);\n__decorate([\n memoize\n], List.prototype, \"onDidFocus\", null);\n__decorate([\n memoize\n], List.prototype, \"onDidBlur\", null);\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 { isFirefox } from '../../browser.js';\nimport { EventType as TouchEventType, Gesture } from '../../touch.js';\nimport { $, addDisposableListener, append, clearNode, createStyleSheet, Dimension, EventHelper, EventType, getActiveElement, getWindow, isAncestor, isInShadowDOM } from '../../dom.js';\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\nimport { StandardMouseEvent } from '../../mouseEvent.js';\nimport { ActionBar } from '../actionbar/actionbar.js';\nimport { ActionViewItem, BaseActionViewItem } from '../actionbar/actionViewItems.js';\nimport { layout } from '../contextview/contextview.js';\nimport { DomScrollableElement } from '../scrollbar/scrollableElement.js';\nimport { EmptySubmenuAction, Separator, SubmenuAction } from '../../../common/actions.js';\nimport { RunOnceScheduler } from '../../../common/async.js';\nimport { Codicon } from '../../../common/codicons.js';\nimport { getCodiconFontCharacters } from '../../../common/codiconsUtil.js';\nimport { ThemeIcon } from '../../../common/themables.js';\nimport { stripIcons } from '../../../common/iconLabels.js';\nimport { DisposableStore } from '../../../common/lifecycle.js';\nimport { isLinux, isMacintosh } from '../../../common/platform.js';\nimport * as strings from '../../../common/strings.js';\nexport const MENU_MNEMONIC_REGEX = /\\(&([^\\s&])\\)|(^|[^&])&([^\\s&])/;\nexport const MENU_ESCAPED_MNEMONIC_REGEX = /(&)?(&)([^\\s&])/g;\nexport var HorizontalDirection;\n(function (HorizontalDirection) {\n HorizontalDirection[HorizontalDirection[\"Right\"] = 0] = \"Right\";\n HorizontalDirection[HorizontalDirection[\"Left\"] = 1] = \"Left\";\n})(HorizontalDirection || (HorizontalDirection = {}));\nexport var VerticalDirection;\n(function (VerticalDirection) {\n VerticalDirection[VerticalDirection[\"Above\"] = 0] = \"Above\";\n VerticalDirection[VerticalDirection[\"Below\"] = 1] = \"Below\";\n})(VerticalDirection || (VerticalDirection = {}));\nexport class Menu extends ActionBar {\n constructor(container, actions, options, menuStyles) {\n container.classList.add('monaco-menu-container');\n container.setAttribute('role', 'presentation');\n const menuElement = document.createElement('div');\n menuElement.classList.add('monaco-menu');\n menuElement.setAttribute('role', 'presentation');\n super(menuElement, {\n orientation: 1 /* ActionsOrientation.VERTICAL */,\n actionViewItemProvider: action => this.doGetActionViewItem(action, options, parentData),\n context: options.context,\n actionRunner: options.actionRunner,\n ariaLabel: options.ariaLabel,\n ariaRole: 'menu',\n focusOnlyEnabledItems: true,\n triggerKeys: { keys: [3 /* KeyCode.Enter */, ...(isMacintosh || isLinux ? [10 /* KeyCode.Space */] : [])], keyDown: true }\n });\n this.menuStyles = menuStyles;\n this.menuElement = menuElement;\n this.actionsList.tabIndex = 0;\n this.initializeOrUpdateStyleSheet(container, menuStyles);\n this._register(Gesture.addTarget(menuElement));\n this._register(addDisposableListener(menuElement, EventType.KEY_DOWN, (e) => {\n const event = new StandardKeyboardEvent(e);\n // Stop tab navigation of menus\n if (event.equals(2 /* KeyCode.Tab */)) {\n e.preventDefault();\n }\n }));\n if (options.enableMnemonics) {\n this._register(addDisposableListener(menuElement, EventType.KEY_DOWN, (e) => {\n const key = e.key.toLocaleLowerCase();\n if (this.mnemonics.has(key)) {\n EventHelper.stop(e, true);\n const actions = this.mnemonics.get(key);\n if (actions.length === 1) {\n if (actions[0] instanceof SubmenuMenuActionViewItem && actions[0].container) {\n this.focusItemByElement(actions[0].container);\n }\n actions[0].onClick(e);\n }\n if (actions.length > 1) {\n const action = actions.shift();\n if (action && action.container) {\n this.focusItemByElement(action.container);\n actions.push(action);\n }\n this.mnemonics.set(key, actions);\n }\n }\n }));\n }\n if (isLinux) {\n this._register(addDisposableListener(menuElement, EventType.KEY_DOWN, e => {\n const event = new StandardKeyboardEvent(e);\n if (event.equals(14 /* KeyCode.Home */) || event.equals(11 /* KeyCode.PageUp */)) {\n this.focusedItem = this.viewItems.length - 1;\n this.focusNext();\n EventHelper.stop(e, true);\n }\n else if (event.equals(13 /* KeyCode.End */) || event.equals(12 /* KeyCode.PageDown */)) {\n this.focusedItem = 0;\n this.focusPrevious();\n EventHelper.stop(e, true);\n }\n }));\n }\n this._register(addDisposableListener(this.domNode, EventType.MOUSE_OUT, e => {\n const relatedTarget = e.relatedTarget;\n if (!isAncestor(relatedTarget, this.domNode)) {\n this.focusedItem = undefined;\n this.updateFocus();\n e.stopPropagation();\n }\n }));\n this._register(addDisposableListener(this.actionsList, EventType.MOUSE_OVER, e => {\n let target = e.target;\n if (!target || !isAncestor(target, this.actionsList) || target === this.actionsList) {\n return;\n }\n while (target.parentElement !== this.actionsList && target.parentElement !== null) {\n target = target.parentElement;\n }\n if (target.classList.contains('action-item')) {\n const lastFocusedItem = this.focusedItem;\n this.setFocusedItem(target);\n if (lastFocusedItem !== this.focusedItem) {\n this.updateFocus();\n }\n }\n }));\n // Support touch on actions list to focus items (needed for submenus)\n this._register(Gesture.addTarget(this.actionsList));\n this._register(addDisposableListener(this.actionsList, TouchEventType.Tap, e => {\n let target = e.initialTarget;\n if (!target || !isAncestor(target, this.actionsList) || target === this.actionsList) {\n return;\n }\n while (target.parentElement !== this.actionsList && target.parentElement !== null) {\n target = target.parentElement;\n }\n if (target.classList.contains('action-item')) {\n const lastFocusedItem = this.focusedItem;\n this.setFocusedItem(target);\n if (lastFocusedItem !== this.focusedItem) {\n this.updateFocus();\n }\n }\n }));\n const parentData = {\n parent: this\n };\n this.mnemonics = new Map();\n // Scroll Logic\n this.scrollableElement = this._register(new DomScrollableElement(menuElement, {\n alwaysConsumeMouseWheel: true,\n horizontal: 2 /* ScrollbarVisibility.Hidden */,\n vertical: 3 /* ScrollbarVisibility.Visible */,\n verticalScrollbarSize: 7,\n handleMouseWheel: true,\n useShadows: true\n }));\n const scrollElement = this.scrollableElement.getDomNode();\n scrollElement.style.position = '';\n this.styleScrollElement(scrollElement, menuStyles);\n // Support scroll on menu drag\n this._register(addDisposableListener(menuElement, TouchEventType.Change, e => {\n EventHelper.stop(e, true);\n const scrollTop = this.scrollableElement.getScrollPosition().scrollTop;\n this.scrollableElement.setScrollPosition({ scrollTop: scrollTop - e.translationY });\n }));\n this._register(addDisposableListener(scrollElement, EventType.MOUSE_UP, e => {\n // Absorb clicks in menu dead space https://github.com/microsoft/vscode/issues/63575\n // We do this on the scroll element so the scroll bar doesn't dismiss the menu either\n e.preventDefault();\n }));\n const window = getWindow(container);\n menuElement.style.maxHeight = `${Math.max(10, window.innerHeight - container.getBoundingClientRect().top - 35)}px`;\n actions = actions.filter((a, idx) => {\n var _a;\n if ((_a = options.submenuIds) === null || _a === void 0 ? void 0 : _a.has(a.id)) {\n console.warn(`Found submenu cycle: ${a.id}`);\n return false;\n }\n // Filter out consecutive or useless separators\n if (a instanceof Separator) {\n if (idx === actions.length - 1 || idx === 0) {\n return false;\n }\n const prevAction = actions[idx - 1];\n if (prevAction instanceof Separator) {\n return false;\n }\n }\n return true;\n });\n this.push(actions, { icon: true, label: true, isMenu: true });\n container.appendChild(this.scrollableElement.getDomNode());\n this.scrollableElement.scanDomNode();\n this.viewItems.filter(item => !(item instanceof MenuSeparatorActionViewItem)).forEach((item, index, array) => {\n item.updatePositionInSet(index + 1, array.length);\n });\n }\n initializeOrUpdateStyleSheet(container, style) {\n if (!this.styleSheet) {\n if (isInShadowDOM(container)) {\n this.styleSheet = createStyleSheet(container);\n }\n else {\n if (!Menu.globalStyleSheet) {\n Menu.globalStyleSheet = createStyleSheet();\n }\n this.styleSheet = Menu.globalStyleSheet;\n }\n }\n this.styleSheet.textContent = getMenuWidgetCSS(style, isInShadowDOM(container));\n }\n styleScrollElement(scrollElement, style) {\n var _a, _b;\n const fgColor = (_a = style.foregroundColor) !== null && _a !== void 0 ? _a : '';\n const bgColor = (_b = style.backgroundColor) !== null && _b !== void 0 ? _b : '';\n const border = style.borderColor ? `1px solid ${style.borderColor}` : '';\n const borderRadius = '5px';\n const shadow = style.shadowColor ? `0 2px 8px ${style.shadowColor}` : '';\n scrollElement.style.outline = border;\n scrollElement.style.borderRadius = borderRadius;\n scrollElement.style.color = fgColor;\n scrollElement.style.backgroundColor = bgColor;\n scrollElement.style.boxShadow = shadow;\n }\n getContainer() {\n return this.scrollableElement.getDomNode();\n }\n get onScroll() {\n return this.scrollableElement.onScroll;\n }\n focusItemByElement(element) {\n const lastFocusedItem = this.focusedItem;\n this.setFocusedItem(element);\n if (lastFocusedItem !== this.focusedItem) {\n this.updateFocus();\n }\n }\n setFocusedItem(element) {\n for (let i = 0; i < this.actionsList.children.length; i++) {\n const elem = this.actionsList.children[i];\n if (element === elem) {\n this.focusedItem = i;\n break;\n }\n }\n }\n updateFocus(fromRight) {\n super.updateFocus(fromRight, true, true);\n if (typeof this.focusedItem !== 'undefined') {\n // Workaround for #80047 caused by an issue in chromium\n // https://bugs.chromium.org/p/chromium/issues/detail?id=414283\n // When that's fixed, just call this.scrollableElement.scanDomNode()\n this.scrollableElement.setScrollPosition({\n scrollTop: Math.round(this.menuElement.scrollTop)\n });\n }\n }\n doGetActionViewItem(action, options, parentData) {\n if (action instanceof Separator) {\n return new MenuSeparatorActionViewItem(options.context, action, { icon: true }, this.menuStyles);\n }\n else if (action instanceof SubmenuAction) {\n const menuActionViewItem = new SubmenuMenuActionViewItem(action, action.actions, parentData, { ...options, submenuIds: new Set([...(options.submenuIds || []), action.id]) }, this.menuStyles);\n if (options.enableMnemonics) {\n const mnemonic = menuActionViewItem.getMnemonic();\n if (mnemonic && menuActionViewItem.isEnabled()) {\n let actionViewItems = [];\n if (this.mnemonics.has(mnemonic)) {\n actionViewItems = this.mnemonics.get(mnemonic);\n }\n actionViewItems.push(menuActionViewItem);\n this.mnemonics.set(mnemonic, actionViewItems);\n }\n }\n return menuActionViewItem;\n }\n else {\n const menuItemOptions = { enableMnemonics: options.enableMnemonics, useEventAsContext: options.useEventAsContext };\n if (options.getKeyBinding) {\n const keybinding = options.getKeyBinding(action);\n if (keybinding) {\n const keybindingLabel = keybinding.getLabel();\n if (keybindingLabel) {\n menuItemOptions.keybinding = keybindingLabel;\n }\n }\n }\n const menuActionViewItem = new BaseMenuActionViewItem(options.context, action, menuItemOptions, this.menuStyles);\n if (options.enableMnemonics) {\n const mnemonic = menuActionViewItem.getMnemonic();\n if (mnemonic && menuActionViewItem.isEnabled()) {\n let actionViewItems = [];\n if (this.mnemonics.has(mnemonic)) {\n actionViewItems = this.mnemonics.get(mnemonic);\n }\n actionViewItems.push(menuActionViewItem);\n this.mnemonics.set(mnemonic, actionViewItems);\n }\n }\n return menuActionViewItem;\n }\n }\n}\nclass BaseMenuActionViewItem extends BaseActionViewItem {\n constructor(ctx, action, options, menuStyle) {\n options.isMenu = true;\n super(action, action, options);\n this.menuStyle = menuStyle;\n this.options = options;\n this.options.icon = options.icon !== undefined ? options.icon : false;\n this.options.label = options.label !== undefined ? options.label : true;\n this.cssClass = '';\n // Set mnemonic\n if (this.options.label && options.enableMnemonics) {\n const label = this.action.label;\n if (label) {\n const matches = MENU_MNEMONIC_REGEX.exec(label);\n if (matches) {\n this.mnemonic = (!!matches[1] ? matches[1] : matches[3]).toLocaleLowerCase();\n }\n }\n }\n // Add mouse up listener later to avoid accidental clicks\n this.runOnceToEnableMouseUp = new RunOnceScheduler(() => {\n if (!this.element) {\n return;\n }\n this._register(addDisposableListener(this.element, EventType.MOUSE_UP, e => {\n // removed default prevention as it conflicts\n // with BaseActionViewItem #101537\n // add back if issues arise and link new issue\n EventHelper.stop(e, true);\n // See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Interact_with_the_clipboard\n // > Writing to the clipboard\n // > You can use the \"cut\" and \"copy\" commands without any special\n // permission if you are using them in a short-lived event handler\n // for a user action (for example, a click handler).\n // => to get the Copy and Paste context menu actions working on Firefox,\n // there should be no timeout here\n if (isFirefox) {\n const mouseEvent = new StandardMouseEvent(getWindow(this.element), e);\n // Allowing right click to trigger the event causes the issue described below,\n // but since the solution below does not work in FF, we must disable right click\n if (mouseEvent.rightButton) {\n return;\n }\n this.onClick(e);\n }\n // In all other cases, set timeout to allow context menu cancellation to trigger\n // otherwise the action will destroy the menu and a second context menu\n // will still trigger for right click.\n else {\n setTimeout(() => {\n this.onClick(e);\n }, 0);\n }\n }));\n this._register(addDisposableListener(this.element, EventType.CONTEXT_MENU, e => {\n EventHelper.stop(e, true);\n }));\n }, 100);\n this._register(this.runOnceToEnableMouseUp);\n }\n render(container) {\n super.render(container);\n if (!this.element) {\n return;\n }\n this.container = container;\n this.item = append(this.element, $('a.action-menu-item'));\n if (this._action.id === Separator.ID) {\n // A separator is a presentation item\n this.item.setAttribute('role', 'presentation');\n }\n else {\n this.item.setAttribute('role', 'menuitem');\n if (this.mnemonic) {\n this.item.setAttribute('aria-keyshortcuts', `${this.mnemonic}`);\n }\n }\n this.check = append(this.item, $('span.menu-item-check' + ThemeIcon.asCSSSelector(Codicon.menuSelection)));\n this.check.setAttribute('role', 'none');\n this.label = append(this.item, $('span.action-label'));\n if (this.options.label && this.options.keybinding) {\n append(this.item, $('span.keybinding')).textContent = this.options.keybinding;\n }\n // Adds mouse up listener to actually run the action\n this.runOnceToEnableMouseUp.schedule();\n this.updateClass();\n this.updateLabel();\n this.updateTooltip();\n this.updateEnabled();\n this.updateChecked();\n this.applyStyle();\n }\n blur() {\n super.blur();\n this.applyStyle();\n }\n focus() {\n var _a;\n super.focus();\n (_a = this.item) === null || _a === void 0 ? void 0 : _a.focus();\n this.applyStyle();\n }\n updatePositionInSet(pos, setSize) {\n if (this.item) {\n this.item.setAttribute('aria-posinset', `${pos}`);\n this.item.setAttribute('aria-setsize', `${setSize}`);\n }\n }\n updateLabel() {\n var _a;\n if (!this.label) {\n return;\n }\n if (this.options.label) {\n clearNode(this.label);\n let label = stripIcons(this.action.label);\n if (label) {\n const cleanLabel = cleanMnemonic(label);\n if (!this.options.enableMnemonics) {\n label = cleanLabel;\n }\n this.label.setAttribute('aria-label', cleanLabel.replace(/&&/g, '&'));\n const matches = MENU_MNEMONIC_REGEX.exec(label);\n if (matches) {\n label = strings.escape(label);\n // This is global, reset it\n MENU_ESCAPED_MNEMONIC_REGEX.lastIndex = 0;\n let escMatch = MENU_ESCAPED_MNEMONIC_REGEX.exec(label);\n // We can't use negative lookbehind so if we match our negative and skip\n while (escMatch && escMatch[1]) {\n escMatch = MENU_ESCAPED_MNEMONIC_REGEX.exec(label);\n }\n const replaceDoubleEscapes = (str) => str.replace(/&&/g, '&');\n if (escMatch) {\n this.label.append(strings.ltrim(replaceDoubleEscapes(label.substr(0, escMatch.index)), ' '), $('u', { 'aria-hidden': 'true' }, escMatch[3]), strings.rtrim(replaceDoubleEscapes(label.substr(escMatch.index + escMatch[0].length)), ' '));\n }\n else {\n this.label.innerText = replaceDoubleEscapes(label).trim();\n }\n (_a = this.item) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-keyshortcuts', (!!matches[1] ? matches[1] : matches[3]).toLocaleLowerCase());\n }\n else {\n this.label.innerText = label.replace(/&&/g, '&').trim();\n }\n }\n }\n }\n updateTooltip() {\n // menus should function like native menus and they do not have tooltips\n }\n updateClass() {\n if (this.cssClass && this.item) {\n this.item.classList.remove(...this.cssClass.split(' '));\n }\n if (this.options.icon && this.label) {\n this.cssClass = this.action.class || '';\n this.label.classList.add('icon');\n if (this.cssClass) {\n this.label.classList.add(...this.cssClass.split(' '));\n }\n this.updateEnabled();\n }\n else if (this.label) {\n this.label.classList.remove('icon');\n }\n }\n updateEnabled() {\n if (this.action.enabled) {\n if (this.element) {\n this.element.classList.remove('disabled');\n this.element.removeAttribute('aria-disabled');\n }\n if (this.item) {\n this.item.classList.remove('disabled');\n this.item.removeAttribute('aria-disabled');\n this.item.tabIndex = 0;\n }\n }\n else {\n if (this.element) {\n this.element.classList.add('disabled');\n this.element.setAttribute('aria-disabled', 'true');\n }\n if (this.item) {\n this.item.classList.add('disabled');\n this.item.setAttribute('aria-disabled', 'true');\n }\n }\n }\n updateChecked() {\n if (!this.item) {\n return;\n }\n const checked = this.action.checked;\n this.item.classList.toggle('checked', !!checked);\n if (checked !== undefined) {\n this.item.setAttribute('role', 'menuitemcheckbox');\n this.item.setAttribute('aria-checked', checked ? 'true' : 'false');\n }\n else {\n this.item.setAttribute('role', 'menuitem');\n this.item.setAttribute('aria-checked', '');\n }\n }\n getMnemonic() {\n return this.mnemonic;\n }\n applyStyle() {\n const isSelected = this.element && this.element.classList.contains('focused');\n const fgColor = isSelected && this.menuStyle.selectionForegroundColor ? this.menuStyle.selectionForegroundColor : this.menuStyle.foregroundColor;\n const bgColor = isSelected && this.menuStyle.selectionBackgroundColor ? this.menuStyle.selectionBackgroundColor : undefined;\n const outline = isSelected && this.menuStyle.selectionBorderColor ? `1px solid ${this.menuStyle.selectionBorderColor}` : '';\n const outlineOffset = isSelected && this.menuStyle.selectionBorderColor ? `-1px` : '';\n if (this.item) {\n this.item.style.color = fgColor !== null && fgColor !== void 0 ? fgColor : '';\n this.item.style.backgroundColor = bgColor !== null && bgColor !== void 0 ? bgColor : '';\n this.item.style.outline = outline;\n this.item.style.outlineOffset = outlineOffset;\n }\n if (this.check) {\n this.check.style.color = fgColor !== null && fgColor !== void 0 ? fgColor : '';\n }\n }\n}\nclass SubmenuMenuActionViewItem extends BaseMenuActionViewItem {\n constructor(action, submenuActions, parentData, submenuOptions, menuStyles) {\n super(action, action, submenuOptions, menuStyles);\n this.submenuActions = submenuActions;\n this.parentData = parentData;\n this.submenuOptions = submenuOptions;\n this.mysubmenu = null;\n this.submenuDisposables = this._register(new DisposableStore());\n this.mouseOver = false;\n this.expandDirection = submenuOptions && submenuOptions.expandDirection !== undefined ? submenuOptions.expandDirection : { horizontal: HorizontalDirection.Right, vertical: VerticalDirection.Below };\n this.showScheduler = new RunOnceScheduler(() => {\n if (this.mouseOver) {\n this.cleanupExistingSubmenu(false);\n this.createSubmenu(false);\n }\n }, 250);\n this.hideScheduler = new RunOnceScheduler(() => {\n if (this.element && (!isAncestor(getActiveElement(), this.element) && this.parentData.submenu === this.mysubmenu)) {\n this.parentData.parent.focus(false);\n this.cleanupExistingSubmenu(true);\n }\n }, 750);\n }\n render(container) {\n super.render(container);\n if (!this.element) {\n return;\n }\n if (this.item) {\n this.item.classList.add('monaco-submenu-item');\n this.item.tabIndex = 0;\n this.item.setAttribute('aria-haspopup', 'true');\n this.updateAriaExpanded('false');\n this.submenuIndicator = append(this.item, $('span.submenu-indicator' + ThemeIcon.asCSSSelector(Codicon.menuSubmenu)));\n this.submenuIndicator.setAttribute('aria-hidden', 'true');\n }\n this._register(addDisposableListener(this.element, EventType.KEY_UP, e => {\n const event = new StandardKeyboardEvent(e);\n if (event.equals(17 /* KeyCode.RightArrow */) || event.equals(3 /* KeyCode.Enter */)) {\n EventHelper.stop(e, true);\n this.createSubmenu(true);\n }\n }));\n this._register(addDisposableListener(this.element, EventType.KEY_DOWN, e => {\n const event = new StandardKeyboardEvent(e);\n if (getActiveElement() === this.item) {\n if (event.equals(17 /* KeyCode.RightArrow */) || event.equals(3 /* KeyCode.Enter */)) {\n EventHelper.stop(e, true);\n }\n }\n }));\n this._register(addDisposableListener(this.element, EventType.MOUSE_OVER, e => {\n if (!this.mouseOver) {\n this.mouseOver = true;\n this.showScheduler.schedule();\n }\n }));\n this._register(addDisposableListener(this.element, EventType.MOUSE_LEAVE, e => {\n this.mouseOver = false;\n }));\n this._register(addDisposableListener(this.element, EventType.FOCUS_OUT, e => {\n if (this.element && !isAncestor(getActiveElement(), this.element)) {\n this.hideScheduler.schedule();\n }\n }));\n this._register(this.parentData.parent.onScroll(() => {\n if (this.parentData.submenu === this.mysubmenu) {\n this.parentData.parent.focus(false);\n this.cleanupExistingSubmenu(true);\n }\n }));\n }\n updateEnabled() {\n // override on submenu entry\n // native menus do not observe enablement on sumbenus\n // we mimic that behavior\n }\n onClick(e) {\n // stop clicking from trying to run an action\n EventHelper.stop(e, true);\n this.cleanupExistingSubmenu(false);\n this.createSubmenu(true);\n }\n cleanupExistingSubmenu(force) {\n if (this.parentData.submenu && (force || (this.parentData.submenu !== this.mysubmenu))) {\n // disposal may throw if the submenu has already been removed\n try {\n this.parentData.submenu.dispose();\n }\n catch (_a) { }\n this.parentData.submenu = undefined;\n this.updateAriaExpanded('false');\n if (this.submenuContainer) {\n this.submenuDisposables.clear();\n this.submenuContainer = undefined;\n }\n }\n }\n calculateSubmenuMenuLayout(windowDimensions, submenu, entry, expandDirection) {\n const ret = { top: 0, left: 0 };\n // Start with horizontal\n ret.left = layout(windowDimensions.width, submenu.width, { position: expandDirection.horizontal === HorizontalDirection.Right ? 0 /* LayoutAnchorPosition.Before */ : 1 /* LayoutAnchorPosition.After */, offset: entry.left, size: entry.width });\n // We don't have enough room to layout the menu fully, so we are overlapping the menu\n if (ret.left >= entry.left && ret.left < entry.left + entry.width) {\n if (entry.left + 10 + submenu.width <= windowDimensions.width) {\n ret.left = entry.left + 10;\n }\n entry.top += 10;\n entry.height = 0;\n }\n // Now that we have a horizontal position, try layout vertically\n ret.top = layout(windowDimensions.height, submenu.height, { position: 0 /* LayoutAnchorPosition.Before */, offset: entry.top, size: 0 });\n // We didn't have enough room below, but we did above, so we shift down to align the menu\n if (ret.top + submenu.height === entry.top && ret.top + entry.height + submenu.height <= windowDimensions.height) {\n ret.top += entry.height;\n }\n return ret;\n }\n createSubmenu(selectFirstItem = true) {\n if (!this.element) {\n return;\n }\n if (!this.parentData.submenu) {\n this.updateAriaExpanded('true');\n this.submenuContainer = append(this.element, $('div.monaco-submenu'));\n this.submenuContainer.classList.add('menubar-menu-items-holder', 'context-view');\n // Set the top value of the menu container before construction\n // This allows the menu constructor to calculate the proper max height\n const computedStyles = getWindow(this.parentData.parent.domNode).getComputedStyle(this.parentData.parent.domNode);\n const paddingTop = parseFloat(computedStyles.paddingTop || '0') || 0;\n // this.submenuContainer.style.top = `${this.element.offsetTop - this.parentData.parent.scrollOffset - paddingTop}px`;\n this.submenuContainer.style.zIndex = '1';\n this.submenuContainer.style.position = 'fixed';\n this.submenuContainer.style.top = '0';\n this.submenuContainer.style.left = '0';\n this.parentData.submenu = new Menu(this.submenuContainer, this.submenuActions.length ? this.submenuActions : [new EmptySubmenuAction()], this.submenuOptions, this.menuStyle);\n // layout submenu\n const entryBox = this.element.getBoundingClientRect();\n const entryBoxUpdated = {\n top: entryBox.top - paddingTop,\n left: entryBox.left,\n height: entryBox.height + 2 * paddingTop,\n width: entryBox.width\n };\n const viewBox = this.submenuContainer.getBoundingClientRect();\n const window = getWindow(this.element);\n const { top, left } = this.calculateSubmenuMenuLayout(new Dimension(window.innerWidth, window.innerHeight), Dimension.lift(viewBox), entryBoxUpdated, this.expandDirection);\n // subtract offsets caused by transform parent\n this.submenuContainer.style.left = `${left - viewBox.left}px`;\n this.submenuContainer.style.top = `${top - viewBox.top}px`;\n this.submenuDisposables.add(addDisposableListener(this.submenuContainer, EventType.KEY_UP, e => {\n const event = new StandardKeyboardEvent(e);\n if (event.equals(15 /* KeyCode.LeftArrow */)) {\n EventHelper.stop(e, true);\n this.parentData.parent.focus();\n this.cleanupExistingSubmenu(true);\n }\n }));\n this.submenuDisposables.add(addDisposableListener(this.submenuContainer, EventType.KEY_DOWN, e => {\n const event = new StandardKeyboardEvent(e);\n if (event.equals(15 /* KeyCode.LeftArrow */)) {\n EventHelper.stop(e, true);\n }\n }));\n this.submenuDisposables.add(this.parentData.submenu.onDidCancel(() => {\n this.parentData.parent.focus();\n this.cleanupExistingSubmenu(true);\n }));\n this.parentData.submenu.focus(selectFirstItem);\n this.mysubmenu = this.parentData.submenu;\n }\n else {\n this.parentData.submenu.focus(false);\n }\n }\n updateAriaExpanded(value) {\n var _a;\n if (this.item) {\n (_a = this.item) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-expanded', value);\n }\n }\n applyStyle() {\n super.applyStyle();\n const isSelected = this.element && this.element.classList.contains('focused');\n const fgColor = isSelected && this.menuStyle.selectionForegroundColor ? this.menuStyle.selectionForegroundColor : this.menuStyle.foregroundColor;\n if (this.submenuIndicator) {\n this.submenuIndicator.style.color = fgColor !== null && fgColor !== void 0 ? fgColor : '';\n }\n }\n dispose() {\n super.dispose();\n this.hideScheduler.dispose();\n if (this.mysubmenu) {\n this.mysubmenu.dispose();\n this.mysubmenu = null;\n }\n if (this.submenuContainer) {\n this.submenuContainer = undefined;\n }\n }\n}\nclass MenuSeparatorActionViewItem extends ActionViewItem {\n constructor(context, action, options, menuStyles) {\n super(context, action, options);\n this.menuStyles = menuStyles;\n }\n render(container) {\n super.render(container);\n if (this.label) {\n this.label.style.borderBottomColor = this.menuStyles.separatorColor ? `${this.menuStyles.separatorColor}` : '';\n }\n }\n}\nexport function cleanMnemonic(label) {\n const regex = MENU_MNEMONIC_REGEX;\n const matches = regex.exec(label);\n if (!matches) {\n return label;\n }\n const mnemonicInText = !matches[1];\n return label.replace(regex, mnemonicInText ? '$2$3' : '').trim();\n}\nexport function formatRule(c) {\n const fontCharacter = getCodiconFontCharacters()[c.id];\n return `.codicon-${c.id}:before { content: '\\\\${fontCharacter.toString(16)}'; }`;\n}\nfunction getMenuWidgetCSS(style, isForShadowDom) {\n let result = /* css */ `\n.monaco-menu {\n\tfont-size: 13px;\n\tborder-radius: 5px;\n\tmin-width: 160px;\n}\n\n${formatRule(Codicon.menuSelection)}\n${formatRule(Codicon.menuSubmenu)}\n\n.monaco-menu .monaco-action-bar {\n\ttext-align: right;\n\toverflow: hidden;\n\twhite-space: nowrap;\n}\n\n.monaco-menu .monaco-action-bar .actions-container {\n\tdisplay: flex;\n\tmargin: 0 auto;\n\tpadding: 0;\n\twidth: 100%;\n\tjustify-content: flex-end;\n}\n\n.monaco-menu .monaco-action-bar.vertical .actions-container {\n\tdisplay: inline-block;\n}\n\n.monaco-menu .monaco-action-bar.reverse .actions-container {\n\tflex-direction: row-reverse;\n}\n\n.monaco-menu .monaco-action-bar .action-item {\n\tcursor: pointer;\n\tdisplay: inline-block;\n\ttransition: transform 50ms ease;\n\tposition: relative; /* DO NOT REMOVE - this is the key to preventing the ghosting icon bug in Chrome 42 */\n}\n\n.monaco-menu .monaco-action-bar .action-item.disabled {\n\tcursor: default;\n}\n\n.monaco-menu .monaco-action-bar .action-item .icon,\n.monaco-menu .monaco-action-bar .action-item .codicon {\n\tdisplay: inline-block;\n}\n\n.monaco-menu .monaco-action-bar .action-item .codicon {\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.monaco-menu .monaco-action-bar .action-label {\n\tfont-size: 11px;\n\tmargin-right: 4px;\n}\n\n.monaco-menu .monaco-action-bar .action-item.disabled .action-label,\n.monaco-menu .monaco-action-bar .action-item.disabled .action-label:hover {\n\tcolor: var(--vscode-disabledForeground);\n}\n\n/* Vertical actions */\n\n.monaco-menu .monaco-action-bar.vertical {\n\ttext-align: left;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item {\n\tdisplay: block;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label.separator {\n\tdisplay: block;\n\tborder-bottom: 1px solid var(--vscode-menu-separatorBackground);\n\tpadding-top: 1px;\n\tpadding: 30px;\n}\n\n.monaco-menu .secondary-actions .monaco-action-bar .action-label {\n\tmargin-left: 6px;\n}\n\n/* Action Items */\n.monaco-menu .monaco-action-bar .action-item.select-container {\n\toverflow: hidden; /* somehow the dropdown overflows its container, we prevent it here to not push */\n\tflex: 1;\n\tmax-width: 170px;\n\tmin-width: 60px;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tmargin-right: 10px;\n}\n\n.monaco-menu .monaco-action-bar.vertical {\n\tmargin-left: 0;\n\toverflow: visible;\n}\n\n.monaco-menu .monaco-action-bar.vertical .actions-container {\n\tdisplay: block;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item {\n\tpadding: 0;\n\ttransform: none;\n\tdisplay: flex;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item.active {\n\ttransform: none;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-menu-item {\n\tflex: 1 1 auto;\n\tdisplay: flex;\n\theight: 2em;\n\talign-items: center;\n\tposition: relative;\n\tmargin: 0 4px;\n\tborder-radius: 4px;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-menu-item:hover .keybinding,\n.monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .keybinding {\n\topacity: unset;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label {\n\tflex: 1 1 auto;\n\ttext-decoration: none;\n\tpadding: 0 1em;\n\tbackground: none;\n\tfont-size: 12px;\n\tline-height: 1;\n}\n\n.monaco-menu .monaco-action-bar.vertical .keybinding,\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator {\n\tdisplay: inline-block;\n\tflex: 2 1 auto;\n\tpadding: 0 1em;\n\ttext-align: right;\n\tfont-size: 12px;\n\tline-height: 1;\n}\n\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator {\n\theight: 100%;\n}\n\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator.codicon {\n\tfont-size: 16px !important;\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator.codicon::before {\n\tmargin-left: auto;\n\tmargin-right: -20px;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item.disabled .keybinding,\n.monaco-menu .monaco-action-bar.vertical .action-item.disabled .submenu-indicator {\n\topacity: 0.4;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label:not(.separator) {\n\tdisplay: inline-block;\n\tbox-sizing: border-box;\n\tmargin: 0;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item {\n\tposition: static;\n\toverflow: visible;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item .monaco-submenu {\n\tposition: absolute;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label.separator {\n\twidth: 100%;\n\theight: 0px !important;\n\topacity: 1;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label.separator.text {\n\tpadding: 0.7em 1em 0.1em 1em;\n\tfont-weight: bold;\n\topacity: 1;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label:hover {\n\tcolor: inherit;\n}\n\n.monaco-menu .monaco-action-bar.vertical .menu-item-check {\n\tposition: absolute;\n\tvisibility: hidden;\n\twidth: 1em;\n\theight: 100%;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-menu-item.checked .menu-item-check {\n\tvisibility: visible;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n/* Context Menu */\n\n.context-view.monaco-menu-container {\n\toutline: 0;\n\tborder: none;\n\tanimation: fadeIn 0.083s linear;\n\t-webkit-app-region: no-drag;\n}\n\n.context-view.monaco-menu-container :focus,\n.context-view.monaco-menu-container .monaco-action-bar.vertical:focus,\n.context-view.monaco-menu-container .monaco-action-bar.vertical :focus {\n\toutline: 0;\n}\n\n.hc-black .context-view.monaco-menu-container,\n.hc-light .context-view.monaco-menu-container,\n:host-context(.hc-black) .context-view.monaco-menu-container,\n:host-context(.hc-light) .context-view.monaco-menu-container {\n\tbox-shadow: none;\n}\n\n.hc-black .monaco-menu .monaco-action-bar.vertical .action-item.focused,\n.hc-light .monaco-menu .monaco-action-bar.vertical .action-item.focused,\n:host-context(.hc-black) .monaco-menu .monaco-action-bar.vertical .action-item.focused,\n:host-context(.hc-light) .monaco-menu .monaco-action-bar.vertical .action-item.focused {\n\tbackground: none;\n}\n\n/* Vertical Action Bar Styles */\n\n.monaco-menu .monaco-action-bar.vertical {\n\tpadding: 4px 0;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-menu-item {\n\theight: 2em;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label:not(.separator),\n.monaco-menu .monaco-action-bar.vertical .keybinding {\n\tfont-size: inherit;\n\tpadding: 0 2em;\n\tmax-height: 100%;\n}\n\n.monaco-menu .monaco-action-bar.vertical .menu-item-check {\n\tfont-size: inherit;\n\twidth: 2em;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label.separator {\n\tfont-size: inherit;\n\tmargin: 5px 0 !important;\n\tpadding: 0;\n\tborder-radius: 0;\n}\n\n.linux .monaco-menu .monaco-action-bar.vertical .action-label.separator,\n:host-context(.linux) .monaco-menu .monaco-action-bar.vertical .action-label.separator {\n\tmargin-left: 0;\n\tmargin-right: 0;\n}\n\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator {\n\tfont-size: 60%;\n\tpadding: 0 1.8em;\n}\n\n.linux .monaco-menu .monaco-action-bar.vertical .submenu-indicator,\n:host-context(.linux) .monaco-menu .monaco-action-bar.vertical .submenu-indicator {\n\theight: 100%;\n\tmask-size: 10px 10px;\n\t-webkit-mask-size: 10px 10px;\n}\n\n.monaco-menu .action-item {\n\tcursor: default;\n}`;\n if (isForShadowDom) {\n // Only define scrollbar styles when used inside shadow dom,\n // otherwise leave their styling to the global workbench styling.\n result += `\n\t\t\t/* Arrows */\n\t\t\t.monaco-scrollable-element > .scrollbar > .scra {\n\t\t\t\tcursor: pointer;\n\t\t\t\tfont-size: 11px !important;\n\t\t\t}\n\n\t\t\t.monaco-scrollable-element > .visible {\n\t\t\t\topacity: 1;\n\n\t\t\t\t/* Background rule added for IE9 - to allow clicks on dom node */\n\t\t\t\tbackground:rgba(0,0,0,0);\n\n\t\t\t\ttransition: opacity 100ms linear;\n\t\t\t}\n\t\t\t.monaco-scrollable-element > .invisible {\n\t\t\t\topacity: 0;\n\t\t\t\tpointer-events: none;\n\t\t\t}\n\t\t\t.monaco-scrollable-element > .invisible.fade {\n\t\t\t\ttransition: opacity 800ms linear;\n\t\t\t}\n\n\t\t\t/* Scrollable Content Inset Shadow */\n\t\t\t.monaco-scrollable-element > .shadow {\n\t\t\t\tposition: absolute;\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t\t.monaco-scrollable-element > .shadow.top {\n\t\t\t\tdisplay: block;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 3px;\n\t\t\t\theight: 3px;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t\t.monaco-scrollable-element > .shadow.left {\n\t\t\t\tdisplay: block;\n\t\t\t\ttop: 3px;\n\t\t\t\tleft: 0;\n\t\t\t\theight: 100%;\n\t\t\t\twidth: 3px;\n\t\t\t}\n\t\t\t.monaco-scrollable-element > .shadow.top-left-corner {\n\t\t\t\tdisplay: block;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t\theight: 3px;\n\t\t\t\twidth: 3px;\n\t\t\t}\n\t\t`;\n // Scrollbars\n const scrollbarShadowColor = style.scrollbarShadow;\n if (scrollbarShadowColor) {\n result += `\n\t\t\t\t.monaco-scrollable-element > .shadow.top {\n\t\t\t\t\tbox-shadow: ${scrollbarShadowColor} 0 6px 6px -6px inset;\n\t\t\t\t}\n\n\t\t\t\t.monaco-scrollable-element > .shadow.left {\n\t\t\t\t\tbox-shadow: ${scrollbarShadowColor} 6px 0 6px -6px inset;\n\t\t\t\t}\n\n\t\t\t\t.monaco-scrollable-element > .shadow.top.left {\n\t\t\t\t\tbox-shadow: ${scrollbarShadowColor} 6px 6px 6px -6px inset;\n\t\t\t\t}\n\t\t\t`;\n }\n const scrollbarSliderBackgroundColor = style.scrollbarSliderBackground;\n if (scrollbarSliderBackgroundColor) {\n result += `\n\t\t\t\t.monaco-scrollable-element > .scrollbar > .slider {\n\t\t\t\t\tbackground: ${scrollbarSliderBackgroundColor};\n\t\t\t\t}\n\t\t\t`;\n }\n const scrollbarSliderHoverBackgroundColor = style.scrollbarSliderHoverBackground;\n if (scrollbarSliderHoverBackgroundColor) {\n result += `\n\t\t\t\t.monaco-scrollable-element > .scrollbar > .slider:hover {\n\t\t\t\t\tbackground: ${scrollbarSliderHoverBackgroundColor};\n\t\t\t\t}\n\t\t\t`;\n }\n const scrollbarSliderActiveBackgroundColor = style.scrollbarSliderActiveBackground;\n if (scrollbarSliderActiveBackgroundColor) {\n result += `\n\t\t\t\t.monaco-scrollable-element > .scrollbar > .slider.active {\n\t\t\t\t\tbackground: ${scrollbarSliderActiveBackgroundColor};\n\t\t\t\t}\n\t\t\t`;\n }\n }\n return result;\n}\n"],"names":["$","unthemedKeybindingLabelOptions","keybindingLabelBackground","undefined","keybindingLabelForeground","keybindingLabelBorder","keybindingLabelBottomBorder","keybindingLabelShadow","KeybindingLabel","constructor","container","os","options","super","this","keyElements","Set","Object","create","labelForeground","domNode","style","color","hover","_register","setupUpdatableHover","didEverRender","appendChild","element","set","keybinding","matches","areSame","render","_a","clear","chords","getChords","renderChord","firstPart","i","length","chordPart","title","disableTitle","getAriaLabel","update","setAttribute","renderUnboundKeybindings","renderUnbound","parent","chord","match","modifierLabels","ctrlKey","renderKey","Boolean","separator","shiftKey","altKey","metaKey","keyLabel","keyCode","label","highlight","createKeyElement","extraClass","keyElement","add","backgroundColor","borderColor","borderBottomColor","boxShadow","a","b","PagedRenderer","templateId","renderer","modelProvider","renderTemplate","data","disposable","renderElement","index","_","height","dispose","model","isResolved","get","cts","promise","resolve","token","cancel","renderPlaceholder","then","entry","disposeTemplate","PagedAccessibilityProvider","accessibilityProvider","getWidgetAriaLabel","PagedList","user","virtualDelegate","renderers","pagedRenderers","map","r","list","fromPagedListOptions","updateOptions","getHTMLElement","onDidFocus","widget","onDidDispose","onMouseDblClick","browserEvent","_model","onPointer","onDidChangeSelection","elements","indexes","e","splice","getFocus","getSelection","getSelectedElements","styles","groupIntersect","range","groups","result","start","end","intersection","push","size","shift","much","RangeMap","paddingTop","_paddingTop","_size","topPadding","deleteCount","items","diff","before","after","Number","POSITIVE_INFINITY","g","middle","item","previousGroup","group","consolidate","reduce","concat","t","count","len","indexAt","position","newSize","Math","floor","indexAfter","min","positionAt","groupCount","newCount","RowCache","cache","Map","transactionNodesPendingRemoval","inTransaction","alloc","getTemplateCache","pop","isStale","has","delete","templateData","getRenderer","row","isReusingConnectedDomNode","release","releaseRow","transact","makeChanges","Error","doRemoveNode","classList","remove","parentElement","removeChild","removeFromParent","forEach","cachedRows","cachedRow","__decorate","decorators","target","key","desc","d","c","arguments","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","StaticDND","CurrentDragAndDropData","DefaultOptions","useShadows","verticalScrollMode","setRowLineHeight","setRowHeight","supportDynamicHeights","dnd","getDragElements","getDragURI","onDragStart","onDragOver","drop","horizontalScrolling","transformOptimization","alwaysConsumeMouseWheel","ElementsDragAndDropData","getData","ExternalElementsDragAndDropData","NativeDragAndDropData","types","files","dataTransfer","file","type","ListViewAccessibilityProvider","getSetSize","bind","l","getPosInSet","getRole","isChecked","ListView","contentHeight","rangeMap","onDidScroll","scrollableElement","onScroll","scrollableElementDomNode","getDomNode","_horizontalScrolling","value","toggle","measureItemWidth","updateScrollWidth","setScrollDimensions","width","rowsContainer","max","scrollWidth","renderWidth","scrollableElementWidthDelayer","_b","_c","_d","_e","_f","_g","_h","_j","_k","_l","_m","_o","domId","InstanceCount","_scrollHeight","scrollableElementUpdateDisposable","splicing","dragOverAnimationStopDisposable","dragOverMouseY","canDrop","currentDragFeedbackDisposable","onDragLeaveTimeout","disposables","_onDidChangeContentHeight","_onDidChangeContentWidth","onDidChangeContentHeight","event","itemId","createRangeMap","lastRenderTop","lastRenderHeight","document","createElement","className","tabIndex","mouseSupport","paddingBottom","transform","overflow","contain","scrollable","forceIntegerValues","smoothScrollDuration","smoothScrolling","scheduleAtNextAnimationFrame","cb","horizontal","vertical","mouseWheelScrollSensitivity","fastScrollSensitivity","scrollByPage","onTouchChange","scrollTop","toDragEvent","onDrop","onDragLeave","onDragEnd","layout","initialSize","scrollableOptions","scrollHeight","setSmoothScrollDuration","lastRenderRange","getRenderRange","offset","setScrollTop","eventuallyUpdateScrollDimensions","_rerender","_splice","fire","previousRenderRange","deleteRange","removeRange","rowsToDispose","dragStartDisposable","checkedDisposable","rows","disposeElement","unshift","stale","previousRestRange","previousRenderedRestRange","previousUnrenderedRestRanges","inserted","id","String","getTemplateId","getHeight","hasDynamicHeight","lastDynamicHeightWidth","uri","dropTarget","deleted","delta","renderRange","renderedRestRange","updateRange","updateItemInDOM","removeRanges","removeItemFromDOM","unrenderedRestRanges","insertRanges","reverse","insertItemInDOM","values","renderHeight","eventuallyUpdateScrollWidth","trigger","rerender","getScrollDimensions","firstVisibleIndex","indexOf","findIndex","domElement","elementHeight","elementTop","scrollDimensions","renderTop","renderLeft","updateItemsInDOM","rangesToInsert","rangesToRemove","rangesToUpdate","left","top","role","checked","onDidChange","referenceNode","at","nextElementSibling","insertBefore","draggable","getComputedStyle","paddingLeft","parseFloat","paddingRight","lineHeight","getElementDomId","getScrollTop","getScrollPosition","reuseAnimation","setScrollPosition","onMouseClick","toMouseEvent","onMouseMiddleClick","button","onMouseDown","onMouseOver","onMouseOut","onContextMenu","toGestureEvent","onTouchStart","toTouchEvent","onTap","getItemIndexFromEventTarget","initialTarget","sector","getTargetSector","scrollLeft","inSmoothScrolling","err","console","error","preventDefault","stopPropagation","translationY","effectAllowed","setData","setDragImage","getDragLabel","dragImage","textContent","contains","ownerDocument","getDragImageContainer","setTimeout","currentDragData","call","setupDragAndDropScrollTopAnimation","accept","currentDragFeedback","feedback","dropEffect","effect","filter","sort","dragOverEffectPosition","f1","f2","Array","isArray","currentDragFeedbackPosition","clearDragOverFeedback","dragData","teardownDragAndDropScrollTopAnimation","dragOverAnimationDisposable","viewTop","animateDragAndDropScrollTop","pageY","upperLimit","targetIndex","relativePosition","offsetY","rawIndex","getAttribute","isNaN","anchorElementIndex","anchorElementTopDelta","heightDiff","didChange","probeDynamicHeight","unrenderRanges","renderRanges","deltaScrollTop","getFutureScrollPosition","newScrollTop","getDynamicHeight","offsetHeight","body","warn","setDynamicHeight","parentNode","prototype","CombinedSpliceable","spliceables","s","ListError","message","TypeNavigationMode","TypeNavigationControllerState","TraitRenderer","trait","renderedElements","name","renderedElementIndex","el","rendered","unrender","renderIndex","insertCount","renderedElement","renderIndexes","Trait","_trait","sortedIndexes","_onChange","onChange","j","_set","numericSort","sortedResult","toRender","disjunction","SelectionTrait","setAriaSelected","TraitSpliceable","view","identityProvider","fill","pastElementsWithTrait","getId","toString","pastElementsWithTraitSet","elementsWithTrait","isInputElement","tagName","isListElementDescendantOfClass","isMonacoEditor","isMonacoCustomToggle","isActionItem","isStickyScrollElement","isStickyScrollContainer","isButton","KeyboardController","onKeyDown","multipleSelectionDisposables","multipleSelectionSupport","onEnter","onUpArrow","onDownArrow","onPageUpArrow","onPageDownArrow","onEscape","platform","onCtrlA","optionsUpdate","setSelection","focusPrevious","setAnchor","reveal","focus","focusNext","focusPreviousPage","focusNextPage","DefaultKeyboardNavigationDelegate","mightProducePrintableCharacter","TypeNavigationController","keyboardNavigationLabelProvider","keyboardNavigationEventFilter","delegate","enabled","state","Idle","mode","Automatic","triggered","previouslyFocused","enabledDisposables","typeNavigationEnabled","enable","disable","typeNavigationMode","typing","onChar","onClear","onInput","ariaLabel","word","Typing","getKeyboardNavigationLabel","labelStr","setFocus","fuzzy","DOMFocusController","onTab","focusedDomElement","tabIndexElement","querySelector","visibility","display","isSelectionSingleChangeEvent","isSelectionRangeChangeEvent","DefaultMultipleSelectionController","MouseController","_onPointer","multipleSelectionController","onDoubleClick","onViewPointer","isSelectionChangeEvent","domFocus","isHandledByList","changeSelection","anchor","getAnchor","currentFocus","rangeSelection","selection","contiguousRange","getContiguousRangeContaining","newSelection","one","other","relativeComplement","DefaultStyleController","styleElement","selectorSuffix","suffix","content","listBackground","listFocusBackground","listFocusForeground","listActiveSelectionBackground","listActiveSelectionForeground","listActiveSelectionIconForeground","listFocusAndSelectionBackground","listFocusAndSelectionForeground","listInactiveFocusForeground","listInactiveSelectionIconForeground","listInactiveFocusBackground","listInactiveSelectionBackground","listInactiveSelectionForeground","listHoverBackground","listHoverForeground","focusAndSelectionOutline","listFocusAndSelectionOutline","listSelectionOutline","listFocusOutline","inactiveFocusAndSelectionOutline","listInactiveFocusOutline","listHoverOutline","listDropOverBackground","listDropBetweenBackground","tableColumnsBorder","tableOddRowsBackgroundColor","join","unthemedListStyles","treeIndentGuidesStroke","treeInactiveIndentGuidesStroke","transparent","treeStickyScrollBackground","treeStickyScrollBorder","treeStickyScrollShadow","keyboardSupport","PipelineRenderer","_templateId","AccessibiltyRenderer","observable","reader","setAriaLabel","readObservable","ariaLevel","getAriaLevel","removeAttribute","ListViewDragAndDrop","originalEvent","targetElement","targetSector","List","onDidChangeFocus","eventBufferer","wrapEvent","toListEvent","mouseController","didJustPressContextMenuKey","fromKeyDown","fromKeyUp","fromMouse","onDidBlur","_options","_ariaLabel","_onDidDispose","getWidgetRole","baseRenderers","onDidChangeActiveDescendant","viewOptions","createListView","styleController","spliceable","keyboardController","keyboardNavigationDelegate","typeNavigationController","createMouseController","_onFocusChange","_onSelectionChange","bufferEvents","preventScroll","getAnchorElement","n","loop","findNextIndex","findPreviousIndex","lastPageIndex","currentlyFocusedElementIndex","lastGoodPageIndex","previousScrollTop","nextpageScrollTop","getPaddingTop","firstPageIndex","firstGoodPageIndex","focusLast","focusFirst","focusNth","getFocusedElements","relativeTop","m","viewItemBottom","scrollBottom","getRelativeTop","abs","getScrollableElement","getElementID","getElementTop","getActiveDescendantId","MENU_MNEMONIC_REGEX","MENU_ESCAPED_MNEMONIC_REGEX","HorizontalDirection","VerticalDirection","Menu","actions","menuStyles","menuElement","orientation","actionViewItemProvider","action","doGetActionViewItem","parentData","context","actionRunner","ariaRole","focusOnlyEnabledItems","triggerKeys","keys","keyDown","actionsList","initializeOrUpdateStyleSheet","equals","enableMnemonics","toLocaleLowerCase","mnemonics","SubmenuMenuActionViewItem","focusItemByElement","onClick","focusedItem","viewItems","relatedTarget","updateFocus","lastFocusedItem","setFocusedItem","verticalScrollbarSize","handleMouseWheel","scrollElement","styleScrollElement","window","maxHeight","innerHeight","getBoundingClientRect","idx","submenuIds","icon","isMenu","scanDomNode","MenuSeparatorActionViewItem","array","updatePositionInSet","styleSheet","globalStyleSheet","isForShadowDom","formatRule","scrollbarShadowColor","scrollbarShadow","scrollbarSliderBackgroundColor","scrollbarSliderBackground","scrollbarSliderHoverBackgroundColor","scrollbarSliderHoverBackground","scrollbarSliderActiveBackgroundColor","scrollbarSliderActiveBackground","getMenuWidgetCSS","fgColor","foregroundColor","bgColor","border","shadow","shadowColor","outline","borderRadius","getContainer","children","fromRight","round","menuActionViewItem","mnemonic","getMnemonic","isEnabled","actionViewItems","menuItemOptions","useEventAsContext","getKeyBinding","keybindingLabel","getLabel","BaseMenuActionViewItem","ctx","menuStyle","cssClass","exec","runOnceToEnableMouseUp","rightButton","_action","check","schedule","updateClass","updateLabel","updateTooltip","updateEnabled","updateChecked","applyStyle","blur","pos","setSize","cleanLabel","regex","mnemonicInText","replace","trim","cleanMnemonic","lastIndex","escMatch","replaceDoubleEscapes","str","append","substr","innerText","split","class","isSelected","selectionForegroundColor","selectionBackgroundColor","selectionBorderColor","outlineOffset","submenuActions","submenuOptions","mysubmenu","submenuDisposables","mouseOver","expandDirection","Right","Below","showScheduler","cleanupExistingSubmenu","createSubmenu","hideScheduler","submenu","updateAriaExpanded","submenuIndicator","force","submenuContainer","calculateSubmenuMenuLayout","windowDimensions","ret","selectFirstItem","computedStyles","zIndex","entryBox","entryBoxUpdated","viewBox","innerWidth","onDidCancel","separatorColor","fontCharacter"],"sourceRoot":""}