monaco-editor-core 0.56.0-dev-20260629 → 0.56.0

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 (64) 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 +0 -4
  18. package/esm/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.js +10 -23
  19. package/esm/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.js.map +1 -1
  20. package/esm/vs/editor/contrib/colorPicker/browser/colorDetector.js +0 -1
  21. package/esm/vs/editor/contrib/colorPicker/browser/colorDetector.js.map +1 -1
  22. package/esm/vs/editor/contrib/hover/browser/contentHoverRendered.js +2 -2
  23. package/esm/vs/editor/contrib/hover/browser/contentHoverRendered.js.map +1 -1
  24. package/esm/vs/platform/actionWidget/browser/actionList.js +8 -48
  25. package/esm/vs/platform/actionWidget/browser/actionList.js.map +1 -1
  26. package/esm/vs/platform/actionWidget/browser/actionWidget.css +2 -87
  27. package/esm/vs/platform/actionWidget/browser/actionWidget.js +12 -12
  28. package/esm/vs/platform/configuration/common/configurationRegistry.js +11 -11
  29. package/esm/vs/platform/contextkey/browser/contextKeyService.js +1 -1
  30. package/esm/vs/platform/contextkey/common/contextkey.js +9 -9
  31. package/esm/vs/platform/contextkey/common/contextkeys.js +9 -9
  32. package/esm/vs/platform/contextkey/common/scanner.js +5 -5
  33. package/esm/vs/platform/history/browser/contextScopedHistoryWidget.js +1 -1
  34. package/esm/vs/platform/hover/browser/hoverWidget.js +1 -1
  35. package/esm/vs/platform/hover/browser/updatableHoverWidget.js +1 -1
  36. package/esm/vs/platform/keybinding/common/abstractKeybindingService.js +5 -5
  37. package/esm/vs/platform/list/browser/listService.js +27 -27
  38. package/esm/vs/platform/markers/common/markerService.js +2 -2
  39. package/esm/vs/platform/markers/common/markers.js +6 -6
  40. package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +8 -8
  41. package/esm/vs/platform/quickinput/browser/helpQuickAccess.js +1 -1
  42. package/esm/vs/platform/quickinput/browser/quickInput.js +10 -10
  43. package/esm/vs/platform/quickinput/browser/quickInputActions.js +5 -5
  44. package/esm/vs/platform/quickinput/browser/quickInputController.js +6 -6
  45. package/esm/vs/platform/quickinput/browser/quickInputList.js +1 -1
  46. package/esm/vs/platform/quickinput/browser/quickInputUtils.js +1 -1
  47. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.js +1 -1
  48. package/esm/vs/platform/quickinput/browser/tree/quickTree.js +1 -1
  49. package/esm/vs/platform/theme/common/colorUtils.js +2 -2
  50. package/esm/vs/platform/theme/common/colors/baseColors.js +19 -19
  51. package/esm/vs/platform/theme/common/colors/chartsColors.js +8 -8
  52. package/esm/vs/platform/theme/common/colors/editorColors.js +95 -95
  53. package/esm/vs/platform/theme/common/colors/inputColors.js +48 -48
  54. package/esm/vs/platform/theme/common/colors/listColors.js +36 -36
  55. package/esm/vs/platform/theme/common/colors/menuColors.js +7 -7
  56. package/esm/vs/platform/theme/common/colors/minimapColors.js +11 -11
  57. package/esm/vs/platform/theme/common/colors/miscColors.js +16 -16
  58. package/esm/vs/platform/theme/common/colors/quickpickColors.js +10 -10
  59. package/esm/vs/platform/theme/common/colors/searchColors.js +3 -3
  60. package/esm/vs/platform/theme/common/iconRegistry.js +6 -6
  61. package/esm/vs/platform/undoRedo/common/undoRedoService.js +20 -20
  62. package/esm/vs/platform/workspace/common/workspace.js +1 -1
  63. package/package.json +2 -2
  64. package/version.txt +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["vs/platform/actionWidget/browser/actionList.ts"],"names":[],"mappings":"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","file":"actionList.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 *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../../../base/browser/dom.js';\nimport { StandardMouseEvent } from '../../../base/browser/mouseEvent.js';\nimport { renderMarkdown } from '../../../base/browser/markdownRenderer.js';\nimport { ActionBar } from '../../../base/browser/ui/actionbar/actionbar.js';\nimport { getAnchorRect, IAnchor } from '../../../base/browser/ui/contextview/contextview.js';\nimport { KeybindingLabel } from '../../../base/browser/ui/keybindingLabel/keybindingLabel.js';\nimport { Toggle } from '../../../base/browser/ui/toggle/toggle.js';\nimport { IListEvent, IListMouseEvent, IListRenderer, IListVirtualDelegate } from '../../../base/browser/ui/list/list.js';\nimport { IListAccessibilityProvider, List } from '../../../base/browser/ui/list/listWidget.js';\nimport { IAction, SubmenuAction, toAction } from '../../../base/common/actions.js';\nimport { CancellationToken, CancellationTokenSource } from '../../../base/common/cancellation.js';\nimport { Codicon } from '../../../base/common/codicons.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { IMarkdownString, isMarkdownString, MarkdownString } from '../../../base/common/htmlContent.js';\nimport { ResolvedKeybinding } from '../../../base/common/keybindings.js';\nimport { AnchorPosition } from '../../../base/common/layout.js';\nimport { Disposable, DisposableStore, IDisposable, MutableDisposable, toDisposable } from '../../../base/common/lifecycle.js';\nimport { OS } from '../../../base/common/platform.js';\nimport { ThemeIcon } from '../../../base/common/themables.js';\nimport { URI } from '../../../base/common/uri.js';\nimport './actionWidget.css';\nimport { localize } from '../../../nls.js';\nimport { IContextViewService } from '../../contextview/browser/contextView.js';\nimport { IKeybindingService } from '../../keybinding/common/keybinding.js';\nimport { IOpenerService } from '../../opener/common/opener.js';\nimport { defaultListStyles } from '../../theme/browser/defaultStyles.js';\nimport { asCssVariable } from '../../theme/common/colorRegistry.js';\nimport { ILayoutService } from '../../layout/browser/layoutService.js';\nimport { IInstantiationService } from '../../instantiation/common/instantiation.js';\n\nexport const acceptSelectedActionCommand = 'acceptSelectedCodeAction';\nexport const previewSelectedActionCommand = 'previewSelectedCodeAction';\n\nexport interface IActionListDelegate<T> {\n\tonHide(didCancel?: boolean): void;\n\tonSelect(action: T, preview?: boolean): void;\n\tonFilter?(filter: string, cancellationToken: CancellationToken): Promise<readonly IActionListItem<T>[]>;\n\tonHover?(action: T, cancellationToken: CancellationToken): Promise<{ canPreview: boolean } | void>;\n\tonFocus?(action: T | undefined): void;\n}\n\n/**\n * Optional hover configuration shown when focusing/hovering over an action list item.\n */\nexport interface IActionListItemHover {\n\t/**\n\t * Content to display in the hover. Can be a markdown string or an HTMLElement for full DOM control.\n\t */\n\treadonly content?: string | IMarkdownString | HTMLElement;\n\t/**\n\t * Optional disposable associated with the hover content (e.g. from rendered markdown).\n\t */\n\treadonly disposable?: IDisposable;\n}\n\n/**\n * Optional inline toggle switch rendered inside an action list item, shown on its\n * own row below the label/detail. Useful for an always-visible boolean sub-control\n * (e.g. a sandbox toggle) that is independent from selecting the item itself.\n */\nexport interface IActionListItemInlineToggle {\n\t/** Label shown to the left of the switch. */\n\treadonly label: string;\n\t/** Current checked state of the switch. */\n\treadonly checked: boolean;\n\t/** Invoked when the user flips the switch. */\n\treadonly onChange: (checked: boolean) => void;\n\t/** Optional accessible/hover title for the switch. Defaults to {@link label}. */\n\treadonly title?: string;\n}\n\nexport interface IActionListItem<T> {\n\treadonly item?: T;\n\treadonly kind: ActionListItemKind;\n\treadonly group?: { kind?: unknown; icon?: ThemeIcon; title: string };\n\treadonly disabled?: boolean;\n\treadonly label?: string;\n\t/**\n\t * Optional detail text displayed as a second line below the label.\n\t */\n\treadonly detail?: string;\n\t/**\n\t * Optional inline toggle switch rendered on its own row inside the item.\n\t */\n\treadonly inlineToggle?: IActionListItemInlineToggle;\n\treadonly description?: string | IMarkdownString;\n\t/**\n\t * Optional accessible description used in place of {@link description} for\n\t * screen reader labels. Useful when the visual description contains icons\n\t * or other non-textual content.\n\t */\n\treadonly ariaDescription?: string;\n\t/**\n\t * Optional hover configuration shown when focusing/hovering over the item.\n\t */\n\treadonly hover?: IActionListItemHover;\n\t/**\n\t * Optional actions shown in a nested submenu panel, triggered by a chevron\n\t * indicator on the right side of the item. When set, hovering or clicking\n\t * the chevron opens an inline submenu with these actions.\n\t */\n\treadonly submenuActions?: IAction[];\n\treadonly keybinding?: ResolvedKeybinding;\n\tcanPreview?: boolean | undefined;\n\treadonly hideIcon?: boolean;\n\treadonly tooltip?: string;\n\t/**\n\t * Optional toolbar actions shown when the item is focused or hovered.\n\t */\n\treadonly toolbarActions?: IAction[];\n\t/**\n\t * Optional section identifier. Items with the same section belong to the same\n\t * collapsible group. Only meaningful when the ActionList is created with\n\t * collapsible sections.\n\t */\n\treadonly section?: string;\n\t/**\n\t * When true, clicking this item toggles the section's collapsed state\n\t * instead of selecting it.\n\t */\n\treadonly isSectionToggle?: boolean;\n\t/**\n\t * Optional CSS class name to add to the row container.\n\t */\n\treadonly className?: string;\n\t/**\n\t * Optional badge text to display after the label (e.g., \"New\").\n\t */\n\treadonly badge?: string;\n\t/**\n\t * When true, this item is always shown when filtering produces no other results.\n\t */\n\treadonly showAlways?: boolean;\n\t/**\n\t * Optional callback invoked when the item is removed via the built-in remove button.\n\t * When set, a close button is automatically added to the item toolbar.\n\t */\n\treadonly onRemove?: () => void | Promise<void>;\n}\n\ninterface IActionMenuTemplateData {\n\treadonly container: HTMLElement;\n\treadonly icon: HTMLElement;\n\treadonly text: HTMLElement;\n\treadonly detail: HTMLElement;\n\treadonly badge: HTMLElement;\n\treadonly description?: HTMLElement;\n\treadonly groupTitle: HTMLElement;\n\treadonly keybinding: KeybindingLabel;\n\treadonly toolbar: HTMLElement;\n\treadonly submenuIndicator: HTMLElement;\n\treadonly inlineToggleContainer: HTMLElement;\n\treadonly elementDisposables: DisposableStore;\n\tpreviousClassName?: string;\n}\n\nexport const enum ActionListItemKind {\n\tAction = 'action',\n\tHeader = 'header',\n\tSeparator = 'separator'\n}\n\ninterface IHeaderTemplateData {\n\treadonly container: HTMLElement;\n\treadonly text: HTMLElement;\n}\n\nclass HeaderRenderer<T> implements IListRenderer<IActionListItem<T>, IHeaderTemplateData> {\n\n\tget templateId(): string { return ActionListItemKind.Header; }\n\n\trenderTemplate(container: HTMLElement): IHeaderTemplateData {\n\t\tcontainer.classList.add('group-header');\n\n\t\tconst text = document.createElement('span');\n\t\tcontainer.append(text);\n\n\t\treturn { container, text };\n\t}\n\n\trenderElement(element: IActionListItem<T>, _index: number, templateData: IHeaderTemplateData): void {\n\t\ttemplateData.text.textContent = element.group?.title ?? element.label ?? '';\n\t}\n\n\tdisposeTemplate(_templateData: IHeaderTemplateData): void {\n\t\t// noop\n\t}\n}\n\ninterface ISeparatorTemplateData {\n\treadonly container: HTMLElement;\n\treadonly text: HTMLElement;\n}\n\nclass SeparatorRenderer<T> implements IListRenderer<IActionListItem<T>, ISeparatorTemplateData> {\n\n\tget templateId(): string { return ActionListItemKind.Separator; }\n\n\trenderTemplate(container: HTMLElement): ISeparatorTemplateData {\n\t\tcontainer.classList.add('separator');\n\n\t\tconst text = document.createElement('span');\n\t\tcontainer.append(text);\n\n\t\treturn { container, text };\n\t}\n\n\trenderElement(element: IActionListItem<T>, _index: number, templateData: ISeparatorTemplateData): void {\n\t\ttemplateData.text.textContent = element.label ?? '';\n\t}\n\n\tdisposeTemplate(_templateData: ISeparatorTemplateData): void {\n\t\t// noop\n\t}\n}\n\nclass ActionItemRenderer<T> implements IListRenderer<IActionListItem<T>, IActionMenuTemplateData> {\n\n\tget templateId(): string { return ActionListItemKind.Action; }\n\n\tconstructor(\n\t\tprivate readonly _supportsPreview: boolean,\n\t\tprivate readonly _onRemoveItem: ((item: IActionListItem<T>) => void) | undefined,\n\t\tprivate readonly _onShowSubmenu: ((item: IActionListItem<T>) => void) | undefined,\n\t\tprivate readonly _hasAnySubmenuActions: boolean,\n\t\tprivate readonly _groupTitleByIndex: ReadonlyMap<number, string>,\n\t\tprivate readonly _linkHandler: ((uri: URI, item: IActionListItem<T>) => void) | undefined,\n\t\tprivate readonly _hideDefaultKeybindingTooltip: boolean,\n\t\t@IKeybindingService private readonly _keybindingService: IKeybindingService,\n\t\t@IOpenerService private readonly _openerService: IOpenerService,\n\t) { }\n\n\trenderTemplate(container: HTMLElement): IActionMenuTemplateData {\n\t\tcontainer.classList.add(this.templateId);\n\n\t\tconst icon = document.createElement('div');\n\t\ticon.className = 'icon';\n\t\tcontainer.append(icon);\n\n\t\tconst text = document.createElement('span');\n\t\ttext.className = 'title';\n\t\tcontainer.append(text);\n\n\t\tconst badge = document.createElement('span');\n\t\tbadge.className = 'action-item-badge';\n\t\tcontainer.append(badge);\n\n\t\tconst description = document.createElement('span');\n\t\tdescription.className = 'description';\n\t\tcontainer.append(description);\n\n\t\tconst groupTitle = document.createElement('span');\n\t\tgroupTitle.className = 'group-title';\n\t\tcontainer.append(groupTitle);\n\n\t\tconst detail = document.createElement('span');\n\t\tdetail.className = 'detail';\n\t\tcontainer.append(detail);\n\n\t\tconst keybinding = new KeybindingLabel(container, OS);\n\n\t\tconst toolbar = document.createElement('div');\n\t\ttoolbar.className = 'action-list-item-toolbar';\n\t\tcontainer.append(toolbar);\n\n\t\tconst submenuIndicator = document.createElement('div');\n\t\tsubmenuIndicator.className = 'action-list-submenu-indicator';\n\t\tcontainer.append(submenuIndicator);\n\n\t\tconst inlineToggleContainer = document.createElement('div');\n\t\tinlineToggleContainer.className = 'action-list-item-inline-toggle';\n\t\tcontainer.append(inlineToggleContainer);\n\n\t\tconst elementDisposables = new DisposableStore();\n\n\t\treturn { container, icon, text, detail, badge, description, groupTitle, keybinding, toolbar, submenuIndicator, inlineToggleContainer, elementDisposables };\n\t}\n\n\trenderElement(element: IActionListItem<T>, _index: number, data: IActionMenuTemplateData): void {\n\t\t// Clear previous element disposables\n\t\tdata.elementDisposables.clear();\n\n\t\tif (element.group?.icon) {\n\t\t\tdata.icon.className = ThemeIcon.asClassName(element.group.icon);\n\t\t\tif (element.group.icon.color) {\n\t\t\t\tdata.icon.style.color = asCssVariable(element.group.icon.color.id);\n\t\t\t}\n\t\t} else {\n\t\t\tdata.icon.className = ThemeIcon.asClassName(Codicon.lightBulb);\n\t\t\tdata.icon.style.color = 'var(--vscode-editorLightBulb-foreground)';\n\t\t}\n\n\t\tif (!element.item || !element.label) {\n\t\t\treturn;\n\t\t}\n\n\t\tdom.setVisibility(!element.hideIcon, data.icon);\n\n\t\t// Set aria-expanded for section toggle items\n\t\tif (element.isSectionToggle) {\n\t\t\tconst expanded = element.group?.icon === Codicon.chevronDown;\n\t\t\tdata.container.setAttribute('aria-expanded', String(expanded));\n\t\t} else {\n\t\t\tdata.container.removeAttribute('aria-expanded');\n\t\t}\n\n\t\t// Apply optional className - clean up previous to avoid stale classes\n\t\t// from virtualized row reuse\n\t\tif (data.previousClassName) {\n\t\t\tdata.container.classList.remove(data.previousClassName);\n\t\t}\n\t\tdata.container.classList.toggle('action-list-custom', !!element.className);\n\t\tif (element.className) {\n\t\t\tdata.container.classList.add(element.className);\n\t\t}\n\t\tdata.previousClassName = element.className;\n\n\t\tdata.text.textContent = stripNewlines(element.label);\n\n\t\t// Render optional badge\n\t\tif (element.badge) {\n\t\t\tdata.badge.textContent = element.badge;\n\t\t\tdata.badge.style.display = '';\n\t\t} else {\n\t\t\tdata.badge.textContent = '';\n\t\t\tdata.badge.style.display = 'none';\n\t\t}\n\n\t\tif (element.keybinding) {\n\t\t\tdata.description!.textContent = element.keybinding.getLabel();\n\t\t\tdata.description!.style.display = 'inline';\n\t\t\tdata.description!.style.letterSpacing = '0.5px';\n\t\t} else if (element.description) {\n\t\t\tdom.clearNode(data.description!);\n\t\t\tif (typeof element.description === 'string') {\n\t\t\t\tdata.description!.textContent = stripNewlines(element.description);\n\t\t\t} else {\n\t\t\t\tconst rendered = renderMarkdown(element.description, {\n\t\t\t\t\tactionHandler: (content: string) => {\n\t\t\t\t\t\tconst uri = URI.parse(content);\n\t\t\t\t\t\tif (this._linkHandler) {\n\t\t\t\t\t\t\tthis._linkHandler(uri, element);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvoid this._openerService.open(uri, { allowCommands: true });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tdata.elementDisposables.add(rendered);\n\t\t\t\tdata.description!.appendChild(rendered.element);\n\t\t\t}\n\t\t\tdata.description!.style.display = 'inline';\n\t\t} else {\n\t\t\tdata.description!.textContent = '';\n\t\t\tdata.description!.style.display = 'none';\n\t\t}\n\n\t\t// Render group title (shown to the right, separate from description)\n\t\tconst groupTitleText = this._groupTitleByIndex.get(_index);\n\t\tif (groupTitleText) {\n\t\t\tdata.groupTitle.textContent = groupTitleText;\n\t\t\tdata.groupTitle.style.display = '';\n\t\t} else {\n\t\t\tdata.groupTitle.textContent = '';\n\t\t\tdata.groupTitle.style.display = 'none';\n\t\t}\n\n\t\t// Render optional detail (shown as second line below the label)\n\t\tif (element.detail) {\n\t\t\tdata.detail.textContent = stripNewlines(element.detail);\n\t\t\tdata.detail.style.display = '';\n\t\t} else {\n\t\t\tdata.detail.textContent = '';\n\t\t\tdata.detail.style.display = 'none';\n\t\t}\n\n\t\t// Render optional inline toggle (shown as its own row below the detail)\n\t\tdom.clearNode(data.inlineToggleContainer);\n\t\tif (element.inlineToggle) {\n\t\t\tconst inlineToggle = element.inlineToggle;\n\t\t\tconst toggleLabel = document.createElement('span');\n\t\t\ttoggleLabel.className = 'action-list-item-inline-toggle-label';\n\t\t\ttoggleLabel.textContent = stripNewlines(inlineToggle.label);\n\t\t\tdata.inlineToggleContainer.append(toggleLabel);\n\t\t\tdata.inlineToggleContainer.style.display = '';\n\t\t\tdata.container.classList.add('has-inline-toggle');\n\t\t\tconst toggle = data.elementDisposables.add(new Toggle({\n\t\t\t\ttitle: inlineToggle.title ?? inlineToggle.label,\n\t\t\t\tisChecked: inlineToggle.checked,\n\t\t\t\tactionClassName: 'action-list-inline-switch',\n\t\t\t\tnotFocusable: false,\n\t\t\t\tinputActiveOptionBorder: undefined,\n\t\t\t\tinputActiveOptionForeground: undefined,\n\t\t\t\tinputActiveOptionBackground: undefined,\n\t\t\t}));\n\t\t\tdata.inlineToggleContainer.append(toggle.domNode);\n\t\t\tdata.elementDisposables.add(toggle.onChange(() => inlineToggle.onChange(toggle.checked)));\n\t\t\t// Keep clicks on the toggle row from selecting the item.\n\t\t\tdata.elementDisposables.add(dom.addDisposableListener(data.inlineToggleContainer, dom.EventType.CLICK, e => e.stopPropagation()));\n\t\t} else {\n\t\t\tdata.inlineToggleContainer.style.display = 'none';\n\t\t\tdata.container.classList.remove('has-inline-toggle');\n\t\t}\n\n\t\tconst actionTitle = this._keybindingService.lookupKeybinding(acceptSelectedActionCommand)?.getLabel();\n\t\tconst previewTitle = this._keybindingService.lookupKeybinding(previewSelectedActionCommand)?.getLabel();\n\t\tdata.container.classList.toggle('option-disabled', !!element.disabled);\n\t\tif (element.hover !== undefined) {\n\t\t\t// Don't show tooltip when hover content is configured - the rich hover will show instead\n\t\t\tdata.container.title = '';\n\t\t} else if (element.tooltip) {\n\t\t\tdata.container.title = element.tooltip;\n\t\t} else if (element.disabled) {\n\t\t\tdata.container.title = element.label;\n\t\t} else if (this._hideDefaultKeybindingTooltip) {\n\t\t\tdata.container.title = '';\n\t\t} else if (actionTitle && previewTitle) {\n\t\t\tif (this._supportsPreview && element.canPreview) {\n\t\t\t\tdata.container.title = localize({ key: 'label-preview', comment: ['placeholders are keybindings, e.g \"F2 to Apply, Shift+F2 to Preview\"'] }, \"{0} to Apply, {1} to Preview\", actionTitle, previewTitle);\n\t\t\t} else {\n\t\t\t\tdata.container.title = localize({ key: 'label', comment: ['placeholder is a keybinding, e.g \"F2 to Apply\"'] }, \"{0} to Apply\", actionTitle);\n\t\t\t}\n\t\t} else {\n\t\t\tdata.container.title = '';\n\t\t}\n\n\t\t// Clear and render toolbar actions\n\t\tdom.clearNode(data.toolbar);\n\t\tconst toolbarActions = [...(element.toolbarActions ?? [])];\n\t\tif (element.onRemove) {\n\t\t\ttoolbarActions.push(toAction({\n\t\t\t\tid: 'actionList.remove',\n\t\t\t\tlabel: localize('actionList.remove', \"Remove\"),\n\t\t\t\tclass: ThemeIcon.asClassName(Codicon.close),\n\t\t\t\trun: async () => {\n\t\t\t\t\tawait element.onRemove!();\n\t\t\t\t\tthis._onRemoveItem?.(element);\n\t\t\t\t},\n\t\t\t}));\n\t\t}\n\t\tdata.container.classList.toggle('has-toolbar', toolbarActions.length > 0);\n\t\tif (toolbarActions.length > 0) {\n\t\t\tconst actionBar = new ActionBar(data.toolbar);\n\t\t\tdata.elementDisposables.add(actionBar);\n\t\t\tactionBar.push(toolbarActions, { icon: true, label: false });\n\t\t}\n\n\t\t// Show submenu indicator only for items with submenu actions\n\t\t// but not when the item also has hover content (panel auto-shows on hover)\n\t\tif (element.submenuActions?.length && !element.hover?.content) {\n\t\t\tdata.submenuIndicator.className = 'action-list-submenu-indicator has-submenu ' + ThemeIcon.asClassName(Codicon.chevronRight);\n\t\t\tdata.submenuIndicator.style.display = '';\n\t\t\tdata.submenuIndicator.style.visibility = '';\n\t\t\tdata.elementDisposables.add(dom.addDisposableListener(data.submenuIndicator, dom.EventType.CLICK, (e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t\tthis._onShowSubmenu?.(element);\n\t\t\t}));\n\t\t} else if (this._hasAnySubmenuActions) {\n\t\t\t// Reserve space for alignment when other items have submenus\n\t\t\tdata.submenuIndicator.className = 'action-list-submenu-indicator';\n\t\t\tdata.submenuIndicator.style.display = '';\n\t\t\tdata.submenuIndicator.style.visibility = 'hidden';\n\t\t} else {\n\t\t\tdata.submenuIndicator.className = 'action-list-submenu-indicator';\n\t\t\tdata.submenuIndicator.style.display = 'none';\n\t\t}\n\t}\n\n\tdisposeTemplate(templateData: IActionMenuTemplateData): void {\n\t\ttemplateData.keybinding.dispose();\n\t\ttemplateData.elementDisposables.dispose();\n\t}\n}\n\nclass AcceptSelectedEvent extends UIEvent {\n\tconstructor() { super('acceptSelectedAction'); }\n}\n\nclass PreviewSelectedEvent extends UIEvent {\n\tconstructor() { super('previewSelectedAction'); }\n}\n\nfunction getKeyboardNavigationLabel<T>(item: IActionListItem<T>): string | undefined {\n\t// Filter out header vs. action vs. separator\n\tif (item.kind === 'action') {\n\t\treturn item.label;\n\t}\n\treturn undefined;\n}\n\n/**\n * Options for configuring the action list.\n */\nexport interface IActionListOptions {\n\t/**\n\t * When true, shows a filter input.\n\t */\n\treadonly showFilter?: boolean;\n\n\t/**\n\t * Placeholder text for the filter input.\n\t */\n\treadonly filterPlaceholder?: string;\n\n\t/**\n\t * Optional actions shown in the filter row, to the right of the input.\n\t */\n\treadonly filterActions?: readonly IAction[];\n\n\t/**\n\t * Section IDs that should be collapsed by default.\n\t */\n\treadonly collapsedByDefault?: ReadonlySet<string>;\n\n\t/**\n\t * Minimum width for the action list.\n\t */\n\treadonly minWidth?: number;\n\n\t/**\n\t * Maximum width for the action list. When set, items wider than this are\n\t * truncated rather than expanding the popup.\n\t */\n\treadonly maxWidth?: number;\n\n\t/**\n\t * Optional handler for markdown links activated in item descriptions or hovers.\n\t * When unset, links open via the opener service with command links allowed.\n\t */\n\treadonly linkHandler?: (uri: URI, item: IActionListItem<unknown>) => void;\n\n\t/**\n\t * Optional callback fired when a section's collapsed state changes.\n\t */\n\treadonly onDidToggleSection?: (section: string, collapsed: boolean) => void;\n\n\t/**\n\t * When true, descriptions are rendered inline right after the label\n\t * instead of aligned to the right.\n\t */\n\treadonly inlineDescription?: boolean;\n\n\t/**\n\t * Height (in px) used for action items that have a `detail` line.\n\t * Defaults to 48.\n\t */\n\treadonly detailItemHeight?: number;\n\n\t/**\n\t * Height (in px) used for action items that have an `inlineToggle`.\n\t * Defaults to 70.\n\t */\n\treadonly inlineToggleItemHeight?: number;\n\n\t/**\n\t * When true, the group title is shown on the first item of each group\n\t * in the description area (aligned to the right).\n\t */\n\treadonly showGroupTitleOnFirstItem?: boolean;\n\n\t/**\n\t * When true and filtering is enabled, focuses the filter input when the list opens.\n\t */\n\treadonly focusFilterOnOpen?: boolean;\n\n\t/**\n\t * When false, non-submenu items do not reserve space for the submenu chevron.\n\t * Defaults to true for alignment consistency.\n\t */\n\treadonly reserveSubmenuSpace?: boolean;\n\n\t/**\n\t * When true, items without an explicit `tooltip` or `hover` do not get a\n\t * default \"{keybinding} to Apply\" tooltip. Useful for non-code-action lists\n\t * where this hint is misleading.\n\t */\n\treadonly hideDefaultKeybindingTooltip?: boolean;\n\n\t/**\n\t * Optional label shown on the right side of the filter row.\n\t */\n\treadonly secondaryHeading?: string;\n\n\t/**\n\t * Optional text shown below the action list as a footer.\n\t */\n\treadonly footerText?: string;\n\n\t/**\n\t * Optional text shown above the action list as a header banner. When set, it is\n\t * rendered at the top of the widget, optionally prefixed by {@link headerIcon}.\n\t */\n\treadonly headerText?: string;\n\n\t/**\n\t * Optional icon shown to the left of {@link headerText} in the header banner.\n\t */\n\treadonly headerIcon?: ThemeIcon;\n\n\t/**\n\t * Optional CSS class name added to the action list container, for scoped styling.\n\t */\n\treadonly className?: string;\n}\n\n/**\n * A standalone action list widget that handles core list rendering, filtering,\n * hover, submenu, and section management without depending on IContextViewService\n * or anchor-based positioning. Suitable for embedding directly in any container.\n */\nexport class ActionListWidget<T> extends Disposable {\n\n\tpublic readonly domNode: HTMLElement;\n\n\tprivate readonly _list: List<IActionListItem<T>>;\n\n\tprotected readonly _actionLineHeight: number;\n\tprotected readonly _headerLineHeight = 24;\n\tprotected readonly _separatorLineHeight = 8;\n\n\tprotected _allMenuItems: IActionListItem<T>[];\n\n\tprivate readonly cts = this._register(new CancellationTokenSource());\n\n\tprivate readonly _submenuDisposables = this._register(new DisposableStore());\n\tprivate readonly _submenuContainer: HTMLElement;\n\tprivate _submenuHideTimeout: ReturnType<typeof setTimeout> | undefined;\n\tprivate _submenuShowTimeout: ReturnType<typeof setTimeout> | undefined;\n\tprivate _currentSubmenuWidget: ActionListWidget<IAction> | undefined;\n\tprivate _currentSubmenuElement: IActionListItem<T> | undefined;\n\n\tprivate readonly _collapsedSections = new Set<string>();\n\tprivate _filterText = '';\n\tprivate _suppressHover = false;\n\tprivate _hasLaidOut = false;\n\tprivate readonly _filterInput: HTMLInputElement | undefined;\n\tprivate readonly _filterContainer: HTMLElement | undefined;\n\tprivate readonly _footerContainer: HTMLElement | undefined;\n\tprivate readonly _headerContainer: HTMLElement | undefined;\n\tprivate readonly _filterCts = this._register(new MutableDisposable<CancellationTokenSource>());\n\tprivate readonly _groupTitleByIndex = new Map<number, string>();\n\n\tprivate readonly _onDidRequestLayout = this._register(new Emitter<void>());\n\n\t/**\n\t * Fired when the widget's visible item set changes and the parent should\n\t * re-layout (e.g. after filtering or collapsing a section).\n\t */\n\treadonly onDidRequestLayout = this._onDidRequestLayout.event;\n\n\tconstructor(\n\t\tuser: string,\n\t\tprotected readonly _supportsPreview: boolean,\n\t\titems: readonly IActionListItem<T>[],\n\t\tprotected readonly _delegate: IActionListDelegate<T>,\n\t\taccessibilityProvider: Partial<IListAccessibilityProvider<IActionListItem<T>>> | undefined,\n\t\tprotected readonly _options: IActionListOptions | undefined,\n\t\t@IKeybindingService private readonly _keybindingService: IKeybindingService,\n\t\t@IOpenerService private readonly _openerService: IOpenerService,\n\t\t@IInstantiationService private readonly _instantiationService: IInstantiationService,\n\t) {\n\t\tsuper();\n\t\tthis.domNode = document.createElement('div');\n\t\tthis.domNode.classList.add('actionList');\n\t\tif (this._options?.inlineDescription) {\n\t\t\tthis.domNode.classList.add('inline-description');\n\t\t}\n\t\tif (this._options?.className) {\n\t\t\tconst classNames = this._options.className.split(/\\s+/).filter(className => className.length > 0);\n\t\t\tif (classNames.length > 0) {\n\t\t\t\tthis.domNode.classList.add(...classNames);\n\t\t\t}\n\t\t}\n\t\tthis._actionLineHeight = 24;\n\n\t\t// Create submenu container appended to domNode\n\t\tthis._submenuContainer = document.createElement('div');\n\t\tthis._submenuContainer.className = 'action-list-submenu-panel action-widget';\n\t\tthis._submenuContainer.style.display = 'none';\n\t\t// Make focusable so clicking the hover panel keeps focus inside the\n\t\t// tracked element instead of moving it to document.body (which would\n\t\t// trigger the blur handler and dismiss the widget).\n\t\tthis._submenuContainer.tabIndex = -1;\n\t\tthis.domNode.append(this._submenuContainer);\n\n\t\tthis._register(dom.addDisposableListener(this._submenuContainer, 'mouseenter', () => {\n\t\t\tthis._cancelSubmenuHide();\n\t\t}));\n\t\tthis._register(dom.addDisposableListener(this._submenuContainer, 'mouseleave', () => {\n\t\t\tthis._scheduleSubmenuHide();\n\t\t}));\n\t\tthis._register(toDisposable(() => {\n\t\t\tthis._cancelSubmenuHide();\n\t\t\tthis._cancelSubmenuShow();\n\t\t}));\n\n\t\t// Initialize collapsed sections\n\t\tif (this._options?.collapsedByDefault) {\n\t\t\tfor (const section of this._options.collapsedByDefault) {\n\t\t\t\tthis._collapsedSections.add(section);\n\t\t\t}\n\t\t}\n\n\t\tconst virtualDelegate: IListVirtualDelegate<IActionListItem<T>> = {\n\t\t\tgetHeight: element => {\n\t\t\t\treturn this._getItemHeight(element);\n\t\t\t},\n\t\t\tgetTemplateId: element => element.kind\n\t\t};\n\n\n\t\tconst reserveSubmenuSpace = this._options?.reserveSubmenuSpace ?? true;\n\t\tconst hasAnySubmenuActions = reserveSubmenuSpace && items.some(item => !!item.submenuActions?.length && !item.hover?.content);\n\n\t\tthis._list = this._register(new List(user, this.domNode, virtualDelegate, [\n\t\t\tnew ActionItemRenderer<T>(this._supportsPreview, (item) => this._removeItem(item), (item) => this._showSubmenuForItem(item), hasAnySubmenuActions, this._groupTitleByIndex, this._options?.linkHandler, this._options?.hideDefaultKeybindingTooltip ?? false, this._keybindingService, this._openerService),\n\t\t\tnew HeaderRenderer(),\n\t\t\tnew SeparatorRenderer(),\n\t\t], {\n\t\t\tkeyboardSupport: false,\n\t\t\ttypeNavigationEnabled: !this._options?.showFilter,\n\t\t\tkeyboardNavigationLabelProvider: { getKeyboardNavigationLabel },\n\t\t\taccessibilityProvider: {\n\t\t\t\tgetAriaLabel: element => {\n\t\t\t\t\tif (element.kind === ActionListItemKind.Action) {\n\t\t\t\t\t\tlet label = element.label ? stripNewlines(element?.label) : '';\n\t\t\t\t\t\tif (element.detail) {\n\t\t\t\t\t\t\tlabel = label + ', ' + stripNewlines(element.detail);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (element.ariaDescription) {\n\t\t\t\t\t\t\tlabel = label + ', ' + stripNewlines(element.ariaDescription);\n\t\t\t\t\t\t} else if (element.description) {\n\t\t\t\t\t\t\tconst descText = typeof element.description === 'string' ? element.description : element.description.value;\n\t\t\t\t\t\t\tlabel = label + ', ' + stripNewlines(descText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (element.hover?.content && !element.ariaDescription && !element.description) {\n\t\t\t\t\t\t\tconst hoverContent = element.hover.content;\n\t\t\t\t\t\t\tconst hoverText = typeof hoverContent === 'string' ? hoverContent : isMarkdownString(hoverContent) ? hoverContent.value : dom.isHTMLElement(hoverContent) ? hoverContent.textContent ?? undefined : undefined;\n\t\t\t\t\t\t\tif (hoverText && (!element.detail || stripNewlines(element.detail) !== stripNewlines(hoverText))) {\n\t\t\t\t\t\t\t\tlabel = label + ', ' + stripNewlines(hoverText);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (element.group?.title) {\n\t\t\t\t\t\t\tlabel = label + ', ' + element.group.title;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (element.inlineToggle) {\n\t\t\t\t\t\t\tlabel = label + ', ' + (element.inlineToggle.checked\n\t\t\t\t\t\t\t\t? localize('actionList.inlineToggle.on', \"{0}, on\", element.inlineToggle.label)\n\t\t\t\t\t\t\t\t: localize('actionList.inlineToggle.off', \"{0}, off\", element.inlineToggle.label));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (element.disabled) {\n\t\t\t\t\t\t\tlabel = localize({ key: 'customQuickFixWidget.labels', comment: [`Action widget labels for accessibility.`] }, \"{0}, Disabled Reason: {1}\", label, element.disabled);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (element.submenuActions?.length) {\n\t\t\t\t\t\t\tlabel = localize('actionList.submenuHint', \"{0}, use right arrow to access options\", label);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn label;\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t},\n\t\t\t\tgetWidgetAriaLabel: () => localize({ key: 'customQuickFixWidget', comment: [`An action widget option`] }, \"Action Widget\"),\n\t\t\t\tgetRole: (e) => {\n\t\t\t\t\tswitch (e.kind) {\n\t\t\t\t\t\tcase ActionListItemKind.Action:\n\t\t\t\t\t\t\treturn 'option';\n\t\t\t\t\t\tcase ActionListItemKind.Separator:\n\t\t\t\t\t\t\treturn 'separator';\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn 'separator';\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgetWidgetRole: () => 'listbox',\n\t\t\t\t...accessibilityProvider\n\t\t\t},\n\t\t}));\n\n\t\tthis._list.style(defaultListStyles);\n\n\t\tthis._register(this._list.onMouseClick(e => this.onListClick(e)));\n\t\tthis._register(this._list.onMouseOver(e => this.onListHover(e)));\n\t\tthis._register(this._list.onDidChangeFocus(() => this.onFocus()));\n\t\tthis._register(this._list.onDidChangeSelection(e => this.onListSelection(e)));\n\n\t\tthis._allMenuItems = [...items];\n\n\t\t// Create filter input and/or secondary heading\n\t\tif (this._options?.showFilter || this._options?.secondaryHeading) {\n\t\t\tthis._filterContainer = document.createElement('div');\n\t\t\tthis._filterContainer.className = 'action-list-filter';\n\t\t\tconst filterRow = dom.append(this._filterContainer, dom.$('.action-list-filter-row'));\n\n\t\t\tif (this._options?.showFilter) {\n\t\t\t\tthis._filterInput = document.createElement('input');\n\t\t\t\tthis._filterInput.type = 'text';\n\t\t\t\tthis._filterInput.className = 'action-list-filter-input';\n\t\t\t\tthis._filterInput.placeholder = this._options?.filterPlaceholder ?? localize('actionList.filter.placeholder', \"Search...\");\n\t\t\t\tthis._filterInput.setAttribute('aria-label', localize('actionList.filter.ariaLabel', \"Filter items\"));\n\t\t\t\tfilterRow.appendChild(this._filterInput);\n\n\t\t\t\tconst filterActions = this._options?.filterActions ?? [];\n\t\t\t\tif (filterActions.length > 0) {\n\t\t\t\t\tconst filterActionsContainer = dom.append(filterRow, dom.$('.action-list-filter-actions'));\n\t\t\t\t\tconst filterActionBar = this._register(new ActionBar(filterActionsContainer));\n\t\t\t\t\tfilterActionBar.push(filterActions, { icon: true, label: false });\n\t\t\t\t}\n\n\t\t\t\tthis._register(dom.addDisposableListener(this._filterInput, 'input', () => {\n\t\t\t\t\tthis._filterText = this._filterInput!.value;\n\t\t\t\t\tthis._applyOrUpdateFilter();\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tif (this._options?.secondaryHeading) {\n\t\t\t\tconst filterLabelEl = dom.append(filterRow, dom.$('.action-list-filter-label'));\n\t\t\t\tfilterLabelEl.textContent = this._options.secondaryHeading;\n\t\t\t}\n\t\t}\n\n\t\t// Create footer text\n\t\tif (this._options?.footerText) {\n\t\t\tthis._footerContainer = document.createElement('div');\n\t\t\tthis._footerContainer.className = 'action-list-footer';\n\t\t\tthis._footerContainer.textContent = this._options.footerText;\n\t\t}\n\n\t\t// Create header banner\n\t\tif (this._options?.headerText) {\n\t\t\tthis._headerContainer = document.createElement('div');\n\t\t\tthis._headerContainer.className = 'action-list-header';\n\t\t\tif (this._options.headerIcon) {\n\t\t\t\tconst icon = dom.append(this._headerContainer, dom.$('span.action-list-header-icon'));\n\t\t\t\ticon.classList.add(...ThemeIcon.asClassNameArray(this._options.headerIcon));\n\t\t\t\t// Decorative: the header text already conveys the meaning.\n\t\t\t\ticon.setAttribute('aria-hidden', 'true');\n\t\t\t}\n\t\t\tconst text = dom.append(this._headerContainer, dom.$('span.action-list-header-text'));\n\t\t\ttext.textContent = this._options.headerText;\n\t\t}\n\n\t\tthis._applyFilter();\n\n\t\tif (this._list.length) {\n\t\t\tthis._focusCheckedOrFirst();\n\t\t}\n\n\t\t// ArrowRight opens submenu for the focused item and moves focus into it\n\t\tthis._register(dom.addDisposableListener(this.domNode, 'keydown', (e: KeyboardEvent) => {\n\t\t\tif (e.key === 'ArrowRight') {\n\t\t\t\tconst focused = this._list.getFocus();\n\t\t\t\tif (focused.length > 0) {\n\t\t\t\t\tconst element = this._list.element(focused[0]);\n\t\t\t\t\tif (element?.submenuActions?.length) {\n\t\t\t\t\t\tdom.EventHelper.stop(e, true);\n\t\t\t\t\t\tconst rowElement = this._getRowElement(focused[0]);\n\t\t\t\t\t\tif (rowElement) {\n\t\t\t\t\t\t\tthis._showSubmenuForElement(element, rowElement);\n\t\t\t\t\t\t\tthis._currentSubmenuWidget?.focus();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\t// When the list has focus and user types a printable character,\n\t\t// forward it to the filter input so search begins automatically.\n\t\tif (this._filterInput) {\n\t\t\tthis._register(dom.addDisposableListener(this.domNode, 'keydown', (e: KeyboardEvent) => {\n\t\t\t\tif (this._filterInput && !dom.isActiveElement(this._filterInput)\n\t\t\t\t\t&& e.key.length === 1 && e.key !== ' ' && !e.ctrlKey && !e.metaKey && !e.altKey) {\n\t\t\t\t\tthis._filterInput.focus();\n\t\t\t\t\tthis._filterInput.value = e.key;\n\t\t\t\t\tthis._filterText = e.key;\n\t\t\t\t\tthis._applyOrUpdateFilter();\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\t}\n\n\tprivate _toggleSection(section: string): void {\n\t\tif (this._collapsedSections.has(section)) {\n\t\t\tthis._collapsedSections.delete(section);\n\t\t} else {\n\t\t\tthis._collapsedSections.add(section);\n\t\t}\n\t\tthis._options?.onDidToggleSection?.(section, this._collapsedSections.has(section));\n\t\tthis._applyFilter();\n\t}\n\n\tprivate _applyOrUpdateFilter(): void {\n\t\tif (!this._delegate.onFilter) {\n\t\t\tthis._applyFilter();\n\t\t\treturn;\n\t\t}\n\n\t\tconst filterText = this._filterText;\n\t\tthis._filterCts.value?.cancel();\n\t\tconst cts = new CancellationTokenSource();\n\t\tthis._filterCts.value = cts;\n\t\tthis._delegate.onFilter(filterText, cts.token).then(items => {\n\t\t\tif (cts.token.isCancellationRequested) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._allMenuItems = [...items];\n\t\t\tthis._applyFilter(true);\n\t\t}).catch(() => { /* best-effort */ });\n\t}\n\n\tprivate _applyFilter(skipTextFilter = false, fireLayout = true): void {\n\t\tconst filterLower = skipTextFilter ? '' : this._filterText.toLowerCase();\n\t\tconst isFiltering = !skipTextFilter && filterLower.length > 0;\n\t\tconst visible: IActionListItem<T>[] = [];\n\n\t\t// Remember the focused item before splice\n\t\tconst focusedIndexes = this._list.getFocus();\n\t\tlet focusedItem: IActionListItem<T> | undefined;\n\t\tif (focusedIndexes.length > 0) {\n\t\t\tfocusedItem = this._list.element(focusedIndexes[0]);\n\t\t}\n\n\t\tif (isFiltering) {\n\t\t\tlet pendingSeparator: IActionListItem<T> | undefined;\n\t\t\tlet filteredSectionItems: IActionListItem<T>[] = [];\n\t\t\tlet hasMatchingActionInSection = false;\n\n\t\t\tconst flushFilteredSection = () => {\n\t\t\t\tif (pendingSeparator && hasMatchingActionInSection) {\n\t\t\t\t\tvisible.push(pendingSeparator);\n\t\t\t\t}\n\t\t\t\tvisible.push(...filteredSectionItems);\n\t\t\t\tpendingSeparator = undefined;\n\t\t\t\tfilteredSectionItems = [];\n\t\t\t\thasMatchingActionInSection = false;\n\t\t\t};\n\n\t\t\tconst matchesFilter = (item: IActionListItem<T>) => {\n\t\t\t\tconst label = (item.label ?? '').toLowerCase();\n\t\t\t\tconst descValue = typeof item.description === 'string' ? item.description : (item.description?.value ?? '');\n\t\t\t\treturn label.includes(filterLower) || descValue.toLowerCase().includes(filterLower);\n\t\t\t};\n\n\t\t\tfor (const item of this._allMenuItems) {\n\t\t\t\tif (item.kind === ActionListItemKind.Header) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (item.kind === ActionListItemKind.Separator) {\n\t\t\t\t\tflushFilteredSection();\n\t\t\t\t\tpendingSeparator = item.label ? item : undefined;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (item.showAlways) {\n\t\t\t\t\tfilteredSectionItems.push(item);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (item.isSectionToggle) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (matchesFilter(item)) {\n\t\t\t\t\thasMatchingActionInSection = true;\n\t\t\t\t\tfilteredSectionItems.push(item);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tflushFilteredSection();\n\t\t} else {\n\t\t\tfor (const item of this._allMenuItems) {\n\t\t\t\tif (item.kind === ActionListItemKind.Header) {\n\t\t\t\t\tvisible.push(item);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (item.kind === ActionListItemKind.Separator) {\n\t\t\t\t\tif (item.section && this._collapsedSections.has(item.section)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tvisible.push(item);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Update icon for section toggle items based on collapsed state\n\t\t\t\tif (item.isSectionToggle && item.section) {\n\t\t\t\t\tconst collapsed = this._collapsedSections.has(item.section);\n\t\t\t\t\tvisible.push({\n\t\t\t\t\t\t...item,\n\t\t\t\t\t\tgroup: { ...item.group!, icon: collapsed ? Codicon.chevronRight : Codicon.chevronDown },\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// Not filtering - check collapsed sections\n\t\t\t\tif (item.section && this._collapsedSections.has(item.section)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tvisible.push(item);\n\t\t\t}\n\t\t}\n\n\t\t// Remove orphaned separators while keeping labeled separators that act as\n\t\t// section headers above their following action items.\n\t\tconst hasActionBefore: boolean[] = [];\n\t\tlet seenAction = false;\n\t\tfor (let i = 0; i < visible.length; i++) {\n\t\t\thasActionBefore[i] = seenAction;\n\t\t\tif (visible[i].kind === ActionListItemKind.Action) {\n\t\t\t\tseenAction = true;\n\t\t\t}\n\t\t}\n\n\t\tconst hasActionBeforeNextSeparator: boolean[] = [];\n\t\tlet seenActionInSection = false;\n\t\tfor (let i = visible.length - 1; i >= 0; i--) {\n\t\t\tif (visible[i].kind === ActionListItemKind.Action) {\n\t\t\t\tseenActionInSection = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (visible[i].kind !== ActionListItemKind.Separator) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\thasActionBeforeNextSeparator[i] = seenActionInSection;\n\t\t\tseenActionInSection = false;\n\t\t}\n\n\t\tfor (let i = visible.length - 1; i >= 0; i--) {\n\t\t\tconst item = visible[i];\n\t\t\tif (item.kind !== ActionListItemKind.Separator) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst hasFollowingActionInSection = hasActionBeforeNextSeparator[i];\n\t\t\tconst isLeadingUnlabeledDivider = !item.label && !hasActionBefore[i];\n\t\t\tif (!hasFollowingActionInSection || isLeadingUnlabeledDivider) {\n\t\t\t\tvisible.splice(i, 1);\n\t\t\t}\n\t\t}\n\n\t\t// Recompute group title positions based on visible items\n\t\tif (this._options?.showGroupTitleOnFirstItem) {\n\t\t\tthis._recomputeGroupTitles(visible);\n\t\t}\n\n\t\t// Capture whether the filter input currently has focus before splice\n\t\t// which may cause DOM changes that shift focus.\n\t\tconst filterInputHasFocus = this._filterInput && dom.isActiveElement(this._filterInput);\n\n\t\tthis._list.splice(0, this._list.length, visible);\n\n\t\t// Notify the parent that a re-layout is needed\n\t\tif (fireLayout) {\n\t\t\tthis._onDidRequestLayout.fire();\n\t\t}\n\n\t\t// Restore focus after splice destroyed DOM elements,\n\t\t// otherwise the blur handler in ActionWidgetService closes the widget.\n\t\t// Keep focus on the filter input if the user is typing a filter.\n\t\tif (filterInputHasFocus) {\n\t\t\tthis._filterInput?.focus();\n\t\t\t// Keep a highlighted item in the list so Enter works without pressing DownArrow first\n\t\t\tthis._focusCheckedOrFirst();\n\t\t} else if (this._hasLaidOut) {\n\t\t\t// Restore focus to the previously focused item\n\t\t\tif (focusedItem) {\n\t\t\t\tconst focusedItemId = (focusedItem.item as { id?: string })?.id;\n\t\t\t\tif (focusedItemId) {\n\t\t\t\t\tfor (let i = 0; i < this._list.length; i++) {\n\t\t\t\t\t\tconst el = this._list.element(i);\n\t\t\t\t\t\tif ((el.item as { id?: string })?.id === focusedItemId) {\n\t\t\t\t\t\t\tthis._list.setFocus([i]);\n\t\t\t\t\t\t\tthis._list.reveal(i);\n\t\t\t\t\t\t\t// Move DOM focus back to the list: the splice above destroyed\n\t\t\t\t\t\t\t// the previously focused row, leaving DOM focus on the body.\n\t\t\t\t\t\t\tthis._list.domFocus();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Returns the filter container element, if filter is enabled.\n\t * The caller is responsible for appending it to the widget DOM.\n\t */\n\tget filterContainer(): HTMLElement | undefined {\n\t\treturn this._filterContainer;\n\t}\n\n\tget footerContainer(): HTMLElement | undefined {\n\t\treturn this._footerContainer;\n\t}\n\n\tget headerContainer(): HTMLElement | undefined {\n\t\treturn this._headerContainer;\n\t}\n\n\tget filterInput(): HTMLInputElement | undefined {\n\t\treturn this._filterInput;\n\t}\n\n\tprivate focusCondition(element: IActionListItem<unknown>): boolean {\n\t\treturn !element.disabled && element.kind === ActionListItemKind.Action;\n\t}\n\n\tfocus(): void {\n\t\tif (this._filterInput && this._options?.focusFilterOnOpen) {\n\t\t\tthis._filterInput.focus();\n\t\t\t// Highlight the first item so Enter works immediately\n\t\t\tthis._focusCheckedOrFirst();\n\t\t\treturn;\n\t\t}\n\t\tthis._list.domFocus();\n\t\tthis._focusCheckedOrFirst();\n\t}\n\n\tclearFocus(): void {\n\t\tthis._list.setFocus([]);\n\t}\n\n\tgetFocusedElement(): IActionListItem<T> | undefined {\n\t\tconst focused = this._list.getFocus();\n\t\tif (focused.length > 0) {\n\t\t\treturn this._list.element(focused[0]);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate _focusCheckedOrFirst(): void {\n\t\tthis._suppressHover = true;\n\t\ttry {\n\t\t\t// Try to focus the checked item first\n\t\t\tfor (let i = 0; i < this._list.length; i++) {\n\t\t\t\tconst element = this._list.element(i);\n\t\t\t\tif (element.kind === ActionListItemKind.Action && (element.item as { checked?: boolean })?.checked) {\n\t\t\t\t\tthis._list.setFocus([i]);\n\t\t\t\t\tthis._list.reveal(i);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Set focus on the first focusable item without moving DOM focus\n\t\t\tthis._list.focusFirst(undefined, this.focusCondition);\n\t\t\tconst focused = this._list.getFocus();\n\t\t\tif (focused.length > 0) {\n\t\t\t\tthis._list.reveal(focused[0]);\n\t\t\t}\n\t\t} finally {\n\t\t\tthis._suppressHover = false;\n\t\t}\n\t}\n\n\thide(didCancel?: boolean): void {\n\t\tthis._delegate.onHide(didCancel);\n\t\tthis.cts.cancel();\n\t\tthis._filterCts.value?.cancel();\n\t\tthis._filterCts.clear();\n\t\tthis._hideSubmenu();\n\t}\n\n\tclearFilter(): boolean {\n\t\tif (this._filterInput && this._filterText) {\n\t\t\tthis._filterInput.value = '';\n\t\t\tthis._filterText = '';\n\t\t\tthis._applyOrUpdateFilter();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Whether this widget uses dynamic height (has filter or collapsible sections).\n\t */\n\tget hasDynamicHeight(): boolean {\n\t\tif (this._options?.showFilter) {\n\t\t\treturn true;\n\t\t}\n\t\treturn this._allMenuItems.some(item => item.isSectionToggle);\n\t}\n\n\t/**\n\t * The height of a single action row in pixels.\n\t */\n\tget lineHeight(): number {\n\t\treturn this._actionLineHeight;\n\t}\n\n\t/**\n\t * Returns the height for an action item, using a taller line height\n\t * for items with a detail (second line).\n\t */\n\tprotected _getItemHeight(item: IActionListItem<T>): number {\n\t\tswitch (item.kind) {\n\t\t\tcase ActionListItemKind.Header:\n\t\t\t\treturn this._headerLineHeight;\n\t\t\tcase ActionListItemKind.Separator:\n\t\t\t\treturn item.label ? this._actionLineHeight : this._separatorLineHeight;\n\t\t\tdefault:\n\t\t\t\tif (item.inlineToggle) {\n\t\t\t\t\treturn this._options?.inlineToggleItemHeight ?? 70;\n\t\t\t\t}\n\t\t\t\treturn item.detail ? (this._options?.detailItemHeight ?? 48) : this._actionLineHeight;\n\t\t}\n\t}\n\n\t/**\n\t * Computes the total height of all items (including collapsed/filtered items).\n\t */\n\tcomputeFullHeight(): number {\n\t\tlet fullHeight = 0;\n\t\tfor (const item of this._allMenuItems) {\n\t\t\tfullHeight += this._getItemHeight(item);\n\t\t}\n\t\treturn fullHeight;\n\t}\n\n\t/**\n\t * Computes the total height of visible items in the list.\n\t */\n\tcomputeListHeight(): number {\n\t\tconst visibleCount = this._list.length;\n\t\tlet listHeight = 0;\n\t\tfor (let i = 0; i < visibleCount; i++) {\n\t\t\tconst element = this._list.element(i);\n\t\t\tlistHeight += this._getItemHeight(element);\n\t\t}\n\t\treturn listHeight;\n\t}\n\n\t/**\n\t * Lays out the list widget with the given explicit dimensions.\n\t */\n\tlayout(height: number, width?: number): void {\n\t\tthis._hasLaidOut = true;\n\t\tthis._list.layout(height, width);\n\t\tthis.domNode.style.height = `${height}px`;\n\n\t\t// Place filter container on the preferred side.\n\t\tif (this._filterContainer && this._filterContainer.parentElement) {\n\t\t\tthis._filterContainer.parentElement.insertBefore(this._filterContainer, this.domNode);\n\t\t}\n\t}\n\n\tcomputeMaxWidth(minWidth: number): number {\n\t\tconst visibleCount = this._list.length;\n\t\tconst effectiveMinWidth = Math.max(minWidth, this._options?.minWidth ?? 0);\n\t\tconst rawMaxWidthCap = this._options?.maxWidth ?? Number.POSITIVE_INFINITY;\n\t\tconst maxWidthCap = Math.max(rawMaxWidthCap, effectiveMinWidth);\n\t\tconst clamp = (w: number) => Math.min(Math.max(w, effectiveMinWidth), maxWidthCap);\n\t\tlet maxWidth = effectiveMinWidth;\n\n\t\tconst totalItemCount = this._allMenuItems.length;\n\t\tif (totalItemCount >= 50) {\n\t\t\treturn clamp(380);\n\t\t}\n\n\t\tif (totalItemCount > visibleCount) {\n\t\t\t// Temporarily splice in all items to measure widths,\n\t\t\t// preventing width jumps when expanding/collapsing sections.\n\t\t\tconst visibleItems: IActionListItem<T>[] = [];\n\t\t\tfor (let i = 0; i < visibleCount; i++) {\n\t\t\t\tvisibleItems.push(this._list.element(i));\n\t\t\t}\n\n\t\t\tconst allItems = [...this._allMenuItems];\n\t\t\tthis._list.splice(0, visibleCount, allItems);\n\t\t\tlet allItemsHeight = 0;\n\t\t\tfor (const item of allItems) {\n\t\t\t\tallItemsHeight += this._getItemHeight(item);\n\t\t\t}\n\t\t\tthis._list.layout(allItemsHeight);\n\n\t\t\tconst itemWidths: number[] = [];\n\t\t\tfor (let i = 0; i < allItems.length; i++) {\n\t\t\t\tconst element = this._getRowElement(i);\n\t\t\t\tif (element) {\n\t\t\t\t\telement.style.width = 'auto';\n\t\t\t\t\tconst width = element.getBoundingClientRect().width;\n\t\t\t\t\telement.style.width = '';\n\t\t\t\t\titemWidths.push(width + this._computeToolbarWidth(allItems[i]));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmaxWidth = clamp(Math.max(...itemWidths));\n\n\t\t\t// Restore visible items\n\t\t\tthis._list.splice(0, allItems.length, visibleItems);\n\t\t\treturn maxWidth;\n\t\t}\n\n\t\t// All items are visible, measure them directly\n\t\tconst itemWidths: number[] = [];\n\t\tfor (let i = 0; i < visibleCount; i++) {\n\t\t\tconst element = this._getRowElement(i);\n\t\t\tif (element) {\n\t\t\t\telement.style.width = 'auto';\n\t\t\t\tconst width = element.getBoundingClientRect().width;\n\t\t\t\telement.style.width = '';\n\t\t\t\titemWidths.push(width + this._computeToolbarWidth(this._list.element(i)));\n\t\t\t}\n\t\t}\n\t\treturn clamp(Math.max(...itemWidths));\n\t}\n\n\tfocusPrevious() {\n\t\tif (this._filterInput && dom.isActiveElement(this._filterInput)) {\n\t\t\tthis._list.domFocus();\n\t\t\t// An item is already highlighted; advance from it instead of jumping to last\n\t\t\tconst current = this._list.getFocus();\n\t\t\tif (current.length > 0) {\n\t\t\t\tthis._list.focusPrevious(1, false, undefined, this.focusCondition);\n\t\t\t\tconst focused = this._list.getFocus();\n\t\t\t\t// If we couldn't move (already at first), go to filter\n\t\t\t\tif (focused.length > 0 && focused[0] >= current[0]) {\n\t\t\t\t\tthis._filterInput.focus();\n\t\t\t\t} else if (focused.length > 0) {\n\t\t\t\t\tthis._list.reveal(focused[0]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._list.focusLast(undefined, this.focusCondition);\n\t\t\t\tconst focused = this._list.getFocus();\n\t\t\t\tif (focused.length > 0) {\n\t\t\t\t\tthis._list.reveal(focused[0]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst previousFocus = this._list.getFocus();\n\t\tthis._list.focusPrevious(1, true, undefined, this.focusCondition);\n\t\tconst focused = this._list.getFocus();\n\t\tif (focused.length > 0) {\n\t\t\t// If focus wrapped (was at first focusable, now at last), move to filter instead\n\t\t\tif (this._filterInput && previousFocus.length > 0 && focused[0] > previousFocus[0]) {\n\t\t\t\tthis._list.setFocus([]);\n\t\t\t\tthis._filterInput.focus();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._list.reveal(focused[0]);\n\t\t}\n\t}\n\n\tfocusNext() {\n\t\tif (this._filterInput && dom.isActiveElement(this._filterInput)) {\n\t\t\tthis._list.domFocus();\n\t\t\t// An item is already highlighted; advance from it instead of jumping to first\n\t\t\tconst current = this._list.getFocus();\n\t\t\tif (current.length > 0) {\n\t\t\t\tthis._list.focusNext(1, false, undefined, this.focusCondition);\n\t\t\t\tconst focused = this._list.getFocus();\n\t\t\t\tif (focused.length > 0) {\n\t\t\t\t\tthis._list.reveal(focused[0]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._list.focusFirst(undefined, this.focusCondition);\n\t\t\t\tconst focused = this._list.getFocus();\n\t\t\t\tif (focused.length > 0) {\n\t\t\t\t\tthis._list.reveal(focused[0]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst previousFocus = this._list.getFocus();\n\t\tthis._list.focusNext(1, true, undefined, this.focusCondition);\n\t\tconst focused = this._list.getFocus();\n\t\tif (focused.length > 0) {\n\t\t\t// If focus wrapped (was at last focusable, now at first), move to filter instead\n\t\t\tif (this._filterInput && previousFocus.length > 0 && focused[0] < previousFocus[0]) {\n\t\t\t\tthis._list.setFocus([]);\n\t\t\t\tthis._filterInput.focus();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._list.reveal(focused[0]);\n\t\t}\n\t}\n\n\tcollapseFocusedSection() {\n\t\tconst section = this._getFocusedSection();\n\t\tif (section && !this._collapsedSections.has(section)) {\n\t\t\tthis._toggleSection(section);\n\t\t}\n\t}\n\n\texpandFocusedSection() {\n\t\tconst section = this._getFocusedSection();\n\t\tif (section && this._collapsedSections.has(section)) {\n\t\t\tthis._toggleSection(section);\n\t\t}\n\t}\n\n\ttoggleFocusedSection(): boolean {\n\t\tconst focused = this._list.getFocus();\n\t\tif (focused.length === 0) {\n\t\t\treturn false;\n\t\t}\n\t\tconst element = this._list.element(focused[0]);\n\t\tif (element.isSectionToggle && element.section) {\n\t\t\tthis._toggleSection(element.section);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate _getFocusedSection(): string | undefined {\n\t\tconst focused = this._list.getFocus();\n\t\tif (focused.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst element = this._list.element(focused[0]);\n\t\tif (element.isSectionToggle && element.section) {\n\t\t\treturn element.section;\n\t\t}\n\t\treturn element.section;\n\t}\n\n\tacceptSelected(preview?: boolean) {\n\t\tconst focused = this._list.getFocus();\n\t\tif (focused.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst focusIndex = focused[0];\n\t\tconst element = this._list.element(focusIndex);\n\t\tif (!this.focusCondition(element)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst event = preview ? new PreviewSelectedEvent() : new AcceptSelectedEvent();\n\t\tthis._list.setSelection([focusIndex], event);\n\t}\n\n\tprivate onListSelection(e: IListEvent<IActionListItem<T>>): void {\n\t\tif (!e.elements.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst element = e.elements[0];\n\t\tif (element.isSectionToggle && element.section) {\n\t\t\tthis._list.setSelection([]);\n\t\t\tconst section = element.section;\n\t\t\tqueueMicrotask(() => {\n\t\t\t\tthis._toggleSection(section);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\t// Don't select when clicking the toolbar, submenu indicator, or inline toggle\n\t\tif (dom.isMouseEvent(e.browserEvent)) {\n\t\t\tconst target = e.browserEvent.target;\n\t\t\tif (dom.isHTMLElement(target) && (target.closest('.action-list-item-toolbar') || target.closest('.action-list-submenu-indicator') || target.closest('.action-list-item-inline-toggle'))) {\n\t\t\t\tthis._list.setSelection([]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (element.item && this.focusCondition(element)) {\n\t\t\tconst isPreviewEvent = e.browserEvent instanceof PreviewSelectedEvent;\n\t\t\tthis._delegate.onSelect(element.item, isPreviewEvent && this._supportsPreview);\n\t\t} else {\n\t\t\tthis._list.setSelection([]);\n\t\t}\n\t}\n\n\tprivate onFocus() {\n\t\tconst focused = this._list.getFocus();\n\t\tif (focused.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst focusIndex = focused[0];\n\t\tconst element = this._list.element(focusIndex);\n\t\tthis._delegate.onFocus?.(element.item);\n\n\t\t// Show hover on focus change (suppress during programmatic initial focus)\n\t\tif (!this._suppressHover) {\n\t\t\tthis._showHoverForElement(element, focusIndex);\n\t\t}\n\t}\n\n\tprivate _removeItem(item: IActionListItem<T>): void {\n\t\tconst index = this._allMenuItems.indexOf(item);\n\t\tif (index >= 0) {\n\t\t\tthis._allMenuItems.splice(index, 1);\n\t\t\tthis._applyFilter();\n\t\t}\n\t}\n\n\tprivate _recomputeGroupTitles(items: readonly IActionListItem<T>[]): void {\n\t\tthis._groupTitleByIndex.clear();\n\t\tconst seenTitles = new Set<string>();\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\tconst item = items[i];\n\t\t\tif (item.kind === ActionListItemKind.Action && item.group?.title && !seenTitles.has(item.group.title)) {\n\t\t\t\tseenTitles.add(item.group.title);\n\t\t\t\tthis._groupTitleByIndex.set(i, item.group.title);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _computeToolbarWidth(item: IActionListItem<T>): number {\n\t\tlet actionCount = item.toolbarActions?.length ?? 0;\n\t\tif (item.onRemove) {\n\t\t\tactionCount++;\n\t\t}\n\t\tif (actionCount === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\t// Each toolbar action button is ~22px (16px icon + padding) plus 6px row gap\n\t\tconst actionButtonWidth = 22;\n\t\treturn actionCount * actionButtonWidth + 6;\n\t}\n\n\tprivate _getRowElement(index: number): HTMLElement | null {\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\treturn this.domNode.ownerDocument.getElementById(this._list.getElementID(index));\n\t}\n\n\tprivate _showHoverForElement(element: IActionListItem<T>, index: number): void {\n\t\tif (this._currentSubmenuElement === element) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst hasHoverContent = !!element.hover?.content;\n\t\tconst hasSubmenuActions = !!element.submenuActions?.length;\n\n\t\tif (hasHoverContent || hasSubmenuActions) {\n\t\t\tconst rowElement = this._getRowElement(index);\n\t\t\tif (rowElement) {\n\t\t\t\tthis._showSubmenuForElement(element, rowElement);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Navigated to an item with no hover/submenu — fully tear down any\n\t\t// previous submenu so a blank panel doesn't linger.\n\t\tthis._hideSubmenu();\n\t}\n\n\tprivate _showSubmenuForItem(item: IActionListItem<T>): void {\n\t\tconst index = this._list.indexOf(item);\n\t\tif (index >= 0) {\n\t\t\tconst rowElement = this._getRowElement(index);\n\t\t\tif (rowElement) {\n\t\t\t\tthis._showSubmenuForElement(item, rowElement);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _showSubmenuForElement(element: IActionListItem<T>, anchor: HTMLElement): void {\n\t\tif (this._currentSubmenuElement === element) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._submenuDisposables.clear();\n\t\tthis._currentSubmenuElement = element;\n\t\tthis._clearSubmenuContainer();\n\n\t\t// When the item has hover content, render it as a header\n\t\tlet hoverHeader: HTMLElement | undefined;\n\t\tconst hoverContent = element.hover?.content;\n\t\tif (hoverContent) {\n\t\t\tif (dom.isHTMLElement(hoverContent)) {\n\t\t\t\thoverHeader = hoverContent;\n\t\t\t\t// The hover element is owned by the caller and reused across shows,\n\t\t\t\t// so its disposable must NOT be tied to the per-navigation submenu\n\t\t\t\t// store (which is cleared every time the submenu switches). Tearing\n\t\t\t\t// it down there would destroy reused content — e.g. Button widgets\n\t\t\t\t// remove their DOM on dispose, leaving an empty hover. Track it for\n\t\t\t\t// the widget's lifetime instead.\n\t\t\t\tif (element.hover?.disposable) {\n\t\t\t\t\tthis._register(element.hover.disposable);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst markdown = typeof hoverContent === 'string' ? new MarkdownString(hoverContent) : hoverContent;\n\t\t\t\tconst linkHandler = this._options?.linkHandler;\n\t\t\t\tconst rendered = renderMarkdown(markdown, {\n\t\t\t\t\tactionHandler: (url: string) => {\n\t\t\t\t\t\tconst uri = URI.parse(url);\n\t\t\t\t\t\tif (linkHandler) {\n\t\t\t\t\t\t\tlinkHandler(uri, element);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis._openerService.open(uri, { allowCommands: true });\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tthis._submenuDisposables.add(rendered);\n\t\t\t\thoverHeader = rendered.element;\n\t\t\t}\n\t\t\thoverHeader.classList.add('action-list-submenu-hover-header');\n\t\t\tif (element.submenuActions?.length) {\n\t\t\t\thoverHeader.classList.add('has-submenu');\n\t\t\t}\n\t\t\tthis._submenuContainer.appendChild(hoverHeader);\n\t\t}\n\n\t\tconst hasSubmenuActions = !!element.submenuActions?.length;\n\n\t\t// Show container before creating widget so List can measure during construction\n\t\tthis._submenuContainer.style.display = '';\n\t\tthis._submenuContainer.style.position = 'absolute';\n\t\tthis._submenuContainer.removeAttribute('role');\n\n\t\tconst anchorRect = anchor.getBoundingClientRect();\n\t\tconst parentRect = this.domNode.getBoundingClientRect();\n\t\tconst targetWindow = dom.getWindow(this.domNode);\n\n\t\tlet totalHeight = 0;\n\t\tlet maxWidth = hoverHeader ? hoverHeader.offsetWidth : 0;\n\n\t\tif (hasSubmenuActions) {\n\t\t\t// Convert submenu actions into ActionListWidget items\n\t\t\tconst submenuItems: IActionListItem<IAction>[] = [];\n\t\t\tconst submenuGroups = element.submenuActions!.filter((a): a is SubmenuAction => a instanceof SubmenuAction);\n\t\t\tconst groupsWithActions = submenuGroups.filter(g => g.actions.length > 0);\n\t\t\tfor (let gi = 0; gi < groupsWithActions.length; gi++) {\n\t\t\t\tconst group = groupsWithActions[gi];\n\t\t\t\tif (group.label) {\n\t\t\t\t\tsubmenuItems.push({\n\t\t\t\t\t\tkind: ActionListItemKind.Header,\n\t\t\t\t\t\tgroup: { title: group.label },\n\t\t\t\t\t\tlabel: group.label,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tfor (let ci = 0; ci < group.actions.length; ci++) {\n\t\t\t\t\tconst child = group.actions[ci];\n\t\t\t\t\tconst extendedChild = child as IAction & { icon?: ThemeIcon; hoverContent?: string; onRemove?: () => void };\n\t\t\t\t\tconst icon = extendedChild.icon\n\t\t\t\t\t\t?? ThemeIcon.fromId(child.checked ? Codicon.check.id : Codicon.blank.id);\n\t\t\t\t\tconst hoverContent = extendedChild.hoverContent;\n\t\t\t\t\tsubmenuItems.push({\n\t\t\t\t\t\titem: child,\n\t\t\t\t\t\tkind: ActionListItemKind.Action,\n\t\t\t\t\t\tlabel: child.label,\n\t\t\t\t\t\tdescription: child.tooltip || undefined,\n\t\t\t\t\t\tgroup: { title: '', icon },\n\t\t\t\t\t\thideIcon: false,\n\t\t\t\t\t\thover: hoverContent ? { content: hoverContent } : {},\n\t\t\t\t\t\tonRemove: extendedChild.onRemove,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (gi < groupsWithActions.length - 1) {\n\t\t\t\t\tsubmenuItems.push({ kind: ActionListItemKind.Separator, label: '' });\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Also include non-SubmenuAction items directly\n\t\t\tfor (const action of element.submenuActions!) {\n\t\t\t\tif (!(action instanceof SubmenuAction)) {\n\t\t\t\t\tconst extendedAction = action as IAction & { onRemove?: () => void };\n\t\t\t\t\tsubmenuItems.push({\n\t\t\t\t\t\titem: action,\n\t\t\t\t\t\tkind: ActionListItemKind.Action,\n\t\t\t\t\t\tlabel: action.label,\n\t\t\t\t\t\tdescription: action.tooltip || undefined,\n\t\t\t\t\t\tgroup: { title: '' },\n\t\t\t\t\t\thideIcon: false,\n\t\t\t\t\t\thover: {},\n\t\t\t\t\t\tonRemove: extendedAction.onRemove,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst submenuDelegate: IActionListDelegate<IAction> = {\n\t\t\t\tonHide: () => { },\n\t\t\t\tonSelect: (action) => {\n\t\t\t\t\taction.run();\n\t\t\t\t\tconst parentItem = this._currentSubmenuElement?.item;\n\t\t\t\t\tthis._hideSubmenu();\n\t\t\t\t\tif (parentItem) {\n\t\t\t\t\t\tthis._delegate.onSelect(parentItem);\n\t\t\t\t\t}\n\t\t\t\t\tthis.hide();\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst submenuWidget = this._submenuDisposables.add(this._instantiationService.createInstance(\n\t\t\t\tActionListWidget<IAction>,\n\t\t\t\t'submenu',\n\t\t\t\tfalse,\n\t\t\t\tsubmenuItems,\n\t\t\t\tsubmenuDelegate,\n\t\t\t\tundefined,\n\t\t\t\tundefined,\n\t\t\t));\n\t\t\tthis._submenuContainer.appendChild(submenuWidget.domNode);\n\t\t\tthis._currentSubmenuWidget = submenuWidget;\n\n\t\t\t// The submenu widget's constructor focuses its first item by\n\t\t\t// default; clear that until the user actually navigates into\n\t\t\t// the submenu (via ArrowRight) so it doesn't render as if\n\t\t\t// selected while the parent list still has focus.\n\t\t\tsubmenuWidget.clearFocus();\n\n\t\t\ttotalHeight = submenuWidget.computeListHeight();\n\t\t\tsubmenuWidget.layout(totalHeight);\n\t\t\tconst submenuMaxWidth = submenuWidget.computeMaxWidth(0);\n\t\t\tmaxWidth = Math.max(maxWidth, submenuMaxWidth);\n\t\t\tsubmenuWidget.layout(totalHeight, maxWidth);\n\t\t\tsubmenuWidget.domNode.style.width = `${maxWidth}px`;\n\n\t\t\t// Keyboard navigation in submenu\n\t\t\tthis._submenuDisposables.add(dom.addDisposableListener(submenuWidget.domNode, 'keydown', (e: KeyboardEvent) => {\n\t\t\t\tif (e.key === 'ArrowLeft' || e.key === 'Escape') {\n\t\t\t\t\tdom.EventHelper.stop(e, true);\n\t\t\t\t\tthis._hideSubmenu();\n\t\t\t\t\tthis._list.domFocus();\n\t\t\t\t} else if (e.key === 'Enter') {\n\t\t\t\t\tdom.EventHelper.stop(e, true);\n\t\t\t\t\tconst focused = submenuWidget.getFocusedElement();\n\t\t\t\t\tif (focused?.item) {\n\t\t\t\t\t\tfocused.item.run();\n\t\t\t\t\t\tconst parentItem = this._currentSubmenuElement?.item;\n\t\t\t\t\t\tthis._hideSubmenu();\n\t\t\t\t\t\tif (parentItem) {\n\t\t\t\t\t\t\tthis._delegate.onSelect(parentItem);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t}\n\t\t\t\t} else if (e.key === 'ArrowDown') {\n\t\t\t\t\tdom.EventHelper.stop(e, true);\n\t\t\t\t\tsubmenuWidget.focusNext();\n\t\t\t\t} else if (e.key === 'ArrowUp') {\n\t\t\t\t\tdom.EventHelper.stop(e, true);\n\t\t\t\t\tsubmenuWidget.focusPrevious();\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\n\t\t// Position: prefer right side, fall back to left if not enough space\n\t\tconst viewportWidth = targetWindow.innerWidth;\n\t\tconst spaceRight = viewportWidth - anchorRect.right;\n\t\tconst spaceLeft = parentRect.left;\n\t\tconst panelWidth = maxWidth + 10; // account for border/padding\n\n\t\tconst gap = 4;\n\t\tif (spaceRight >= panelWidth || spaceRight >= spaceLeft) {\n\t\t\tthis._submenuContainer.style.left = `${parentRect.right - parentRect.left + gap}px`;\n\t\t} else {\n\t\t\tthis._submenuContainer.style.left = `${-panelWidth - gap}px`;\n\t\t}\n\t\tconst hoverHeaderHeight = hoverHeader ? hoverHeader.offsetHeight : 0;\n\t\tconst totalPanelHeight = totalHeight + hoverHeaderHeight;\n\t\tconst viewportHeight = targetWindow.innerHeight;\n\t\tconst anchorHeight = anchorRect.height;\n\t\tlet top = anchorRect.top - parentRect.top + (anchorHeight - totalPanelHeight) / 2;\n\t\tconst panelBottom = parentRect.top + top + totalPanelHeight;\n\t\tif (panelBottom > viewportHeight) {\n\t\t\ttop -= (panelBottom - viewportHeight + 8);\n\t\t}\n\t\tif (parentRect.top + top < 0) {\n\t\t\ttop = -parentRect.top;\n\t\t}\n\t\tthis._submenuContainer.style.top = `${top}px`;\n\t}\n\n\tprivate _hideSubmenu(): void {\n\t\tthis._cancelSubmenuHide();\n\t\tthis._cancelSubmenuShow();\n\t\tthis._submenuDisposables.clear();\n\t\tthis._currentSubmenuWidget = undefined;\n\t\tthis._currentSubmenuElement = undefined;\n\t\tthis._clearSubmenuContainer();\n\t\tthis._submenuContainer.style.display = 'none';\n\t}\n\n\t/**\n\t * Clears the submenu/hover panel. If focus currently lives inside the panel\n\t * (e.g. the user clicked a button in the hover content), focus is first moved\n\t * back to the list. Otherwise clearing the panel would drop focus to <body>,\n\t * which blurs the action widget and dismisses it.\n\t */\n\tprivate _clearSubmenuContainer(): void {\n\t\tif (this._submenuContainer.contains(dom.getActiveElement())) {\n\t\t\tthis._list.domFocus();\n\t\t}\n\t\tdom.clearNode(this._submenuContainer);\n\t}\n\n\tprivate _scheduleSubmenuHide(): void {\n\t\tthis._cancelSubmenuHide();\n\t\tthis._submenuHideTimeout = setTimeout(() => {\n\t\t\tthis._hideSubmenu();\n\t\t}, 300);\n\t}\n\n\tprivate _cancelSubmenuHide(): void {\n\t\tif (this._submenuHideTimeout !== undefined) {\n\t\t\tclearTimeout(this._submenuHideTimeout);\n\t\t\tthis._submenuHideTimeout = undefined;\n\t\t}\n\t}\n\n\tprivate _scheduleSubmenuShow(element: IActionListItem<T>, index: number | undefined): void {\n\t\tthis._cancelSubmenuShow();\n\t\tthis._submenuShowTimeout = setTimeout(() => {\n\t\t\tthis._submenuShowTimeout = undefined;\n\t\t\tconst rowElement = typeof index === 'number' ? this._getRowElement(index) : null;\n\t\t\tif (rowElement) {\n\t\t\t\tthis._showSubmenuForElement(element, rowElement);\n\t\t\t}\n\t\t}, 500);\n\t}\n\n\tprivate _cancelSubmenuShow(): void {\n\t\tif (this._submenuShowTimeout !== undefined) {\n\t\t\tclearTimeout(this._submenuShowTimeout);\n\t\t\tthis._submenuShowTimeout = undefined;\n\t\t}\n\t}\n\n\tprivate async onListHover(e: IListMouseEvent<IActionListItem<T>>) {\n\t\tconst element = e.element;\n\n\t\tif (element && element.item && this.focusCondition(element)) {\n\t\t\t// Check if the hover target is inside a toolbar - if so, skip the splice\n\t\t\t// to avoid re-rendering which would destroy the element mid-hover.\n\t\t\t// But still maintain submenu state for items with submenu actions.\n\t\t\tconst isHoveringToolbar = dom.isHTMLElement(e.browserEvent.target) && e.browserEvent.target.closest('.action-list-item-toolbar') !== null;\n\t\t\tif (isHoveringToolbar) {\n\t\t\t\tif (!element.submenuActions?.length) {\n\t\t\t\t\tthis._cancelSubmenuShow();\n\t\t\t\t}\n\t\t\t\tthis._list.setFocus([]);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set focus immediately for responsive hover feedback\n\t\t\tconst hasPanel = !!(element.submenuActions?.length || element.hover?.content);\n\t\t\tif (hasPanel) {\n\t\t\t\tthis._suppressHover = true;\n\t\t\t}\n\t\t\tthis._list.setFocus(typeof e.index === 'number' ? [e.index] : []);\n\t\t\tif (hasPanel) {\n\t\t\t\tthis._suppressHover = false;\n\t\t\t}\n\n\t\t\t// Show hover/submenu panel on row hover with a delay\n\t\t\tif (hasPanel) {\n\t\t\t\tif (this._currentSubmenuElement === element) {\n\t\t\t\t\tthis._cancelSubmenuHide();\n\t\t\t\t\tthis._cancelSubmenuShow();\n\t\t\t\t} else {\n\t\t\t\t\tthis._hideSubmenu();\n\t\t\t\t\tthis._scheduleSubmenuShow(element, e.index);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this._currentSubmenuElement === element) {\n\t\t\t\tthis._cancelSubmenuHide();\n\t\t\t} else {\n\t\t\t\tthis._cancelSubmenuShow();\n\t\t\t\tthis._hideSubmenu();\n\t\t\t}\n\n\t\t\tif (this._delegate.onHover && !element.disabled && element.kind === ActionListItemKind.Action && this._currentSubmenuElement !== element) {\n\t\t\t\tconst result = await this._delegate.onHover(element.item, this.cts.token);\n\t\t\t\tconst canPreview = result ? result.canPreview : undefined;\n\t\t\t\tif (canPreview !== element.canPreview) {\n\t\t\t\t\telement.canPreview = canPreview;\n\t\t\t\t\tif (typeof e.index === 'number') {\n\t\t\t\t\t\tthis._list.splice(e.index, 1, [element]);\n\t\t\t\t\t\tthis._list.setFocus([e.index]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (element && element.hover?.content && typeof e.index === 'number') {\n\t\t\t// Show hover for disabled items that have hover content (with delay)\n\t\t\tif (this._currentSubmenuElement === element) {\n\t\t\t\tthis._cancelSubmenuHide();\n\t\t\t\tthis._cancelSubmenuShow();\n\t\t\t} else {\n\t\t\t\tthis._hideSubmenu();\n\t\t\t\tthis._scheduleSubmenuShow(element, e.index);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate onListClick(e: IListMouseEvent<IActionListItem<T>>): void {\n\t\tif (e.element && this.focusCondition(e.element)) {\n\t\t\tthis._list.setFocus([]);\n\t\t}\n\t}\n}\n\n/**\n * An action list that wraps {@link ActionListWidget} with context-view positioning\n * and anchor-based height computation.\n */\nexport class ActionList<T> extends Disposable {\n\n\tprivate readonly _widget: ActionListWidget<T>;\n\n\tprivate readonly _anchor: HTMLElement | StandardMouseEvent | IAnchor;\n\tprivate _lastMinWidth = 0;\n\tprivate _cachedMaxWidth: number | undefined;\n\tprivate _hasLaidOut = false;\n\tprivate _showAbove: boolean | undefined;\n\n\tget domNode(): HTMLElement {\n\t\treturn this._widget.domNode;\n\t}\n\n\tget filterContainer(): HTMLElement | undefined {\n\t\treturn this._widget.filterContainer;\n\t}\n\n\tget footerContainer(): HTMLElement | undefined {\n\t\treturn this._widget.footerContainer;\n\t}\n\n\tget headerContainer(): HTMLElement | undefined {\n\t\treturn this._widget.headerContainer;\n\t}\n\n\tget filterInput(): HTMLInputElement | undefined {\n\t\treturn this._widget.filterInput;\n\t}\n\n\t/**\n\t * Returns the resolved anchor position after the first layout.\n\t * Used by the context view delegate to lock the dropdown direction.\n\t */\n\tget anchorPosition(): AnchorPosition | undefined {\n\t\tif (this._showAbove === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this._showAbove ? AnchorPosition.ABOVE : AnchorPosition.BELOW;\n\t}\n\n\tconstructor(\n\t\tuser: string,\n\t\tpreview: boolean,\n\t\titems: readonly IActionListItem<T>[],\n\t\t_delegate: IActionListDelegate<T>,\n\t\taccessibilityProvider: Partial<IListAccessibilityProvider<IActionListItem<T>>> | undefined,\n\t\toptions: IActionListOptions | undefined,\n\t\tanchor: HTMLElement | StandardMouseEvent | IAnchor,\n\t\t@IContextViewService private readonly _contextViewService: IContextViewService,\n\t\t@ILayoutService private readonly _layoutService: ILayoutService,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t) {\n\t\tsuper();\n\t\tthis._anchor = anchor;\n\n\t\tthis._widget = this._register(instantiationService.createInstance(\n\t\t\tActionListWidget<T>,\n\t\t\tuser,\n\t\t\tpreview,\n\t\t\titems,\n\t\t\t_delegate,\n\t\t\taccessibilityProvider,\n\t\t\toptions,\n\t\t));\n\n\t\tthis._register(this._widget.onDidRequestLayout(() => {\n\t\t\tif (this._hasLaidOut) {\n\t\t\t\tthis.layout(this._lastMinWidth);\n\t\t\t\tthis._contextViewService.layout();\n\t\t\t}\n\t\t}));\n\t}\n\n\tfocus(): void {\n\t\tthis._widget.focus();\n\t}\n\n\thide(didCancel?: boolean): void {\n\t\tthis._widget.hide(didCancel);\n\t\tthis._contextViewService.hideContextView();\n\t}\n\n\tclearFilter(): boolean {\n\t\treturn this._widget.clearFilter();\n\t}\n\n\tfocusPrevious(): void {\n\t\tthis._widget.focusPrevious();\n\t}\n\n\tfocusNext(): void {\n\t\tthis._widget.focusNext();\n\t}\n\n\tcollapseFocusedSection(): void {\n\t\tthis._widget.collapseFocusedSection();\n\t}\n\n\texpandFocusedSection(): void {\n\t\tthis._widget.expandFocusedSection();\n\t}\n\n\ttoggleFocusedSection(): boolean {\n\t\treturn this._widget.toggleFocusedSection();\n\t}\n\n\tacceptSelected(preview?: boolean): void {\n\t\tthis._widget.acceptSelected(preview);\n\t}\n\n\tprivate hasDynamicHeight(): boolean {\n\t\treturn this._widget.hasDynamicHeight;\n\t}\n\n\tprivate computeActionWidgetVerticalChromeHeight(): number {\n\t\tconst widgetContainer = this.domNode.parentElement?.closest('.action-widget');\n\t\tif (!widgetContainer) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst style = dom.getWindow(widgetContainer).getComputedStyle(widgetContainer);\n\t\tconst toPixels = (value: string): number => Number.parseFloat(value) || 0;\n\t\treturn toPixels(style.paddingTop) + toPixels(style.paddingBottom) + toPixels(style.borderTopWidth) + toPixels(style.borderBottomWidth);\n\t}\n\n\tprivate computeHeight(): number {\n\t\tconst listHeight = this._widget.computeListHeight();\n\n\t\tconst filterHeight = this._widget.filterContainer ? 36 : 0;\n\t\tconst footerHeight = this._widget.footerContainer ? 32 : 0;\n\t\tconst headerHeight = this._widget.headerContainer ? this._widget.headerContainer.offsetHeight || 36 : 0;\n\t\tconst chromeHeight = filterHeight + footerHeight + headerHeight;\n\t\tconst targetWindow = dom.getWindow(this.domNode);\n\t\tlet availableHeight;\n\n\t\tif (this.hasDynamicHeight()) {\n\t\t\tconst viewportHeight = targetWindow.innerHeight;\n\t\t\tconst anchorRect = getAnchorRect(this._anchor);\n\t\t\tconst anchorTopInViewport = anchorRect.top - targetWindow.pageYOffset;\n\t\t\tconst bottomGap = 30;\n\t\t\tconst spaceBelow = viewportHeight - anchorTopInViewport - anchorRect.height - bottomGap;\n\t\t\tconst spaceAbove = anchorTopInViewport;\n\n\t\t\t// Lock the direction on first layout based on whether the full\n\t\t\t// unconstrained list fits below. Once decided, the dropdown stays\n\t\t\t// in the same position even when the visible item count changes.\n\t\t\tif (this._showAbove === undefined) {\n\t\t\t\tconst fullHeight = chromeHeight + this._widget.computeFullHeight();\n\t\t\t\tthis._showAbove = fullHeight > spaceBelow && spaceAbove > spaceBelow;\n\t\t\t}\n\t\t\tavailableHeight = Math.max(0, (this._showAbove ? spaceAbove : spaceBelow) - this.computeActionWidgetVerticalChromeHeight());\n\t\t} else {\n\t\t\tconst padding = 10;\n\t\t\tconst windowHeight = this._layoutService.getContainer(targetWindow).clientHeight;\n\t\t\tconst widgetTop = this.domNode.getBoundingClientRect().top;\n\t\t\tavailableHeight = widgetTop > 0 ? windowHeight - widgetTop - padding : windowHeight * 0.7;\n\t\t}\n\n\t\tconst viewportMaxHeight = Math.floor(targetWindow.innerHeight * 0.6);\n\t\tconst actionLineHeight = this._widget.lineHeight;\n\t\tconst maxHeight = Math.min(Math.max(availableHeight, actionLineHeight * 3 + chromeHeight), viewportMaxHeight);\n\t\tconst height = Math.min(listHeight + chromeHeight, maxHeight);\n\t\treturn height - chromeHeight;\n\t}\n\n\tlayout(minWidth: number): number {\n\t\tthis._hasLaidOut = true;\n\t\tthis._lastMinWidth = minWidth;\n\n\t\tconst listHeight = this.computeHeight();\n\t\tthis._widget.layout(listHeight);\n\n\t\tconst computedWidth = this._widget.computeMaxWidth(minWidth);\n\t\tthis._cachedMaxWidth = computedWidth;\n\t\tthis._widget.layout(listHeight, this._cachedMaxWidth);\n\n\t\treturn this._cachedMaxWidth;\n\t}\n}\n\nfunction stripNewlines(str: string): string {\n\treturn str.replace(/\\r\\n|\\r|\\n/g, ' ');\n}\n"]}
1
+ {"version":3,"sources":["vs/platform/actionWidget/browser/actionList.ts"],"names":[],"mappings":"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","file":"actionList.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 *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../../../base/browser/dom.js';\nimport { StandardMouseEvent } from '../../../base/browser/mouseEvent.js';\nimport { renderMarkdown } from '../../../base/browser/markdownRenderer.js';\nimport { ActionBar } from '../../../base/browser/ui/actionbar/actionbar.js';\nimport { getAnchorRect, IAnchor } from '../../../base/browser/ui/contextview/contextview.js';\nimport { KeybindingLabel } from '../../../base/browser/ui/keybindingLabel/keybindingLabel.js';\nimport { IListEvent, IListMouseEvent, IListRenderer, IListVirtualDelegate } from '../../../base/browser/ui/list/list.js';\nimport { IListAccessibilityProvider, List } from '../../../base/browser/ui/list/listWidget.js';\nimport { IAction, SubmenuAction, toAction } from '../../../base/common/actions.js';\nimport { CancellationToken, CancellationTokenSource } from '../../../base/common/cancellation.js';\nimport { Codicon } from '../../../base/common/codicons.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { IMarkdownString, isMarkdownString, MarkdownString } from '../../../base/common/htmlContent.js';\nimport { ResolvedKeybinding } from '../../../base/common/keybindings.js';\nimport { AnchorPosition } from '../../../base/common/layout.js';\nimport { Disposable, DisposableStore, IDisposable, MutableDisposable, toDisposable } from '../../../base/common/lifecycle.js';\nimport { OS } from '../../../base/common/platform.js';\nimport { ThemeIcon } from '../../../base/common/themables.js';\nimport { URI } from '../../../base/common/uri.js';\nimport './actionWidget.css';\nimport { localize } from '../../../nls.js';\nimport { IContextViewService } from '../../contextview/browser/contextView.js';\nimport { IKeybindingService } from '../../keybinding/common/keybinding.js';\nimport { IOpenerService } from '../../opener/common/opener.js';\nimport { defaultListStyles } from '../../theme/browser/defaultStyles.js';\nimport { asCssVariable } from '../../theme/common/colorRegistry.js';\nimport { ILayoutService } from '../../layout/browser/layoutService.js';\nimport { IInstantiationService } from '../../instantiation/common/instantiation.js';\n\nexport const acceptSelectedActionCommand = 'acceptSelectedCodeAction';\nexport const previewSelectedActionCommand = 'previewSelectedCodeAction';\n\nexport interface IActionListDelegate<T> {\n\tonHide(didCancel?: boolean): void;\n\tonSelect(action: T, preview?: boolean): void;\n\tonFilter?(filter: string, cancellationToken: CancellationToken): Promise<readonly IActionListItem<T>[]>;\n\tonHover?(action: T, cancellationToken: CancellationToken): Promise<{ canPreview: boolean } | void>;\n\tonFocus?(action: T | undefined): void;\n}\n\n/**\n * Optional hover configuration shown when focusing/hovering over an action list item.\n */\nexport interface IActionListItemHover {\n\t/**\n\t * Content to display in the hover. Can be a markdown string or an HTMLElement for full DOM control.\n\t */\n\treadonly content?: string | IMarkdownString | HTMLElement;\n\t/**\n\t * Optional disposable associated with the hover content (e.g. from rendered markdown).\n\t */\n\treadonly disposable?: IDisposable;\n}\n\nexport interface IActionListItem<T> {\n\treadonly item?: T;\n\treadonly kind: ActionListItemKind;\n\treadonly group?: { kind?: unknown; icon?: ThemeIcon; title: string };\n\treadonly disabled?: boolean;\n\treadonly label?: string;\n\t/**\n\t * Optional detail text displayed as a second line below the label.\n\t */\n\treadonly detail?: string;\n\treadonly description?: string | IMarkdownString;\n\t/**\n\t * Optional accessible description used in place of {@link description} for\n\t * screen reader labels. Useful when the visual description contains icons\n\t * or other non-textual content.\n\t */\n\treadonly ariaDescription?: string;\n\t/**\n\t * Optional hover configuration shown when focusing/hovering over the item.\n\t */\n\treadonly hover?: IActionListItemHover;\n\t/**\n\t * Optional actions shown in a nested submenu panel, triggered by a chevron\n\t * indicator on the right side of the item. When set, hovering or clicking\n\t * the chevron opens an inline submenu with these actions.\n\t */\n\treadonly submenuActions?: IAction[];\n\treadonly keybinding?: ResolvedKeybinding;\n\tcanPreview?: boolean | undefined;\n\treadonly hideIcon?: boolean;\n\treadonly tooltip?: string;\n\t/**\n\t * Optional toolbar actions shown when the item is focused or hovered.\n\t */\n\treadonly toolbarActions?: IAction[];\n\t/**\n\t * Optional section identifier. Items with the same section belong to the same\n\t * collapsible group. Only meaningful when the ActionList is created with\n\t * collapsible sections.\n\t */\n\treadonly section?: string;\n\t/**\n\t * When true, clicking this item toggles the section's collapsed state\n\t * instead of selecting it.\n\t */\n\treadonly isSectionToggle?: boolean;\n\t/**\n\t * Optional CSS class name to add to the row container.\n\t */\n\treadonly className?: string;\n\t/**\n\t * Optional badge text to display after the label (e.g., \"New\").\n\t */\n\treadonly badge?: string;\n\t/**\n\t * When true, this item is always shown when filtering produces no other results.\n\t */\n\treadonly showAlways?: boolean;\n\t/**\n\t * Optional callback invoked when the item is removed via the built-in remove button.\n\t * When set, a close button is automatically added to the item toolbar.\n\t */\n\treadonly onRemove?: () => void | Promise<void>;\n}\n\ninterface IActionMenuTemplateData {\n\treadonly container: HTMLElement;\n\treadonly icon: HTMLElement;\n\treadonly text: HTMLElement;\n\treadonly detail: HTMLElement;\n\treadonly badge: HTMLElement;\n\treadonly description?: HTMLElement;\n\treadonly groupTitle: HTMLElement;\n\treadonly keybinding: KeybindingLabel;\n\treadonly toolbar: HTMLElement;\n\treadonly submenuIndicator: HTMLElement;\n\treadonly elementDisposables: DisposableStore;\n\tpreviousClassName?: string;\n}\n\nexport const enum ActionListItemKind {\n\tAction = 'action',\n\tHeader = 'header',\n\tSeparator = 'separator'\n}\n\ninterface IHeaderTemplateData {\n\treadonly container: HTMLElement;\n\treadonly text: HTMLElement;\n}\n\nclass HeaderRenderer<T> implements IListRenderer<IActionListItem<T>, IHeaderTemplateData> {\n\n\tget templateId(): string { return ActionListItemKind.Header; }\n\n\trenderTemplate(container: HTMLElement): IHeaderTemplateData {\n\t\tcontainer.classList.add('group-header');\n\n\t\tconst text = document.createElement('span');\n\t\tcontainer.append(text);\n\n\t\treturn { container, text };\n\t}\n\n\trenderElement(element: IActionListItem<T>, _index: number, templateData: IHeaderTemplateData): void {\n\t\ttemplateData.text.textContent = element.group?.title ?? element.label ?? '';\n\t}\n\n\tdisposeTemplate(_templateData: IHeaderTemplateData): void {\n\t\t// noop\n\t}\n}\n\ninterface ISeparatorTemplateData {\n\treadonly container: HTMLElement;\n\treadonly text: HTMLElement;\n}\n\nclass SeparatorRenderer<T> implements IListRenderer<IActionListItem<T>, ISeparatorTemplateData> {\n\n\tget templateId(): string { return ActionListItemKind.Separator; }\n\n\trenderTemplate(container: HTMLElement): ISeparatorTemplateData {\n\t\tcontainer.classList.add('separator');\n\n\t\tconst text = document.createElement('span');\n\t\tcontainer.append(text);\n\n\t\treturn { container, text };\n\t}\n\n\trenderElement(element: IActionListItem<T>, _index: number, templateData: ISeparatorTemplateData): void {\n\t\ttemplateData.text.textContent = element.label ?? '';\n\t}\n\n\tdisposeTemplate(_templateData: ISeparatorTemplateData): void {\n\t\t// noop\n\t}\n}\n\nclass ActionItemRenderer<T> implements IListRenderer<IActionListItem<T>, IActionMenuTemplateData> {\n\n\tget templateId(): string { return ActionListItemKind.Action; }\n\n\tconstructor(\n\t\tprivate readonly _supportsPreview: boolean,\n\t\tprivate readonly _onRemoveItem: ((item: IActionListItem<T>) => void) | undefined,\n\t\tprivate readonly _onShowSubmenu: ((item: IActionListItem<T>) => void) | undefined,\n\t\tprivate readonly _hasAnySubmenuActions: boolean,\n\t\tprivate readonly _groupTitleByIndex: ReadonlyMap<number, string>,\n\t\tprivate readonly _linkHandler: ((uri: URI, item: IActionListItem<T>) => void) | undefined,\n\t\tprivate readonly _hideDefaultKeybindingTooltip: boolean,\n\t\t@IKeybindingService private readonly _keybindingService: IKeybindingService,\n\t\t@IOpenerService private readonly _openerService: IOpenerService,\n\t) { }\n\n\trenderTemplate(container: HTMLElement): IActionMenuTemplateData {\n\t\tcontainer.classList.add(this.templateId);\n\n\t\tconst icon = document.createElement('div');\n\t\ticon.className = 'icon';\n\t\tcontainer.append(icon);\n\n\t\tconst text = document.createElement('span');\n\t\ttext.className = 'title';\n\t\tcontainer.append(text);\n\n\t\tconst badge = document.createElement('span');\n\t\tbadge.className = 'action-item-badge';\n\t\tcontainer.append(badge);\n\n\t\tconst description = document.createElement('span');\n\t\tdescription.className = 'description';\n\t\tcontainer.append(description);\n\n\t\tconst groupTitle = document.createElement('span');\n\t\tgroupTitle.className = 'group-title';\n\t\tcontainer.append(groupTitle);\n\n\t\tconst detail = document.createElement('span');\n\t\tdetail.className = 'detail';\n\t\tcontainer.append(detail);\n\n\t\tconst keybinding = new KeybindingLabel(container, OS);\n\n\t\tconst toolbar = document.createElement('div');\n\t\ttoolbar.className = 'action-list-item-toolbar';\n\t\tcontainer.append(toolbar);\n\n\t\tconst submenuIndicator = document.createElement('div');\n\t\tsubmenuIndicator.className = 'action-list-submenu-indicator';\n\t\tcontainer.append(submenuIndicator);\n\n\t\tconst elementDisposables = new DisposableStore();\n\n\t\treturn { container, icon, text, detail, badge, description, groupTitle, keybinding, toolbar, submenuIndicator, elementDisposables };\n\t}\n\n\trenderElement(element: IActionListItem<T>, _index: number, data: IActionMenuTemplateData): void {\n\t\t// Clear previous element disposables\n\t\tdata.elementDisposables.clear();\n\n\t\tif (element.group?.icon) {\n\t\t\tdata.icon.className = ThemeIcon.asClassName(element.group.icon);\n\t\t\tif (element.group.icon.color) {\n\t\t\t\tdata.icon.style.color = asCssVariable(element.group.icon.color.id);\n\t\t\t}\n\t\t} else {\n\t\t\tdata.icon.className = ThemeIcon.asClassName(Codicon.lightBulb);\n\t\t\tdata.icon.style.color = 'var(--vscode-editorLightBulb-foreground)';\n\t\t}\n\n\t\tif (!element.item || !element.label) {\n\t\t\treturn;\n\t\t}\n\n\t\tdom.setVisibility(!element.hideIcon, data.icon);\n\n\t\t// Set aria-expanded for section toggle items\n\t\tif (element.isSectionToggle) {\n\t\t\tconst expanded = element.group?.icon === Codicon.chevronDown;\n\t\t\tdata.container.setAttribute('aria-expanded', String(expanded));\n\t\t} else {\n\t\t\tdata.container.removeAttribute('aria-expanded');\n\t\t}\n\n\t\t// Apply optional className - clean up previous to avoid stale classes\n\t\t// from virtualized row reuse\n\t\tif (data.previousClassName) {\n\t\t\tdata.container.classList.remove(data.previousClassName);\n\t\t}\n\t\tdata.container.classList.toggle('action-list-custom', !!element.className);\n\t\tif (element.className) {\n\t\t\tdata.container.classList.add(element.className);\n\t\t}\n\t\tdata.previousClassName = element.className;\n\n\t\tdata.text.textContent = stripNewlines(element.label);\n\n\t\t// Render optional badge\n\t\tif (element.badge) {\n\t\t\tdata.badge.textContent = element.badge;\n\t\t\tdata.badge.style.display = '';\n\t\t} else {\n\t\t\tdata.badge.textContent = '';\n\t\t\tdata.badge.style.display = 'none';\n\t\t}\n\n\t\tif (element.keybinding) {\n\t\t\tdata.description!.textContent = element.keybinding.getLabel();\n\t\t\tdata.description!.style.display = 'inline';\n\t\t\tdata.description!.style.letterSpacing = '0.5px';\n\t\t} else if (element.description) {\n\t\t\tdom.clearNode(data.description!);\n\t\t\tif (typeof element.description === 'string') {\n\t\t\t\tdata.description!.textContent = stripNewlines(element.description);\n\t\t\t} else {\n\t\t\t\tconst rendered = renderMarkdown(element.description, {\n\t\t\t\t\tactionHandler: (content: string) => {\n\t\t\t\t\t\tconst uri = URI.parse(content);\n\t\t\t\t\t\tif (this._linkHandler) {\n\t\t\t\t\t\t\tthis._linkHandler(uri, element);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvoid this._openerService.open(uri, { allowCommands: true });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tdata.elementDisposables.add(rendered);\n\t\t\t\tdata.description!.appendChild(rendered.element);\n\t\t\t}\n\t\t\tdata.description!.style.display = 'inline';\n\t\t} else {\n\t\t\tdata.description!.textContent = '';\n\t\t\tdata.description!.style.display = 'none';\n\t\t}\n\n\t\t// Render group title (shown to the right, separate from description)\n\t\tconst groupTitleText = this._groupTitleByIndex.get(_index);\n\t\tif (groupTitleText) {\n\t\t\tdata.groupTitle.textContent = groupTitleText;\n\t\t\tdata.groupTitle.style.display = '';\n\t\t} else {\n\t\t\tdata.groupTitle.textContent = '';\n\t\t\tdata.groupTitle.style.display = 'none';\n\t\t}\n\n\t\t// Render optional detail (shown as second line below the label)\n\t\tif (element.detail) {\n\t\t\tdata.detail.textContent = stripNewlines(element.detail);\n\t\t\tdata.detail.style.display = '';\n\t\t} else {\n\t\t\tdata.detail.textContent = '';\n\t\t\tdata.detail.style.display = 'none';\n\t\t}\n\n\t\tconst actionTitle = this._keybindingService.lookupKeybinding(acceptSelectedActionCommand)?.getLabel();\n\t\tconst previewTitle = this._keybindingService.lookupKeybinding(previewSelectedActionCommand)?.getLabel();\n\t\tdata.container.classList.toggle('option-disabled', !!element.disabled);\n\t\tif (element.hover !== undefined) {\n\t\t\t// Don't show tooltip when hover content is configured - the rich hover will show instead\n\t\t\tdata.container.title = '';\n\t\t} else if (element.tooltip) {\n\t\t\tdata.container.title = element.tooltip;\n\t\t} else if (element.disabled) {\n\t\t\tdata.container.title = element.label;\n\t\t} else if (this._hideDefaultKeybindingTooltip) {\n\t\t\tdata.container.title = '';\n\t\t} else if (actionTitle && previewTitle) {\n\t\t\tif (this._supportsPreview && element.canPreview) {\n\t\t\t\tdata.container.title = localize({ key: 'label-preview', comment: ['placeholders are keybindings, e.g \"F2 to Apply, Shift+F2 to Preview\"'] }, \"{0} to Apply, {1} to Preview\", actionTitle, previewTitle);\n\t\t\t} else {\n\t\t\t\tdata.container.title = localize({ key: 'label', comment: ['placeholder is a keybinding, e.g \"F2 to Apply\"'] }, \"{0} to Apply\", actionTitle);\n\t\t\t}\n\t\t} else {\n\t\t\tdata.container.title = '';\n\t\t}\n\n\t\t// Clear and render toolbar actions\n\t\tdom.clearNode(data.toolbar);\n\t\tconst toolbarActions = [...(element.toolbarActions ?? [])];\n\t\tif (element.onRemove) {\n\t\t\ttoolbarActions.push(toAction({\n\t\t\t\tid: 'actionList.remove',\n\t\t\t\tlabel: localize('actionList.remove', \"Remove\"),\n\t\t\t\tclass: ThemeIcon.asClassName(Codicon.close),\n\t\t\t\trun: async () => {\n\t\t\t\t\tawait element.onRemove!();\n\t\t\t\t\tthis._onRemoveItem?.(element);\n\t\t\t\t},\n\t\t\t}));\n\t\t}\n\t\tdata.container.classList.toggle('has-toolbar', toolbarActions.length > 0);\n\t\tif (toolbarActions.length > 0) {\n\t\t\tconst actionBar = new ActionBar(data.toolbar);\n\t\t\tdata.elementDisposables.add(actionBar);\n\t\t\tactionBar.push(toolbarActions, { icon: true, label: false });\n\t\t}\n\n\t\t// Show submenu indicator only for items with submenu actions\n\t\t// but not when the item also has hover content (panel auto-shows on hover)\n\t\tif (element.submenuActions?.length && !element.hover?.content) {\n\t\t\tdata.submenuIndicator.className = 'action-list-submenu-indicator has-submenu ' + ThemeIcon.asClassName(Codicon.chevronRight);\n\t\t\tdata.submenuIndicator.style.display = '';\n\t\t\tdata.submenuIndicator.style.visibility = '';\n\t\t\tdata.elementDisposables.add(dom.addDisposableListener(data.submenuIndicator, dom.EventType.CLICK, (e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t\tthis._onShowSubmenu?.(element);\n\t\t\t}));\n\t\t} else if (this._hasAnySubmenuActions) {\n\t\t\t// Reserve space for alignment when other items have submenus\n\t\t\tdata.submenuIndicator.className = 'action-list-submenu-indicator';\n\t\t\tdata.submenuIndicator.style.display = '';\n\t\t\tdata.submenuIndicator.style.visibility = 'hidden';\n\t\t} else {\n\t\t\tdata.submenuIndicator.className = 'action-list-submenu-indicator';\n\t\t\tdata.submenuIndicator.style.display = 'none';\n\t\t}\n\t}\n\n\tdisposeTemplate(templateData: IActionMenuTemplateData): void {\n\t\ttemplateData.keybinding.dispose();\n\t\ttemplateData.elementDisposables.dispose();\n\t}\n}\n\nclass AcceptSelectedEvent extends UIEvent {\n\tconstructor() { super('acceptSelectedAction'); }\n}\n\nclass PreviewSelectedEvent extends UIEvent {\n\tconstructor() { super('previewSelectedAction'); }\n}\n\nfunction getKeyboardNavigationLabel<T>(item: IActionListItem<T>): string | undefined {\n\t// Filter out header vs. action vs. separator\n\tif (item.kind === 'action') {\n\t\treturn item.label;\n\t}\n\treturn undefined;\n}\n\n/**\n * Options for configuring the action list.\n */\nexport interface IActionListOptions {\n\t/**\n\t * When true, shows a filter input.\n\t */\n\treadonly showFilter?: boolean;\n\n\t/**\n\t * Placeholder text for the filter input.\n\t */\n\treadonly filterPlaceholder?: string;\n\n\t/**\n\t * Optional actions shown in the filter row, to the right of the input.\n\t */\n\treadonly filterActions?: readonly IAction[];\n\n\t/**\n\t * Section IDs that should be collapsed by default.\n\t */\n\treadonly collapsedByDefault?: ReadonlySet<string>;\n\n\t/**\n\t * Minimum width for the action list.\n\t */\n\treadonly minWidth?: number;\n\n\t/**\n\t * Maximum width for the action list. When set, items wider than this are\n\t * truncated rather than expanding the popup.\n\t */\n\treadonly maxWidth?: number;\n\n\t/**\n\t * Optional handler for markdown links activated in item descriptions or hovers.\n\t * When unset, links open via the opener service with command links allowed.\n\t */\n\treadonly linkHandler?: (uri: URI, item: IActionListItem<unknown>) => void;\n\n\t/**\n\t * Optional callback fired when a section's collapsed state changes.\n\t */\n\treadonly onDidToggleSection?: (section: string, collapsed: boolean) => void;\n\n\t/**\n\t * When true, descriptions are rendered inline right after the label\n\t * instead of aligned to the right.\n\t */\n\treadonly inlineDescription?: boolean;\n\n\t/**\n\t * Height (in px) used for action items that have a `detail` line.\n\t * Defaults to 48.\n\t */\n\treadonly detailItemHeight?: number;\n\n\t/**\n\t * When true, the group title is shown on the first item of each group\n\t * in the description area (aligned to the right).\n\t */\n\treadonly showGroupTitleOnFirstItem?: boolean;\n\n\t/**\n\t * When true and filtering is enabled, focuses the filter input when the list opens.\n\t */\n\treadonly focusFilterOnOpen?: boolean;\n\n\t/**\n\t * When false, non-submenu items do not reserve space for the submenu chevron.\n\t * Defaults to true for alignment consistency.\n\t */\n\treadonly reserveSubmenuSpace?: boolean;\n\n\t/**\n\t * When true, items without an explicit `tooltip` or `hover` do not get a\n\t * default \"{keybinding} to Apply\" tooltip. Useful for non-code-action lists\n\t * where this hint is misleading.\n\t */\n\treadonly hideDefaultKeybindingTooltip?: boolean;\n\n\t/**\n\t * Optional label shown on the right side of the filter row.\n\t */\n\treadonly secondaryHeading?: string;\n\n\t/**\n\t * Optional text shown below the action list as a footer.\n\t */\n\treadonly footerText?: string;\n\n\t/**\n\t * Optional text shown above the action list as a header banner. When set, it is\n\t * rendered at the top of the widget, optionally prefixed by {@link headerIcon}.\n\t */\n\treadonly headerText?: string;\n\n\t/**\n\t * Optional icon shown to the left of {@link headerText} in the header banner.\n\t */\n\treadonly headerIcon?: ThemeIcon;\n\n\t/**\n\t * Optional CSS class name added to the action list container, for scoped styling.\n\t */\n\treadonly className?: string;\n}\n\n/**\n * A standalone action list widget that handles core list rendering, filtering,\n * hover, submenu, and section management without depending on IContextViewService\n * or anchor-based positioning. Suitable for embedding directly in any container.\n */\nexport class ActionListWidget<T> extends Disposable {\n\n\tpublic readonly domNode: HTMLElement;\n\n\tprivate readonly _list: List<IActionListItem<T>>;\n\n\tprotected readonly _actionLineHeight: number;\n\tprotected readonly _headerLineHeight = 24;\n\tprotected readonly _separatorLineHeight = 8;\n\n\tprotected _allMenuItems: IActionListItem<T>[];\n\n\tprivate readonly cts = this._register(new CancellationTokenSource());\n\n\tprivate readonly _submenuDisposables = this._register(new DisposableStore());\n\tprivate readonly _submenuContainer: HTMLElement;\n\tprivate _submenuHideTimeout: ReturnType<typeof setTimeout> | undefined;\n\tprivate _submenuShowTimeout: ReturnType<typeof setTimeout> | undefined;\n\tprivate _currentSubmenuWidget: ActionListWidget<IAction> | undefined;\n\tprivate _currentSubmenuElement: IActionListItem<T> | undefined;\n\n\tprivate readonly _collapsedSections = new Set<string>();\n\tprivate _filterText = '';\n\tprivate _suppressHover = false;\n\tprivate _hasLaidOut = false;\n\tprivate readonly _filterInput: HTMLInputElement | undefined;\n\tprivate readonly _filterContainer: HTMLElement | undefined;\n\tprivate readonly _footerContainer: HTMLElement | undefined;\n\tprivate readonly _headerContainer: HTMLElement | undefined;\n\tprivate readonly _filterCts = this._register(new MutableDisposable<CancellationTokenSource>());\n\tprivate readonly _groupTitleByIndex = new Map<number, string>();\n\n\tprivate readonly _onDidRequestLayout = this._register(new Emitter<void>());\n\n\t/**\n\t * Fired when the widget's visible item set changes and the parent should\n\t * re-layout (e.g. after filtering or collapsing a section).\n\t */\n\treadonly onDidRequestLayout = this._onDidRequestLayout.event;\n\n\tconstructor(\n\t\tuser: string,\n\t\tprotected readonly _supportsPreview: boolean,\n\t\titems: readonly IActionListItem<T>[],\n\t\tprotected readonly _delegate: IActionListDelegate<T>,\n\t\taccessibilityProvider: Partial<IListAccessibilityProvider<IActionListItem<T>>> | undefined,\n\t\tprotected readonly _options: IActionListOptions | undefined,\n\t\t@IKeybindingService private readonly _keybindingService: IKeybindingService,\n\t\t@IOpenerService private readonly _openerService: IOpenerService,\n\t\t@IInstantiationService private readonly _instantiationService: IInstantiationService,\n\t) {\n\t\tsuper();\n\t\tthis.domNode = document.createElement('div');\n\t\tthis.domNode.classList.add('actionList');\n\t\tif (this._options?.inlineDescription) {\n\t\t\tthis.domNode.classList.add('inline-description');\n\t\t}\n\t\tif (this._options?.className) {\n\t\t\tconst classNames = this._options.className.split(/\\s+/).filter(className => className.length > 0);\n\t\t\tif (classNames.length > 0) {\n\t\t\t\tthis.domNode.classList.add(...classNames);\n\t\t\t}\n\t\t}\n\t\tthis._actionLineHeight = 24;\n\n\t\t// Create submenu container appended to domNode\n\t\tthis._submenuContainer = document.createElement('div');\n\t\tthis._submenuContainer.className = 'action-list-submenu-panel action-widget';\n\t\tthis._submenuContainer.style.display = 'none';\n\t\t// Make focusable so clicking the hover panel keeps focus inside the\n\t\t// tracked element instead of moving it to document.body (which would\n\t\t// trigger the blur handler and dismiss the widget).\n\t\tthis._submenuContainer.tabIndex = -1;\n\t\tthis.domNode.append(this._submenuContainer);\n\n\t\tthis._register(dom.addDisposableListener(this._submenuContainer, 'mouseenter', () => {\n\t\t\tthis._cancelSubmenuHide();\n\t\t}));\n\t\tthis._register(dom.addDisposableListener(this._submenuContainer, 'mouseleave', () => {\n\t\t\tthis._scheduleSubmenuHide();\n\t\t}));\n\t\tthis._register(toDisposable(() => {\n\t\t\tthis._cancelSubmenuHide();\n\t\t\tthis._cancelSubmenuShow();\n\t\t}));\n\n\t\t// Initialize collapsed sections\n\t\tif (this._options?.collapsedByDefault) {\n\t\t\tfor (const section of this._options.collapsedByDefault) {\n\t\t\t\tthis._collapsedSections.add(section);\n\t\t\t}\n\t\t}\n\n\t\tconst virtualDelegate: IListVirtualDelegate<IActionListItem<T>> = {\n\t\t\tgetHeight: element => {\n\t\t\t\treturn this._getItemHeight(element);\n\t\t\t},\n\t\t\tgetTemplateId: element => element.kind\n\t\t};\n\n\n\t\tconst reserveSubmenuSpace = this._options?.reserveSubmenuSpace ?? true;\n\t\tconst hasAnySubmenuActions = reserveSubmenuSpace && items.some(item => !!item.submenuActions?.length && !item.hover?.content);\n\n\t\tthis._list = this._register(new List(user, this.domNode, virtualDelegate, [\n\t\t\tnew ActionItemRenderer<T>(this._supportsPreview, (item) => this._removeItem(item), (item) => this._showSubmenuForItem(item), hasAnySubmenuActions, this._groupTitleByIndex, this._options?.linkHandler, this._options?.hideDefaultKeybindingTooltip ?? false, this._keybindingService, this._openerService),\n\t\t\tnew HeaderRenderer(),\n\t\t\tnew SeparatorRenderer(),\n\t\t], {\n\t\t\tkeyboardSupport: false,\n\t\t\ttypeNavigationEnabled: !this._options?.showFilter,\n\t\t\tkeyboardNavigationLabelProvider: { getKeyboardNavigationLabel },\n\t\t\taccessibilityProvider: {\n\t\t\t\tgetAriaLabel: element => {\n\t\t\t\t\tif (element.kind === ActionListItemKind.Action) {\n\t\t\t\t\t\tlet label = element.label ? stripNewlines(element?.label) : '';\n\t\t\t\t\t\tif (element.detail) {\n\t\t\t\t\t\t\tlabel = label + ', ' + stripNewlines(element.detail);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (element.ariaDescription) {\n\t\t\t\t\t\t\tlabel = label + ', ' + stripNewlines(element.ariaDescription);\n\t\t\t\t\t\t} else if (element.description) {\n\t\t\t\t\t\t\tconst descText = typeof element.description === 'string' ? element.description : element.description.value;\n\t\t\t\t\t\t\tlabel = label + ', ' + stripNewlines(descText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (element.hover?.content && !element.ariaDescription && !element.description) {\n\t\t\t\t\t\t\tconst hoverContent = element.hover.content;\n\t\t\t\t\t\t\tconst hoverText = typeof hoverContent === 'string' ? hoverContent : isMarkdownString(hoverContent) ? hoverContent.value : dom.isHTMLElement(hoverContent) ? hoverContent.textContent ?? undefined : undefined;\n\t\t\t\t\t\t\tif (hoverText && (!element.detail || stripNewlines(element.detail) !== stripNewlines(hoverText))) {\n\t\t\t\t\t\t\t\tlabel = label + ', ' + stripNewlines(hoverText);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (element.group?.title) {\n\t\t\t\t\t\t\tlabel = label + ', ' + element.group.title;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (element.disabled) {\n\t\t\t\t\t\t\tlabel = localize({ key: 'customQuickFixWidget.labels', comment: [`Action widget labels for accessibility.`] }, \"{0}, Disabled Reason: {1}\", label, element.disabled);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (element.submenuActions?.length) {\n\t\t\t\t\t\t\tlabel = localize('actionList.submenuHint', \"{0}, use right arrow to access options\", label);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn label;\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t},\n\t\t\t\tgetWidgetAriaLabel: () => localize({ key: 'customQuickFixWidget', comment: [`An action widget option`] }, \"Action Widget\"),\n\t\t\t\tgetRole: (e) => {\n\t\t\t\t\tswitch (e.kind) {\n\t\t\t\t\t\tcase ActionListItemKind.Action:\n\t\t\t\t\t\t\treturn 'option';\n\t\t\t\t\t\tcase ActionListItemKind.Separator:\n\t\t\t\t\t\t\treturn 'separator';\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn 'separator';\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgetWidgetRole: () => 'listbox',\n\t\t\t\t...accessibilityProvider\n\t\t\t},\n\t\t}));\n\n\t\tthis._list.style(defaultListStyles);\n\n\t\tthis._register(this._list.onMouseClick(e => this.onListClick(e)));\n\t\tthis._register(this._list.onMouseOver(e => this.onListHover(e)));\n\t\tthis._register(this._list.onDidChangeFocus(() => this.onFocus()));\n\t\tthis._register(this._list.onDidChangeSelection(e => this.onListSelection(e)));\n\n\t\tthis._allMenuItems = [...items];\n\n\t\t// Create filter input and/or secondary heading\n\t\tif (this._options?.showFilter || this._options?.secondaryHeading) {\n\t\t\tthis._filterContainer = document.createElement('div');\n\t\t\tthis._filterContainer.className = 'action-list-filter';\n\t\t\tconst filterRow = dom.append(this._filterContainer, dom.$('.action-list-filter-row'));\n\n\t\t\tif (this._options?.showFilter) {\n\t\t\t\tthis._filterInput = document.createElement('input');\n\t\t\t\tthis._filterInput.type = 'text';\n\t\t\t\tthis._filterInput.className = 'action-list-filter-input';\n\t\t\t\tthis._filterInput.placeholder = this._options?.filterPlaceholder ?? localize('actionList.filter.placeholder', \"Search...\");\n\t\t\t\tthis._filterInput.setAttribute('aria-label', localize('actionList.filter.ariaLabel', \"Filter items\"));\n\t\t\t\tfilterRow.appendChild(this._filterInput);\n\n\t\t\t\tconst filterActions = this._options?.filterActions ?? [];\n\t\t\t\tif (filterActions.length > 0) {\n\t\t\t\t\tconst filterActionsContainer = dom.append(filterRow, dom.$('.action-list-filter-actions'));\n\t\t\t\t\tconst filterActionBar = this._register(new ActionBar(filterActionsContainer));\n\t\t\t\t\tfilterActionBar.push(filterActions, { icon: true, label: false });\n\t\t\t\t}\n\n\t\t\t\tthis._register(dom.addDisposableListener(this._filterInput, 'input', () => {\n\t\t\t\t\tthis._filterText = this._filterInput!.value;\n\t\t\t\t\tthis._applyOrUpdateFilter();\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tif (this._options?.secondaryHeading) {\n\t\t\t\tconst filterLabelEl = dom.append(filterRow, dom.$('.action-list-filter-label'));\n\t\t\t\tfilterLabelEl.textContent = this._options.secondaryHeading;\n\t\t\t}\n\t\t}\n\n\t\t// Create footer text\n\t\tif (this._options?.footerText) {\n\t\t\tthis._footerContainer = document.createElement('div');\n\t\t\tthis._footerContainer.className = 'action-list-footer';\n\t\t\tthis._footerContainer.textContent = this._options.footerText;\n\t\t}\n\n\t\t// Create header banner\n\t\tif (this._options?.headerText) {\n\t\t\tthis._headerContainer = document.createElement('div');\n\t\t\tthis._headerContainer.className = 'action-list-header';\n\t\t\tif (this._options.headerIcon) {\n\t\t\t\tconst icon = dom.append(this._headerContainer, dom.$('span.action-list-header-icon'));\n\t\t\t\ticon.classList.add(...ThemeIcon.asClassNameArray(this._options.headerIcon));\n\t\t\t\t// Decorative: the header text already conveys the meaning.\n\t\t\t\ticon.setAttribute('aria-hidden', 'true');\n\t\t\t}\n\t\t\tconst text = dom.append(this._headerContainer, dom.$('span.action-list-header-text'));\n\t\t\ttext.textContent = this._options.headerText;\n\t\t}\n\n\t\tthis._applyFilter();\n\n\t\tif (this._list.length) {\n\t\t\tthis._focusCheckedOrFirst();\n\t\t}\n\n\t\t// ArrowRight opens submenu for the focused item and moves focus into it\n\t\tthis._register(dom.addDisposableListener(this.domNode, 'keydown', (e: KeyboardEvent) => {\n\t\t\tif (e.key === 'ArrowRight') {\n\t\t\t\tconst focused = this._list.getFocus();\n\t\t\t\tif (focused.length > 0) {\n\t\t\t\t\tconst element = this._list.element(focused[0]);\n\t\t\t\t\tif (element?.submenuActions?.length) {\n\t\t\t\t\t\tdom.EventHelper.stop(e, true);\n\t\t\t\t\t\tconst rowElement = this._getRowElement(focused[0]);\n\t\t\t\t\t\tif (rowElement) {\n\t\t\t\t\t\t\tthis._showSubmenuForElement(element, rowElement);\n\t\t\t\t\t\t\tthis._currentSubmenuWidget?.focus();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\t// When the list has focus and user types a printable character,\n\t\t// forward it to the filter input so search begins automatically.\n\t\tif (this._filterInput) {\n\t\t\tthis._register(dom.addDisposableListener(this.domNode, 'keydown', (e: KeyboardEvent) => {\n\t\t\t\tif (this._filterInput && !dom.isActiveElement(this._filterInput)\n\t\t\t\t\t&& e.key.length === 1 && e.key !== ' ' && !e.ctrlKey && !e.metaKey && !e.altKey) {\n\t\t\t\t\tthis._filterInput.focus();\n\t\t\t\t\tthis._filterInput.value = e.key;\n\t\t\t\t\tthis._filterText = e.key;\n\t\t\t\t\tthis._applyOrUpdateFilter();\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\t}\n\n\tprivate _toggleSection(section: string): void {\n\t\tif (this._collapsedSections.has(section)) {\n\t\t\tthis._collapsedSections.delete(section);\n\t\t} else {\n\t\t\tthis._collapsedSections.add(section);\n\t\t}\n\t\tthis._options?.onDidToggleSection?.(section, this._collapsedSections.has(section));\n\t\tthis._applyFilter();\n\t}\n\n\tprivate _applyOrUpdateFilter(): void {\n\t\tif (!this._delegate.onFilter) {\n\t\t\tthis._applyFilter();\n\t\t\treturn;\n\t\t}\n\n\t\tconst filterText = this._filterText;\n\t\tthis._filterCts.value?.cancel();\n\t\tconst cts = new CancellationTokenSource();\n\t\tthis._filterCts.value = cts;\n\t\tthis._delegate.onFilter(filterText, cts.token).then(items => {\n\t\t\tif (cts.token.isCancellationRequested) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._allMenuItems = [...items];\n\t\t\tthis._applyFilter(true);\n\t\t}).catch(() => { /* best-effort */ });\n\t}\n\n\tprivate _applyFilter(skipTextFilter = false, fireLayout = true): void {\n\t\tconst filterLower = skipTextFilter ? '' : this._filterText.toLowerCase();\n\t\tconst isFiltering = !skipTextFilter && filterLower.length > 0;\n\t\tconst visible: IActionListItem<T>[] = [];\n\n\t\t// Remember the focused item before splice\n\t\tconst focusedIndexes = this._list.getFocus();\n\t\tlet focusedItem: IActionListItem<T> | undefined;\n\t\tif (focusedIndexes.length > 0) {\n\t\t\tfocusedItem = this._list.element(focusedIndexes[0]);\n\t\t}\n\n\t\tif (isFiltering) {\n\t\t\tlet pendingSeparator: IActionListItem<T> | undefined;\n\t\t\tlet filteredSectionItems: IActionListItem<T>[] = [];\n\t\t\tlet hasMatchingActionInSection = false;\n\n\t\t\tconst flushFilteredSection = () => {\n\t\t\t\tif (pendingSeparator && hasMatchingActionInSection) {\n\t\t\t\t\tvisible.push(pendingSeparator);\n\t\t\t\t}\n\t\t\t\tvisible.push(...filteredSectionItems);\n\t\t\t\tpendingSeparator = undefined;\n\t\t\t\tfilteredSectionItems = [];\n\t\t\t\thasMatchingActionInSection = false;\n\t\t\t};\n\n\t\t\tconst matchesFilter = (item: IActionListItem<T>) => {\n\t\t\t\tconst label = (item.label ?? '').toLowerCase();\n\t\t\t\tconst descValue = typeof item.description === 'string' ? item.description : (item.description?.value ?? '');\n\t\t\t\treturn label.includes(filterLower) || descValue.toLowerCase().includes(filterLower);\n\t\t\t};\n\n\t\t\tfor (const item of this._allMenuItems) {\n\t\t\t\tif (item.kind === ActionListItemKind.Header) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (item.kind === ActionListItemKind.Separator) {\n\t\t\t\t\tflushFilteredSection();\n\t\t\t\t\tpendingSeparator = item.label ? item : undefined;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (item.showAlways) {\n\t\t\t\t\tfilteredSectionItems.push(item);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (item.isSectionToggle) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (matchesFilter(item)) {\n\t\t\t\t\thasMatchingActionInSection = true;\n\t\t\t\t\tfilteredSectionItems.push(item);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tflushFilteredSection();\n\t\t} else {\n\t\t\tfor (const item of this._allMenuItems) {\n\t\t\t\tif (item.kind === ActionListItemKind.Header) {\n\t\t\t\t\tvisible.push(item);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (item.kind === ActionListItemKind.Separator) {\n\t\t\t\t\tif (item.section && this._collapsedSections.has(item.section)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tvisible.push(item);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Update icon for section toggle items based on collapsed state\n\t\t\t\tif (item.isSectionToggle && item.section) {\n\t\t\t\t\tconst collapsed = this._collapsedSections.has(item.section);\n\t\t\t\t\tvisible.push({\n\t\t\t\t\t\t...item,\n\t\t\t\t\t\tgroup: { ...item.group!, icon: collapsed ? Codicon.chevronRight : Codicon.chevronDown },\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// Not filtering - check collapsed sections\n\t\t\t\tif (item.section && this._collapsedSections.has(item.section)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tvisible.push(item);\n\t\t\t}\n\t\t}\n\n\t\t// Remove orphaned separators while keeping labeled separators that act as\n\t\t// section headers above their following action items.\n\t\tconst hasActionBefore: boolean[] = [];\n\t\tlet seenAction = false;\n\t\tfor (let i = 0; i < visible.length; i++) {\n\t\t\thasActionBefore[i] = seenAction;\n\t\t\tif (visible[i].kind === ActionListItemKind.Action) {\n\t\t\t\tseenAction = true;\n\t\t\t}\n\t\t}\n\n\t\tconst hasActionBeforeNextSeparator: boolean[] = [];\n\t\tlet seenActionInSection = false;\n\t\tfor (let i = visible.length - 1; i >= 0; i--) {\n\t\t\tif (visible[i].kind === ActionListItemKind.Action) {\n\t\t\t\tseenActionInSection = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (visible[i].kind !== ActionListItemKind.Separator) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\thasActionBeforeNextSeparator[i] = seenActionInSection;\n\t\t\tseenActionInSection = false;\n\t\t}\n\n\t\tfor (let i = visible.length - 1; i >= 0; i--) {\n\t\t\tconst item = visible[i];\n\t\t\tif (item.kind !== ActionListItemKind.Separator) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst hasFollowingActionInSection = hasActionBeforeNextSeparator[i];\n\t\t\tconst isLeadingUnlabeledDivider = !item.label && !hasActionBefore[i];\n\t\t\tif (!hasFollowingActionInSection || isLeadingUnlabeledDivider) {\n\t\t\t\tvisible.splice(i, 1);\n\t\t\t}\n\t\t}\n\n\t\t// Recompute group title positions based on visible items\n\t\tif (this._options?.showGroupTitleOnFirstItem) {\n\t\t\tthis._recomputeGroupTitles(visible);\n\t\t}\n\n\t\t// Capture whether the filter input currently has focus before splice\n\t\t// which may cause DOM changes that shift focus.\n\t\tconst filterInputHasFocus = this._filterInput && dom.isActiveElement(this._filterInput);\n\n\t\tthis._list.splice(0, this._list.length, visible);\n\n\t\t// Notify the parent that a re-layout is needed\n\t\tif (fireLayout) {\n\t\t\tthis._onDidRequestLayout.fire();\n\t\t}\n\n\t\t// Restore focus after splice destroyed DOM elements,\n\t\t// otherwise the blur handler in ActionWidgetService closes the widget.\n\t\t// Keep focus on the filter input if the user is typing a filter.\n\t\tif (filterInputHasFocus) {\n\t\t\tthis._filterInput?.focus();\n\t\t\t// Keep a highlighted item in the list so Enter works without pressing DownArrow first\n\t\t\tthis._focusCheckedOrFirst();\n\t\t} else if (this._hasLaidOut) {\n\t\t\t// Restore focus to the previously focused item\n\t\t\tif (focusedItem) {\n\t\t\t\tconst focusedItemId = (focusedItem.item as { id?: string })?.id;\n\t\t\t\tif (focusedItemId) {\n\t\t\t\t\tfor (let i = 0; i < this._list.length; i++) {\n\t\t\t\t\t\tconst el = this._list.element(i);\n\t\t\t\t\t\tif ((el.item as { id?: string })?.id === focusedItemId) {\n\t\t\t\t\t\t\tthis._list.setFocus([i]);\n\t\t\t\t\t\t\tthis._list.reveal(i);\n\t\t\t\t\t\t\t// Move DOM focus back to the list: the splice above destroyed\n\t\t\t\t\t\t\t// the previously focused row, leaving DOM focus on the body.\n\t\t\t\t\t\t\tthis._list.domFocus();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Returns the filter container element, if filter is enabled.\n\t * The caller is responsible for appending it to the widget DOM.\n\t */\n\tget filterContainer(): HTMLElement | undefined {\n\t\treturn this._filterContainer;\n\t}\n\n\tget footerContainer(): HTMLElement | undefined {\n\t\treturn this._footerContainer;\n\t}\n\n\tget headerContainer(): HTMLElement | undefined {\n\t\treturn this._headerContainer;\n\t}\n\n\tget filterInput(): HTMLInputElement | undefined {\n\t\treturn this._filterInput;\n\t}\n\n\tprivate focusCondition(element: IActionListItem<unknown>): boolean {\n\t\treturn !element.disabled && element.kind === ActionListItemKind.Action;\n\t}\n\n\tfocus(): void {\n\t\tif (this._filterInput && this._options?.focusFilterOnOpen) {\n\t\t\tthis._filterInput.focus();\n\t\t\t// Highlight the first item so Enter works immediately\n\t\t\tthis._focusCheckedOrFirst();\n\t\t\treturn;\n\t\t}\n\t\tthis._list.domFocus();\n\t\tthis._focusCheckedOrFirst();\n\t}\n\n\tclearFocus(): void {\n\t\tthis._list.setFocus([]);\n\t}\n\n\tgetFocusedElement(): IActionListItem<T> | undefined {\n\t\tconst focused = this._list.getFocus();\n\t\tif (focused.length > 0) {\n\t\t\treturn this._list.element(focused[0]);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate _focusCheckedOrFirst(): void {\n\t\tthis._suppressHover = true;\n\t\ttry {\n\t\t\t// Try to focus the checked item first\n\t\t\tfor (let i = 0; i < this._list.length; i++) {\n\t\t\t\tconst element = this._list.element(i);\n\t\t\t\tif (element.kind === ActionListItemKind.Action && (element.item as { checked?: boolean })?.checked) {\n\t\t\t\t\tthis._list.setFocus([i]);\n\t\t\t\t\tthis._list.reveal(i);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Set focus on the first focusable item without moving DOM focus\n\t\t\tthis._list.focusFirst(undefined, this.focusCondition);\n\t\t\tconst focused = this._list.getFocus();\n\t\t\tif (focused.length > 0) {\n\t\t\t\tthis._list.reveal(focused[0]);\n\t\t\t}\n\t\t} finally {\n\t\t\tthis._suppressHover = false;\n\t\t}\n\t}\n\n\thide(didCancel?: boolean): void {\n\t\tthis._delegate.onHide(didCancel);\n\t\tthis.cts.cancel();\n\t\tthis._filterCts.value?.cancel();\n\t\tthis._filterCts.clear();\n\t\tthis._hideSubmenu();\n\t}\n\n\tclearFilter(): boolean {\n\t\tif (this._filterInput && this._filterText) {\n\t\t\tthis._filterInput.value = '';\n\t\t\tthis._filterText = '';\n\t\t\tthis._applyOrUpdateFilter();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Whether this widget uses dynamic height (has filter or collapsible sections).\n\t */\n\tget hasDynamicHeight(): boolean {\n\t\tif (this._options?.showFilter) {\n\t\t\treturn true;\n\t\t}\n\t\treturn this._allMenuItems.some(item => item.isSectionToggle);\n\t}\n\n\t/**\n\t * The height of a single action row in pixels.\n\t */\n\tget lineHeight(): number {\n\t\treturn this._actionLineHeight;\n\t}\n\n\t/**\n\t * Returns the height for an action item, using a taller line height\n\t * for items with a detail (second line).\n\t */\n\tprotected _getItemHeight(item: IActionListItem<T>): number {\n\t\tswitch (item.kind) {\n\t\t\tcase ActionListItemKind.Header:\n\t\t\t\treturn this._headerLineHeight;\n\t\t\tcase ActionListItemKind.Separator:\n\t\t\t\treturn item.label ? this._actionLineHeight : this._separatorLineHeight;\n\t\t\tdefault:\n\t\t\t\treturn item.detail ? (this._options?.detailItemHeight ?? 48) : this._actionLineHeight;\n\t\t}\n\t}\n\n\t/**\n\t * Computes the total height of all items (including collapsed/filtered items).\n\t */\n\tcomputeFullHeight(): number {\n\t\tlet fullHeight = 0;\n\t\tfor (const item of this._allMenuItems) {\n\t\t\tfullHeight += this._getItemHeight(item);\n\t\t}\n\t\treturn fullHeight;\n\t}\n\n\t/**\n\t * Computes the total height of visible items in the list.\n\t */\n\tcomputeListHeight(): number {\n\t\tconst visibleCount = this._list.length;\n\t\tlet listHeight = 0;\n\t\tfor (let i = 0; i < visibleCount; i++) {\n\t\t\tconst element = this._list.element(i);\n\t\t\tlistHeight += this._getItemHeight(element);\n\t\t}\n\t\treturn listHeight;\n\t}\n\n\t/**\n\t * Lays out the list widget with the given explicit dimensions.\n\t */\n\tlayout(height: number, width?: number): void {\n\t\tthis._hasLaidOut = true;\n\t\tthis._list.layout(height, width);\n\t\tthis.domNode.style.height = `${height}px`;\n\n\t\t// Place filter container on the preferred side.\n\t\tif (this._filterContainer && this._filterContainer.parentElement) {\n\t\t\tthis._filterContainer.parentElement.insertBefore(this._filterContainer, this.domNode);\n\t\t}\n\t}\n\n\tcomputeMaxWidth(minWidth: number): number {\n\t\tconst visibleCount = this._list.length;\n\t\tconst effectiveMinWidth = Math.max(minWidth, this._options?.minWidth ?? 0);\n\t\tconst rawMaxWidthCap = this._options?.maxWidth ?? Number.POSITIVE_INFINITY;\n\t\tconst maxWidthCap = Math.max(rawMaxWidthCap, effectiveMinWidth);\n\t\tconst clamp = (w: number) => Math.min(Math.max(w, effectiveMinWidth), maxWidthCap);\n\t\tlet maxWidth = effectiveMinWidth;\n\n\t\tconst totalItemCount = this._allMenuItems.length;\n\t\tif (totalItemCount >= 50) {\n\t\t\treturn clamp(380);\n\t\t}\n\n\t\tif (totalItemCount > visibleCount) {\n\t\t\t// Temporarily splice in all items to measure widths,\n\t\t\t// preventing width jumps when expanding/collapsing sections.\n\t\t\tconst visibleItems: IActionListItem<T>[] = [];\n\t\t\tfor (let i = 0; i < visibleCount; i++) {\n\t\t\t\tvisibleItems.push(this._list.element(i));\n\t\t\t}\n\n\t\t\tconst allItems = [...this._allMenuItems];\n\t\t\tthis._list.splice(0, visibleCount, allItems);\n\t\t\tlet allItemsHeight = 0;\n\t\t\tfor (const item of allItems) {\n\t\t\t\tallItemsHeight += this._getItemHeight(item);\n\t\t\t}\n\t\t\tthis._list.layout(allItemsHeight);\n\n\t\t\tconst itemWidths: number[] = [];\n\t\t\tfor (let i = 0; i < allItems.length; i++) {\n\t\t\t\tconst element = this._getRowElement(i);\n\t\t\t\tif (element) {\n\t\t\t\t\telement.style.width = 'auto';\n\t\t\t\t\tconst width = element.getBoundingClientRect().width;\n\t\t\t\t\telement.style.width = '';\n\t\t\t\t\titemWidths.push(width + this._computeToolbarWidth(allItems[i]));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmaxWidth = clamp(Math.max(...itemWidths));\n\n\t\t\t// Restore visible items\n\t\t\tthis._list.splice(0, allItems.length, visibleItems);\n\t\t\treturn maxWidth;\n\t\t}\n\n\t\t// All items are visible, measure them directly\n\t\tconst itemWidths: number[] = [];\n\t\tfor (let i = 0; i < visibleCount; i++) {\n\t\t\tconst element = this._getRowElement(i);\n\t\t\tif (element) {\n\t\t\t\telement.style.width = 'auto';\n\t\t\t\tconst width = element.getBoundingClientRect().width;\n\t\t\t\telement.style.width = '';\n\t\t\t\titemWidths.push(width + this._computeToolbarWidth(this._list.element(i)));\n\t\t\t}\n\t\t}\n\t\treturn clamp(Math.max(...itemWidths));\n\t}\n\n\tfocusPrevious() {\n\t\tif (this._filterInput && dom.isActiveElement(this._filterInput)) {\n\t\t\tthis._list.domFocus();\n\t\t\t// An item is already highlighted; advance from it instead of jumping to last\n\t\t\tconst current = this._list.getFocus();\n\t\t\tif (current.length > 0) {\n\t\t\t\tthis._list.focusPrevious(1, false, undefined, this.focusCondition);\n\t\t\t\tconst focused = this._list.getFocus();\n\t\t\t\t// If we couldn't move (already at first), go to filter\n\t\t\t\tif (focused.length > 0 && focused[0] >= current[0]) {\n\t\t\t\t\tthis._filterInput.focus();\n\t\t\t\t} else if (focused.length > 0) {\n\t\t\t\t\tthis._list.reveal(focused[0]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._list.focusLast(undefined, this.focusCondition);\n\t\t\t\tconst focused = this._list.getFocus();\n\t\t\t\tif (focused.length > 0) {\n\t\t\t\t\tthis._list.reveal(focused[0]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst previousFocus = this._list.getFocus();\n\t\tthis._list.focusPrevious(1, true, undefined, this.focusCondition);\n\t\tconst focused = this._list.getFocus();\n\t\tif (focused.length > 0) {\n\t\t\t// If focus wrapped (was at first focusable, now at last), move to filter instead\n\t\t\tif (this._filterInput && previousFocus.length > 0 && focused[0] > previousFocus[0]) {\n\t\t\t\tthis._list.setFocus([]);\n\t\t\t\tthis._filterInput.focus();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._list.reveal(focused[0]);\n\t\t}\n\t}\n\n\tfocusNext() {\n\t\tif (this._filterInput && dom.isActiveElement(this._filterInput)) {\n\t\t\tthis._list.domFocus();\n\t\t\t// An item is already highlighted; advance from it instead of jumping to first\n\t\t\tconst current = this._list.getFocus();\n\t\t\tif (current.length > 0) {\n\t\t\t\tthis._list.focusNext(1, false, undefined, this.focusCondition);\n\t\t\t\tconst focused = this._list.getFocus();\n\t\t\t\tif (focused.length > 0) {\n\t\t\t\t\tthis._list.reveal(focused[0]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._list.focusFirst(undefined, this.focusCondition);\n\t\t\t\tconst focused = this._list.getFocus();\n\t\t\t\tif (focused.length > 0) {\n\t\t\t\t\tthis._list.reveal(focused[0]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst previousFocus = this._list.getFocus();\n\t\tthis._list.focusNext(1, true, undefined, this.focusCondition);\n\t\tconst focused = this._list.getFocus();\n\t\tif (focused.length > 0) {\n\t\t\t// If focus wrapped (was at last focusable, now at first), move to filter instead\n\t\t\tif (this._filterInput && previousFocus.length > 0 && focused[0] < previousFocus[0]) {\n\t\t\t\tthis._list.setFocus([]);\n\t\t\t\tthis._filterInput.focus();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._list.reveal(focused[0]);\n\t\t}\n\t}\n\n\tcollapseFocusedSection() {\n\t\tconst section = this._getFocusedSection();\n\t\tif (section && !this._collapsedSections.has(section)) {\n\t\t\tthis._toggleSection(section);\n\t\t}\n\t}\n\n\texpandFocusedSection() {\n\t\tconst section = this._getFocusedSection();\n\t\tif (section && this._collapsedSections.has(section)) {\n\t\t\tthis._toggleSection(section);\n\t\t}\n\t}\n\n\ttoggleFocusedSection(): boolean {\n\t\tconst focused = this._list.getFocus();\n\t\tif (focused.length === 0) {\n\t\t\treturn false;\n\t\t}\n\t\tconst element = this._list.element(focused[0]);\n\t\tif (element.isSectionToggle && element.section) {\n\t\t\tthis._toggleSection(element.section);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate _getFocusedSection(): string | undefined {\n\t\tconst focused = this._list.getFocus();\n\t\tif (focused.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst element = this._list.element(focused[0]);\n\t\tif (element.isSectionToggle && element.section) {\n\t\t\treturn element.section;\n\t\t}\n\t\treturn element.section;\n\t}\n\n\tacceptSelected(preview?: boolean) {\n\t\tconst focused = this._list.getFocus();\n\t\tif (focused.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst focusIndex = focused[0];\n\t\tconst element = this._list.element(focusIndex);\n\t\tif (!this.focusCondition(element)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst event = preview ? new PreviewSelectedEvent() : new AcceptSelectedEvent();\n\t\tthis._list.setSelection([focusIndex], event);\n\t}\n\n\tprivate onListSelection(e: IListEvent<IActionListItem<T>>): void {\n\t\tif (!e.elements.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst element = e.elements[0];\n\t\tif (element.isSectionToggle && element.section) {\n\t\t\tthis._list.setSelection([]);\n\t\t\tconst section = element.section;\n\t\t\tqueueMicrotask(() => {\n\t\t\t\tthis._toggleSection(section);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\t// Don't select when clicking the toolbar or submenu indicator\n\t\tif (dom.isMouseEvent(e.browserEvent)) {\n\t\t\tconst target = e.browserEvent.target;\n\t\t\tif (dom.isHTMLElement(target) && (target.closest('.action-list-item-toolbar') || target.closest('.action-list-submenu-indicator'))) {\n\t\t\t\tthis._list.setSelection([]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (element.item && this.focusCondition(element)) {\n\t\t\tconst isPreviewEvent = e.browserEvent instanceof PreviewSelectedEvent;\n\t\t\tthis._delegate.onSelect(element.item, isPreviewEvent && this._supportsPreview);\n\t\t} else {\n\t\t\tthis._list.setSelection([]);\n\t\t}\n\t}\n\n\tprivate onFocus() {\n\t\tconst focused = this._list.getFocus();\n\t\tif (focused.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst focusIndex = focused[0];\n\t\tconst element = this._list.element(focusIndex);\n\t\tthis._delegate.onFocus?.(element.item);\n\n\t\t// Show hover on focus change (suppress during programmatic initial focus)\n\t\tif (!this._suppressHover) {\n\t\t\tthis._showHoverForElement(element, focusIndex);\n\t\t}\n\t}\n\n\tprivate _removeItem(item: IActionListItem<T>): void {\n\t\tconst index = this._allMenuItems.indexOf(item);\n\t\tif (index >= 0) {\n\t\t\tthis._allMenuItems.splice(index, 1);\n\t\t\tthis._applyFilter();\n\t\t}\n\t}\n\n\tprivate _recomputeGroupTitles(items: readonly IActionListItem<T>[]): void {\n\t\tthis._groupTitleByIndex.clear();\n\t\tconst seenTitles = new Set<string>();\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\tconst item = items[i];\n\t\t\tif (item.kind === ActionListItemKind.Action && item.group?.title && !seenTitles.has(item.group.title)) {\n\t\t\t\tseenTitles.add(item.group.title);\n\t\t\t\tthis._groupTitleByIndex.set(i, item.group.title);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _computeToolbarWidth(item: IActionListItem<T>): number {\n\t\tlet actionCount = item.toolbarActions?.length ?? 0;\n\t\tif (item.onRemove) {\n\t\t\tactionCount++;\n\t\t}\n\t\tif (actionCount === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\t// Each toolbar action button is ~22px (16px icon + padding) plus 6px row gap\n\t\tconst actionButtonWidth = 22;\n\t\treturn actionCount * actionButtonWidth + 6;\n\t}\n\n\tprivate _getRowElement(index: number): HTMLElement | null {\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\treturn this.domNode.ownerDocument.getElementById(this._list.getElementID(index));\n\t}\n\n\tprivate _showHoverForElement(element: IActionListItem<T>, index: number): void {\n\t\tif (this._currentSubmenuElement === element) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst hasHoverContent = !!element.hover?.content;\n\t\tconst hasSubmenuActions = !!element.submenuActions?.length;\n\n\t\tif (hasHoverContent || hasSubmenuActions) {\n\t\t\tconst rowElement = this._getRowElement(index);\n\t\t\tif (rowElement) {\n\t\t\t\tthis._showSubmenuForElement(element, rowElement);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Navigated to an item with no hover/submenu — fully tear down any\n\t\t// previous submenu so a blank panel doesn't linger.\n\t\tthis._hideSubmenu();\n\t}\n\n\tprivate _showSubmenuForItem(item: IActionListItem<T>): void {\n\t\tconst index = this._list.indexOf(item);\n\t\tif (index >= 0) {\n\t\t\tconst rowElement = this._getRowElement(index);\n\t\t\tif (rowElement) {\n\t\t\t\tthis._showSubmenuForElement(item, rowElement);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _showSubmenuForElement(element: IActionListItem<T>, anchor: HTMLElement): void {\n\t\tif (this._currentSubmenuElement === element) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._submenuDisposables.clear();\n\t\tthis._currentSubmenuElement = element;\n\t\tthis._clearSubmenuContainer();\n\n\t\t// When the item has hover content, render it as a header\n\t\tlet hoverHeader: HTMLElement | undefined;\n\t\tconst hoverContent = element.hover?.content;\n\t\tif (hoverContent) {\n\t\t\tif (dom.isHTMLElement(hoverContent)) {\n\t\t\t\thoverHeader = hoverContent;\n\t\t\t\t// The hover element is owned by the caller and reused across shows,\n\t\t\t\t// so its disposable must NOT be tied to the per-navigation submenu\n\t\t\t\t// store (which is cleared every time the submenu switches). Tearing\n\t\t\t\t// it down there would destroy reused content — e.g. Button widgets\n\t\t\t\t// remove their DOM on dispose, leaving an empty hover. Track it for\n\t\t\t\t// the widget's lifetime instead.\n\t\t\t\tif (element.hover?.disposable) {\n\t\t\t\t\tthis._register(element.hover.disposable);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst markdown = typeof hoverContent === 'string' ? new MarkdownString(hoverContent) : hoverContent;\n\t\t\t\tconst linkHandler = this._options?.linkHandler;\n\t\t\t\tconst rendered = renderMarkdown(markdown, {\n\t\t\t\t\tactionHandler: (url: string) => {\n\t\t\t\t\t\tconst uri = URI.parse(url);\n\t\t\t\t\t\tif (linkHandler) {\n\t\t\t\t\t\t\tlinkHandler(uri, element);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis._openerService.open(uri, { allowCommands: true });\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tthis._submenuDisposables.add(rendered);\n\t\t\t\thoverHeader = rendered.element;\n\t\t\t}\n\t\t\thoverHeader.classList.add('action-list-submenu-hover-header');\n\t\t\tif (element.submenuActions?.length) {\n\t\t\t\thoverHeader.classList.add('has-submenu');\n\t\t\t}\n\t\t\tthis._submenuContainer.appendChild(hoverHeader);\n\t\t}\n\n\t\tconst hasSubmenuActions = !!element.submenuActions?.length;\n\n\t\t// Show container before creating widget so List can measure during construction\n\t\tthis._submenuContainer.style.display = '';\n\t\tthis._submenuContainer.style.position = 'absolute';\n\t\tthis._submenuContainer.removeAttribute('role');\n\n\t\tconst anchorRect = anchor.getBoundingClientRect();\n\t\tconst parentRect = this.domNode.getBoundingClientRect();\n\t\tconst targetWindow = dom.getWindow(this.domNode);\n\n\t\tlet totalHeight = 0;\n\t\tlet maxWidth = hoverHeader ? hoverHeader.offsetWidth : 0;\n\n\t\tif (hasSubmenuActions) {\n\t\t\t// Convert submenu actions into ActionListWidget items\n\t\t\tconst submenuItems: IActionListItem<IAction>[] = [];\n\t\t\tconst submenuGroups = element.submenuActions!.filter((a): a is SubmenuAction => a instanceof SubmenuAction);\n\t\t\tconst groupsWithActions = submenuGroups.filter(g => g.actions.length > 0);\n\t\t\tfor (let gi = 0; gi < groupsWithActions.length; gi++) {\n\t\t\t\tconst group = groupsWithActions[gi];\n\t\t\t\tif (group.label) {\n\t\t\t\t\tsubmenuItems.push({\n\t\t\t\t\t\tkind: ActionListItemKind.Header,\n\t\t\t\t\t\tgroup: { title: group.label },\n\t\t\t\t\t\tlabel: group.label,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tfor (let ci = 0; ci < group.actions.length; ci++) {\n\t\t\t\t\tconst child = group.actions[ci];\n\t\t\t\t\tconst extendedChild = child as IAction & { icon?: ThemeIcon; hoverContent?: string; onRemove?: () => void };\n\t\t\t\t\tconst icon = extendedChild.icon\n\t\t\t\t\t\t?? ThemeIcon.fromId(child.checked ? Codicon.check.id : Codicon.blank.id);\n\t\t\t\t\tconst hoverContent = extendedChild.hoverContent;\n\t\t\t\t\tsubmenuItems.push({\n\t\t\t\t\t\titem: child,\n\t\t\t\t\t\tkind: ActionListItemKind.Action,\n\t\t\t\t\t\tlabel: child.label,\n\t\t\t\t\t\tdescription: child.tooltip || undefined,\n\t\t\t\t\t\tgroup: { title: '', icon },\n\t\t\t\t\t\thideIcon: false,\n\t\t\t\t\t\thover: hoverContent ? { content: hoverContent } : {},\n\t\t\t\t\t\tonRemove: extendedChild.onRemove,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (gi < groupsWithActions.length - 1) {\n\t\t\t\t\tsubmenuItems.push({ kind: ActionListItemKind.Separator, label: '' });\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Also include non-SubmenuAction items directly\n\t\t\tfor (const action of element.submenuActions!) {\n\t\t\t\tif (!(action instanceof SubmenuAction)) {\n\t\t\t\t\tconst extendedAction = action as IAction & { onRemove?: () => void };\n\t\t\t\t\tsubmenuItems.push({\n\t\t\t\t\t\titem: action,\n\t\t\t\t\t\tkind: ActionListItemKind.Action,\n\t\t\t\t\t\tlabel: action.label,\n\t\t\t\t\t\tdescription: action.tooltip || undefined,\n\t\t\t\t\t\tgroup: { title: '' },\n\t\t\t\t\t\thideIcon: false,\n\t\t\t\t\t\thover: {},\n\t\t\t\t\t\tonRemove: extendedAction.onRemove,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst submenuDelegate: IActionListDelegate<IAction> = {\n\t\t\t\tonHide: () => { },\n\t\t\t\tonSelect: (action) => {\n\t\t\t\t\taction.run();\n\t\t\t\t\tconst parentItem = this._currentSubmenuElement?.item;\n\t\t\t\t\tthis._hideSubmenu();\n\t\t\t\t\tif (parentItem) {\n\t\t\t\t\t\tthis._delegate.onSelect(parentItem);\n\t\t\t\t\t}\n\t\t\t\t\tthis.hide();\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst submenuWidget = this._submenuDisposables.add(this._instantiationService.createInstance(\n\t\t\t\tActionListWidget<IAction>,\n\t\t\t\t'submenu',\n\t\t\t\tfalse,\n\t\t\t\tsubmenuItems,\n\t\t\t\tsubmenuDelegate,\n\t\t\t\tundefined,\n\t\t\t\tundefined,\n\t\t\t));\n\t\t\tthis._submenuContainer.appendChild(submenuWidget.domNode);\n\t\t\tthis._currentSubmenuWidget = submenuWidget;\n\n\t\t\t// The submenu widget's constructor focuses its first item by\n\t\t\t// default; clear that until the user actually navigates into\n\t\t\t// the submenu (via ArrowRight) so it doesn't render as if\n\t\t\t// selected while the parent list still has focus.\n\t\t\tsubmenuWidget.clearFocus();\n\n\t\t\ttotalHeight = submenuWidget.computeListHeight();\n\t\t\tsubmenuWidget.layout(totalHeight);\n\t\t\tconst submenuMaxWidth = submenuWidget.computeMaxWidth(0);\n\t\t\tmaxWidth = Math.max(maxWidth, submenuMaxWidth);\n\t\t\tsubmenuWidget.layout(totalHeight, maxWidth);\n\t\t\tsubmenuWidget.domNode.style.width = `${maxWidth}px`;\n\n\t\t\t// Keyboard navigation in submenu\n\t\t\tthis._submenuDisposables.add(dom.addDisposableListener(submenuWidget.domNode, 'keydown', (e: KeyboardEvent) => {\n\t\t\t\tif (e.key === 'ArrowLeft' || e.key === 'Escape') {\n\t\t\t\t\tdom.EventHelper.stop(e, true);\n\t\t\t\t\tthis._hideSubmenu();\n\t\t\t\t\tthis._list.domFocus();\n\t\t\t\t} else if (e.key === 'Enter') {\n\t\t\t\t\tdom.EventHelper.stop(e, true);\n\t\t\t\t\tconst focused = submenuWidget.getFocusedElement();\n\t\t\t\t\tif (focused?.item) {\n\t\t\t\t\t\tfocused.item.run();\n\t\t\t\t\t\tconst parentItem = this._currentSubmenuElement?.item;\n\t\t\t\t\t\tthis._hideSubmenu();\n\t\t\t\t\t\tif (parentItem) {\n\t\t\t\t\t\t\tthis._delegate.onSelect(parentItem);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t}\n\t\t\t\t} else if (e.key === 'ArrowDown') {\n\t\t\t\t\tdom.EventHelper.stop(e, true);\n\t\t\t\t\tsubmenuWidget.focusNext();\n\t\t\t\t} else if (e.key === 'ArrowUp') {\n\t\t\t\t\tdom.EventHelper.stop(e, true);\n\t\t\t\t\tsubmenuWidget.focusPrevious();\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\n\t\t// Position: prefer right side, fall back to left if not enough space\n\t\tconst viewportWidth = targetWindow.innerWidth;\n\t\tconst spaceRight = viewportWidth - anchorRect.right;\n\t\tconst spaceLeft = parentRect.left;\n\t\tconst panelWidth = maxWidth + 10; // account for border/padding\n\n\t\tconst gap = 4;\n\t\tif (spaceRight >= panelWidth || spaceRight >= spaceLeft) {\n\t\t\tthis._submenuContainer.style.left = `${parentRect.right - parentRect.left + gap}px`;\n\t\t} else {\n\t\t\tthis._submenuContainer.style.left = `${-panelWidth - gap}px`;\n\t\t}\n\t\tconst hoverHeaderHeight = hoverHeader ? hoverHeader.offsetHeight : 0;\n\t\tconst totalPanelHeight = totalHeight + hoverHeaderHeight;\n\t\tconst viewportHeight = targetWindow.innerHeight;\n\t\tconst anchorHeight = anchorRect.height;\n\t\tlet top = anchorRect.top - parentRect.top + (anchorHeight - totalPanelHeight) / 2;\n\t\tconst panelBottom = parentRect.top + top + totalPanelHeight;\n\t\tif (panelBottom > viewportHeight) {\n\t\t\ttop -= (panelBottom - viewportHeight + 8);\n\t\t}\n\t\tif (parentRect.top + top < 0) {\n\t\t\ttop = -parentRect.top;\n\t\t}\n\t\tthis._submenuContainer.style.top = `${top}px`;\n\t}\n\n\tprivate _hideSubmenu(): void {\n\t\tthis._cancelSubmenuHide();\n\t\tthis._cancelSubmenuShow();\n\t\tthis._submenuDisposables.clear();\n\t\tthis._currentSubmenuWidget = undefined;\n\t\tthis._currentSubmenuElement = undefined;\n\t\tthis._clearSubmenuContainer();\n\t\tthis._submenuContainer.style.display = 'none';\n\t}\n\n\t/**\n\t * Clears the submenu/hover panel. If focus currently lives inside the panel\n\t * (e.g. the user clicked a button in the hover content), focus is first moved\n\t * back to the list. Otherwise clearing the panel would drop focus to <body>,\n\t * which blurs the action widget and dismisses it.\n\t */\n\tprivate _clearSubmenuContainer(): void {\n\t\tif (this._submenuContainer.contains(dom.getActiveElement())) {\n\t\t\tthis._list.domFocus();\n\t\t}\n\t\tdom.clearNode(this._submenuContainer);\n\t}\n\n\tprivate _scheduleSubmenuHide(): void {\n\t\tthis._cancelSubmenuHide();\n\t\tthis._submenuHideTimeout = setTimeout(() => {\n\t\t\tthis._hideSubmenu();\n\t\t}, 300);\n\t}\n\n\tprivate _cancelSubmenuHide(): void {\n\t\tif (this._submenuHideTimeout !== undefined) {\n\t\t\tclearTimeout(this._submenuHideTimeout);\n\t\t\tthis._submenuHideTimeout = undefined;\n\t\t}\n\t}\n\n\tprivate _scheduleSubmenuShow(element: IActionListItem<T>, index: number | undefined): void {\n\t\tthis._cancelSubmenuShow();\n\t\tthis._submenuShowTimeout = setTimeout(() => {\n\t\t\tthis._submenuShowTimeout = undefined;\n\t\t\tconst rowElement = typeof index === 'number' ? this._getRowElement(index) : null;\n\t\t\tif (rowElement) {\n\t\t\t\tthis._showSubmenuForElement(element, rowElement);\n\t\t\t}\n\t\t}, 500);\n\t}\n\n\tprivate _cancelSubmenuShow(): void {\n\t\tif (this._submenuShowTimeout !== undefined) {\n\t\t\tclearTimeout(this._submenuShowTimeout);\n\t\t\tthis._submenuShowTimeout = undefined;\n\t\t}\n\t}\n\n\tprivate async onListHover(e: IListMouseEvent<IActionListItem<T>>) {\n\t\tconst element = e.element;\n\n\t\tif (element && element.item && this.focusCondition(element)) {\n\t\t\t// Check if the hover target is inside a toolbar - if so, skip the splice\n\t\t\t// to avoid re-rendering which would destroy the element mid-hover.\n\t\t\t// But still maintain submenu state for items with submenu actions.\n\t\t\tconst isHoveringToolbar = dom.isHTMLElement(e.browserEvent.target) && e.browserEvent.target.closest('.action-list-item-toolbar') !== null;\n\t\t\tif (isHoveringToolbar) {\n\t\t\t\tif (!element.submenuActions?.length) {\n\t\t\t\t\tthis._cancelSubmenuShow();\n\t\t\t\t}\n\t\t\t\tthis._list.setFocus([]);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set focus immediately for responsive hover feedback\n\t\t\tconst hasPanel = !!(element.submenuActions?.length || element.hover?.content);\n\t\t\tif (hasPanel) {\n\t\t\t\tthis._suppressHover = true;\n\t\t\t}\n\t\t\tthis._list.setFocus(typeof e.index === 'number' ? [e.index] : []);\n\t\t\tif (hasPanel) {\n\t\t\t\tthis._suppressHover = false;\n\t\t\t}\n\n\t\t\t// Show hover/submenu panel on row hover with a delay\n\t\t\tif (hasPanel) {\n\t\t\t\tif (this._currentSubmenuElement === element) {\n\t\t\t\t\tthis._cancelSubmenuHide();\n\t\t\t\t\tthis._cancelSubmenuShow();\n\t\t\t\t} else {\n\t\t\t\t\tthis._hideSubmenu();\n\t\t\t\t\tthis._scheduleSubmenuShow(element, e.index);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this._currentSubmenuElement === element) {\n\t\t\t\tthis._cancelSubmenuHide();\n\t\t\t} else {\n\t\t\t\tthis._cancelSubmenuShow();\n\t\t\t\tthis._hideSubmenu();\n\t\t\t}\n\n\t\t\tif (this._delegate.onHover && !element.disabled && element.kind === ActionListItemKind.Action && this._currentSubmenuElement !== element) {\n\t\t\t\tconst result = await this._delegate.onHover(element.item, this.cts.token);\n\t\t\t\tconst canPreview = result ? result.canPreview : undefined;\n\t\t\t\tif (canPreview !== element.canPreview) {\n\t\t\t\t\telement.canPreview = canPreview;\n\t\t\t\t\tif (typeof e.index === 'number') {\n\t\t\t\t\t\tthis._list.splice(e.index, 1, [element]);\n\t\t\t\t\t\tthis._list.setFocus([e.index]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (element && element.hover?.content && typeof e.index === 'number') {\n\t\t\t// Show hover for disabled items that have hover content (with delay)\n\t\t\tif (this._currentSubmenuElement === element) {\n\t\t\t\tthis._cancelSubmenuHide();\n\t\t\t\tthis._cancelSubmenuShow();\n\t\t\t} else {\n\t\t\t\tthis._hideSubmenu();\n\t\t\t\tthis._scheduleSubmenuShow(element, e.index);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate onListClick(e: IListMouseEvent<IActionListItem<T>>): void {\n\t\tif (e.element && this.focusCondition(e.element)) {\n\t\t\tthis._list.setFocus([]);\n\t\t}\n\t}\n}\n\n/**\n * An action list that wraps {@link ActionListWidget} with context-view positioning\n * and anchor-based height computation.\n */\nexport class ActionList<T> extends Disposable {\n\n\tprivate readonly _widget: ActionListWidget<T>;\n\n\tprivate readonly _anchor: HTMLElement | StandardMouseEvent | IAnchor;\n\tprivate _lastMinWidth = 0;\n\tprivate _cachedMaxWidth: number | undefined;\n\tprivate _hasLaidOut = false;\n\tprivate _showAbove: boolean | undefined;\n\n\tget domNode(): HTMLElement {\n\t\treturn this._widget.domNode;\n\t}\n\n\tget filterContainer(): HTMLElement | undefined {\n\t\treturn this._widget.filterContainer;\n\t}\n\n\tget footerContainer(): HTMLElement | undefined {\n\t\treturn this._widget.footerContainer;\n\t}\n\n\tget headerContainer(): HTMLElement | undefined {\n\t\treturn this._widget.headerContainer;\n\t}\n\n\tget filterInput(): HTMLInputElement | undefined {\n\t\treturn this._widget.filterInput;\n\t}\n\n\t/**\n\t * Returns the resolved anchor position after the first layout.\n\t * Used by the context view delegate to lock the dropdown direction.\n\t */\n\tget anchorPosition(): AnchorPosition | undefined {\n\t\tif (this._showAbove === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this._showAbove ? AnchorPosition.ABOVE : AnchorPosition.BELOW;\n\t}\n\n\tconstructor(\n\t\tuser: string,\n\t\tpreview: boolean,\n\t\titems: readonly IActionListItem<T>[],\n\t\t_delegate: IActionListDelegate<T>,\n\t\taccessibilityProvider: Partial<IListAccessibilityProvider<IActionListItem<T>>> | undefined,\n\t\toptions: IActionListOptions | undefined,\n\t\tanchor: HTMLElement | StandardMouseEvent | IAnchor,\n\t\t@IContextViewService private readonly _contextViewService: IContextViewService,\n\t\t@ILayoutService private readonly _layoutService: ILayoutService,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t) {\n\t\tsuper();\n\t\tthis._anchor = anchor;\n\n\t\tthis._widget = this._register(instantiationService.createInstance(\n\t\t\tActionListWidget<T>,\n\t\t\tuser,\n\t\t\tpreview,\n\t\t\titems,\n\t\t\t_delegate,\n\t\t\taccessibilityProvider,\n\t\t\toptions,\n\t\t));\n\n\t\tthis._register(this._widget.onDidRequestLayout(() => {\n\t\t\tif (this._hasLaidOut) {\n\t\t\t\tthis.layout(this._lastMinWidth);\n\t\t\t\tthis._contextViewService.layout();\n\t\t\t}\n\t\t}));\n\t}\n\n\tfocus(): void {\n\t\tthis._widget.focus();\n\t}\n\n\thide(didCancel?: boolean): void {\n\t\tthis._widget.hide(didCancel);\n\t\tthis._contextViewService.hideContextView();\n\t}\n\n\tclearFilter(): boolean {\n\t\treturn this._widget.clearFilter();\n\t}\n\n\tfocusPrevious(): void {\n\t\tthis._widget.focusPrevious();\n\t}\n\n\tfocusNext(): void {\n\t\tthis._widget.focusNext();\n\t}\n\n\tcollapseFocusedSection(): void {\n\t\tthis._widget.collapseFocusedSection();\n\t}\n\n\texpandFocusedSection(): void {\n\t\tthis._widget.expandFocusedSection();\n\t}\n\n\ttoggleFocusedSection(): boolean {\n\t\treturn this._widget.toggleFocusedSection();\n\t}\n\n\tacceptSelected(preview?: boolean): void {\n\t\tthis._widget.acceptSelected(preview);\n\t}\n\n\tprivate hasDynamicHeight(): boolean {\n\t\treturn this._widget.hasDynamicHeight;\n\t}\n\n\tprivate computeActionWidgetVerticalChromeHeight(): number {\n\t\tconst widgetContainer = this.domNode.parentElement?.closest('.action-widget');\n\t\tif (!widgetContainer) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst style = dom.getWindow(widgetContainer).getComputedStyle(widgetContainer);\n\t\tconst toPixels = (value: string): number => Number.parseFloat(value) || 0;\n\t\treturn toPixels(style.paddingTop) + toPixels(style.paddingBottom) + toPixels(style.borderTopWidth) + toPixels(style.borderBottomWidth);\n\t}\n\n\tprivate computeHeight(): number {\n\t\tconst listHeight = this._widget.computeListHeight();\n\n\t\tconst filterHeight = this._widget.filterContainer ? 36 : 0;\n\t\tconst footerHeight = this._widget.footerContainer ? 32 : 0;\n\t\tconst headerHeight = this._widget.headerContainer ? this._widget.headerContainer.offsetHeight || 36 : 0;\n\t\tconst chromeHeight = filterHeight + footerHeight + headerHeight;\n\t\tconst targetWindow = dom.getWindow(this.domNode);\n\t\tlet availableHeight;\n\n\t\tif (this.hasDynamicHeight()) {\n\t\t\tconst viewportHeight = targetWindow.innerHeight;\n\t\t\tconst anchorRect = getAnchorRect(this._anchor);\n\t\t\tconst anchorTopInViewport = anchorRect.top - targetWindow.pageYOffset;\n\t\t\tconst bottomGap = 30;\n\t\t\tconst spaceBelow = viewportHeight - anchorTopInViewport - anchorRect.height - bottomGap;\n\t\t\tconst spaceAbove = anchorTopInViewport;\n\n\t\t\t// Lock the direction on first layout based on whether the full\n\t\t\t// unconstrained list fits below. Once decided, the dropdown stays\n\t\t\t// in the same position even when the visible item count changes.\n\t\t\tif (this._showAbove === undefined) {\n\t\t\t\tconst fullHeight = chromeHeight + this._widget.computeFullHeight();\n\t\t\t\tthis._showAbove = fullHeight > spaceBelow && spaceAbove > spaceBelow;\n\t\t\t}\n\t\t\tavailableHeight = Math.max(0, (this._showAbove ? spaceAbove : spaceBelow) - this.computeActionWidgetVerticalChromeHeight());\n\t\t} else {\n\t\t\tconst padding = 10;\n\t\t\tconst windowHeight = this._layoutService.getContainer(targetWindow).clientHeight;\n\t\t\tconst widgetTop = this.domNode.getBoundingClientRect().top;\n\t\t\tavailableHeight = widgetTop > 0 ? windowHeight - widgetTop - padding : windowHeight * 0.7;\n\t\t}\n\n\t\tconst viewportMaxHeight = Math.floor(targetWindow.innerHeight * 0.6);\n\t\tconst actionLineHeight = this._widget.lineHeight;\n\t\tconst maxHeight = Math.min(Math.max(availableHeight, actionLineHeight * 3 + chromeHeight), viewportMaxHeight);\n\t\tconst height = Math.min(listHeight + chromeHeight, maxHeight);\n\t\treturn height - chromeHeight;\n\t}\n\n\tlayout(minWidth: number): number {\n\t\tthis._hasLaidOut = true;\n\t\tthis._lastMinWidth = minWidth;\n\n\t\tconst listHeight = this.computeHeight();\n\t\tthis._widget.layout(listHeight);\n\n\t\tconst computedWidth = this._widget.computeMaxWidth(minWidth);\n\t\tthis._cachedMaxWidth = computedWidth;\n\t\tthis._widget.layout(listHeight, this._cachedMaxWidth);\n\n\t\treturn this._cachedMaxWidth;\n\t}\n}\n\nfunction stripNewlines(str: string): string {\n\treturn str.replace(/\\r\\n|\\r|\\n/g, ' ');\n}\n"]}