monaco-editor-core 0.56.0-dev-20260121 → 0.56.0-dev-20260123

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 (230) 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 +6 -2
  18. package/esm/vs/base/browser/markdownRenderer.js +0 -1
  19. package/esm/vs/base/browser/markdownRenderer.js.map +1 -1
  20. package/esm/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
  21. package/esm/vs/base/browser/ui/tree/abstractTree.js +15 -1
  22. package/esm/vs/base/browser/ui/tree/abstractTree.js.map +1 -1
  23. package/esm/vs/base/common/actions.js +1 -1
  24. package/esm/vs/base/common/codiconsLibrary.js +2 -0
  25. package/esm/vs/base/common/codiconsLibrary.js.map +1 -1
  26. package/esm/vs/base/common/errorMessage.js +6 -6
  27. package/esm/vs/base/common/keybindingLabels.js +20 -20
  28. package/esm/vs/base/common/network.js +0 -2
  29. package/esm/vs/base/common/network.js.map +1 -1
  30. package/esm/vs/base/common/observableInternal/observables/derivedImpl.js +10 -4
  31. package/esm/vs/base/common/observableInternal/observables/derivedImpl.js.map +1 -1
  32. package/esm/vs/base/common/policy.js +5 -5
  33. package/esm/vs/editor/browser/controller/editContext/native/screenReaderSupport.js +1 -1
  34. package/esm/vs/editor/browser/controller/editContext/screenReaderUtils.js +4 -4
  35. package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.js +1 -1
  36. package/esm/vs/editor/browser/coreCommands.js +3 -3
  37. package/esm/vs/editor/browser/editorBrowser.js.map +1 -1
  38. package/esm/vs/editor/browser/editorExtensions.js +9 -9
  39. package/esm/vs/editor/browser/gpu/viewGpuContext.js +1 -1
  40. package/esm/vs/editor/browser/observableCodeEditor.js +41 -0
  41. package/esm/vs/editor/browser/observableCodeEditor.js.map +1 -1
  42. package/esm/vs/editor/browser/services/inlineCompletionsService.js +4 -4
  43. package/esm/vs/editor/browser/services/renameSymbolTrackerService.js +15 -0
  44. package/esm/vs/editor/browser/services/renameSymbolTrackerService.js.map +1 -0
  45. package/esm/vs/editor/browser/view.js +3 -0
  46. package/esm/vs/editor/browser/view.js.map +1 -1
  47. package/esm/vs/editor/browser/viewParts/viewLines/viewLine.js +14 -0
  48. package/esm/vs/editor/browser/viewParts/viewLines/viewLine.js.map +1 -1
  49. package/esm/vs/editor/browser/viewParts/viewLines/viewLines.js +7 -0
  50. package/esm/vs/editor/browser/viewParts/viewLines/viewLines.js.map +1 -1
  51. package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js +8 -2
  52. package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js.map +1 -1
  53. package/esm/vs/editor/browser/widget/diffEditor/commands.js +12 -12
  54. package/esm/vs/editor/browser/widget/diffEditor/components/accessibleDiffViewer.js +14 -14
  55. package/esm/vs/editor/browser/widget/diffEditor/components/accessibleDiffViewer.js.map +1 -1
  56. package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorEditors.js +1 -1
  57. package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/inlineDiffDeletedCodeMargin.js +7 -7
  58. package/esm/vs/editor/browser/widget/diffEditor/diffEditor.contribution.js +5 -5
  59. package/esm/vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature.js +7 -7
  60. package/esm/vs/editor/browser/widget/diffEditor/features/movedBlocksLinesFeature.js +2 -2
  61. package/esm/vs/editor/browser/widget/diffEditor/features/revertButtonsFeature.js +2 -2
  62. package/esm/vs/editor/browser/widget/diffEditor/registrations.contribution.js +5 -5
  63. package/esm/vs/editor/browser/widget/multiDiffEditor/colors.js +3 -3
  64. package/esm/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.js +2 -2
  65. package/esm/vs/editor/browser/widget/multiDiffEditor/style.css +2 -41
  66. package/esm/vs/editor/common/config/editorConfigurationSchema.js +55 -55
  67. package/esm/vs/editor/common/config/editorOptions.js +410 -410
  68. package/esm/vs/editor/common/core/editorColorRegistry.js +70 -70
  69. package/esm/vs/editor/common/editorContextKeys.js +48 -48
  70. package/esm/vs/editor/common/languages/modesRegistry.js +1 -1
  71. package/esm/vs/editor/common/languages.js +56 -56
  72. package/esm/vs/editor/common/model/editStack.js +1 -1
  73. package/esm/vs/editor/common/standaloneStrings.js +11 -11
  74. package/esm/vs/editor/common/viewLayout/viewLineRenderer.js +2 -2
  75. package/esm/vs/editor/contrib/anchorSelect/browser/anchorSelect.js +6 -6
  76. package/esm/vs/editor/contrib/bracketMatching/browser/bracketMatching.js +6 -6
  77. package/esm/vs/editor/contrib/caretOperations/browser/caretOperations.js +2 -2
  78. package/esm/vs/editor/contrib/caretOperations/browser/transpose.js +1 -1
  79. package/esm/vs/editor/contrib/clipboard/browser/clipboard.js +17 -17
  80. package/esm/vs/editor/contrib/codeAction/browser/codeAction.js +1 -1
  81. package/esm/vs/editor/contrib/codeAction/browser/codeActionCommands.js +44 -34
  82. package/esm/vs/editor/contrib/codeAction/browser/codeActionCommands.js.map +1 -1
  83. package/esm/vs/editor/contrib/codeAction/browser/codeActionContributions.js +5 -4
  84. package/esm/vs/editor/contrib/codeAction/browser/codeActionContributions.js.map +1 -1
  85. package/esm/vs/editor/contrib/codeAction/browser/codeActionController.js +3 -3
  86. package/esm/vs/editor/contrib/codeAction/browser/codeActionMenu.js +8 -8
  87. package/esm/vs/editor/contrib/codeAction/browser/lightBulbWidget.js +9 -9
  88. package/esm/vs/editor/contrib/codelens/browser/codelensController.js +2 -2
  89. package/esm/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerCloseButton.js +1 -1
  90. package/esm/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerHeader.js +1 -1
  91. package/esm/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerParticipant.js +1 -1
  92. package/esm/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerActions.js +7 -7
  93. package/esm/vs/editor/contrib/comment/browser/comment.js +6 -6
  94. package/esm/vs/editor/contrib/contextmenu/browser/contextmenu.js +10 -10
  95. package/esm/vs/editor/contrib/cursorUndo/browser/cursorUndo.js +2 -2
  96. package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.js +4 -4
  97. package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +9 -9
  98. package/esm/vs/editor/contrib/dropOrPasteInto/browser/defaultProviders.js +8 -8
  99. package/esm/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController.js +3 -3
  100. package/esm/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.js +2 -2
  101. package/esm/vs/editor/contrib/editorState/browser/keybindingCancellation.js +1 -1
  102. package/esm/vs/editor/contrib/find/browser/findController.js +16 -16
  103. package/esm/vs/editor/contrib/find/browser/findWidget.css +5 -6
  104. package/esm/vs/editor/contrib/find/browser/findWidget.js +26 -26
  105. package/esm/vs/editor/contrib/floatingMenu/browser/floatingMenu.css +2 -1
  106. package/esm/vs/editor/contrib/floatingMenu/browser/floatingMenu.js +54 -45
  107. package/esm/vs/editor/contrib/floatingMenu/browser/floatingMenu.js.map +1 -1
  108. package/esm/vs/editor/contrib/folding/browser/folding.js +20 -20
  109. package/esm/vs/editor/contrib/folding/browser/folding.js.map +1 -1
  110. package/esm/vs/editor/contrib/folding/browser/foldingDecorations.js +9 -9
  111. package/esm/vs/editor/contrib/fontZoom/browser/fontZoom.js +3 -3
  112. package/esm/vs/editor/contrib/format/browser/formatActions.js +2 -2
  113. package/esm/vs/editor/contrib/gotoError/browser/gotoError.js +8 -8
  114. package/esm/vs/editor/contrib/gotoError/browser/gotoErrorWidget.js +14 -14
  115. package/esm/vs/editor/contrib/gotoSymbol/browser/goToCommands.js +39 -39
  116. package/esm/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.js +1 -1
  117. package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesController.js +3 -3
  118. package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesTree.js +3 -3
  119. package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget.js +3 -3
  120. package/esm/vs/editor/contrib/gotoSymbol/browser/referencesModel.js +8 -8
  121. package/esm/vs/editor/contrib/gotoSymbol/browser/symbolNavigation.js +3 -3
  122. package/esm/vs/editor/contrib/gpu/browser/gpuActions.js +4 -4
  123. package/esm/vs/editor/contrib/hover/browser/hoverActionIds.js +2 -2
  124. package/esm/vs/editor/contrib/hover/browser/hoverActions.js +24 -24
  125. package/esm/vs/editor/contrib/hover/browser/hoverCopyButton.js +2 -2
  126. package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js +7 -7
  127. package/esm/vs/editor/contrib/hover/browser/markerHoverParticipant.js +5 -5
  128. package/esm/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.js +2 -2
  129. package/esm/vs/editor/contrib/indentation/browser/indentation.js +20 -20
  130. package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsHover.js +8 -8
  131. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js +21 -21
  132. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.js +13 -13
  133. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js +1 -1
  134. package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/hoverParticipant.js +2 -2
  135. package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.js +4 -4
  136. package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js +107 -18
  137. package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js.map +1 -1
  138. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js +6 -6
  139. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js +1 -1
  140. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js.map +1 -1
  141. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordReplacementView.js +3 -3
  142. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js +20 -20
  143. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.js +2 -8
  144. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.js.map +1 -1
  145. package/esm/vs/editor/contrib/insertFinalNewLine/browser/insertFinalNewLine.js +1 -1
  146. package/esm/vs/editor/contrib/lineSelection/browser/lineSelection.js +1 -1
  147. package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js +31 -31
  148. package/esm/vs/editor/contrib/linkedEditing/browser/linkedEditing.js +2 -2
  149. package/esm/vs/editor/contrib/links/browser/links.js +10 -10
  150. package/esm/vs/editor/contrib/message/browser/messageController.js +1 -1
  151. package/esm/vs/editor/contrib/multicursor/browser/multicursor.js +22 -22
  152. package/esm/vs/editor/contrib/parameterHints/browser/parameterHints.js +1 -1
  153. package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js +4 -4
  154. package/esm/vs/editor/contrib/peekView/browser/peekView.js +18 -18
  155. package/esm/vs/editor/contrib/placeholderText/browser/placeholderText.contribution.js +1 -1
  156. package/esm/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.js +10 -10
  157. package/esm/vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess.js +32 -32
  158. package/esm/vs/editor/contrib/readOnlyMessage/browser/contribution.js +2 -2
  159. package/esm/vs/editor/contrib/rename/browser/rename.js +11 -11
  160. package/esm/vs/editor/contrib/rename/browser/renameWidget.js +7 -7
  161. package/esm/vs/editor/contrib/smartSelect/browser/smartSelect.js +4 -4
  162. package/esm/vs/editor/contrib/snippet/browser/snippetController2.js +4 -4
  163. package/esm/vs/editor/contrib/snippet/browser/snippetVariables.js +4 -4
  164. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.js +11 -11
  165. package/esm/vs/editor/contrib/suggest/browser/suggest.js +9 -9
  166. package/esm/vs/editor/contrib/suggest/browser/suggestController.js +11 -11
  167. package/esm/vs/editor/contrib/suggest/browser/suggestWidget.js +17 -17
  168. package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js +2 -2
  169. package/esm/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.js +2 -2
  170. package/esm/vs/editor/contrib/suggest/browser/wordContextKey.js +1 -1
  171. package/esm/vs/editor/contrib/symbolIcons/browser/symbolIcons.js +33 -33
  172. package/esm/vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode.js +4 -4
  173. package/esm/vs/editor/contrib/tokenization/browser/tokenization.js +1 -1
  174. package/esm/vs/editor/contrib/unicodeHighlighter/browser/bannerController.js +1 -1
  175. package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js +24 -24
  176. package/esm/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.js +5 -5
  177. package/esm/vs/editor/contrib/wordHighlighter/browser/highlightDecorations.js +9 -9
  178. package/esm/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.js +3 -3
  179. package/esm/vs/editor/contrib/wordOperations/browser/wordOperations.js +3 -3
  180. package/esm/vs/editor/standalone/browser/services/standaloneWebWorkerService.js +2 -1
  181. package/esm/vs/editor/standalone/browser/services/standaloneWebWorkerService.js.map +1 -1
  182. package/esm/vs/editor/standalone/browser/standaloneServices.js +2 -0
  183. package/esm/vs/editor/standalone/browser/standaloneServices.js.map +1 -1
  184. package/esm/vs/platform/accessibilitySignal/browser/accessibilitySignalService.js +62 -62
  185. package/esm/vs/platform/action/common/actionCommonCategories.js +6 -6
  186. package/esm/vs/platform/actionWidget/browser/actionList.js +34 -11
  187. package/esm/vs/platform/actionWidget/browser/actionList.js.map +1 -1
  188. package/esm/vs/platform/actionWidget/browser/actionWidget.css +10 -0
  189. package/esm/vs/platform/actionWidget/browser/actionWidget.js +7 -7
  190. package/esm/vs/platform/actions/browser/menuEntryActionViewItem.js +3 -3
  191. package/esm/vs/platform/actions/browser/toolbar.js +2 -2
  192. package/esm/vs/platform/actions/common/actions.js +2 -0
  193. package/esm/vs/platform/actions/common/actions.js.map +1 -1
  194. package/esm/vs/platform/actions/common/menuService.js +2 -2
  195. package/esm/vs/platform/configuration/common/configurationRegistry.js +10 -10
  196. package/esm/vs/platform/contextkey/browser/contextKeyService.js +1 -1
  197. package/esm/vs/platform/contextkey/common/contextkey.js +9 -9
  198. package/esm/vs/platform/contextkey/common/contextkeys.js +9 -9
  199. package/esm/vs/platform/contextkey/common/scanner.js +5 -5
  200. package/esm/vs/platform/history/browser/contextScopedHistoryWidget.js +1 -1
  201. package/esm/vs/platform/hover/browser/hoverWidget.js +1 -1
  202. package/esm/vs/platform/hover/browser/updatableHoverWidget.js +1 -1
  203. package/esm/vs/platform/keybinding/common/abstractKeybindingService.js +5 -5
  204. package/esm/vs/platform/list/browser/listService.js +27 -27
  205. package/esm/vs/platform/markers/common/markerService.js +2 -2
  206. package/esm/vs/platform/markers/common/markers.js +6 -6
  207. package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +8 -8
  208. package/esm/vs/platform/quickinput/browser/helpQuickAccess.js +1 -1
  209. package/esm/vs/platform/quickinput/browser/quickInput.js +10 -10
  210. package/esm/vs/platform/quickinput/browser/quickInputActions.js +5 -5
  211. package/esm/vs/platform/quickinput/browser/quickInputController.js +6 -6
  212. package/esm/vs/platform/quickinput/browser/quickInputList.js +1 -1
  213. package/esm/vs/platform/quickinput/browser/quickInputUtils.js +1 -1
  214. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.js +1 -1
  215. package/esm/vs/platform/quickinput/browser/tree/quickTree.js +1 -1
  216. package/esm/vs/platform/theme/common/colorUtils.js +2 -2
  217. package/esm/vs/platform/theme/common/colors/baseColors.js +18 -18
  218. package/esm/vs/platform/theme/common/colors/chartsColors.js +8 -8
  219. package/esm/vs/platform/theme/common/colors/editorColors.js +95 -95
  220. package/esm/vs/platform/theme/common/colors/inputColors.js +47 -47
  221. package/esm/vs/platform/theme/common/colors/listColors.js +36 -36
  222. package/esm/vs/platform/theme/common/colors/menuColors.js +7 -7
  223. package/esm/vs/platform/theme/common/colors/minimapColors.js +11 -11
  224. package/esm/vs/platform/theme/common/colors/miscColors.js +16 -16
  225. package/esm/vs/platform/theme/common/colors/quickpickColors.js +9 -9
  226. package/esm/vs/platform/theme/common/colors/searchColors.js +3 -3
  227. package/esm/vs/platform/theme/common/iconRegistry.js +6 -6
  228. package/esm/vs/platform/undoRedo/common/undoRedoService.js +20 -20
  229. package/esm/vs/platform/workspace/common/workspace.js +1 -1
  230. package/package.json +2 -2
@@ -69,176 +69,176 @@ export class AccessibilitySignal {
69
69
  return signal;
70
70
  }
71
71
  static { this.errorAtPosition = AccessibilitySignal.register({
72
- name: localize(1593, 'Error at Position'),
72
+ name: localize(1595, 'Error at Position'),
73
73
  sound: Sound.error,
74
- announcementMessage: localize(1594, 'Error'),
74
+ announcementMessage: localize(1596, 'Error'),
75
75
  settingsKey: 'accessibility.signals.positionHasError',
76
76
  delaySettingsKey: 'accessibility.signalOptions.delays.errorAtPosition'
77
77
  }); }
78
78
  static { this.warningAtPosition = AccessibilitySignal.register({
79
- name: localize(1595, 'Warning at Position'),
79
+ name: localize(1597, 'Warning at Position'),
80
80
  sound: Sound.warning,
81
- announcementMessage: localize(1596, 'Warning'),
81
+ announcementMessage: localize(1598, 'Warning'),
82
82
  settingsKey: 'accessibility.signals.positionHasWarning',
83
83
  delaySettingsKey: 'accessibility.signalOptions.delays.warningAtPosition'
84
84
  }); }
85
85
  static { this.errorOnLine = AccessibilitySignal.register({
86
- name: localize(1597, 'Error on Line'),
86
+ name: localize(1599, 'Error on Line'),
87
87
  sound: Sound.error,
88
88
  legacySoundSettingsKey: 'audioCues.lineHasError',
89
89
  legacyAnnouncementSettingsKey: 'accessibility.alert.error',
90
- announcementMessage: localize(1598, 'Error on Line'),
90
+ announcementMessage: localize(1600, 'Error on Line'),
91
91
  settingsKey: 'accessibility.signals.lineHasError',
92
92
  }); }
93
93
  static { this.warningOnLine = AccessibilitySignal.register({
94
- name: localize(1599, 'Warning on Line'),
94
+ name: localize(1601, 'Warning on Line'),
95
95
  sound: Sound.warning,
96
96
  legacySoundSettingsKey: 'audioCues.lineHasWarning',
97
97
  legacyAnnouncementSettingsKey: 'accessibility.alert.warning',
98
- announcementMessage: localize(1600, 'Warning on Line'),
98
+ announcementMessage: localize(1602, 'Warning on Line'),
99
99
  settingsKey: 'accessibility.signals.lineHasWarning',
100
100
  }); }
101
101
  static { this.foldedArea = AccessibilitySignal.register({
102
- name: localize(1601, 'Folded Area on Line'),
102
+ name: localize(1603, 'Folded Area on Line'),
103
103
  sound: Sound.foldedArea,
104
104
  legacySoundSettingsKey: 'audioCues.lineHasFoldedArea',
105
105
  legacyAnnouncementSettingsKey: 'accessibility.alert.foldedArea',
106
- announcementMessage: localize(1602, 'Folded'),
106
+ announcementMessage: localize(1604, 'Folded'),
107
107
  settingsKey: 'accessibility.signals.lineHasFoldedArea',
108
108
  }); }
109
109
  static { this.break = AccessibilitySignal.register({
110
- name: localize(1603, 'Breakpoint on Line'),
110
+ name: localize(1605, 'Breakpoint on Line'),
111
111
  sound: Sound.break,
112
112
  legacySoundSettingsKey: 'audioCues.lineHasBreakpoint',
113
113
  legacyAnnouncementSettingsKey: 'accessibility.alert.breakpoint',
114
- announcementMessage: localize(1604, 'Breakpoint'),
114
+ announcementMessage: localize(1606, 'Breakpoint'),
115
115
  settingsKey: 'accessibility.signals.lineHasBreakpoint',
116
116
  }); }
117
117
  static { this.inlineSuggestion = AccessibilitySignal.register({
118
- name: localize(1605, 'Inline Suggestion on Line'),
118
+ name: localize(1607, 'Inline Suggestion on Line'),
119
119
  sound: Sound.quickFixes,
120
120
  legacySoundSettingsKey: 'audioCues.lineHasInlineSuggestion',
121
121
  settingsKey: 'accessibility.signals.lineHasInlineSuggestion',
122
122
  }); }
123
123
  static { this.nextEditSuggestion = AccessibilitySignal.register({
124
- name: localize(1606, 'Next Edit Suggestion on Line'),
124
+ name: localize(1608, 'Next Edit Suggestion on Line'),
125
125
  sound: Sound.nextEditSuggestion,
126
126
  legacySoundSettingsKey: 'audioCues.nextEditSuggestion',
127
127
  settingsKey: 'accessibility.signals.nextEditSuggestion',
128
- announcementMessage: localize(1607, 'Next Edit Suggestion'),
128
+ announcementMessage: localize(1609, 'Next Edit Suggestion'),
129
129
  }); }
130
130
  static { this.terminalQuickFix = AccessibilitySignal.register({
131
- name: localize(1608, 'Terminal Quick Fix'),
131
+ name: localize(1610, 'Terminal Quick Fix'),
132
132
  sound: Sound.quickFixes,
133
133
  legacySoundSettingsKey: 'audioCues.terminalQuickFix',
134
134
  legacyAnnouncementSettingsKey: 'accessibility.alert.terminalQuickFix',
135
- announcementMessage: localize(1609, 'Quick Fix'),
135
+ announcementMessage: localize(1611, 'Quick Fix'),
136
136
  settingsKey: 'accessibility.signals.terminalQuickFix',
137
137
  }); }
138
138
  static { this.onDebugBreak = AccessibilitySignal.register({
139
- name: localize(1610, 'Debugger Stopped on Breakpoint'),
139
+ name: localize(1612, 'Debugger Stopped on Breakpoint'),
140
140
  sound: Sound.break,
141
141
  legacySoundSettingsKey: 'audioCues.onDebugBreak',
142
142
  legacyAnnouncementSettingsKey: 'accessibility.alert.onDebugBreak',
143
- announcementMessage: localize(1611, 'Breakpoint'),
143
+ announcementMessage: localize(1613, 'Breakpoint'),
144
144
  settingsKey: 'accessibility.signals.onDebugBreak',
145
145
  }); }
146
146
  static { this.noInlayHints = AccessibilitySignal.register({
147
- name: localize(1612, 'No Inlay Hints on Line'),
147
+ name: localize(1614, 'No Inlay Hints on Line'),
148
148
  sound: Sound.error,
149
149
  legacySoundSettingsKey: 'audioCues.noInlayHints',
150
150
  legacyAnnouncementSettingsKey: 'accessibility.alert.noInlayHints',
151
- announcementMessage: localize(1613, 'No Inlay Hints'),
151
+ announcementMessage: localize(1615, 'No Inlay Hints'),
152
152
  settingsKey: 'accessibility.signals.noInlayHints',
153
153
  }); }
154
154
  static { this.taskCompleted = AccessibilitySignal.register({
155
- name: localize(1614, 'Task Completed'),
155
+ name: localize(1616, 'Task Completed'),
156
156
  sound: Sound.taskCompleted,
157
157
  legacySoundSettingsKey: 'audioCues.taskCompleted',
158
158
  legacyAnnouncementSettingsKey: 'accessibility.alert.taskCompleted',
159
- announcementMessage: localize(1615, 'Task Completed'),
159
+ announcementMessage: localize(1617, 'Task Completed'),
160
160
  settingsKey: 'accessibility.signals.taskCompleted',
161
161
  }); }
162
162
  static { this.taskFailed = AccessibilitySignal.register({
163
- name: localize(1616, 'Task Failed'),
163
+ name: localize(1618, 'Task Failed'),
164
164
  sound: Sound.taskFailed,
165
165
  legacySoundSettingsKey: 'audioCues.taskFailed',
166
166
  legacyAnnouncementSettingsKey: 'accessibility.alert.taskFailed',
167
- announcementMessage: localize(1617, 'Task Failed'),
167
+ announcementMessage: localize(1619, 'Task Failed'),
168
168
  settingsKey: 'accessibility.signals.taskFailed',
169
169
  }); }
170
170
  static { this.terminalCommandFailed = AccessibilitySignal.register({
171
- name: localize(1618, 'Terminal Command Failed'),
171
+ name: localize(1620, 'Terminal Command Failed'),
172
172
  sound: Sound.error,
173
173
  legacySoundSettingsKey: 'audioCues.terminalCommandFailed',
174
174
  legacyAnnouncementSettingsKey: 'accessibility.alert.terminalCommandFailed',
175
- announcementMessage: localize(1619, 'Command Failed'),
175
+ announcementMessage: localize(1621, 'Command Failed'),
176
176
  settingsKey: 'accessibility.signals.terminalCommandFailed',
177
177
  }); }
178
178
  static { this.terminalCommandSucceeded = AccessibilitySignal.register({
179
- name: localize(1620, 'Terminal Command Succeeded'),
179
+ name: localize(1622, 'Terminal Command Succeeded'),
180
180
  sound: Sound.terminalCommandSucceeded,
181
- announcementMessage: localize(1621, 'Command Succeeded'),
181
+ announcementMessage: localize(1623, 'Command Succeeded'),
182
182
  settingsKey: 'accessibility.signals.terminalCommandSucceeded',
183
183
  }); }
184
184
  static { this.terminalBell = AccessibilitySignal.register({
185
- name: localize(1622, 'Terminal Bell'),
185
+ name: localize(1624, 'Terminal Bell'),
186
186
  sound: Sound.terminalBell,
187
187
  legacySoundSettingsKey: 'audioCues.terminalBell',
188
188
  legacyAnnouncementSettingsKey: 'accessibility.alert.terminalBell',
189
- announcementMessage: localize(1623, 'Terminal Bell'),
189
+ announcementMessage: localize(1625, 'Terminal Bell'),
190
190
  settingsKey: 'accessibility.signals.terminalBell',
191
191
  }); }
192
192
  static { this.notebookCellCompleted = AccessibilitySignal.register({
193
- name: localize(1624, 'Notebook Cell Completed'),
193
+ name: localize(1626, 'Notebook Cell Completed'),
194
194
  sound: Sound.taskCompleted,
195
195
  legacySoundSettingsKey: 'audioCues.notebookCellCompleted',
196
196
  legacyAnnouncementSettingsKey: 'accessibility.alert.notebookCellCompleted',
197
- announcementMessage: localize(1625, 'Notebook Cell Completed'),
197
+ announcementMessage: localize(1627, 'Notebook Cell Completed'),
198
198
  settingsKey: 'accessibility.signals.notebookCellCompleted',
199
199
  }); }
200
200
  static { this.notebookCellFailed = AccessibilitySignal.register({
201
- name: localize(1626, 'Notebook Cell Failed'),
201
+ name: localize(1628, 'Notebook Cell Failed'),
202
202
  sound: Sound.taskFailed,
203
203
  legacySoundSettingsKey: 'audioCues.notebookCellFailed',
204
204
  legacyAnnouncementSettingsKey: 'accessibility.alert.notebookCellFailed',
205
- announcementMessage: localize(1627, 'Notebook Cell Failed'),
205
+ announcementMessage: localize(1629, 'Notebook Cell Failed'),
206
206
  settingsKey: 'accessibility.signals.notebookCellFailed',
207
207
  }); }
208
208
  static { this.diffLineInserted = AccessibilitySignal.register({
209
- name: localize(1628, 'Diff Line Inserted'),
209
+ name: localize(1630, 'Diff Line Inserted'),
210
210
  sound: Sound.diffLineInserted,
211
211
  legacySoundSettingsKey: 'audioCues.diffLineInserted',
212
212
  settingsKey: 'accessibility.signals.diffLineInserted',
213
213
  }); }
214
214
  static { this.diffLineDeleted = AccessibilitySignal.register({
215
- name: localize(1629, 'Diff Line Deleted'),
215
+ name: localize(1631, 'Diff Line Deleted'),
216
216
  sound: Sound.diffLineDeleted,
217
217
  legacySoundSettingsKey: 'audioCues.diffLineDeleted',
218
218
  settingsKey: 'accessibility.signals.diffLineDeleted',
219
219
  }); }
220
220
  static { this.diffLineModified = AccessibilitySignal.register({
221
- name: localize(1630, 'Diff Line Modified'),
221
+ name: localize(1632, 'Diff Line Modified'),
222
222
  sound: Sound.diffLineModified,
223
223
  legacySoundSettingsKey: 'audioCues.diffLineModified',
224
224
  settingsKey: 'accessibility.signals.diffLineModified',
225
225
  }); }
226
226
  static { this.chatEditModifiedFile = AccessibilitySignal.register({
227
- name: localize(1631, 'Chat Edit Modified File'),
227
+ name: localize(1633, 'Chat Edit Modified File'),
228
228
  sound: Sound.chatEditModifiedFile,
229
- announcementMessage: localize(1632, 'File Modified from Chat Edits'),
229
+ announcementMessage: localize(1634, 'File Modified from Chat Edits'),
230
230
  settingsKey: 'accessibility.signals.chatEditModifiedFile',
231
231
  }); }
232
232
  static { this.chatRequestSent = AccessibilitySignal.register({
233
- name: localize(1633, 'Chat Request Sent'),
233
+ name: localize(1635, 'Chat Request Sent'),
234
234
  sound: Sound.requestSent,
235
235
  legacySoundSettingsKey: 'audioCues.chatRequestSent',
236
236
  legacyAnnouncementSettingsKey: 'accessibility.alert.chatRequestSent',
237
- announcementMessage: localize(1634, 'Chat Request Sent'),
237
+ announcementMessage: localize(1636, 'Chat Request Sent'),
238
238
  settingsKey: 'accessibility.signals.chatRequestSent',
239
239
  }); }
240
240
  static { this.chatResponseReceived = AccessibilitySignal.register({
241
- name: localize(1635, 'Chat Response Received'),
241
+ name: localize(1637, 'Chat Response Received'),
242
242
  legacySoundSettingsKey: 'audioCues.chatResponseReceived',
243
243
  sound: {
244
244
  randomOneOf: [
@@ -251,79 +251,79 @@ export class AccessibilitySignal {
251
251
  settingsKey: 'accessibility.signals.chatResponseReceived'
252
252
  }); }
253
253
  static { this.codeActionTriggered = AccessibilitySignal.register({
254
- name: localize(1636, 'Code Action Request Triggered'),
254
+ name: localize(1638, 'Code Action Request Triggered'),
255
255
  sound: Sound.codeActionTriggered,
256
256
  legacySoundSettingsKey: 'audioCues.codeActionRequestTriggered',
257
257
  legacyAnnouncementSettingsKey: 'accessibility.alert.codeActionRequestTriggered',
258
- announcementMessage: localize(1637, 'Code Action Request Triggered'),
258
+ announcementMessage: localize(1639, 'Code Action Request Triggered'),
259
259
  settingsKey: 'accessibility.signals.codeActionTriggered',
260
260
  }); }
261
261
  static { this.codeActionApplied = AccessibilitySignal.register({
262
- name: localize(1638, 'Code Action Applied'),
262
+ name: localize(1640, 'Code Action Applied'),
263
263
  legacySoundSettingsKey: 'audioCues.codeActionApplied',
264
264
  sound: Sound.codeActionApplied,
265
265
  settingsKey: 'accessibility.signals.codeActionApplied'
266
266
  }); }
267
267
  static { this.progress = AccessibilitySignal.register({
268
- name: localize(1639, 'Progress'),
268
+ name: localize(1641, 'Progress'),
269
269
  sound: Sound.progress,
270
270
  legacySoundSettingsKey: 'audioCues.chatResponsePending',
271
271
  legacyAnnouncementSettingsKey: 'accessibility.alert.progress',
272
- announcementMessage: localize(1640, 'Progress'),
272
+ announcementMessage: localize(1642, 'Progress'),
273
273
  settingsKey: 'accessibility.signals.progress'
274
274
  }); }
275
275
  static { this.clear = AccessibilitySignal.register({
276
- name: localize(1641, 'Clear'),
276
+ name: localize(1643, 'Clear'),
277
277
  sound: Sound.clear,
278
278
  legacySoundSettingsKey: 'audioCues.clear',
279
279
  legacyAnnouncementSettingsKey: 'accessibility.alert.clear',
280
- announcementMessage: localize(1642, 'Clear'),
280
+ announcementMessage: localize(1644, 'Clear'),
281
281
  settingsKey: 'accessibility.signals.clear'
282
282
  }); }
283
283
  static { this.save = AccessibilitySignal.register({
284
- name: localize(1643, 'Save'),
284
+ name: localize(1645, 'Save'),
285
285
  sound: Sound.save,
286
286
  legacySoundSettingsKey: 'audioCues.save',
287
287
  legacyAnnouncementSettingsKey: 'accessibility.alert.save',
288
- announcementMessage: localize(1644, 'Save'),
288
+ announcementMessage: localize(1646, 'Save'),
289
289
  settingsKey: 'accessibility.signals.save'
290
290
  }); }
291
291
  static { this.format = AccessibilitySignal.register({
292
- name: localize(1645, 'Format'),
292
+ name: localize(1647, 'Format'),
293
293
  sound: Sound.format,
294
294
  legacySoundSettingsKey: 'audioCues.format',
295
295
  legacyAnnouncementSettingsKey: 'accessibility.alert.format',
296
- announcementMessage: localize(1646, 'Format'),
296
+ announcementMessage: localize(1648, 'Format'),
297
297
  settingsKey: 'accessibility.signals.format'
298
298
  }); }
299
299
  static { this.voiceRecordingStarted = AccessibilitySignal.register({
300
- name: localize(1647, 'Voice Recording Started'),
300
+ name: localize(1649, 'Voice Recording Started'),
301
301
  sound: Sound.voiceRecordingStarted,
302
302
  legacySoundSettingsKey: 'audioCues.voiceRecordingStarted',
303
303
  settingsKey: 'accessibility.signals.voiceRecordingStarted'
304
304
  }); }
305
305
  static { this.voiceRecordingStopped = AccessibilitySignal.register({
306
- name: localize(1648, 'Voice Recording Stopped'),
306
+ name: localize(1650, 'Voice Recording Stopped'),
307
307
  sound: Sound.voiceRecordingStopped,
308
308
  legacySoundSettingsKey: 'audioCues.voiceRecordingStopped',
309
309
  settingsKey: 'accessibility.signals.voiceRecordingStopped'
310
310
  }); }
311
311
  static { this.editsKept = AccessibilitySignal.register({
312
- name: localize(1649, 'Edits Kept'),
312
+ name: localize(1651, 'Edits Kept'),
313
313
  sound: Sound.editsKept,
314
- announcementMessage: localize(1650, 'Edits Kept'),
314
+ announcementMessage: localize(1652, 'Edits Kept'),
315
315
  settingsKey: 'accessibility.signals.editsKept',
316
316
  }); }
317
317
  static { this.editsUndone = AccessibilitySignal.register({
318
- name: localize(1651, 'Undo Edits'),
318
+ name: localize(1653, 'Undo Edits'),
319
319
  sound: Sound.editsUndone,
320
- announcementMessage: localize(1652, 'Edits Undone'),
320
+ announcementMessage: localize(1654, 'Edits Undone'),
321
321
  settingsKey: 'accessibility.signals.editsUndone',
322
322
  }); }
323
323
  static { this.chatUserActionRequired = AccessibilitySignal.register({
324
- name: localize(1653, 'Chat User Action Required'),
324
+ name: localize(1655, 'Chat User Action Required'),
325
325
  sound: Sound.chatUserActionRequired,
326
- announcementMessage: localize(1654, 'Chat User Action Required'),
326
+ announcementMessage: localize(1656, 'Chat User Action Required'),
327
327
  settingsKey: 'accessibility.signals.chatUserActionRequired'
328
328
  }); }
329
329
  }
@@ -4,11 +4,11 @@
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import { localize2 } from '../../../nls.js';
6
6
  export const Categories = Object.freeze({
7
- View: localize2(1655, 'View'),
8
- Help: localize2(1656, 'Help'),
9
- Test: localize2(1657, 'Test'),
10
- File: localize2(1658, 'File'),
11
- Preferences: localize2(1659, 'Preferences'),
12
- Developer: localize2(1660, "Developer"),
7
+ View: localize2(1657, 'View'),
8
+ Help: localize2(1658, 'Help'),
9
+ Test: localize2(1659, 'Test'),
10
+ File: localize2(1660, 'File'),
11
+ Preferences: localize2(1661, 'Preferences'),
12
+ Developer: localize2(1662, "Developer"),
13
13
  });
14
14
  //# sourceMappingURL=actionCommonCategories.js.map
@@ -12,11 +12,12 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
12
  * Licensed under the MIT License. See License.txt in the project root for license information.
13
13
  *--------------------------------------------------------------------------------------------*/
14
14
  import * as dom from '../../../base/browser/dom.js';
15
+ import { ActionBar } from '../../../base/browser/ui/actionbar/actionbar.js';
15
16
  import { KeybindingLabel } from '../../../base/browser/ui/keybindingLabel/keybindingLabel.js';
16
17
  import { List } from '../../../base/browser/ui/list/listWidget.js';
17
18
  import { CancellationTokenSource } from '../../../base/common/cancellation.js';
18
19
  import { Codicon } from '../../../base/common/codicons.js';
19
- import { Disposable, MutableDisposable } from '../../../base/common/lifecycle.js';
20
+ import { Disposable, DisposableStore, MutableDisposable } from '../../../base/common/lifecycle.js';
20
21
  import { OS } from '../../../base/common/platform.js';
21
22
  import { ThemeIcon } from '../../../base/common/themables.js';
22
23
  import './actionWidget.css';
@@ -78,9 +79,15 @@ let ActionItemRenderer = class ActionItemRenderer {
78
79
  description.className = 'description';
79
80
  container.append(description);
80
81
  const keybinding = new KeybindingLabel(container, OS);
81
- return { container, icon, text, description, keybinding };
82
+ const toolbar = document.createElement('div');
83
+ toolbar.className = 'action-list-item-toolbar';
84
+ container.append(toolbar);
85
+ const elementDisposables = new DisposableStore();
86
+ return { container, icon, text, description, keybinding, toolbar, elementDisposables };
82
87
  }
83
88
  renderElement(element, _index, data) {
89
+ // Clear previous element disposables
90
+ data.elementDisposables.clear();
84
91
  if (element.group?.icon) {
85
92
  data.icon.className = ThemeIcon.asClassName(element.group.icon);
86
93
  if (element.group.icon.color) {
@@ -113,30 +120,39 @@ let ActionItemRenderer = class ActionItemRenderer {
113
120
  const actionTitle = this._keybindingService.lookupKeybinding(acceptSelectedActionCommand)?.getLabel();
114
121
  const previewTitle = this._keybindingService.lookupKeybinding(previewSelectedActionCommand)?.getLabel();
115
122
  data.container.classList.toggle('option-disabled', element.disabled);
116
- if (element.tooltip) {
123
+ if (element.hover !== undefined) {
124
+ // Don't show tooltip when hover content is configured - the rich hover will show instead
125
+ data.container.title = '';
126
+ }
127
+ else if (element.tooltip) {
117
128
  data.container.title = element.tooltip;
118
129
  }
119
130
  else if (element.disabled) {
120
131
  data.container.title = element.label;
121
132
  }
122
- else if (element.hover?.content) {
123
- // Don't show tooltip when hover content is configured - the rich hover will show instead
124
- data.container.title = '';
125
- }
126
133
  else if (actionTitle && previewTitle) {
127
134
  if (this._supportsPreview && element.canPreview) {
128
- data.container.title = localize(1668, "{0} to Apply, {1} to Preview", actionTitle, previewTitle);
135
+ data.container.title = localize(1670, "{0} to Apply, {1} to Preview", actionTitle, previewTitle);
129
136
  }
130
137
  else {
131
- data.container.title = localize(1669, "{0} to Apply", actionTitle);
138
+ data.container.title = localize(1671, "{0} to Apply", actionTitle);
132
139
  }
133
140
  }
134
141
  else {
135
142
  data.container.title = '';
136
143
  }
144
+ // Clear and render toolbar actions
145
+ dom.clearNode(data.toolbar);
146
+ data.container.classList.toggle('has-toolbar', !!element.toolbarActions?.length);
147
+ if (element.toolbarActions?.length) {
148
+ const actionBar = new ActionBar(data.toolbar);
149
+ data.elementDisposables.add(actionBar);
150
+ actionBar.push(element.toolbarActions, { icon: true, label: false });
151
+ }
137
152
  }
138
153
  disposeTemplate(templateData) {
139
154
  templateData.keybinding.dispose();
155
+ templateData.elementDisposables.dispose();
140
156
  }
141
157
  };
142
158
  ActionItemRenderer = __decorate([
@@ -199,13 +215,13 @@ let ActionList = class ActionList extends Disposable {
199
215
  label = label + ', ' + stripNewlines(element.description);
200
216
  }
201
217
  if (element.disabled) {
202
- label = localize(1670, "{0}, Disabled Reason: {1}", label, element.disabled);
218
+ label = localize(1672, "{0}, Disabled Reason: {1}", label, element.disabled);
203
219
  }
204
220
  return label;
205
221
  }
206
222
  return null;
207
223
  },
208
- getWidgetAriaLabel: () => localize(1671, "Action Widget"),
224
+ getWidgetAriaLabel: () => localize(1673, "Action Widget"),
209
225
  getRole: (e) => {
210
226
  switch (e.kind) {
211
227
  case "action" /* ActionListItemKind.Action */:
@@ -348,6 +364,13 @@ let ActionList = class ActionList extends Disposable {
348
364
  async onListHover(e) {
349
365
  const element = e.element;
350
366
  if (element && element.item && this.focusCondition(element)) {
367
+ // Check if the hover target is inside a toolbar - if so, skip the splice
368
+ // to avoid re-rendering which would destroy the toolbar mid-hover
369
+ const isHoveringToolbar = dom.isHTMLElement(e.browserEvent.target) && e.browserEvent.target.closest('.action-list-item-toolbar') !== null;
370
+ if (isHoveringToolbar) {
371
+ this._list.setFocus([]);
372
+ return;
373
+ }
351
374
  if (this._delegate.onHover && !element.disabled && element.kind === "action" /* ActionListItemKind.Action */) {
352
375
  const result = await this._delegate.onHover(element.item, this.cts.token);
353
376
  element.canPreview = result ? result.canPreview : undefined;
@@ -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 { 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 { CancellationToken, CancellationTokenSource } from '../../../base/common/cancellation.js';\nimport { Codicon } from '../../../base/common/codicons.js';\nimport { ResolvedKeybinding } from '../../../base/common/keybindings.js';\nimport { Disposable, MutableDisposable } from '../../../base/common/lifecycle.js';\nimport { OS } from '../../../base/common/platform.js';\nimport { ThemeIcon } from '../../../base/common/themables.js';\nimport './actionWidget.css';\nimport { localize } from '../../../nls.js';\nimport { IContextViewService } from '../../contextview/browser/contextView.js';\nimport { IKeybindingService } from '../../keybinding/common/keybinding.js';\nimport { defaultListStyles } from '../../theme/browser/defaultStyles.js';\nimport { asCssVariable } from '../../theme/common/colorRegistry.js';\nimport { ILayoutService } from '../../layout/browser/layoutService.js';\nimport { IHoverService } from '../../hover/browser/hover.js';\nimport { MarkdownString } from '../../../base/common/htmlContent.js';\nimport { HoverPosition } from '../../../base/browser/ui/hover/hoverWidget.js';\nimport { IHoverWidget } from '../../../base/browser/ui/hover/hover.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\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.\n\t */\n\treadonly content?: 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\treadonly description?: string;\n\t/**\n\t * Optional hover configuration shown when focusing/hovering over the item.\n\t */\n\treadonly hover?: IActionListItemHover;\n\treadonly keybinding?: ResolvedKeybinding;\n\tcanPreview?: boolean | undefined;\n\treadonly hideIcon?: boolean;\n\treadonly tooltip?: string;\n}\n\ninterface IActionMenuTemplateData {\n\treadonly container: HTMLElement;\n\treadonly icon: HTMLElement;\n\treadonly text: HTMLElement;\n\treadonly description?: HTMLElement;\n\treadonly keybinding: KeybindingLabel;\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\t@IKeybindingService private readonly _keybindingService: IKeybindingService\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 description = document.createElement('span');\n\t\tdescription.className = 'description';\n\t\tcontainer.append(description);\n\n\t\tconst keybinding = new KeybindingLabel(container, OS);\n\n\t\treturn { container, icon, text, description, keybinding };\n\t}\n\n\trenderElement(element: IActionListItem<T>, _index: number, data: IActionMenuTemplateData): void {\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\tdata.text.textContent = stripNewlines(element.label);\n\n\t\t// if there is a keybinding, prioritize over description for now\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\tdata.description!.textContent = stripNewlines(element.description);\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\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.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 (element.hover?.content) {\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 (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\t}\n\n\tdisposeTemplate(templateData: IActionMenuTemplateData): void {\n\t\ttemplateData.keybinding.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\nexport class ActionList<T> extends Disposable {\n\n\tpublic readonly domNode: HTMLElement;\n\n\tprivate readonly _list: List<IActionListItem<T>>;\n\n\tprivate readonly _actionLineHeight = 28;\n\tprivate readonly _headerLineHeight = 28;\n\tprivate readonly _separatorLineHeight = 8;\n\n\tprivate readonly _allMenuItems: readonly IActionListItem<T>[];\n\n\tprivate readonly cts = this._register(new CancellationTokenSource());\n\n\tprivate _hover = this._register(new MutableDisposable<IHoverWidget>());\n\n\tconstructor(\n\t\tuser: string,\n\t\tpreview: boolean,\n\t\titems: readonly IActionListItem<T>[],\n\t\tprivate readonly _delegate: IActionListDelegate<T>,\n\t\taccessibilityProvider: Partial<IListAccessibilityProvider<IActionListItem<T>>> | undefined,\n\t\t@IContextViewService private readonly _contextViewService: IContextViewService,\n\t\t@IKeybindingService private readonly _keybindingService: IKeybindingService,\n\t\t@ILayoutService private readonly _layoutService: ILayoutService,\n\t\t@IHoverService private readonly _hoverService: IHoverService,\n\t) {\n\t\tsuper();\n\t\tthis.domNode = document.createElement('div');\n\t\tthis.domNode.classList.add('actionList');\n\t\tconst virtualDelegate: IListVirtualDelegate<IActionListItem<T>> = {\n\t\t\tgetHeight: element => {\n\t\t\t\tswitch (element.kind) {\n\t\t\t\t\tcase ActionListItemKind.Header:\n\t\t\t\t\t\treturn this._headerLineHeight;\n\t\t\t\t\tcase ActionListItemKind.Separator:\n\t\t\t\t\t\treturn this._separatorLineHeight;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn this._actionLineHeight;\n\t\t\t\t}\n\t\t\t},\n\t\t\tgetTemplateId: element => element.kind\n\t\t};\n\n\n\t\tthis._list = this._register(new List(user, this.domNode, virtualDelegate, [\n\t\t\tnew ActionItemRenderer<IActionListItem<T>>(preview, this._keybindingService),\n\t\t\tnew HeaderRenderer(),\n\t\t\tnew SeparatorRenderer(),\n\t\t], {\n\t\t\tkeyboardSupport: false,\n\t\t\ttypeNavigationEnabled: true,\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.description) {\n\t\t\t\t\t\t\tlabel = label + ', ' + stripNewlines(element.description);\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\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\t\tthis._list.splice(0, this._list.length, this._allMenuItems);\n\n\t\tif (this._list.length) {\n\t\t\tthis.focusNext();\n\t\t}\n\t}\n\n\tprivate focusCondition(element: IActionListItem<unknown>): boolean {\n\t\treturn !element.disabled && element.kind === ActionListItemKind.Action;\n\t}\n\n\thide(didCancel?: boolean): void {\n\t\tthis._delegate.onHide(didCancel);\n\t\tthis.cts.cancel();\n\t\tthis._hover.clear();\n\t\tthis._contextViewService.hideContextView();\n\t}\n\n\tlayout(minWidth: number): number {\n\t\t// Updating list height, depending on how many separators and headers there are.\n\t\tconst numHeaders = this._allMenuItems.filter(item => item.kind === 'header').length;\n\t\tconst numSeparators = this._allMenuItems.filter(item => item.kind === 'separator').length;\n\t\tconst itemsHeight = this._allMenuItems.length * this._actionLineHeight;\n\t\tconst heightWithHeaders = itemsHeight + numHeaders * this._headerLineHeight - numHeaders * this._actionLineHeight;\n\t\tconst heightWithSeparators = heightWithHeaders + numSeparators * this._separatorLineHeight - numSeparators * this._actionLineHeight;\n\t\tthis._list.layout(heightWithSeparators);\n\t\tlet maxWidth = minWidth;\n\n\t\tif (this._allMenuItems.length >= 50) {\n\t\t\tmaxWidth = 380;\n\t\t} else {\n\t\t\t// For finding width dynamically (not using resize observer)\n\t\t\tconst itemWidths: number[] = this._allMenuItems.map((_, index): number => {\n\t\t\t\tconst element = this._getRowElement(index);\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\treturn width;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t});\n\n\t\t\t// resize observer - can be used in the future since list widget supports dynamic height but not width\n\t\t\tmaxWidth = Math.max(...itemWidths, minWidth);\n\t\t}\n\n\t\tconst maxVhPrecentage = 0.7;\n\t\tconst height = Math.min(heightWithSeparators, this._layoutService.getContainer(dom.getWindow(this.domNode)).clientHeight * maxVhPrecentage);\n\t\tthis._list.layout(height, maxWidth);\n\n\t\tthis.domNode.style.height = `${height}px`;\n\n\t\tthis._list.domFocus();\n\t\treturn maxWidth;\n\t}\n\n\tfocusPrevious() {\n\t\tthis._list.focusPrevious(1, true, undefined, this.focusCondition);\n\t}\n\n\tfocusNext() {\n\t\tthis._list.focusNext(1, true, undefined, this.focusCondition);\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.item && this.focusCondition(element)) {\n\t\t\tthis._delegate.onSelect(element.item, e.browserEvent instanceof PreviewSelectedEvent);\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\n\t\tthis._showHoverForElement(element, focusIndex);\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\tlet newHover: IHoverWidget | undefined;\n\n\t\t// Show hover if the element has hover content\n\t\tif (element.hover?.content && this.focusCondition(element)) {\n\t\t\t// The List widget separates data models from DOM elements, so we need to\n\t\t\t// look up the actual DOM node to use as the hover target.\n\t\t\tconst rowElement = this._getRowElement(index);\n\t\t\tif (rowElement) {\n\t\t\t\tconst markdown = element.hover.content ? new MarkdownString(element.hover.content) : undefined;\n\t\t\t\tnewHover = this._hoverService.showDelayedHover({\n\t\t\t\t\tcontent: markdown ?? '',\n\t\t\t\t\ttarget: rowElement,\n\t\t\t\t\tadditionalClasses: ['action-widget-hover'],\n\t\t\t\t\tposition: {\n\t\t\t\t\t\thoverPosition: HoverPosition.LEFT,\n\t\t\t\t\t\tforcePosition: false,\n\t\t\t\t\t},\n\t\t\t\t\tappearance: {\n\t\t\t\t\t\tshowPointer: true,\n\t\t\t\t\t},\n\t\t\t\t}, { groupId: `actionListHover` });\n\t\t\t}\n\t\t}\n\n\t\tthis._hover.value = newHover;\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\tif (this._delegate.onHover && !element.disabled && element.kind === ActionListItemKind.Action) {\n\t\t\t\tconst result = await this._delegate.onHover(element.item, this.cts.token);\n\t\t\t\telement.canPreview = result ? result.canPreview : undefined;\n\t\t\t}\n\t\t\tif (e.index) {\n\t\t\t\tthis._list.splice(e.index, 1, [element]);\n\t\t\t}\n\n\t\t\tthis._list.setFocus(typeof e.index === 'number' ? [e.index] : []);\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\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 { ActionBar } from '../../../base/browser/ui/actionbar/actionbar.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 } from '../../../base/common/actions.js';\nimport { CancellationToken, CancellationTokenSource } from '../../../base/common/cancellation.js';\nimport { Codicon } from '../../../base/common/codicons.js';\nimport { ResolvedKeybinding } from '../../../base/common/keybindings.js';\nimport { Disposable, DisposableStore, MutableDisposable } from '../../../base/common/lifecycle.js';\nimport { OS } from '../../../base/common/platform.js';\nimport { ThemeIcon } from '../../../base/common/themables.js';\nimport './actionWidget.css';\nimport { localize } from '../../../nls.js';\nimport { IContextViewService } from '../../contextview/browser/contextView.js';\nimport { IKeybindingService } from '../../keybinding/common/keybinding.js';\nimport { defaultListStyles } from '../../theme/browser/defaultStyles.js';\nimport { asCssVariable } from '../../theme/common/colorRegistry.js';\nimport { ILayoutService } from '../../layout/browser/layoutService.js';\nimport { IHoverService } from '../../hover/browser/hover.js';\nimport { MarkdownString } from '../../../base/common/htmlContent.js';\nimport { HoverPosition } from '../../../base/browser/ui/hover/hoverWidget.js';\nimport { IHoverWidget } from '../../../base/browser/ui/hover/hover.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\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.\n\t */\n\treadonly content?: 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\treadonly description?: string;\n\t/**\n\t * Optional hover configuration shown when focusing/hovering over the item.\n\t */\n\treadonly hover?: IActionListItemHover;\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}\n\ninterface IActionMenuTemplateData {\n\treadonly container: HTMLElement;\n\treadonly icon: HTMLElement;\n\treadonly text: HTMLElement;\n\treadonly description?: HTMLElement;\n\treadonly keybinding: KeybindingLabel;\n\treadonly toolbar: HTMLElement;\n\treadonly elementDisposables: DisposableStore;\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\t@IKeybindingService private readonly _keybindingService: IKeybindingService\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 description = document.createElement('span');\n\t\tdescription.className = 'description';\n\t\tcontainer.append(description);\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 elementDisposables = new DisposableStore();\n\n\t\treturn { container, icon, text, description, keybinding, toolbar, 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\tdata.text.textContent = stripNewlines(element.label);\n\n\t\t// if there is a keybinding, prioritize over description for now\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\tdata.description!.textContent = stripNewlines(element.description);\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\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 (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\tdata.container.classList.toggle('has-toolbar', !!element.toolbarActions?.length);\n\t\tif (element.toolbarActions?.length) {\n\t\t\tconst actionBar = new ActionBar(data.toolbar);\n\t\t\tdata.elementDisposables.add(actionBar);\n\t\t\tactionBar.push(element.toolbarActions, { icon: true, label: false });\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\nexport class ActionList<T> extends Disposable {\n\n\tpublic readonly domNode: HTMLElement;\n\n\tprivate readonly _list: List<IActionListItem<T>>;\n\n\tprivate readonly _actionLineHeight = 28;\n\tprivate readonly _headerLineHeight = 28;\n\tprivate readonly _separatorLineHeight = 8;\n\n\tprivate readonly _allMenuItems: readonly IActionListItem<T>[];\n\n\tprivate readonly cts = this._register(new CancellationTokenSource());\n\n\tprivate _hover = this._register(new MutableDisposable<IHoverWidget>());\n\n\tconstructor(\n\t\tuser: string,\n\t\tpreview: boolean,\n\t\titems: readonly IActionListItem<T>[],\n\t\tprivate readonly _delegate: IActionListDelegate<T>,\n\t\taccessibilityProvider: Partial<IListAccessibilityProvider<IActionListItem<T>>> | undefined,\n\t\t@IContextViewService private readonly _contextViewService: IContextViewService,\n\t\t@IKeybindingService private readonly _keybindingService: IKeybindingService,\n\t\t@ILayoutService private readonly _layoutService: ILayoutService,\n\t\t@IHoverService private readonly _hoverService: IHoverService,\n\t) {\n\t\tsuper();\n\t\tthis.domNode = document.createElement('div');\n\t\tthis.domNode.classList.add('actionList');\n\t\tconst virtualDelegate: IListVirtualDelegate<IActionListItem<T>> = {\n\t\t\tgetHeight: element => {\n\t\t\t\tswitch (element.kind) {\n\t\t\t\t\tcase ActionListItemKind.Header:\n\t\t\t\t\t\treturn this._headerLineHeight;\n\t\t\t\t\tcase ActionListItemKind.Separator:\n\t\t\t\t\t\treturn this._separatorLineHeight;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn this._actionLineHeight;\n\t\t\t\t}\n\t\t\t},\n\t\t\tgetTemplateId: element => element.kind\n\t\t};\n\n\n\t\tthis._list = this._register(new List(user, this.domNode, virtualDelegate, [\n\t\t\tnew ActionItemRenderer<IActionListItem<T>>(preview, this._keybindingService),\n\t\t\tnew HeaderRenderer(),\n\t\t\tnew SeparatorRenderer(),\n\t\t], {\n\t\t\tkeyboardSupport: false,\n\t\t\ttypeNavigationEnabled: true,\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.description) {\n\t\t\t\t\t\t\tlabel = label + ', ' + stripNewlines(element.description);\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\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\t\tthis._list.splice(0, this._list.length, this._allMenuItems);\n\n\t\tif (this._list.length) {\n\t\t\tthis.focusNext();\n\t\t}\n\t}\n\n\tprivate focusCondition(element: IActionListItem<unknown>): boolean {\n\t\treturn !element.disabled && element.kind === ActionListItemKind.Action;\n\t}\n\n\thide(didCancel?: boolean): void {\n\t\tthis._delegate.onHide(didCancel);\n\t\tthis.cts.cancel();\n\t\tthis._hover.clear();\n\t\tthis._contextViewService.hideContextView();\n\t}\n\n\tlayout(minWidth: number): number {\n\t\t// Updating list height, depending on how many separators and headers there are.\n\t\tconst numHeaders = this._allMenuItems.filter(item => item.kind === 'header').length;\n\t\tconst numSeparators = this._allMenuItems.filter(item => item.kind === 'separator').length;\n\t\tconst itemsHeight = this._allMenuItems.length * this._actionLineHeight;\n\t\tconst heightWithHeaders = itemsHeight + numHeaders * this._headerLineHeight - numHeaders * this._actionLineHeight;\n\t\tconst heightWithSeparators = heightWithHeaders + numSeparators * this._separatorLineHeight - numSeparators * this._actionLineHeight;\n\t\tthis._list.layout(heightWithSeparators);\n\t\tlet maxWidth = minWidth;\n\n\t\tif (this._allMenuItems.length >= 50) {\n\t\t\tmaxWidth = 380;\n\t\t} else {\n\t\t\t// For finding width dynamically (not using resize observer)\n\t\t\tconst itemWidths: number[] = this._allMenuItems.map((_, index): number => {\n\t\t\t\tconst element = this._getRowElement(index);\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\treturn width;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t});\n\n\t\t\t// resize observer - can be used in the future since list widget supports dynamic height but not width\n\t\t\tmaxWidth = Math.max(...itemWidths, minWidth);\n\t\t}\n\n\t\tconst maxVhPrecentage = 0.7;\n\t\tconst height = Math.min(heightWithSeparators, this._layoutService.getContainer(dom.getWindow(this.domNode)).clientHeight * maxVhPrecentage);\n\t\tthis._list.layout(height, maxWidth);\n\n\t\tthis.domNode.style.height = `${height}px`;\n\n\t\tthis._list.domFocus();\n\t\treturn maxWidth;\n\t}\n\n\tfocusPrevious() {\n\t\tthis._list.focusPrevious(1, true, undefined, this.focusCondition);\n\t}\n\n\tfocusNext() {\n\t\tthis._list.focusNext(1, true, undefined, this.focusCondition);\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.item && this.focusCondition(element)) {\n\t\t\tthis._delegate.onSelect(element.item, e.browserEvent instanceof PreviewSelectedEvent);\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\n\t\tthis._showHoverForElement(element, focusIndex);\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\tlet newHover: IHoverWidget | undefined;\n\n\t\t// Show hover if the element has hover content\n\t\tif (element.hover?.content && this.focusCondition(element)) {\n\t\t\t// The List widget separates data models from DOM elements, so we need to\n\t\t\t// look up the actual DOM node to use as the hover target.\n\t\t\tconst rowElement = this._getRowElement(index);\n\t\t\tif (rowElement) {\n\t\t\t\tconst markdown = element.hover.content ? new MarkdownString(element.hover.content) : undefined;\n\t\t\t\tnewHover = this._hoverService.showDelayedHover({\n\t\t\t\t\tcontent: markdown ?? '',\n\t\t\t\t\ttarget: rowElement,\n\t\t\t\t\tadditionalClasses: ['action-widget-hover'],\n\t\t\t\t\tposition: {\n\t\t\t\t\t\thoverPosition: HoverPosition.LEFT,\n\t\t\t\t\t\tforcePosition: false,\n\t\t\t\t\t},\n\t\t\t\t\tappearance: {\n\t\t\t\t\t\tshowPointer: true,\n\t\t\t\t\t},\n\t\t\t\t}, { groupId: `actionListHover` });\n\t\t\t}\n\t\t}\n\n\t\tthis._hover.value = newHover;\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 toolbar mid-hover\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\tthis._list.setFocus([]);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this._delegate.onHover && !element.disabled && element.kind === ActionListItemKind.Action) {\n\t\t\t\tconst result = await this._delegate.onHover(element.item, this.cts.token);\n\t\t\t\telement.canPreview = result ? result.canPreview : undefined;\n\t\t\t}\n\t\t\tif (e.index) {\n\t\t\t\tthis._list.splice(e.index, 1, [element]);\n\t\t\t}\n\n\t\t\tthis._list.setFocus(typeof e.index === 'number' ? [e.index] : []);\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\nfunction stripNewlines(str: string): string {\n\treturn str.replace(/\\r\\n|\\r|\\n/g, ' ');\n}\n"]}
@@ -198,6 +198,16 @@
198
198
  margin-left: 0.5em;
199
199
  }
200
200
 
201
+ /* Item toolbar - shows on hover/focus */
202
+ .action-widget .monaco-list-row.action .action-list-item-toolbar {
203
+ display: none;
204
+ }
205
+
206
+ .action-widget .monaco-list-row.focused.action.has-toolbar .action-list-item-toolbar,
207
+ .action-widget .monaco-list-row:hover.action.has-toolbar .action-list-item-toolbar {
208
+ display: flex;
209
+ }
210
+
201
211
  .action-widget-delegate-label {
202
212
  display: flex;
203
213
  align-items: center;