@theia/core 1.65.0-next.6 → 1.65.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 (440) hide show
  1. package/README.md +6 -6
  2. package/i18n/nls.cs.json +117 -15
  3. package/i18n/nls.de.json +117 -15
  4. package/i18n/nls.es.json +117 -15
  5. package/i18n/nls.fr.json +117 -15
  6. package/i18n/nls.hu.json +117 -15
  7. package/i18n/nls.it.json +117 -15
  8. package/i18n/nls.ja.json +117 -15
  9. package/i18n/nls.json +121 -19
  10. package/i18n/nls.ko.json +117 -15
  11. package/i18n/nls.pl.json +117 -15
  12. package/i18n/nls.pt-br.json +117 -15
  13. package/i18n/nls.ru.json +117 -15
  14. package/i18n/nls.tr.json +117 -15
  15. package/i18n/nls.zh-cn.json +117 -15
  16. package/i18n/nls.zh-tw.json +117 -15
  17. package/lib/browser/breadcrumbs/breadcrumbs-renderer.d.ts +1 -1
  18. package/lib/browser/breadcrumbs/breadcrumbs-renderer.d.ts.map +1 -1
  19. package/lib/browser/breadcrumbs/breadcrumbs-renderer.js +1 -1
  20. package/lib/browser/breadcrumbs/breadcrumbs-renderer.js.map +1 -1
  21. package/lib/browser/catalog.json +227 -32
  22. package/lib/browser/common-frontend-contribution.d.ts +2 -3
  23. package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
  24. package/lib/browser/common-frontend-contribution.js +3 -4
  25. package/lib/browser/common-frontend-contribution.js.map +1 -1
  26. package/lib/browser/dialogs/react-dialog.d.ts.map +1 -1
  27. package/lib/browser/dialogs/react-dialog.js +1 -0
  28. package/lib/browser/dialogs/react-dialog.js.map +1 -1
  29. package/lib/browser/encoding-registry.d.ts +1 -1
  30. package/lib/browser/encoding-registry.d.ts.map +1 -1
  31. package/lib/browser/encoding-registry.js +1 -1
  32. package/lib/browser/encoding-registry.js.map +1 -1
  33. package/lib/browser/frontend-application-bindings.d.ts.map +1 -1
  34. package/lib/browser/frontend-application-bindings.js +10 -17
  35. package/lib/browser/frontend-application-bindings.js.map +1 -1
  36. package/lib/browser/frontend-application-module.d.ts.map +1 -1
  37. package/lib/browser/frontend-application-module.js +10 -6
  38. package/lib/browser/frontend-application-module.js.map +1 -1
  39. package/lib/browser/frontend-application.d.ts +1 -1
  40. package/lib/browser/frontend-application.d.ts.map +1 -1
  41. package/lib/browser/frontend-application.js +1 -1
  42. package/lib/browser/frontend-application.js.map +1 -1
  43. package/lib/browser/hover-service.d.ts +1 -2
  44. package/lib/browser/hover-service.d.ts.map +1 -1
  45. package/lib/browser/hover-service.js +1 -2
  46. package/lib/browser/hover-service.js.map +1 -1
  47. package/lib/browser/icon-theme-service.d.ts +3 -2
  48. package/lib/browser/icon-theme-service.d.ts.map +1 -1
  49. package/lib/browser/icon-theme-service.js +4 -3
  50. package/lib/browser/icon-theme-service.js.map +1 -1
  51. package/lib/browser/index.d.ts +0 -1
  52. package/lib/browser/index.d.ts.map +1 -1
  53. package/lib/browser/index.js +0 -1
  54. package/lib/browser/index.js.map +1 -1
  55. package/lib/browser/json-schema-store.d.ts +2 -0
  56. package/lib/browser/json-schema-store.d.ts.map +1 -1
  57. package/lib/browser/json-schema-store.js +10 -3
  58. package/lib/browser/json-schema-store.js.map +1 -1
  59. package/lib/browser/keybinding.d.ts +1 -1
  60. package/lib/browser/keybinding.d.ts.map +1 -1
  61. package/lib/browser/keybinding.js +1 -1
  62. package/lib/browser/keybinding.js.map +1 -1
  63. package/lib/browser/keybinding.spec.js +1 -1
  64. package/lib/browser/keybinding.spec.js.map +1 -1
  65. package/lib/browser/menu/browser-menu-plugin.d.ts +3 -3
  66. package/lib/browser/menu/browser-menu-plugin.d.ts.map +1 -1
  67. package/lib/browser/menu/browser-menu-plugin.js +4 -5
  68. package/lib/browser/menu/browser-menu-plugin.js.map +1 -1
  69. package/lib/browser/open-with-service.d.ts +1 -1
  70. package/lib/browser/open-with-service.d.ts.map +1 -1
  71. package/lib/browser/open-with-service.js +3 -3
  72. package/lib/browser/open-with-service.js.map +1 -1
  73. package/lib/browser/opener-service.d.ts +1 -2
  74. package/lib/browser/opener-service.d.ts.map +1 -1
  75. package/lib/browser/opener-service.js.map +1 -1
  76. package/lib/browser/preferences/frontend-config-preference-contributions.d.ts +6 -0
  77. package/lib/browser/preferences/frontend-config-preference-contributions.d.ts.map +1 -0
  78. package/lib/browser/preferences/frontend-config-preference-contributions.js +60 -0
  79. package/lib/browser/preferences/frontend-config-preference-contributions.js.map +1 -0
  80. package/lib/browser/preferences/index.d.ts +0 -5
  81. package/lib/browser/preferences/index.d.ts.map +1 -1
  82. package/lib/browser/preferences/index.js +0 -5
  83. package/lib/browser/preferences/index.js.map +1 -1
  84. package/lib/browser/preferences/preference-contribution.d.ts +0 -96
  85. package/lib/browser/preferences/preference-contribution.d.ts.map +1 -1
  86. package/lib/browser/preferences/preference-contribution.js +14 -355
  87. package/lib/browser/preferences/preference-contribution.js.map +1 -1
  88. package/lib/browser/preferences/preference-proxy.spec.js +25 -17
  89. package/lib/browser/preferences/preference-proxy.spec.js.map +1 -1
  90. package/lib/browser/preferences/preference-schema-provider.spec.js +21 -34
  91. package/lib/browser/preferences/preference-schema-provider.spec.js.map +1 -1
  92. package/lib/browser/preferences/preference-service.spec.js +57 -80
  93. package/lib/browser/preferences/preference-service.spec.js.map +1 -1
  94. package/lib/browser/preferences/preference-validation-service.d.ts +24 -26
  95. package/lib/browser/preferences/preference-validation-service.d.ts.map +1 -1
  96. package/lib/browser/preferences/preference-validation-service.js +40 -20
  97. package/lib/browser/preferences/preference-validation-service.js.map +1 -1
  98. package/lib/browser/preferences/preference-validation-service.spec.js +10 -6
  99. package/lib/browser/preferences/preference-validation-service.spec.js.map +1 -1
  100. package/lib/browser/preferences/test/mock-preference-provider.d.ts +2 -3
  101. package/lib/browser/preferences/test/mock-preference-provider.d.ts.map +1 -1
  102. package/lib/browser/preferences/test/mock-preference-provider.js +5 -7
  103. package/lib/browser/preferences/test/mock-preference-provider.js.map +1 -1
  104. package/lib/browser/preferences/test/mock-preference-proxy.d.ts.map +1 -1
  105. package/lib/browser/preferences/test/mock-preference-proxy.js.map +1 -1
  106. package/lib/browser/preferences/test/mock-preference-service.d.ts +1 -4
  107. package/lib/browser/preferences/test/mock-preference-service.d.ts.map +1 -1
  108. package/lib/browser/preferences/test/mock-preference-service.js.map +1 -1
  109. package/lib/browser/quick-input/quick-command-service.d.ts +1 -1
  110. package/lib/browser/quick-input/quick-command-service.d.ts.map +1 -1
  111. package/lib/browser/quick-input/quick-command-service.js +1 -1
  112. package/lib/browser/quick-input/quick-command-service.js.map +1 -1
  113. package/lib/browser/request/browser-request-service.d.ts +1 -1
  114. package/lib/browser/request/browser-request-service.d.ts.map +1 -1
  115. package/lib/browser/request/browser-request-service.js +2 -2
  116. package/lib/browser/request/browser-request-service.js.map +1 -1
  117. package/lib/browser/saveable.d.ts +9 -0
  118. package/lib/browser/saveable.d.ts.map +1 -1
  119. package/lib/browser/saveable.js.map +1 -1
  120. package/lib/browser/secondary-window-handler.d.ts +21 -9
  121. package/lib/browser/secondary-window-handler.d.ts.map +1 -1
  122. package/lib/browser/secondary-window-handler.js +162 -21
  123. package/lib/browser/secondary-window-handler.js.map +1 -1
  124. package/lib/browser/shell/application-shell.d.ts +7 -2
  125. package/lib/browser/shell/application-shell.d.ts.map +1 -1
  126. package/lib/browser/shell/application-shell.js +27 -10
  127. package/lib/browser/shell/application-shell.js.map +1 -1
  128. package/lib/browser/shell/shell-layout-restorer.d.ts +13 -0
  129. package/lib/browser/shell/shell-layout-restorer.d.ts.map +1 -1
  130. package/lib/browser/shell/shell-layout-restorer.js +8 -1
  131. package/lib/browser/shell/shell-layout-restorer.js.map +1 -1
  132. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts +30 -16
  133. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts.map +1 -1
  134. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js +116 -33
  135. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js.map +1 -1
  136. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts.map +1 -1
  137. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js +8 -3
  138. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js.map +1 -1
  139. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js +1 -1
  140. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js.map +1 -1
  141. package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.d.ts +2 -2
  142. package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.d.ts.map +1 -1
  143. package/lib/browser/shell/tab-bars.d.ts +1 -1
  144. package/lib/browser/shell/tab-bars.d.ts.map +1 -1
  145. package/lib/browser/shell/theia-dock-panel.d.ts +19 -2
  146. package/lib/browser/shell/theia-dock-panel.d.ts.map +1 -1
  147. package/lib/browser/shell/theia-dock-panel.js +82 -0
  148. package/lib/browser/shell/theia-dock-panel.js.map +1 -1
  149. package/lib/browser/status-bar/status-bar.d.ts +1 -1
  150. package/lib/browser/status-bar/status-bar.d.ts.map +1 -1
  151. package/lib/browser/status-bar/status-bar.js +3 -2
  152. package/lib/browser/status-bar/status-bar.js.map +1 -1
  153. package/lib/browser/theming.d.ts +5 -4
  154. package/lib/browser/theming.d.ts.map +1 -1
  155. package/lib/browser/theming.js +7 -6
  156. package/lib/browser/theming.js.map +1 -1
  157. package/lib/browser/tooltip-service.d.ts +1 -1
  158. package/lib/browser/tooltip-service.d.ts.map +1 -1
  159. package/lib/browser/tooltip-service.js +1 -1
  160. package/lib/browser/tooltip-service.js.map +1 -1
  161. package/lib/browser/tree/index.d.ts +0 -1
  162. package/lib/browser/tree/index.d.ts.map +1 -1
  163. package/lib/browser/tree/index.js +0 -1
  164. package/lib/browser/tree/index.js.map +1 -1
  165. package/lib/browser/tree/tree-widget.d.ts +2 -2
  166. package/lib/browser/tree/tree-widget.d.ts.map +1 -1
  167. package/lib/browser/tree/tree-widget.js +5 -4
  168. package/lib/browser/tree/tree-widget.js.map +1 -1
  169. package/lib/browser/view-container.d.ts.map +1 -1
  170. package/lib/browser/view-container.js +2 -2
  171. package/lib/browser/view-container.js.map +1 -1
  172. package/lib/browser/widgets/extractable-widget.d.ts +3 -0
  173. package/lib/browser/widgets/extractable-widget.d.ts.map +1 -1
  174. package/lib/browser/widgets/extractable-widget.js.map +1 -1
  175. package/lib/browser/widgets/widget.js +4 -4
  176. package/lib/browser/widgets/widget.js.map +1 -1
  177. package/lib/browser/window/default-secondary-window-service.d.ts +10 -5
  178. package/lib/browser/window/default-secondary-window-service.d.ts.map +1 -1
  179. package/lib/browser/window/default-secondary-window-service.js +53 -13
  180. package/lib/browser/window/default-secondary-window-service.js.map +1 -1
  181. package/lib/browser/window/default-window-service.d.ts +1 -1
  182. package/lib/browser/window/default-window-service.d.ts.map +1 -1
  183. package/lib/browser/window/default-window-service.js +1 -1
  184. package/lib/browser/window/default-window-service.js.map +1 -1
  185. package/lib/browser/window/default-window-service.spec.js +1 -1
  186. package/lib/browser/window/default-window-service.spec.js.map +1 -1
  187. package/lib/browser/window/secondary-window-service.d.ts +15 -2
  188. package/lib/browser/window/secondary-window-service.d.ts.map +1 -1
  189. package/lib/browser/window/secondary-window-service.js +12 -1
  190. package/lib/browser/window/secondary-window-service.js.map +1 -1
  191. package/lib/browser/window/window-title-service.d.ts +1 -1
  192. package/lib/browser/window/window-title-service.d.ts.map +1 -1
  193. package/lib/browser/window/window-title-service.js +1 -1
  194. package/lib/browser/window/window-title-service.js.map +1 -1
  195. package/lib/{browser → common}/core-preferences.d.ts +2 -1
  196. package/lib/common/core-preferences.d.ts.map +1 -0
  197. package/lib/{browser → common}/core-preferences.js +17 -18
  198. package/lib/common/core-preferences.js.map +1 -0
  199. package/lib/common/index.d.ts +4 -0
  200. package/lib/common/index.d.ts.map +1 -1
  201. package/lib/common/index.js +4 -0
  202. package/lib/common/index.js.map +1 -1
  203. package/lib/common/inversify-utils.d.ts +31 -0
  204. package/lib/common/inversify-utils.d.ts.map +1 -0
  205. package/lib/common/inversify-utils.js +60 -0
  206. package/lib/common/inversify-utils.js.map +1 -0
  207. package/lib/common/json-schema.d.ts +1 -0
  208. package/lib/common/json-schema.d.ts.map +1 -1
  209. package/lib/common/menu/menu-types.d.ts +1 -0
  210. package/lib/common/menu/menu-types.d.ts.map +1 -1
  211. package/lib/common/menu/menu-types.js.map +1 -1
  212. package/lib/common/preferences/defaults-preference-provider.d.ts +21 -0
  213. package/lib/common/preferences/defaults-preference-provider.d.ts.map +1 -0
  214. package/lib/common/preferences/defaults-preference-provider.js +99 -0
  215. package/lib/common/preferences/defaults-preference-provider.js.map +1 -0
  216. package/lib/common/preferences/index.d.ts +12 -0
  217. package/lib/common/preferences/index.d.ts.map +1 -0
  218. package/lib/common/preferences/index.js +30 -0
  219. package/lib/common/preferences/index.js.map +1 -0
  220. package/lib/{browser → common}/preferences/injectable-preference-proxy.d.ts +1 -1
  221. package/lib/common/preferences/injectable-preference-proxy.d.ts.map +1 -0
  222. package/lib/{browser → common}/preferences/injectable-preference-proxy.js +2 -2
  223. package/lib/common/preferences/injectable-preference-proxy.js.map +1 -0
  224. package/lib/common/preferences/preference-configurations.d.ts.map +1 -0
  225. package/lib/common/preferences/preference-configurations.js.map +1 -0
  226. package/lib/{browser → common}/preferences/preference-language-override-service.d.ts +4 -13
  227. package/lib/common/preferences/preference-language-override-service.d.ts.map +1 -0
  228. package/lib/{browser → common}/preferences/preference-language-override-service.js +14 -30
  229. package/lib/common/preferences/preference-language-override-service.js.map +1 -0
  230. package/lib/common/preferences/preference-provider-impl.d.ts +52 -0
  231. package/lib/common/preferences/preference-provider-impl.d.ts.map +1 -0
  232. package/lib/{browser/preferences/preference-provider.js → common/preferences/preference-provider-impl.js} +23 -95
  233. package/lib/common/preferences/preference-provider-impl.js.map +1 -0
  234. package/lib/{browser → common}/preferences/preference-provider.d.ts +34 -59
  235. package/lib/common/preferences/preference-provider.d.ts.map +1 -0
  236. package/lib/common/preferences/preference-provider.js +71 -0
  237. package/lib/common/preferences/preference-provider.js.map +1 -0
  238. package/lib/common/preferences/preference-provider.spec.d.ts.map +1 -0
  239. package/lib/{browser → common}/preferences/preference-provider.spec.js +4 -4
  240. package/lib/common/preferences/preference-provider.spec.js.map +1 -0
  241. package/lib/{browser → common}/preferences/preference-proxy.d.ts +2 -2
  242. package/lib/common/preferences/preference-proxy.d.ts.map +1 -0
  243. package/lib/{browser → common}/preferences/preference-proxy.js +10 -10
  244. package/lib/common/preferences/preference-proxy.js.map +1 -0
  245. package/lib/common/preferences/preference-schema-service.d.ts +55 -0
  246. package/lib/common/preferences/preference-schema-service.d.ts.map +1 -0
  247. package/lib/common/preferences/preference-schema-service.js +402 -0
  248. package/lib/common/preferences/preference-schema-service.js.map +1 -0
  249. package/lib/common/preferences/preference-schema.d.ts +145 -43
  250. package/lib/common/preferences/preference-schema.d.ts.map +1 -1
  251. package/lib/common/preferences/preference-schema.js +3 -41
  252. package/lib/common/preferences/preference-schema.js.map +1 -1
  253. package/lib/common/preferences/preference-scope.d.ts +4 -1
  254. package/lib/common/preferences/preference-scope.d.ts.map +1 -1
  255. package/lib/common/preferences/preference-scope.js +5 -14
  256. package/lib/common/preferences/preference-scope.js.map +1 -1
  257. package/lib/{browser → common}/preferences/preference-service.d.ts +9 -10
  258. package/lib/common/preferences/preference-service.d.ts.map +1 -0
  259. package/lib/{browser → common}/preferences/preference-service.js +68 -58
  260. package/lib/common/preferences/preference-service.js.map +1 -0
  261. package/lib/common/stream.d.ts +9 -0
  262. package/lib/common/stream.d.ts.map +1 -1
  263. package/lib/common/stream.js +93 -2
  264. package/lib/common/stream.js.map +1 -1
  265. package/lib/common/supported-encodings.d.ts.map +1 -0
  266. package/lib/common/supported-encodings.js.map +1 -0
  267. package/lib/{browser/tree → common}/tree-preference.d.ts +1 -1
  268. package/lib/common/tree-preference.d.ts.map +1 -0
  269. package/lib/{browser/tree → common}/tree-preference.js +3 -5
  270. package/lib/common/tree-preference.js.map +1 -0
  271. package/lib/electron-browser/menu/electron-context-menu-renderer.d.ts +2 -1
  272. package/lib/electron-browser/menu/electron-context-menu-renderer.d.ts.map +1 -1
  273. package/lib/electron-browser/menu/electron-context-menu-renderer.js +2 -1
  274. package/lib/electron-browser/menu/electron-context-menu-renderer.js.map +1 -1
  275. package/lib/electron-browser/menu/electron-main-menu-factory.d.ts +1 -2
  276. package/lib/electron-browser/menu/electron-main-menu-factory.d.ts.map +1 -1
  277. package/lib/electron-browser/menu/electron-main-menu-factory.js +11 -10
  278. package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
  279. package/lib/electron-browser/menu/electron-menu-contribution.d.ts +2 -2
  280. package/lib/electron-browser/menu/electron-menu-contribution.d.ts.map +1 -1
  281. package/lib/electron-browser/menu/electron-menu-contribution.js +6 -6
  282. package/lib/electron-browser/menu/electron-menu-contribution.js.map +1 -1
  283. package/lib/electron-browser/preload.d.ts.map +1 -1
  284. package/lib/electron-browser/preload.js +3 -0
  285. package/lib/electron-browser/preload.js.map +1 -1
  286. package/lib/electron-browser/window/electron-secondary-window-service.d.ts.map +1 -1
  287. package/lib/electron-browser/window/electron-secondary-window-service.js +5 -4
  288. package/lib/electron-browser/window/electron-secondary-window-service.js.map +1 -1
  289. package/lib/electron-browser/window/electron-window-module.js +1 -1
  290. package/lib/electron-browser/window/electron-window-module.js.map +1 -1
  291. package/lib/electron-browser/window/electron-window-service.d.ts +1 -1
  292. package/lib/electron-browser/window/electron-window-service.d.ts.map +1 -1
  293. package/lib/electron-browser/window/electron-window-service.js +1 -1
  294. package/lib/electron-browser/window/electron-window-service.js.map +1 -1
  295. package/lib/electron-common/electron-api.d.ts +2 -0
  296. package/lib/electron-common/electron-api.d.ts.map +1 -1
  297. package/lib/electron-common/electron-api.js +2 -1
  298. package/lib/electron-common/electron-api.js.map +1 -1
  299. package/lib/{electron-browser/window → electron-common}/electron-window-preferences.d.ts +2 -1
  300. package/lib/electron-common/electron-window-preferences.d.ts.map +1 -0
  301. package/lib/{electron-browser/window → electron-common}/electron-window-preferences.js +7 -7
  302. package/lib/electron-common/electron-window-preferences.js.map +1 -0
  303. package/lib/electron-main/electron-api-main.d.ts.map +1 -1
  304. package/lib/electron-main/electron-api-main.js +9 -0
  305. package/lib/electron-main/electron-api-main.js.map +1 -1
  306. package/lib/electron-node/window/electron-window-module.d.ts +4 -0
  307. package/lib/electron-node/window/electron-window-module.d.ts.map +1 -0
  308. package/lib/{browser/preferences/preference-scope.js → electron-node/window/electron-window-module.js} +7 -5
  309. package/lib/electron-node/window/electron-window-module.js.map +1 -0
  310. package/lib/node/backend-application-module.d.ts.map +1 -1
  311. package/lib/node/backend-application-module.js +13 -0
  312. package/lib/node/backend-application-module.js.map +1 -1
  313. package/lib/node/backend-application.js +1 -1
  314. package/lib/node/logger-cli-contribution.d.ts +7 -1
  315. package/lib/node/logger-cli-contribution.d.ts.map +1 -1
  316. package/lib/node/logger-cli-contribution.js +22 -10
  317. package/lib/node/logger-cli-contribution.js.map +1 -1
  318. package/lib/node/logger-cli-contribution.spec.js +13 -2
  319. package/lib/node/logger-cli-contribution.spec.js.map +1 -1
  320. package/package.json +8 -7
  321. package/src/browser/breadcrumbs/breadcrumbs-renderer.tsx +1 -1
  322. package/src/browser/common-frontend-contribution.ts +2 -3
  323. package/src/browser/dialogs/react-dialog.tsx +1 -0
  324. package/src/browser/encoding-registry.ts +1 -1
  325. package/src/browser/frontend-application-bindings.ts +8 -13
  326. package/src/browser/frontend-application-module.ts +13 -6
  327. package/src/browser/frontend-application.ts +1 -1
  328. package/src/browser/hover-service.ts +1 -2
  329. package/src/browser/icon-theme-service.ts +3 -2
  330. package/src/browser/index.ts +0 -1
  331. package/src/browser/json-schema-store.ts +9 -1
  332. package/src/browser/keybinding.spec.ts +1 -1
  333. package/src/browser/keybinding.ts +1 -1
  334. package/src/browser/menu/browser-menu-plugin.ts +7 -7
  335. package/src/browser/open-with-service.ts +1 -1
  336. package/src/browser/opener-service.ts +1 -2
  337. package/src/browser/preferences/frontend-config-preference-contributions.ts +52 -0
  338. package/src/browser/preferences/index.ts +0 -5
  339. package/src/browser/preferences/preference-contribution.ts +16 -398
  340. package/src/browser/preferences/preference-proxy.spec.ts +27 -17
  341. package/src/browser/preferences/preference-schema-provider.spec.ts +25 -37
  342. package/src/browser/preferences/preference-service.spec.ts +32 -56
  343. package/src/browser/preferences/preference-validation-service.spec.ts +27 -19
  344. package/src/browser/preferences/preference-validation-service.ts +60 -41
  345. package/src/browser/preferences/test/mock-preference-provider.ts +2 -5
  346. package/src/browser/preferences/test/mock-preference-proxy.ts +1 -2
  347. package/src/browser/preferences/test/mock-preference-service.ts +1 -4
  348. package/src/browser/quick-input/quick-command-service.ts +1 -1
  349. package/src/browser/request/browser-request-service.ts +4 -4
  350. package/src/browser/saveable.ts +8 -0
  351. package/src/browser/secondary-window-handler.ts +189 -29
  352. package/src/browser/shell/application-shell.ts +36 -13
  353. package/src/browser/shell/shell-layout-restorer.ts +15 -0
  354. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.tsx +139 -40
  355. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.ts +12 -6
  356. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.tsx +2 -2
  357. package/src/browser/shell/tab-bar-toolbar/tab-toolbar-item.tsx +2 -2
  358. package/src/browser/shell/tab-bars.ts +1 -1
  359. package/src/browser/shell/theia-dock-panel.ts +101 -2
  360. package/src/browser/status-bar/status-bar.tsx +3 -2
  361. package/src/browser/style/dockpanel.css +7 -0
  362. package/src/browser/theming.ts +7 -6
  363. package/src/browser/tooltip-service.tsx +1 -1
  364. package/src/browser/tree/index.ts +0 -1
  365. package/src/browser/tree/tree-widget.tsx +6 -5
  366. package/src/browser/view-container.ts +5 -5
  367. package/src/browser/widgets/extractable-widget.ts +3 -0
  368. package/src/browser/widgets/widget.ts +4 -4
  369. package/src/browser/window/default-secondary-window-service.ts +54 -17
  370. package/src/browser/window/default-window-service.spec.ts +1 -1
  371. package/src/browser/window/default-window-service.ts +1 -1
  372. package/src/browser/window/secondary-window-service.ts +23 -2
  373. package/src/browser/window/window-title-service.ts +1 -1
  374. package/src/{browser → common}/core-preferences.ts +16 -17
  375. package/src/common/index.ts +4 -0
  376. package/src/common/inversify-utils.ts +63 -0
  377. package/src/common/json-schema.ts +1 -0
  378. package/src/common/menu/menu-types.ts +2 -0
  379. package/src/common/preferences/defaults-preference-provider.ts +91 -0
  380. package/src/common/preferences/index.ts +27 -0
  381. package/src/{browser → common}/preferences/injectable-preference-proxy.ts +3 -3
  382. package/src/{browser → common}/preferences/preference-language-override-service.ts +12 -29
  383. package/src/common/preferences/preference-provider-impl.ts +165 -0
  384. package/src/{browser → common}/preferences/preference-provider.spec.ts +6 -5
  385. package/src/common/preferences/preference-provider.ts +164 -0
  386. package/src/{browser → common}/preferences/preference-proxy.ts +15 -14
  387. package/src/common/preferences/preference-schema-service.ts +434 -0
  388. package/src/common/preferences/preference-schema.ts +156 -64
  389. package/src/common/preferences/preference-scope.ts +5 -13
  390. package/src/{browser → common}/preferences/preference-service.ts +76 -63
  391. package/src/common/stream.ts +102 -1
  392. package/src/{browser/tree → common}/tree-preference.ts +2 -4
  393. package/src/electron-browser/menu/electron-context-menu-renderer.ts +2 -1
  394. package/src/electron-browser/menu/electron-main-menu-factory.ts +13 -11
  395. package/src/electron-browser/menu/electron-menu-contribution.ts +9 -6
  396. package/src/electron-browser/preload.ts +4 -1
  397. package/src/electron-browser/window/electron-secondary-window-service.ts +7 -4
  398. package/src/electron-browser/window/electron-window-module.ts +1 -1
  399. package/src/electron-browser/window/electron-window-service.ts +1 -1
  400. package/src/electron-common/electron-api.ts +2 -0
  401. package/src/{electron-browser/window → electron-common}/electron-window-preferences.ts +6 -6
  402. package/src/electron-main/electron-api-main.ts +11 -1
  403. package/src/{browser/preferences/preference-scope.ts → electron-node/window/electron-window-module.ts} +7 -3
  404. package/src/node/backend-application-module.ts +28 -1
  405. package/src/node/backend-application.ts +1 -1
  406. package/src/node/logger-cli-contribution.spec.ts +17 -2
  407. package/src/node/logger-cli-contribution.ts +18 -3
  408. package/lib/browser/core-preferences.d.ts.map +0 -1
  409. package/lib/browser/core-preferences.js.map +0 -1
  410. package/lib/browser/preferences/injectable-preference-proxy.d.ts.map +0 -1
  411. package/lib/browser/preferences/injectable-preference-proxy.js.map +0 -1
  412. package/lib/browser/preferences/preference-configurations.d.ts.map +0 -1
  413. package/lib/browser/preferences/preference-configurations.js.map +0 -1
  414. package/lib/browser/preferences/preference-language-override-service.d.ts.map +0 -1
  415. package/lib/browser/preferences/preference-language-override-service.js.map +0 -1
  416. package/lib/browser/preferences/preference-provider.d.ts.map +0 -1
  417. package/lib/browser/preferences/preference-provider.js.map +0 -1
  418. package/lib/browser/preferences/preference-provider.spec.d.ts.map +0 -1
  419. package/lib/browser/preferences/preference-provider.spec.js.map +0 -1
  420. package/lib/browser/preferences/preference-proxy.d.ts.map +0 -1
  421. package/lib/browser/preferences/preference-proxy.js.map +0 -1
  422. package/lib/browser/preferences/preference-scope.d.ts +0 -3
  423. package/lib/browser/preferences/preference-scope.d.ts.map +0 -1
  424. package/lib/browser/preferences/preference-scope.js.map +0 -1
  425. package/lib/browser/preferences/preference-service.d.ts.map +0 -1
  426. package/lib/browser/preferences/preference-service.js.map +0 -1
  427. package/lib/browser/supported-encodings.d.ts.map +0 -1
  428. package/lib/browser/supported-encodings.js.map +0 -1
  429. package/lib/browser/tree/tree-preference.d.ts.map +0 -1
  430. package/lib/browser/tree/tree-preference.js.map +0 -1
  431. package/lib/electron-browser/window/electron-window-preferences.d.ts.map +0 -1
  432. package/lib/electron-browser/window/electron-window-preferences.js.map +0 -1
  433. package/src/browser/preferences/preference-provider.ts +0 -277
  434. /package/lib/{browser → common}/preferences/preference-configurations.d.ts +0 -0
  435. /package/lib/{browser → common}/preferences/preference-configurations.js +0 -0
  436. /package/lib/{browser → common}/preferences/preference-provider.spec.d.ts +0 -0
  437. /package/lib/{browser → common}/supported-encodings.d.ts +0 -0
  438. /package/lib/{browser → common}/supported-encodings.js +0 -0
  439. /package/src/{browser → common}/preferences/preference-configurations.ts +0 -0
  440. /package/src/{browser → common}/supported-encodings.ts +0 -0
@@ -23,37 +23,36 @@ import { ACTION_ITEM, codicon } from '../../widgets';
23
23
  import { ContextMenuRenderer } from '../../context-menu-renderer';
24
24
  import { TabBarToolbarItem } from './tab-toolbar-item';
25
25
  import { ContextKeyService, ContextMatcher } from '../../context-key-service';
26
- import { CommandMenu, CompoundMenuNode, MenuModelRegistry, MenuNode, MenuPath, RenderedMenuNode } from '../../../common/menu';
26
+ import { CommandMenu, CompoundMenuNode, ContextExpressionMatcher, Group, MenuModelRegistry, MenuNode, MenuPath, RenderedMenuNode, Submenu } from '../../../common/menu';
27
27
 
28
28
  export const TOOLBAR_WRAPPER_ID_SUFFIX = '-as-tabbar-toolbar-item';
29
29
 
30
30
  abstract class AbstractToolbarMenuWrapper {
31
31
 
32
32
  constructor(
33
- protected readonly effectiveMenuPath: MenuPath,
33
+ readonly effectiveMenuPath: MenuPath,
34
34
  protected readonly commandRegistry: CommandRegistry,
35
35
  protected readonly menuRegistry: MenuModelRegistry,
36
36
  protected readonly contextKeyService: ContextKeyService,
37
37
  protected readonly contextMenuRenderer: ContextMenuRenderer) {
38
38
  }
39
39
 
40
- protected abstract menuPath?: MenuPath;
41
- protected abstract menuNode?: MenuNode;
40
+ protected abstract menuNode: MenuNode | undefined;
42
41
  protected abstract id: string;
43
42
  protected abstract icon: string | undefined;
44
43
  protected abstract tooltip: string | undefined;
45
44
  protected abstract text: string | undefined;
46
- protected abstract executeCommand(e: React.MouseEvent<HTMLDivElement, MouseEvent>): void;
45
+ protected abstract executeCommand(widget: Widget, e: React.MouseEvent<HTMLDivElement, MouseEvent>): void;
47
46
 
48
- isEnabled(): boolean {
47
+ isEnabled(widget: Widget): boolean {
49
48
  if (CommandMenu.is(this.menuNode)) {
50
- return this.menuNode.isEnabled(this.effectiveMenuPath);
49
+ return this.menuNode.isEnabled(this.effectiveMenuPath, widget);
51
50
  }
52
51
  return true;
53
52
  }
54
- isToggled(): boolean {
53
+ isToggled(widget: Widget): boolean {
55
54
  if (CommandMenu.is(this.menuNode) && this.menuNode.isToggled) {
56
- return !!this.menuNode.isToggled(this.effectiveMenuPath);
55
+ return !!this.menuNode.isToggled(this.effectiveMenuPath, widget);
57
56
  }
58
57
  return false;
59
58
  }
@@ -61,9 +60,7 @@ abstract class AbstractToolbarMenuWrapper {
61
60
  return this.renderMenuItem(widget);
62
61
  }
63
62
 
64
- toMenuNode?(): MenuNode | undefined {
65
- return this.menuNode;
66
- }
63
+ abstract toMenuNode(): MenuNode | undefined;
67
64
 
68
65
  /**
69
66
  * Presents the menu to popup on the `event` that is the clicking of
@@ -78,7 +75,7 @@ abstract class AbstractToolbarMenuWrapper {
78
75
  const anchor = toAnchor(event);
79
76
 
80
77
  this.contextMenuRenderer.render({
81
- menuPath: menuPath,
78
+ menuPath: this.effectiveMenuPath,
82
79
  menu: this.menuNode as CompoundMenuNode,
83
80
  args: [widget],
84
81
  anchor,
@@ -97,56 +94,47 @@ abstract class AbstractToolbarMenuWrapper {
97
94
  protected renderMenuItem(widget: Widget): React.ReactNode {
98
95
  const icon = this.icon || 'ellipsis';
99
96
  const contextMatcher: ContextMatcher = this.contextKeyService;
97
+ const className = `${icon} ${ACTION_ITEM}`;
100
98
  if (CompoundMenuNode.is(this.menuNode) && !this.menuNode.isEmpty(this.effectiveMenuPath, this.contextKeyService, widget.node)) {
101
-
102
99
  return <div key={this.id} className={TabBarToolbar.Styles.TAB_BAR_TOOLBAR_ITEM + ' enabled menu'}>
103
- <div className={codicon(icon, true)}
104
- title={this.text}
105
- onClick={e => this.executeCommand(e)}
100
+ <div className={className}
101
+ title={this.tooltip || this.text}
102
+ onClick={e => this.executeCommand(widget, e)}
106
103
  />
107
- <div className={ACTION_ITEM} onClick={event => this.showPopupMenu(widget, this.menuPath!, event, contextMatcher)} >
104
+ <div className={ACTION_ITEM} onClick={event => this.showPopupMenu(widget, this.effectiveMenuPath!, event, contextMatcher)} >
108
105
  <div className={codicon('chevron-down') + ' chevron'} />
109
106
  </div>
110
107
  </div>;
111
108
  } else {
112
109
  return <div key={this.id} className={TabBarToolbar.Styles.TAB_BAR_TOOLBAR_ITEM + ' enabled menu'}>
113
- <div className={codicon(icon, true)}
114
- title={this.text}
115
- onClick={e => this.executeCommand(e)}
110
+ <div className={className}
111
+ title={this.tooltip || this.text}
112
+ onClick={e => this.executeCommand(widget, e)}
116
113
  />
117
114
  </div>;
118
115
  }
119
116
  }
120
117
  }
121
118
 
122
- export class ToolbarMenuNodeWrapper extends AbstractToolbarMenuWrapper implements TabBarToolbarItem {
119
+ export class SubmenuAsToolbarItemWrapper extends AbstractToolbarMenuWrapper implements TabBarToolbarItem {
123
120
  constructor(
124
121
  effectiveMenuPath: MenuPath,
125
122
  commandRegistry: CommandRegistry,
126
123
  menuRegistry: MenuModelRegistry,
127
124
  contextKeyService: ContextKeyService,
128
125
  contextMenuRenderer: ContextMenuRenderer,
129
- protected readonly menuNode: MenuNode & RenderedMenuNode,
130
- readonly group: string | undefined,
131
- readonly menuPath?: MenuPath) {
126
+ protected readonly menuNode: Submenu,
127
+ readonly group: string | undefined) {
132
128
  super(effectiveMenuPath, commandRegistry, menuRegistry, contextKeyService, contextMenuRenderer);
133
129
  }
130
+ priority?: number | undefined;
134
131
 
135
- executeCommand(e: React.MouseEvent<HTMLDivElement, MouseEvent>): void {
136
- if (CommandMenu.is(this.menuNode)) {
137
- this.menuNode.run(this.effectiveMenuPath);
138
- }
132
+ executeCommand(widget: Widget, e: React.MouseEvent<HTMLDivElement, MouseEvent>): void {
139
133
  }
140
134
 
141
135
  isVisible(widget: Widget): boolean {
142
- const menuNodeVisible = this.menuNode.isVisible(this.effectiveMenuPath, this.contextKeyService, widget.node);
143
- if (CommandMenu.is(this.menuNode)) {
144
- return menuNodeVisible;
145
- } else if (CompoundMenuNode.is(this.menuNode)) {
146
- return menuNodeVisible && !MenuModelRegistry.isEmpty(this.menuNode);
147
- } else {
148
- return menuNodeVisible;
149
- }
136
+ const menuNodeVisible = this.menuNode.isVisible(this.effectiveMenuPath, this.contextKeyService, widget.node, widget);
137
+ return menuNodeVisible && !MenuModelRegistry.isEmpty(this.menuNode);
150
138
  }
151
139
 
152
140
  get id(): string { return this.menuNode.id + TOOLBAR_WRAPPER_ID_SUFFIX; }
@@ -158,9 +146,48 @@ export class ToolbarMenuNodeWrapper extends AbstractToolbarMenuWrapper implement
158
146
  get onDidChange(): Event<void> | undefined {
159
147
  return this.menuNode.onDidChange;
160
148
  }
149
+
150
+ override toMenuNode(): Group | undefined {
151
+ return new ToolbarItemAsSubmenuWrapper(this.menuNode!, this.effectiveMenuPath);
152
+ };
161
153
  }
162
154
 
163
- export class ToolbarSubmenuWrapper extends AbstractToolbarMenuWrapper implements TabBarToolbarItem {
155
+ export class CommandMenuAsToolbarItemWrapper extends AbstractToolbarMenuWrapper implements TabBarToolbarItem {
156
+ constructor(
157
+ effectiveMenuPath: MenuPath,
158
+ commandRegistry: CommandRegistry,
159
+ menuRegistry: MenuModelRegistry,
160
+ contextKeyService: ContextKeyService,
161
+ contextMenuRenderer: ContextMenuRenderer,
162
+ protected readonly menuNode: CommandMenu,
163
+ readonly group: string | undefined) {
164
+ super(effectiveMenuPath, commandRegistry, menuRegistry, contextKeyService, contextMenuRenderer);
165
+ }
166
+
167
+ isVisible(widget: Widget): boolean {
168
+ return this.menuNode.isVisible(this.effectiveMenuPath, this.contextKeyService, widget.node, widget);
169
+ }
170
+
171
+ executeCommand(widget: Widget, e: React.MouseEvent<HTMLDivElement, MouseEvent>): void {
172
+ this.menuNode.run(this.effectiveMenuPath, widget);
173
+ }
174
+
175
+ get id(): string { return this.menuNode.id + TOOLBAR_WRAPPER_ID_SUFFIX; }
176
+ get icon(): string | undefined { return this.menuNode.icon; }
177
+ get tooltip(): string | undefined { return this.menuNode.label; }
178
+ get text(): string | undefined {
179
+ return (this.group === NAVIGATION || this.group === undefined) ? undefined : this.menuNode.label;
180
+ }
181
+ get onDidChange(): Event<void> | undefined {
182
+ return this.menuNode.onDidChange;
183
+ }
184
+
185
+ override toMenuNode(): MenuNode | undefined {
186
+ return new ToolbarItemAsCommandMenuWrapper(this.menuNode, this.effectiveMenuPath);
187
+ }
188
+ }
189
+
190
+ export class ToolbarActionWrapper extends AbstractToolbarMenuWrapper implements TabBarToolbarItem {
164
191
  constructor(
165
192
  effectiveMenuPath: MenuPath,
166
193
  commandRegistry: CommandRegistry,
@@ -176,7 +203,7 @@ export class ToolbarSubmenuWrapper extends AbstractToolbarMenuWrapper implements
176
203
  return this.toolbarItem.command ? this.commandRegistry.isEnabled(this.toolbarItem.command, widget) : !!this.toolbarItem.menuPath;
177
204
  }
178
205
 
179
- protected executeCommand(e: React.MouseEvent<HTMLElement>, widget?: Widget): void {
206
+ protected executeCommand(widget: Widget, e: React.MouseEvent<HTMLElement>): void {
180
207
  e.preventDefault();
181
208
  e.stopPropagation();
182
209
 
@@ -232,8 +259,80 @@ export class ToolbarSubmenuWrapper extends AbstractToolbarMenuWrapper implements
232
259
  return this.toolbarItem.menuPath!;
233
260
  }
234
261
 
235
- get menuNode(): MenuNode | undefined {
262
+ get menuNode(): CompoundMenuNode | undefined {
236
263
  return this.menuRegistry.getMenu(this.menuPath);
237
264
  }
265
+
266
+ override toMenuNode(): MenuNode | undefined {
267
+ return new ToolbarItemAsSubmenuWrapper(this.menuNode!, this.effectiveMenuPath);
268
+ }
238
269
  }
239
270
 
271
+ /**
272
+ * This class wraps a menu node, but replaces the effective menu path. Command parameters need to be mapped
273
+ * for commands contributed by extension and this mapping is keyed by the menu path
274
+ */
275
+ abstract class AbstractMenuNodeAsToolbarItemWrapper<T extends MenuNode> {
276
+ constructor(protected readonly menuNode: T, readonly effectiveMenuPath: MenuPath) { }
277
+
278
+ get label(): string | undefined {
279
+ if (RenderedMenuNode.is(this.menuNode)) {
280
+ return this.menuNode.label;
281
+ }
282
+ };
283
+ /**
284
+ * Icon classes for the menu node. If present, these will produce an icon to the left of the label in browser-style menus.
285
+ */
286
+ get icon(): string | undefined {
287
+ if (RenderedMenuNode.is(this.menuNode)) {
288
+ return this.menuNode.label;
289
+ }
290
+ }
291
+ get id(): string {
292
+ return this.menuNode.id;
293
+ }
294
+ get sortString(): string {
295
+ return this.menuNode.sortString;
296
+ }
297
+
298
+ isVisible<K>(effectiveMenuPath: MenuPath, contextMatcher: ContextExpressionMatcher<K>, context: K | undefined, ...args: unknown[]): boolean {
299
+ return this.menuNode!.isVisible(this.effectiveMenuPath, contextMatcher, context, args);
300
+ }
301
+ }
302
+
303
+ /**
304
+ * Wrapper form submenu nodes
305
+ */
306
+ class ToolbarItemAsSubmenuWrapper extends AbstractMenuNodeAsToolbarItemWrapper<CompoundMenuNode> implements Group {
307
+
308
+ get contextKeyOverlays(): Record<string, string> | undefined {
309
+ return this.menuNode.contextKeyOverlays;
310
+ }
311
+ isEmpty<T>(effectiveMenuPath: MenuPath, contextMatcher: ContextExpressionMatcher<T>, context: T | undefined, ...args: unknown[]): boolean {
312
+ return this.menuNode.isEmpty(this.effectiveMenuPath, contextMatcher, context, args);
313
+ }
314
+ get children(): MenuNode[] {
315
+ return this.menuNode.children;
316
+ }
317
+
318
+ }
319
+ /**
320
+ * Wrapper for command menus
321
+ */
322
+ class ToolbarItemAsCommandMenuWrapper extends AbstractMenuNodeAsToolbarItemWrapper<CommandMenu> implements CommandMenu {
323
+
324
+ isEnabled(effectiveMenuPath: MenuPath, ...args: unknown[]): boolean {
325
+ return this.menuNode.isEnabled(this.effectiveMenuPath, ...args);
326
+ }
327
+ isToggled(effectiveMenuPath: MenuPath, ...args: unknown[]): boolean {
328
+ return this.menuNode.isToggled(this.effectiveMenuPath, ...args);
329
+ }
330
+ run(effectiveMenuPath: MenuPath, ...args: unknown[]): Promise<void> {
331
+ return this.menuNode.run(this.effectiveMenuPath, args);
332
+ }
333
+
334
+ override get label(): string {
335
+ return super.label!;
336
+ }
337
+
338
+ }
@@ -22,7 +22,7 @@ import { ContextKeyService } from '../../context-key-service';
22
22
  import { FrontendApplicationContribution } from '../../frontend-application-contribution';
23
23
  import { Widget } from '../../widgets';
24
24
  import { ReactTabBarToolbarAction, RenderedToolbarAction } from './tab-bar-toolbar-types';
25
- import { ToolbarMenuNodeWrapper, ToolbarSubmenuWrapper } from './tab-bar-toolbar-menu-adapters';
25
+ import { CommandMenuAsToolbarItemWrapper, SubmenuAsToolbarItemWrapper, ToolbarActionWrapper } from './tab-bar-toolbar-menu-adapters';
26
26
  import { KeybindingRegistry } from '../../keybinding';
27
27
  import { LabelParser } from '../../label-parser';
28
28
  import { ContextMenuRenderer } from '../../context-menu-renderer';
@@ -90,7 +90,7 @@ export class TabBarToolbarRegistry implements FrontendApplicationContribution {
90
90
  return this.doRegisterItem(new ReactToolbarItemImpl(this.commandRegistry, this.contextKeyService, item));
91
91
  } else {
92
92
  if (item.menuPath) {
93
- return this.doRegisterItem(new ToolbarSubmenuWrapper(item.menuPath,
93
+ return this.doRegisterItem(new ToolbarActionWrapper(item.menuPath,
94
94
  this.commandRegistry, this.menuRegistry, this.contextKeyService, this.contextMenuRenderer, item));
95
95
  } else {
96
96
  const wrapper = new RenderedToolbarItemImpl(this.commandRegistry, this.contextKeyService, this.keybindingRegistry, this.labelParser, item);
@@ -146,13 +146,19 @@ export class TabBarToolbarRegistry implements FrontendApplicationContribution {
146
146
  for (const grandchild of child.children) {
147
147
  if (grandchild.isVisible([...delegate.menuPath, child.id, grandchild.id],
148
148
  this.contextKeyService, widget.node) && RenderedMenuNode.is(grandchild)) {
149
- result.push(new ToolbarMenuNodeWrapper([...delegate.menuPath, child.id, grandchild.id], this.commandRegistry, this.menuRegistry,
150
- this.contextKeyService, this.contextMenuRenderer, grandchild, child.id, delegate.menuPath));
149
+ if (CommandMenu.is(grandchild)) {
150
+ result.push(new CommandMenuAsToolbarItemWrapper([...delegate.menuPath, child.id, grandchild.id], this.commandRegistry,
151
+ this.menuRegistry, this.contextKeyService, this.contextMenuRenderer, grandchild, child.id));
152
+ } else if (CompoundMenuNode.is(grandchild)) {
153
+ result.push(new SubmenuAsToolbarItemWrapper([...delegate.menuPath, child.id, grandchild.id], this.commandRegistry, this.menuRegistry,
154
+ this.contextKeyService, this.contextMenuRenderer, grandchild, child.id));
155
+ }
156
+
151
157
  }
152
158
  }
153
159
  } else if (CommandMenu.is(child)) {
154
- result.push(new ToolbarMenuNodeWrapper([...delegate.menuPath, child.id], this.commandRegistry, this.menuRegistry,
155
- this.contextKeyService, this.contextMenuRenderer, child, undefined, delegate.menuPath));
160
+ result.push(new CommandMenuAsToolbarItemWrapper([...delegate.menuPath, child.id], this.commandRegistry, this.menuRegistry,
161
+ this.contextKeyService, this.contextMenuRenderer, child, undefined));
156
162
  }
157
163
  }
158
164
  }
@@ -22,7 +22,7 @@ import { Anchor, ContextMenuAccess, ContextMenuRenderer } from '../../context-me
22
22
  import { LabelParser } from '../../label-parser';
23
23
  import { codicon, ReactWidget, Widget } from '../../widgets';
24
24
  import { TabBarToolbarRegistry } from './tab-bar-toolbar-registry';
25
- import { TabBarDelegator, TabBarToolbarAction } from './tab-bar-toolbar-types';
25
+ import { TAB_BAR_TOOLBAR_CONTEXT_MENU, TabBarDelegator, TabBarToolbarAction } from './tab-bar-toolbar-types';
26
26
  import { KeybindingRegistry } from '../..//keybinding';
27
27
  import { TabBarToolbarItem } from './tab-toolbar-item';
28
28
  import { GroupImpl, MenuModelRegistry } from '../../../common/menu';
@@ -173,7 +173,7 @@ export class TabBarToolbar extends ReactWidget {
173
173
  }
174
174
  return this.contextMenuRenderer.render({
175
175
  menu: MenuModelRegistry.removeSingleRootNodes(menu),
176
- menuPath: ['contextMenu'],
176
+ menuPath: TAB_BAR_TOOLBAR_CONTEXT_MENU,
177
177
  args: [this.current],
178
178
  anchor,
179
179
  context: this.current?.node || this.node,
@@ -28,8 +28,8 @@ import { ActionMenuNode, GroupImpl, MenuNode } from '../../../common/menu';
28
28
  export interface TabBarToolbarItem {
29
29
  id: string;
30
30
  isVisible(widget: Widget): boolean;
31
- isEnabled(widget?: Widget): boolean;
32
- isToggled(): boolean;
31
+ isEnabled(widget: Widget): boolean;
32
+ isToggled(widget: Widget): boolean;
33
33
  render(widget?: Widget): React.ReactNode;
34
34
  onDidChange?: Event<void>;
35
35
  group?: string;
@@ -32,7 +32,7 @@ import { BreadcrumbsRenderer, BreadcrumbsRendererFactory } from '../breadcrumbs/
32
32
  import { NavigatableWidget } from '../navigatable-types';
33
33
  import { Drag } from '@lumino/dragdrop';
34
34
  import { LOCKED_CLASS, PINNED_CLASS } from '../widgets/widget';
35
- import { CorePreferences } from '../core-preferences';
35
+ import { CorePreferences } from '../../common/core-preferences';
36
36
  import { HoverService } from '../hover-service';
37
37
  import { Root, createRoot } from 'react-dom/client';
38
38
  import { SelectComponent } from '../widgets/select-component';
@@ -18,7 +18,7 @@ import { find, toArray } from '@lumino/algorithm';
18
18
  import { TabBar, Widget, DockPanel, Title } from '@lumino/widgets';
19
19
  import { Signal } from '@lumino/signaling';
20
20
  import { Disposable, DisposableCollection } from '../../common/disposable';
21
- import { CorePreferences } from '../core-preferences';
21
+ import { CorePreferences } from '../../common/core-preferences';
22
22
  import { Emitter, Event, environment } from '../../common';
23
23
  import { ToolbarAwareTabBar } from './tab-bars';
24
24
 
@@ -47,6 +47,8 @@ export class TheiaDockPanel extends DockPanel {
47
47
  readonly widgetRemoved = new Signal<this, Widget>(this);
48
48
 
49
49
  protected readonly onDidChangeCurrentEmitter = new Emitter<Title<Widget> | undefined>();
50
+ protected disableDND: boolean | undefined = false;
51
+ protected tabWithDNDDisabledStyling?: HTMLElement = undefined;
50
52
 
51
53
  get onDidChangeCurrent(): Event<Title<Widget> | undefined> {
52
54
  return this.onDidChangeCurrentEmitter.event;
@@ -57,6 +59,7 @@ export class TheiaDockPanel extends DockPanel {
57
59
  protected readonly maximizeCallback?: (area: TheiaDockPanel) => void
58
60
  ) {
59
61
  super(options);
62
+ this.disableDND = TheiaDockPanel.isTheiaDockPanelIOptions(options) && options.disableDragAndDrop;
60
63
  this['_onCurrentChanged'] = (sender: TabBar<Widget>, args: TabBar.ICurrentChangedArgs<Widget>) => {
61
64
  this.markAsCurrent(args.currentTitle || undefined);
62
65
  super['_onCurrentChanged'](sender, args);
@@ -68,12 +71,72 @@ export class TheiaDockPanel extends DockPanel {
68
71
  if (tabBar instanceof ToolbarAwareTabBar) {
69
72
  tabBar.setDockPanel(this);
70
73
  }
74
+ if (this.disableDND) {
75
+ tabBar['tabDetachRequested'].disconnect(this['_onTabDetachRequested'], this);
76
+ tabBar['tabDetachRequested'].connect(this.onTabDetachRequestedWithDisabledDND, this);
77
+
78
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, no-null/no-null
79
+ let dragDataValue: any = null;
80
+ Object.defineProperty(tabBar, '_dragData', {
81
+ get: () => dragDataValue,
82
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
+ set: (value: any) => {
84
+ dragDataValue = value;
85
+ // eslint-disable-next-line no-null/no-null
86
+ if (value === null) {
87
+ this.onNullTabDragDataWithDisabledDND();
88
+ }
89
+ },
90
+ configurable: true
91
+ });
92
+ }
71
93
  return tabBar;
72
94
  };
73
95
  this['_onTabActivateRequested'] = (sender: TabBar<Widget>, args: TabBar.ITabActivateRequestedArgs<Widget>) => {
74
96
  this.markAsCurrent(args.title);
75
97
  super['_onTabActivateRequested'](sender, args);
76
98
  };
99
+ this['_onTabCloseRequested'] = (sender: TabBar<Widget>, args: TabBar.ITabCloseRequestedArgs<Widget>) => {
100
+ if (TheiaDockPanel.isTheiaDockPanelIOptions(options) && options.closeHandler !== undefined) {
101
+ if (options.closeHandler(sender, args)) {
102
+ return;
103
+ }
104
+ }
105
+ super['_onTabCloseRequested'](sender, args);
106
+ };
107
+ }
108
+
109
+ protected onTabDetachRequestedWithDisabledDND(sender: TabBar<Widget>, args: TabBar.ITabDetachRequestedArgs<Widget>): void {
110
+ // don't process the detach request at all. We still want to support other drag starts, e.g. tab reorder
111
+ // provide visual feedback that DnD is disabled by adding not-allowed class
112
+ const tab = sender.contentNode.children[args.index] as HTMLElement;
113
+ if (tab) {
114
+ tab.classList.add('theia-drag-not-allowed');
115
+ this.tabWithDNDDisabledStyling = tab;
116
+ }
117
+ }
118
+
119
+ protected onNullTabDragDataWithDisabledDND(): void {
120
+ if (this.tabWithDNDDisabledStyling) {
121
+ this.tabWithDNDDisabledStyling.classList.remove('theia-drag-not-allowed');
122
+ this.tabWithDNDDisabledStyling = undefined;
123
+ }
124
+ }
125
+
126
+ override handleEvent(event: globalThis.Event): void {
127
+ if (this.disableDND) {
128
+ switch (event.type) {
129
+ case 'lm-dragenter':
130
+ case 'lm-dragleave':
131
+ case 'lm-dragover':
132
+ case 'lm-drop':
133
+ /* no-op */
134
+ break;
135
+ default:
136
+ super.handleEvent(event);
137
+ }
138
+ }
139
+ super.handleEvent(event);
77
140
  }
78
141
 
79
142
  toggleMaximized(): void {
@@ -178,11 +241,47 @@ export class TheiaDockPanel extends DockPanel {
178
241
  }
179
242
  return undefined;
180
243
  }
244
+
245
+ override dispose(): void {
246
+ super.dispose();
247
+ this.onDidChangeCurrentEmitter.dispose();
248
+ this._currentTitle = undefined;
249
+ this.toDisposeOnMarkAsCurrent.dispose();
250
+ }
181
251
  }
182
252
  export namespace TheiaDockPanel {
183
253
  export const Factory = Symbol('TheiaDockPanel#Factory');
184
254
  export interface Factory {
185
- (options?: DockPanel.IOptions, maximizeCallback?: (area: TheiaDockPanel) => void): TheiaDockPanel;
255
+ (options?: DockPanel.IOptions | TheiaDockPanel.IOptions, maximizeCallback?: (area: TheiaDockPanel) => void): TheiaDockPanel;
256
+ }
257
+
258
+ export interface IOptions extends DockPanel.IOptions {
259
+ /** whether drag and drop for tabs should be disabled */
260
+ disableDragAndDrop?: boolean;
261
+
262
+ /**
263
+ * @param sender the tab bar
264
+ * @param args the widget (title)
265
+ * @returns true if the request was handled by this handler, false if the tabbar should handle the request
266
+ */
267
+ closeHandler?: (sender: TabBar<Widget>, args: TabBar.ITabCloseRequestedArgs<Widget>) => boolean;
268
+ }
269
+
270
+ export function isTheiaDockPanelIOptions(options: DockPanel.IOptions | undefined): options is IOptions {
271
+ if (options === undefined) {
272
+ return false;
273
+ }
274
+ if ('disableDragAndDrop' in options) {
275
+ if (options.disableDragAndDrop !== undefined && typeof options.disableDragAndDrop !== 'boolean') {
276
+ return false;
277
+ }
278
+ }
279
+ if ('closeHandler' in options) {
280
+ if (options.closeHandler !== undefined && typeof options.closeHandler !== 'function') {
281
+ return false;
282
+ }
283
+ }
284
+ return true;
186
285
  }
187
286
 
188
287
  export interface AddOptions extends DockPanel.IAddOptions {
@@ -21,11 +21,12 @@ import { CommandService } from '../../common';
21
21
  import { ReactWidget } from '../widgets/react-widget';
22
22
  import { FrontendApplicationStateService } from '../frontend-application-state';
23
23
  import { LabelParser, LabelIcon } from '../label-parser';
24
- import { PreferenceService } from '../preferences';
25
24
  import { StatusBar, StatusBarEntry, StatusBarAlignment, StatusBarViewEntry } from './status-bar-types';
26
25
  import { StatusBarViewModel } from './status-bar-view-model';
27
26
  import { HoverService } from '../hover-service';
28
27
  import { codicon } from '../widgets';
28
+ import { PreferenceService } from '../../common/preferences';
29
+ import { MarkdownString } from '../../common/markdown-rendering';
29
30
  export { StatusBar, StatusBarAlignment, StatusBarEntry };
30
31
 
31
32
  @injectable()
@@ -122,7 +123,7 @@ export class StatusBarImpl extends ReactWidget implements StatusBar {
122
123
  content: entry.tooltip!,
123
124
  target: e.currentTarget,
124
125
  position: 'top',
125
- interactive: entry.tooltip instanceof HTMLElement,
126
+ interactive: entry.tooltip instanceof HTMLElement || MarkdownString.is(entry.tooltip),
126
127
  });
127
128
  }
128
129
 
@@ -84,3 +84,10 @@
84
84
  .lm-DockPanel-overlay.lm-mod-root-bottom {
85
85
  background: var(--theia-panel-dropBackground);
86
86
  }
87
+
88
+ .lm-TabBar-tab.theia-drag-not-allowed {
89
+ cursor: not-allowed !important;
90
+ background-color: var(--theia-errorBackground) !important;
91
+ opacity: 0.8;
92
+ transition: background-color 0.3s ease;
93
+ }
@@ -14,15 +14,16 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- import { Emitter, Event } from '../common/event';
18
- import { Disposable } from '../common/disposable';
19
- import { FrontendApplicationConfigProvider } from './frontend-application-config-provider';
20
17
  import { ApplicationProps, DefaultTheme } from '@theia/application-package/lib/application-props';
21
- import { Theme, ThemeChangeEvent } from '../common/theme';
22
18
  import { inject, injectable, postConstruct } from 'inversify';
19
+ import { Disposable } from '../common/disposable';
20
+ import { Emitter, Event } from '../common/event';
21
+ import { PreferenceSchemaService } from '../common/preferences/preference-schema';
23
22
  import { Deferred } from '../common/promise-util';
24
- import { PreferenceSchemaProvider, PreferenceService } from './preferences';
23
+ import { Theme, ThemeChangeEvent } from '../common/theme';
24
+ import { FrontendApplicationConfigProvider } from './frontend-application-config-provider';
25
25
  import debounce = require('lodash.debounce');
26
+ import { PreferenceService } from '../common/preferences';
26
27
 
27
28
  const COLOR_THEME_PREFERENCE_KEY = 'workbench.colorTheme';
28
29
  const NO_THEME = { id: 'no-theme', label: 'Not a real theme.', type: 'dark' } as const;
@@ -32,7 +33,7 @@ export class ThemeService {
32
33
  static readonly STORAGE_KEY = 'theme';
33
34
 
34
35
  @inject(PreferenceService) protected readonly preferences: PreferenceService;
35
- @inject(PreferenceSchemaProvider) protected readonly schemaProvider: PreferenceSchemaProvider;
36
+ @inject(PreferenceSchemaService) protected readonly schemaProvider: PreferenceSchemaService;
36
37
 
37
38
  protected themes: { [id: string]: Theme } = {};
38
39
  protected activeTheme: Theme = NO_THEME;
@@ -18,8 +18,8 @@ import { injectable, inject, optional, postConstruct } from 'inversify';
18
18
  import * as React from 'react';
19
19
  import ReactTooltip from 'react-tooltip';
20
20
  import { ReactRenderer, RendererHost } from './widgets/react-renderer';
21
- import { CorePreferences } from './core-preferences';
22
21
  import { generateUuid } from '../common/uuid';
22
+ import { CorePreferences } from '../common/core-preferences';
23
23
 
24
24
  export const TooltipService = Symbol('TooltipService');
25
25
 
@@ -26,4 +26,3 @@ export * from './tree-container';
26
26
  export * from './tree-decorator';
27
27
  export * from './tree-search';
28
28
  export * from './tree-compression';
29
- export * from './tree-preference';
@@ -41,11 +41,11 @@ import { ElementExt } from '@lumino/domutils';
41
41
  import { TreeWidgetSelection } from './tree-widget-selection';
42
42
  import { MaybePromise } from '../../common/types';
43
43
  import { LabelProvider } from '../label-provider';
44
- import { CorePreferences } from '../core-preferences';
44
+ import { CorePreferences } from '../../common/core-preferences';
45
45
  import { TreeFocusService } from './tree-focus-service';
46
46
  import { useEffect } from 'react';
47
- import { PreferenceService, PreferenceChange } from '../preferences';
48
- import { PREFERENCE_NAME_TREE_INDENT } from './tree-preference';
47
+ import { PREFERENCE_NAME_TREE_INDENT } from '../../common/tree-preference';
48
+ import { PreferenceService, PreferenceChange } from '../../common/preferences';
49
49
 
50
50
  const debounce = require('lodash.debounce');
51
51
 
@@ -306,7 +306,7 @@ export class TreeWidget extends ReactWidget implements StatefulWidget {
306
306
  }),
307
307
  this.preferenceService.onPreferenceChanged((event: PreferenceChange) => {
308
308
  if (event.preferenceName === PREFERENCE_NAME_TREE_INDENT) {
309
- this.treeIndent = event.newValue;
309
+ this.treeIndent = event.newValue as number;
310
310
  this.update();
311
311
  }
312
312
  })
@@ -1442,9 +1442,10 @@ export class TreeWidget extends ReactWidget implements StatefulWidget {
1442
1442
  if (contextMenuPath) {
1443
1443
  const { x, y } = event.nativeEvent;
1444
1444
  const args = this.toContextMenuArgs(node);
1445
+ const target = event.currentTarget;
1445
1446
  setTimeout(() => this.contextMenuRenderer.render({
1446
1447
  menuPath: contextMenuPath,
1447
- context: event.currentTarget,
1448
+ context: target,
1448
1449
  anchor: { x, y },
1449
1450
  args
1450
1451
  }), 10);