monaco-editor-core 0.56.0-dev-20251121 → 0.56.0-dev-20251123

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/esm/nls.keys.json +1 -1
  2. package/esm/nls.messages.cs.js +2 -2
  3. package/esm/nls.messages.de.js +2 -2
  4. package/esm/nls.messages.es.js +2 -2
  5. package/esm/nls.messages.fr.js +2 -2
  6. package/esm/nls.messages.it.js +2 -2
  7. package/esm/nls.messages.ja.js +2 -2
  8. package/esm/nls.messages.js +1 -1
  9. package/esm/nls.messages.json +1 -1
  10. package/esm/nls.messages.ko.js +2 -2
  11. package/esm/nls.messages.pl.js +2 -2
  12. package/esm/nls.messages.pt-br.js +2 -2
  13. package/esm/nls.messages.ru.js +2 -2
  14. package/esm/nls.messages.tr.js +2 -2
  15. package/esm/nls.messages.zh-cn.js +2 -2
  16. package/esm/nls.messages.zh-tw.js +2 -2
  17. package/esm/nls.metadata.json +2 -0
  18. package/esm/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
  19. package/esm/vs/base/browser/ui/list/rowCache.js +1 -4
  20. package/esm/vs/base/browser/ui/list/rowCache.js.map +1 -1
  21. package/esm/vs/base/browser/ui/menu/menu.js +14 -12
  22. package/esm/vs/base/browser/ui/menu/menu.js.map +1 -1
  23. package/esm/vs/base/common/map.js +8 -5
  24. package/esm/vs/base/common/map.js.map +1 -1
  25. package/esm/vs/base/common/observableInternal/observables/derivedImpl.js +1 -4
  26. package/esm/vs/base/common/observableInternal/observables/derivedImpl.js.map +1 -1
  27. package/esm/vs/base/common/worker/webWorker.js +10 -7
  28. package/esm/vs/base/common/worker/webWorker.js.map +1 -1
  29. package/esm/vs/editor/browser/services/editorWorkerService.js +1 -1
  30. package/esm/vs/editor/browser/services/editorWorkerService.js.map +1 -1
  31. package/esm/vs/editor/contrib/find/browser/findWidgetSearchHistory.js.map +1 -1
  32. package/esm/vs/editor/contrib/find/browser/replaceWidgetHistory.js.map +1 -1
  33. package/esm/vs/editor/contrib/folding/browser/folding.js.map +1 -1
  34. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/inlineEditsLongDistanceHint.js +29 -16
  35. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/inlineEditsLongDistanceHint.js.map +1 -1
  36. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.js +42 -5
  37. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.js.map +1 -1
  38. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/view.css +10 -0
  39. package/esm/vs/editor/standalone/browser/services/standaloneWebWorkerService.js +1 -1
  40. package/esm/vs/editor/standalone/browser/services/standaloneWebWorkerService.js.map +1 -1
  41. package/esm/vs/platform/actionWidget/browser/actionWidget.css +7 -0
  42. package/esm/vs/platform/hover/browser/hoverService.js +17 -8
  43. package/esm/vs/platform/hover/browser/hoverService.js.map +1 -1
  44. package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +41 -8
  45. package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js.map +1 -1
  46. package/esm/vs/platform/quickinput/browser/helpQuickAccess.js +1 -1
  47. package/esm/vs/platform/quickinput/browser/quickInput.js +10 -10
  48. package/esm/vs/platform/quickinput/browser/quickInputActions.js +5 -5
  49. package/esm/vs/platform/quickinput/browser/quickInputController.js +6 -6
  50. package/esm/vs/platform/quickinput/browser/quickInputList.js +1 -1
  51. package/esm/vs/platform/quickinput/browser/quickInputUtils.js +1 -1
  52. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.js +1 -1
  53. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeController.js +8 -0
  54. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeController.js.map +1 -1
  55. package/esm/vs/platform/theme/common/colorUtils.js +2 -2
  56. package/esm/vs/platform/theme/common/colors/baseColors.js +17 -17
  57. package/esm/vs/platform/theme/common/colors/chartsColors.js +8 -8
  58. package/esm/vs/platform/theme/common/colors/editorColors.js +95 -95
  59. package/esm/vs/platform/theme/common/colors/inputColors.js +47 -47
  60. package/esm/vs/platform/theme/common/colors/listColors.js +36 -36
  61. package/esm/vs/platform/theme/common/colors/menuColors.js +7 -7
  62. package/esm/vs/platform/theme/common/colors/minimapColors.js +11 -11
  63. package/esm/vs/platform/theme/common/colors/miscColors.js +16 -16
  64. package/esm/vs/platform/theme/common/colors/quickpickColors.js +9 -9
  65. package/esm/vs/platform/theme/common/colors/searchColors.js +3 -3
  66. package/esm/vs/platform/theme/common/iconRegistry.js +6 -6
  67. package/esm/vs/platform/undoRedo/common/undoRedoService.js +20 -20
  68. package/esm/vs/platform/webWorker/browser/webWorkerDescriptor.js.map +1 -1
  69. package/esm/vs/platform/workspace/common/workspace.js +1 -1
  70. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/base/browser/ui/menu/menu.ts","vs/base/browser/ui/menu/menu.ts"],"names":[],"mappings":"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","file":"menu.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","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 *--------------------------------------------------------------------------------------------*/\n\nimport { isFirefox } from '../../browser.js';\nimport { EventType as TouchEventType, Gesture } from '../../touch.js';\nimport { $, addDisposableListener, append, clearNode, Dimension, EventHelper, EventLike, EventType, getActiveElement, getWindow, IDomNodePagePosition, isAncestor, isInShadowDOM } from '../../dom.js';\nimport { createStyleSheet } from '../../domStylesheets.js';\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\nimport { StandardMouseEvent } from '../../mouseEvent.js';\nimport { ActionBar, ActionsOrientation, IActionViewItemProvider } from '../actionbar/actionbar.js';\nimport { ActionViewItem, BaseActionViewItem, IActionViewItemOptions } from '../actionbar/actionViewItems.js';\nimport { AnchorAlignment, layout, LayoutAnchorPosition } from '../contextview/contextview.js';\nimport { DomScrollableElement } from '../scrollbar/scrollableElement.js';\nimport { EmptySubmenuAction, IAction, IActionRunner, 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 { Event } from '../../../common/event.js';\nimport { stripIcons } from '../../../common/iconLabels.js';\nimport { KeyCode } from '../../../common/keyCodes.js';\nimport { ResolvedKeybinding } from '../../../common/keybindings.js';\nimport { DisposableStore } from '../../../common/lifecycle.js';\nimport { isLinux, isMacintosh } from '../../../common/platform.js';\nimport { ScrollbarVisibility, ScrollEvent } from '../../../common/scrollable.js';\nimport * as strings from '../../../common/strings.js';\n\nexport const MENU_MNEMONIC_REGEX = /\\(&([^\\s&])\\)|(^|[^&])&([^\\s&])/;\nexport const MENU_ESCAPED_MNEMONIC_REGEX = /(&amp;)?(&amp;)([^\\s&])/g;\n\n\n\nexport enum HorizontalDirection {\n\tRight,\n\tLeft\n}\n\nexport enum VerticalDirection {\n\tAbove,\n\tBelow\n}\n\nexport interface IMenuDirection {\n\thorizontal: HorizontalDirection;\n\tvertical: VerticalDirection;\n}\n\nexport interface IMenuOptions {\n\tcontext?: unknown;\n\tactionViewItemProvider?: IActionViewItemProvider;\n\tactionRunner?: IActionRunner;\n\tgetKeyBinding?: (action: IAction) => ResolvedKeybinding | undefined;\n\tariaLabel?: string;\n\tenableMnemonics?: boolean;\n\tanchorAlignment?: AnchorAlignment;\n\texpandDirection?: IMenuDirection;\n\tuseEventAsContext?: boolean;\n\tsubmenuIds?: Set<string>;\n}\n\nexport interface IMenuStyles {\n\tshadowColor: string | undefined;\n\tborderColor: string | undefined;\n\tforegroundColor: string | undefined;\n\tbackgroundColor: string | undefined;\n\tselectionForegroundColor: string | undefined;\n\tselectionBackgroundColor: string | undefined;\n\tselectionBorderColor: string | undefined;\n\tseparatorColor: string | undefined;\n\tscrollbarShadow: string | undefined;\n\tscrollbarSliderBackground: string | undefined;\n\tscrollbarSliderHoverBackground: string | undefined;\n\tscrollbarSliderActiveBackground: string | undefined;\n}\n\ninterface ISubMenuData {\n\tparent: Menu;\n\tsubmenu?: Menu;\n}\n\nexport class Menu extends ActionBar {\n\tprivate mnemonics: Map<string, Array<BaseMenuActionViewItem>>;\n\tprivate scrollableElement: DomScrollableElement;\n\tprivate menuElement: HTMLElement;\n\tstatic globalStyleSheet: HTMLStyleElement;\n\tprotected styleSheet: HTMLStyleElement | undefined;\n\n\tconstructor(container: HTMLElement, actions: ReadonlyArray<IAction>, options: IMenuOptions, private readonly menuStyles: IMenuStyles) {\n\t\tcontainer.classList.add('monaco-menu-container');\n\t\tcontainer.setAttribute('role', 'presentation');\n\t\tconst menuElement = document.createElement('div');\n\t\tmenuElement.classList.add('monaco-menu');\n\t\tmenuElement.setAttribute('role', 'presentation');\n\n\t\tsuper(menuElement, {\n\t\t\torientation: ActionsOrientation.VERTICAL,\n\t\t\tactionViewItemProvider: action => this.doGetActionViewItem(action, options, parentData),\n\t\t\tcontext: options.context,\n\t\t\tactionRunner: options.actionRunner,\n\t\t\tariaLabel: options.ariaLabel,\n\t\t\tariaRole: 'menu',\n\t\t\tfocusOnlyEnabledItems: true,\n\t\t\ttriggerKeys: { keys: [KeyCode.Enter, ...(isMacintosh || isLinux ? [KeyCode.Space] : [])], keyDown: true }\n\t\t});\n\n\t\tthis.menuElement = menuElement;\n\n\t\tthis.actionsList.tabIndex = 0;\n\n\t\tthis.initializeOrUpdateStyleSheet(container, menuStyles);\n\n\t\tthis._register(Gesture.addTarget(menuElement));\n\n\t\tthis._register(addDisposableListener(menuElement, EventType.KEY_DOWN, (e) => {\n\t\t\tconst event = new StandardKeyboardEvent(e);\n\n\t\t\t// Stop tab navigation of menus\n\t\t\tif (event.equals(KeyCode.Tab)) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t}));\n\n\t\tif (options.enableMnemonics) {\n\t\t\tthis._register(addDisposableListener(menuElement, EventType.KEY_DOWN, (e) => {\n\t\t\t\tconst key = e.key.toLocaleLowerCase();\n\t\t\t\tif (this.mnemonics.has(key)) {\n\t\t\t\t\tEventHelper.stop(e, true);\n\t\t\t\t\tconst actions = this.mnemonics.get(key)!;\n\n\t\t\t\t\tif (actions.length === 1) {\n\t\t\t\t\t\tif (actions[0] instanceof SubmenuMenuActionViewItem && actions[0].container) {\n\t\t\t\t\t\t\tthis.focusItemByElement(actions[0].container);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tactions[0].onClick(e);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (actions.length > 1) {\n\t\t\t\t\t\tconst action = actions.shift();\n\t\t\t\t\t\tif (action && action.container) {\n\t\t\t\t\t\t\tthis.focusItemByElement(action.container);\n\t\t\t\t\t\t\tactions.push(action);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.mnemonics.set(key, actions);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\n\t\tif (isLinux) {\n\t\t\tthis._register(addDisposableListener(menuElement, EventType.KEY_DOWN, e => {\n\t\t\t\tconst event = new StandardKeyboardEvent(e);\n\n\t\t\t\tif (event.equals(KeyCode.Home) || event.equals(KeyCode.PageUp)) {\n\t\t\t\t\tthis.focusedItem = this.viewItems.length - 1;\n\t\t\t\t\tthis.focusNext();\n\t\t\t\t\tEventHelper.stop(e, true);\n\t\t\t\t} else if (event.equals(KeyCode.End) || event.equals(KeyCode.PageDown)) {\n\t\t\t\t\tthis.focusedItem = 0;\n\t\t\t\t\tthis.focusPrevious();\n\t\t\t\t\tEventHelper.stop(e, true);\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\n\t\tthis._register(addDisposableListener(this.domNode, EventType.MOUSE_OUT, e => {\n\t\t\tconst relatedTarget = e.relatedTarget as HTMLElement;\n\t\t\tif (!isAncestor(relatedTarget, this.domNode)) {\n\t\t\t\tthis.focusedItem = undefined;\n\t\t\t\tthis.updateFocus();\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(addDisposableListener(this.actionsList, EventType.MOUSE_OVER, e => {\n\t\t\tlet target = e.target as HTMLElement;\n\t\t\tif (!target || !isAncestor(target, this.actionsList) || target === this.actionsList) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twhile (target.parentElement !== this.actionsList && target.parentElement !== null) {\n\t\t\t\ttarget = target.parentElement;\n\t\t\t}\n\n\t\t\tif (target.classList.contains('action-item')) {\n\t\t\t\tconst lastFocusedItem = this.focusedItem;\n\t\t\t\tthis.setFocusedItem(target);\n\n\t\t\t\tif (lastFocusedItem !== this.focusedItem) {\n\t\t\t\t\tthis.updateFocus();\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\t// Support touch on actions list to focus items (needed for submenus)\n\t\tthis._register(Gesture.addTarget(this.actionsList));\n\t\tthis._register(addDisposableListener(this.actionsList, TouchEventType.Tap, e => {\n\t\t\tlet target = e.initialTarget as HTMLElement;\n\t\t\tif (!target || !isAncestor(target, this.actionsList) || target === this.actionsList) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twhile (target.parentElement !== this.actionsList && target.parentElement !== null) {\n\t\t\t\ttarget = target.parentElement;\n\t\t\t}\n\n\t\t\tif (target.classList.contains('action-item')) {\n\t\t\t\tconst lastFocusedItem = this.focusedItem;\n\t\t\t\tthis.setFocusedItem(target);\n\n\t\t\t\tif (lastFocusedItem !== this.focusedItem) {\n\t\t\t\t\tthis.updateFocus();\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\n\t\tconst parentData: ISubMenuData = {\n\t\t\tparent: this\n\t\t};\n\n\t\tthis.mnemonics = new Map<string, Array<BaseMenuActionViewItem>>();\n\n\t\t// Scroll Logic\n\t\tthis.scrollableElement = this._register(new DomScrollableElement(menuElement, {\n\t\t\talwaysConsumeMouseWheel: true,\n\t\t\thorizontal: ScrollbarVisibility.Hidden,\n\t\t\tvertical: ScrollbarVisibility.Visible,\n\t\t\tverticalScrollbarSize: 7,\n\t\t\thandleMouseWheel: true,\n\t\t\tuseShadows: true\n\t\t}));\n\n\t\tconst scrollElement = this.scrollableElement.getDomNode();\n\t\tscrollElement.style.position = '';\n\n\t\tthis.styleScrollElement(scrollElement, menuStyles);\n\n\t\t// Support scroll on menu drag\n\t\tthis._register(addDisposableListener(menuElement, TouchEventType.Change, e => {\n\t\t\tEventHelper.stop(e, true);\n\n\t\t\tconst scrollTop = this.scrollableElement.getScrollPosition().scrollTop;\n\t\t\tthis.scrollableElement.setScrollPosition({ scrollTop: scrollTop - e.translationY });\n\t\t}));\n\n\t\tthis._register(addDisposableListener(scrollElement, EventType.MOUSE_UP, e => {\n\t\t\t// Absorb clicks in menu dead space https://github.com/microsoft/vscode/issues/63575\n\t\t\t// We do this on the scroll element so the scroll bar doesn't dismiss the menu either\n\t\t\te.preventDefault();\n\t\t}));\n\n\t\tconst window = getWindow(container);\n\t\tmenuElement.style.maxHeight = `${Math.max(10, window.innerHeight - container.getBoundingClientRect().top - 35)}px`;\n\n\t\tactions = actions.filter((a, idx) => {\n\t\t\tif (options.submenuIds?.has(a.id)) {\n\t\t\t\tconsole.warn(`Found submenu cycle: ${a.id}`);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Filter out consecutive or useless separators\n\t\t\tif (a instanceof Separator) {\n\t\t\t\tif (idx === actions.length - 1 || idx === 0) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst prevAction = actions[idx - 1];\n\t\t\t\tif (prevAction instanceof Separator) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\n\t\tthis.push(actions, { icon: true, label: true, isMenu: true });\n\n\t\tcontainer.appendChild(this.scrollableElement.getDomNode());\n\t\tthis.scrollableElement.scanDomNode();\n\n\t\tthis.viewItems.filter(item => !(item instanceof MenuSeparatorActionViewItem)).forEach((item, index, array) => {\n\t\t\t(item as BaseMenuActionViewItem).updatePositionInSet(index + 1, array.length);\n\t\t});\n\t}\n\n\tprivate initializeOrUpdateStyleSheet(container: HTMLElement, style: IMenuStyles): void {\n\t\tif (!this.styleSheet) {\n\t\t\tif (isInShadowDOM(container)) {\n\t\t\t\tthis.styleSheet = createStyleSheet(container);\n\t\t\t} else {\n\t\t\t\tif (!Menu.globalStyleSheet) {\n\t\t\t\t\tMenu.globalStyleSheet = createStyleSheet();\n\t\t\t\t}\n\t\t\t\tthis.styleSheet = Menu.globalStyleSheet;\n\t\t\t}\n\t\t}\n\t\tthis.styleSheet.textContent = getMenuWidgetCSS(style, isInShadowDOM(container));\n\t}\n\n\tprivate styleScrollElement(scrollElement: HTMLElement, style: IMenuStyles): void {\n\n\t\tconst fgColor = style.foregroundColor ?? '';\n\t\tconst bgColor = style.backgroundColor ?? '';\n\t\tconst border = style.borderColor ? `1px solid ${style.borderColor}` : '';\n\t\tconst borderRadius = '5px';\n\t\tconst shadow = style.shadowColor ? `0 2px 8px ${style.shadowColor}` : '';\n\n\t\tscrollElement.style.outline = border;\n\t\tscrollElement.style.borderRadius = borderRadius;\n\t\tscrollElement.style.color = fgColor;\n\t\tscrollElement.style.backgroundColor = bgColor;\n\t\tscrollElement.style.boxShadow = shadow;\n\t}\n\n\toverride getContainer(): HTMLElement {\n\t\treturn this.scrollableElement.getDomNode();\n\t}\n\n\tget onScroll(): Event<ScrollEvent> {\n\t\treturn this.scrollableElement.onScroll;\n\t}\n\n\tprivate focusItemByElement(element: HTMLElement) {\n\t\tconst lastFocusedItem = this.focusedItem;\n\t\tthis.setFocusedItem(element);\n\n\t\tif (lastFocusedItem !== this.focusedItem) {\n\t\t\tthis.updateFocus();\n\t\t}\n\t}\n\n\tprivate setFocusedItem(element: HTMLElement): void {\n\t\tfor (let i = 0; i < this.actionsList.children.length; i++) {\n\t\t\tconst elem = this.actionsList.children[i];\n\t\t\tif (element === elem) {\n\t\t\t\tthis.focusedItem = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected override updateFocus(fromRight?: boolean): void {\n\t\tsuper.updateFocus(fromRight, true, true);\n\n\t\tif (typeof this.focusedItem !== 'undefined') {\n\t\t\t// Workaround for #80047 caused by an issue in chromium\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=414283\n\t\t\t// When that's fixed, just call this.scrollableElement.scanDomNode()\n\t\t\tthis.scrollableElement.setScrollPosition({\n\t\t\t\tscrollTop: Math.round(this.menuElement.scrollTop)\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate doGetActionViewItem(action: IAction, options: IMenuOptions, parentData: ISubMenuData): BaseActionViewItem {\n\t\tif (action instanceof Separator) {\n\t\t\treturn new MenuSeparatorActionViewItem(options.context, action, { icon: true }, this.menuStyles);\n\t\t} else if (action instanceof SubmenuAction) {\n\t\t\tconst menuActionViewItem = new SubmenuMenuActionViewItem(action, action.actions, parentData, { ...options, submenuIds: new Set([...(options.submenuIds || []), action.id]) }, this.menuStyles);\n\n\t\t\tif (options.enableMnemonics) {\n\t\t\t\tconst mnemonic = menuActionViewItem.getMnemonic();\n\t\t\t\tif (mnemonic && menuActionViewItem.isEnabled()) {\n\t\t\t\t\tlet actionViewItems: BaseMenuActionViewItem[] = [];\n\t\t\t\t\tif (this.mnemonics.has(mnemonic)) {\n\t\t\t\t\t\tactionViewItems = this.mnemonics.get(mnemonic)!;\n\t\t\t\t\t}\n\n\t\t\t\t\tactionViewItems.push(menuActionViewItem);\n\n\t\t\t\t\tthis.mnemonics.set(mnemonic, actionViewItems);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn menuActionViewItem;\n\t\t} else {\n\t\t\tconst keybindingLabel = options.getKeyBinding?.(action)?.getLabel();\n\t\t\tconst menuItemOptions: IMenuItemOptions = {\n\t\t\t\tenableMnemonics: options.enableMnemonics,\n\t\t\t\tuseEventAsContext: options.useEventAsContext,\n\t\t\t\tkeybinding: keybindingLabel,\n\t\t\t};\n\n\t\t\tconst menuActionViewItem = new BaseMenuActionViewItem(options.context, action, menuItemOptions, this.menuStyles);\n\n\t\t\tif (options.enableMnemonics) {\n\t\t\t\tconst mnemonic = menuActionViewItem.getMnemonic();\n\t\t\t\tif (mnemonic && menuActionViewItem.isEnabled()) {\n\t\t\t\t\tlet actionViewItems: BaseMenuActionViewItem[] = [];\n\t\t\t\t\tif (this.mnemonics.has(mnemonic)) {\n\t\t\t\t\t\tactionViewItems = this.mnemonics.get(mnemonic)!;\n\t\t\t\t\t}\n\n\t\t\t\t\tactionViewItems.push(menuActionViewItem);\n\n\t\t\t\t\tthis.mnemonics.set(mnemonic, actionViewItems);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn menuActionViewItem;\n\t\t}\n\t}\n}\n\ninterface IMenuItemOptions extends IActionViewItemOptions {\n\treadonly enableMnemonics?: boolean;\n}\n\nclass BaseMenuActionViewItem extends BaseActionViewItem {\n\n\tpublic container: HTMLElement | undefined;\n\n\tprotected override options: IMenuItemOptions;\n\tprotected item: HTMLElement | undefined;\n\n\tprivate runOnceToEnableMouseUp: RunOnceScheduler;\n\tprivate label: HTMLElement | undefined;\n\tprivate check: HTMLElement | undefined;\n\tprivate mnemonic: string | undefined;\n\tprivate cssClass: string;\n\n\tconstructor(ctx: unknown, action: IAction, options: IMenuItemOptions, protected readonly menuStyle: IMenuStyles) {\n\t\toptions = {\n\t\t\t...options,\n\t\t\tisMenu: true,\n\t\t\ticon: options.icon !== undefined ? options.icon : false,\n\t\t\tlabel: options.label !== undefined ? options.label : true,\n\t\t};\n\t\tsuper(action, action, options);\n\n\t\tthis.options = options;\n\t\tthis.cssClass = '';\n\n\t\t// Set mnemonic\n\t\tif (this.options.label && options.enableMnemonics) {\n\t\t\tconst label = this.action.label;\n\t\t\tif (label) {\n\t\t\t\tconst matches = MENU_MNEMONIC_REGEX.exec(label);\n\t\t\t\tif (matches) {\n\t\t\t\t\tthis.mnemonic = (!!matches[1] ? matches[1] : matches[3]).toLocaleLowerCase();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add mouse up listener later to avoid accidental clicks\n\t\tthis.runOnceToEnableMouseUp = new RunOnceScheduler(() => {\n\t\t\tif (!this.element) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._register(addDisposableListener(this.element, EventType.MOUSE_UP, e => {\n\t\t\t\t// removed default prevention as it conflicts\n\t\t\t\t// with BaseActionViewItem #101537\n\t\t\t\t// add back if issues arise and link new issue\n\t\t\t\tEventHelper.stop(e, true);\n\n\t\t\t\t// See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Interact_with_the_clipboard\n\t\t\t\t// > Writing to the clipboard\n\t\t\t\t// > You can use the \"cut\" and \"copy\" commands without any special\n\t\t\t\t// permission if you are using them in a short-lived event handler\n\t\t\t\t// for a user action (for example, a click handler).\n\n\t\t\t\t// => to get the Copy and Paste context menu actions working on Firefox,\n\t\t\t\t// there should be no timeout here\n\t\t\t\tif (isFirefox) {\n\t\t\t\t\tconst mouseEvent = new StandardMouseEvent(getWindow(this.element), e);\n\n\t\t\t\t\t// Allowing right click to trigger the event causes the issue described below,\n\t\t\t\t\t// but since the solution below does not work in FF, we must disable right click\n\t\t\t\t\tif (mouseEvent.rightButton) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.onClick(e);\n\t\t\t\t}\n\n\t\t\t\t// In all other cases, set timeout to allow context menu cancellation to trigger\n\t\t\t\t// otherwise the action will destroy the menu and a second context menu\n\t\t\t\t// will still trigger for right click.\n\t\t\t\telse {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.onClick(e);\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\tthis._register(addDisposableListener(this.element, EventType.CONTEXT_MENU, e => {\n\t\t\t\tEventHelper.stop(e, true);\n\t\t\t}));\n\t\t}, 100);\n\n\t\tthis._register(this.runOnceToEnableMouseUp);\n\t}\n\n\toverride render(container: HTMLElement): void {\n\t\tsuper.render(container);\n\n\t\tif (!this.element) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.container = container;\n\n\t\tthis.item = append(this.element, $('a.action-menu-item'));\n\t\tif (this._action.id === Separator.ID) {\n\t\t\t// A separator is a presentation item\n\t\t\tthis.item.setAttribute('role', 'presentation');\n\t\t} else {\n\t\t\tthis.item.setAttribute('role', 'menuitem');\n\t\t\tif (this.mnemonic) {\n\t\t\t\tthis.item.setAttribute('aria-keyshortcuts', `${this.mnemonic}`);\n\t\t\t}\n\t\t}\n\n\t\tthis.check = append(this.item, $('span.menu-item-check' + ThemeIcon.asCSSSelector(Codicon.menuSelection)));\n\t\tthis.check.setAttribute('role', 'none');\n\n\t\tthis.label = append(this.item, $('span.action-label'));\n\n\t\tif (this.options.label && this.options.keybinding) {\n\t\t\tappend(this.item, $('span.keybinding')).textContent = this.options.keybinding;\n\t\t}\n\n\t\t// Adds mouse up listener to actually run the action\n\t\tthis.runOnceToEnableMouseUp.schedule();\n\n\t\tthis.updateClass();\n\t\tthis.updateLabel();\n\t\tthis.updateTooltip();\n\t\tthis.updateEnabled();\n\t\tthis.updateChecked();\n\n\t\tthis.applyStyle();\n\t}\n\n\toverride blur(): void {\n\t\tsuper.blur();\n\t\tthis.applyStyle();\n\t}\n\n\toverride focus(): void {\n\t\tsuper.focus();\n\n\t\tthis.item?.focus();\n\n\t\tthis.applyStyle();\n\t}\n\n\tupdatePositionInSet(pos: number, setSize: number): void {\n\t\tif (this.item) {\n\t\t\tthis.item.setAttribute('aria-posinset', `${pos}`);\n\t\t\tthis.item.setAttribute('aria-setsize', `${setSize}`);\n\t\t}\n\t}\n\n\tprotected override updateLabel(): void {\n\t\tif (!this.label) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.label) {\n\t\t\tclearNode(this.label);\n\n\t\t\tlet label = stripIcons(this.action.label);\n\t\t\tif (label) {\n\t\t\t\tconst cleanLabel = cleanMnemonic(label);\n\t\t\t\tif (!this.options.enableMnemonics) {\n\t\t\t\t\tlabel = cleanLabel;\n\t\t\t\t}\n\n\t\t\t\tthis.label.setAttribute('aria-label', cleanLabel.replace(/&&/g, '&'));\n\n\t\t\t\tconst matches = MENU_MNEMONIC_REGEX.exec(label);\n\n\t\t\t\tif (matches) {\n\t\t\t\t\tlabel = strings.escape(label);\n\n\t\t\t\t\t// This is global, reset it\n\t\t\t\t\tMENU_ESCAPED_MNEMONIC_REGEX.lastIndex = 0;\n\t\t\t\t\tlet escMatch = MENU_ESCAPED_MNEMONIC_REGEX.exec(label);\n\n\t\t\t\t\t// We can't use negative lookbehind so if we match our negative and skip\n\t\t\t\t\twhile (escMatch && escMatch[1]) {\n\t\t\t\t\t\tescMatch = MENU_ESCAPED_MNEMONIC_REGEX.exec(label);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst replaceDoubleEscapes = (str: string) => str.replace(/&amp;&amp;/g, '&amp;');\n\n\t\t\t\t\tif (escMatch) {\n\t\t\t\t\t\tthis.label.append(\n\t\t\t\t\t\t\tstrings.ltrim(replaceDoubleEscapes(label.substr(0, escMatch.index)), ' '),\n\t\t\t\t\t\t\t$('u', { 'aria-hidden': 'true' },\n\t\t\t\t\t\t\t\tescMatch[3]),\n\t\t\t\t\t\t\tstrings.rtrim(replaceDoubleEscapes(label.substr(escMatch.index + escMatch[0].length)), ' '));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.label.textContent = replaceDoubleEscapes(label).trim();\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.item?.setAttribute('aria-keyshortcuts', (!!matches[1] ? matches[1] : matches[3]).toLocaleLowerCase());\n\t\t\t\t} else {\n\t\t\t\t\tthis.label.textContent = label.replace(/&&/g, '&').trim();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected override updateTooltip(): void {\n\t\t// menus should function like native menus and they do not have tooltips\n\t}\n\n\tprotected override updateClass(): void {\n\t\tif (this.cssClass && this.item) {\n\t\t\tthis.item.classList.remove(...this.cssClass.split(' '));\n\t\t}\n\t\tif (this.options.icon && this.label) {\n\t\t\tthis.cssClass = this.action.class || '';\n\t\t\tthis.label.classList.add('icon');\n\t\t\tif (this.cssClass) {\n\t\t\t\tthis.label.classList.add(...this.cssClass.split(' '));\n\t\t\t}\n\t\t\tthis.updateEnabled();\n\t\t} else if (this.label) {\n\t\t\tthis.label.classList.remove('icon');\n\t\t}\n\t}\n\n\tprotected override updateEnabled(): void {\n\t\tif (this.action.enabled) {\n\t\t\tif (this.element) {\n\t\t\t\tthis.element.classList.remove('disabled');\n\t\t\t\tthis.element.removeAttribute('aria-disabled');\n\t\t\t}\n\n\t\t\tif (this.item) {\n\t\t\t\tthis.item.classList.remove('disabled');\n\t\t\t\tthis.item.removeAttribute('aria-disabled');\n\t\t\t\tthis.item.tabIndex = 0;\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.element) {\n\t\t\t\tthis.element.classList.add('disabled');\n\t\t\t\tthis.element.setAttribute('aria-disabled', 'true');\n\t\t\t}\n\n\t\t\tif (this.item) {\n\t\t\t\tthis.item.classList.add('disabled');\n\t\t\t\tthis.item.setAttribute('aria-disabled', 'true');\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected override updateChecked(): void {\n\t\tif (!this.item) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst checked = this.action.checked;\n\t\tthis.item.classList.toggle('checked', !!checked);\n\t\tif (checked !== undefined) {\n\t\t\tthis.item.setAttribute('role', 'menuitemcheckbox');\n\t\t\tthis.item.setAttribute('aria-checked', checked ? 'true' : 'false');\n\t\t} else {\n\t\t\tthis.item.setAttribute('role', 'menuitem');\n\t\t\tthis.item.setAttribute('aria-checked', '');\n\t\t}\n\t}\n\n\tgetMnemonic(): string | undefined {\n\t\treturn this.mnemonic;\n\t}\n\n\tprotected applyStyle(): void {\n\t\tconst isSelected = this.element && this.element.classList.contains('focused');\n\t\tconst fgColor = isSelected && this.menuStyle.selectionForegroundColor ? this.menuStyle.selectionForegroundColor : this.menuStyle.foregroundColor;\n\t\tconst bgColor = isSelected && this.menuStyle.selectionBackgroundColor ? this.menuStyle.selectionBackgroundColor : undefined;\n\t\tconst outline = isSelected && this.menuStyle.selectionBorderColor ? `1px solid ${this.menuStyle.selectionBorderColor}` : '';\n\t\tconst outlineOffset = isSelected && this.menuStyle.selectionBorderColor ? `-1px` : '';\n\n\t\tif (this.item) {\n\t\t\tthis.item.style.color = fgColor ?? '';\n\t\t\tthis.item.style.backgroundColor = bgColor ?? '';\n\t\t\tthis.item.style.outline = outline;\n\t\t\tthis.item.style.outlineOffset = outlineOffset;\n\t\t}\n\n\t\tif (this.check) {\n\t\t\tthis.check.style.color = fgColor ?? '';\n\t\t}\n\t}\n}\n\nclass SubmenuMenuActionViewItem extends BaseMenuActionViewItem {\n\tprivate mysubmenu: Menu | null = null;\n\tprivate submenuContainer: HTMLElement | undefined;\n\tprivate submenuIndicator: HTMLElement | undefined;\n\tprivate readonly submenuDisposables = this._register(new DisposableStore());\n\tprivate mouseOver: boolean = false;\n\tprivate showScheduler: RunOnceScheduler;\n\tprivate hideScheduler: RunOnceScheduler;\n\tprivate expandDirection: IMenuDirection;\n\n\tconstructor(\n\t\taction: IAction,\n\t\tprivate submenuActions: ReadonlyArray<IAction>,\n\t\tprivate parentData: ISubMenuData,\n\t\tprivate submenuOptions: IMenuOptions,\n\t\tmenuStyles: IMenuStyles\n\t) {\n\t\tsuper(action, action, submenuOptions, menuStyles);\n\n\t\tthis.expandDirection = submenuOptions && submenuOptions.expandDirection !== undefined ? submenuOptions.expandDirection : { horizontal: HorizontalDirection.Right, vertical: VerticalDirection.Below };\n\n\t\tthis.showScheduler = new RunOnceScheduler(() => {\n\t\t\tif (this.mouseOver) {\n\t\t\t\tthis.cleanupExistingSubmenu(false);\n\t\t\t\tthis.createSubmenu(false);\n\t\t\t}\n\t\t}, 250);\n\n\t\tthis.hideScheduler = new RunOnceScheduler(() => {\n\t\t\tif (this.element && (!isAncestor(getActiveElement(), this.element) && this.parentData.submenu === this.mysubmenu)) {\n\t\t\t\tthis.parentData.parent.focus(false);\n\t\t\t\tthis.cleanupExistingSubmenu(true);\n\t\t\t}\n\t\t}, 750);\n\t}\n\n\toverride render(container: HTMLElement): void {\n\t\tsuper.render(container);\n\n\t\tif (!this.element) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.item) {\n\t\t\tthis.item.classList.add('monaco-submenu-item');\n\t\t\tthis.item.tabIndex = 0;\n\t\t\tthis.item.setAttribute('aria-haspopup', 'true');\n\t\t\tthis.updateAriaExpanded('false');\n\t\t\tthis.submenuIndicator = append(this.item, $('span.submenu-indicator' + ThemeIcon.asCSSSelector(Codicon.menuSubmenu)));\n\t\t\tthis.submenuIndicator.setAttribute('aria-hidden', 'true');\n\t\t}\n\n\t\tthis._register(addDisposableListener(this.element, EventType.KEY_UP, e => {\n\t\t\tconst event = new StandardKeyboardEvent(e);\n\t\t\tif (event.equals(KeyCode.RightArrow) || event.equals(KeyCode.Enter)) {\n\t\t\t\tEventHelper.stop(e, true);\n\n\t\t\t\tthis.createSubmenu(true);\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(addDisposableListener(this.element, EventType.KEY_DOWN, e => {\n\t\t\tconst event = new StandardKeyboardEvent(e);\n\n\t\t\tif (getActiveElement() === this.item) {\n\t\t\t\tif (event.equals(KeyCode.RightArrow) || event.equals(KeyCode.Enter)) {\n\t\t\t\t\tEventHelper.stop(e, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(addDisposableListener(this.element, EventType.MOUSE_OVER, e => {\n\t\t\tif (!this.mouseOver) {\n\t\t\t\tthis.mouseOver = true;\n\n\t\t\t\tthis.showScheduler.schedule();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(addDisposableListener(this.element, EventType.MOUSE_LEAVE, e => {\n\t\t\tthis.mouseOver = false;\n\t\t}));\n\n\t\tthis._register(addDisposableListener(this.element, EventType.FOCUS_OUT, e => {\n\t\t\tif (this.element && !isAncestor(getActiveElement(), this.element)) {\n\t\t\t\tthis.hideScheduler.schedule();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this.parentData.parent.onScroll(() => {\n\t\t\tif (this.parentData.submenu === this.mysubmenu) {\n\t\t\t\tthis.parentData.parent.focus(false);\n\t\t\t\tthis.cleanupExistingSubmenu(true);\n\t\t\t}\n\t\t}));\n\t}\n\n\tprotected override updateEnabled(): void {\n\t\t// override on submenu entry\n\t\t// native menus do not observe enablement on sumbenus\n\t\t// we mimic that behavior\n\t}\n\n\toverride onClick(e: EventLike): void {\n\t\t// stop clicking from trying to run an action\n\t\tEventHelper.stop(e, true);\n\n\t\tthis.cleanupExistingSubmenu(false);\n\t\tthis.createSubmenu(true);\n\t}\n\n\tprivate cleanupExistingSubmenu(force: boolean): void {\n\t\tif (this.parentData.submenu && (force || (this.parentData.submenu !== this.mysubmenu))) {\n\n\t\t\t// disposal may throw if the submenu has already been removed\n\t\t\ttry {\n\t\t\t\tthis.parentData.submenu.dispose();\n\t\t\t} catch { }\n\n\t\t\tthis.parentData.submenu = undefined;\n\t\t\tthis.updateAriaExpanded('false');\n\t\t\tif (this.submenuContainer) {\n\t\t\t\tthis.submenuDisposables.clear();\n\t\t\t\tthis.submenuContainer = undefined;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate calculateSubmenuMenuLayout(windowDimensions: Dimension, submenu: Dimension, entry: IDomNodePagePosition, expandDirection: IMenuDirection): { top: number; left: number } {\n\t\tconst ret = { top: 0, left: 0 };\n\n\t\t// Start with horizontal\n\t\tret.left = layout(windowDimensions.width, submenu.width, { position: expandDirection.horizontal === HorizontalDirection.Right ? LayoutAnchorPosition.Before : LayoutAnchorPosition.After, offset: entry.left, size: entry.width });\n\n\t\t// We don't have enough room to layout the menu fully, so we are overlapping the menu\n\t\tif (ret.left >= entry.left && ret.left < entry.left + entry.width) {\n\t\t\tif (entry.left + 10 + submenu.width <= windowDimensions.width) {\n\t\t\t\tret.left = entry.left + 10;\n\t\t\t}\n\n\t\t\tentry.top += 10;\n\t\t\tentry.height = 0;\n\t\t}\n\n\t\t// Now that we have a horizontal position, try layout vertically\n\t\tret.top = layout(windowDimensions.height, submenu.height, { position: LayoutAnchorPosition.Before, offset: entry.top, size: 0 });\n\n\t\t// We didn't have enough room below, but we did above, so we shift down to align the menu\n\t\tif (ret.top + submenu.height === entry.top && ret.top + entry.height + submenu.height <= windowDimensions.height) {\n\t\t\tret.top += entry.height;\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\tprivate createSubmenu(selectFirstItem = true): void {\n\t\tif (!this.element) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.parentData.submenu) {\n\t\t\tthis.updateAriaExpanded('true');\n\t\t\tthis.submenuContainer = append(this.element, $('div.monaco-submenu'));\n\t\t\tthis.submenuContainer.classList.add('menubar-menu-items-holder', 'context-view');\n\n\t\t\t// Set the top value of the menu container before construction\n\t\t\t// This allows the menu constructor to calculate the proper max height\n\t\t\tconst computedStyles = getWindow(this.parentData.parent.domNode).getComputedStyle(this.parentData.parent.domNode);\n\t\t\tconst paddingTop = parseFloat(computedStyles.paddingTop || '0') || 0;\n\t\t\tthis.submenuContainer.style.position = 'fixed';\n\t\t\tthis.submenuContainer.style.top = '0';\n\t\t\tthis.submenuContainer.style.left = '0';\n\t\t\t// Fix to #263546, for submenu of treeView view/item/context z-index issue - ensure submenu appears above other elements\n\t\t\tthis.submenuContainer.style.zIndex = '1';\n\n\t\t\tthis.parentData.submenu = new Menu(this.submenuContainer, this.submenuActions.length ? this.submenuActions : [new EmptySubmenuAction()], this.submenuOptions, this.menuStyle);\n\n\t\t\t// layout submenu\n\t\t\tconst entryBox = this.element.getBoundingClientRect();\n\t\t\tconst entryBoxUpdated = {\n\t\t\t\ttop: entryBox.top - paddingTop,\n\t\t\t\tleft: entryBox.left,\n\t\t\t\theight: entryBox.height + 2 * paddingTop,\n\t\t\t\twidth: entryBox.width\n\t\t\t};\n\n\t\t\tconst viewBox = this.submenuContainer.getBoundingClientRect();\n\n\t\t\tconst window = getWindow(this.element);\n\t\t\tconst { top, left } = this.calculateSubmenuMenuLayout(new Dimension(window.innerWidth, window.innerHeight), Dimension.lift(viewBox), entryBoxUpdated, this.expandDirection);\n\t\t\t// subtract offsets caused by transform parent\n\t\t\tthis.submenuContainer.style.left = `${left - viewBox.left}px`;\n\t\t\tthis.submenuContainer.style.top = `${top - viewBox.top}px`;\n\n\t\t\tthis.submenuDisposables.add(addDisposableListener(this.submenuContainer, EventType.KEY_UP, e => {\n\t\t\t\tconst event = new StandardKeyboardEvent(e);\n\t\t\t\tif (event.equals(KeyCode.LeftArrow)) {\n\t\t\t\t\tEventHelper.stop(e, true);\n\n\t\t\t\t\tthis.parentData.parent.focus();\n\n\t\t\t\t\tthis.cleanupExistingSubmenu(true);\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\tthis.submenuDisposables.add(addDisposableListener(this.submenuContainer, EventType.KEY_DOWN, e => {\n\t\t\t\tconst event = new StandardKeyboardEvent(e);\n\t\t\t\tif (event.equals(KeyCode.LeftArrow)) {\n\t\t\t\t\tEventHelper.stop(e, true);\n\t\t\t\t}\n\t\t\t}));\n\n\n\t\t\tthis.submenuDisposables.add(this.parentData.submenu.onDidCancel(() => {\n\t\t\t\tthis.parentData.parent.focus();\n\n\t\t\t\tthis.cleanupExistingSubmenu(true);\n\t\t\t}));\n\n\t\t\tthis.parentData.submenu.focus(selectFirstItem);\n\n\t\t\tthis.mysubmenu = this.parentData.submenu;\n\t\t} else {\n\t\t\tthis.parentData.submenu.focus(false);\n\t\t}\n\t}\n\n\tprivate updateAriaExpanded(value: string): void {\n\t\tif (this.item) {\n\t\t\tthis.item?.setAttribute('aria-expanded', value);\n\t\t}\n\t}\n\n\tprotected override applyStyle(): void {\n\t\tsuper.applyStyle();\n\n\t\tconst isSelected = this.element && this.element.classList.contains('focused');\n\t\tconst fgColor = isSelected && this.menuStyle.selectionForegroundColor ? this.menuStyle.selectionForegroundColor : this.menuStyle.foregroundColor;\n\n\t\tif (this.submenuIndicator) {\n\t\t\tthis.submenuIndicator.style.color = fgColor ?? '';\n\t\t}\n\t}\n\n\toverride dispose(): void {\n\t\tsuper.dispose();\n\n\t\tthis.hideScheduler.dispose();\n\n\t\tif (this.mysubmenu) {\n\t\t\tthis.mysubmenu.dispose();\n\t\t\tthis.mysubmenu = null;\n\t\t}\n\n\t\tif (this.submenuContainer) {\n\t\t\tthis.submenuContainer = undefined;\n\t\t}\n\t}\n}\n\nclass MenuSeparatorActionViewItem extends ActionViewItem {\n\tconstructor(context: unknown, action: IAction, options: IActionViewItemOptions, private readonly menuStyles: IMenuStyles) {\n\t\tsuper(context, action, options);\n\t}\n\n\toverride render(container: HTMLElement): void {\n\t\tsuper.render(container);\n\t\tif (this.label) {\n\t\t\tthis.label.style.borderBottomColor = this.menuStyles.separatorColor ? `${this.menuStyles.separatorColor}` : '';\n\t\t}\n\t}\n}\n\nexport function cleanMnemonic(label: string): string {\n\tconst regex = MENU_MNEMONIC_REGEX;\n\n\tconst matches = regex.exec(label);\n\tif (!matches) {\n\t\treturn label;\n\t}\n\n\tconst mnemonicInText = !matches[1];\n\n\treturn label.replace(regex, mnemonicInText ? '$2$3' : '').trim();\n}\n\nexport function formatRule(c: ThemeIcon) {\n\tconst fontCharacter = getCodiconFontCharacters()[c.id];\n\treturn `.codicon-${c.id}:before { content: '\\\\${fontCharacter.toString(16)}'; }`;\n}\n\nexport function getMenuWidgetCSS(style: IMenuStyles, isForShadowDom: boolean): string {\n\tlet 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\topacity: 0.7;\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\n\tif (isForShadowDom) {\n\t\t// Only define scrollbar styles when used inside shadow dom,\n\t\t// otherwise leave their styling to the global workbench styling.\n\t\tresult += `\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\t/* Fix for https://github.com/microsoft/vscode/issues/103170 */\n\t\t\t.monaco-menu .action-item .monaco-submenu {\n\t\t\t\tz-index: 1;\n\t\t\t}\n\t\t`;\n\n\t\t// Scrollbars\n\t\tconst scrollbarShadowColor = style.scrollbarShadow;\n\t\tif (scrollbarShadowColor) {\n\t\t\tresult += `\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\t\t}\n\n\t\tconst scrollbarSliderBackgroundColor = style.scrollbarSliderBackground;\n\t\tif (scrollbarSliderBackgroundColor) {\n\t\t\tresult += `\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\t\t}\n\n\t\tconst scrollbarSliderHoverBackgroundColor = style.scrollbarSliderHoverBackground;\n\t\tif (scrollbarSliderHoverBackgroundColor) {\n\t\t\tresult += `\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\t\t}\n\n\t\tconst scrollbarSliderActiveBackgroundColor = style.scrollbarSliderActiveBackground;\n\t\tif (scrollbarSliderActiveBackgroundColor) {\n\t\t\tresult += `\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\t\t}\n\t}\n\n\treturn result;\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 *--------------------------------------------------------------------------------------------*/\n\nimport { isFirefox } from '../../browser.js';\nimport { EventType as TouchEventType, Gesture } from '../../touch.js';\nimport { $, addDisposableListener, append, clearNode, Dimension, EventHelper, EventLike, EventType, getActiveElement, getWindow, IDomNodePagePosition, isAncestor, isInShadowDOM } from '../../dom.js';\nimport { createStyleSheet } from '../../domStylesheets.js';\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\nimport { StandardMouseEvent } from '../../mouseEvent.js';\nimport { ActionBar, ActionsOrientation, IActionViewItemProvider } from '../actionbar/actionbar.js';\nimport { ActionViewItem, BaseActionViewItem, IActionViewItemOptions } from '../actionbar/actionViewItems.js';\nimport { AnchorAlignment, layout, LayoutAnchorPosition } from '../contextview/contextview.js';\nimport { DomScrollableElement } from '../scrollbar/scrollableElement.js';\nimport { EmptySubmenuAction, IAction, IActionRunner, 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 { Event } from '../../../common/event.js';\nimport { stripIcons } from '../../../common/iconLabels.js';\nimport { KeyCode } from '../../../common/keyCodes.js';\nimport { ResolvedKeybinding } from '../../../common/keybindings.js';\nimport { DisposableStore } from '../../../common/lifecycle.js';\nimport { isLinux, isMacintosh } from '../../../common/platform.js';\nimport { ScrollbarVisibility, ScrollEvent } from '../../../common/scrollable.js';\nimport * as strings from '../../../common/strings.js';\n\nexport const MENU_MNEMONIC_REGEX = /\\(&([^\\s&])\\)|(^|[^&])&([^\\s&])/;\nexport const MENU_ESCAPED_MNEMONIC_REGEX = /(&amp;)?(&amp;)([^\\s&])/g;\n\n\n\nexport enum HorizontalDirection {\n\tRight,\n\tLeft\n}\n\nexport enum VerticalDirection {\n\tAbove,\n\tBelow\n}\n\nexport interface IMenuDirection {\n\thorizontal: HorizontalDirection;\n\tvertical: VerticalDirection;\n}\n\nexport interface IMenuOptions {\n\tcontext?: unknown;\n\tactionViewItemProvider?: IActionViewItemProvider;\n\tactionRunner?: IActionRunner;\n\tgetKeyBinding?: (action: IAction) => ResolvedKeybinding | undefined;\n\tariaLabel?: string;\n\tenableMnemonics?: boolean;\n\tanchorAlignment?: AnchorAlignment;\n\texpandDirection?: IMenuDirection;\n\tuseEventAsContext?: boolean;\n\tsubmenuIds?: Set<string>;\n}\n\nexport interface IMenuStyles {\n\tshadowColor: string | undefined;\n\tborderColor: string | undefined;\n\tforegroundColor: string | undefined;\n\tbackgroundColor: string | undefined;\n\tselectionForegroundColor: string | undefined;\n\tselectionBackgroundColor: string | undefined;\n\tselectionBorderColor: string | undefined;\n\tseparatorColor: string | undefined;\n\tscrollbarShadow: string | undefined;\n\tscrollbarSliderBackground: string | undefined;\n\tscrollbarSliderHoverBackground: string | undefined;\n\tscrollbarSliderActiveBackground: string | undefined;\n}\n\ninterface ISubMenuData {\n\tparent: Menu;\n\tsubmenu?: Menu;\n}\n\nexport class Menu extends ActionBar {\n\tprivate mnemonics: Map<string, Array<BaseMenuActionViewItem>>;\n\tprivate scrollableElement: DomScrollableElement;\n\tprivate menuElement: HTMLElement;\n\tstatic globalStyleSheet: HTMLStyleElement;\n\tprotected styleSheet: HTMLStyleElement | undefined;\n\n\tconstructor(container: HTMLElement, actions: ReadonlyArray<IAction>, options: IMenuOptions, private readonly menuStyles: IMenuStyles) {\n\t\tcontainer.classList.add('monaco-menu-container');\n\t\tcontainer.setAttribute('role', 'presentation');\n\t\tconst menuElement = document.createElement('div');\n\t\tmenuElement.classList.add('monaco-menu');\n\t\tmenuElement.setAttribute('role', 'presentation');\n\n\t\tsuper(menuElement, {\n\t\t\torientation: ActionsOrientation.VERTICAL,\n\t\t\tactionViewItemProvider: action => this.doGetActionViewItem(action, options, parentData),\n\t\t\tcontext: options.context,\n\t\t\tactionRunner: options.actionRunner,\n\t\t\tariaLabel: options.ariaLabel,\n\t\t\tariaRole: 'menu',\n\t\t\tfocusOnlyEnabledItems: true,\n\t\t\ttriggerKeys: { keys: [KeyCode.Enter, ...(isMacintosh || isLinux ? [KeyCode.Space] : [])], keyDown: true }\n\t\t});\n\n\t\tthis.menuElement = menuElement;\n\n\t\tthis.actionsList.tabIndex = 0;\n\n\t\tthis.initializeOrUpdateStyleSheet(container, menuStyles);\n\n\t\tthis._register(Gesture.addTarget(menuElement));\n\n\t\tthis._register(addDisposableListener(menuElement, EventType.KEY_DOWN, (e) => {\n\t\t\tconst event = new StandardKeyboardEvent(e);\n\n\t\t\t// Stop tab navigation of menus\n\t\t\tif (event.equals(KeyCode.Tab)) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t}));\n\n\t\tif (options.enableMnemonics) {\n\t\t\tthis._register(addDisposableListener(menuElement, EventType.KEY_DOWN, (e) => {\n\t\t\t\tconst key = e.key.toLocaleLowerCase();\n\t\t\t\tif (this.mnemonics.has(key)) {\n\t\t\t\t\tEventHelper.stop(e, true);\n\t\t\t\t\tconst actions = this.mnemonics.get(key)!;\n\n\t\t\t\t\tif (actions.length === 1) {\n\t\t\t\t\t\tif (actions[0] instanceof SubmenuMenuActionViewItem && actions[0].container) {\n\t\t\t\t\t\t\tthis.focusItemByElement(actions[0].container);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tactions[0].onClick(e);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (actions.length > 1) {\n\t\t\t\t\t\tconst action = actions.shift();\n\t\t\t\t\t\tif (action && action.container) {\n\t\t\t\t\t\t\tthis.focusItemByElement(action.container);\n\t\t\t\t\t\t\tactions.push(action);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.mnemonics.set(key, actions);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\n\t\tif (isLinux) {\n\t\t\tthis._register(addDisposableListener(menuElement, EventType.KEY_DOWN, e => {\n\t\t\t\tconst event = new StandardKeyboardEvent(e);\n\n\t\t\t\tif (event.equals(KeyCode.Home) || event.equals(KeyCode.PageUp)) {\n\t\t\t\t\tthis.focusedItem = this.viewItems.length - 1;\n\t\t\t\t\tthis.focusNext();\n\t\t\t\t\tEventHelper.stop(e, true);\n\t\t\t\t} else if (event.equals(KeyCode.End) || event.equals(KeyCode.PageDown)) {\n\t\t\t\t\tthis.focusedItem = 0;\n\t\t\t\t\tthis.focusPrevious();\n\t\t\t\t\tEventHelper.stop(e, true);\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\n\t\tthis._register(addDisposableListener(this.domNode, EventType.MOUSE_OUT, e => {\n\t\t\tconst relatedTarget = e.relatedTarget as HTMLElement;\n\t\t\tif (!isAncestor(relatedTarget, this.domNode)) {\n\t\t\t\tthis.focusedItem = undefined;\n\t\t\t\tthis.updateFocus();\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(addDisposableListener(this.actionsList, EventType.MOUSE_OVER, e => {\n\t\t\tlet target = e.target as HTMLElement;\n\t\t\tif (!target || !isAncestor(target, this.actionsList) || target === this.actionsList) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twhile (target.parentElement !== this.actionsList && target.parentElement !== null) {\n\t\t\t\ttarget = target.parentElement;\n\t\t\t}\n\n\t\t\tif (target.classList.contains('action-item')) {\n\t\t\t\tconst lastFocusedItem = this.focusedItem;\n\t\t\t\tthis.setFocusedItem(target);\n\n\t\t\t\tif (lastFocusedItem !== this.focusedItem) {\n\t\t\t\t\tthis.updateFocus();\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\t// Support touch on actions list to focus items (needed for submenus)\n\t\tthis._register(Gesture.addTarget(this.actionsList));\n\t\tthis._register(addDisposableListener(this.actionsList, TouchEventType.Tap, e => {\n\t\t\tlet target = e.initialTarget as HTMLElement;\n\t\t\tif (!target || !isAncestor(target, this.actionsList) || target === this.actionsList) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twhile (target.parentElement !== this.actionsList && target.parentElement !== null) {\n\t\t\t\ttarget = target.parentElement;\n\t\t\t}\n\n\t\t\tif (target.classList.contains('action-item')) {\n\t\t\t\tconst lastFocusedItem = this.focusedItem;\n\t\t\t\tthis.setFocusedItem(target);\n\n\t\t\t\tif (lastFocusedItem !== this.focusedItem) {\n\t\t\t\t\tthis.updateFocus();\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\n\t\tconst parentData: ISubMenuData = {\n\t\t\tparent: this\n\t\t};\n\n\t\tthis.mnemonics = new Map<string, Array<BaseMenuActionViewItem>>();\n\n\t\t// Scroll Logic\n\t\tthis.scrollableElement = this._register(new DomScrollableElement(menuElement, {\n\t\t\talwaysConsumeMouseWheel: true,\n\t\t\thorizontal: ScrollbarVisibility.Hidden,\n\t\t\tvertical: ScrollbarVisibility.Visible,\n\t\t\tverticalScrollbarSize: 7,\n\t\t\thandleMouseWheel: true,\n\t\t\tuseShadows: true\n\t\t}));\n\n\t\tconst scrollElement = this.scrollableElement.getDomNode();\n\t\tscrollElement.style.position = '';\n\n\t\tthis.styleScrollElement(scrollElement, menuStyles);\n\n\t\t// Support scroll on menu drag\n\t\tthis._register(addDisposableListener(menuElement, TouchEventType.Change, e => {\n\t\t\tEventHelper.stop(e, true);\n\n\t\t\tconst scrollTop = this.scrollableElement.getScrollPosition().scrollTop;\n\t\t\tthis.scrollableElement.setScrollPosition({ scrollTop: scrollTop - e.translationY });\n\t\t}));\n\n\t\tthis._register(addDisposableListener(scrollElement, EventType.MOUSE_UP, e => {\n\t\t\t// Absorb clicks in menu dead space https://github.com/microsoft/vscode/issues/63575\n\t\t\t// We do this on the scroll element so the scroll bar doesn't dismiss the menu either\n\t\t\te.preventDefault();\n\t\t}));\n\n\t\tconst window = getWindow(container);\n\t\tmenuElement.style.maxHeight = `${Math.max(10, window.innerHeight - container.getBoundingClientRect().top - 35)}px`;\n\n\t\tactions = actions.filter((a, idx) => {\n\t\t\tif (options.submenuIds?.has(a.id)) {\n\t\t\t\tconsole.warn(`Found submenu cycle: ${a.id}`);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Filter out consecutive or useless separators\n\t\t\tif (a instanceof Separator) {\n\t\t\t\tif (idx === actions.length - 1 || idx === 0) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst prevAction = actions[idx - 1];\n\t\t\t\tif (prevAction instanceof Separator) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\n\t\tthis.push(actions, { icon: true, label: true, isMenu: true });\n\n\t\tcontainer.appendChild(this.scrollableElement.getDomNode());\n\t\tthis.scrollableElement.scanDomNode();\n\n\t\tthis.viewItems.filter(item => !(item instanceof MenuSeparatorActionViewItem)).forEach((item, index, array) => {\n\t\t\t(item as BaseMenuActionViewItem).updatePositionInSet(index + 1, array.length);\n\t\t});\n\t}\n\n\tprivate initializeOrUpdateStyleSheet(container: HTMLElement, style: IMenuStyles): void {\n\t\tif (!this.styleSheet) {\n\t\t\tif (isInShadowDOM(container)) {\n\t\t\t\tthis.styleSheet = createStyleSheet(container);\n\t\t\t} else {\n\t\t\t\tif (!Menu.globalStyleSheet) {\n\t\t\t\t\tMenu.globalStyleSheet = createStyleSheet();\n\t\t\t\t}\n\t\t\t\tthis.styleSheet = Menu.globalStyleSheet;\n\t\t\t}\n\t\t}\n\t\tthis.styleSheet.textContent = getMenuWidgetCSS(style, isInShadowDOM(container));\n\t}\n\n\tprivate styleScrollElement(scrollElement: HTMLElement, style: IMenuStyles): void {\n\n\t\tconst fgColor = style.foregroundColor ?? '';\n\t\tconst bgColor = style.backgroundColor ?? '';\n\t\tconst border = style.borderColor ? `1px solid ${style.borderColor}` : '';\n\t\tconst borderRadius = '5px';\n\t\tconst shadow = style.shadowColor ? `0 2px 8px ${style.shadowColor}` : '';\n\n\t\tscrollElement.style.outline = border;\n\t\tscrollElement.style.borderRadius = borderRadius;\n\t\tscrollElement.style.color = fgColor;\n\t\tscrollElement.style.backgroundColor = bgColor;\n\t\tscrollElement.style.boxShadow = shadow;\n\t}\n\n\toverride getContainer(): HTMLElement {\n\t\treturn this.scrollableElement.getDomNode();\n\t}\n\n\tget onScroll(): Event<ScrollEvent> {\n\t\treturn this.scrollableElement.onScroll;\n\t}\n\n\tprivate focusItemByElement(element: HTMLElement) {\n\t\tconst lastFocusedItem = this.focusedItem;\n\t\tthis.setFocusedItem(element);\n\n\t\tif (lastFocusedItem !== this.focusedItem) {\n\t\t\tthis.updateFocus();\n\t\t}\n\t}\n\n\tprivate setFocusedItem(element: HTMLElement): void {\n\t\tfor (let i = 0; i < this.actionsList.children.length; i++) {\n\t\t\tconst elem = this.actionsList.children[i];\n\t\t\tif (element === elem) {\n\t\t\t\tthis.focusedItem = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected override updateFocus(fromRight?: boolean): void {\n\t\tsuper.updateFocus(fromRight, true, true);\n\n\t\tif (typeof this.focusedItem !== 'undefined') {\n\t\t\t// Workaround for #80047 caused by an issue in chromium\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=414283\n\t\t\t// When that's fixed, just call this.scrollableElement.scanDomNode()\n\t\t\tthis.scrollableElement.setScrollPosition({\n\t\t\t\tscrollTop: Math.round(this.menuElement.scrollTop)\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate doGetActionViewItem(action: IAction, options: IMenuOptions, parentData: ISubMenuData): BaseActionViewItem {\n\t\tif (action instanceof Separator) {\n\t\t\treturn new MenuSeparatorActionViewItem(options.context, action, { icon: true }, this.menuStyles);\n\t\t} else if (action instanceof SubmenuAction) {\n\t\t\tconst menuActionViewItem = new SubmenuMenuActionViewItem(action, action.actions, parentData, { ...options, submenuIds: new Set([...(options.submenuIds || []), action.id]) }, this.menuStyles);\n\n\t\t\tif (options.enableMnemonics) {\n\t\t\t\tconst mnemonic = menuActionViewItem.getMnemonic();\n\t\t\t\tif (mnemonic && menuActionViewItem.isEnabled()) {\n\t\t\t\t\tlet actionViewItems: BaseMenuActionViewItem[] = [];\n\t\t\t\t\tif (this.mnemonics.has(mnemonic)) {\n\t\t\t\t\t\tactionViewItems = this.mnemonics.get(mnemonic)!;\n\t\t\t\t\t}\n\n\t\t\t\t\tactionViewItems.push(menuActionViewItem);\n\n\t\t\t\t\tthis.mnemonics.set(mnemonic, actionViewItems);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn menuActionViewItem;\n\t\t} else {\n\t\t\tconst keybindingLabel = options.getKeyBinding?.(action)?.getLabel();\n\t\t\tconst menuItemOptions: IMenuItemOptions = {\n\t\t\t\tenableMnemonics: options.enableMnemonics,\n\t\t\t\tuseEventAsContext: options.useEventAsContext,\n\t\t\t\tkeybinding: keybindingLabel,\n\t\t\t};\n\n\t\t\tconst menuActionViewItem = new BaseMenuActionViewItem(options.context, action, menuItemOptions, this.menuStyles);\n\n\t\t\tif (options.enableMnemonics) {\n\t\t\t\tconst mnemonic = menuActionViewItem.getMnemonic();\n\t\t\t\tif (mnemonic && menuActionViewItem.isEnabled()) {\n\t\t\t\t\tlet actionViewItems: BaseMenuActionViewItem[] = [];\n\t\t\t\t\tif (this.mnemonics.has(mnemonic)) {\n\t\t\t\t\t\tactionViewItems = this.mnemonics.get(mnemonic)!;\n\t\t\t\t\t}\n\n\t\t\t\t\tactionViewItems.push(menuActionViewItem);\n\n\t\t\t\t\tthis.mnemonics.set(mnemonic, actionViewItems);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn menuActionViewItem;\n\t\t}\n\t}\n}\n\ninterface IMenuItemOptions extends IActionViewItemOptions {\n\treadonly enableMnemonics?: boolean;\n}\n\nclass BaseMenuActionViewItem extends BaseActionViewItem {\n\n\tpublic container: HTMLElement | undefined;\n\n\tprotected override options: IMenuItemOptions;\n\tprotected item: HTMLElement | undefined;\n\n\tprivate runOnceToEnableMouseUp: RunOnceScheduler;\n\tprivate label: HTMLElement | undefined;\n\tprivate check: HTMLElement | undefined;\n\tprivate mnemonic: string | undefined;\n\tprivate cssClass: string;\n\n\tconstructor(ctx: unknown, action: IAction, options: IMenuItemOptions, protected readonly menuStyle: IMenuStyles) {\n\t\toptions = {\n\t\t\t...options,\n\t\t\tisMenu: true,\n\t\t\ticon: options.icon !== undefined ? options.icon : false,\n\t\t\tlabel: options.label !== undefined ? options.label : true,\n\t\t};\n\t\tsuper(action, action, options);\n\n\t\tthis.options = options;\n\t\tthis.cssClass = '';\n\n\t\t// Set mnemonic\n\t\tif (this.options.label && options.enableMnemonics) {\n\t\t\tconst label = this.action.label;\n\t\t\tif (label) {\n\t\t\t\tconst matches = MENU_MNEMONIC_REGEX.exec(label);\n\t\t\t\tif (matches) {\n\t\t\t\t\tthis.mnemonic = (!!matches[1] ? matches[1] : matches[3]).toLocaleLowerCase();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add mouse up listener later to avoid accidental clicks\n\t\tthis.runOnceToEnableMouseUp = new RunOnceScheduler(() => {\n\t\t\tif (!this.element) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._register(addDisposableListener(this.element, EventType.MOUSE_UP, e => {\n\t\t\t\t// removed default prevention as it conflicts\n\t\t\t\t// with BaseActionViewItem #101537\n\t\t\t\t// add back if issues arise and link new issue\n\t\t\t\tEventHelper.stop(e, true);\n\n\t\t\t\t// See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Interact_with_the_clipboard\n\t\t\t\t// > Writing to the clipboard\n\t\t\t\t// > You can use the \"cut\" and \"copy\" commands without any special\n\t\t\t\t// permission if you are using them in a short-lived event handler\n\t\t\t\t// for a user action (for example, a click handler).\n\n\t\t\t\t// => to get the Copy and Paste context menu actions working on Firefox,\n\t\t\t\t// there should be no timeout here\n\t\t\t\tif (isFirefox) {\n\t\t\t\t\tconst mouseEvent = new StandardMouseEvent(getWindow(this.element), e);\n\n\t\t\t\t\t// Allowing right click to trigger the event causes the issue described below,\n\t\t\t\t\t// but since the solution below does not work in FF, we must disable right click\n\t\t\t\t\tif (mouseEvent.rightButton) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.onClick(e);\n\t\t\t\t}\n\n\t\t\t\t// In all other cases, set timeout to allow context menu cancellation to trigger\n\t\t\t\t// otherwise the action will destroy the menu and a second context menu\n\t\t\t\t// will still trigger for right click.\n\t\t\t\telse {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.onClick(e);\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\tthis._register(addDisposableListener(this.element, EventType.CONTEXT_MENU, e => {\n\t\t\t\tEventHelper.stop(e, true);\n\t\t\t}));\n\t\t}, 100);\n\n\t\tthis._register(this.runOnceToEnableMouseUp);\n\t}\n\n\toverride render(container: HTMLElement): void {\n\t\tsuper.render(container);\n\n\t\tif (!this.element) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.container = container;\n\n\t\tthis.item = append(this.element, $('a.action-menu-item'));\n\t\tif (this._action.id === Separator.ID) {\n\t\t\t// A separator is a presentation item\n\t\t\tthis.item.setAttribute('role', 'presentation');\n\t\t} else {\n\t\t\tthis.item.setAttribute('role', 'menuitem');\n\t\t\tif (this.mnemonic) {\n\t\t\t\tthis.item.setAttribute('aria-keyshortcuts', `${this.mnemonic}`);\n\t\t\t}\n\t\t}\n\n\t\tthis.check = append(this.item, $('span.menu-item-check' + ThemeIcon.asCSSSelector(Codicon.menuSelection)));\n\t\tthis.check.setAttribute('role', 'none');\n\n\t\tthis.label = append(this.item, $('span.action-label'));\n\n\t\tif (this.options.label && this.options.keybinding) {\n\t\t\tappend(this.item, $('span.keybinding')).textContent = this.options.keybinding;\n\t\t}\n\n\t\t// Adds mouse up listener to actually run the action\n\t\tthis.runOnceToEnableMouseUp.schedule();\n\n\t\tthis.updateClass();\n\t\tthis.updateLabel();\n\t\tthis.updateTooltip();\n\t\tthis.updateEnabled();\n\t\tthis.updateChecked();\n\n\t\tthis.applyStyle();\n\t}\n\n\toverride blur(): void {\n\t\tsuper.blur();\n\t\tthis.applyStyle();\n\t}\n\n\toverride focus(): void {\n\t\tsuper.focus();\n\n\t\tthis.item?.focus();\n\n\t\tthis.applyStyle();\n\t}\n\n\tupdatePositionInSet(pos: number, setSize: number): void {\n\t\tif (this.item) {\n\t\t\tthis.item.setAttribute('aria-posinset', `${pos}`);\n\t\t\tthis.item.setAttribute('aria-setsize', `${setSize}`);\n\t\t}\n\t}\n\n\tprotected override updateLabel(): void {\n\t\tif (!this.label) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.label) {\n\t\t\tclearNode(this.label);\n\n\t\t\tlet label = stripIcons(this.action.label);\n\t\t\tif (label) {\n\t\t\t\tconst cleanLabel = cleanMnemonic(label);\n\t\t\t\tif (!this.options.enableMnemonics) {\n\t\t\t\t\tlabel = cleanLabel;\n\t\t\t\t}\n\n\t\t\t\tthis.label.setAttribute('aria-label', cleanLabel.replace(/&&/g, '&'));\n\n\t\t\t\tconst matches = MENU_MNEMONIC_REGEX.exec(label);\n\n\t\t\t\tif (matches) {\n\t\t\t\t\tlabel = strings.escape(label);\n\n\t\t\t\t\t// This is global, reset it\n\t\t\t\t\tMENU_ESCAPED_MNEMONIC_REGEX.lastIndex = 0;\n\t\t\t\t\tlet escMatch = MENU_ESCAPED_MNEMONIC_REGEX.exec(label);\n\n\t\t\t\t\t// We can't use negative lookbehind so if we match our negative and skip\n\t\t\t\t\twhile (escMatch && escMatch[1]) {\n\t\t\t\t\t\tescMatch = MENU_ESCAPED_MNEMONIC_REGEX.exec(label);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst replaceDoubleEscapes = (str: string) => str.replace(/&amp;&amp;/g, '&amp;');\n\n\t\t\t\t\tif (escMatch) {\n\t\t\t\t\t\tthis.label.append(\n\t\t\t\t\t\t\tstrings.ltrim(replaceDoubleEscapes(label.substr(0, escMatch.index)), ' '),\n\t\t\t\t\t\t\t$('u', { 'aria-hidden': 'true' },\n\t\t\t\t\t\t\t\tescMatch[3]),\n\t\t\t\t\t\t\tstrings.rtrim(replaceDoubleEscapes(label.substr(escMatch.index + escMatch[0].length)), ' '));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.label.textContent = replaceDoubleEscapes(label).trim();\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.item?.setAttribute('aria-keyshortcuts', (!!matches[1] ? matches[1] : matches[3]).toLocaleLowerCase());\n\t\t\t\t} else {\n\t\t\t\t\tthis.label.textContent = label.replace(/&&/g, '&').trim();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected override updateTooltip(): void {\n\t\t// menus should function like native menus and they do not have tooltips\n\t}\n\n\tprotected override updateClass(): void {\n\t\tif (this.cssClass && this.item) {\n\t\t\tthis.item.classList.remove(...this.cssClass.split(' '));\n\t\t}\n\t\tif (this.options.icon && this.label) {\n\t\t\tthis.cssClass = this.action.class || '';\n\t\t\tthis.label.classList.add('icon');\n\t\t\tif (this.cssClass) {\n\t\t\t\tthis.label.classList.add(...this.cssClass.split(' '));\n\t\t\t}\n\t\t\tthis.updateEnabled();\n\t\t} else if (this.label) {\n\t\t\tthis.label.classList.remove('icon');\n\t\t}\n\t}\n\n\tprotected override updateEnabled(): void {\n\t\tif (this.action.enabled) {\n\t\t\tif (this.element) {\n\t\t\t\tthis.element.classList.remove('disabled');\n\t\t\t\tthis.element.removeAttribute('aria-disabled');\n\t\t\t}\n\n\t\t\tif (this.item) {\n\t\t\t\tthis.item.classList.remove('disabled');\n\t\t\t\tthis.item.removeAttribute('aria-disabled');\n\t\t\t\tthis.item.tabIndex = 0;\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.element) {\n\t\t\t\tthis.element.classList.add('disabled');\n\t\t\t\tthis.element.setAttribute('aria-disabled', 'true');\n\t\t\t}\n\n\t\t\tif (this.item) {\n\t\t\t\tthis.item.classList.add('disabled');\n\t\t\t\tthis.item.setAttribute('aria-disabled', 'true');\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected override updateChecked(): void {\n\t\tif (!this.item) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst checked = this.action.checked;\n\t\tthis.item.classList.toggle('checked', !!checked);\n\t\tif (checked !== undefined) {\n\t\t\tthis.item.setAttribute('role', 'menuitemcheckbox');\n\t\t\tthis.item.setAttribute('aria-checked', checked ? 'true' : 'false');\n\t\t} else {\n\t\t\tthis.item.setAttribute('role', 'menuitem');\n\t\t\tthis.item.setAttribute('aria-checked', '');\n\t\t}\n\t}\n\n\tgetMnemonic(): string | undefined {\n\t\treturn this.mnemonic;\n\t}\n\n\tprotected applyStyle(): void {\n\t\tconst isSelected = this.element && this.element.classList.contains('focused');\n\t\tconst fgColor = isSelected && this.menuStyle.selectionForegroundColor ? this.menuStyle.selectionForegroundColor : this.menuStyle.foregroundColor;\n\t\tconst bgColor = isSelected && this.menuStyle.selectionBackgroundColor ? this.menuStyle.selectionBackgroundColor : undefined;\n\t\tconst outline = isSelected && this.menuStyle.selectionBorderColor ? `1px solid ${this.menuStyle.selectionBorderColor}` : '';\n\t\tconst outlineOffset = isSelected && this.menuStyle.selectionBorderColor ? `-1px` : '';\n\n\t\tif (this.item) {\n\t\t\tthis.item.style.color = fgColor ?? '';\n\t\t\tthis.item.style.backgroundColor = bgColor ?? '';\n\t\t\tthis.item.style.outline = outline;\n\t\t\tthis.item.style.outlineOffset = outlineOffset;\n\t\t}\n\n\t\tif (this.check) {\n\t\t\tthis.check.style.color = fgColor ?? '';\n\t\t}\n\t}\n}\n\nclass SubmenuMenuActionViewItem extends BaseMenuActionViewItem {\n\tprivate mysubmenu: Menu | null = null;\n\tprivate submenuContainer: HTMLElement | undefined;\n\tprivate submenuIndicator: HTMLElement | undefined;\n\tprivate readonly submenuDisposables = this._register(new DisposableStore());\n\tprivate mouseOver: boolean = false;\n\tprivate showScheduler: RunOnceScheduler;\n\tprivate hideScheduler: RunOnceScheduler;\n\tprivate expandDirection: IMenuDirection;\n\n\tconstructor(\n\t\taction: IAction,\n\t\tprivate submenuActions: ReadonlyArray<IAction>,\n\t\tprivate parentData: ISubMenuData,\n\t\tprivate submenuOptions: IMenuOptions,\n\t\tmenuStyles: IMenuStyles\n\t) {\n\t\tsuper(action, action, submenuOptions, menuStyles);\n\n\t\tthis.expandDirection = submenuOptions && submenuOptions.expandDirection !== undefined ? submenuOptions.expandDirection : { horizontal: HorizontalDirection.Right, vertical: VerticalDirection.Below };\n\n\t\tthis.showScheduler = new RunOnceScheduler(() => {\n\t\t\tif (this.mouseOver) {\n\t\t\t\tthis.cleanupExistingSubmenu(false);\n\t\t\t\tthis.createSubmenu(false);\n\t\t\t}\n\t\t}, 250);\n\n\t\tthis.hideScheduler = new RunOnceScheduler(() => {\n\t\t\tif (this.element && (!isAncestor(getActiveElement(), this.element) && this.parentData.submenu === this.mysubmenu)) {\n\t\t\t\tthis.parentData.parent.focus(false);\n\t\t\t\tthis.cleanupExistingSubmenu(true);\n\t\t\t}\n\t\t}, 750);\n\t}\n\n\toverride render(container: HTMLElement): void {\n\t\tsuper.render(container);\n\n\t\tif (!this.element) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.item) {\n\t\t\tthis.item.classList.add('monaco-submenu-item');\n\t\t\tthis.item.tabIndex = 0;\n\t\t\tthis.item.setAttribute('aria-haspopup', 'true');\n\t\t\tthis.updateAriaExpanded('false');\n\t\t\tthis.submenuIndicator = append(this.item, $('span.submenu-indicator' + ThemeIcon.asCSSSelector(Codicon.menuSubmenu)));\n\t\t\tthis.submenuIndicator.setAttribute('aria-hidden', 'true');\n\t\t}\n\n\t\tthis._register(addDisposableListener(this.element, EventType.KEY_UP, e => {\n\t\t\tconst event = new StandardKeyboardEvent(e);\n\t\t\tif (event.equals(KeyCode.RightArrow) || event.equals(KeyCode.Enter)) {\n\t\t\t\tEventHelper.stop(e, true);\n\n\t\t\t\tthis.createSubmenu(true);\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(addDisposableListener(this.element, EventType.KEY_DOWN, e => {\n\t\t\tconst event = new StandardKeyboardEvent(e);\n\n\t\t\tif (getActiveElement() === this.item) {\n\t\t\t\tif (event.equals(KeyCode.RightArrow) || event.equals(KeyCode.Enter)) {\n\t\t\t\t\tEventHelper.stop(e, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(addDisposableListener(this.element, EventType.MOUSE_OVER, e => {\n\t\t\tif (!this.mouseOver) {\n\t\t\t\tthis.mouseOver = true;\n\n\t\t\t\tthis.showScheduler.schedule();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(addDisposableListener(this.element, EventType.MOUSE_LEAVE, e => {\n\t\t\tthis.mouseOver = false;\n\t\t}));\n\n\t\tthis._register(addDisposableListener(this.element, EventType.FOCUS_OUT, e => {\n\t\t\tif (this.element && !isAncestor(getActiveElement(), this.element)) {\n\t\t\t\tthis.hideScheduler.schedule();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this.parentData.parent.onScroll(() => {\n\t\t\tif (this.parentData.submenu === this.mysubmenu) {\n\t\t\t\tthis.parentData.parent.focus(false);\n\t\t\t\tthis.cleanupExistingSubmenu(true);\n\t\t\t}\n\t\t}));\n\t}\n\n\tprotected override updateEnabled(): void {\n\t\t// override on submenu entry\n\t\t// native menus do not observe enablement on sumbenus\n\t\t// we mimic that behavior\n\t}\n\n\toverride onClick(e: EventLike): void {\n\t\t// stop clicking from trying to run an action\n\t\tEventHelper.stop(e, true);\n\n\t\tthis.cleanupExistingSubmenu(false);\n\t\tthis.createSubmenu(true);\n\t}\n\n\tprivate cleanupExistingSubmenu(force: boolean): void {\n\t\tif (this.parentData.submenu && (force || (this.parentData.submenu !== this.mysubmenu))) {\n\n\t\t\t// disposal may throw if the submenu has already been removed\n\t\t\ttry {\n\t\t\t\tthis.parentData.submenu.dispose();\n\t\t\t} catch { }\n\n\t\t\tthis.parentData.submenu = undefined;\n\t\t\tthis.updateAriaExpanded('false');\n\t\t\tif (this.submenuContainer) {\n\t\t\t\tthis.submenuDisposables.clear();\n\t\t\t\tthis.submenuContainer = undefined;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate calculateSubmenuMenuLayout(windowDimensions: Dimension, submenu: Dimension, entry: IDomNodePagePosition, expandDirection: IMenuDirection): { top: number; left: number } {\n\t\tconst ret = { top: 0, left: 0 };\n\n\t\t// Start with horizontal\n\t\tret.left = layout(windowDimensions.width, submenu.width, { position: expandDirection.horizontal === HorizontalDirection.Right ? LayoutAnchorPosition.Before : LayoutAnchorPosition.After, offset: entry.left, size: entry.width });\n\n\t\t// We don't have enough room to layout the menu fully, so we are overlapping the menu\n\t\tif (ret.left >= entry.left && ret.left < entry.left + entry.width) {\n\t\t\tif (entry.left + 10 + submenu.width <= windowDimensions.width) {\n\t\t\t\tret.left = entry.left + 10;\n\t\t\t}\n\n\t\t\tentry.top += 10;\n\t\t\tentry.height = 0;\n\t\t}\n\n\t\t// Now that we have a horizontal position, try layout vertically\n\t\tret.top = layout(windowDimensions.height, submenu.height, { position: LayoutAnchorPosition.Before, offset: entry.top, size: 0 });\n\n\t\t// We didn't have enough room below, but we did above, so we shift down to align the menu\n\t\tif (ret.top + submenu.height === entry.top && ret.top + entry.height + submenu.height <= windowDimensions.height) {\n\t\t\tret.top += entry.height;\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\tprivate createSubmenu(selectFirstItem = true): void {\n\t\tif (!this.element) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.parentData.submenu) {\n\t\t\tthis.updateAriaExpanded('true');\n\t\t\tthis.submenuContainer = append(this.element, $('div.monaco-submenu'));\n\t\t\tthis.submenuContainer.classList.add('menubar-menu-items-holder', 'context-view');\n\n\t\t\t// Set the top value of the menu container before construction\n\t\t\t// This allows the menu constructor to calculate the proper max height\n\t\t\tconst computedStyles = getWindow(this.parentData.parent.domNode).getComputedStyle(this.parentData.parent.domNode);\n\t\t\tconst paddingTop = parseFloat(computedStyles.paddingTop || '0') || 0;\n\t\t\tthis.submenuContainer.style.position = 'fixed';\n\t\t\tthis.submenuContainer.style.top = '0';\n\t\t\tthis.submenuContainer.style.left = '0';\n\t\t\t// Fix to #263546, for submenu of treeView view/item/context z-index issue - ensure submenu appears above other elements\n\t\t\tthis.submenuContainer.style.zIndex = '1';\n\n\t\t\tthis.parentData.submenu = new Menu(this.submenuContainer, this.submenuActions.length ? this.submenuActions : [new EmptySubmenuAction()], this.submenuOptions, this.menuStyle);\n\n\t\t\t// layout submenu\n\t\t\tconst entryBox = this.element.getBoundingClientRect();\n\t\t\tconst entryBoxUpdated = {\n\t\t\t\ttop: entryBox.top - paddingTop,\n\t\t\t\tleft: entryBox.left,\n\t\t\t\theight: entryBox.height + 2 * paddingTop,\n\t\t\t\twidth: entryBox.width\n\t\t\t};\n\n\t\t\tconst viewBox = this.submenuContainer.getBoundingClientRect();\n\n\t\t\tconst window = getWindow(this.element);\n\t\t\tconst { top, left } = this.calculateSubmenuMenuLayout(new Dimension(window.innerWidth, window.innerHeight), Dimension.lift(viewBox), entryBoxUpdated, this.expandDirection);\n\t\t\t// subtract offsets caused by transform parent\n\t\t\tthis.submenuContainer.style.left = `${left - viewBox.left}px`;\n\t\t\tthis.submenuContainer.style.top = `${top - viewBox.top}px`;\n\n\t\t\tthis.submenuDisposables.add(addDisposableListener(this.submenuContainer, EventType.KEY_UP, e => {\n\t\t\t\tconst event = new StandardKeyboardEvent(e);\n\t\t\t\tif (event.equals(KeyCode.LeftArrow)) {\n\t\t\t\t\tEventHelper.stop(e, true);\n\n\t\t\t\t\tthis.parentData.parent.focus();\n\n\t\t\t\t\tthis.cleanupExistingSubmenu(true);\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\tthis.submenuDisposables.add(addDisposableListener(this.submenuContainer, EventType.KEY_DOWN, e => {\n\t\t\t\tconst event = new StandardKeyboardEvent(e);\n\t\t\t\tif (event.equals(KeyCode.LeftArrow)) {\n\t\t\t\t\tEventHelper.stop(e, true);\n\t\t\t\t}\n\t\t\t}));\n\n\n\t\t\tthis.submenuDisposables.add(this.parentData.submenu.onDidCancel(() => {\n\t\t\t\tthis.parentData.parent.focus();\n\n\t\t\t\tthis.cleanupExistingSubmenu(true);\n\t\t\t}));\n\n\t\t\tthis.parentData.submenu.focus(selectFirstItem);\n\n\t\t\tthis.mysubmenu = this.parentData.submenu;\n\t\t} else {\n\t\t\tthis.parentData.submenu.focus(false);\n\t\t}\n\t}\n\n\tprivate updateAriaExpanded(value: string): void {\n\t\tif (this.item) {\n\t\t\tthis.item?.setAttribute('aria-expanded', value);\n\t\t}\n\t}\n\n\tprotected override applyStyle(): void {\n\t\tsuper.applyStyle();\n\n\t\tconst isSelected = this.element && this.element.classList.contains('focused');\n\t\tconst fgColor = isSelected && this.menuStyle.selectionForegroundColor ? this.menuStyle.selectionForegroundColor : this.menuStyle.foregroundColor;\n\n\t\tif (this.submenuIndicator) {\n\t\t\tthis.submenuIndicator.style.color = fgColor ?? '';\n\t\t}\n\t}\n\n\toverride dispose(): void {\n\t\tsuper.dispose();\n\n\t\tthis.hideScheduler.dispose();\n\n\t\tif (this.mysubmenu) {\n\t\t\tthis.mysubmenu.dispose();\n\t\t\tthis.mysubmenu = null;\n\t\t}\n\n\t\tif (this.submenuContainer) {\n\t\t\tthis.submenuContainer = undefined;\n\t\t}\n\t}\n}\n\nclass MenuSeparatorActionViewItem extends ActionViewItem {\n\tconstructor(context: unknown, action: IAction, options: IActionViewItemOptions, private readonly menuStyles: IMenuStyles) {\n\t\tsuper(context, action, options);\n\t}\n\n\toverride render(container: HTMLElement): void {\n\t\tsuper.render(container);\n\t\tif (this.label) {\n\t\t\tthis.label.style.borderBottomColor = this.menuStyles.separatorColor ? `${this.menuStyles.separatorColor}` : '';\n\t\t}\n\t}\n}\n\nexport function cleanMnemonic(label: string): string {\n\tconst regex = MENU_MNEMONIC_REGEX;\n\n\tconst matches = regex.exec(label);\n\tif (!matches) {\n\t\treturn label;\n\t}\n\n\tconst mnemonicInText = !matches[1];\n\n\treturn label.replace(regex, mnemonicInText ? '$2$3' : '').trim();\n}\n\nexport function formatRule(c: ThemeIcon) {\n\tconst fontCharacter = getCodiconFontCharacters()[c.id];\n\treturn `.codicon-${c.id}:before { content: '\\\\${fontCharacter.toString(16)}'; }`;\n}\n\nexport function getMenuWidgetCSS(style: IMenuStyles, isForShadowDom: boolean): string {\n\tlet 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\topacity: 0.7;\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\n\tif (isForShadowDom) {\n\t\t// Only define scrollbar styles when used inside shadow dom,\n\t\t// otherwise leave their styling to the global workbench styling.\n\t\tresult += `\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\t/* Fix for https://github.com/microsoft/vscode/issues/103170 */\n\t\t\t.monaco-menu .action-item .monaco-submenu {\n\t\t\t\tz-index: 1;\n\t\t\t}\n\t\t`;\n\n\t\t// Scrollbars\n\t\tconst scrollbarShadowColor = style.scrollbarShadow;\n\t\tif (scrollbarShadowColor) {\n\t\t\tresult += `\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\t\t}\n\n\t\tconst scrollbarSliderBackgroundColor = style.scrollbarSliderBackground;\n\t\tif (scrollbarSliderBackgroundColor) {\n\t\t\tresult += `\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\t\t}\n\n\t\tconst scrollbarSliderHoverBackgroundColor = style.scrollbarSliderHoverBackground;\n\t\tif (scrollbarSliderHoverBackgroundColor) {\n\t\t\tresult += `\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\t\t}\n\n\t\tconst scrollbarSliderActiveBackgroundColor = style.scrollbarSliderActiveBackground;\n\t\tif (scrollbarSliderActiveBackgroundColor) {\n\t\t\tresult += `\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\t\t}\n\t}\n\n\treturn result;\n}\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/base/browser/ui/menu/menu.ts","vs/base/browser/ui/menu/menu.ts"],"names":[],"mappings":"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","file":"menu.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","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 *--------------------------------------------------------------------------------------------*/\n\nimport { isFirefox } from '../../browser.js';\nimport { EventType as TouchEventType, Gesture } from '../../touch.js';\nimport { $, addDisposableListener, append, clearNode, Dimension, EventHelper, EventLike, EventType, getActiveElement, getWindow, IDomNodePagePosition, isAncestor, isInShadowDOM } from '../../dom.js';\nimport { createStyleSheet } from '../../domStylesheets.js';\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\nimport { StandardMouseEvent } from '../../mouseEvent.js';\nimport { ActionBar, ActionsOrientation, IActionViewItemProvider } from '../actionbar/actionbar.js';\nimport { ActionViewItem, BaseActionViewItem, IActionViewItemOptions } from '../actionbar/actionViewItems.js';\nimport { AnchorAlignment, layout, LayoutAnchorPosition } from '../contextview/contextview.js';\nimport { DomScrollableElement } from '../scrollbar/scrollableElement.js';\nimport { EmptySubmenuAction, IAction, IActionRunner, 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 { Event } from '../../../common/event.js';\nimport { stripIcons } from '../../../common/iconLabels.js';\nimport { KeyCode } from '../../../common/keyCodes.js';\nimport { ResolvedKeybinding } from '../../../common/keybindings.js';\nimport { DisposableStore } from '../../../common/lifecycle.js';\nimport { isLinux, isMacintosh } from '../../../common/platform.js';\nimport { ScrollbarVisibility, ScrollEvent } from '../../../common/scrollable.js';\nimport * as strings from '../../../common/strings.js';\n\nexport const MENU_MNEMONIC_REGEX = /\\(&([^\\s&])\\)|(^|[^&])&([^\\s&])/;\nexport const MENU_ESCAPED_MNEMONIC_REGEX = /(&amp;)?(&amp;)([^\\s&])/g;\n\n\n\nexport enum HorizontalDirection {\n\tRight,\n\tLeft\n}\n\nexport enum VerticalDirection {\n\tAbove,\n\tBelow\n}\n\nexport interface IMenuDirection {\n\thorizontal: HorizontalDirection;\n\tvertical: VerticalDirection;\n}\n\nexport interface IMenuOptions {\n\tcontext?: unknown;\n\tactionViewItemProvider?: IActionViewItemProvider;\n\tactionRunner?: IActionRunner;\n\tgetKeyBinding?: (action: IAction) => ResolvedKeybinding | undefined;\n\tariaLabel?: string;\n\tenableMnemonics?: boolean;\n\tanchorAlignment?: AnchorAlignment;\n\texpandDirection?: IMenuDirection;\n\tuseEventAsContext?: boolean;\n\tsubmenuIds?: Set<string>;\n}\n\nexport interface IMenuStyles {\n\tshadowColor: string | undefined;\n\tborderColor: string | undefined;\n\tforegroundColor: string | undefined;\n\tbackgroundColor: string | undefined;\n\tselectionForegroundColor: string | undefined;\n\tselectionBackgroundColor: string | undefined;\n\tselectionBorderColor: string | undefined;\n\tseparatorColor: string | undefined;\n\tscrollbarShadow: string | undefined;\n\tscrollbarSliderBackground: string | undefined;\n\tscrollbarSliderHoverBackground: string | undefined;\n\tscrollbarSliderActiveBackground: string | undefined;\n}\n\ninterface ISubMenuData {\n\tparent: Menu;\n\tsubmenu?: Menu;\n}\n\nexport class Menu extends ActionBar {\n\tprivate mnemonics: Map<string, Array<BaseMenuActionViewItem>>;\n\tprivate scrollableElement: DomScrollableElement;\n\tprivate menuElement: HTMLElement;\n\tstatic globalStyleSheet: HTMLStyleElement;\n\tprotected styleSheet: HTMLStyleElement | undefined;\n\n\tconstructor(container: HTMLElement, actions: ReadonlyArray<IAction>, options: IMenuOptions, private readonly menuStyles: IMenuStyles) {\n\t\tcontainer.classList.add('monaco-menu-container');\n\t\tcontainer.setAttribute('role', 'presentation');\n\t\tconst menuElement = document.createElement('div');\n\t\tmenuElement.classList.add('monaco-menu');\n\t\tmenuElement.setAttribute('role', 'presentation');\n\n\t\tsuper(menuElement, {\n\t\t\torientation: ActionsOrientation.VERTICAL,\n\t\t\tactionViewItemProvider: action => this.doGetActionViewItem(action, options, parentData),\n\t\t\tcontext: options.context,\n\t\t\tactionRunner: options.actionRunner,\n\t\t\tariaLabel: options.ariaLabel,\n\t\t\tariaRole: 'menu',\n\t\t\tfocusOnlyEnabledItems: true,\n\t\t\ttriggerKeys: { keys: [KeyCode.Enter, ...(isMacintosh || isLinux ? [KeyCode.Space] : [])], keyDown: true }\n\t\t});\n\n\t\tthis.menuElement = menuElement;\n\n\t\tthis.actionsList.tabIndex = 0;\n\n\t\tthis.initializeOrUpdateStyleSheet(container, menuStyles);\n\n\t\tthis._register(Gesture.addTarget(menuElement));\n\n\t\tthis._register(addDisposableListener(menuElement, EventType.KEY_DOWN, (e) => {\n\t\t\tconst event = new StandardKeyboardEvent(e);\n\n\t\t\t// Stop tab navigation of menus\n\t\t\tif (event.equals(KeyCode.Tab)) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t}));\n\n\t\tif (options.enableMnemonics) {\n\t\t\tthis._register(addDisposableListener(menuElement, EventType.KEY_DOWN, (e) => {\n\t\t\t\tconst key = e.key.toLocaleLowerCase();\n\t\t\t\tconst actions = this.mnemonics.get(key);\n\t\t\t\tif (actions !== undefined) {\n\t\t\t\t\tEventHelper.stop(e, true);\n\n\t\t\t\t\tif (actions.length === 1) {\n\t\t\t\t\t\tif (actions[0] instanceof SubmenuMenuActionViewItem && actions[0].container) {\n\t\t\t\t\t\t\tthis.focusItemByElement(actions[0].container);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tactions[0].onClick(e);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (actions.length > 1) {\n\t\t\t\t\t\tconst action = actions.shift();\n\t\t\t\t\t\tif (action && action.container) {\n\t\t\t\t\t\t\tthis.focusItemByElement(action.container);\n\t\t\t\t\t\t\tactions.push(action);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.mnemonics.set(key, actions);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\n\t\tif (isLinux) {\n\t\t\tthis._register(addDisposableListener(menuElement, EventType.KEY_DOWN, e => {\n\t\t\t\tconst event = new StandardKeyboardEvent(e);\n\n\t\t\t\tif (event.equals(KeyCode.Home) || event.equals(KeyCode.PageUp)) {\n\t\t\t\t\tthis.focusedItem = this.viewItems.length - 1;\n\t\t\t\t\tthis.focusNext();\n\t\t\t\t\tEventHelper.stop(e, true);\n\t\t\t\t} else if (event.equals(KeyCode.End) || event.equals(KeyCode.PageDown)) {\n\t\t\t\t\tthis.focusedItem = 0;\n\t\t\t\t\tthis.focusPrevious();\n\t\t\t\t\tEventHelper.stop(e, true);\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\n\t\tthis._register(addDisposableListener(this.domNode, EventType.MOUSE_OUT, e => {\n\t\t\tconst relatedTarget = e.relatedTarget as HTMLElement;\n\t\t\tif (!isAncestor(relatedTarget, this.domNode)) {\n\t\t\t\tthis.focusedItem = undefined;\n\t\t\t\tthis.updateFocus();\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(addDisposableListener(this.actionsList, EventType.MOUSE_OVER, e => {\n\t\t\tlet target = e.target as HTMLElement;\n\t\t\tif (!target || !isAncestor(target, this.actionsList) || target === this.actionsList) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twhile (target.parentElement !== this.actionsList && target.parentElement !== null) {\n\t\t\t\ttarget = target.parentElement;\n\t\t\t}\n\n\t\t\tif (target.classList.contains('action-item')) {\n\t\t\t\tconst lastFocusedItem = this.focusedItem;\n\t\t\t\tthis.setFocusedItem(target);\n\n\t\t\t\tif (lastFocusedItem !== this.focusedItem) {\n\t\t\t\t\tthis.updateFocus();\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\t// Support touch on actions list to focus items (needed for submenus)\n\t\tthis._register(Gesture.addTarget(this.actionsList));\n\t\tthis._register(addDisposableListener(this.actionsList, TouchEventType.Tap, e => {\n\t\t\tlet target = e.initialTarget as HTMLElement;\n\t\t\tif (!target || !isAncestor(target, this.actionsList) || target === this.actionsList) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twhile (target.parentElement !== this.actionsList && target.parentElement !== null) {\n\t\t\t\ttarget = target.parentElement;\n\t\t\t}\n\n\t\t\tif (target.classList.contains('action-item')) {\n\t\t\t\tconst lastFocusedItem = this.focusedItem;\n\t\t\t\tthis.setFocusedItem(target);\n\n\t\t\t\tif (lastFocusedItem !== this.focusedItem) {\n\t\t\t\t\tthis.updateFocus();\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\n\t\tconst parentData: ISubMenuData = {\n\t\t\tparent: this\n\t\t};\n\n\t\tthis.mnemonics = new Map<string, Array<BaseMenuActionViewItem>>();\n\n\t\t// Scroll Logic\n\t\tthis.scrollableElement = this._register(new DomScrollableElement(menuElement, {\n\t\t\talwaysConsumeMouseWheel: true,\n\t\t\thorizontal: ScrollbarVisibility.Hidden,\n\t\t\tvertical: ScrollbarVisibility.Visible,\n\t\t\tverticalScrollbarSize: 7,\n\t\t\thandleMouseWheel: true,\n\t\t\tuseShadows: true\n\t\t}));\n\n\t\tconst scrollElement = this.scrollableElement.getDomNode();\n\t\tscrollElement.style.position = '';\n\n\t\tthis.styleScrollElement(scrollElement, menuStyles);\n\n\t\t// Support scroll on menu drag\n\t\tthis._register(addDisposableListener(menuElement, TouchEventType.Change, e => {\n\t\t\tEventHelper.stop(e, true);\n\n\t\t\tconst scrollTop = this.scrollableElement.getScrollPosition().scrollTop;\n\t\t\tthis.scrollableElement.setScrollPosition({ scrollTop: scrollTop - e.translationY });\n\t\t}));\n\n\t\tthis._register(addDisposableListener(scrollElement, EventType.MOUSE_UP, e => {\n\t\t\t// Absorb clicks in menu dead space https://github.com/microsoft/vscode/issues/63575\n\t\t\t// We do this on the scroll element so the scroll bar doesn't dismiss the menu either\n\t\t\te.preventDefault();\n\t\t}));\n\n\t\tconst window = getWindow(container);\n\t\tmenuElement.style.maxHeight = `${Math.max(10, window.innerHeight - container.getBoundingClientRect().top - 35)}px`;\n\n\t\tactions = actions.filter((a, idx) => {\n\t\t\tif (options.submenuIds?.has(a.id)) {\n\t\t\t\tconsole.warn(`Found submenu cycle: ${a.id}`);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Filter out consecutive or useless separators\n\t\t\tif (a instanceof Separator) {\n\t\t\t\tif (idx === actions.length - 1 || idx === 0) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst prevAction = actions[idx - 1];\n\t\t\t\tif (prevAction instanceof Separator) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\n\t\tthis.push(actions, { icon: true, label: true, isMenu: true });\n\n\t\tcontainer.appendChild(this.scrollableElement.getDomNode());\n\t\tthis.scrollableElement.scanDomNode();\n\n\t\tthis.viewItems.filter(item => !(item instanceof MenuSeparatorActionViewItem)).forEach((item, index, array) => {\n\t\t\t(item as BaseMenuActionViewItem).updatePositionInSet(index + 1, array.length);\n\t\t});\n\t}\n\n\tprivate initializeOrUpdateStyleSheet(container: HTMLElement, style: IMenuStyles): void {\n\t\tif (!this.styleSheet) {\n\t\t\tif (isInShadowDOM(container)) {\n\t\t\t\tthis.styleSheet = createStyleSheet(container);\n\t\t\t} else {\n\t\t\t\tif (!Menu.globalStyleSheet) {\n\t\t\t\t\tMenu.globalStyleSheet = createStyleSheet();\n\t\t\t\t}\n\t\t\t\tthis.styleSheet = Menu.globalStyleSheet;\n\t\t\t}\n\t\t}\n\t\tthis.styleSheet.textContent = getMenuWidgetCSS(style, isInShadowDOM(container));\n\t}\n\n\tprivate styleScrollElement(scrollElement: HTMLElement, style: IMenuStyles): void {\n\n\t\tconst fgColor = style.foregroundColor ?? '';\n\t\tconst bgColor = style.backgroundColor ?? '';\n\t\tconst border = style.borderColor ? `1px solid ${style.borderColor}` : '';\n\t\tconst borderRadius = '5px';\n\t\tconst shadow = style.shadowColor ? `0 2px 8px ${style.shadowColor}` : '';\n\n\t\tscrollElement.style.outline = border;\n\t\tscrollElement.style.borderRadius = borderRadius;\n\t\tscrollElement.style.color = fgColor;\n\t\tscrollElement.style.backgroundColor = bgColor;\n\t\tscrollElement.style.boxShadow = shadow;\n\t}\n\n\toverride getContainer(): HTMLElement {\n\t\treturn this.scrollableElement.getDomNode();\n\t}\n\n\tget onScroll(): Event<ScrollEvent> {\n\t\treturn this.scrollableElement.onScroll;\n\t}\n\n\tprivate focusItemByElement(element: HTMLElement) {\n\t\tconst lastFocusedItem = this.focusedItem;\n\t\tthis.setFocusedItem(element);\n\n\t\tif (lastFocusedItem !== this.focusedItem) {\n\t\t\tthis.updateFocus();\n\t\t}\n\t}\n\n\tprivate setFocusedItem(element: HTMLElement): void {\n\t\tfor (let i = 0; i < this.actionsList.children.length; i++) {\n\t\t\tconst elem = this.actionsList.children[i];\n\t\t\tif (element === elem) {\n\t\t\t\tthis.focusedItem = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected override updateFocus(fromRight?: boolean): void {\n\t\tsuper.updateFocus(fromRight, true, true);\n\n\t\tif (typeof this.focusedItem !== 'undefined') {\n\t\t\t// Workaround for #80047 caused by an issue in chromium\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=414283\n\t\t\t// When that's fixed, just call this.scrollableElement.scanDomNode()\n\t\t\tthis.scrollableElement.setScrollPosition({\n\t\t\t\tscrollTop: Math.round(this.menuElement.scrollTop)\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate doGetActionViewItem(action: IAction, options: IMenuOptions, parentData: ISubMenuData): BaseActionViewItem {\n\t\tif (action instanceof Separator) {\n\t\t\treturn new MenuSeparatorActionViewItem(options.context, action, { icon: true }, this.menuStyles);\n\t\t} else if (action instanceof SubmenuAction) {\n\t\t\tconst menuActionViewItem = new SubmenuMenuActionViewItem(action, action.actions, parentData, { ...options, submenuIds: new Set([...(options.submenuIds || []), action.id]) }, this.menuStyles);\n\n\t\t\tif (options.enableMnemonics) {\n\t\t\t\tconst mnemonic = menuActionViewItem.getMnemonic();\n\t\t\t\tif (mnemonic && menuActionViewItem.isEnabled()) {\n\t\t\t\t\tconst actionViewItems = this.mnemonics.get(mnemonic);\n\t\t\t\t\tif (actionViewItems !== undefined) {\n\t\t\t\t\t\tactionViewItems.push(menuActionViewItem);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.mnemonics.set(mnemonic, [menuActionViewItem]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn menuActionViewItem;\n\t\t} else {\n\t\t\tconst keybindingLabel = options.getKeyBinding?.(action)?.getLabel();\n\t\t\tconst menuItemOptions: IMenuItemOptions = {\n\t\t\t\tenableMnemonics: options.enableMnemonics,\n\t\t\t\tuseEventAsContext: options.useEventAsContext,\n\t\t\t\tkeybinding: keybindingLabel,\n\t\t\t};\n\n\t\t\tconst menuActionViewItem = new BaseMenuActionViewItem(options.context, action, menuItemOptions, this.menuStyles);\n\n\t\t\tif (options.enableMnemonics) {\n\t\t\t\tconst mnemonic = menuActionViewItem.getMnemonic();\n\t\t\t\tif (mnemonic && menuActionViewItem.isEnabled()) {\n\t\t\t\t\tconst actionViewItems = this.mnemonics.get(mnemonic);\n\t\t\t\t\tif (actionViewItems !== undefined) {\n\t\t\t\t\t\tactionViewItems.push(menuActionViewItem);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.mnemonics.set(mnemonic, [menuActionViewItem]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn menuActionViewItem;\n\t\t}\n\t}\n}\n\ninterface IMenuItemOptions extends IActionViewItemOptions {\n\treadonly enableMnemonics?: boolean;\n}\n\nclass BaseMenuActionViewItem extends BaseActionViewItem {\n\n\tpublic container: HTMLElement | undefined;\n\n\tprotected override options: IMenuItemOptions;\n\tprotected item: HTMLElement | undefined;\n\n\tprivate runOnceToEnableMouseUp: RunOnceScheduler;\n\tprivate label: HTMLElement | undefined;\n\tprivate check: HTMLElement | undefined;\n\tprivate mnemonic: string | undefined;\n\tprivate cssClass: string;\n\n\tconstructor(ctx: unknown, action: IAction, options: IMenuItemOptions, protected readonly menuStyle: IMenuStyles) {\n\t\toptions = {\n\t\t\t...options,\n\t\t\tisMenu: true,\n\t\t\ticon: options.icon !== undefined ? options.icon : false,\n\t\t\tlabel: options.label !== undefined ? options.label : true,\n\t\t};\n\t\tsuper(action, action, options);\n\n\t\tthis.options = options;\n\t\tthis.cssClass = '';\n\n\t\t// Set mnemonic\n\t\tif (this.options.label && options.enableMnemonics) {\n\t\t\tconst label = this.action.label;\n\t\t\tif (label) {\n\t\t\t\tconst matches = MENU_MNEMONIC_REGEX.exec(label);\n\t\t\t\tif (matches) {\n\t\t\t\t\tthis.mnemonic = (!!matches[1] ? matches[1] : matches[3]).toLocaleLowerCase();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add mouse up listener later to avoid accidental clicks\n\t\tthis.runOnceToEnableMouseUp = new RunOnceScheduler(() => {\n\t\t\tif (!this.element) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._register(addDisposableListener(this.element, EventType.MOUSE_UP, e => {\n\t\t\t\t// removed default prevention as it conflicts\n\t\t\t\t// with BaseActionViewItem #101537\n\t\t\t\t// add back if issues arise and link new issue\n\t\t\t\tEventHelper.stop(e, true);\n\n\t\t\t\t// See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Interact_with_the_clipboard\n\t\t\t\t// > Writing to the clipboard\n\t\t\t\t// > You can use the \"cut\" and \"copy\" commands without any special\n\t\t\t\t// permission if you are using them in a short-lived event handler\n\t\t\t\t// for a user action (for example, a click handler).\n\n\t\t\t\t// => to get the Copy and Paste context menu actions working on Firefox,\n\t\t\t\t// there should be no timeout here\n\t\t\t\tif (isFirefox) {\n\t\t\t\t\tconst mouseEvent = new StandardMouseEvent(getWindow(this.element), e);\n\n\t\t\t\t\t// Allowing right click to trigger the event causes the issue described below,\n\t\t\t\t\t// but since the solution below does not work in FF, we must disable right click\n\t\t\t\t\tif (mouseEvent.rightButton) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.onClick(e);\n\t\t\t\t}\n\n\t\t\t\t// In all other cases, set timeout to allow context menu cancellation to trigger\n\t\t\t\t// otherwise the action will destroy the menu and a second context menu\n\t\t\t\t// will still trigger for right click.\n\t\t\t\telse {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.onClick(e);\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\tthis._register(addDisposableListener(this.element, EventType.CONTEXT_MENU, e => {\n\t\t\t\tEventHelper.stop(e, true);\n\t\t\t}));\n\t\t}, 100);\n\n\t\tthis._register(this.runOnceToEnableMouseUp);\n\t}\n\n\toverride render(container: HTMLElement): void {\n\t\tsuper.render(container);\n\n\t\tif (!this.element) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.container = container;\n\n\t\tthis.item = append(this.element, $('a.action-menu-item'));\n\t\tif (this._action.id === Separator.ID) {\n\t\t\t// A separator is a presentation item\n\t\t\tthis.item.setAttribute('role', 'presentation');\n\t\t} else {\n\t\t\tthis.item.setAttribute('role', 'menuitem');\n\t\t\tif (this.mnemonic) {\n\t\t\t\tthis.item.setAttribute('aria-keyshortcuts', `${this.mnemonic}`);\n\t\t\t}\n\t\t}\n\n\t\tthis.check = append(this.item, $('span.menu-item-check' + ThemeIcon.asCSSSelector(Codicon.menuSelection)));\n\t\tthis.check.setAttribute('role', 'none');\n\n\t\tthis.label = append(this.item, $('span.action-label'));\n\n\t\tif (this.options.label && this.options.keybinding) {\n\t\t\tappend(this.item, $('span.keybinding')).textContent = this.options.keybinding;\n\t\t}\n\n\t\t// Adds mouse up listener to actually run the action\n\t\tthis.runOnceToEnableMouseUp.schedule();\n\n\t\tthis.updateClass();\n\t\tthis.updateLabel();\n\t\tthis.updateTooltip();\n\t\tthis.updateEnabled();\n\t\tthis.updateChecked();\n\n\t\tthis.applyStyle();\n\t}\n\n\toverride blur(): void {\n\t\tsuper.blur();\n\t\tthis.applyStyle();\n\t}\n\n\toverride focus(): void {\n\t\tsuper.focus();\n\n\t\tthis.item?.focus();\n\n\t\tthis.applyStyle();\n\t}\n\n\tupdatePositionInSet(pos: number, setSize: number): void {\n\t\tif (this.item) {\n\t\t\tthis.item.setAttribute('aria-posinset', `${pos}`);\n\t\t\tthis.item.setAttribute('aria-setsize', `${setSize}`);\n\t\t}\n\t}\n\n\tprotected override updateLabel(): void {\n\t\tif (!this.label) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.label) {\n\t\t\tclearNode(this.label);\n\n\t\t\tlet label = stripIcons(this.action.label);\n\t\t\tif (label) {\n\t\t\t\tconst cleanLabel = cleanMnemonic(label);\n\t\t\t\tif (!this.options.enableMnemonics) {\n\t\t\t\t\tlabel = cleanLabel;\n\t\t\t\t}\n\n\t\t\t\tthis.label.setAttribute('aria-label', cleanLabel.replace(/&&/g, '&'));\n\n\t\t\t\tconst matches = MENU_MNEMONIC_REGEX.exec(label);\n\n\t\t\t\tif (matches) {\n\t\t\t\t\tlabel = strings.escape(label);\n\n\t\t\t\t\t// This is global, reset it\n\t\t\t\t\tMENU_ESCAPED_MNEMONIC_REGEX.lastIndex = 0;\n\t\t\t\t\tlet escMatch = MENU_ESCAPED_MNEMONIC_REGEX.exec(label);\n\n\t\t\t\t\t// We can't use negative lookbehind so if we match our negative and skip\n\t\t\t\t\twhile (escMatch && escMatch[1]) {\n\t\t\t\t\t\tescMatch = MENU_ESCAPED_MNEMONIC_REGEX.exec(label);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst replaceDoubleEscapes = (str: string) => str.replace(/&amp;&amp;/g, '&amp;');\n\n\t\t\t\t\tif (escMatch) {\n\t\t\t\t\t\tthis.label.append(\n\t\t\t\t\t\t\tstrings.ltrim(replaceDoubleEscapes(label.substr(0, escMatch.index)), ' '),\n\t\t\t\t\t\t\t$('u', { 'aria-hidden': 'true' },\n\t\t\t\t\t\t\t\tescMatch[3]),\n\t\t\t\t\t\t\tstrings.rtrim(replaceDoubleEscapes(label.substr(escMatch.index + escMatch[0].length)), ' '));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.label.textContent = replaceDoubleEscapes(label).trim();\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.item?.setAttribute('aria-keyshortcuts', (!!matches[1] ? matches[1] : matches[3]).toLocaleLowerCase());\n\t\t\t\t} else {\n\t\t\t\t\tthis.label.textContent = label.replace(/&&/g, '&').trim();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected override updateTooltip(): void {\n\t\t// menus should function like native menus and they do not have tooltips\n\t}\n\n\tprotected override updateClass(): void {\n\t\tif (this.cssClass && this.item) {\n\t\t\tthis.item.classList.remove(...this.cssClass.split(' '));\n\t\t}\n\t\tif (this.options.icon && this.label) {\n\t\t\tthis.cssClass = this.action.class || '';\n\t\t\tthis.label.classList.add('icon');\n\t\t\tif (this.cssClass) {\n\t\t\t\tthis.label.classList.add(...this.cssClass.split(' '));\n\t\t\t}\n\t\t\tthis.updateEnabled();\n\t\t} else if (this.label) {\n\t\t\tthis.label.classList.remove('icon');\n\t\t}\n\t}\n\n\tprotected override updateEnabled(): void {\n\t\tif (this.action.enabled) {\n\t\t\tif (this.element) {\n\t\t\t\tthis.element.classList.remove('disabled');\n\t\t\t\tthis.element.removeAttribute('aria-disabled');\n\t\t\t}\n\n\t\t\tif (this.item) {\n\t\t\t\tthis.item.classList.remove('disabled');\n\t\t\t\tthis.item.removeAttribute('aria-disabled');\n\t\t\t\tthis.item.tabIndex = 0;\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.element) {\n\t\t\t\tthis.element.classList.add('disabled');\n\t\t\t\tthis.element.setAttribute('aria-disabled', 'true');\n\t\t\t}\n\n\t\t\tif (this.item) {\n\t\t\t\tthis.item.classList.add('disabled');\n\t\t\t\tthis.item.setAttribute('aria-disabled', 'true');\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected override updateChecked(): void {\n\t\tif (!this.item) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst checked = this.action.checked;\n\t\tthis.item.classList.toggle('checked', !!checked);\n\t\tif (checked !== undefined) {\n\t\t\tthis.item.setAttribute('role', 'menuitemcheckbox');\n\t\t\tthis.item.setAttribute('aria-checked', checked ? 'true' : 'false');\n\t\t} else {\n\t\t\tthis.item.setAttribute('role', 'menuitem');\n\t\t\tthis.item.setAttribute('aria-checked', '');\n\t\t}\n\t}\n\n\tgetMnemonic(): string | undefined {\n\t\treturn this.mnemonic;\n\t}\n\n\tprotected applyStyle(): void {\n\t\tconst isSelected = this.element && this.element.classList.contains('focused');\n\t\tconst fgColor = isSelected && this.menuStyle.selectionForegroundColor ? this.menuStyle.selectionForegroundColor : this.menuStyle.foregroundColor;\n\t\tconst bgColor = isSelected && this.menuStyle.selectionBackgroundColor ? this.menuStyle.selectionBackgroundColor : undefined;\n\t\tconst outline = isSelected && this.menuStyle.selectionBorderColor ? `1px solid ${this.menuStyle.selectionBorderColor}` : '';\n\t\tconst outlineOffset = isSelected && this.menuStyle.selectionBorderColor ? `-1px` : '';\n\n\t\tif (this.item) {\n\t\t\tthis.item.style.color = fgColor ?? '';\n\t\t\tthis.item.style.backgroundColor = bgColor ?? '';\n\t\t\tthis.item.style.outline = outline;\n\t\t\tthis.item.style.outlineOffset = outlineOffset;\n\t\t}\n\n\t\tif (this.check) {\n\t\t\tthis.check.style.color = fgColor ?? '';\n\t\t}\n\t}\n}\n\nclass SubmenuMenuActionViewItem extends BaseMenuActionViewItem {\n\tprivate mysubmenu: Menu | null = null;\n\tprivate submenuContainer: HTMLElement | undefined;\n\tprivate submenuIndicator: HTMLElement | undefined;\n\tprivate readonly submenuDisposables = this._register(new DisposableStore());\n\tprivate mouseOver: boolean = false;\n\tprivate showScheduler: RunOnceScheduler;\n\tprivate hideScheduler: RunOnceScheduler;\n\tprivate expandDirection: IMenuDirection;\n\n\tconstructor(\n\t\taction: IAction,\n\t\tprivate submenuActions: ReadonlyArray<IAction>,\n\t\tprivate parentData: ISubMenuData,\n\t\tprivate submenuOptions: IMenuOptions,\n\t\tmenuStyles: IMenuStyles\n\t) {\n\t\tsuper(action, action, submenuOptions, menuStyles);\n\n\t\tthis.expandDirection = submenuOptions && submenuOptions.expandDirection !== undefined ? submenuOptions.expandDirection : { horizontal: HorizontalDirection.Right, vertical: VerticalDirection.Below };\n\n\t\tthis.showScheduler = new RunOnceScheduler(() => {\n\t\t\tif (this.mouseOver) {\n\t\t\t\tthis.cleanupExistingSubmenu(false);\n\t\t\t\tthis.createSubmenu(false);\n\t\t\t}\n\t\t}, 250);\n\n\t\tthis.hideScheduler = new RunOnceScheduler(() => {\n\t\t\tif (this.element && (!isAncestor(getActiveElement(), this.element) && this.parentData.submenu === this.mysubmenu)) {\n\t\t\t\tthis.parentData.parent.focus(false);\n\t\t\t\tthis.cleanupExistingSubmenu(true);\n\t\t\t}\n\t\t}, 750);\n\t}\n\n\toverride render(container: HTMLElement): void {\n\t\tsuper.render(container);\n\n\t\tif (!this.element) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.item) {\n\t\t\tthis.item.classList.add('monaco-submenu-item');\n\t\t\tthis.item.tabIndex = 0;\n\t\t\tthis.item.setAttribute('aria-haspopup', 'true');\n\t\t\tthis.updateAriaExpanded('false');\n\t\t\tthis.submenuIndicator = append(this.item, $('span.submenu-indicator' + ThemeIcon.asCSSSelector(Codicon.menuSubmenu)));\n\t\t\tthis.submenuIndicator.setAttribute('aria-hidden', 'true');\n\t\t}\n\n\t\tthis._register(addDisposableListener(this.element, EventType.KEY_UP, e => {\n\t\t\tconst event = new StandardKeyboardEvent(e);\n\t\t\tif (event.equals(KeyCode.RightArrow) || event.equals(KeyCode.Enter)) {\n\t\t\t\tEventHelper.stop(e, true);\n\n\t\t\t\tthis.createSubmenu(true);\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(addDisposableListener(this.element, EventType.KEY_DOWN, e => {\n\t\t\tconst event = new StandardKeyboardEvent(e);\n\n\t\t\tif (getActiveElement() === this.item) {\n\t\t\t\tif (event.equals(KeyCode.RightArrow) || event.equals(KeyCode.Enter)) {\n\t\t\t\t\tEventHelper.stop(e, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(addDisposableListener(this.element, EventType.MOUSE_OVER, e => {\n\t\t\tif (!this.mouseOver) {\n\t\t\t\tthis.mouseOver = true;\n\n\t\t\t\tthis.showScheduler.schedule();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(addDisposableListener(this.element, EventType.MOUSE_LEAVE, e => {\n\t\t\tthis.mouseOver = false;\n\t\t}));\n\n\t\tthis._register(addDisposableListener(this.element, EventType.FOCUS_OUT, e => {\n\t\t\tif (this.element && !isAncestor(getActiveElement(), this.element)) {\n\t\t\t\tthis.hideScheduler.schedule();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this.parentData.parent.onScroll(() => {\n\t\t\tif (this.parentData.submenu === this.mysubmenu) {\n\t\t\t\tthis.parentData.parent.focus(false);\n\t\t\t\tthis.cleanupExistingSubmenu(true);\n\t\t\t}\n\t\t}));\n\t}\n\n\tprotected override updateEnabled(): void {\n\t\t// override on submenu entry\n\t\t// native menus do not observe enablement on sumbenus\n\t\t// we mimic that behavior\n\t}\n\n\toverride onClick(e: EventLike): void {\n\t\t// stop clicking from trying to run an action\n\t\tEventHelper.stop(e, true);\n\n\t\tthis.cleanupExistingSubmenu(false);\n\t\tthis.createSubmenu(true);\n\t}\n\n\tprivate cleanupExistingSubmenu(force: boolean): void {\n\t\tif (this.parentData.submenu && (force || (this.parentData.submenu !== this.mysubmenu))) {\n\n\t\t\t// disposal may throw if the submenu has already been removed\n\t\t\ttry {\n\t\t\t\tthis.parentData.submenu.dispose();\n\t\t\t} catch { }\n\n\t\t\tthis.parentData.submenu = undefined;\n\t\t\tthis.updateAriaExpanded('false');\n\t\t\tif (this.submenuContainer) {\n\t\t\t\tthis.submenuDisposables.clear();\n\t\t\t\tthis.submenuContainer = undefined;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate calculateSubmenuMenuLayout(windowDimensions: Dimension, submenu: Dimension, entry: IDomNodePagePosition, expandDirection: IMenuDirection): { top: number; left: number } {\n\t\tconst ret = { top: 0, left: 0 };\n\n\t\t// Start with horizontal\n\t\tret.left = layout(windowDimensions.width, submenu.width, { position: expandDirection.horizontal === HorizontalDirection.Right ? LayoutAnchorPosition.Before : LayoutAnchorPosition.After, offset: entry.left, size: entry.width });\n\n\t\t// We don't have enough room to layout the menu fully, so we are overlapping the menu\n\t\tif (ret.left >= entry.left && ret.left < entry.left + entry.width) {\n\t\t\tif (entry.left + 10 + submenu.width <= windowDimensions.width) {\n\t\t\t\tret.left = entry.left + 10;\n\t\t\t}\n\n\t\t\tentry.top += 10;\n\t\t\tentry.height = 0;\n\t\t}\n\n\t\t// Now that we have a horizontal position, try layout vertically\n\t\tret.top = layout(windowDimensions.height, submenu.height, { position: LayoutAnchorPosition.Before, offset: entry.top, size: 0 });\n\n\t\t// We didn't have enough room below, but we did above, so we shift down to align the menu\n\t\tif (ret.top + submenu.height === entry.top && ret.top + entry.height + submenu.height <= windowDimensions.height) {\n\t\t\tret.top += entry.height;\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\tprivate createSubmenu(selectFirstItem = true): void {\n\t\tif (!this.element) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.parentData.submenu) {\n\t\t\tthis.updateAriaExpanded('true');\n\t\t\tthis.submenuContainer = append(this.element, $('div.monaco-submenu'));\n\t\t\tthis.submenuContainer.classList.add('menubar-menu-items-holder', 'context-view');\n\n\t\t\t// Set the top value of the menu container before construction\n\t\t\t// This allows the menu constructor to calculate the proper max height\n\t\t\tconst computedStyles = getWindow(this.parentData.parent.domNode).getComputedStyle(this.parentData.parent.domNode);\n\t\t\tconst paddingTop = parseFloat(computedStyles.paddingTop || '0') || 0;\n\t\t\tthis.submenuContainer.style.position = 'fixed';\n\t\t\tthis.submenuContainer.style.top = '0';\n\t\t\tthis.submenuContainer.style.left = '0';\n\t\t\t// Fix to #263546, for submenu of treeView view/item/context z-index issue - ensure submenu appears above other elements\n\t\t\tthis.submenuContainer.style.zIndex = '1';\n\n\t\t\tthis.parentData.submenu = new Menu(this.submenuContainer, this.submenuActions.length ? this.submenuActions : [new EmptySubmenuAction()], this.submenuOptions, this.menuStyle);\n\n\t\t\t// layout submenu\n\t\t\tconst entryBox = this.element.getBoundingClientRect();\n\t\t\tconst entryBoxUpdated = {\n\t\t\t\ttop: entryBox.top - paddingTop,\n\t\t\t\tleft: entryBox.left,\n\t\t\t\theight: entryBox.height + 2 * paddingTop,\n\t\t\t\twidth: entryBox.width\n\t\t\t};\n\n\t\t\tconst viewBox = this.submenuContainer.getBoundingClientRect();\n\n\t\t\tconst window = getWindow(this.element);\n\t\t\tconst { top, left } = this.calculateSubmenuMenuLayout(new Dimension(window.innerWidth, window.innerHeight), Dimension.lift(viewBox), entryBoxUpdated, this.expandDirection);\n\t\t\t// subtract offsets caused by transform parent\n\t\t\tthis.submenuContainer.style.left = `${left - viewBox.left}px`;\n\t\t\tthis.submenuContainer.style.top = `${top - viewBox.top}px`;\n\n\t\t\tthis.submenuDisposables.add(addDisposableListener(this.submenuContainer, EventType.KEY_UP, e => {\n\t\t\t\tconst event = new StandardKeyboardEvent(e);\n\t\t\t\tif (event.equals(KeyCode.LeftArrow)) {\n\t\t\t\t\tEventHelper.stop(e, true);\n\n\t\t\t\t\tthis.parentData.parent.focus();\n\n\t\t\t\t\tthis.cleanupExistingSubmenu(true);\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\tthis.submenuDisposables.add(addDisposableListener(this.submenuContainer, EventType.KEY_DOWN, e => {\n\t\t\t\tconst event = new StandardKeyboardEvent(e);\n\t\t\t\tif (event.equals(KeyCode.LeftArrow)) {\n\t\t\t\t\tEventHelper.stop(e, true);\n\t\t\t\t}\n\t\t\t}));\n\n\n\t\t\tthis.submenuDisposables.add(this.parentData.submenu.onDidCancel(() => {\n\t\t\t\tthis.parentData.parent.focus();\n\n\t\t\t\tthis.cleanupExistingSubmenu(true);\n\t\t\t}));\n\n\t\t\tthis.parentData.submenu.focus(selectFirstItem);\n\n\t\t\tthis.mysubmenu = this.parentData.submenu;\n\t\t} else {\n\t\t\tthis.parentData.submenu.focus(false);\n\t\t}\n\t}\n\n\tprivate updateAriaExpanded(value: string): void {\n\t\tif (this.item) {\n\t\t\tthis.item?.setAttribute('aria-expanded', value);\n\t\t}\n\t}\n\n\tprotected override applyStyle(): void {\n\t\tsuper.applyStyle();\n\n\t\tconst isSelected = this.element && this.element.classList.contains('focused');\n\t\tconst fgColor = isSelected && this.menuStyle.selectionForegroundColor ? this.menuStyle.selectionForegroundColor : this.menuStyle.foregroundColor;\n\n\t\tif (this.submenuIndicator) {\n\t\t\tthis.submenuIndicator.style.color = fgColor ?? '';\n\t\t}\n\t}\n\n\toverride dispose(): void {\n\t\tsuper.dispose();\n\n\t\tthis.hideScheduler.dispose();\n\n\t\tif (this.mysubmenu) {\n\t\t\tthis.mysubmenu.dispose();\n\t\t\tthis.mysubmenu = null;\n\t\t}\n\n\t\tif (this.submenuContainer) {\n\t\t\tthis.submenuContainer = undefined;\n\t\t}\n\t}\n}\n\nclass MenuSeparatorActionViewItem extends ActionViewItem {\n\tconstructor(context: unknown, action: IAction, options: IActionViewItemOptions, private readonly menuStyles: IMenuStyles) {\n\t\tsuper(context, action, options);\n\t}\n\n\toverride render(container: HTMLElement): void {\n\t\tsuper.render(container);\n\t\tif (this.label) {\n\t\t\tthis.label.style.borderBottomColor = this.menuStyles.separatorColor ? `${this.menuStyles.separatorColor}` : '';\n\t\t}\n\t}\n}\n\nexport function cleanMnemonic(label: string): string {\n\tconst regex = MENU_MNEMONIC_REGEX;\n\n\tconst matches = regex.exec(label);\n\tif (!matches) {\n\t\treturn label;\n\t}\n\n\tconst mnemonicInText = !matches[1];\n\n\treturn label.replace(regex, mnemonicInText ? '$2$3' : '').trim();\n}\n\nexport function formatRule(c: ThemeIcon) {\n\tconst fontCharacter = getCodiconFontCharacters()[c.id];\n\treturn `.codicon-${c.id}:before { content: '\\\\${fontCharacter.toString(16)}'; }`;\n}\n\nexport function getMenuWidgetCSS(style: IMenuStyles, isForShadowDom: boolean): string {\n\tlet 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\topacity: 0.7;\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\n\tif (isForShadowDom) {\n\t\t// Only define scrollbar styles when used inside shadow dom,\n\t\t// otherwise leave their styling to the global workbench styling.\n\t\tresult += `\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\t/* Fix for https://github.com/microsoft/vscode/issues/103170 */\n\t\t\t.monaco-menu .action-item .monaco-submenu {\n\t\t\t\tz-index: 1;\n\t\t\t}\n\t\t`;\n\n\t\t// Scrollbars\n\t\tconst scrollbarShadowColor = style.scrollbarShadow;\n\t\tif (scrollbarShadowColor) {\n\t\t\tresult += `\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\t\t}\n\n\t\tconst scrollbarSliderBackgroundColor = style.scrollbarSliderBackground;\n\t\tif (scrollbarSliderBackgroundColor) {\n\t\t\tresult += `\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\t\t}\n\n\t\tconst scrollbarSliderHoverBackgroundColor = style.scrollbarSliderHoverBackground;\n\t\tif (scrollbarSliderHoverBackgroundColor) {\n\t\t\tresult += `\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\t\t}\n\n\t\tconst scrollbarSliderActiveBackgroundColor = style.scrollbarSliderActiveBackground;\n\t\tif (scrollbarSliderActiveBackgroundColor) {\n\t\t\tresult += `\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\t\t}\n\t}\n\n\treturn result;\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 *--------------------------------------------------------------------------------------------*/\n\nimport { isFirefox } from '../../browser.js';\nimport { EventType as TouchEventType, Gesture } from '../../touch.js';\nimport { $, addDisposableListener, append, clearNode, Dimension, EventHelper, EventLike, EventType, getActiveElement, getWindow, IDomNodePagePosition, isAncestor, isInShadowDOM } from '../../dom.js';\nimport { createStyleSheet } from '../../domStylesheets.js';\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\nimport { StandardMouseEvent } from '../../mouseEvent.js';\nimport { ActionBar, ActionsOrientation, IActionViewItemProvider } from '../actionbar/actionbar.js';\nimport { ActionViewItem, BaseActionViewItem, IActionViewItemOptions } from '../actionbar/actionViewItems.js';\nimport { AnchorAlignment, layout, LayoutAnchorPosition } from '../contextview/contextview.js';\nimport { DomScrollableElement } from '../scrollbar/scrollableElement.js';\nimport { EmptySubmenuAction, IAction, IActionRunner, 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 { Event } from '../../../common/event.js';\nimport { stripIcons } from '../../../common/iconLabels.js';\nimport { KeyCode } from '../../../common/keyCodes.js';\nimport { ResolvedKeybinding } from '../../../common/keybindings.js';\nimport { DisposableStore } from '../../../common/lifecycle.js';\nimport { isLinux, isMacintosh } from '../../../common/platform.js';\nimport { ScrollbarVisibility, ScrollEvent } from '../../../common/scrollable.js';\nimport * as strings from '../../../common/strings.js';\n\nexport const MENU_MNEMONIC_REGEX = /\\(&([^\\s&])\\)|(^|[^&])&([^\\s&])/;\nexport const MENU_ESCAPED_MNEMONIC_REGEX = /(&amp;)?(&amp;)([^\\s&])/g;\n\n\n\nexport enum HorizontalDirection {\n\tRight,\n\tLeft\n}\n\nexport enum VerticalDirection {\n\tAbove,\n\tBelow\n}\n\nexport interface IMenuDirection {\n\thorizontal: HorizontalDirection;\n\tvertical: VerticalDirection;\n}\n\nexport interface IMenuOptions {\n\tcontext?: unknown;\n\tactionViewItemProvider?: IActionViewItemProvider;\n\tactionRunner?: IActionRunner;\n\tgetKeyBinding?: (action: IAction) => ResolvedKeybinding | undefined;\n\tariaLabel?: string;\n\tenableMnemonics?: boolean;\n\tanchorAlignment?: AnchorAlignment;\n\texpandDirection?: IMenuDirection;\n\tuseEventAsContext?: boolean;\n\tsubmenuIds?: Set<string>;\n}\n\nexport interface IMenuStyles {\n\tshadowColor: string | undefined;\n\tborderColor: string | undefined;\n\tforegroundColor: string | undefined;\n\tbackgroundColor: string | undefined;\n\tselectionForegroundColor: string | undefined;\n\tselectionBackgroundColor: string | undefined;\n\tselectionBorderColor: string | undefined;\n\tseparatorColor: string | undefined;\n\tscrollbarShadow: string | undefined;\n\tscrollbarSliderBackground: string | undefined;\n\tscrollbarSliderHoverBackground: string | undefined;\n\tscrollbarSliderActiveBackground: string | undefined;\n}\n\ninterface ISubMenuData {\n\tparent: Menu;\n\tsubmenu?: Menu;\n}\n\nexport class Menu extends ActionBar {\n\tprivate mnemonics: Map<string, Array<BaseMenuActionViewItem>>;\n\tprivate scrollableElement: DomScrollableElement;\n\tprivate menuElement: HTMLElement;\n\tstatic globalStyleSheet: HTMLStyleElement;\n\tprotected styleSheet: HTMLStyleElement | undefined;\n\n\tconstructor(container: HTMLElement, actions: ReadonlyArray<IAction>, options: IMenuOptions, private readonly menuStyles: IMenuStyles) {\n\t\tcontainer.classList.add('monaco-menu-container');\n\t\tcontainer.setAttribute('role', 'presentation');\n\t\tconst menuElement = document.createElement('div');\n\t\tmenuElement.classList.add('monaco-menu');\n\t\tmenuElement.setAttribute('role', 'presentation');\n\n\t\tsuper(menuElement, {\n\t\t\torientation: ActionsOrientation.VERTICAL,\n\t\t\tactionViewItemProvider: action => this.doGetActionViewItem(action, options, parentData),\n\t\t\tcontext: options.context,\n\t\t\tactionRunner: options.actionRunner,\n\t\t\tariaLabel: options.ariaLabel,\n\t\t\tariaRole: 'menu',\n\t\t\tfocusOnlyEnabledItems: true,\n\t\t\ttriggerKeys: { keys: [KeyCode.Enter, ...(isMacintosh || isLinux ? [KeyCode.Space] : [])], keyDown: true }\n\t\t});\n\n\t\tthis.menuElement = menuElement;\n\n\t\tthis.actionsList.tabIndex = 0;\n\n\t\tthis.initializeOrUpdateStyleSheet(container, menuStyles);\n\n\t\tthis._register(Gesture.addTarget(menuElement));\n\n\t\tthis._register(addDisposableListener(menuElement, EventType.KEY_DOWN, (e) => {\n\t\t\tconst event = new StandardKeyboardEvent(e);\n\n\t\t\t// Stop tab navigation of menus\n\t\t\tif (event.equals(KeyCode.Tab)) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t}));\n\n\t\tif (options.enableMnemonics) {\n\t\t\tthis._register(addDisposableListener(menuElement, EventType.KEY_DOWN, (e) => {\n\t\t\t\tconst key = e.key.toLocaleLowerCase();\n\t\t\t\tconst actions = this.mnemonics.get(key);\n\t\t\t\tif (actions !== undefined) {\n\t\t\t\t\tEventHelper.stop(e, true);\n\n\t\t\t\t\tif (actions.length === 1) {\n\t\t\t\t\t\tif (actions[0] instanceof SubmenuMenuActionViewItem && actions[0].container) {\n\t\t\t\t\t\t\tthis.focusItemByElement(actions[0].container);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tactions[0].onClick(e);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (actions.length > 1) {\n\t\t\t\t\t\tconst action = actions.shift();\n\t\t\t\t\t\tif (action && action.container) {\n\t\t\t\t\t\t\tthis.focusItemByElement(action.container);\n\t\t\t\t\t\t\tactions.push(action);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.mnemonics.set(key, actions);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\n\t\tif (isLinux) {\n\t\t\tthis._register(addDisposableListener(menuElement, EventType.KEY_DOWN, e => {\n\t\t\t\tconst event = new StandardKeyboardEvent(e);\n\n\t\t\t\tif (event.equals(KeyCode.Home) || event.equals(KeyCode.PageUp)) {\n\t\t\t\t\tthis.focusedItem = this.viewItems.length - 1;\n\t\t\t\t\tthis.focusNext();\n\t\t\t\t\tEventHelper.stop(e, true);\n\t\t\t\t} else if (event.equals(KeyCode.End) || event.equals(KeyCode.PageDown)) {\n\t\t\t\t\tthis.focusedItem = 0;\n\t\t\t\t\tthis.focusPrevious();\n\t\t\t\t\tEventHelper.stop(e, true);\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\n\t\tthis._register(addDisposableListener(this.domNode, EventType.MOUSE_OUT, e => {\n\t\t\tconst relatedTarget = e.relatedTarget as HTMLElement;\n\t\t\tif (!isAncestor(relatedTarget, this.domNode)) {\n\t\t\t\tthis.focusedItem = undefined;\n\t\t\t\tthis.updateFocus();\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(addDisposableListener(this.actionsList, EventType.MOUSE_OVER, e => {\n\t\t\tlet target = e.target as HTMLElement;\n\t\t\tif (!target || !isAncestor(target, this.actionsList) || target === this.actionsList) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twhile (target.parentElement !== this.actionsList && target.parentElement !== null) {\n\t\t\t\ttarget = target.parentElement;\n\t\t\t}\n\n\t\t\tif (target.classList.contains('action-item')) {\n\t\t\t\tconst lastFocusedItem = this.focusedItem;\n\t\t\t\tthis.setFocusedItem(target);\n\n\t\t\t\tif (lastFocusedItem !== this.focusedItem) {\n\t\t\t\t\tthis.updateFocus();\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\t// Support touch on actions list to focus items (needed for submenus)\n\t\tthis._register(Gesture.addTarget(this.actionsList));\n\t\tthis._register(addDisposableListener(this.actionsList, TouchEventType.Tap, e => {\n\t\t\tlet target = e.initialTarget as HTMLElement;\n\t\t\tif (!target || !isAncestor(target, this.actionsList) || target === this.actionsList) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twhile (target.parentElement !== this.actionsList && target.parentElement !== null) {\n\t\t\t\ttarget = target.parentElement;\n\t\t\t}\n\n\t\t\tif (target.classList.contains('action-item')) {\n\t\t\t\tconst lastFocusedItem = this.focusedItem;\n\t\t\t\tthis.setFocusedItem(target);\n\n\t\t\t\tif (lastFocusedItem !== this.focusedItem) {\n\t\t\t\t\tthis.updateFocus();\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\n\t\tconst parentData: ISubMenuData = {\n\t\t\tparent: this\n\t\t};\n\n\t\tthis.mnemonics = new Map<string, Array<BaseMenuActionViewItem>>();\n\n\t\t// Scroll Logic\n\t\tthis.scrollableElement = this._register(new DomScrollableElement(menuElement, {\n\t\t\talwaysConsumeMouseWheel: true,\n\t\t\thorizontal: ScrollbarVisibility.Hidden,\n\t\t\tvertical: ScrollbarVisibility.Visible,\n\t\t\tverticalScrollbarSize: 7,\n\t\t\thandleMouseWheel: true,\n\t\t\tuseShadows: true\n\t\t}));\n\n\t\tconst scrollElement = this.scrollableElement.getDomNode();\n\t\tscrollElement.style.position = '';\n\n\t\tthis.styleScrollElement(scrollElement, menuStyles);\n\n\t\t// Support scroll on menu drag\n\t\tthis._register(addDisposableListener(menuElement, TouchEventType.Change, e => {\n\t\t\tEventHelper.stop(e, true);\n\n\t\t\tconst scrollTop = this.scrollableElement.getScrollPosition().scrollTop;\n\t\t\tthis.scrollableElement.setScrollPosition({ scrollTop: scrollTop - e.translationY });\n\t\t}));\n\n\t\tthis._register(addDisposableListener(scrollElement, EventType.MOUSE_UP, e => {\n\t\t\t// Absorb clicks in menu dead space https://github.com/microsoft/vscode/issues/63575\n\t\t\t// We do this on the scroll element so the scroll bar doesn't dismiss the menu either\n\t\t\te.preventDefault();\n\t\t}));\n\n\t\tconst window = getWindow(container);\n\t\tmenuElement.style.maxHeight = `${Math.max(10, window.innerHeight - container.getBoundingClientRect().top - 35)}px`;\n\n\t\tactions = actions.filter((a, idx) => {\n\t\t\tif (options.submenuIds?.has(a.id)) {\n\t\t\t\tconsole.warn(`Found submenu cycle: ${a.id}`);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Filter out consecutive or useless separators\n\t\t\tif (a instanceof Separator) {\n\t\t\t\tif (idx === actions.length - 1 || idx === 0) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst prevAction = actions[idx - 1];\n\t\t\t\tif (prevAction instanceof Separator) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\n\t\tthis.push(actions, { icon: true, label: true, isMenu: true });\n\n\t\tcontainer.appendChild(this.scrollableElement.getDomNode());\n\t\tthis.scrollableElement.scanDomNode();\n\n\t\tthis.viewItems.filter(item => !(item instanceof MenuSeparatorActionViewItem)).forEach((item, index, array) => {\n\t\t\t(item as BaseMenuActionViewItem).updatePositionInSet(index + 1, array.length);\n\t\t});\n\t}\n\n\tprivate initializeOrUpdateStyleSheet(container: HTMLElement, style: IMenuStyles): void {\n\t\tif (!this.styleSheet) {\n\t\t\tif (isInShadowDOM(container)) {\n\t\t\t\tthis.styleSheet = createStyleSheet(container);\n\t\t\t} else {\n\t\t\t\tif (!Menu.globalStyleSheet) {\n\t\t\t\t\tMenu.globalStyleSheet = createStyleSheet();\n\t\t\t\t}\n\t\t\t\tthis.styleSheet = Menu.globalStyleSheet;\n\t\t\t}\n\t\t}\n\t\tthis.styleSheet.textContent = getMenuWidgetCSS(style, isInShadowDOM(container));\n\t}\n\n\tprivate styleScrollElement(scrollElement: HTMLElement, style: IMenuStyles): void {\n\n\t\tconst fgColor = style.foregroundColor ?? '';\n\t\tconst bgColor = style.backgroundColor ?? '';\n\t\tconst border = style.borderColor ? `1px solid ${style.borderColor}` : '';\n\t\tconst borderRadius = '5px';\n\t\tconst shadow = style.shadowColor ? `0 2px 8px ${style.shadowColor}` : '';\n\n\t\tscrollElement.style.outline = border;\n\t\tscrollElement.style.borderRadius = borderRadius;\n\t\tscrollElement.style.color = fgColor;\n\t\tscrollElement.style.backgroundColor = bgColor;\n\t\tscrollElement.style.boxShadow = shadow;\n\t}\n\n\toverride getContainer(): HTMLElement {\n\t\treturn this.scrollableElement.getDomNode();\n\t}\n\n\tget onScroll(): Event<ScrollEvent> {\n\t\treturn this.scrollableElement.onScroll;\n\t}\n\n\tprivate focusItemByElement(element: HTMLElement) {\n\t\tconst lastFocusedItem = this.focusedItem;\n\t\tthis.setFocusedItem(element);\n\n\t\tif (lastFocusedItem !== this.focusedItem) {\n\t\t\tthis.updateFocus();\n\t\t}\n\t}\n\n\tprivate setFocusedItem(element: HTMLElement): void {\n\t\tfor (let i = 0; i < this.actionsList.children.length; i++) {\n\t\t\tconst elem = this.actionsList.children[i];\n\t\t\tif (element === elem) {\n\t\t\t\tthis.focusedItem = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected override updateFocus(fromRight?: boolean): void {\n\t\tsuper.updateFocus(fromRight, true, true);\n\n\t\tif (typeof this.focusedItem !== 'undefined') {\n\t\t\t// Workaround for #80047 caused by an issue in chromium\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=414283\n\t\t\t// When that's fixed, just call this.scrollableElement.scanDomNode()\n\t\t\tthis.scrollableElement.setScrollPosition({\n\t\t\t\tscrollTop: Math.round(this.menuElement.scrollTop)\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate doGetActionViewItem(action: IAction, options: IMenuOptions, parentData: ISubMenuData): BaseActionViewItem {\n\t\tif (action instanceof Separator) {\n\t\t\treturn new MenuSeparatorActionViewItem(options.context, action, { icon: true }, this.menuStyles);\n\t\t} else if (action instanceof SubmenuAction) {\n\t\t\tconst menuActionViewItem = new SubmenuMenuActionViewItem(action, action.actions, parentData, { ...options, submenuIds: new Set([...(options.submenuIds || []), action.id]) }, this.menuStyles);\n\n\t\t\tif (options.enableMnemonics) {\n\t\t\t\tconst mnemonic = menuActionViewItem.getMnemonic();\n\t\t\t\tif (mnemonic && menuActionViewItem.isEnabled()) {\n\t\t\t\t\tconst actionViewItems = this.mnemonics.get(mnemonic);\n\t\t\t\t\tif (actionViewItems !== undefined) {\n\t\t\t\t\t\tactionViewItems.push(menuActionViewItem);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.mnemonics.set(mnemonic, [menuActionViewItem]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn menuActionViewItem;\n\t\t} else {\n\t\t\tconst keybindingLabel = options.getKeyBinding?.(action)?.getLabel();\n\t\t\tconst menuItemOptions: IMenuItemOptions = {\n\t\t\t\tenableMnemonics: options.enableMnemonics,\n\t\t\t\tuseEventAsContext: options.useEventAsContext,\n\t\t\t\tkeybinding: keybindingLabel,\n\t\t\t};\n\n\t\t\tconst menuActionViewItem = new BaseMenuActionViewItem(options.context, action, menuItemOptions, this.menuStyles);\n\n\t\t\tif (options.enableMnemonics) {\n\t\t\t\tconst mnemonic = menuActionViewItem.getMnemonic();\n\t\t\t\tif (mnemonic && menuActionViewItem.isEnabled()) {\n\t\t\t\t\tconst actionViewItems = this.mnemonics.get(mnemonic);\n\t\t\t\t\tif (actionViewItems !== undefined) {\n\t\t\t\t\t\tactionViewItems.push(menuActionViewItem);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.mnemonics.set(mnemonic, [menuActionViewItem]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn menuActionViewItem;\n\t\t}\n\t}\n}\n\ninterface IMenuItemOptions extends IActionViewItemOptions {\n\treadonly enableMnemonics?: boolean;\n}\n\nclass BaseMenuActionViewItem extends BaseActionViewItem {\n\n\tpublic container: HTMLElement | undefined;\n\n\tprotected override options: IMenuItemOptions;\n\tprotected item: HTMLElement | undefined;\n\n\tprivate runOnceToEnableMouseUp: RunOnceScheduler;\n\tprivate label: HTMLElement | undefined;\n\tprivate check: HTMLElement | undefined;\n\tprivate mnemonic: string | undefined;\n\tprivate cssClass: string;\n\n\tconstructor(ctx: unknown, action: IAction, options: IMenuItemOptions, protected readonly menuStyle: IMenuStyles) {\n\t\toptions = {\n\t\t\t...options,\n\t\t\tisMenu: true,\n\t\t\ticon: options.icon !== undefined ? options.icon : false,\n\t\t\tlabel: options.label !== undefined ? options.label : true,\n\t\t};\n\t\tsuper(action, action, options);\n\n\t\tthis.options = options;\n\t\tthis.cssClass = '';\n\n\t\t// Set mnemonic\n\t\tif (this.options.label && options.enableMnemonics) {\n\t\t\tconst label = this.action.label;\n\t\t\tif (label) {\n\t\t\t\tconst matches = MENU_MNEMONIC_REGEX.exec(label);\n\t\t\t\tif (matches) {\n\t\t\t\t\tthis.mnemonic = (!!matches[1] ? matches[1] : matches[3]).toLocaleLowerCase();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add mouse up listener later to avoid accidental clicks\n\t\tthis.runOnceToEnableMouseUp = new RunOnceScheduler(() => {\n\t\t\tif (!this.element) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._register(addDisposableListener(this.element, EventType.MOUSE_UP, e => {\n\t\t\t\t// removed default prevention as it conflicts\n\t\t\t\t// with BaseActionViewItem #101537\n\t\t\t\t// add back if issues arise and link new issue\n\t\t\t\tEventHelper.stop(e, true);\n\n\t\t\t\t// See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Interact_with_the_clipboard\n\t\t\t\t// > Writing to the clipboard\n\t\t\t\t// > You can use the \"cut\" and \"copy\" commands without any special\n\t\t\t\t// permission if you are using them in a short-lived event handler\n\t\t\t\t// for a user action (for example, a click handler).\n\n\t\t\t\t// => to get the Copy and Paste context menu actions working on Firefox,\n\t\t\t\t// there should be no timeout here\n\t\t\t\tif (isFirefox) {\n\t\t\t\t\tconst mouseEvent = new StandardMouseEvent(getWindow(this.element), e);\n\n\t\t\t\t\t// Allowing right click to trigger the event causes the issue described below,\n\t\t\t\t\t// but since the solution below does not work in FF, we must disable right click\n\t\t\t\t\tif (mouseEvent.rightButton) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.onClick(e);\n\t\t\t\t}\n\n\t\t\t\t// In all other cases, set timeout to allow context menu cancellation to trigger\n\t\t\t\t// otherwise the action will destroy the menu and a second context menu\n\t\t\t\t// will still trigger for right click.\n\t\t\t\telse {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.onClick(e);\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\tthis._register(addDisposableListener(this.element, EventType.CONTEXT_MENU, e => {\n\t\t\t\tEventHelper.stop(e, true);\n\t\t\t}));\n\t\t}, 100);\n\n\t\tthis._register(this.runOnceToEnableMouseUp);\n\t}\n\n\toverride render(container: HTMLElement): void {\n\t\tsuper.render(container);\n\n\t\tif (!this.element) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.container = container;\n\n\t\tthis.item = append(this.element, $('a.action-menu-item'));\n\t\tif (this._action.id === Separator.ID) {\n\t\t\t// A separator is a presentation item\n\t\t\tthis.item.setAttribute('role', 'presentation');\n\t\t} else {\n\t\t\tthis.item.setAttribute('role', 'menuitem');\n\t\t\tif (this.mnemonic) {\n\t\t\t\tthis.item.setAttribute('aria-keyshortcuts', `${this.mnemonic}`);\n\t\t\t}\n\t\t}\n\n\t\tthis.check = append(this.item, $('span.menu-item-check' + ThemeIcon.asCSSSelector(Codicon.menuSelection)));\n\t\tthis.check.setAttribute('role', 'none');\n\n\t\tthis.label = append(this.item, $('span.action-label'));\n\n\t\tif (this.options.label && this.options.keybinding) {\n\t\t\tappend(this.item, $('span.keybinding')).textContent = this.options.keybinding;\n\t\t}\n\n\t\t// Adds mouse up listener to actually run the action\n\t\tthis.runOnceToEnableMouseUp.schedule();\n\n\t\tthis.updateClass();\n\t\tthis.updateLabel();\n\t\tthis.updateTooltip();\n\t\tthis.updateEnabled();\n\t\tthis.updateChecked();\n\n\t\tthis.applyStyle();\n\t}\n\n\toverride blur(): void {\n\t\tsuper.blur();\n\t\tthis.applyStyle();\n\t}\n\n\toverride focus(): void {\n\t\tsuper.focus();\n\n\t\tthis.item?.focus();\n\n\t\tthis.applyStyle();\n\t}\n\n\tupdatePositionInSet(pos: number, setSize: number): void {\n\t\tif (this.item) {\n\t\t\tthis.item.setAttribute('aria-posinset', `${pos}`);\n\t\t\tthis.item.setAttribute('aria-setsize', `${setSize}`);\n\t\t}\n\t}\n\n\tprotected override updateLabel(): void {\n\t\tif (!this.label) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.label) {\n\t\t\tclearNode(this.label);\n\n\t\t\tlet label = stripIcons(this.action.label);\n\t\t\tif (label) {\n\t\t\t\tconst cleanLabel = cleanMnemonic(label);\n\t\t\t\tif (!this.options.enableMnemonics) {\n\t\t\t\t\tlabel = cleanLabel;\n\t\t\t\t}\n\n\t\t\t\tthis.label.setAttribute('aria-label', cleanLabel.replace(/&&/g, '&'));\n\n\t\t\t\tconst matches = MENU_MNEMONIC_REGEX.exec(label);\n\n\t\t\t\tif (matches) {\n\t\t\t\t\tlabel = strings.escape(label);\n\n\t\t\t\t\t// This is global, reset it\n\t\t\t\t\tMENU_ESCAPED_MNEMONIC_REGEX.lastIndex = 0;\n\t\t\t\t\tlet escMatch = MENU_ESCAPED_MNEMONIC_REGEX.exec(label);\n\n\t\t\t\t\t// We can't use negative lookbehind so if we match our negative and skip\n\t\t\t\t\twhile (escMatch && escMatch[1]) {\n\t\t\t\t\t\tescMatch = MENU_ESCAPED_MNEMONIC_REGEX.exec(label);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst replaceDoubleEscapes = (str: string) => str.replace(/&amp;&amp;/g, '&amp;');\n\n\t\t\t\t\tif (escMatch) {\n\t\t\t\t\t\tthis.label.append(\n\t\t\t\t\t\t\tstrings.ltrim(replaceDoubleEscapes(label.substr(0, escMatch.index)), ' '),\n\t\t\t\t\t\t\t$('u', { 'aria-hidden': 'true' },\n\t\t\t\t\t\t\t\tescMatch[3]),\n\t\t\t\t\t\t\tstrings.rtrim(replaceDoubleEscapes(label.substr(escMatch.index + escMatch[0].length)), ' '));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.label.textContent = replaceDoubleEscapes(label).trim();\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.item?.setAttribute('aria-keyshortcuts', (!!matches[1] ? matches[1] : matches[3]).toLocaleLowerCase());\n\t\t\t\t} else {\n\t\t\t\t\tthis.label.textContent = label.replace(/&&/g, '&').trim();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected override updateTooltip(): void {\n\t\t// menus should function like native menus and they do not have tooltips\n\t}\n\n\tprotected override updateClass(): void {\n\t\tif (this.cssClass && this.item) {\n\t\t\tthis.item.classList.remove(...this.cssClass.split(' '));\n\t\t}\n\t\tif (this.options.icon && this.label) {\n\t\t\tthis.cssClass = this.action.class || '';\n\t\t\tthis.label.classList.add('icon');\n\t\t\tif (this.cssClass) {\n\t\t\t\tthis.label.classList.add(...this.cssClass.split(' '));\n\t\t\t}\n\t\t\tthis.updateEnabled();\n\t\t} else if (this.label) {\n\t\t\tthis.label.classList.remove('icon');\n\t\t}\n\t}\n\n\tprotected override updateEnabled(): void {\n\t\tif (this.action.enabled) {\n\t\t\tif (this.element) {\n\t\t\t\tthis.element.classList.remove('disabled');\n\t\t\t\tthis.element.removeAttribute('aria-disabled');\n\t\t\t}\n\n\t\t\tif (this.item) {\n\t\t\t\tthis.item.classList.remove('disabled');\n\t\t\t\tthis.item.removeAttribute('aria-disabled');\n\t\t\t\tthis.item.tabIndex = 0;\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.element) {\n\t\t\t\tthis.element.classList.add('disabled');\n\t\t\t\tthis.element.setAttribute('aria-disabled', 'true');\n\t\t\t}\n\n\t\t\tif (this.item) {\n\t\t\t\tthis.item.classList.add('disabled');\n\t\t\t\tthis.item.setAttribute('aria-disabled', 'true');\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected override updateChecked(): void {\n\t\tif (!this.item) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst checked = this.action.checked;\n\t\tthis.item.classList.toggle('checked', !!checked);\n\t\tif (checked !== undefined) {\n\t\t\tthis.item.setAttribute('role', 'menuitemcheckbox');\n\t\t\tthis.item.setAttribute('aria-checked', checked ? 'true' : 'false');\n\t\t} else {\n\t\t\tthis.item.setAttribute('role', 'menuitem');\n\t\t\tthis.item.setAttribute('aria-checked', '');\n\t\t}\n\t}\n\n\tgetMnemonic(): string | undefined {\n\t\treturn this.mnemonic;\n\t}\n\n\tprotected applyStyle(): void {\n\t\tconst isSelected = this.element && this.element.classList.contains('focused');\n\t\tconst fgColor = isSelected && this.menuStyle.selectionForegroundColor ? this.menuStyle.selectionForegroundColor : this.menuStyle.foregroundColor;\n\t\tconst bgColor = isSelected && this.menuStyle.selectionBackgroundColor ? this.menuStyle.selectionBackgroundColor : undefined;\n\t\tconst outline = isSelected && this.menuStyle.selectionBorderColor ? `1px solid ${this.menuStyle.selectionBorderColor}` : '';\n\t\tconst outlineOffset = isSelected && this.menuStyle.selectionBorderColor ? `-1px` : '';\n\n\t\tif (this.item) {\n\t\t\tthis.item.style.color = fgColor ?? '';\n\t\t\tthis.item.style.backgroundColor = bgColor ?? '';\n\t\t\tthis.item.style.outline = outline;\n\t\t\tthis.item.style.outlineOffset = outlineOffset;\n\t\t}\n\n\t\tif (this.check) {\n\t\t\tthis.check.style.color = fgColor ?? '';\n\t\t}\n\t}\n}\n\nclass SubmenuMenuActionViewItem extends BaseMenuActionViewItem {\n\tprivate mysubmenu: Menu | null = null;\n\tprivate submenuContainer: HTMLElement | undefined;\n\tprivate submenuIndicator: HTMLElement | undefined;\n\tprivate readonly submenuDisposables = this._register(new DisposableStore());\n\tprivate mouseOver: boolean = false;\n\tprivate showScheduler: RunOnceScheduler;\n\tprivate hideScheduler: RunOnceScheduler;\n\tprivate expandDirection: IMenuDirection;\n\n\tconstructor(\n\t\taction: IAction,\n\t\tprivate submenuActions: ReadonlyArray<IAction>,\n\t\tprivate parentData: ISubMenuData,\n\t\tprivate submenuOptions: IMenuOptions,\n\t\tmenuStyles: IMenuStyles\n\t) {\n\t\tsuper(action, action, submenuOptions, menuStyles);\n\n\t\tthis.expandDirection = submenuOptions && submenuOptions.expandDirection !== undefined ? submenuOptions.expandDirection : { horizontal: HorizontalDirection.Right, vertical: VerticalDirection.Below };\n\n\t\tthis.showScheduler = new RunOnceScheduler(() => {\n\t\t\tif (this.mouseOver) {\n\t\t\t\tthis.cleanupExistingSubmenu(false);\n\t\t\t\tthis.createSubmenu(false);\n\t\t\t}\n\t\t}, 250);\n\n\t\tthis.hideScheduler = new RunOnceScheduler(() => {\n\t\t\tif (this.element && (!isAncestor(getActiveElement(), this.element) && this.parentData.submenu === this.mysubmenu)) {\n\t\t\t\tthis.parentData.parent.focus(false);\n\t\t\t\tthis.cleanupExistingSubmenu(true);\n\t\t\t}\n\t\t}, 750);\n\t}\n\n\toverride render(container: HTMLElement): void {\n\t\tsuper.render(container);\n\n\t\tif (!this.element) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.item) {\n\t\t\tthis.item.classList.add('monaco-submenu-item');\n\t\t\tthis.item.tabIndex = 0;\n\t\t\tthis.item.setAttribute('aria-haspopup', 'true');\n\t\t\tthis.updateAriaExpanded('false');\n\t\t\tthis.submenuIndicator = append(this.item, $('span.submenu-indicator' + ThemeIcon.asCSSSelector(Codicon.menuSubmenu)));\n\t\t\tthis.submenuIndicator.setAttribute('aria-hidden', 'true');\n\t\t}\n\n\t\tthis._register(addDisposableListener(this.element, EventType.KEY_UP, e => {\n\t\t\tconst event = new StandardKeyboardEvent(e);\n\t\t\tif (event.equals(KeyCode.RightArrow) || event.equals(KeyCode.Enter)) {\n\t\t\t\tEventHelper.stop(e, true);\n\n\t\t\t\tthis.createSubmenu(true);\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(addDisposableListener(this.element, EventType.KEY_DOWN, e => {\n\t\t\tconst event = new StandardKeyboardEvent(e);\n\n\t\t\tif (getActiveElement() === this.item) {\n\t\t\t\tif (event.equals(KeyCode.RightArrow) || event.equals(KeyCode.Enter)) {\n\t\t\t\t\tEventHelper.stop(e, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(addDisposableListener(this.element, EventType.MOUSE_OVER, e => {\n\t\t\tif (!this.mouseOver) {\n\t\t\t\tthis.mouseOver = true;\n\n\t\t\t\tthis.showScheduler.schedule();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(addDisposableListener(this.element, EventType.MOUSE_LEAVE, e => {\n\t\t\tthis.mouseOver = false;\n\t\t}));\n\n\t\tthis._register(addDisposableListener(this.element, EventType.FOCUS_OUT, e => {\n\t\t\tif (this.element && !isAncestor(getActiveElement(), this.element)) {\n\t\t\t\tthis.hideScheduler.schedule();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this.parentData.parent.onScroll(() => {\n\t\t\tif (this.parentData.submenu === this.mysubmenu) {\n\t\t\t\tthis.parentData.parent.focus(false);\n\t\t\t\tthis.cleanupExistingSubmenu(true);\n\t\t\t}\n\t\t}));\n\t}\n\n\tprotected override updateEnabled(): void {\n\t\t// override on submenu entry\n\t\t// native menus do not observe enablement on sumbenus\n\t\t// we mimic that behavior\n\t}\n\n\toverride onClick(e: EventLike): void {\n\t\t// stop clicking from trying to run an action\n\t\tEventHelper.stop(e, true);\n\n\t\tthis.cleanupExistingSubmenu(false);\n\t\tthis.createSubmenu(true);\n\t}\n\n\tprivate cleanupExistingSubmenu(force: boolean): void {\n\t\tif (this.parentData.submenu && (force || (this.parentData.submenu !== this.mysubmenu))) {\n\n\t\t\t// disposal may throw if the submenu has already been removed\n\t\t\ttry {\n\t\t\t\tthis.parentData.submenu.dispose();\n\t\t\t} catch { }\n\n\t\t\tthis.parentData.submenu = undefined;\n\t\t\tthis.updateAriaExpanded('false');\n\t\t\tif (this.submenuContainer) {\n\t\t\t\tthis.submenuDisposables.clear();\n\t\t\t\tthis.submenuContainer = undefined;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate calculateSubmenuMenuLayout(windowDimensions: Dimension, submenu: Dimension, entry: IDomNodePagePosition, expandDirection: IMenuDirection): { top: number; left: number } {\n\t\tconst ret = { top: 0, left: 0 };\n\n\t\t// Start with horizontal\n\t\tret.left = layout(windowDimensions.width, submenu.width, { position: expandDirection.horizontal === HorizontalDirection.Right ? LayoutAnchorPosition.Before : LayoutAnchorPosition.After, offset: entry.left, size: entry.width });\n\n\t\t// We don't have enough room to layout the menu fully, so we are overlapping the menu\n\t\tif (ret.left >= entry.left && ret.left < entry.left + entry.width) {\n\t\t\tif (entry.left + 10 + submenu.width <= windowDimensions.width) {\n\t\t\t\tret.left = entry.left + 10;\n\t\t\t}\n\n\t\t\tentry.top += 10;\n\t\t\tentry.height = 0;\n\t\t}\n\n\t\t// Now that we have a horizontal position, try layout vertically\n\t\tret.top = layout(windowDimensions.height, submenu.height, { position: LayoutAnchorPosition.Before, offset: entry.top, size: 0 });\n\n\t\t// We didn't have enough room below, but we did above, so we shift down to align the menu\n\t\tif (ret.top + submenu.height === entry.top && ret.top + entry.height + submenu.height <= windowDimensions.height) {\n\t\t\tret.top += entry.height;\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\tprivate createSubmenu(selectFirstItem = true): void {\n\t\tif (!this.element) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.parentData.submenu) {\n\t\t\tthis.updateAriaExpanded('true');\n\t\t\tthis.submenuContainer = append(this.element, $('div.monaco-submenu'));\n\t\t\tthis.submenuContainer.classList.add('menubar-menu-items-holder', 'context-view');\n\n\t\t\t// Set the top value of the menu container before construction\n\t\t\t// This allows the menu constructor to calculate the proper max height\n\t\t\tconst computedStyles = getWindow(this.parentData.parent.domNode).getComputedStyle(this.parentData.parent.domNode);\n\t\t\tconst paddingTop = parseFloat(computedStyles.paddingTop || '0') || 0;\n\t\t\tthis.submenuContainer.style.position = 'fixed';\n\t\t\tthis.submenuContainer.style.top = '0';\n\t\t\tthis.submenuContainer.style.left = '0';\n\t\t\t// Fix to #263546, for submenu of treeView view/item/context z-index issue - ensure submenu appears above other elements\n\t\t\tthis.submenuContainer.style.zIndex = '1';\n\n\t\t\tthis.parentData.submenu = new Menu(this.submenuContainer, this.submenuActions.length ? this.submenuActions : [new EmptySubmenuAction()], this.submenuOptions, this.menuStyle);\n\n\t\t\t// layout submenu\n\t\t\tconst entryBox = this.element.getBoundingClientRect();\n\t\t\tconst entryBoxUpdated = {\n\t\t\t\ttop: entryBox.top - paddingTop,\n\t\t\t\tleft: entryBox.left,\n\t\t\t\theight: entryBox.height + 2 * paddingTop,\n\t\t\t\twidth: entryBox.width\n\t\t\t};\n\n\t\t\tconst viewBox = this.submenuContainer.getBoundingClientRect();\n\n\t\t\tconst window = getWindow(this.element);\n\t\t\tconst { top, left } = this.calculateSubmenuMenuLayout(new Dimension(window.innerWidth, window.innerHeight), Dimension.lift(viewBox), entryBoxUpdated, this.expandDirection);\n\t\t\t// subtract offsets caused by transform parent\n\t\t\tthis.submenuContainer.style.left = `${left - viewBox.left}px`;\n\t\t\tthis.submenuContainer.style.top = `${top - viewBox.top}px`;\n\n\t\t\tthis.submenuDisposables.add(addDisposableListener(this.submenuContainer, EventType.KEY_UP, e => {\n\t\t\t\tconst event = new StandardKeyboardEvent(e);\n\t\t\t\tif (event.equals(KeyCode.LeftArrow)) {\n\t\t\t\t\tEventHelper.stop(e, true);\n\n\t\t\t\t\tthis.parentData.parent.focus();\n\n\t\t\t\t\tthis.cleanupExistingSubmenu(true);\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\tthis.submenuDisposables.add(addDisposableListener(this.submenuContainer, EventType.KEY_DOWN, e => {\n\t\t\t\tconst event = new StandardKeyboardEvent(e);\n\t\t\t\tif (event.equals(KeyCode.LeftArrow)) {\n\t\t\t\t\tEventHelper.stop(e, true);\n\t\t\t\t}\n\t\t\t}));\n\n\n\t\t\tthis.submenuDisposables.add(this.parentData.submenu.onDidCancel(() => {\n\t\t\t\tthis.parentData.parent.focus();\n\n\t\t\t\tthis.cleanupExistingSubmenu(true);\n\t\t\t}));\n\n\t\t\tthis.parentData.submenu.focus(selectFirstItem);\n\n\t\t\tthis.mysubmenu = this.parentData.submenu;\n\t\t} else {\n\t\t\tthis.parentData.submenu.focus(false);\n\t\t}\n\t}\n\n\tprivate updateAriaExpanded(value: string): void {\n\t\tif (this.item) {\n\t\t\tthis.item?.setAttribute('aria-expanded', value);\n\t\t}\n\t}\n\n\tprotected override applyStyle(): void {\n\t\tsuper.applyStyle();\n\n\t\tconst isSelected = this.element && this.element.classList.contains('focused');\n\t\tconst fgColor = isSelected && this.menuStyle.selectionForegroundColor ? this.menuStyle.selectionForegroundColor : this.menuStyle.foregroundColor;\n\n\t\tif (this.submenuIndicator) {\n\t\t\tthis.submenuIndicator.style.color = fgColor ?? '';\n\t\t}\n\t}\n\n\toverride dispose(): void {\n\t\tsuper.dispose();\n\n\t\tthis.hideScheduler.dispose();\n\n\t\tif (this.mysubmenu) {\n\t\t\tthis.mysubmenu.dispose();\n\t\t\tthis.mysubmenu = null;\n\t\t}\n\n\t\tif (this.submenuContainer) {\n\t\t\tthis.submenuContainer = undefined;\n\t\t}\n\t}\n}\n\nclass MenuSeparatorActionViewItem extends ActionViewItem {\n\tconstructor(context: unknown, action: IAction, options: IActionViewItemOptions, private readonly menuStyles: IMenuStyles) {\n\t\tsuper(context, action, options);\n\t}\n\n\toverride render(container: HTMLElement): void {\n\t\tsuper.render(container);\n\t\tif (this.label) {\n\t\t\tthis.label.style.borderBottomColor = this.menuStyles.separatorColor ? `${this.menuStyles.separatorColor}` : '';\n\t\t}\n\t}\n}\n\nexport function cleanMnemonic(label: string): string {\n\tconst regex = MENU_MNEMONIC_REGEX;\n\n\tconst matches = regex.exec(label);\n\tif (!matches) {\n\t\treturn label;\n\t}\n\n\tconst mnemonicInText = !matches[1];\n\n\treturn label.replace(regex, mnemonicInText ? '$2$3' : '').trim();\n}\n\nexport function formatRule(c: ThemeIcon) {\n\tconst fontCharacter = getCodiconFontCharacters()[c.id];\n\treturn `.codicon-${c.id}:before { content: '\\\\${fontCharacter.toString(16)}'; }`;\n}\n\nexport function getMenuWidgetCSS(style: IMenuStyles, isForShadowDom: boolean): string {\n\tlet 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\topacity: 0.7;\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\n\tif (isForShadowDom) {\n\t\t// Only define scrollbar styles when used inside shadow dom,\n\t\t// otherwise leave their styling to the global workbench styling.\n\t\tresult += `\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\t/* Fix for https://github.com/microsoft/vscode/issues/103170 */\n\t\t\t.monaco-menu .action-item .monaco-submenu {\n\t\t\t\tz-index: 1;\n\t\t\t}\n\t\t`;\n\n\t\t// Scrollbars\n\t\tconst scrollbarShadowColor = style.scrollbarShadow;\n\t\tif (scrollbarShadowColor) {\n\t\t\tresult += `\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\t\t}\n\n\t\tconst scrollbarSliderBackgroundColor = style.scrollbarSliderBackground;\n\t\tif (scrollbarSliderBackgroundColor) {\n\t\t\tresult += `\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\t\t}\n\n\t\tconst scrollbarSliderHoverBackgroundColor = style.scrollbarSliderHoverBackground;\n\t\tif (scrollbarSliderHoverBackgroundColor) {\n\t\t\tresult += `\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\t\t}\n\n\t\tconst scrollbarSliderActiveBackgroundColor = style.scrollbarSliderActiveBackground;\n\t\tif (scrollbarSliderActiveBackgroundColor) {\n\t\t\tresult += `\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\t\t}\n\t}\n\n\treturn result;\n}\n"]}