@codingame/monaco-vscode-api 1.79.1 → 1.79.2-next.1

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 (467) hide show
  1. package/README.md +11 -2
  2. package/dist/api.js +10 -8
  3. package/dist/composite.d.ts +65 -0
  4. package/dist/configurationRegistry.d.ts +212 -0
  5. package/dist/contextkey.d.ts +1 -1
  6. package/dist/default-extensions/json.js +1 -0
  7. package/dist/default-extensions/theme-defaults.js +2 -2
  8. package/dist/editorBrowser.d.ts +272 -3
  9. package/dist/event.d.ts +6 -1
  10. package/dist/{extension-tools-0c4c1ad7.js → extension-tools-3c2bf0a4.js} +698 -507
  11. package/dist/extensions.d.ts +3 -2
  12. package/dist/extensions.d2.ts +6 -17
  13. package/dist/extensionsRegistry.d.ts +15 -9
  14. package/dist/files.d.ts +71 -7
  15. package/dist/jsonSchema.d.ts +1 -1
  16. package/dist/keybinding.d.ts +2 -2
  17. package/dist/languageFeatures.d.ts +703 -61
  18. package/dist/monaco.d.ts +5 -4
  19. package/dist/override/vs/workbench/contrib/notebook/browser/contrib/find/findMatchDecorationModel.js +2 -0
  20. package/dist/override/vs/workbench/contrib/notebook/browser/notebookEditor.js +2 -0
  21. package/dist/override/vs/workbench/contrib/notebook/browser/notebookEditorWidget.js +2 -0
  22. package/dist/override/vs/workbench/contrib/notebook/common/notebookEditorInput.js +2 -1
  23. package/dist/platform.d.ts +11 -0
  24. package/dist/rollup-extension-directory-plugin.js +1 -1
  25. package/dist/rollup-vsix-plugin.js +2 -2
  26. package/dist/service-override/configuration.d.ts +5 -206
  27. package/dist/service-override/dialogs.js +16 -1
  28. package/dist/service-override/files.d.ts +2 -2
  29. package/dist/service-override/files.js +1 -1
  30. package/dist/service-override/markers.d.ts +7 -0
  31. package/dist/service-override/markers.js +6 -0
  32. package/dist/service-override/output.d.ts +7 -0
  33. package/dist/service-override/output.js +22 -0
  34. package/dist/service-override/preferences.js +7 -1
  35. package/dist/service-override/quickaccess.js +0 -9
  36. package/dist/service-override/search.d.ts +7 -0
  37. package/dist/service-override/search.js +19 -0
  38. package/dist/service-override/terminal.d.ts +607 -0
  39. package/dist/service-override/terminal.js +98 -0
  40. package/dist/service-override/tools/editor.js +1 -1
  41. package/dist/service-override/views.d.ts +561 -335
  42. package/dist/service-override/views.js +51 -11
  43. package/dist/services.d.ts +2627 -108
  44. package/dist/services.js +3 -0
  45. package/dist/severity.d.ts +16 -0
  46. package/dist/uri.d.ts +22 -11
  47. package/dist/views.d.ts +270 -0
  48. package/dist/vscode/vs/base/common/processes.js +24 -0
  49. package/dist/vscode/vs/editor/browser/widget/diffEditorWidget2/decorations.js +20 -0
  50. package/dist/vscode/vs/editor/browser/widget/diffEditorWidget2/delegatingEditorImpl.js +106 -0
  51. package/dist/vscode/vs/editor/browser/widget/diffEditorWidget2/diffEditorSash.js +59 -0
  52. package/dist/vscode/vs/editor/browser/widget/diffEditorWidget2/diffEditorWidget2.contribution.js +41 -0
  53. package/dist/vscode/vs/editor/browser/widget/diffEditorWidget2/diffEditorWidget2.js +369 -0
  54. package/dist/vscode/vs/editor/browser/widget/diffEditorWidget2/diffModel.js +247 -0
  55. package/dist/vscode/vs/editor/browser/widget/diffEditorWidget2/lineAlignment.js +179 -0
  56. package/dist/vscode/vs/editor/browser/widget/diffEditorWidget2/overviewRulerPart.js +121 -0
  57. package/dist/vscode/vs/editor/browser/widget/diffEditorWidget2/style.css.js +4 -0
  58. package/dist/vscode/vs/editor/browser/widget/diffEditorWidget2/unchangedRanges.js +184 -0
  59. package/dist/vscode/vs/editor/browser/widget/diffEditorWidget2/utils.js +88 -0
  60. package/dist/vscode/vs/platform/extensionManagement/common/extensionManagement.js +38 -1
  61. package/dist/vscode/vs/platform/extensionManagement/common/extensionManagementUtil.js +5 -1
  62. package/dist/vscode/vs/platform/extensionResourceLoader/common/extensionResourceLoader.js +13 -5
  63. package/dist/vscode/vs/platform/files/common/fileService.js +43 -5
  64. package/dist/vscode/vs/platform/files/common/files.js +3 -1
  65. package/dist/vscode/vs/platform/languagePacks/common/languagePacks.js +4 -1
  66. package/dist/vscode/vs/platform/log/common/bufferLog.js +34 -0
  67. package/dist/vscode/vs/platform/log/common/fileLog.js +105 -0
  68. package/dist/vscode/vs/platform/quickinput/browser/quickPickPin.js +1 -1
  69. package/dist/vscode/vs/platform/remote/common/remoteAuthorityResolver.js +20 -1
  70. package/dist/vscode/vs/platform/request/browser/requestService.js +1 -1
  71. package/dist/vscode/vs/platform/request/common/request.js +3 -3
  72. package/dist/vscode/vs/platform/storage/common/storage.js +3 -0
  73. package/dist/vscode/vs/platform/terminal/common/capabilities/bufferMarkCapability.js +39 -0
  74. package/dist/vscode/vs/platform/terminal/common/capabilities/commandDetectionCapability.js +565 -0
  75. package/dist/vscode/vs/platform/terminal/common/capabilities/cwdDetectionCapability.js +27 -0
  76. package/dist/vscode/vs/platform/terminal/common/capabilities/naiveCwdDetectionCapability.js +22 -0
  77. package/dist/vscode/vs/platform/terminal/common/capabilities/partialCommandDetectionCapability.js +46 -0
  78. package/dist/vscode/vs/platform/terminal/common/capabilities/terminalCapabilityStore.js +80 -0
  79. package/dist/vscode/vs/platform/terminal/common/environmentVariable.js +7 -0
  80. package/dist/vscode/vs/platform/terminal/common/environmentVariableCollection.js +196 -0
  81. package/dist/vscode/vs/platform/terminal/common/environmentVariableShared.js +23 -0
  82. package/dist/vscode/vs/platform/terminal/common/terminal.js +21 -1
  83. package/dist/vscode/vs/platform/terminal/common/terminalDataBuffering.js +45 -0
  84. package/dist/vscode/vs/platform/terminal/common/terminalEnvironment.js +37 -0
  85. package/dist/vscode/vs/platform/terminal/common/terminalPlatformConfiguration.js +622 -0
  86. package/dist/vscode/vs/platform/terminal/common/terminalProfiles.js +107 -0
  87. package/dist/vscode/vs/platform/terminal/common/terminalRecorder.js +66 -0
  88. package/dist/vscode/vs/platform/terminal/common/terminalStrings.js +16 -0
  89. package/dist/vscode/vs/platform/terminal/common/xterm/shellIntegrationAddon.js +321 -0
  90. package/dist/vscode/vs/platform/userDataSync/common/settingsMerge.js +39 -1
  91. package/dist/vscode/vs/platform/userDataSync/common/userDataSync.js +19 -0
  92. package/dist/vscode/vs/platform/window/common/window.js +7 -1
  93. package/dist/vscode/vs/platform/workspace/common/canonicalUri.js +3 -0
  94. package/dist/vscode/vs/platform/workspace/common/virtualWorkspace.js +4 -1
  95. package/dist/vscode/vs/platform/workspaces/common/workspaces.js +2 -2
  96. package/dist/vscode/vs/workbench/api/browser/mainThreadCommands.js +2 -3
  97. package/dist/vscode/vs/workbench/api/browser/mainThreadEditorTabs.js +473 -0
  98. package/dist/vscode/vs/workbench/api/browser/mainThreadLanguageFeatures.js +45 -38
  99. package/dist/vscode/vs/workbench/api/browser/mainThreadSearch.js +146 -0
  100. package/dist/vscode/vs/workbench/api/browser/mainThreadStatusBar.js +33 -52
  101. package/dist/vscode/vs/workbench/api/browser/mainThreadTerminalService.js +395 -0
  102. package/dist/vscode/vs/workbench/api/browser/mainThreadTheming.js +22 -0
  103. package/dist/vscode/vs/workbench/api/browser/mainThreadTreeViews.js +10 -5
  104. package/dist/vscode/vs/workbench/api/browser/mainThreadWindow.js +11 -4
  105. package/dist/vscode/vs/workbench/api/browser/mainThreadWorkspace.js +34 -11
  106. package/dist/vscode/vs/workbench/api/browser/statusBarExtensionPoint.js +81 -0
  107. package/dist/vscode/vs/workbench/api/common/extHost.protocol.js +7 -2
  108. package/dist/vscode/vs/workbench/api/common/extHostDebugService.js +4 -13
  109. package/dist/vscode/vs/workbench/api/common/extHostExtensionService.js +30 -15
  110. package/dist/vscode/vs/workbench/api/common/extHostFileSystemConsumer.js +20 -6
  111. package/dist/vscode/vs/workbench/api/common/extHostLanguageFeatures.js +41 -8
  112. package/dist/vscode/vs/workbench/api/common/extHostManagedSockets.js +3 -0
  113. package/dist/vscode/vs/workbench/api/common/extHostSearch.js +109 -0
  114. package/dist/vscode/vs/workbench/api/common/extHostStatusBar.js +33 -6
  115. package/dist/vscode/vs/workbench/api/common/extHostTerminalService.js +879 -1
  116. package/dist/vscode/vs/workbench/api/common/extHostTheming.js +38 -0
  117. package/dist/vscode/vs/workbench/api/common/extHostTreeViews.js +8 -5
  118. package/dist/vscode/vs/workbench/api/common/extHostTypeConverters.js +15 -17
  119. package/dist/vscode/vs/workbench/api/common/extHostTypes.js +117 -4
  120. package/dist/vscode/vs/workbench/api/common/extHostWindow.js +28 -6
  121. package/dist/vscode/vs/workbench/api/common/extHostWorkspace.js +28 -0
  122. package/dist/vscode/vs/workbench/api/common/shared/dataTransferCache.js +11 -14
  123. package/dist/vscode/vs/workbench/api/node/extHostTerminalService.js +22 -0
  124. package/dist/vscode/vs/workbench/browser/actions/layoutActions.js +2 -1
  125. package/dist/vscode/vs/workbench/browser/actions/windowActions.js +2 -2
  126. package/dist/vscode/vs/workbench/browser/dnd.js +56 -2
  127. package/dist/vscode/vs/workbench/browser/parts/compositePart.js +1 -1
  128. package/dist/vscode/vs/workbench/browser/parts/dialogs/dialogHandler.js +2 -2
  129. package/dist/vscode/vs/workbench/browser/parts/editor/editor.contribution.js +1 -0
  130. package/dist/vscode/vs/workbench/browser/parts/editor/editor.js +1 -0
  131. package/dist/vscode/vs/workbench/browser/parts/editor/editorCommands.js +9 -10
  132. package/dist/vscode/vs/workbench/browser/parts/editor/editorGroupView.js +15 -9
  133. package/dist/vscode/vs/workbench/browser/parts/editor/editorGroupWatermark.js +13 -17
  134. package/dist/vscode/vs/workbench/browser/parts/editor/editorStatus.js +1 -1
  135. package/dist/vscode/vs/workbench/browser/parts/editor/editorsObserver.js +2 -2
  136. package/dist/vscode/vs/workbench/browser/parts/editor/media/editorgroupview.css.js +1 -1
  137. package/dist/vscode/vs/workbench/browser/parts/editor/media/tabstitlecontrol.css.js +1 -1
  138. package/dist/vscode/vs/workbench/browser/parts/editor/noTabsTitleControl.js +3 -1
  139. package/dist/vscode/vs/workbench/browser/parts/editor/tabsTitleControl.js +60 -11
  140. package/dist/vscode/vs/workbench/browser/parts/editor/textDiffEditor.js +16 -10
  141. package/dist/vscode/vs/workbench/browser/parts/editor/textResourceEditor.js +1 -1
  142. package/dist/vscode/vs/workbench/browser/parts/statusbar/media/statusbarpart.css.js +1 -1
  143. package/dist/vscode/vs/workbench/browser/parts/views/checkbox.js +10 -0
  144. package/dist/vscode/vs/workbench/browser/parts/views/treeView.js +78 -14
  145. package/dist/vscode/vs/workbench/browser/parts/views/viewPaneContainer.js +1 -1
  146. package/dist/vscode/vs/workbench/browser/workbench.contribution.js +65 -6
  147. package/dist/vscode/vs/workbench/common/configuration.js +8 -1
  148. package/dist/vscode/vs/workbench/common/contextkeys.js +9 -1
  149. package/dist/vscode/vs/workbench/common/editor/editorGroupModel.js +5 -1
  150. package/dist/vscode/vs/workbench/common/editor/resourceEditorInput.js +6 -3
  151. package/dist/vscode/vs/workbench/common/editor/textResourceEditorInput.js +9 -6
  152. package/dist/vscode/vs/workbench/common/editor.js +1 -5
  153. package/dist/vscode/vs/workbench/common/resources.js +111 -34
  154. package/dist/vscode/vs/workbench/contrib/bulkEdit/browser/bulkEditService.js +1 -1
  155. package/dist/vscode/vs/workbench/contrib/bulkEdit/browser/bulkTextEdits.js +1 -1
  156. package/dist/vscode/vs/workbench/contrib/chat/browser/chat.js +3 -0
  157. package/dist/vscode/vs/workbench/contrib/chat/common/chatService.js +3 -0
  158. package/dist/vscode/vs/workbench/contrib/codeEditor/browser/languageConfigurationExtensionPoint.js +6 -4
  159. package/dist/vscode/vs/workbench/contrib/codeEditor/browser/suggestEnabledInput/suggestEnabledInput.css.js +4 -0
  160. package/dist/vscode/vs/workbench/contrib/codeEditor/browser/suggestEnabledInput/suggestEnabledInput.js +250 -0
  161. package/dist/vscode/vs/workbench/contrib/customEditor/browser/customEditorInput.js +290 -0
  162. package/dist/vscode/vs/workbench/contrib/customEditor/common/customEditor.js +3 -0
  163. package/dist/vscode/vs/workbench/contrib/debug/browser/debugActionViewItems.js +1 -0
  164. package/dist/vscode/vs/workbench/contrib/debug/browser/debugCommands.js +2 -1
  165. package/dist/vscode/vs/workbench/contrib/debug/browser/debugConfigurationManager.js +20 -20
  166. package/dist/vscode/vs/workbench/contrib/debug/browser/debugEditorActions.js +5 -3
  167. package/dist/vscode/vs/workbench/contrib/debug/browser/debugEditorContribution.js +5 -2
  168. package/dist/vscode/vs/workbench/contrib/debug/browser/debugHover.js +33 -6
  169. package/dist/vscode/vs/workbench/contrib/debug/browser/debugSession.js +1 -1
  170. package/dist/vscode/vs/workbench/contrib/debug/browser/debugTaskRunner.js +1 -1
  171. package/dist/vscode/vs/workbench/contrib/debug/browser/repl.js +3 -3
  172. package/dist/vscode/vs/workbench/contrib/debug/common/debugModel.js +29 -17
  173. package/dist/vscode/vs/workbench/contrib/debug/common/debugStorage.js +11 -10
  174. package/dist/vscode/vs/workbench/contrib/debug/common/debugger.js +10 -6
  175. package/dist/vscode/vs/workbench/contrib/extensions/browser/extensionsActions.js +2514 -0
  176. package/dist/vscode/vs/workbench/contrib/extensions/browser/extensionsIcons.js +82 -0
  177. package/dist/vscode/vs/workbench/contrib/extensions/browser/media/extensionActions.css.js +4 -0
  178. package/dist/vscode/vs/workbench/contrib/extensions/common/extensions.js +6 -1
  179. package/dist/vscode/vs/workbench/contrib/extensions/common/extensionsFileTemplate.js +16 -0
  180. package/dist/vscode/vs/workbench/contrib/files/browser/editors/fileEditorInput.js +2 -3
  181. package/dist/vscode/vs/workbench/contrib/files/browser/editors/textFileSaveErrorHandler.js +2 -0
  182. package/dist/vscode/vs/workbench/contrib/files/browser/explorerService.js +10 -6
  183. package/dist/vscode/vs/workbench/contrib/files/browser/explorerViewlet.js +3 -18
  184. package/dist/vscode/vs/workbench/contrib/files/browser/fileActions.contribution.js +37 -2
  185. package/dist/vscode/vs/workbench/contrib/files/browser/fileActions.js +65 -3
  186. package/dist/vscode/vs/workbench/contrib/files/browser/fileCommands.js +3 -3
  187. package/dist/vscode/vs/workbench/contrib/files/browser/fileConstants.js +3 -1
  188. package/dist/vscode/vs/workbench/contrib/files/browser/files.contribution.js +41 -6
  189. package/dist/vscode/vs/workbench/contrib/files/browser/files.js +1 -0
  190. package/dist/vscode/vs/workbench/contrib/files/browser/views/explorerView.js +3 -3
  191. package/dist/vscode/vs/workbench/contrib/files/browser/views/explorerViewer.js +6 -2
  192. package/dist/vscode/vs/workbench/contrib/files/common/explorerModel.js +16 -9
  193. package/dist/vscode/vs/workbench/contrib/files/common/files.js +1 -6
  194. package/dist/vscode/vs/workbench/contrib/interactive/browser/interactiveDocumentService.js +3 -0
  195. package/dist/vscode/vs/workbench/contrib/interactive/browser/interactiveEditorInput.js +200 -0
  196. package/dist/vscode/vs/workbench/contrib/interactive/browser/interactiveHistoryService.js +3 -0
  197. package/dist/vscode/vs/workbench/contrib/markers/browser/markers.contribution.js +586 -0
  198. package/dist/vscode/vs/workbench/contrib/markers/browser/markersFilterOptions.js +75 -0
  199. package/dist/vscode/vs/workbench/contrib/markers/browser/markersModel.js +201 -0
  200. package/dist/vscode/vs/workbench/contrib/markers/browser/markersTable.js +451 -0
  201. package/dist/vscode/vs/workbench/contrib/markers/browser/markersTreeViewer.js +670 -0
  202. package/dist/vscode/vs/workbench/contrib/markers/browser/markersView.js +857 -0
  203. package/dist/vscode/vs/workbench/contrib/markers/browser/markersViewActions.css.js +4 -0
  204. package/dist/vscode/vs/workbench/contrib/markers/browser/markersViewActions.js +132 -0
  205. package/dist/vscode/vs/workbench/contrib/markers/browser/media/markers.css.js +4 -0
  206. package/dist/vscode/vs/workbench/contrib/markers/browser/messages.js +171 -0
  207. package/dist/vscode/vs/workbench/contrib/markers/common/markers.js +15 -1
  208. package/dist/vscode/vs/workbench/contrib/mergeEditor/browser/mergeEditorInput.js +135 -0
  209. package/dist/vscode/vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel.js +421 -0
  210. package/dist/vscode/vs/workbench/contrib/mergeEditor/browser/mergeMarkers/mergeMarkersController.js +5 -0
  211. package/dist/vscode/vs/workbench/contrib/mergeEditor/browser/model/diffComputer.js +55 -0
  212. package/dist/vscode/vs/workbench/contrib/mergeEditor/browser/model/editing.js +54 -0
  213. package/dist/vscode/vs/workbench/contrib/mergeEditor/browser/model/lineRange.js +108 -0
  214. package/dist/vscode/vs/workbench/contrib/mergeEditor/browser/model/mapping.js +334 -0
  215. package/dist/vscode/vs/workbench/contrib/mergeEditor/browser/model/mergeEditorModel.js +606 -0
  216. package/dist/vscode/vs/workbench/contrib/mergeEditor/browser/model/modifiedBaseRange.js +307 -0
  217. package/dist/vscode/vs/workbench/contrib/mergeEditor/browser/model/rangeUtils.js +36 -0
  218. package/dist/vscode/vs/workbench/contrib/mergeEditor/browser/model/textModelDiffs.js +165 -0
  219. package/dist/vscode/vs/workbench/contrib/mergeEditor/browser/telemetry.js +78 -0
  220. package/dist/vscode/vs/workbench/contrib/mergeEditor/browser/utils.js +68 -0
  221. package/dist/vscode/vs/workbench/contrib/mergeEditor/common/mergeEditor.js +2 -0
  222. package/dist/vscode/vs/workbench/contrib/notebook/browser/contrib/find/findFilters.js +70 -0
  223. package/dist/vscode/vs/workbench/contrib/notebook/browser/contrib/find/notebookFindReplaceWidget.css.js +4 -0
  224. package/dist/vscode/vs/workbench/contrib/notebook/browser/contrib/find/notebookFindReplaceWidget.js +158 -0
  225. package/dist/vscode/vs/workbench/contrib/notebook/browser/notebookBrowser.js +6 -1
  226. package/dist/vscode/vs/workbench/contrib/notebook/browser/services/notebookEditorService.js +3 -0
  227. package/dist/vscode/vs/workbench/contrib/notebook/common/notebookCommon.js +16 -1
  228. package/dist/vscode/vs/workbench/contrib/notebook/common/notebookService.js +3 -0
  229. package/dist/vscode/vs/workbench/contrib/output/browser/logViewer.js +64 -0
  230. package/dist/vscode/vs/workbench/contrib/output/browser/output.contribution.js +378 -0
  231. package/dist/vscode/vs/workbench/contrib/output/browser/outputServices.js +39 -3
  232. package/dist/vscode/vs/workbench/contrib/output/browser/outputView.js +220 -0
  233. package/dist/vscode/vs/workbench/contrib/output/common/outputChannelModel.js +12 -3
  234. package/dist/vscode/vs/workbench/contrib/output/common/outputLinkComputer.js +129 -0
  235. package/dist/vscode/vs/workbench/contrib/preferences/browser/keybindingWidgets.js +270 -0
  236. package/dist/vscode/vs/workbench/contrib/preferences/browser/keybindingsEditor.js +1080 -0
  237. package/dist/vscode/vs/workbench/contrib/preferences/browser/media/keybindings.css.js +4 -0
  238. package/dist/vscode/vs/workbench/contrib/preferences/browser/media/keybindingsEditor.css.js +4 -0
  239. package/dist/vscode/vs/workbench/contrib/preferences/browser/media/preferences.css.js +4 -0
  240. package/dist/vscode/vs/workbench/contrib/preferences/browser/media/settingsEditor2.css.js +4 -0
  241. package/dist/vscode/vs/workbench/contrib/preferences/browser/media/settingsWidgets.css.js +4 -0
  242. package/dist/vscode/vs/workbench/contrib/preferences/browser/preferences.contribution.js +1154 -0
  243. package/dist/vscode/vs/workbench/contrib/preferences/browser/preferencesActions.js +94 -0
  244. package/dist/vscode/vs/workbench/contrib/preferences/browser/preferencesEditor.js +47 -0
  245. package/dist/vscode/vs/workbench/contrib/preferences/browser/preferencesIcons.js +37 -0
  246. package/dist/vscode/vs/workbench/contrib/preferences/browser/preferencesRenderers.js +731 -0
  247. package/dist/vscode/vs/workbench/contrib/preferences/browser/preferencesSearch.js +271 -0
  248. package/dist/vscode/vs/workbench/contrib/preferences/browser/preferencesWidgets.js +479 -0
  249. package/dist/vscode/vs/workbench/contrib/preferences/browser/settingsEditor2.js +1465 -0
  250. package/dist/vscode/vs/workbench/contrib/preferences/browser/settingsEditorSettingIndicators.js +506 -0
  251. package/dist/vscode/vs/workbench/contrib/preferences/browser/settingsLayout.js +296 -0
  252. package/dist/vscode/vs/workbench/contrib/preferences/browser/settingsSearchMenu.js +79 -0
  253. package/dist/vscode/vs/workbench/contrib/preferences/browser/settingsTree.js +1984 -0
  254. package/dist/vscode/vs/workbench/contrib/preferences/browser/settingsTreeModels.js +759 -0
  255. package/dist/vscode/vs/workbench/contrib/preferences/browser/settingsWidgets.js +1008 -0
  256. package/dist/vscode/vs/workbench/contrib/preferences/browser/tocTree.js +196 -0
  257. package/dist/vscode/vs/workbench/contrib/preferences/common/preferences.js +68 -0
  258. package/dist/vscode/vs/workbench/contrib/preferences/common/preferencesContribution.js +157 -0
  259. package/dist/vscode/vs/workbench/contrib/preferences/common/settingsEditorColorRegistry.js +67 -0
  260. package/dist/vscode/vs/workbench/contrib/quickaccess/browser/commandsQuickAccess.js +16 -16
  261. package/dist/vscode/vs/workbench/contrib/quickaccess/browser/quickAccess.contribution.js +1 -2
  262. package/dist/vscode/vs/workbench/contrib/remote/browser/remoteExplorer.js +23 -2
  263. package/dist/vscode/vs/workbench/contrib/remote/browser/tunnelView.js +5 -5
  264. package/dist/vscode/vs/workbench/contrib/search/browser/media/searchview.css.js +4 -0
  265. package/dist/vscode/vs/workbench/contrib/search/browser/patternInputWidget.js +217 -0
  266. package/dist/vscode/vs/workbench/contrib/search/browser/replace.js +3 -0
  267. package/dist/vscode/vs/workbench/contrib/search/browser/replaceContributions.js +7 -0
  268. package/dist/vscode/vs/workbench/contrib/search/browser/replaceService.js +222 -0
  269. package/dist/vscode/vs/workbench/contrib/search/browser/search.contribution.js +54 -15
  270. package/dist/vscode/vs/workbench/contrib/search/browser/searchActionsBase.js +17 -0
  271. package/dist/vscode/vs/workbench/contrib/search/browser/searchFindInput.js +41 -0
  272. package/dist/vscode/vs/workbench/contrib/search/browser/searchIcons.js +35 -0
  273. package/dist/vscode/vs/workbench/contrib/search/browser/searchMessage.js +58 -0
  274. package/dist/vscode/vs/workbench/contrib/search/browser/searchModel.js +1842 -0
  275. package/dist/vscode/vs/workbench/contrib/search/browser/searchNotebookHelpers.js +49 -0
  276. package/dist/vscode/vs/workbench/contrib/search/browser/searchResultsView.js +379 -0
  277. package/dist/vscode/vs/workbench/contrib/search/browser/searchView.js +1867 -0
  278. package/dist/vscode/vs/workbench/contrib/search/browser/searchWidget.js +628 -0
  279. package/dist/vscode/vs/workbench/contrib/search/common/constants.js +30 -1
  280. package/dist/vscode/vs/workbench/contrib/search/common/search.js +9 -1
  281. package/dist/vscode/vs/workbench/contrib/search/common/searchHistoryService.js +42 -0
  282. package/dist/vscode/vs/workbench/contrib/searchEditor/browser/constants.js +11 -0
  283. package/dist/vscode/vs/workbench/contrib/searchEditor/browser/media/searchEditor.css.js +4 -0
  284. package/dist/vscode/vs/workbench/contrib/searchEditor/browser/searchEditor.contribution.js +477 -0
  285. package/dist/vscode/vs/workbench/contrib/searchEditor/browser/searchEditor.js +697 -0
  286. package/dist/vscode/vs/workbench/contrib/searchEditor/browser/searchEditorActions.js +188 -0
  287. package/dist/vscode/vs/workbench/contrib/searchEditor/browser/searchEditorInput.js +295 -0
  288. package/dist/vscode/vs/workbench/contrib/searchEditor/browser/searchEditorModel.js +135 -0
  289. package/dist/vscode/vs/workbench/contrib/searchEditor/browser/searchEditorSerialization.js +268 -0
  290. package/dist/vscode/vs/workbench/contrib/snippets/browser/tabCompletion.js +2 -2
  291. package/dist/vscode/vs/workbench/contrib/tasks/common/taskService.js +16 -1
  292. package/dist/vscode/vs/workbench/contrib/terminal/browser/environmentVariableInfo.js +119 -0
  293. package/dist/vscode/vs/workbench/contrib/terminal/browser/media/scrollbar.css.js +4 -0
  294. package/dist/vscode/vs/workbench/contrib/terminal/browser/media/terminal.css.js +4 -0
  295. package/dist/vscode/vs/workbench/contrib/terminal/browser/media/widgets.css.js +4 -0
  296. package/dist/vscode/vs/workbench/contrib/terminal/browser/media/xterm.css.js +4 -0
  297. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminal.contribution.js +238 -0
  298. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminal.js +4 -1
  299. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalActions.js +1930 -0
  300. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalCommands.js +22 -0
  301. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalConfigHelper.js +213 -0
  302. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalContextMenu.js +17 -0
  303. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalEditor.js +186 -0
  304. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalEditorInput.js +199 -0
  305. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalEditorService.js +239 -0
  306. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalExtensions.js +22 -0
  307. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalGroup.js +482 -0
  308. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalGroupService.js +372 -0
  309. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalIcon.js +60 -1
  310. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalIcons.js +37 -0
  311. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalInstance.js +2123 -0
  312. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalInstanceService.js +79 -0
  313. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalMainContribution.js +82 -0
  314. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalMenus.js +850 -0
  315. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalProcessExtHostProxy.js +142 -0
  316. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalProcessManager.js +618 -0
  317. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalProfileQuickpick.js +278 -0
  318. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalProfileResolverService.js +417 -0
  319. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalProfileService.js +213 -0
  320. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalQuickAccess.js +144 -0
  321. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalRunRecentQuickPick.js +267 -0
  322. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalService.js +1063 -0
  323. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalStatusList.js +108 -0
  324. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalTabbedView.js +417 -0
  325. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalTabsList.js +680 -0
  326. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalTooltip.js +72 -0
  327. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalUri.js +39 -0
  328. package/dist/vscode/vs/workbench/contrib/terminal/browser/terminalView.js +535 -0
  329. package/dist/vscode/vs/workbench/contrib/terminal/browser/widgets/widgetManager.js +36 -0
  330. package/dist/vscode/vs/workbench/contrib/terminal/browser/xterm/decorationAddon.js +469 -0
  331. package/dist/vscode/vs/workbench/contrib/terminal/browser/xterm/decorationStyles.js +97 -0
  332. package/dist/vscode/vs/workbench/contrib/terminal/browser/xterm/lineDataEventAddon.js +56 -0
  333. package/dist/vscode/vs/workbench/contrib/terminal/browser/xterm/markNavigationAddon.js +416 -0
  334. package/dist/vscode/vs/workbench/contrib/terminal/browser/xterm/suggestAddon.js +390 -0
  335. package/dist/vscode/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.js +587 -0
  336. package/dist/vscode/vs/workbench/contrib/terminal/common/environmentVariable.js +3 -0
  337. package/dist/vscode/vs/workbench/contrib/terminal/common/environmentVariableService.js +94 -0
  338. package/dist/vscode/vs/workbench/contrib/terminal/common/history.js +356 -0
  339. package/dist/vscode/vs/workbench/contrib/terminal/common/terminal.js +266 -0
  340. package/dist/vscode/vs/workbench/contrib/terminal/common/terminalColorRegistry.js +23 -16
  341. package/dist/vscode/vs/workbench/contrib/terminal/common/terminalConfiguration.js +965 -0
  342. package/dist/vscode/vs/workbench/contrib/terminal/common/terminalContextKey.js +157 -0
  343. package/dist/vscode/vs/workbench/contrib/terminal/common/terminalEnvironment.js +272 -0
  344. package/dist/vscode/vs/workbench/contrib/terminal/common/terminalExtensionPoints.js +27 -0
  345. package/dist/vscode/vs/workbench/contrib/terminal/common/terminalStrings.js +86 -0
  346. package/dist/vscode/vs/workbench/contrib/terminal/electron-sandbox/terminalProfileResolverService.js +46 -0
  347. package/dist/vscode/vs/workbench/contrib/terminalContrib/links/browser/links.js +3 -0
  348. package/dist/vscode/vs/workbench/contrib/terminalContrib/links/browser/terminalLinkProviderService.js +26 -0
  349. package/dist/vscode/vs/workbench/contrib/terminalContrib/quickFix/browser/quickFix.js +3 -0
  350. package/dist/vscode/vs/workbench/contrib/terminalContrib/quickFix/browser/terminalQuickFixService.js +143 -0
  351. package/dist/vscode/vs/workbench/contrib/webviewPanel/browser/webviewEditorInput.js +85 -0
  352. package/dist/vscode/vs/workbench/contrib/webviewPanel/browser/webviewWorkbenchService.js +52 -0
  353. package/dist/vscode/vs/workbench/services/actions/common/menusExtensionPoint.js +14 -6
  354. package/dist/vscode/vs/workbench/services/assignment/common/assignmentService.js +3 -0
  355. package/dist/vscode/vs/workbench/services/configuration/browser/configurationService.js +13 -13
  356. package/dist/vscode/vs/workbench/services/configuration/common/configuration.js +2 -1
  357. package/dist/vscode/vs/workbench/services/configuration/common/configurationEditing.js +2 -2
  358. package/dist/vscode/vs/workbench/services/configuration/common/jsonEditingService.js +2 -2
  359. package/dist/vscode/vs/workbench/services/dialogs/browser/abstractFileDialogService.js +302 -0
  360. package/dist/vscode/vs/workbench/services/dialogs/browser/simpleFileDialog.js +971 -0
  361. package/dist/vscode/vs/workbench/services/extensionManagement/common/extensionManagement.js +3 -2
  362. package/dist/vscode/vs/workbench/services/extensionRecommendations/common/extensionRecommendations.js +4 -0
  363. package/dist/vscode/vs/workbench/services/extensionRecommendations/common/workspaceExtensionsConfig.js +2 -0
  364. package/dist/vscode/vs/workbench/services/extensions/common/extensionManifestPropertiesService.js +3 -0
  365. package/dist/vscode/vs/workbench/services/extensions/common/extensions.js +14 -2
  366. package/dist/vscode/vs/workbench/services/extensions/common/extensionsApiProposals.js +10 -1
  367. package/dist/vscode/vs/workbench/services/filesConfiguration/common/filesConfigurationService.js +70 -3
  368. package/dist/vscode/vs/workbench/services/hover/browser/hoverService.js +1 -1
  369. package/dist/vscode/vs/workbench/services/hover/browser/hoverWidget.js +2 -1
  370. package/dist/vscode/vs/workbench/services/hover/browser/media/hover.css.js +1 -1
  371. package/dist/vscode/vs/workbench/services/keybinding/common/keybindingEditing.js +275 -0
  372. package/dist/vscode/vs/workbench/services/localization/common/locale.js +3 -0
  373. package/dist/vscode/vs/workbench/services/log/common/logConstants.js +2 -0
  374. package/dist/vscode/vs/workbench/services/output/common/output.js +4 -1
  375. package/dist/vscode/vs/workbench/services/preferences/common/preferences.js +22 -1
  376. package/dist/vscode/vs/workbench/services/preferences/common/preferencesModels.js +6 -0
  377. package/dist/vscode/vs/workbench/services/preferences/common/preferencesValidation.js +37 -1
  378. package/dist/vscode/vs/workbench/services/remote/common/remoteAgentService.js +69 -0
  379. package/dist/vscode/vs/workbench/services/remote/common/remoteExplorerService.js +66 -27
  380. package/dist/vscode/vs/workbench/services/search/common/fileSearchManager.js +265 -0
  381. package/dist/vscode/vs/workbench/services/search/common/queryBuilder.js +6 -0
  382. package/dist/vscode/vs/workbench/services/search/common/replace.js +203 -0
  383. package/dist/vscode/vs/workbench/services/search/common/search.js +227 -1
  384. package/dist/vscode/vs/workbench/services/search/common/searchExtTypes.js +6 -0
  385. package/dist/vscode/vs/workbench/services/search/common/searchHelpers.js +72 -0
  386. package/dist/vscode/vs/workbench/services/search/common/searchService.js +355 -0
  387. package/dist/vscode/vs/workbench/services/search/common/textSearchManager.js +309 -0
  388. package/dist/vscode/vs/workbench/services/suggest/browser/media/suggest.css.js +4 -0
  389. package/dist/vscode/vs/workbench/services/suggest/browser/simpleCompletionItem.js +10 -0
  390. package/dist/vscode/vs/workbench/services/suggest/browser/simpleCompletionModel.js +98 -0
  391. package/dist/vscode/vs/workbench/services/suggest/browser/simpleSuggestWidget.js +399 -0
  392. package/dist/vscode/vs/workbench/services/suggest/browser/simpleSuggestWidgetRenderer.js +83 -0
  393. package/dist/vscode/vs/workbench/services/terminal/common/embedderTerminalService.js +3 -0
  394. package/dist/vscode/vs/workbench/services/textfile/browser/textFileService.js +1 -1
  395. package/dist/vscode/vs/workbench/services/textfile/common/textFileEditorModel.js +10 -3
  396. package/dist/vscode/vs/workbench/services/themes/browser/fileIconThemeData.js +3 -3
  397. package/dist/vscode/vs/workbench/services/themes/browser/productIconThemeData.js +3 -3
  398. package/dist/vscode/vs/workbench/services/themes/common/colorThemeData.js +3 -3
  399. package/dist/vscode/vs/workbench/services/untitled/common/untitledTextEditorInput.js +6 -4
  400. package/dist/vscode/vs/workbench/services/untitled/common/untitledTextEditorModel.js +3 -0
  401. package/dist/vscode/vs/workbench/services/untitled/common/untitledTextEditorService.js +4 -0
  402. package/dist/vscode/vs/workbench/services/userActivity/common/userActivityRegistry.js +15 -0
  403. package/dist/vscode/vs/workbench/services/userActivity/common/userActivityService.js +37 -0
  404. package/dist/vscode/vs/workbench/services/userDataSync/common/userDataSync.js +7 -0
  405. package/dist/vscode/vs/workbench/services/workingCopy/common/workingCopyEditorService.js +40 -0
  406. package/dist/vscode/vs/workbench/services/workingCopy/common/workingCopyService.js +12 -0
  407. package/dist/vscode/vs/workbench/services/workspaces/common/canonicalUriService.js +19 -0
  408. package/dist/vscode-default-extensions/css/syntaxes/css.tmLanguage.json.extensionResource.js +1 -1
  409. package/dist/vscode-default-extensions/json/package.json.js +1 -1
  410. package/dist/vscode-default-extensions/json/syntaxes/JSONC.tmLanguage.json.extensionResource.js +1 -1
  411. package/dist/vscode-default-extensions/json/syntaxes/JSONL.tmLanguage.json.extensionResource.js +2 -0
  412. package/dist/vscode-default-extensions/latex/syntaxes/Bibtex.tmLanguage.json.extensionResource.js +1 -1
  413. package/dist/vscode-default-extensions/latex/syntaxes/LaTeX.tmLanguage.json.extensionResource.js +1 -1
  414. package/dist/vscode-default-extensions/latex/syntaxes/TeX.tmLanguage.json.extensionResource.js +1 -1
  415. package/dist/vscode-default-extensions/latex/syntaxes/cpp-grammar-bailout.tmLanguage.json.extensionResource.js +1 -1
  416. package/dist/vscode-default-extensions/latex/syntaxes/markdown-latex-combined.tmLanguage.json.extensionResource.js +1 -1
  417. package/dist/vscode-default-extensions/lua/syntaxes/lua.tmLanguage.json.extensionResource.js +1 -1
  418. package/dist/vscode-default-extensions/perl/package.json.js +1 -1
  419. package/dist/vscode-default-extensions/php/snippets/php.code-snippets.extensionResource.js +1 -1
  420. package/dist/vscode-default-extensions/sql/language-configuration.json.extensionResource.js +1 -1
  421. package/dist/vscode-default-extensions/theme-abyss/themes/abyss-color-theme.json.extensionResource.js +1 -1
  422. package/dist/vscode-default-extensions/theme-defaults/package.json.js +1 -1
  423. package/dist/vscode-default-extensions/theme-defaults/themes/dark_modern.json.extensionResource.js +2 -0
  424. package/dist/vscode-default-extensions/theme-defaults/themes/dark_vs.json.extensionResource.js +1 -1
  425. package/dist/vscode-default-extensions/theme-defaults/themes/hc_black.json.extensionResource.js +1 -1
  426. package/dist/vscode-default-extensions/theme-defaults/themes/hc_light.json.extensionResource.js +1 -1
  427. package/dist/vscode-default-extensions/theme-defaults/themes/light_modern.json.extensionResource.js +2 -0
  428. package/dist/vscode-default-extensions/theme-defaults/themes/light_vs.json.extensionResource.js +1 -1
  429. package/dist/vscode-default-extensions/theme-kimbie-dark/themes/kimbie-dark-color-theme.json.extensionResource.js +1 -1
  430. package/dist/vscode-default-extensions/theme-monokai/themes/monokai-color-theme.json.extensionResource.js +1 -1
  431. package/dist/vscode-default-extensions/theme-monokai-dimmed/themes/dimmed-monokai-color-theme.json.extensionResource.js +1 -1
  432. package/dist/vscode-default-extensions/theme-quietlight/themes/quietlight-color-theme.json.extensionResource.js +1 -1
  433. package/dist/vscode-default-extensions/theme-red/themes/Red-color-theme.json.extensionResource.js +1 -1
  434. package/dist/vscode-default-extensions/theme-seti/icons/vs-seti-icon-theme.json.extensionResource.js +1 -1
  435. package/dist/vscode-default-extensions/theme-solarized-dark/themes/solarized-dark-color-theme.json.extensionResource.js +1 -1
  436. package/dist/vscode-default-extensions/theme-solarized-light/themes/solarized-light-color-theme.json.extensionResource.js +1 -1
  437. package/dist/vscode-default-extensions/theme-tomorrow-night-blue/themes/tomorrow-night-blue-color-theme.json.extensionResource.js +1 -1
  438. package/dist/vscode-default-extensions/vb/language-configuration.json.extensionResource.js +1 -1
  439. package/dist/vscode-services/env.js +4 -2
  440. package/dist/vscode-services/extHost.js +32 -48
  441. package/dist/vscode-services/missing-services.js +407 -29
  442. package/dist/vscode-services/window.js +59 -65
  443. package/dist/vscode-services/workspace.js +19 -5
  444. package/dist/workers/outputLinkComputer.worker.d.ts +2 -0
  445. package/dist/workers/outputLinkComputer.worker.js +3 -0
  446. package/dist/workspace.d.ts +1 -1
  447. package/monaco-editor-treemending.patch +1305 -1184
  448. package/package.json +65 -19
  449. package/dist/activity.d.ts +0 -2802
  450. package/dist/collections.d.ts +0 -7
  451. package/dist/colorRegistry.d.ts +0 -710
  452. package/dist/vscode/vs/platform/product/common/product.js +0 -48
  453. package/dist/vscode/vs/workbench/contrib/interactiveSession/browser/interactiveSessionFollowups.js +0 -30
  454. package/dist/vscode/vs/workbench/contrib/interactiveSession/browser/interactiveSessionInputPart.js +0 -196
  455. package/dist/vscode/vs/workbench/contrib/interactiveSession/browser/interactiveSessionListRenderer.js +0 -622
  456. package/dist/vscode/vs/workbench/contrib/interactiveSession/browser/interactiveSessionOptions.js +0 -77
  457. package/dist/vscode/vs/workbench/contrib/interactiveSession/browser/interactiveSessionWidget.js +0 -311
  458. package/dist/vscode/vs/workbench/contrib/interactiveSession/browser/media/interactiveSession.css.js +0 -4
  459. package/dist/vscode/vs/workbench/contrib/interactiveSession/common/interactiveSessionContextKeys.js +0 -56
  460. package/dist/vscode/vs/workbench/contrib/interactiveSession/common/interactiveSessionModel.js +0 -305
  461. package/dist/vscode/vs/workbench/contrib/interactiveSession/common/interactiveSessionService.js +0 -13
  462. package/dist/vscode/vs/workbench/contrib/interactiveSession/common/interactiveSessionServiceImpl.js +0 -379
  463. package/dist/vscode/vs/workbench/contrib/interactiveSession/common/interactiveSessionViewModel.js +0 -207
  464. package/dist/vscode/vs/workbench/contrib/interactiveSession/common/interactiveSessionWidgetHistoryService.js +0 -3
  465. package/dist/vscode/vs/workbench/contrib/interactiveSession/common/interactiveSessionWordCounter.js +0 -25
  466. package/dist/vscode-default-extensions/theme-defaults/themes/dark_plus_experimental.json.extensionResource.js +0 -2
  467. package/dist/vscode-default-extensions/theme-defaults/themes/light_plus_experimental.json.extensionResource.js +0 -2
@@ -0,0 +1,1984 @@
1
+ import { __decorate, __param } from '../../../../../../node_modules/tslib/tslib.es6.js';
2
+ import { BrowserFeatures } from 'monaco-editor/esm/vs/base/browser/canIUse.js';
3
+ import * as dom from 'monaco-editor/esm/vs/base/browser/dom.js';
4
+ import { alert } from 'monaco-editor/esm/vs/base/browser/ui/aria/aria.js';
5
+ import { Button } from 'monaco-editor/esm/vs/base/browser/ui/button/button.js';
6
+ import { Toggle, unthemedToggleStyles } from 'monaco-editor/esm/vs/base/browser/ui/toggle/toggle.js';
7
+ import { InputBox } from 'monaco-editor/esm/vs/base/browser/ui/inputbox/inputBox.js';
8
+ import { CachedListVirtualDelegate } from 'monaco-editor/esm/vs/base/browser/ui/list/list.js';
9
+ import { DefaultStyleController } from 'monaco-editor/esm/vs/base/browser/ui/list/listWidget.js';
10
+ import { SelectBox } from 'monaco-editor/esm/vs/base/browser/ui/selectBox/selectBox.js';
11
+ import { ToolBar } from 'monaco-editor/esm/vs/base/browser/ui/toolbar/toolbar.js';
12
+ import { ObjectTreeModel } from 'monaco-editor/esm/vs/base/browser/ui/tree/objectTreeModel.js';
13
+ import { Action, Separator } from 'monaco-editor/esm/vs/base/common/actions.js';
14
+ import { onUnexpectedError } from 'monaco-editor/esm/vs/base/common/errors.js';
15
+ import { Emitter, Event } from 'monaco-editor/esm/vs/base/common/event.js';
16
+ import { Disposable, DisposableStore, isDisposable, dispose, toDisposable } from 'monaco-editor/esm/vs/base/common/lifecycle.js';
17
+ import { isIOS } from 'monaco-editor/esm/vs/base/common/platform.js';
18
+ import { escapeRegExpCharacters } from 'monaco-editor/esm/vs/base/common/strings.js';
19
+ import { isDefined, isUndefinedOrNull } from 'monaco-editor/esm/vs/base/common/types.js';
20
+ import { localize } from 'monaco-editor/esm/vs/nls.js';
21
+ import { IClipboardService } from 'monaco-editor/esm/vs/platform/clipboard/common/clipboardService.js';
22
+ import { ICommandService } from 'monaco-editor/esm/vs/platform/commands/common/commands.js';
23
+ import { getLanguageTagSettingPlainKey, IConfigurationService } from 'monaco-editor/esm/vs/platform/configuration/common/configuration.js';
24
+ import { IContextViewService, IContextMenuService } from 'monaco-editor/esm/vs/platform/contextview/browser/contextView.js';
25
+ import { IInstantiationService } from 'monaco-editor/esm/vs/platform/instantiation/common/instantiation.js';
26
+ import { IKeybindingService } from 'monaco-editor/esm/vs/platform/keybinding/common/keybinding.js';
27
+ import { IOpenerService } from 'monaco-editor/esm/vs/platform/opener/common/opener.js';
28
+ import { editorBackground, foreground } from 'monaco-editor/esm/vs/platform/theme/common/colorRegistry.js';
29
+ import { IThemeService } from 'monaco-editor/esm/vs/platform/theme/common/themeService.js';
30
+ import { getIgnoredSettings } from '../../../../platform/userDataSync/common/settingsMerge.js';
31
+ import { settingKeyToDisplayFormat, inspectSetting, SettingsTreeSettingElement, SettingsTreeGroupElement, SettingsTreeNewExtensionsElement } from './settingsTreeModels.js';
32
+ import { ListSettingWidget, ObjectSettingDropdownWidget, ObjectSettingCheckboxWidget, ExcludeSettingWidget, IncludeSettingWidget } from './settingsWidgets.js';
33
+ import { SETTINGS_EDITOR_COMMAND_SHOW_CONTEXT_MENU, LANGUAGE_SETTING_TAG } from '../common/preferences.js';
34
+ import { IWorkbenchEnvironmentService } from '../../../services/environment/common/environmentService.js';
35
+ import { SettingValueType } from '../../../services/preferences/common/preferences.js';
36
+ import { getDefaultIgnoredSettings, IUserDataSyncEnablementService } from '../../../../platform/userDataSync/common/userDataSync.js';
37
+ import { getInvalidTypeError } from '../../../services/preferences/common/preferencesValidation.js';
38
+ import { Codicon } from 'monaco-editor/esm/vs/base/common/codicons.js';
39
+ import { SimpleIconLabel } from '../../../../base/browser/ui/iconLabel/simpleIconLabel.js';
40
+ import { WorkbenchObjectTree, IListService } from 'monaco-editor/esm/vs/platform/list/browser/listService.js';
41
+ import { IContextKeyService } from 'monaco-editor/esm/vs/platform/contextkey/common/contextkey.js';
42
+ import { settingsMoreActionIcon } from './preferencesIcons.js';
43
+ import { MarkdownRenderer } from 'monaco-editor/esm/vs/editor/contrib/markdownRenderer/browser/markdownRenderer.js';
44
+ import { IExtensionService } from '../../../services/extensions/common/extensions.js';
45
+ import { settingsTextInputBackground, settingsTextInputForeground, settingsTextInputBorder, settingsNumberInputBackground, settingsNumberInputForeground, settingsNumberInputBorder, settingsSelectBackground, settingsSelectForeground, settingsSelectBorder, settingsSelectListBorder } from '../common/settingsEditorColorRegistry.js';
46
+ import { SettingsTreeIndicatorsLabel, getIndicatorsLabelAriaLabel } from './settingsEditorSettingIndicators.js';
47
+ import { ILanguageService } from 'monaco-editor/esm/vs/editor/common/languages/language.js';
48
+ import { IUserDataProfilesService } from 'monaco-editor/esm/vs/platform/userDataProfile/common/userDataProfile.js';
49
+ import { getInputBoxStyle, getListStyles, getSelectBoxStyles, defaultButtonStyles } from 'monaco-editor/esm/vs/platform/theme/browser/defaultStyles.js';
50
+ import { StandardKeyboardEvent } from 'monaco-editor/esm/vs/base/browser/keyboardEvent.js';
51
+ import { RenderIndentGuides } from 'monaco-editor/esm/vs/base/browser/ui/tree/abstractTree.js';
52
+ import { IProductService } from 'monaco-editor/esm/vs/platform/product/common/productService.js';
53
+ import { ITelemetryService } from 'monaco-editor/esm/vs/platform/telemetry/common/telemetry.js';
54
+ import { IExtensionsWorkbenchService } from '../../extensions/common/extensions.js';
55
+ const $ = dom.$;
56
+ function getIncludeExcludeDisplayValue(element) {
57
+ const data = element.isConfigured ?
58
+ { ...element.defaultValue, ...element.scopeValue } :
59
+ element.defaultValue;
60
+ return ( ( Object.keys(data))
61
+ .filter(key => !!data[key])
62
+ .map(key => {
63
+ const value = data[key];
64
+ const sibling = typeof value === 'boolean' ? undefined : value.when;
65
+ return {
66
+ value: {
67
+ type: 'string',
68
+ data: key
69
+ },
70
+ sibling,
71
+ elementType: element.valueType
72
+ };
73
+ }));
74
+ }
75
+ function areAllPropertiesDefined(properties, itemsToDisplay) {
76
+ const staticProperties = ( new Set(properties));
77
+ itemsToDisplay.forEach(({ key }) => staticProperties.delete(key.data));
78
+ return staticProperties.size === 0;
79
+ }
80
+ function getEnumOptionsFromSchema(schema) {
81
+ if (schema.anyOf) {
82
+ return ( schema.anyOf.map(getEnumOptionsFromSchema)).flat();
83
+ }
84
+ const enumDescriptions = schema.enumDescriptions ?? [];
85
+ return ( (schema.enum ?? []).map((value, idx) => {
86
+ const description = idx < enumDescriptions.length
87
+ ? enumDescriptions[idx]
88
+ : undefined;
89
+ return { value, description };
90
+ }));
91
+ }
92
+ function getObjectValueType(schema) {
93
+ if (schema.anyOf) {
94
+ const subTypes = ( schema.anyOf.map(getObjectValueType));
95
+ if (( subTypes.some(type => type === 'enum'))) {
96
+ return 'enum';
97
+ }
98
+ return 'string';
99
+ }
100
+ if (schema.type === 'boolean') {
101
+ return 'boolean';
102
+ }
103
+ else if (schema.type === 'string' && isDefined(schema.enum) && schema.enum.length > 0) {
104
+ return 'enum';
105
+ }
106
+ else {
107
+ return 'string';
108
+ }
109
+ }
110
+ function getObjectDisplayValue(element) {
111
+ const elementDefaultValue = typeof element.defaultValue === 'object'
112
+ ? element.defaultValue ?? {}
113
+ : {};
114
+ const elementScopeValue = typeof element.scopeValue === 'object'
115
+ ? element.scopeValue ?? {}
116
+ : {};
117
+ const data = element.isConfigured ?
118
+ { ...elementDefaultValue, ...elementScopeValue } :
119
+ elementDefaultValue;
120
+ const { objectProperties, objectPatternProperties, objectAdditionalProperties } = element.setting;
121
+ const patternsAndSchemas = ( Object
122
+ .entries(objectPatternProperties ?? {})
123
+ .map(([pattern, schema]) => ({
124
+ pattern: ( new RegExp(pattern)),
125
+ schema
126
+ })));
127
+ const wellDefinedKeyEnumOptions = ( Object.entries(objectProperties ?? {}).map(([key, schema]) => ({ value: key, description: schema.description })));
128
+ return ( ( Object.keys(data)).map(key => {
129
+ const defaultValue = elementDefaultValue[key];
130
+ if (isDefined(objectProperties) && key in objectProperties) {
131
+ if (element.setting.allKeysAreBoolean) {
132
+ return {
133
+ key: {
134
+ type: 'string',
135
+ data: key
136
+ },
137
+ value: {
138
+ type: 'boolean',
139
+ data: data[key]
140
+ },
141
+ keyDescription: objectProperties[key].description,
142
+ removable: false
143
+ };
144
+ }
145
+ const valueEnumOptions = getEnumOptionsFromSchema(objectProperties[key]);
146
+ return {
147
+ key: {
148
+ type: 'enum',
149
+ data: key,
150
+ options: wellDefinedKeyEnumOptions,
151
+ },
152
+ value: {
153
+ type: getObjectValueType(objectProperties[key]),
154
+ data: data[key],
155
+ options: valueEnumOptions,
156
+ },
157
+ keyDescription: objectProperties[key].description,
158
+ removable: isUndefinedOrNull(defaultValue),
159
+ };
160
+ }
161
+ const removable = !defaultValue;
162
+ const schema = patternsAndSchemas.find(({ pattern }) => pattern.test(key))?.schema;
163
+ if (schema) {
164
+ const valueEnumOptions = getEnumOptionsFromSchema(schema);
165
+ return {
166
+ key: { type: 'string', data: key },
167
+ value: {
168
+ type: getObjectValueType(schema),
169
+ data: data[key],
170
+ options: valueEnumOptions,
171
+ },
172
+ keyDescription: schema.description,
173
+ removable,
174
+ };
175
+ }
176
+ const additionalValueEnums = getEnumOptionsFromSchema(typeof objectAdditionalProperties === 'boolean'
177
+ ? {}
178
+ : objectAdditionalProperties ?? {});
179
+ return {
180
+ key: { type: 'string', data: key },
181
+ value: {
182
+ type: typeof objectAdditionalProperties === 'object' ? getObjectValueType(objectAdditionalProperties) : 'string',
183
+ data: data[key],
184
+ options: additionalValueEnums,
185
+ },
186
+ keyDescription: typeof objectAdditionalProperties === 'object' ? objectAdditionalProperties.description : undefined,
187
+ removable,
188
+ };
189
+ })).filter(item => !isUndefinedOrNull(item.value.data));
190
+ }
191
+ function createArraySuggester(element) {
192
+ return (keys, idx) => {
193
+ const enumOptions = [];
194
+ if (element.setting.enum) {
195
+ element.setting.enum.forEach((key, i) => {
196
+ if (!element.setting.uniqueItems || (idx !== undefined && key === keys[idx]) || !keys.includes(key)) {
197
+ const description = element.setting.enumDescriptions?.[i];
198
+ enumOptions.push({ value: key, description });
199
+ }
200
+ });
201
+ }
202
+ return enumOptions.length > 0
203
+ ? { type: 'enum', data: enumOptions[0].value, options: enumOptions }
204
+ : undefined;
205
+ };
206
+ }
207
+ function createObjectKeySuggester(element) {
208
+ const { objectProperties } = element.setting;
209
+ const allStaticKeys = ( Object.keys(objectProperties ?? {}));
210
+ return keys => {
211
+ const existingKeys = ( new Set(keys));
212
+ const enumOptions = [];
213
+ allStaticKeys.forEach(staticKey => {
214
+ if (!( existingKeys.has(staticKey))) {
215
+ enumOptions.push({ value: staticKey, description: objectProperties[staticKey].description });
216
+ }
217
+ });
218
+ return enumOptions.length > 0
219
+ ? { type: 'enum', data: enumOptions[0].value, options: enumOptions }
220
+ : undefined;
221
+ };
222
+ }
223
+ function createObjectValueSuggester(element) {
224
+ const { objectProperties, objectPatternProperties, objectAdditionalProperties } = element.setting;
225
+ const patternsAndSchemas = ( Object
226
+ .entries(objectPatternProperties ?? {})
227
+ .map(([pattern, schema]) => ({
228
+ pattern: ( new RegExp(pattern)),
229
+ schema
230
+ })));
231
+ return (key) => {
232
+ let suggestedSchema;
233
+ if (isDefined(objectProperties) && key in objectProperties) {
234
+ suggestedSchema = objectProperties[key];
235
+ }
236
+ const patternSchema = suggestedSchema ?? patternsAndSchemas.find(({ pattern }) => pattern.test(key))?.schema;
237
+ if (isDefined(patternSchema)) {
238
+ suggestedSchema = patternSchema;
239
+ }
240
+ else if (isDefined(objectAdditionalProperties) && typeof objectAdditionalProperties === 'object') {
241
+ suggestedSchema = objectAdditionalProperties;
242
+ }
243
+ if (isDefined(suggestedSchema)) {
244
+ const type = getObjectValueType(suggestedSchema);
245
+ if (type === 'boolean') {
246
+ return { type, data: suggestedSchema.default ?? true };
247
+ }
248
+ else if (type === 'enum') {
249
+ const options = getEnumOptionsFromSchema(suggestedSchema);
250
+ return { type, data: suggestedSchema.default ?? options[0].value, options };
251
+ }
252
+ else {
253
+ return { type, data: suggestedSchema.default ?? '' };
254
+ }
255
+ }
256
+ return;
257
+ };
258
+ }
259
+ function isNonNullableNumericType(type) {
260
+ return type === 'number' || type === 'integer';
261
+ }
262
+ function parseNumericObjectValues(dataElement, v) {
263
+ const newRecord = {};
264
+ for (const key in v) {
265
+ let keyMatchesNumericProperty;
266
+ const patternProperties = dataElement.setting.objectPatternProperties;
267
+ const properties = dataElement.setting.objectProperties;
268
+ const additionalProperties = dataElement.setting.objectAdditionalProperties;
269
+ if (properties) {
270
+ for (const propKey in properties) {
271
+ if (propKey === key) {
272
+ keyMatchesNumericProperty = isNonNullableNumericType(properties[propKey].type);
273
+ break;
274
+ }
275
+ }
276
+ }
277
+ if (keyMatchesNumericProperty === undefined && patternProperties) {
278
+ for (const patternKey in patternProperties) {
279
+ if (key.match(patternKey)) {
280
+ keyMatchesNumericProperty = isNonNullableNumericType(patternProperties[patternKey].type);
281
+ break;
282
+ }
283
+ }
284
+ }
285
+ if (keyMatchesNumericProperty === undefined && additionalProperties && typeof additionalProperties !== 'boolean') {
286
+ if (isNonNullableNumericType(additionalProperties.type)) {
287
+ keyMatchesNumericProperty = true;
288
+ }
289
+ }
290
+ newRecord[key] = keyMatchesNumericProperty ? Number(v[key]) : v[key];
291
+ }
292
+ return newRecord;
293
+ }
294
+ function getListDisplayValue(element) {
295
+ if (!element.value || !Array.isArray(element.value)) {
296
+ return [];
297
+ }
298
+ if (element.setting.arrayItemType === 'enum') {
299
+ let enumOptions = [];
300
+ if (element.setting.enum) {
301
+ enumOptions = ( element.setting.enum.map((setting, i) => {
302
+ return {
303
+ value: setting,
304
+ description: element.setting.enumDescriptions?.[i]
305
+ };
306
+ }));
307
+ }
308
+ return ( element.value.map((key) => {
309
+ return {
310
+ value: {
311
+ type: 'enum',
312
+ data: key,
313
+ options: enumOptions
314
+ }
315
+ };
316
+ }));
317
+ }
318
+ else {
319
+ return ( element.value.map((key) => {
320
+ return {
321
+ value: {
322
+ type: 'string',
323
+ data: key
324
+ }
325
+ };
326
+ }));
327
+ }
328
+ }
329
+ function getShowAddButtonList(dataElement, listDisplayValue) {
330
+ if (dataElement.setting.enum && dataElement.setting.uniqueItems) {
331
+ return dataElement.setting.enum.length - listDisplayValue.length > 0;
332
+ }
333
+ else {
334
+ return true;
335
+ }
336
+ }
337
+ function resolveSettingsTree(tocData, coreSettingsGroups, logService) {
338
+ const allSettings = getFlatSettings(coreSettingsGroups);
339
+ return {
340
+ tree: _resolveSettingsTree(tocData, allSettings, logService),
341
+ leftoverSettings: allSettings
342
+ };
343
+ }
344
+ function resolveConfiguredUntrustedSettings(groups, target, languageFilter, configurationService) {
345
+ const allSettings = getFlatSettings(groups);
346
+ return [...allSettings].filter(setting => setting.restricted && inspectSetting(setting.key, target, languageFilter, configurationService).isConfigured);
347
+ }
348
+ function compareNullableIntegers(a, b) {
349
+ const firstElem = a ?? Number.MAX_SAFE_INTEGER;
350
+ const secondElem = b ?? Number.MAX_SAFE_INTEGER;
351
+ return firstElem - secondElem;
352
+ }
353
+ async function createTocTreeForExtensionSettings(extensionService, groups) {
354
+ const extGroupTree = ( new Map());
355
+ const addEntryToTree = (extensionId, extensionName, childEntry) => {
356
+ if (!( extGroupTree.has(extensionId))) {
357
+ const rootEntry = {
358
+ id: extensionId,
359
+ label: extensionName,
360
+ children: []
361
+ };
362
+ extGroupTree.set(extensionId, rootEntry);
363
+ }
364
+ extGroupTree.get(extensionId).children.push(childEntry);
365
+ };
366
+ const processGroupEntry = async (group) => {
367
+ const flatSettings = ( group.sections.map(section => section.settings)).flat();
368
+ const extensionId = group.extensionInfo.id;
369
+ const extension = await extensionService.getExtension(extensionId);
370
+ const extensionName = extension?.displayName ?? extension?.name ?? extensionId;
371
+ const childEntry = {
372
+ id: group.id || group.title,
373
+ label: group.title,
374
+ order: group.order,
375
+ settings: flatSettings
376
+ };
377
+ addEntryToTree(extensionId, extensionName, childEntry);
378
+ };
379
+ const processPromises = ( groups.map(g => processGroupEntry(g)));
380
+ return Promise.all(processPromises).then(() => {
381
+ const extGroups = [];
382
+ for (const extensionRootEntry of ( extGroupTree.values())) {
383
+ for (const child of extensionRootEntry.children) {
384
+ child.settings?.sort((a, b) => {
385
+ return compareNullableIntegers(a.order, b.order);
386
+ });
387
+ }
388
+ if (extensionRootEntry.children.length === 1) {
389
+ extGroups.push({
390
+ id: extensionRootEntry.id,
391
+ label: extensionRootEntry.children[0].label,
392
+ settings: extensionRootEntry.children[0].settings
393
+ });
394
+ }
395
+ else {
396
+ extensionRootEntry.children.sort((a, b) => {
397
+ return compareNullableIntegers(a.order, b.order);
398
+ });
399
+ const ungroupedChild = extensionRootEntry.children.find(child => child.label === extensionRootEntry.label);
400
+ if (ungroupedChild && !ungroupedChild.children) {
401
+ const groupedChildren = extensionRootEntry.children.filter(child => child !== ungroupedChild);
402
+ extGroups.push({
403
+ id: extensionRootEntry.id,
404
+ label: extensionRootEntry.label,
405
+ settings: ungroupedChild.settings,
406
+ children: groupedChildren
407
+ });
408
+ }
409
+ else {
410
+ extGroups.push(extensionRootEntry);
411
+ }
412
+ }
413
+ }
414
+ extGroups.sort((a, b) => a.label.localeCompare(b.label));
415
+ return {
416
+ id: 'extensions',
417
+ label: ( localize('extensions', "Extensions")),
418
+ children: extGroups
419
+ };
420
+ });
421
+ }
422
+ function _resolveSettingsTree(tocData, allSettings, logService) {
423
+ let children;
424
+ if (tocData.children) {
425
+ children = ( tocData.children
426
+ .map(child => _resolveSettingsTree(child, allSettings, logService)))
427
+ .filter(child => child.children?.length || child.settings?.length);
428
+ }
429
+ let settings;
430
+ if (tocData.settings) {
431
+ settings = ( tocData.settings.map(pattern => getMatchingSettings(allSettings, pattern, logService))).flat();
432
+ }
433
+ if (!children && !settings) {
434
+ throw new Error(`TOC node has no child groups or settings: ${tocData.id}`);
435
+ }
436
+ return {
437
+ id: tocData.id,
438
+ label: tocData.label,
439
+ children,
440
+ settings
441
+ };
442
+ }
443
+ const knownDynamicSettingGroups = [
444
+ /^settingsSync\..*/,
445
+ /^sync\..*/,
446
+ /^workbench.fontAliasing$/,
447
+ ];
448
+ function getMatchingSettings(allSettings, pattern, logService) {
449
+ const result = [];
450
+ allSettings.forEach(s => {
451
+ if (settingMatches(s, pattern)) {
452
+ result.push(s);
453
+ allSettings.delete(s);
454
+ }
455
+ });
456
+ if (!result.length && !( knownDynamicSettingGroups.some(r => r.test(pattern)))) {
457
+ logService.warn(`Settings pattern "${pattern}" doesn't match any settings`);
458
+ }
459
+ return result.sort((a, b) => a.key.localeCompare(b.key));
460
+ }
461
+ const settingPatternCache = ( new Map());
462
+ function createSettingMatchRegExp(pattern) {
463
+ pattern = escapeRegExpCharacters(pattern)
464
+ .replace(/\\\*/g, '.*');
465
+ return ( new RegExp(`^${pattern}$`, 'i'));
466
+ }
467
+ function settingMatches(s, pattern) {
468
+ let regExp = settingPatternCache.get(pattern);
469
+ if (!regExp) {
470
+ regExp = createSettingMatchRegExp(pattern);
471
+ settingPatternCache.set(pattern, regExp);
472
+ }
473
+ return regExp.test(s.key);
474
+ }
475
+ function getFlatSettings(settingsGroups) {
476
+ const result = ( new Set());
477
+ for (const group of settingsGroups) {
478
+ for (const section of group.sections) {
479
+ for (const s of section.settings) {
480
+ if (!s.overrides || !s.overrides.length) {
481
+ result.add(s);
482
+ }
483
+ }
484
+ }
485
+ }
486
+ return result;
487
+ }
488
+ const SETTINGS_TEXT_TEMPLATE_ID = 'settings.text.template';
489
+ const SETTINGS_MULTILINE_TEXT_TEMPLATE_ID = 'settings.multilineText.template';
490
+ const SETTINGS_NUMBER_TEMPLATE_ID = 'settings.number.template';
491
+ const SETTINGS_ENUM_TEMPLATE_ID = 'settings.enum.template';
492
+ const SETTINGS_BOOL_TEMPLATE_ID = 'settings.bool.template';
493
+ const SETTINGS_ARRAY_TEMPLATE_ID = 'settings.array.template';
494
+ const SETTINGS_EXCLUDE_TEMPLATE_ID = 'settings.exclude.template';
495
+ const SETTINGS_INCLUDE_TEMPLATE_ID = 'settings.include.template';
496
+ const SETTINGS_OBJECT_TEMPLATE_ID = 'settings.object.template';
497
+ const SETTINGS_BOOL_OBJECT_TEMPLATE_ID = 'settings.boolObject.template';
498
+ const SETTINGS_COMPLEX_TEMPLATE_ID = 'settings.complex.template';
499
+ const SETTINGS_NEW_EXTENSIONS_TEMPLATE_ID = 'settings.newExtensions.template';
500
+ const SETTINGS_ELEMENT_TEMPLATE_ID = 'settings.group.template';
501
+ const SETTINGS_EXTENSION_TOGGLE_TEMPLATE_ID = 'settings.extensionToggle.template';
502
+ function removeChildrenFromTabOrder(node) {
503
+ const focusableElements = node.querySelectorAll(`
504
+ [tabindex="0"],
505
+ input:not([tabindex="-1"]),
506
+ select:not([tabindex="-1"]),
507
+ textarea:not([tabindex="-1"]),
508
+ a:not([tabindex="-1"]),
509
+ button:not([tabindex="-1"]),
510
+ area:not([tabindex="-1"])
511
+ `);
512
+ focusableElements.forEach(element => {
513
+ element.setAttribute(AbstractSettingRenderer.ELEMENT_FOCUSABLE_ATTR, 'true');
514
+ element.setAttribute('tabindex', '-1');
515
+ });
516
+ }
517
+ function addChildrenToTabOrder(node) {
518
+ const focusableElements = node.querySelectorAll(`[${AbstractSettingRenderer.ELEMENT_FOCUSABLE_ATTR}="true"]`);
519
+ focusableElements.forEach(element => {
520
+ element.removeAttribute(AbstractSettingRenderer.ELEMENT_FOCUSABLE_ATTR);
521
+ element.setAttribute('tabindex', '0');
522
+ });
523
+ }
524
+ let AbstractSettingRenderer = class AbstractSettingRenderer extends Disposable {
525
+ constructor(settingActions, disposableActionFactory, _themeService, _contextViewService, _openerService, _instantiationService, _commandService, _contextMenuService, _keybindingService, _configService, _extensionsService, _extensionsWorkbenchService, _productService, _telemetryService) {
526
+ super();
527
+ this.settingActions = settingActions;
528
+ this.disposableActionFactory = disposableActionFactory;
529
+ this._themeService = _themeService;
530
+ this._contextViewService = _contextViewService;
531
+ this._openerService = _openerService;
532
+ this._instantiationService = _instantiationService;
533
+ this._commandService = _commandService;
534
+ this._contextMenuService = _contextMenuService;
535
+ this._keybindingService = _keybindingService;
536
+ this._configService = _configService;
537
+ this._extensionsService = _extensionsService;
538
+ this._extensionsWorkbenchService = _extensionsWorkbenchService;
539
+ this._productService = _productService;
540
+ this._telemetryService = _telemetryService;
541
+ this._onDidClickOverrideElement = this._register(( new Emitter()));
542
+ this.onDidClickOverrideElement = this._onDidClickOverrideElement.event;
543
+ this._onDidChangeSetting = this._register(( new Emitter()));
544
+ this.onDidChangeSetting = this._onDidChangeSetting.event;
545
+ this._onDidOpenSettings = this._register(( new Emitter()));
546
+ this.onDidOpenSettings = this._onDidOpenSettings.event;
547
+ this._onDidClickSettingLink = this._register(( new Emitter()));
548
+ this.onDidClickSettingLink = this._onDidClickSettingLink.event;
549
+ this._onDidFocusSetting = this._register(( new Emitter()));
550
+ this.onDidFocusSetting = this._onDidFocusSetting.event;
551
+ this._onDidChangeIgnoredSettings = this._register(( new Emitter()));
552
+ this.onDidChangeIgnoredSettings = this._onDidChangeIgnoredSettings.event;
553
+ this._onDidChangeSettingHeight = this._register(( new Emitter()));
554
+ this.onDidChangeSettingHeight = this._onDidChangeSettingHeight.event;
555
+ this._onApplyFilter = this._register(( new Emitter()));
556
+ this.onApplyFilter = this._onApplyFilter.event;
557
+ this.markdownRenderer = this._register(_instantiationService.createInstance(MarkdownRenderer, {}));
558
+ this.ignoredSettings = getIgnoredSettings(getDefaultIgnoredSettings(), this._configService);
559
+ this._register(this._configService.onDidChangeConfiguration(e => {
560
+ this.ignoredSettings = getIgnoredSettings(getDefaultIgnoredSettings(), this._configService);
561
+ this._onDidChangeIgnoredSettings.fire();
562
+ }));
563
+ }
564
+ renderCommonTemplate(tree, _container, typeClass) {
565
+ _container.classList.add('setting-item');
566
+ _container.classList.add('setting-item-' + typeClass);
567
+ const toDispose = ( new DisposableStore());
568
+ const container = dom.append(_container, $(AbstractSettingRenderer.CONTENTS_SELECTOR));
569
+ container.classList.add('settings-row-inner-container');
570
+ const titleElement = dom.append(container, $('.setting-item-title'));
571
+ const labelCategoryContainer = dom.append(titleElement, $('.setting-item-cat-label-container'));
572
+ const categoryElement = dom.append(labelCategoryContainer, $('span.setting-item-category'));
573
+ const labelElementContainer = dom.append(labelCategoryContainer, $('span.setting-item-label'));
574
+ const labelElement = ( new SimpleIconLabel(labelElementContainer));
575
+ const indicatorsLabel = this._instantiationService.createInstance(SettingsTreeIndicatorsLabel, titleElement);
576
+ toDispose.add(indicatorsLabel);
577
+ const descriptionElement = dom.append(container, $('.setting-item-description'));
578
+ const modifiedIndicatorElement = dom.append(container, $('.setting-item-modified-indicator'));
579
+ modifiedIndicatorElement.title = ( localize('modified', "The setting has been configured in the current scope."));
580
+ const valueElement = dom.append(container, $('.setting-item-value'));
581
+ const controlElement = dom.append(valueElement, $('div.setting-item-control'));
582
+ const deprecationWarningElement = dom.append(container, $('.setting-item-deprecation-message'));
583
+ const toolbarContainer = dom.append(container, $('.setting-toolbar-container'));
584
+ const toolbar = this.renderSettingToolbar(toolbarContainer);
585
+ const template = {
586
+ toDispose,
587
+ elementDisposables: toDispose.add(( new DisposableStore())),
588
+ containerElement: container,
589
+ categoryElement,
590
+ labelElement,
591
+ descriptionElement,
592
+ controlElement,
593
+ deprecationWarningElement,
594
+ indicatorsLabel,
595
+ toolbar
596
+ };
597
+ toDispose.add(dom.addDisposableListener(controlElement, dom.EventType.MOUSE_DOWN, e => e.stopPropagation()));
598
+ toDispose.add(dom.addDisposableListener(titleElement, dom.EventType.MOUSE_ENTER, e => container.classList.add('mouseover')));
599
+ toDispose.add(dom.addDisposableListener(titleElement, dom.EventType.MOUSE_LEAVE, e => container.classList.remove('mouseover')));
600
+ return template;
601
+ }
602
+ addSettingElementFocusHandler(template) {
603
+ const focusTracker = dom.trackFocus(template.containerElement);
604
+ template.toDispose.add(focusTracker);
605
+ focusTracker.onDidBlur(() => {
606
+ if (template.containerElement.classList.contains('focused')) {
607
+ template.containerElement.classList.remove('focused');
608
+ }
609
+ });
610
+ focusTracker.onDidFocus(() => {
611
+ template.containerElement.classList.add('focused');
612
+ if (template.context) {
613
+ this._onDidFocusSetting.fire(template.context);
614
+ }
615
+ });
616
+ }
617
+ renderSettingToolbar(container) {
618
+ const toggleMenuKeybinding = this._keybindingService.lookupKeybinding(SETTINGS_EDITOR_COMMAND_SHOW_CONTEXT_MENU);
619
+ let toggleMenuTitle = ( localize('settingsContextMenuTitle', "More Actions... "));
620
+ if (toggleMenuKeybinding) {
621
+ toggleMenuTitle += ` (${toggleMenuKeybinding && toggleMenuKeybinding.getLabel()})`;
622
+ }
623
+ const toolbar = ( new ToolBar(container, this._contextMenuService, {
624
+ toggleMenuTitle,
625
+ renderDropdownAsChildElement: !isIOS,
626
+ moreIcon: settingsMoreActionIcon
627
+ }));
628
+ return toolbar;
629
+ }
630
+ renderSettingElement(node, index, template) {
631
+ const element = node.element;
632
+ template.context = element;
633
+ template.toolbar.context = element;
634
+ const actions = this.disposableActionFactory(element.setting);
635
+ actions.forEach(a => isDisposable(a) && template.elementDisposables.add(a));
636
+ template.toolbar.setActions([], [...this.settingActions, ...actions]);
637
+ const setting = element.setting;
638
+ template.containerElement.classList.toggle('is-configured', element.isConfigured);
639
+ template.containerElement.setAttribute(AbstractSettingRenderer.SETTING_KEY_ATTR, element.setting.key);
640
+ template.containerElement.setAttribute(AbstractSettingRenderer.SETTING_ID_ATTR, element.id);
641
+ const titleTooltip = setting.key + (element.isConfigured ? ' - Modified' : '');
642
+ template.categoryElement.textContent = element.displayCategory ? (element.displayCategory + ': ') : '';
643
+ template.categoryElement.title = titleTooltip;
644
+ template.labelElement.text = element.displayLabel;
645
+ template.labelElement.title = titleTooltip;
646
+ template.descriptionElement.innerText = '';
647
+ if (element.setting.descriptionIsMarkdown) {
648
+ const renderedDescription = this.renderSettingMarkdown(element, template.containerElement, element.description, template.elementDisposables);
649
+ template.descriptionElement.appendChild(renderedDescription);
650
+ }
651
+ else {
652
+ template.descriptionElement.innerText = element.description;
653
+ }
654
+ template.indicatorsLabel.updateScopeOverrides(element, this._onDidClickOverrideElement, this._onApplyFilter);
655
+ const onChange = (value) => this._onDidChangeSetting.fire({
656
+ key: element.setting.key,
657
+ value,
658
+ type: template.context.valueType,
659
+ manualReset: false,
660
+ scope: element.setting.scope
661
+ });
662
+ const deprecationText = element.setting.deprecationMessage || '';
663
+ if (deprecationText && element.setting.deprecationMessageIsMarkdown) {
664
+ template.deprecationWarningElement.innerText = '';
665
+ template.deprecationWarningElement.appendChild(this.renderSettingMarkdown(element, template.containerElement, element.setting.deprecationMessage, template.elementDisposables));
666
+ }
667
+ else {
668
+ template.deprecationWarningElement.innerText = deprecationText;
669
+ }
670
+ template.deprecationWarningElement.prepend($('.codicon.codicon-error'));
671
+ template.containerElement.classList.toggle('is-deprecated', !!deprecationText);
672
+ this.renderValue(element, template, onChange);
673
+ template.indicatorsLabel.updateWorkspaceTrust(element);
674
+ template.indicatorsLabel.updateSyncIgnored(element, this.ignoredSettings);
675
+ template.indicatorsLabel.updateDefaultOverrideIndicator(element);
676
+ template.elementDisposables.add(this.onDidChangeIgnoredSettings(() => {
677
+ template.indicatorsLabel.updateSyncIgnored(element, this.ignoredSettings);
678
+ }));
679
+ this.updateSettingTabbable(element, template);
680
+ template.elementDisposables.add(element.onDidChangeTabbable(() => {
681
+ this.updateSettingTabbable(element, template);
682
+ }));
683
+ }
684
+ updateSettingTabbable(element, template) {
685
+ if (element.tabbable) {
686
+ addChildrenToTabOrder(template.containerElement);
687
+ }
688
+ else {
689
+ removeChildrenFromTabOrder(template.containerElement);
690
+ }
691
+ }
692
+ renderSettingMarkdown(element, container, text, disposables) {
693
+ text = fixSettingLinks(text);
694
+ const renderedMarkdown = this.markdownRenderer.render({ value: text, isTrusted: true }, {
695
+ actionHandler: {
696
+ callback: (content) => {
697
+ if (content.startsWith('#')) {
698
+ const e = {
699
+ source: element,
700
+ targetKey: content.substring(1)
701
+ };
702
+ this._onDidClickSettingLink.fire(e);
703
+ }
704
+ else {
705
+ this._openerService.open(content, { allowCommands: true }).catch(onUnexpectedError);
706
+ }
707
+ },
708
+ disposables
709
+ },
710
+ asyncRenderCallback: () => {
711
+ const height = container.clientHeight;
712
+ if (height) {
713
+ this._onDidChangeSettingHeight.fire({ element, height });
714
+ }
715
+ },
716
+ });
717
+ disposables.add(renderedMarkdown);
718
+ renderedMarkdown.element.classList.add('setting-item-markdown');
719
+ cleanRenderedMarkdown(renderedMarkdown.element);
720
+ return renderedMarkdown.element;
721
+ }
722
+ disposeTemplate(template) {
723
+ template.toDispose.dispose();
724
+ }
725
+ disposeElement(_element, _index, template, _height) {
726
+ template.elementDisposables?.clear();
727
+ }
728
+ };
729
+ AbstractSettingRenderer.CONTROL_CLASS = 'setting-control-focus-target';
730
+ AbstractSettingRenderer.CONTROL_SELECTOR = '.' + AbstractSettingRenderer.CONTROL_CLASS;
731
+ AbstractSettingRenderer.CONTENTS_CLASS = 'setting-item-contents';
732
+ AbstractSettingRenderer.CONTENTS_SELECTOR = '.' + AbstractSettingRenderer.CONTENTS_CLASS;
733
+ AbstractSettingRenderer.ALL_ROWS_SELECTOR = '.monaco-list-row';
734
+ AbstractSettingRenderer.SETTING_KEY_ATTR = 'data-key';
735
+ AbstractSettingRenderer.SETTING_ID_ATTR = 'data-id';
736
+ AbstractSettingRenderer.ELEMENT_FOCUSABLE_ATTR = 'data-focusable';
737
+ AbstractSettingRenderer = ( __decorate([
738
+ ( __param(2, IThemeService)),
739
+ ( __param(3, IContextViewService)),
740
+ ( __param(4, IOpenerService)),
741
+ ( __param(5, IInstantiationService)),
742
+ ( __param(6, ICommandService)),
743
+ ( __param(7, IContextMenuService)),
744
+ ( __param(8, IKeybindingService)),
745
+ ( __param(9, IConfigurationService)),
746
+ ( __param(10, IExtensionService)),
747
+ ( __param(11, IExtensionsWorkbenchService)),
748
+ ( __param(12, IProductService)),
749
+ ( __param(13, ITelemetryService))
750
+ ], AbstractSettingRenderer));
751
+ class SettingGroupRenderer {
752
+ constructor() {
753
+ this.templateId = SETTINGS_ELEMENT_TEMPLATE_ID;
754
+ }
755
+ renderTemplate(container) {
756
+ container.classList.add('group-title');
757
+ const template = {
758
+ parent: container,
759
+ toDispose: ( new DisposableStore())
760
+ };
761
+ return template;
762
+ }
763
+ renderElement(element, index, templateData) {
764
+ templateData.parent.innerText = '';
765
+ const labelElement = dom.append(templateData.parent, $('div.settings-group-title-label.settings-row-inner-container'));
766
+ labelElement.classList.add(`settings-group-level-${element.element.level}`);
767
+ labelElement.textContent = element.element.label;
768
+ if (element.element.isFirstGroup) {
769
+ labelElement.classList.add('settings-group-first');
770
+ }
771
+ }
772
+ disposeTemplate(templateData) {
773
+ }
774
+ }
775
+ let SettingNewExtensionsRenderer = class SettingNewExtensionsRenderer {
776
+ constructor(_commandService) {
777
+ this._commandService = _commandService;
778
+ this.templateId = SETTINGS_NEW_EXTENSIONS_TEMPLATE_ID;
779
+ }
780
+ renderTemplate(container) {
781
+ const toDispose = ( new DisposableStore());
782
+ container.classList.add('setting-item-new-extensions');
783
+ const button = ( new Button(container, { title: true, ...defaultButtonStyles }));
784
+ toDispose.add(button);
785
+ toDispose.add(button.onDidClick(() => {
786
+ if (template.context) {
787
+ this._commandService.executeCommand('workbench.extensions.action.showExtensionsWithIds', template.context.extensionIds);
788
+ }
789
+ }));
790
+ button.label = ( localize('newExtensionsButtonLabel', "Show matching extensions"));
791
+ button.element.classList.add('settings-new-extensions-button');
792
+ const template = {
793
+ button,
794
+ toDispose
795
+ };
796
+ return template;
797
+ }
798
+ renderElement(element, index, templateData) {
799
+ templateData.context = element.element;
800
+ }
801
+ disposeTemplate(template) {
802
+ dispose(template.toDispose);
803
+ }
804
+ };
805
+ SettingNewExtensionsRenderer = ( __decorate([
806
+ ( __param(0, ICommandService))
807
+ ], SettingNewExtensionsRenderer));
808
+ class SettingComplexRenderer extends AbstractSettingRenderer {
809
+ constructor() {
810
+ super(...arguments);
811
+ this.templateId = SETTINGS_COMPLEX_TEMPLATE_ID;
812
+ }
813
+ renderTemplate(container) {
814
+ const common = this.renderCommonTemplate(null, container, 'complex');
815
+ const openSettingsButton = dom.append(common.controlElement, $('a.edit-in-settings-button'));
816
+ openSettingsButton.classList.add(AbstractSettingRenderer.CONTROL_CLASS);
817
+ openSettingsButton.role = 'button';
818
+ const validationErrorMessageElement = $('.setting-item-validation-message');
819
+ common.containerElement.appendChild(validationErrorMessageElement);
820
+ const template = {
821
+ ...common,
822
+ button: openSettingsButton,
823
+ validationErrorMessageElement
824
+ };
825
+ this.addSettingElementFocusHandler(template);
826
+ return template;
827
+ }
828
+ renderElement(element, index, templateData) {
829
+ super.renderSettingElement(element, index, templateData);
830
+ }
831
+ renderValue(dataElement, template, onChange) {
832
+ const plainKey = getLanguageTagSettingPlainKey(dataElement.setting.key);
833
+ const editLanguageSettingLabel = ( localize('editLanguageSettingLabel', "Edit settings for {0}", plainKey));
834
+ const isLanguageTagSetting = dataElement.setting.isLanguageTagSetting;
835
+ template.button.textContent = isLanguageTagSetting
836
+ ? editLanguageSettingLabel
837
+ : SettingComplexRenderer.EDIT_IN_JSON_LABEL;
838
+ const onClickOrKeydown = (e) => {
839
+ if (isLanguageTagSetting) {
840
+ this._onApplyFilter.fire(`@${LANGUAGE_SETTING_TAG}${plainKey}`);
841
+ }
842
+ else {
843
+ this._onDidOpenSettings.fire(dataElement.setting.key);
844
+ }
845
+ e.preventDefault();
846
+ e.stopPropagation();
847
+ };
848
+ template.elementDisposables.add(dom.addDisposableListener(template.button, dom.EventType.CLICK, (e) => {
849
+ onClickOrKeydown(e);
850
+ }));
851
+ template.elementDisposables.add(dom.addDisposableListener(template.button, dom.EventType.KEY_DOWN, (e) => {
852
+ const ev = ( new StandardKeyboardEvent(e));
853
+ if (ev.equals(10 ) || ev.equals(3 )) {
854
+ onClickOrKeydown(e);
855
+ }
856
+ }));
857
+ this.renderValidations(dataElement, template);
858
+ if (isLanguageTagSetting) {
859
+ template.button.setAttribute('aria-label', editLanguageSettingLabel);
860
+ }
861
+ else {
862
+ template.button.setAttribute('aria-label', `${SettingComplexRenderer.EDIT_IN_JSON_LABEL}: ${dataElement.setting.key}`);
863
+ }
864
+ }
865
+ renderValidations(dataElement, template) {
866
+ const errMsg = dataElement.isConfigured && getInvalidTypeError(dataElement.value, dataElement.setting.type);
867
+ if (errMsg) {
868
+ template.containerElement.classList.add('invalid-input');
869
+ template.validationErrorMessageElement.innerText = errMsg;
870
+ return;
871
+ }
872
+ template.containerElement.classList.remove('invalid-input');
873
+ }
874
+ }
875
+ SettingComplexRenderer.EDIT_IN_JSON_LABEL = ( localize('editInSettingsJson', "Edit in settings.json"));
876
+ class SettingArrayRenderer extends AbstractSettingRenderer {
877
+ constructor() {
878
+ super(...arguments);
879
+ this.templateId = SETTINGS_ARRAY_TEMPLATE_ID;
880
+ }
881
+ renderTemplate(container) {
882
+ const common = this.renderCommonTemplate(null, container, 'list');
883
+ const descriptionElement = common.containerElement.querySelector('.setting-item-description');
884
+ const validationErrorMessageElement = $('.setting-item-validation-message');
885
+ descriptionElement.after(validationErrorMessageElement);
886
+ const listWidget = this._instantiationService.createInstance(ListSettingWidget, common.controlElement);
887
+ listWidget.domNode.classList.add(AbstractSettingRenderer.CONTROL_CLASS);
888
+ common.toDispose.add(listWidget);
889
+ const template = {
890
+ ...common,
891
+ listWidget,
892
+ validationErrorMessageElement
893
+ };
894
+ this.addSettingElementFocusHandler(template);
895
+ common.toDispose.add(listWidget.onDidChangeList(e => {
896
+ const newList = this.computeNewList(template, e);
897
+ template.onChange?.(newList);
898
+ }));
899
+ return template;
900
+ }
901
+ computeNewList(template, e) {
902
+ if (template.context) {
903
+ let newValue = [];
904
+ if (Array.isArray(template.context.scopeValue)) {
905
+ newValue = [...template.context.scopeValue];
906
+ }
907
+ else if (Array.isArray(template.context.value)) {
908
+ newValue = [...template.context.value];
909
+ }
910
+ if (e.sourceIndex !== undefined) {
911
+ const sourceIndex = e.sourceIndex;
912
+ const targetIndex = e.targetIndex;
913
+ const splicedElem = newValue.splice(sourceIndex, 1)[0];
914
+ newValue.splice(targetIndex, 0, splicedElem);
915
+ }
916
+ else if (e.targetIndex !== undefined) {
917
+ const itemValueData = e.item?.value.data.toString() ?? '';
918
+ if (!e.item?.value.data && e.originalItem.value.data && e.targetIndex > -1) {
919
+ newValue.splice(e.targetIndex, 1);
920
+ }
921
+ else if (e.item?.value.data && e.originalItem.value.data) {
922
+ if (e.targetIndex > -1) {
923
+ newValue[e.targetIndex] = itemValueData;
924
+ }
925
+ else {
926
+ newValue.push(itemValueData);
927
+ }
928
+ }
929
+ else if (e.item?.value.data && !e.originalItem.value.data && e.targetIndex >= newValue.length) {
930
+ newValue.push(itemValueData);
931
+ }
932
+ }
933
+ if (template.context.defaultValue &&
934
+ Array.isArray(template.context.defaultValue) &&
935
+ template.context.defaultValue.length === newValue.length &&
936
+ template.context.defaultValue.join() === newValue.join()) {
937
+ return undefined;
938
+ }
939
+ return newValue;
940
+ }
941
+ return undefined;
942
+ }
943
+ renderElement(element, index, templateData) {
944
+ super.renderSettingElement(element, index, templateData);
945
+ }
946
+ renderValue(dataElement, template, onChange) {
947
+ const value = getListDisplayValue(dataElement);
948
+ const keySuggester = dataElement.setting.enum ? createArraySuggester(dataElement) : undefined;
949
+ template.listWidget.setValue(value, {
950
+ showAddButton: getShowAddButtonList(dataElement, value),
951
+ keySuggester
952
+ });
953
+ template.context = dataElement;
954
+ template.elementDisposables.add(toDisposable(() => {
955
+ template.listWidget.cancelEdit();
956
+ }));
957
+ template.onChange = (v) => {
958
+ if (v && !renderArrayValidations(dataElement, template, v, false)) {
959
+ const itemType = dataElement.setting.arrayItemType;
960
+ const arrToSave = isNonNullableNumericType(itemType) ? ( v.map(a => +a)) : v;
961
+ onChange(arrToSave);
962
+ }
963
+ else {
964
+ onChange(v);
965
+ }
966
+ };
967
+ renderArrayValidations(dataElement, template, ( value.map(v => ( v.value.data.toString()))), true);
968
+ }
969
+ }
970
+ class AbstractSettingObjectRenderer extends AbstractSettingRenderer {
971
+ renderTemplateWithWidget(common, widget) {
972
+ widget.domNode.classList.add(AbstractSettingRenderer.CONTROL_CLASS);
973
+ common.toDispose.add(widget);
974
+ const descriptionElement = common.containerElement.querySelector('.setting-item-description');
975
+ const validationErrorMessageElement = $('.setting-item-validation-message');
976
+ descriptionElement.after(validationErrorMessageElement);
977
+ const template = {
978
+ ...common,
979
+ validationErrorMessageElement
980
+ };
981
+ if (widget instanceof ObjectSettingCheckboxWidget) {
982
+ template.objectCheckboxWidget = widget;
983
+ }
984
+ else {
985
+ template.objectDropdownWidget = widget;
986
+ }
987
+ this.addSettingElementFocusHandler(template);
988
+ common.toDispose.add(widget.onDidChangeList(e => {
989
+ this.onDidChangeObject(template, e);
990
+ }));
991
+ return template;
992
+ }
993
+ onDidChangeObject(template, e) {
994
+ const widget = (template.objectCheckboxWidget ?? template.objectDropdownWidget);
995
+ if (template.context) {
996
+ const defaultValue = typeof template.context.defaultValue === 'object'
997
+ ? template.context.defaultValue ?? {}
998
+ : {};
999
+ const scopeValue = typeof template.context.scopeValue === 'object'
1000
+ ? template.context.scopeValue ?? {}
1001
+ : {};
1002
+ const newValue = {};
1003
+ const newItems = [];
1004
+ widget.items.forEach((item, idx) => {
1005
+ if (isDefined(e.item) && e.targetIndex === idx) {
1006
+ newValue[e.item.key.data] = e.item.value.data;
1007
+ newItems.push(e.item);
1008
+ }
1009
+ else if (isUndefinedOrNull(e.item) || e.item.key.data !== item.key.data) {
1010
+ newValue[item.key.data] = item.value.data;
1011
+ newItems.push(item);
1012
+ }
1013
+ });
1014
+ if (isUndefinedOrNull(e.item)) {
1015
+ delete newValue[e.originalItem.key.data];
1016
+ const itemToDelete = newItems.findIndex(item => item.key.data === e.originalItem.key.data);
1017
+ const defaultItemValue = defaultValue[e.originalItem.key.data];
1018
+ if (isUndefinedOrNull(defaultValue[e.originalItem.key.data]) && itemToDelete > -1) {
1019
+ newItems.splice(itemToDelete, 1);
1020
+ }
1021
+ else if (itemToDelete > -1) {
1022
+ newItems[itemToDelete].value.data = defaultItemValue;
1023
+ }
1024
+ }
1025
+ else if (widget.isItemNew(e.originalItem) && e.item.key.data !== '') {
1026
+ newValue[e.item.key.data] = e.item.value.data;
1027
+ newItems.push(e.item);
1028
+ }
1029
+ Object.entries(newValue).forEach(([key, value]) => {
1030
+ if (scopeValue[key] !== value && defaultValue[key] === value) {
1031
+ delete newValue[key];
1032
+ }
1033
+ });
1034
+ const newObject = ( Object.keys(newValue)).length === 0 ? undefined : newValue;
1035
+ if (template.objectCheckboxWidget) {
1036
+ template.objectCheckboxWidget.setValue(newItems);
1037
+ }
1038
+ else {
1039
+ template.objectDropdownWidget.setValue(newItems);
1040
+ }
1041
+ template.onChange?.(newObject);
1042
+ }
1043
+ }
1044
+ renderElement(element, index, templateData) {
1045
+ super.renderSettingElement(element, index, templateData);
1046
+ }
1047
+ }
1048
+ class SettingObjectRenderer extends AbstractSettingObjectRenderer {
1049
+ constructor() {
1050
+ super(...arguments);
1051
+ this.templateId = SETTINGS_OBJECT_TEMPLATE_ID;
1052
+ }
1053
+ renderTemplate(container) {
1054
+ const common = this.renderCommonTemplate(null, container, 'list');
1055
+ const widget = this._instantiationService.createInstance(ObjectSettingDropdownWidget, common.controlElement);
1056
+ return this.renderTemplateWithWidget(common, widget);
1057
+ }
1058
+ renderValue(dataElement, template, onChange) {
1059
+ const items = getObjectDisplayValue(dataElement);
1060
+ const { key, objectProperties, objectPatternProperties, objectAdditionalProperties } = dataElement.setting;
1061
+ template.objectDropdownWidget.setValue(items, {
1062
+ settingKey: key,
1063
+ showAddButton: objectAdditionalProperties === false
1064
+ ? (!areAllPropertiesDefined(( Object.keys(objectProperties ?? {})), items) ||
1065
+ isDefined(objectPatternProperties))
1066
+ : true,
1067
+ keySuggester: createObjectKeySuggester(dataElement),
1068
+ valueSuggester: createObjectValueSuggester(dataElement)
1069
+ });
1070
+ template.context = dataElement;
1071
+ template.elementDisposables.add(toDisposable(() => {
1072
+ template.objectDropdownWidget.cancelEdit();
1073
+ }));
1074
+ template.onChange = (v) => {
1075
+ if (v && !renderArrayValidations(dataElement, template, v, false)) {
1076
+ const parsedRecord = parseNumericObjectValues(dataElement, v);
1077
+ onChange(parsedRecord);
1078
+ }
1079
+ else {
1080
+ onChange(v);
1081
+ }
1082
+ };
1083
+ renderArrayValidations(dataElement, template, dataElement.value, true);
1084
+ }
1085
+ }
1086
+ class SettingBoolObjectRenderer extends AbstractSettingObjectRenderer {
1087
+ constructor() {
1088
+ super(...arguments);
1089
+ this.templateId = SETTINGS_BOOL_OBJECT_TEMPLATE_ID;
1090
+ }
1091
+ renderTemplate(container) {
1092
+ const common = this.renderCommonTemplate(null, container, 'list');
1093
+ const widget = this._instantiationService.createInstance(ObjectSettingCheckboxWidget, common.controlElement);
1094
+ return this.renderTemplateWithWidget(common, widget);
1095
+ }
1096
+ onDidChangeObject(template, e) {
1097
+ if (template.context) {
1098
+ super.onDidChangeObject(template, e);
1099
+ this._onDidFocusSetting.fire(template.context);
1100
+ }
1101
+ }
1102
+ renderValue(dataElement, template, onChange) {
1103
+ const items = getObjectDisplayValue(dataElement);
1104
+ const { key } = dataElement.setting;
1105
+ template.objectCheckboxWidget.setValue(items, {
1106
+ settingKey: key
1107
+ });
1108
+ template.context = dataElement;
1109
+ template.onChange = (v) => {
1110
+ onChange(v);
1111
+ };
1112
+ }
1113
+ }
1114
+ class SettingIncludeExcludeRenderer extends AbstractSettingRenderer {
1115
+ renderTemplate(container) {
1116
+ const common = this.renderCommonTemplate(null, container, 'list');
1117
+ const includeExcludeWidget = this._instantiationService.createInstance(this.isExclude() ? ExcludeSettingWidget : IncludeSettingWidget, common.controlElement);
1118
+ includeExcludeWidget.domNode.classList.add(AbstractSettingRenderer.CONTROL_CLASS);
1119
+ common.toDispose.add(includeExcludeWidget);
1120
+ const template = {
1121
+ ...common,
1122
+ includeExcludeWidget
1123
+ };
1124
+ this.addSettingElementFocusHandler(template);
1125
+ common.toDispose.add(includeExcludeWidget.onDidChangeList(e => this.onDidChangeIncludeExclude(template, e)));
1126
+ return template;
1127
+ }
1128
+ onDidChangeIncludeExclude(template, e) {
1129
+ if (template.context) {
1130
+ const newValue = { ...template.context.scopeValue };
1131
+ if (( e.originalItem.value.data.toString()) in template.context.defaultValue) {
1132
+ newValue[( e.originalItem.value.data.toString())] = false;
1133
+ }
1134
+ else {
1135
+ delete newValue[( e.originalItem.value.data.toString())];
1136
+ }
1137
+ if (e.item?.value) {
1138
+ if (( e.item.value.data.toString()) in template.context.defaultValue && !e.item.sibling) {
1139
+ delete newValue[( e.item.value.data.toString())];
1140
+ }
1141
+ else {
1142
+ newValue[( e.item.value.data.toString())] = e.item.sibling ? { when: e.item.sibling } : true;
1143
+ }
1144
+ }
1145
+ function sortKeys(obj) {
1146
+ const sortedKeys = ( Object.keys(obj))
1147
+ .sort((a, b) => a.localeCompare(b));
1148
+ const retVal = {};
1149
+ for (const key of sortedKeys) {
1150
+ retVal[key] = obj[key];
1151
+ }
1152
+ return retVal;
1153
+ }
1154
+ this._onDidChangeSetting.fire({
1155
+ key: template.context.setting.key,
1156
+ value: ( Object.keys(newValue)).length === 0 ? undefined : sortKeys(newValue),
1157
+ type: template.context.valueType,
1158
+ manualReset: false,
1159
+ scope: template.context.setting.scope
1160
+ });
1161
+ }
1162
+ }
1163
+ renderElement(element, index, templateData) {
1164
+ super.renderSettingElement(element, index, templateData);
1165
+ }
1166
+ renderValue(dataElement, template, onChange) {
1167
+ const value = getIncludeExcludeDisplayValue(dataElement);
1168
+ template.includeExcludeWidget.setValue(value);
1169
+ template.context = dataElement;
1170
+ template.elementDisposables.add(toDisposable(() => {
1171
+ template.includeExcludeWidget.cancelEdit();
1172
+ }));
1173
+ }
1174
+ }
1175
+ class SettingExcludeRenderer extends SettingIncludeExcludeRenderer {
1176
+ constructor() {
1177
+ super(...arguments);
1178
+ this.templateId = SETTINGS_EXCLUDE_TEMPLATE_ID;
1179
+ }
1180
+ isExclude() {
1181
+ return true;
1182
+ }
1183
+ }
1184
+ class SettingIncludeRenderer extends SettingIncludeExcludeRenderer {
1185
+ constructor() {
1186
+ super(...arguments);
1187
+ this.templateId = SETTINGS_INCLUDE_TEMPLATE_ID;
1188
+ }
1189
+ isExclude() {
1190
+ return false;
1191
+ }
1192
+ }
1193
+ const settingsInputBoxStyles = getInputBoxStyle({
1194
+ inputBackground: settingsTextInputBackground,
1195
+ inputForeground: settingsTextInputForeground,
1196
+ inputBorder: settingsTextInputBorder
1197
+ });
1198
+ class AbstractSettingTextRenderer extends AbstractSettingRenderer {
1199
+ constructor() {
1200
+ super(...arguments);
1201
+ this.MULTILINE_MAX_HEIGHT = 150;
1202
+ }
1203
+ renderTemplate(_container, useMultiline) {
1204
+ const common = this.renderCommonTemplate(null, _container, 'text');
1205
+ const validationErrorMessageElement = dom.append(common.containerElement, $('.setting-item-validation-message'));
1206
+ const inputBoxOptions = {
1207
+ flexibleHeight: useMultiline,
1208
+ flexibleWidth: false,
1209
+ flexibleMaxHeight: this.MULTILINE_MAX_HEIGHT,
1210
+ inputBoxStyles: settingsInputBoxStyles
1211
+ };
1212
+ const inputBox = ( new InputBox(common.controlElement, this._contextViewService, inputBoxOptions));
1213
+ common.toDispose.add(inputBox);
1214
+ common.toDispose.add(inputBox.onDidChange(e => {
1215
+ template.onChange?.(e);
1216
+ }));
1217
+ common.toDispose.add(inputBox);
1218
+ inputBox.inputElement.classList.add(AbstractSettingRenderer.CONTROL_CLASS);
1219
+ inputBox.inputElement.tabIndex = 0;
1220
+ const template = {
1221
+ ...common,
1222
+ inputBox,
1223
+ validationErrorMessageElement
1224
+ };
1225
+ this.addSettingElementFocusHandler(template);
1226
+ return template;
1227
+ }
1228
+ renderElement(element, index, templateData) {
1229
+ super.renderSettingElement(element, index, templateData);
1230
+ }
1231
+ renderValue(dataElement, template, onChange) {
1232
+ template.onChange = undefined;
1233
+ template.inputBox.value = dataElement.value;
1234
+ template.inputBox.setAriaLabel(dataElement.setting.key);
1235
+ template.onChange = value => {
1236
+ if (!renderValidations(dataElement, template, false)) {
1237
+ onChange(value);
1238
+ }
1239
+ };
1240
+ renderValidations(dataElement, template, true);
1241
+ }
1242
+ }
1243
+ class SettingTextRenderer extends AbstractSettingTextRenderer {
1244
+ constructor() {
1245
+ super(...arguments);
1246
+ this.templateId = SETTINGS_TEXT_TEMPLATE_ID;
1247
+ }
1248
+ renderTemplate(_container) {
1249
+ const template = super.renderTemplate(_container, false);
1250
+ template.toDispose.add(dom.addStandardDisposableListener(template.inputBox.inputElement, dom.EventType.KEY_DOWN, e => {
1251
+ if (e.equals(16 ) || e.equals(18 )) {
1252
+ e.preventDefault();
1253
+ }
1254
+ }));
1255
+ return template;
1256
+ }
1257
+ }
1258
+ class SettingMultilineTextRenderer extends AbstractSettingTextRenderer {
1259
+ constructor() {
1260
+ super(...arguments);
1261
+ this.templateId = SETTINGS_MULTILINE_TEXT_TEMPLATE_ID;
1262
+ }
1263
+ renderTemplate(_container) {
1264
+ return super.renderTemplate(_container, true);
1265
+ }
1266
+ renderValue(dataElement, template, onChange) {
1267
+ const onChangeOverride = (value) => {
1268
+ dataElement.value = value;
1269
+ onChange(value);
1270
+ };
1271
+ super.renderValue(dataElement, template, onChangeOverride);
1272
+ template.elementDisposables.add(template.inputBox.onDidHeightChange(e => {
1273
+ const height = template.containerElement.clientHeight;
1274
+ if (height) {
1275
+ this._onDidChangeSettingHeight.fire({
1276
+ element: dataElement,
1277
+ height: template.containerElement.clientHeight
1278
+ });
1279
+ }
1280
+ }));
1281
+ template.inputBox.layout();
1282
+ }
1283
+ }
1284
+ class SettingEnumRenderer extends AbstractSettingRenderer {
1285
+ constructor() {
1286
+ super(...arguments);
1287
+ this.templateId = SETTINGS_ENUM_TEMPLATE_ID;
1288
+ }
1289
+ renderTemplate(container) {
1290
+ const common = this.renderCommonTemplate(null, container, 'enum');
1291
+ const styles = getSelectBoxStyles({
1292
+ selectBackground: settingsSelectBackground,
1293
+ selectForeground: settingsSelectForeground,
1294
+ selectBorder: settingsSelectBorder,
1295
+ selectListBorder: settingsSelectListBorder
1296
+ });
1297
+ const selectBox = ( new SelectBox([], 0, this._contextViewService, styles, {
1298
+ useCustomDrawn: !(isIOS && BrowserFeatures.pointerEvents)
1299
+ }));
1300
+ common.toDispose.add(selectBox);
1301
+ selectBox.render(common.controlElement);
1302
+ const selectElement = common.controlElement.querySelector('select');
1303
+ if (selectElement) {
1304
+ selectElement.classList.add(AbstractSettingRenderer.CONTROL_CLASS);
1305
+ selectElement.tabIndex = 0;
1306
+ }
1307
+ common.toDispose.add(selectBox.onDidSelect(e => {
1308
+ template.onChange?.(e.index);
1309
+ }));
1310
+ const enumDescriptionElement = common.containerElement.insertBefore($('.setting-item-enumDescription'), common.descriptionElement.nextSibling);
1311
+ const template = {
1312
+ ...common,
1313
+ selectBox,
1314
+ selectElement,
1315
+ enumDescriptionElement
1316
+ };
1317
+ this.addSettingElementFocusHandler(template);
1318
+ return template;
1319
+ }
1320
+ renderElement(element, index, templateData) {
1321
+ super.renderSettingElement(element, index, templateData);
1322
+ }
1323
+ renderValue(dataElement, template, onChange) {
1324
+ const enumItemLabels = dataElement.setting.enumItemLabels ? [...dataElement.setting.enumItemLabels] : [];
1325
+ const enumDescriptions = dataElement.setting.enumDescriptions ? [...dataElement.setting.enumDescriptions] : [];
1326
+ const settingEnum = [...dataElement.setting.enum];
1327
+ const enumDescriptionsAreMarkdown = dataElement.setting.enumDescriptionsAreMarkdown;
1328
+ const disposables = ( new DisposableStore());
1329
+ template.toDispose.add(disposables);
1330
+ let createdDefault = false;
1331
+ if (!settingEnum.includes(dataElement.defaultValue)) {
1332
+ settingEnum.unshift(dataElement.defaultValue);
1333
+ enumDescriptions.unshift('');
1334
+ enumItemLabels.unshift('');
1335
+ createdDefault = true;
1336
+ }
1337
+ const stringifiedDefaultValue = escapeInvisibleChars(String(dataElement.defaultValue));
1338
+ const displayOptions = ( ( ( settingEnum
1339
+ .map(String))
1340
+ .map(escapeInvisibleChars))
1341
+ .map((data, index) => {
1342
+ const description = (enumDescriptions[index] && (enumDescriptionsAreMarkdown ? fixSettingLinks(enumDescriptions[index], false) : enumDescriptions[index]));
1343
+ return {
1344
+ text: enumItemLabels[index] ? enumItemLabels[index] : data,
1345
+ detail: enumItemLabels[index] ? data : '',
1346
+ description,
1347
+ descriptionIsMarkdown: enumDescriptionsAreMarkdown,
1348
+ descriptionMarkdownActionHandler: {
1349
+ callback: (content) => {
1350
+ this._openerService.open(content).catch(onUnexpectedError);
1351
+ },
1352
+ disposables: disposables
1353
+ },
1354
+ decoratorRight: (((data === stringifiedDefaultValue) || (createdDefault && index === 0)) ? ( localize('settings.Default', "default")) : '')
1355
+ };
1356
+ }));
1357
+ template.selectBox.setOptions(displayOptions);
1358
+ template.selectBox.setAriaLabel(dataElement.setting.key);
1359
+ let idx = settingEnum.indexOf(dataElement.value);
1360
+ if (idx === -1) {
1361
+ idx = 0;
1362
+ }
1363
+ template.onChange = undefined;
1364
+ template.selectBox.select(idx);
1365
+ template.onChange = (idx) => {
1366
+ if (createdDefault && idx === 0) {
1367
+ onChange(dataElement.defaultValue);
1368
+ }
1369
+ else {
1370
+ onChange(settingEnum[idx]);
1371
+ }
1372
+ };
1373
+ template.enumDescriptionElement.innerText = '';
1374
+ }
1375
+ }
1376
+ const settingsNumberInputBoxStyles = getInputBoxStyle({
1377
+ inputBackground: settingsNumberInputBackground,
1378
+ inputForeground: settingsNumberInputForeground,
1379
+ inputBorder: settingsNumberInputBorder
1380
+ });
1381
+ class SettingNumberRenderer extends AbstractSettingRenderer {
1382
+ constructor() {
1383
+ super(...arguments);
1384
+ this.templateId = SETTINGS_NUMBER_TEMPLATE_ID;
1385
+ }
1386
+ renderTemplate(_container) {
1387
+ const common = super.renderCommonTemplate(null, _container, 'number');
1388
+ const validationErrorMessageElement = dom.append(common.containerElement, $('.setting-item-validation-message'));
1389
+ const inputBox = ( new InputBox(
1390
+ common.controlElement,
1391
+ this._contextViewService,
1392
+ { type: 'number', inputBoxStyles: settingsNumberInputBoxStyles }
1393
+ ));
1394
+ common.toDispose.add(inputBox);
1395
+ common.toDispose.add(inputBox.onDidChange(e => {
1396
+ template.onChange?.(e);
1397
+ }));
1398
+ common.toDispose.add(inputBox);
1399
+ inputBox.inputElement.classList.add(AbstractSettingRenderer.CONTROL_CLASS);
1400
+ inputBox.inputElement.tabIndex = 0;
1401
+ const template = {
1402
+ ...common,
1403
+ inputBox,
1404
+ validationErrorMessageElement
1405
+ };
1406
+ this.addSettingElementFocusHandler(template);
1407
+ return template;
1408
+ }
1409
+ renderElement(element, index, templateData) {
1410
+ super.renderSettingElement(element, index, templateData);
1411
+ }
1412
+ renderValue(dataElement, template, onChange) {
1413
+ const numParseFn = (dataElement.valueType === 'integer' || dataElement.valueType === 'nullable-integer')
1414
+ ? parseInt : parseFloat;
1415
+ const nullNumParseFn = (dataElement.valueType === 'nullable-integer' || dataElement.valueType === 'nullable-number')
1416
+ ? ((v) => v === '' ? null : numParseFn(v)) : numParseFn;
1417
+ template.onChange = undefined;
1418
+ template.inputBox.value = typeof dataElement.value === 'number' ?
1419
+ ( dataElement.value.toString()) : '';
1420
+ template.inputBox.step = dataElement.valueType.includes('integer') ? '1' : 'any';
1421
+ template.inputBox.setAriaLabel(dataElement.setting.key);
1422
+ template.onChange = value => {
1423
+ if (!renderValidations(dataElement, template, false)) {
1424
+ onChange(nullNumParseFn(value));
1425
+ }
1426
+ };
1427
+ renderValidations(dataElement, template, true);
1428
+ }
1429
+ }
1430
+ class SettingBoolRenderer extends AbstractSettingRenderer {
1431
+ constructor() {
1432
+ super(...arguments);
1433
+ this.templateId = SETTINGS_BOOL_TEMPLATE_ID;
1434
+ }
1435
+ renderTemplate(_container) {
1436
+ _container.classList.add('setting-item');
1437
+ _container.classList.add('setting-item-bool');
1438
+ const container = dom.append(_container, $(AbstractSettingRenderer.CONTENTS_SELECTOR));
1439
+ container.classList.add('settings-row-inner-container');
1440
+ const titleElement = dom.append(container, $('.setting-item-title'));
1441
+ const categoryElement = dom.append(titleElement, $('span.setting-item-category'));
1442
+ const labelElementContainer = dom.append(titleElement, $('span.setting-item-label'));
1443
+ const labelElement = ( new SimpleIconLabel(labelElementContainer));
1444
+ const indicatorsLabel = this._instantiationService.createInstance(SettingsTreeIndicatorsLabel, titleElement);
1445
+ const descriptionAndValueElement = dom.append(container, $('.setting-item-value-description'));
1446
+ const controlElement = dom.append(descriptionAndValueElement, $('.setting-item-bool-control'));
1447
+ const descriptionElement = dom.append(descriptionAndValueElement, $('.setting-item-description'));
1448
+ const modifiedIndicatorElement = dom.append(container, $('.setting-item-modified-indicator'));
1449
+ modifiedIndicatorElement.title = ( localize('modified', "The setting has been configured in the current scope."));
1450
+ const deprecationWarningElement = dom.append(container, $('.setting-item-deprecation-message'));
1451
+ const toDispose = ( new DisposableStore());
1452
+ const checkbox = ( new Toggle(
1453
+ { icon: Codicon.check, actionClassName: 'setting-value-checkbox', isChecked: true, title: '', ...unthemedToggleStyles }
1454
+ ));
1455
+ controlElement.appendChild(checkbox.domNode);
1456
+ toDispose.add(checkbox);
1457
+ toDispose.add(checkbox.onChange(() => {
1458
+ template.onChange(checkbox.checked);
1459
+ }));
1460
+ toDispose.add(dom.addDisposableListener(descriptionElement, dom.EventType.MOUSE_DOWN, (e) => {
1461
+ const targetElement = e.target;
1462
+ if (targetElement.tagName.toLowerCase() !== 'a') {
1463
+ template.checkbox.checked = !template.checkbox.checked;
1464
+ template.onChange(checkbox.checked);
1465
+ }
1466
+ dom.EventHelper.stop(e);
1467
+ }));
1468
+ checkbox.domNode.classList.add(AbstractSettingRenderer.CONTROL_CLASS);
1469
+ const toolbarContainer = dom.append(container, $('.setting-toolbar-container'));
1470
+ const toolbar = this.renderSettingToolbar(toolbarContainer);
1471
+ toDispose.add(toolbar);
1472
+ const template = {
1473
+ toDispose,
1474
+ elementDisposables: toDispose.add(( new DisposableStore())),
1475
+ containerElement: container,
1476
+ categoryElement,
1477
+ labelElement,
1478
+ controlElement,
1479
+ checkbox,
1480
+ descriptionElement,
1481
+ deprecationWarningElement,
1482
+ indicatorsLabel,
1483
+ toolbar
1484
+ };
1485
+ this.addSettingElementFocusHandler(template);
1486
+ toDispose.add(dom.addDisposableListener(controlElement, 'mousedown', (e) => e.stopPropagation()));
1487
+ toDispose.add(dom.addDisposableListener(titleElement, dom.EventType.MOUSE_ENTER, e => container.classList.add('mouseover')));
1488
+ toDispose.add(dom.addDisposableListener(titleElement, dom.EventType.MOUSE_LEAVE, e => container.classList.remove('mouseover')));
1489
+ return template;
1490
+ }
1491
+ renderElement(element, index, templateData) {
1492
+ super.renderSettingElement(element, index, templateData);
1493
+ }
1494
+ renderValue(dataElement, template, onChange) {
1495
+ template.onChange = undefined;
1496
+ template.checkbox.checked = dataElement.value;
1497
+ template.checkbox.setTitle(dataElement.setting.key);
1498
+ template.onChange = onChange;
1499
+ }
1500
+ }
1501
+ class SettingsExtensionToggleRenderer extends AbstractSettingRenderer {
1502
+ constructor() {
1503
+ super(...arguments);
1504
+ this.templateId = SETTINGS_EXTENSION_TOGGLE_TEMPLATE_ID;
1505
+ }
1506
+ renderTemplate(_container) {
1507
+ const common = super.renderCommonTemplate(null, _container, 'extension-toggle');
1508
+ const actionButton = ( new Button(common.containerElement, {
1509
+ title: false,
1510
+ ...defaultButtonStyles
1511
+ }));
1512
+ actionButton.element.classList.add('setting-item-extension-toggle-button');
1513
+ actionButton.label = ( localize('showExtension', "Show Extension"));
1514
+ const template = {
1515
+ ...common,
1516
+ actionButton
1517
+ };
1518
+ this.addSettingElementFocusHandler(template);
1519
+ return template;
1520
+ }
1521
+ renderElement(element, index, templateData) {
1522
+ super.renderSettingElement(element, index, templateData);
1523
+ }
1524
+ renderValue(dataElement, template, onChange) {
1525
+ template.elementDisposables.clear();
1526
+ const extensionId = dataElement.setting.displayExtensionId;
1527
+ template.elementDisposables.add(template.actionButton.onDidClick(async () => {
1528
+ this._telemetryService.publicLog2('ManageExtensionClick', { extensionId });
1529
+ this._commandService.executeCommand('extension.open', extensionId);
1530
+ }));
1531
+ }
1532
+ }
1533
+ let SettingTreeRenderers = class SettingTreeRenderers {
1534
+ constructor(_instantiationService, _contextMenuService, _contextViewService, _userDataSyncEnablementService) {
1535
+ this._instantiationService = _instantiationService;
1536
+ this._contextMenuService = _contextMenuService;
1537
+ this._contextViewService = _contextViewService;
1538
+ this._userDataSyncEnablementService = _userDataSyncEnablementService;
1539
+ this._onDidChangeSetting = ( new Emitter());
1540
+ this.settingActions = [
1541
+ ( new Action('settings.resetSetting', ( localize('resetSettingLabel', "Reset Setting")), undefined, undefined, async (context) => {
1542
+ if (context instanceof SettingsTreeSettingElement) {
1543
+ if (!context.isUntrusted) {
1544
+ this._onDidChangeSetting.fire({
1545
+ key: context.setting.key,
1546
+ value: undefined,
1547
+ type: context.setting.type,
1548
+ manualReset: true,
1549
+ scope: context.setting.scope
1550
+ });
1551
+ }
1552
+ }
1553
+ })),
1554
+ ( new Separator()),
1555
+ this._instantiationService.createInstance(CopySettingIdAction),
1556
+ this._instantiationService.createInstance(CopySettingAsJSONAction),
1557
+ ];
1558
+ const actionFactory = (setting) => this.getActionsForSetting(setting);
1559
+ const emptyActionFactory = (_) => [];
1560
+ const settingRenderers = [
1561
+ this._instantiationService.createInstance(SettingBoolRenderer, this.settingActions, actionFactory),
1562
+ this._instantiationService.createInstance(SettingNumberRenderer, this.settingActions, actionFactory),
1563
+ this._instantiationService.createInstance(SettingArrayRenderer, this.settingActions, actionFactory),
1564
+ this._instantiationService.createInstance(SettingComplexRenderer, this.settingActions, actionFactory),
1565
+ this._instantiationService.createInstance(SettingTextRenderer, this.settingActions, actionFactory),
1566
+ this._instantiationService.createInstance(SettingMultilineTextRenderer, this.settingActions, actionFactory),
1567
+ this._instantiationService.createInstance(SettingExcludeRenderer, this.settingActions, actionFactory),
1568
+ this._instantiationService.createInstance(SettingIncludeRenderer, this.settingActions, actionFactory),
1569
+ this._instantiationService.createInstance(SettingEnumRenderer, this.settingActions, actionFactory),
1570
+ this._instantiationService.createInstance(SettingObjectRenderer, this.settingActions, actionFactory),
1571
+ this._instantiationService.createInstance(SettingBoolObjectRenderer, this.settingActions, actionFactory),
1572
+ this._instantiationService.createInstance(SettingsExtensionToggleRenderer, [], emptyActionFactory)
1573
+ ];
1574
+ this.onDidClickOverrideElement = Event.any(...( settingRenderers.map(r => r.onDidClickOverrideElement)));
1575
+ this.onDidChangeSetting = Event.any(...( settingRenderers.map(r => r.onDidChangeSetting)), this._onDidChangeSetting.event);
1576
+ this.onDidOpenSettings = Event.any(...( settingRenderers.map(r => r.onDidOpenSettings)));
1577
+ this.onDidClickSettingLink = Event.any(...( settingRenderers.map(r => r.onDidClickSettingLink)));
1578
+ this.onDidFocusSetting = Event.any(...( settingRenderers.map(r => r.onDidFocusSetting)));
1579
+ this.onDidChangeSettingHeight = Event.any(...( settingRenderers.map(r => r.onDidChangeSettingHeight)));
1580
+ this.onApplyFilter = Event.any(...( settingRenderers.map(r => r.onApplyFilter)));
1581
+ this.allRenderers = [
1582
+ ...settingRenderers,
1583
+ this._instantiationService.createInstance(SettingGroupRenderer),
1584
+ this._instantiationService.createInstance(SettingNewExtensionsRenderer),
1585
+ ];
1586
+ }
1587
+ getActionsForSetting(setting) {
1588
+ const enableSync = this._userDataSyncEnablementService.isEnabled();
1589
+ return enableSync && !setting.disallowSyncIgnore ?
1590
+ [
1591
+ ( new Separator()),
1592
+ this._instantiationService.createInstance(SyncSettingAction, setting)
1593
+ ] :
1594
+ [];
1595
+ }
1596
+ cancelSuggesters() {
1597
+ this._contextViewService.hideContextView();
1598
+ }
1599
+ showContextMenu(element, settingDOMElement) {
1600
+ const toolbarElement = settingDOMElement.querySelector('.monaco-toolbar');
1601
+ if (toolbarElement) {
1602
+ this._contextMenuService.showContextMenu({
1603
+ getActions: () => this.settingActions,
1604
+ getAnchor: () => toolbarElement,
1605
+ getActionsContext: () => element
1606
+ });
1607
+ }
1608
+ }
1609
+ getSettingDOMElementForDOMElement(domElement) {
1610
+ const parent = dom.findParentWithClass(domElement, AbstractSettingRenderer.CONTENTS_CLASS);
1611
+ if (parent) {
1612
+ return parent;
1613
+ }
1614
+ return null;
1615
+ }
1616
+ getDOMElementsForSettingKey(treeContainer, key) {
1617
+ return treeContainer.querySelectorAll(`[${AbstractSettingRenderer.SETTING_KEY_ATTR}="${key}"]`);
1618
+ }
1619
+ getKeyForDOMElementInSetting(element) {
1620
+ const settingElement = this.getSettingDOMElementForDOMElement(element);
1621
+ return settingElement && settingElement.getAttribute(AbstractSettingRenderer.SETTING_KEY_ATTR);
1622
+ }
1623
+ getIdForDOMElementInSetting(element) {
1624
+ const settingElement = this.getSettingDOMElementForDOMElement(element);
1625
+ return settingElement && settingElement.getAttribute(AbstractSettingRenderer.SETTING_ID_ATTR);
1626
+ }
1627
+ };
1628
+ SettingTreeRenderers = ( __decorate([
1629
+ ( __param(0, IInstantiationService)),
1630
+ ( __param(1, IContextMenuService)),
1631
+ ( __param(2, IContextViewService)),
1632
+ ( __param(3, IUserDataSyncEnablementService))
1633
+ ], SettingTreeRenderers));
1634
+ function renderValidations(dataElement, template, calledOnStartup) {
1635
+ if (dataElement.setting.validator) {
1636
+ const errMsg = dataElement.setting.validator(template.inputBox.value);
1637
+ if (errMsg) {
1638
+ template.containerElement.classList.add('invalid-input');
1639
+ template.validationErrorMessageElement.innerText = errMsg;
1640
+ const validationError = ( localize('validationError', "Validation Error."));
1641
+ template.inputBox.inputElement.parentElement.setAttribute('aria-label', [validationError, errMsg].join(' '));
1642
+ if (!calledOnStartup) {
1643
+ alert(validationError + ' ' + errMsg);
1644
+ }
1645
+ return true;
1646
+ }
1647
+ else {
1648
+ template.inputBox.inputElement.parentElement.removeAttribute('aria-label');
1649
+ }
1650
+ }
1651
+ template.containerElement.classList.remove('invalid-input');
1652
+ return false;
1653
+ }
1654
+ function renderArrayValidations(dataElement, template, value, calledOnStartup) {
1655
+ template.containerElement.classList.add('invalid-input');
1656
+ if (dataElement.setting.validator) {
1657
+ const errMsg = dataElement.setting.validator(value);
1658
+ if (errMsg && errMsg !== '') {
1659
+ template.containerElement.classList.add('invalid-input');
1660
+ template.validationErrorMessageElement.innerText = errMsg;
1661
+ const validationError = ( localize('validationError', "Validation Error."));
1662
+ template.containerElement.setAttribute('aria-label', [dataElement.setting.key, validationError, errMsg].join(' '));
1663
+ if (!calledOnStartup) {
1664
+ alert(validationError + ' ' + errMsg);
1665
+ }
1666
+ return true;
1667
+ }
1668
+ else {
1669
+ template.containerElement.setAttribute('aria-label', dataElement.setting.key);
1670
+ template.containerElement.classList.remove('invalid-input');
1671
+ }
1672
+ }
1673
+ return false;
1674
+ }
1675
+ function cleanRenderedMarkdown(element) {
1676
+ for (let i = 0; i < element.childNodes.length; i++) {
1677
+ const child = element.childNodes.item(i);
1678
+ const tagName = child.tagName && child.tagName.toLowerCase();
1679
+ if (tagName === 'img') {
1680
+ element.removeChild(child);
1681
+ }
1682
+ else {
1683
+ cleanRenderedMarkdown(child);
1684
+ }
1685
+ }
1686
+ }
1687
+ function fixSettingLinks(text, linkify = true) {
1688
+ return text.replace(/`#([^#\s`]+)#`|'#([^#\s']+)#'/g, (match, backticksGroup, quotesGroup) => {
1689
+ const settingKey = backticksGroup ?? quotesGroup;
1690
+ const targetDisplayFormat = settingKeyToDisplayFormat(settingKey);
1691
+ const targetName = `${targetDisplayFormat.category}: ${targetDisplayFormat.label}`;
1692
+ return linkify ?
1693
+ `[${targetName}](#${settingKey} "${settingKey}")` :
1694
+ `"${targetName}"`;
1695
+ });
1696
+ }
1697
+ function escapeInvisibleChars(enumValue) {
1698
+ return enumValue && enumValue
1699
+ .replace(/\n/g, '\\n')
1700
+ .replace(/\r/g, '\\r');
1701
+ }
1702
+ let SettingsTreeFilter = class SettingsTreeFilter {
1703
+ constructor(viewState, environmentService) {
1704
+ this.viewState = viewState;
1705
+ this.environmentService = environmentService;
1706
+ }
1707
+ filter(element, parentVisibility) {
1708
+ if (this.viewState.filterToCategory && element instanceof SettingsTreeSettingElement) {
1709
+ if (!this.settingContainedInGroup(element.setting, this.viewState.filterToCategory)) {
1710
+ return false;
1711
+ }
1712
+ }
1713
+ if (element instanceof SettingsTreeSettingElement && this.viewState.settingsTarget !== 3 ) {
1714
+ const isRemote = !!this.environmentService.remoteAuthority;
1715
+ if (!element.matchesScope(this.viewState.settingsTarget, isRemote)) {
1716
+ return false;
1717
+ }
1718
+ }
1719
+ if (element instanceof SettingsTreeGroupElement) {
1720
+ if (typeof element.count === 'number') {
1721
+ return element.count > 0;
1722
+ }
1723
+ return 2 ;
1724
+ }
1725
+ if (element instanceof SettingsTreeNewExtensionsElement) {
1726
+ if (this.viewState.tagFilters?.size || this.viewState.filterToCategory) {
1727
+ return false;
1728
+ }
1729
+ }
1730
+ return true;
1731
+ }
1732
+ settingContainedInGroup(setting, group) {
1733
+ return ( group.children.some(child => {
1734
+ if (child instanceof SettingsTreeGroupElement) {
1735
+ return this.settingContainedInGroup(setting, child);
1736
+ }
1737
+ else if (child instanceof SettingsTreeSettingElement) {
1738
+ return child.setting.key === setting.key;
1739
+ }
1740
+ else {
1741
+ return false;
1742
+ }
1743
+ }));
1744
+ }
1745
+ };
1746
+ SettingsTreeFilter = ( __decorate([
1747
+ ( __param(1, IWorkbenchEnvironmentService))
1748
+ ], SettingsTreeFilter));
1749
+ class SettingsTreeDelegate extends CachedListVirtualDelegate {
1750
+ getTemplateId(element) {
1751
+ if (element instanceof SettingsTreeGroupElement) {
1752
+ return SETTINGS_ELEMENT_TEMPLATE_ID;
1753
+ }
1754
+ if (element instanceof SettingsTreeSettingElement) {
1755
+ if (element.valueType === SettingValueType.ExtensionToggle) {
1756
+ return SETTINGS_EXTENSION_TOGGLE_TEMPLATE_ID;
1757
+ }
1758
+ const invalidTypeError = element.isConfigured && getInvalidTypeError(element.value, element.setting.type);
1759
+ if (invalidTypeError) {
1760
+ return SETTINGS_COMPLEX_TEMPLATE_ID;
1761
+ }
1762
+ if (element.valueType === SettingValueType.Boolean) {
1763
+ return SETTINGS_BOOL_TEMPLATE_ID;
1764
+ }
1765
+ if (element.valueType === SettingValueType.Integer ||
1766
+ element.valueType === SettingValueType.Number ||
1767
+ element.valueType === SettingValueType.NullableInteger ||
1768
+ element.valueType === SettingValueType.NullableNumber) {
1769
+ return SETTINGS_NUMBER_TEMPLATE_ID;
1770
+ }
1771
+ if (element.valueType === SettingValueType.MultilineString) {
1772
+ return SETTINGS_MULTILINE_TEXT_TEMPLATE_ID;
1773
+ }
1774
+ if (element.valueType === SettingValueType.String) {
1775
+ return SETTINGS_TEXT_TEMPLATE_ID;
1776
+ }
1777
+ if (element.valueType === SettingValueType.Enum) {
1778
+ return SETTINGS_ENUM_TEMPLATE_ID;
1779
+ }
1780
+ if (element.valueType === SettingValueType.Array) {
1781
+ return SETTINGS_ARRAY_TEMPLATE_ID;
1782
+ }
1783
+ if (element.valueType === SettingValueType.Exclude) {
1784
+ return SETTINGS_EXCLUDE_TEMPLATE_ID;
1785
+ }
1786
+ if (element.valueType === SettingValueType.Include) {
1787
+ return SETTINGS_INCLUDE_TEMPLATE_ID;
1788
+ }
1789
+ if (element.valueType === SettingValueType.Object) {
1790
+ return SETTINGS_OBJECT_TEMPLATE_ID;
1791
+ }
1792
+ if (element.valueType === SettingValueType.BooleanObject) {
1793
+ return SETTINGS_BOOL_OBJECT_TEMPLATE_ID;
1794
+ }
1795
+ if (element.valueType === SettingValueType.LanguageTag) {
1796
+ return SETTINGS_COMPLEX_TEMPLATE_ID;
1797
+ }
1798
+ return SETTINGS_COMPLEX_TEMPLATE_ID;
1799
+ }
1800
+ if (element instanceof SettingsTreeNewExtensionsElement) {
1801
+ return SETTINGS_NEW_EXTENSIONS_TEMPLATE_ID;
1802
+ }
1803
+ throw new Error('unknown element type: ' + element);
1804
+ }
1805
+ hasDynamicHeight(element) {
1806
+ return !(element instanceof SettingsTreeGroupElement);
1807
+ }
1808
+ estimateHeight(element) {
1809
+ if (element instanceof SettingsTreeGroupElement) {
1810
+ return 42;
1811
+ }
1812
+ return element instanceof SettingsTreeSettingElement && element.valueType === SettingValueType.Boolean ? 78 : 104;
1813
+ }
1814
+ }
1815
+ class NonCollapsibleObjectTreeModel extends ObjectTreeModel {
1816
+ isCollapsible(element) {
1817
+ return false;
1818
+ }
1819
+ setCollapsed(element, collapsed, recursive) {
1820
+ return false;
1821
+ }
1822
+ }
1823
+ class SettingsTreeAccessibilityProvider {
1824
+ constructor(configurationService, languageService, userDataProfilesService) {
1825
+ this.configurationService = configurationService;
1826
+ this.languageService = languageService;
1827
+ this.userDataProfilesService = userDataProfilesService;
1828
+ }
1829
+ getAriaLabel(element) {
1830
+ if (element instanceof SettingsTreeSettingElement) {
1831
+ const ariaLabelSections = [];
1832
+ ariaLabelSections.push(`${element.displayCategory} ${element.displayLabel}.`);
1833
+ if (element.isConfigured) {
1834
+ const modifiedText = ( localize('settings.Modified', 'Modified.'));
1835
+ ariaLabelSections.push(modifiedText);
1836
+ }
1837
+ const indicatorsLabelAriaLabel = getIndicatorsLabelAriaLabel(element, this.configurationService, this.userDataProfilesService, this.languageService);
1838
+ if (indicatorsLabelAriaLabel.length) {
1839
+ ariaLabelSections.push(`${indicatorsLabelAriaLabel}.`);
1840
+ }
1841
+ const descriptionWithoutSettingLinks = fixSettingLinks(element.description, false);
1842
+ if (descriptionWithoutSettingLinks.length) {
1843
+ ariaLabelSections.push(descriptionWithoutSettingLinks);
1844
+ }
1845
+ return ariaLabelSections.join(' ');
1846
+ }
1847
+ else if (element instanceof SettingsTreeGroupElement) {
1848
+ return element.label;
1849
+ }
1850
+ else {
1851
+ return element.id;
1852
+ }
1853
+ }
1854
+ getWidgetAriaLabel() {
1855
+ return ( localize('settings', "Settings"));
1856
+ }
1857
+ }
1858
+ let SettingsTree = class SettingsTree extends WorkbenchObjectTree {
1859
+ constructor(container, viewState, renderers, contextKeyService, listService, configurationService, instantiationService, languageService, userDataProfilesService) {
1860
+ super('SettingsTree', container, ( new SettingsTreeDelegate()), renderers, {
1861
+ horizontalScrolling: false,
1862
+ supportDynamicHeights: true,
1863
+ identityProvider: {
1864
+ getId(e) {
1865
+ return e.id;
1866
+ }
1867
+ },
1868
+ accessibilityProvider: ( new SettingsTreeAccessibilityProvider(configurationService, languageService, userDataProfilesService)),
1869
+ styleController: id => ( new DefaultStyleController(dom.createStyleSheet(container), id)),
1870
+ filter: instantiationService.createInstance(SettingsTreeFilter, viewState),
1871
+ smoothScrolling: configurationService.getValue('workbench.list.smoothScrolling'),
1872
+ multipleSelectionSupport: false,
1873
+ findWidgetEnabled: false,
1874
+ renderIndentGuides: RenderIndentGuides.None
1875
+ }, instantiationService, contextKeyService, listService, configurationService);
1876
+ this.getHTMLElement().classList.add('settings-editor-tree');
1877
+ this.style(getListStyles({
1878
+ listBackground: editorBackground,
1879
+ listActiveSelectionBackground: editorBackground,
1880
+ listActiveSelectionForeground: foreground,
1881
+ listFocusAndSelectionBackground: editorBackground,
1882
+ listFocusAndSelectionForeground: foreground,
1883
+ listFocusBackground: editorBackground,
1884
+ listFocusForeground: foreground,
1885
+ listHoverForeground: foreground,
1886
+ listHoverBackground: editorBackground,
1887
+ listHoverOutline: editorBackground,
1888
+ listFocusOutline: editorBackground,
1889
+ listInactiveSelectionBackground: editorBackground,
1890
+ listInactiveSelectionForeground: foreground,
1891
+ listInactiveFocusBackground: editorBackground,
1892
+ listInactiveFocusOutline: editorBackground,
1893
+ treeIndentGuidesStroke: undefined,
1894
+ treeInactiveIndentGuidesStroke: undefined,
1895
+ }));
1896
+ this.disposables.add(configurationService.onDidChangeConfiguration(e => {
1897
+ if (e.affectsConfiguration('workbench.list.smoothScrolling')) {
1898
+ this.updateOptions({
1899
+ smoothScrolling: configurationService.getValue('workbench.list.smoothScrolling')
1900
+ });
1901
+ }
1902
+ }));
1903
+ }
1904
+ createModel(user, view, options) {
1905
+ return ( new NonCollapsibleObjectTreeModel(user, view, options));
1906
+ }
1907
+ };
1908
+ SettingsTree = ( __decorate([
1909
+ ( __param(3, IContextKeyService)),
1910
+ ( __param(4, IListService)),
1911
+ ( __param(5, IConfigurationService)),
1912
+ ( __param(6, IInstantiationService)),
1913
+ ( __param(7, ILanguageService)),
1914
+ ( __param(8, IUserDataProfilesService))
1915
+ ], SettingsTree));
1916
+ let CopySettingIdAction = class CopySettingIdAction extends Action {
1917
+ constructor(clipboardService) {
1918
+ super(CopySettingIdAction.ID, CopySettingIdAction.LABEL);
1919
+ this.clipboardService = clipboardService;
1920
+ }
1921
+ async run(context) {
1922
+ if (context) {
1923
+ await this.clipboardService.writeText(context.setting.key);
1924
+ }
1925
+ return Promise.resolve(undefined);
1926
+ }
1927
+ };
1928
+ CopySettingIdAction.ID = 'settings.copySettingId';
1929
+ CopySettingIdAction.LABEL = ( localize('copySettingIdLabel', "Copy Setting ID"));
1930
+ CopySettingIdAction = ( __decorate([
1931
+ ( __param(0, IClipboardService))
1932
+ ], CopySettingIdAction));
1933
+ let CopySettingAsJSONAction = class CopySettingAsJSONAction extends Action {
1934
+ constructor(clipboardService) {
1935
+ super(CopySettingAsJSONAction.ID, CopySettingAsJSONAction.LABEL);
1936
+ this.clipboardService = clipboardService;
1937
+ }
1938
+ async run(context) {
1939
+ if (context) {
1940
+ const jsonResult = `"${context.setting.key}": ${JSON.stringify(context.value, undefined, ' ')}`;
1941
+ await this.clipboardService.writeText(jsonResult);
1942
+ }
1943
+ return Promise.resolve(undefined);
1944
+ }
1945
+ };
1946
+ CopySettingAsJSONAction.ID = 'settings.copySettingAsJSON';
1947
+ CopySettingAsJSONAction.LABEL = ( localize('copySettingAsJSONLabel', "Copy Setting as JSON"));
1948
+ CopySettingAsJSONAction = ( __decorate([
1949
+ ( __param(0, IClipboardService))
1950
+ ], CopySettingAsJSONAction));
1951
+ let SyncSettingAction = class SyncSettingAction extends Action {
1952
+ constructor(setting, configService) {
1953
+ super(SyncSettingAction.ID, SyncSettingAction.LABEL);
1954
+ this.setting = setting;
1955
+ this.configService = configService;
1956
+ this._register(Event.filter(configService.onDidChangeConfiguration, e => e.affectsConfiguration('settingsSync.ignoredSettings'))(() => this.update()));
1957
+ this.update();
1958
+ }
1959
+ async update() {
1960
+ const ignoredSettings = getIgnoredSettings(getDefaultIgnoredSettings(), this.configService);
1961
+ this.checked = !ignoredSettings.includes(this.setting.key);
1962
+ }
1963
+ async run() {
1964
+ let currentValue = [...this.configService.getValue('settingsSync.ignoredSettings')];
1965
+ currentValue = currentValue.filter(v => v !== this.setting.key && v !== `-${this.setting.key}`);
1966
+ const defaultIgnoredSettings = getDefaultIgnoredSettings();
1967
+ const isDefaultIgnored = defaultIgnoredSettings.includes(this.setting.key);
1968
+ const askedToSync = !this.checked;
1969
+ if (askedToSync && isDefaultIgnored) {
1970
+ currentValue.push(`-${this.setting.key}`);
1971
+ }
1972
+ if (!askedToSync && !isDefaultIgnored) {
1973
+ currentValue.push(this.setting.key);
1974
+ }
1975
+ this.configService.updateValue('settingsSync.ignoredSettings', currentValue.length ? currentValue : undefined, 2 );
1976
+ return Promise.resolve(undefined);
1977
+ }
1978
+ };
1979
+ SyncSettingAction.ID = 'settings.stopSyncingSetting';
1980
+ SyncSettingAction.LABEL = ( localize('stopSyncingSetting', "Sync This Setting"));
1981
+ SyncSettingAction = ( __decorate([
1982
+ ( __param(1, IConfigurationService))
1983
+ ], SyncSettingAction));
1984
+ export { AbstractSettingRenderer, NonCollapsibleObjectTreeModel, SettingBoolRenderer, SettingComplexRenderer, SettingEnumRenderer, SettingExcludeRenderer, SettingGroupRenderer, SettingIncludeRenderer, SettingNewExtensionsRenderer, SettingNumberRenderer, SettingTreeRenderers, SettingsExtensionToggleRenderer, SettingsTree, SettingsTreeFilter, createSettingMatchRegExp, createTocTreeForExtensionSettings, resolveConfiguredUntrustedSettings, resolveSettingsTree };