@theia/core 1.22.1 → 1.23.0-next.26

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 (603) hide show
  1. package/README.md +5 -5
  2. package/lib/browser/about-dialog.js +5 -5
  3. package/lib/browser/about-dialog.js.map +1 -1
  4. package/lib/browser/authentication-service.d.ts +52 -22
  5. package/lib/browser/authentication-service.d.ts.map +1 -1
  6. package/lib/browser/authentication-service.js +49 -44
  7. package/lib/browser/authentication-service.js.map +1 -1
  8. package/lib/browser/breadcrumbs/breadcrumb-popup-container.js +5 -5
  9. package/lib/browser/breadcrumbs/breadcrumb-popup-container.js.map +1 -1
  10. package/lib/browser/breadcrumbs/breadcrumb-renderer.js +1 -1
  11. package/lib/browser/breadcrumbs/breadcrumb-renderer.js.map +1 -1
  12. package/lib/browser/breadcrumbs/breadcrumbs-renderer.d.ts.map +1 -1
  13. package/lib/browser/breadcrumbs/breadcrumbs-renderer.js +6 -6
  14. package/lib/browser/breadcrumbs/breadcrumbs-renderer.js.map +1 -1
  15. package/lib/browser/breadcrumbs/breadcrumbs-service.js +5 -5
  16. package/lib/browser/breadcrumbs/breadcrumbs-service.js.map +1 -1
  17. package/lib/browser/breadcrumbs/index.js +1 -1
  18. package/lib/browser/browser-clipboard-service.js +3 -3
  19. package/lib/browser/browser-clipboard-service.js.map +1 -1
  20. package/lib/browser/color-application-contribution.js +4 -4
  21. package/lib/browser/color-application-contribution.js.map +1 -1
  22. package/lib/browser/color-registry.js +2 -2
  23. package/lib/browser/color-registry.js.map +1 -1
  24. package/lib/browser/command-open-handler.js +2 -2
  25. package/lib/browser/command-open-handler.js.map +1 -1
  26. package/lib/browser/common-frontend-contribution.js +24 -24
  27. package/lib/browser/common-frontend-contribution.js.map +1 -1
  28. package/lib/browser/connection-status-service.js +15 -13
  29. package/lib/browser/connection-status-service.js.map +1 -1
  30. package/lib/browser/connection-status-service.spec.js +18 -18
  31. package/lib/browser/connection-status-service.spec.js.map +1 -1
  32. package/lib/browser/context-key-service.js +1 -1
  33. package/lib/browser/context-key-service.js.map +1 -1
  34. package/lib/browser/context-menu-renderer.js +1 -1
  35. package/lib/browser/context-menu-renderer.js.map +1 -1
  36. package/lib/browser/core-preferences.js +1 -1
  37. package/lib/browser/core-preferences.js.map +1 -1
  38. package/lib/browser/credentials-service.js +2 -2
  39. package/lib/browser/credentials-service.js.map +1 -1
  40. package/lib/browser/decorations-service.js +1 -1
  41. package/lib/browser/decorations-service.js.map +1 -1
  42. package/lib/browser/dialogs/react-dialog.js +2 -2
  43. package/lib/browser/dialogs/react-dialog.js.map +1 -1
  44. package/lib/browser/dialogs.js +11 -11
  45. package/lib/browser/dialogs.js.map +1 -1
  46. package/lib/browser/diff-uris.js +3 -3
  47. package/lib/browser/diff-uris.js.map +1 -1
  48. package/lib/browser/encoding-registry.js +3 -3
  49. package/lib/browser/encoding-registry.js.map +1 -1
  50. package/lib/browser/external-uri-service.js +1 -1
  51. package/lib/browser/external-uri-service.js.map +1 -1
  52. package/lib/browser/frontend-application-bindings.js +2 -2
  53. package/lib/browser/frontend-application-bindings.js.map +1 -1
  54. package/lib/browser/frontend-application-config-provider.js +1 -1
  55. package/lib/browser/frontend-application-config-provider.js.map +1 -1
  56. package/lib/browser/frontend-application-config-provider.spec.js +7 -7
  57. package/lib/browser/frontend-application-config-provider.spec.js.map +1 -1
  58. package/lib/browser/frontend-application-module.d.ts.map +1 -1
  59. package/lib/browser/frontend-application-module.js +23 -20
  60. package/lib/browser/frontend-application-module.js.map +1 -1
  61. package/lib/browser/frontend-application-state.js +2 -2
  62. package/lib/browser/frontend-application-state.js.map +1 -1
  63. package/lib/browser/frontend-application.d.ts +4 -2
  64. package/lib/browser/frontend-application.d.ts.map +1 -1
  65. package/lib/browser/frontend-application.js +30 -36
  66. package/lib/browser/frontend-application.js.map +1 -1
  67. package/lib/browser/http-open-handler.js +3 -3
  68. package/lib/browser/http-open-handler.js.map +1 -1
  69. package/lib/browser/icon-theme-contribution.js +5 -5
  70. package/lib/browser/icon-theme-contribution.js.map +1 -1
  71. package/lib/browser/icon-theme-service.js +4 -4
  72. package/lib/browser/icon-theme-service.js.map +1 -1
  73. package/lib/browser/index.js +1 -1
  74. package/lib/browser/json-schema-store.js +5 -5
  75. package/lib/browser/json-schema-store.js.map +1 -1
  76. package/lib/browser/keybinding.js +11 -11
  77. package/lib/browser/keybinding.js.map +1 -1
  78. package/lib/browser/keybinding.spec.js +9 -9
  79. package/lib/browser/keybinding.spec.js.map +1 -1
  80. package/lib/browser/keyboard/browser-keyboard-frontend-contribution.js +4 -4
  81. package/lib/browser/keyboard/browser-keyboard-frontend-contribution.js.map +1 -1
  82. package/lib/browser/keyboard/browser-keyboard-layout-provider.js +4 -4
  83. package/lib/browser/keyboard/browser-keyboard-layout-provider.js.map +1 -1
  84. package/lib/browser/keyboard/browser-keyboard-layout-provider.spec.js +3 -3
  85. package/lib/browser/keyboard/browser-keyboard-layout-provider.spec.js.map +1 -1
  86. package/lib/browser/keyboard/index.js +1 -1
  87. package/lib/browser/keyboard/keyboard-layout-service.js +5 -5
  88. package/lib/browser/keyboard/keyboard-layout-service.js.map +1 -1
  89. package/lib/browser/keyboard/keyboard-layout-service.spec.js +1 -1
  90. package/lib/browser/keyboard/keyboard-layout-service.spec.js.map +1 -1
  91. package/lib/browser/keyboard/keys.js +1 -1
  92. package/lib/browser/keyboard/keys.spec.js +2 -2
  93. package/lib/browser/keyboard/keys.spec.js.map +1 -1
  94. package/lib/browser/label-parser.js +1 -1
  95. package/lib/browser/label-parser.js.map +1 -1
  96. package/lib/browser/label-parser.spec.js +38 -38
  97. package/lib/browser/label-parser.spec.js.map +1 -1
  98. package/lib/browser/label-provider.js +8 -8
  99. package/lib/browser/label-provider.js.map +1 -1
  100. package/lib/browser/label-provider.spec.js +5 -5
  101. package/lib/browser/label-provider.spec.js.map +1 -1
  102. package/lib/browser/language-service.js +1 -1
  103. package/lib/browser/language-service.js.map +1 -1
  104. package/lib/browser/logger-frontend-module.js +1 -1
  105. package/lib/browser/logger-frontend-module.js.map +1 -1
  106. package/lib/browser/menu/browser-context-menu-renderer.js +3 -3
  107. package/lib/browser/menu/browser-context-menu-renderer.js.map +1 -1
  108. package/lib/browser/menu/browser-menu-plugin.js +13 -13
  109. package/lib/browser/menu/browser-menu-plugin.js.map +1 -1
  110. package/lib/browser/menu/context-menu-context.js +1 -1
  111. package/lib/browser/menu/context-menu-context.js.map +1 -1
  112. package/lib/browser/messaging/index.js +1 -1
  113. package/lib/browser/messaging/ws-connection-provider.js +7 -7
  114. package/lib/browser/messaging/ws-connection-provider.js.map +1 -1
  115. package/lib/browser/mime-service.js +1 -1
  116. package/lib/browser/mime-service.js.map +1 -1
  117. package/lib/browser/navigatable.js +1 -1
  118. package/lib/browser/opener-service.js +3 -2
  119. package/lib/browser/opener-service.js.map +1 -1
  120. package/lib/browser/performance/frontend-stopwatch.d.ts +21 -0
  121. package/lib/browser/performance/frontend-stopwatch.d.ts.map +1 -0
  122. package/lib/browser/performance/frontend-stopwatch.js +71 -0
  123. package/lib/browser/performance/frontend-stopwatch.js.map +1 -0
  124. package/lib/browser/performance/index.d.ts +18 -0
  125. package/lib/browser/performance/index.d.ts.map +1 -0
  126. package/lib/browser/performance/index.js +30 -0
  127. package/lib/browser/performance/index.js.map +1 -0
  128. package/lib/browser/performance/measurement-frontend-bindings.d.ts +20 -0
  129. package/lib/browser/performance/measurement-frontend-bindings.d.ts.map +1 -0
  130. package/lib/browser/performance/measurement-frontend-bindings.js +33 -0
  131. package/lib/browser/performance/measurement-frontend-bindings.js.map +1 -0
  132. package/lib/browser/preferences/index.js +1 -1
  133. package/lib/browser/preferences/preference-configurations.js +4 -4
  134. package/lib/browser/preferences/preference-configurations.js.map +1 -1
  135. package/lib/browser/preferences/preference-contribution.js +8 -8
  136. package/lib/browser/preferences/preference-contribution.js.map +1 -1
  137. package/lib/browser/preferences/preference-language-override-service.d.ts +11 -0
  138. package/lib/browser/preferences/preference-language-override-service.d.ts.map +1 -1
  139. package/lib/browser/preferences/preference-language-override-service.js +21 -7
  140. package/lib/browser/preferences/preference-language-override-service.js.map +1 -1
  141. package/lib/browser/preferences/preference-provider.js +2 -2
  142. package/lib/browser/preferences/preference-provider.js.map +1 -1
  143. package/lib/browser/preferences/preference-proxy.spec.js +6 -6
  144. package/lib/browser/preferences/preference-proxy.spec.js.map +1 -1
  145. package/lib/browser/preferences/preference-schema-provider.spec.js +3 -3
  146. package/lib/browser/preferences/preference-schema-provider.spec.js.map +1 -1
  147. package/lib/browser/preferences/preference-service.js +8 -8
  148. package/lib/browser/preferences/preference-service.js.map +1 -1
  149. package/lib/browser/preferences/preference-service.spec.js +5 -5
  150. package/lib/browser/preferences/preference-service.spec.js.map +1 -1
  151. package/lib/browser/preferences/test/index.js +1 -1
  152. package/lib/browser/preferences/test/mock-preference-service.js +1 -1
  153. package/lib/browser/preferences/test/mock-preference-service.js.map +1 -1
  154. package/lib/browser/progress-bar.js +4 -4
  155. package/lib/browser/progress-bar.js.map +1 -1
  156. package/lib/browser/progress-client.js +3 -3
  157. package/lib/browser/progress-client.js.map +1 -1
  158. package/lib/browser/progress-location-service.js +1 -1
  159. package/lib/browser/progress-location-service.js.map +1 -1
  160. package/lib/browser/progress-location-service.spec.js +1 -1
  161. package/lib/browser/progress-location-service.spec.js.map +1 -1
  162. package/lib/browser/progress-status-bar-item.js +2 -2
  163. package/lib/browser/progress-status-bar-item.js.map +1 -1
  164. package/lib/browser/quick-input/index.js +1 -1
  165. package/lib/browser/quick-input/quick-command-frontend-contribution.js +5 -5
  166. package/lib/browser/quick-input/quick-command-frontend-contribution.js.map +1 -1
  167. package/lib/browser/quick-input/quick-command-service.js +9 -9
  168. package/lib/browser/quick-input/quick-command-service.js.map +1 -1
  169. package/lib/browser/quick-input/quick-help-service.js +3 -3
  170. package/lib/browser/quick-input/quick-help-service.js.map +1 -1
  171. package/lib/browser/quick-input/quick-input-frontend-contribution.js +3 -3
  172. package/lib/browser/quick-input/quick-input-frontend-contribution.js.map +1 -1
  173. package/lib/browser/quick-input/quick-input-service.js +1 -1
  174. package/lib/browser/quick-input/quick-input-service.spec.js +15 -15
  175. package/lib/browser/quick-input/quick-input-service.spec.js.map +1 -1
  176. package/lib/browser/quick-input/quick-pick-service-impl.d.ts.map +1 -1
  177. package/lib/browser/quick-input/quick-pick-service-impl.js +3 -3
  178. package/lib/browser/quick-input/quick-pick-service-impl.js.map +1 -1
  179. package/lib/browser/quick-input/quick-view-service.js +4 -4
  180. package/lib/browser/quick-input/quick-view-service.js.map +1 -1
  181. package/lib/browser/resource-context-key.js +4 -4
  182. package/lib/browser/resource-context-key.js.map +1 -1
  183. package/lib/browser/saveable.d.ts +17 -2
  184. package/lib/browser/saveable.d.ts.map +1 -1
  185. package/lib/browser/saveable.js +71 -24
  186. package/lib/browser/saveable.js.map +1 -1
  187. package/lib/browser/shell/application-shell-mouse-tracker.js +5 -5
  188. package/lib/browser/shell/application-shell-mouse-tracker.js.map +1 -1
  189. package/lib/browser/shell/application-shell.d.ts +16 -1
  190. package/lib/browser/shell/application-shell.d.ts.map +1 -1
  191. package/lib/browser/shell/application-shell.js +76 -64
  192. package/lib/browser/shell/application-shell.js.map +1 -1
  193. package/lib/browser/shell/current-widget-command-adapter.js.map +1 -1
  194. package/lib/browser/shell/index.js +1 -1
  195. package/lib/browser/shell/shell-layout-restorer.js +7 -7
  196. package/lib/browser/shell/shell-layout-restorer.js.map +1 -1
  197. package/lib/browser/shell/side-panel-handler.d.ts +1 -0
  198. package/lib/browser/shell/side-panel-handler.d.ts.map +1 -1
  199. package/lib/browser/shell/side-panel-handler.js +26 -14
  200. package/lib/browser/shell/side-panel-handler.js.map +1 -1
  201. package/lib/browser/shell/side-panel-toolbar.js.map +1 -1
  202. package/lib/browser/shell/sidebar-bottom-menu-widget.js +1 -1
  203. package/lib/browser/shell/sidebar-bottom-menu-widget.js.map +1 -1
  204. package/lib/browser/shell/sidebar-menu-widget.js +2 -2
  205. package/lib/browser/shell/sidebar-menu-widget.js.map +1 -1
  206. package/lib/browser/shell/sidebar-top-menu-widget.js +1 -1
  207. package/lib/browser/shell/sidebar-top-menu-widget.js.map +1 -1
  208. package/lib/browser/shell/split-panels.js +1 -1
  209. package/lib/browser/shell/split-panels.js.map +1 -1
  210. package/lib/browser/shell/tab-bar-decorator.js +3 -3
  211. package/lib/browser/shell/tab-bar-decorator.js.map +1 -1
  212. package/lib/browser/shell/tab-bar-toolbar.d.ts.map +1 -1
  213. package/lib/browser/shell/tab-bar-toolbar.js +12 -12
  214. package/lib/browser/shell/tab-bar-toolbar.js.map +1 -1
  215. package/lib/browser/shell/tab-bar-toolbar.spec.js +14 -14
  216. package/lib/browser/shell/tab-bar-toolbar.spec.js.map +1 -1
  217. package/lib/browser/shell/tab-bars.d.ts.map +1 -1
  218. package/lib/browser/shell/tab-bars.js +1 -0
  219. package/lib/browser/shell/tab-bars.js.map +1 -1
  220. package/lib/browser/shell/tab-bars.spec.js +9 -9
  221. package/lib/browser/shell/tab-bars.spec.js.map +1 -1
  222. package/lib/browser/shell/theia-dock-panel.d.ts +3 -2
  223. package/lib/browser/shell/theia-dock-panel.d.ts.map +1 -1
  224. package/lib/browser/shell/theia-dock-panel.js +4 -4
  225. package/lib/browser/shell/theia-dock-panel.js.map +1 -1
  226. package/lib/browser/shell/view-contribution.js +5 -5
  227. package/lib/browser/shell/view-contribution.js.map +1 -1
  228. package/lib/browser/source-tree/index.js +1 -1
  229. package/lib/browser/source-tree/source-tree-widget.d.ts.map +1 -1
  230. package/lib/browser/source-tree/source-tree-widget.js +7 -8
  231. package/lib/browser/source-tree/source-tree-widget.js.map +1 -1
  232. package/lib/browser/source-tree/source-tree.d.ts.map +1 -1
  233. package/lib/browser/source-tree/source-tree.js +2 -1
  234. package/lib/browser/source-tree/source-tree.js.map +1 -1
  235. package/lib/browser/source-tree/tree-source.js +2 -2
  236. package/lib/browser/source-tree/tree-source.js.map +1 -1
  237. package/lib/browser/status-bar/index.js +1 -1
  238. package/lib/browser/status-bar/status-bar.js +6 -6
  239. package/lib/browser/status-bar/status-bar.js.map +1 -1
  240. package/lib/browser/storage-service.js +5 -5
  241. package/lib/browser/storage-service.js.map +1 -1
  242. package/lib/browser/storage-service.spec.js +4 -4
  243. package/lib/browser/storage-service.spec.js.map +1 -1
  244. package/lib/browser/test/mock-opener-service.js +1 -1
  245. package/lib/browser/test/mock-opener-service.js.map +1 -1
  246. package/lib/browser/test/mock-storage-service.js +1 -1
  247. package/lib/browser/test/mock-storage-service.js.map +1 -1
  248. package/lib/browser/theming.js +1 -1
  249. package/lib/browser/tooltip-service.js +6 -5
  250. package/lib/browser/tooltip-service.js.map +1 -1
  251. package/lib/browser/tree/fuzzy-search.js +1 -1
  252. package/lib/browser/tree/fuzzy-search.js.map +1 -1
  253. package/lib/browser/tree/fuzzy-search.spec.js +2 -2
  254. package/lib/browser/tree/fuzzy-search.spec.js.map +1 -1
  255. package/lib/browser/tree/index.d.ts +1 -0
  256. package/lib/browser/tree/index.d.ts.map +1 -1
  257. package/lib/browser/tree/index.js +2 -1
  258. package/lib/browser/tree/index.js.map +1 -1
  259. package/lib/browser/tree/test/tree-test-container.js +1 -1
  260. package/lib/browser/tree/test/tree-test-container.js.map +1 -1
  261. package/lib/browser/tree/tree-compression/compressed-tree-expansion-service.d.ts +24 -0
  262. package/lib/browser/tree/tree-compression/compressed-tree-expansion-service.d.ts.map +1 -0
  263. package/lib/browser/tree/tree-compression/compressed-tree-expansion-service.js +68 -0
  264. package/lib/browser/tree/tree-compression/compressed-tree-expansion-service.js.map +1 -0
  265. package/lib/browser/tree/tree-compression/compressed-tree-model.d.ts +39 -0
  266. package/lib/browser/tree/tree-compression/compressed-tree-model.d.ts.map +1 -0
  267. package/lib/browser/tree/tree-compression/compressed-tree-model.js +96 -0
  268. package/lib/browser/tree/tree-compression/compressed-tree-model.js.map +1 -0
  269. package/lib/browser/tree/tree-compression/compressed-tree-widget.d.ts +55 -0
  270. package/lib/browser/tree/tree-compression/compressed-tree-widget.d.ts.map +1 -0
  271. package/lib/browser/tree/tree-compression/compressed-tree-widget.js +194 -0
  272. package/lib/browser/tree/tree-compression/compressed-tree-widget.js.map +1 -0
  273. package/lib/browser/tree/tree-compression/index.d.ts +20 -0
  274. package/lib/browser/tree/tree-compression/index.d.ts.map +1 -0
  275. package/lib/browser/tree/tree-compression/index.js +32 -0
  276. package/lib/browser/tree/tree-compression/index.js.map +1 -0
  277. package/lib/browser/tree/tree-compression/tree-compression-service.d.ts +73 -0
  278. package/lib/browser/tree/tree-compression/tree-compression-service.d.ts.map +1 -0
  279. package/lib/browser/tree/tree-compression/tree-compression-service.js +100 -0
  280. package/lib/browser/tree/tree-compression/tree-compression-service.js.map +1 -0
  281. package/lib/browser/tree/tree-consistency.spec.js +2 -2
  282. package/lib/browser/tree/tree-consistency.spec.js.map +1 -1
  283. package/lib/browser/tree/tree-container.d.ts +46 -1
  284. package/lib/browser/tree/tree-container.d.ts.map +1 -1
  285. package/lib/browser/tree/tree-container.js +67 -20
  286. package/lib/browser/tree/tree-container.js.map +1 -1
  287. package/lib/browser/tree/tree-decorator.js +2 -2
  288. package/lib/browser/tree/tree-decorator.js.map +1 -1
  289. package/lib/browser/tree/tree-decorator.spec.js +10 -10
  290. package/lib/browser/tree/tree-decorator.spec.js.map +1 -1
  291. package/lib/browser/tree/tree-expansion.d.ts +1 -1
  292. package/lib/browser/tree/tree-expansion.d.ts.map +1 -1
  293. package/lib/browser/tree/tree-expansion.js +3 -3
  294. package/lib/browser/tree/tree-expansion.js.map +1 -1
  295. package/lib/browser/tree/tree-expansion.spec.js +15 -15
  296. package/lib/browser/tree/tree-expansion.spec.js.map +1 -1
  297. package/lib/browser/tree/tree-iterator.spec.js +22 -22
  298. package/lib/browser/tree/tree-iterator.spec.js.map +1 -1
  299. package/lib/browser/tree/tree-label-provider.js +1 -1
  300. package/lib/browser/tree/tree-label-provider.js.map +1 -1
  301. package/lib/browser/tree/tree-model.d.ts +2 -1
  302. package/lib/browser/tree/tree-model.d.ts.map +1 -1
  303. package/lib/browser/tree/tree-model.js +20 -19
  304. package/lib/browser/tree/tree-model.js.map +1 -1
  305. package/lib/browser/tree/tree-navigation.js +1 -1
  306. package/lib/browser/tree/tree-navigation.js.map +1 -1
  307. package/lib/browser/tree/tree-search.js +5 -5
  308. package/lib/browser/tree/tree-search.js.map +1 -1
  309. package/lib/browser/tree/tree-selection-impl.js +3 -3
  310. package/lib/browser/tree/tree-selection-impl.js.map +1 -1
  311. package/lib/browser/tree/tree-selection-state.spec.js +6 -6
  312. package/lib/browser/tree/tree-selection-state.spec.js.map +1 -1
  313. package/lib/browser/tree/tree-view-welcome-widget.d.ts.map +1 -1
  314. package/lib/browser/tree/tree-view-welcome-widget.js +6 -6
  315. package/lib/browser/tree/tree-view-welcome-widget.js.map +1 -1
  316. package/lib/browser/tree/tree-widget.d.ts +6 -1
  317. package/lib/browser/tree/tree-widget.d.ts.map +1 -1
  318. package/lib/browser/tree/tree-widget.js +33 -20
  319. package/lib/browser/tree/tree-widget.js.map +1 -1
  320. package/lib/browser/tree/tree.d.ts +1 -1
  321. package/lib/browser/tree/tree.d.ts.map +1 -1
  322. package/lib/browser/tree/tree.js +3 -3
  323. package/lib/browser/tree/tree.js.map +1 -1
  324. package/lib/browser/tree/tree.spec.js +11 -11
  325. package/lib/browser/tree/tree.spec.js.map +1 -1
  326. package/lib/browser/view-container.d.ts +1 -1
  327. package/lib/browser/view-container.d.ts.map +1 -1
  328. package/lib/browser/view-container.js +60 -56
  329. package/lib/browser/view-container.js.map +1 -1
  330. package/lib/browser/widget-manager.js +4 -4
  331. package/lib/browser/widget-manager.js.map +1 -1
  332. package/lib/browser/widget-manager.spec.js +3 -3
  333. package/lib/browser/widget-manager.spec.js.map +1 -1
  334. package/lib/browser/widget-open-handler.d.ts.map +1 -1
  335. package/lib/browser/widget-open-handler.js +5 -6
  336. package/lib/browser/widget-open-handler.js.map +1 -1
  337. package/lib/browser/widgets/alert-message.js +4 -4
  338. package/lib/browser/widgets/alert-message.js.map +1 -1
  339. package/lib/browser/widgets/index.js +1 -1
  340. package/lib/browser/widgets/react-renderer.js +3 -2
  341. package/lib/browser/widgets/react-renderer.js.map +1 -1
  342. package/lib/browser/widgets/react-widget.js +2 -2
  343. package/lib/browser/widgets/react-widget.js.map +1 -1
  344. package/lib/browser/widgets/widget.js +4 -4
  345. package/lib/browser/widgets/widget.js.map +1 -1
  346. package/lib/browser/window/default-window-service.js +5 -5
  347. package/lib/browser/window/default-window-service.js.map +1 -1
  348. package/lib/browser/window/test/mock-window-service.js +1 -1
  349. package/lib/browser/window/test/mock-window-service.js.map +1 -1
  350. package/lib/browser/window-contribution.js +2 -2
  351. package/lib/browser/window-contribution.js.map +1 -1
  352. package/lib/common/command.js +3 -2
  353. package/lib/common/command.js.map +1 -1
  354. package/lib/common/contribution-filter/contribution-filter-registry.d.ts +1 -1
  355. package/lib/common/contribution-filter/contribution-filter-registry.d.ts.map +1 -1
  356. package/lib/common/contribution-filter/contribution-filter-registry.js +3 -2
  357. package/lib/common/contribution-filter/contribution-filter-registry.js.map +1 -1
  358. package/lib/common/contribution-filter/index.js +1 -1
  359. package/lib/common/encoding-service.js +2 -2
  360. package/lib/common/encoding-service.js.map +1 -1
  361. package/lib/common/env-variables/index.js +1 -1
  362. package/lib/common/event.js.map +1 -1
  363. package/lib/common/event.spec.js +2 -2
  364. package/lib/common/event.spec.js.map +1 -1
  365. package/lib/common/index.d.ts +1 -0
  366. package/lib/common/index.d.ts.map +1 -1
  367. package/lib/common/index.js +2 -1
  368. package/lib/common/index.js.map +1 -1
  369. package/lib/common/keybinding.js.map +1 -1
  370. package/lib/common/logger-protocol.js +1 -1
  371. package/lib/common/logger-protocol.js.map +1 -1
  372. package/lib/common/logger-watcher.js +1 -1
  373. package/lib/common/logger-watcher.js.map +1 -1
  374. package/lib/common/logger.js +5 -5
  375. package/lib/common/logger.js.map +1 -1
  376. package/lib/common/logger.spec.js +6 -6
  377. package/lib/common/logger.spec.js.map +1 -1
  378. package/lib/common/menu.js +4 -3
  379. package/lib/common/menu.js.map +1 -1
  380. package/lib/common/message-service-protocol.js +1 -1
  381. package/lib/common/message-service-protocol.js.map +1 -1
  382. package/lib/common/message-service.js +2 -2
  383. package/lib/common/message-service.js.map +1 -1
  384. package/lib/common/messaging/abstract-connection-provider.js +2 -2
  385. package/lib/common/messaging/abstract-connection-provider.js.map +1 -1
  386. package/lib/common/messaging/index.js +1 -1
  387. package/lib/common/messaging/proxy-factory.js.map +1 -1
  388. package/lib/common/messaging/proxy-factory.spec.js +2 -2
  389. package/lib/common/messaging/proxy-factory.spec.js.map +1 -1
  390. package/lib/common/path.spec.js +16 -16
  391. package/lib/common/path.spec.js.map +1 -1
  392. package/lib/common/performance/index.d.ts +19 -0
  393. package/lib/common/performance/index.d.ts.map +1 -0
  394. package/lib/common/performance/index.js +31 -0
  395. package/lib/common/performance/index.js.map +1 -0
  396. package/lib/common/performance/measurement-protocol.d.ts +65 -0
  397. package/lib/common/performance/measurement-protocol.d.ts.map +1 -0
  398. package/lib/common/performance/measurement-protocol.js +79 -0
  399. package/lib/common/performance/measurement-protocol.js.map +1 -0
  400. package/lib/common/performance/measurement.d.ts +91 -0
  401. package/lib/common/performance/measurement.d.ts.map +1 -0
  402. package/lib/common/performance/measurement.js +18 -0
  403. package/lib/common/performance/measurement.js.map +1 -0
  404. package/lib/common/performance/stopwatch.d.ts +68 -0
  405. package/lib/common/performance/stopwatch.d.ts.map +1 -0
  406. package/lib/common/performance/stopwatch.js +134 -0
  407. package/lib/common/performance/stopwatch.js.map +1 -0
  408. package/lib/common/progress-service.js +3 -3
  409. package/lib/common/progress-service.js.map +1 -1
  410. package/lib/common/promise-util.d.ts +11 -0
  411. package/lib/common/promise-util.d.ts.map +1 -1
  412. package/lib/common/promise-util.js +18 -2
  413. package/lib/common/promise-util.js.map +1 -1
  414. package/lib/common/promise-util.spec.js +2 -2
  415. package/lib/common/promise-util.spec.js.map +1 -1
  416. package/lib/common/resource.js +5 -4
  417. package/lib/common/resource.js.map +1 -1
  418. package/lib/common/selection-service.js +1 -1
  419. package/lib/common/selection-service.js.map +1 -1
  420. package/lib/common/stream.js.map +1 -1
  421. package/lib/common/ternary-search-tree.js +6 -6
  422. package/lib/common/ternary-search-tree.js.map +1 -1
  423. package/lib/common/test/expect.js +1 -1
  424. package/lib/common/test/expect.js.map +1 -1
  425. package/lib/common/test/mock-logger.js +1 -1
  426. package/lib/common/test/mock-logger.js.map +1 -1
  427. package/lib/common/test/mock-resource-provider.js +1 -1
  428. package/lib/common/test/mock-resource-provider.js.map +1 -1
  429. package/lib/common/types.d.ts +23 -1
  430. package/lib/common/types.d.ts.map +1 -1
  431. package/lib/common/types.js +26 -2
  432. package/lib/common/types.js.map +1 -1
  433. package/lib/common/uri.spec.js.map +1 -1
  434. package/lib/electron-browser/electron-clipboard-service.js +1 -1
  435. package/lib/electron-browser/electron-clipboard-service.js.map +1 -1
  436. package/lib/electron-browser/keyboard/electron-keyboard-layout-change-notifier.js +2 -2
  437. package/lib/electron-browser/keyboard/electron-keyboard-layout-change-notifier.js.map +1 -1
  438. package/lib/electron-browser/menu/electron-context-menu-renderer.js +8 -8
  439. package/lib/electron-browser/menu/electron-context-menu-renderer.js.map +1 -1
  440. package/lib/electron-browser/menu/electron-main-menu-factory.js +5 -5
  441. package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
  442. package/lib/electron-browser/menu/electron-menu-contribution.js +7 -7
  443. package/lib/electron-browser/menu/electron-menu-contribution.js.map +1 -1
  444. package/lib/electron-browser/messaging/electron-ipc-connection-provider.js +1 -1
  445. package/lib/electron-browser/messaging/electron-ipc-connection-provider.js.map +1 -1
  446. package/lib/electron-browser/messaging/electron-ws-connection-provider.js +1 -1
  447. package/lib/electron-browser/messaging/electron-ws-connection-provider.js.map +1 -1
  448. package/lib/electron-browser/window/electron-window-module.js +1 -1
  449. package/lib/electron-browser/window/electron-window-module.js.map +1 -1
  450. package/lib/electron-browser/window/electron-window-preferences.js +1 -1
  451. package/lib/electron-browser/window/electron-window-preferences.js.map +1 -1
  452. package/lib/electron-browser/window/electron-window-service.js +4 -4
  453. package/lib/electron-browser/window/electron-window-service.js.map +1 -1
  454. package/lib/electron-main/electron-main-application-module.js +4 -4
  455. package/lib/electron-main/electron-main-application-module.js.map +1 -1
  456. package/lib/electron-main/electron-main-application.d.ts +0 -4
  457. package/lib/electron-main/electron-main-application.d.ts.map +1 -1
  458. package/lib/electron-main/electron-main-application.js +9 -29
  459. package/lib/electron-main/electron-main-application.js.map +1 -1
  460. package/lib/electron-main/electron-main-window-service-impl.js +2 -2
  461. package/lib/electron-main/electron-main-window-service-impl.js.map +1 -1
  462. package/lib/electron-main/electron-native-keymap.js +1 -1
  463. package/lib/electron-main/electron-native-keymap.js.map +1 -1
  464. package/lib/electron-main/electron-security-token-service.js +2 -2
  465. package/lib/electron-main/electron-security-token-service.js.map +1 -1
  466. package/lib/electron-main/messaging/electron-messaging-contribution.js +8 -8
  467. package/lib/electron-main/messaging/electron-messaging-contribution.js.map +1 -1
  468. package/lib/electron-node/hosting/electron-ws-origin-validator.js +1 -1
  469. package/lib/electron-node/hosting/electron-ws-origin-validator.js.map +1 -1
  470. package/lib/electron-node/keyboard/electron-keyboard-layout-provider.js +1 -1
  471. package/lib/electron-node/keyboard/electron-keyboard-layout-provider.js.map +1 -1
  472. package/lib/electron-node/token/electron-token-backend-contribution.js +2 -2
  473. package/lib/electron-node/token/electron-token-backend-contribution.js.map +1 -1
  474. package/lib/electron-node/token/electron-token-messaging-contribution.js +2 -2
  475. package/lib/electron-node/token/electron-token-messaging-contribution.js.map +1 -1
  476. package/lib/electron-node/token/electron-token-validator.js +2 -2
  477. package/lib/electron-node/token/electron-token-validator.js.map +1 -1
  478. package/lib/node/application-server.js +2 -2
  479. package/lib/node/application-server.js.map +1 -1
  480. package/lib/node/backend-application-config-provider.js +1 -1
  481. package/lib/node/backend-application-config-provider.js.map +1 -1
  482. package/lib/node/backend-application-config-provider.spec.js +1 -1
  483. package/lib/node/backend-application-config-provider.spec.js.map +1 -1
  484. package/lib/node/backend-application-module.d.ts.map +1 -1
  485. package/lib/node/backend-application-module.js +7 -4
  486. package/lib/node/backend-application-module.js.map +1 -1
  487. package/lib/node/backend-application.d.ts +2 -2
  488. package/lib/node/backend-application.d.ts.map +1 -1
  489. package/lib/node/backend-application.js +17 -35
  490. package/lib/node/backend-application.js.map +1 -1
  491. package/lib/node/cli.js +3 -2
  492. package/lib/node/cli.js.map +1 -1
  493. package/lib/node/console-logger-server.js +4 -4
  494. package/lib/node/console-logger-server.js.map +1 -1
  495. package/lib/node/console-logger-server.spec.js +5 -5
  496. package/lib/node/console-logger-server.spec.js.map +1 -1
  497. package/lib/node/env-variables/env-variables-server.js +3 -3
  498. package/lib/node/env-variables/env-variables-server.js.map +1 -1
  499. package/lib/node/env-variables/index.js +1 -1
  500. package/lib/node/environment-utils.js +1 -1
  501. package/lib/node/environment-utils.js.map +1 -1
  502. package/lib/node/hosting/backend-application-hosts.js +2 -2
  503. package/lib/node/hosting/backend-application-hosts.js.map +1 -1
  504. package/lib/node/hosting/ws-origin-validator.js +2 -2
  505. package/lib/node/hosting/ws-origin-validator.js.map +1 -1
  506. package/lib/node/i18n/i18n-backend-module.js +1 -1
  507. package/lib/node/i18n/i18n-backend-module.js.map +1 -1
  508. package/lib/node/i18n/localization-backend-contribution.js +3 -3
  509. package/lib/node/i18n/localization-backend-contribution.js.map +1 -1
  510. package/lib/node/i18n/localization-contribution.js +4 -4
  511. package/lib/node/i18n/localization-contribution.js.map +1 -1
  512. package/lib/node/i18n/localization-provider.js +1 -1
  513. package/lib/node/i18n/localization-provider.js.map +1 -1
  514. package/lib/node/index.js +1 -1
  515. package/lib/node/keytar-server.js +1 -1
  516. package/lib/node/keytar-server.js.map +1 -1
  517. package/lib/node/logger-backend-module.js +1 -1
  518. package/lib/node/logger-backend-module.js.map +1 -1
  519. package/lib/node/logger-cli-contribution.js +1 -1
  520. package/lib/node/logger-cli-contribution.js.map +1 -1
  521. package/lib/node/logger-cli-contribution.spec.js +13 -13
  522. package/lib/node/logger-cli-contribution.spec.js.map +1 -1
  523. package/lib/node/main.js +1 -1
  524. package/lib/node/main.js.map +1 -1
  525. package/lib/node/messaging/http-websocket-adapter.js +3 -3
  526. package/lib/node/messaging/http-websocket-adapter.js.map +1 -1
  527. package/lib/node/messaging/index.js +1 -1
  528. package/lib/node/messaging/ipc-bootstrap.js +3 -3
  529. package/lib/node/messaging/ipc-bootstrap.js.map +1 -1
  530. package/lib/node/messaging/ipc-connection-provider.d.ts.map +1 -1
  531. package/lib/node/messaging/ipc-connection-provider.js +11 -7
  532. package/lib/node/messaging/ipc-connection-provider.js.map +1 -1
  533. package/lib/node/messaging/messaging-backend-module.js +3 -3
  534. package/lib/node/messaging/messaging-backend-module.js.map +1 -1
  535. package/lib/node/messaging/messaging-contribution.js +14 -14
  536. package/lib/node/messaging/messaging-contribution.js.map +1 -1
  537. package/lib/node/messaging/messaging-listeners.js +3 -3
  538. package/lib/node/messaging/messaging-listeners.js.map +1 -1
  539. package/lib/node/performance/index.d.ts +18 -0
  540. package/lib/node/performance/index.d.ts.map +1 -0
  541. package/lib/node/performance/index.js +30 -0
  542. package/lib/node/performance/index.js.map +1 -0
  543. package/lib/node/performance/measurement-backend-bindings.d.ts +20 -0
  544. package/lib/node/performance/measurement-backend-bindings.d.ts.map +1 -0
  545. package/lib/node/performance/measurement-backend-bindings.js +31 -0
  546. package/lib/node/performance/measurement-backend-bindings.js.map +1 -0
  547. package/lib/node/performance/node-stopwatch.d.ts +21 -0
  548. package/lib/node/performance/node-stopwatch.d.ts.map +1 -0
  549. package/lib/node/performance/node-stopwatch.js +52 -0
  550. package/lib/node/performance/node-stopwatch.js.map +1 -0
  551. package/lib/node/process-utils.js +1 -1
  552. package/lib/node/process-utils.js.map +1 -1
  553. package/lib/node/process-utils.spec.js +1 -1
  554. package/lib/node/process-utils.spec.js.map +1 -1
  555. package/lib/node/ws-request-validators.js +3 -3
  556. package/lib/node/ws-request-validators.js.map +1 -1
  557. package/package.json +3 -3
  558. package/src/browser/authentication-service.ts +103 -59
  559. package/src/browser/frontend-application-module.ts +4 -0
  560. package/src/browser/frontend-application.ts +17 -22
  561. package/src/browser/performance/frontend-stopwatch.ts +62 -0
  562. package/src/browser/performance/index.ts +18 -0
  563. package/src/browser/performance/measurement-frontend-bindings.ts +31 -0
  564. package/src/browser/preferences/preference-language-override-service.ts +17 -3
  565. package/src/browser/saveable.ts +84 -27
  566. package/src/browser/shell/application-shell.ts +42 -28
  567. package/src/browser/shell/side-panel-handler.ts +12 -0
  568. package/src/browser/shell/tab-bars.ts +1 -0
  569. package/src/browser/source-tree/source-tree-widget.tsx +6 -9
  570. package/src/browser/source-tree/source-tree.ts +6 -4
  571. package/src/browser/style/sidepanel.css +4 -0
  572. package/src/browser/style/view-container.css +0 -8
  573. package/src/browser/tree/index.ts +1 -0
  574. package/src/browser/tree/tree-compression/compressed-tree-expansion-service.ts +46 -0
  575. package/src/browser/tree/tree-compression/compressed-tree-model.ts +82 -0
  576. package/src/browser/tree/tree-compression/compressed-tree-widget.tsx +181 -0
  577. package/src/browser/tree/tree-compression/index.ts +20 -0
  578. package/src/browser/tree/tree-compression/tree-compression-service.ts +121 -0
  579. package/src/browser/tree/tree-compression/tree-compression.css +28 -0
  580. package/src/browser/tree/tree-container.ts +107 -29
  581. package/src/browser/tree/tree-expansion.ts +1 -1
  582. package/src/browser/tree/tree-model.ts +13 -11
  583. package/src/browser/tree/tree-widget.tsx +30 -12
  584. package/src/browser/tree/tree.ts +2 -2
  585. package/src/browser/view-container.ts +27 -23
  586. package/src/browser/widget-open-handler.ts +1 -3
  587. package/src/common/event.ts +2 -2
  588. package/src/common/index.ts +1 -0
  589. package/src/common/messaging/proxy-factory.ts +1 -1
  590. package/src/common/performance/index.ts +19 -0
  591. package/src/common/performance/measurement-protocol.ts +104 -0
  592. package/src/common/performance/measurement.ts +104 -0
  593. package/src/common/performance/stopwatch.ts +157 -0
  594. package/src/common/promise-util.ts +16 -0
  595. package/src/common/types.ts +41 -1
  596. package/src/electron-browser/menu/electron-menu-contribution.ts +1 -1
  597. package/src/electron-main/electron-main-application.ts +1 -22
  598. package/src/node/backend-application-module.ts +4 -0
  599. package/src/node/backend-application.ts +10 -33
  600. package/src/node/messaging/ipc-connection-provider.ts +9 -5
  601. package/src/node/performance/index.ts +18 -0
  602. package/src/node/performance/measurement-backend-bindings.ts +35 -0
  603. package/src/node/performance/node-stopwatch.ts +40 -0
@@ -24,7 +24,7 @@ import { Message } from '@phosphor/messaging';
24
24
  import { IDragEvent } from '@phosphor/dragdrop';
25
25
  import { RecursivePartial, Event as CommonEvent, DisposableCollection, Disposable, environment } from '../../common';
26
26
  import { animationFrame } from '../browser';
27
- import { Saveable, SaveableWidget, SaveOptions } from '../saveable';
27
+ import { Saveable, SaveableWidget, SaveOptions, SaveableSource } from '../saveable';
28
28
  import { StatusBarImpl, StatusBarEntry, StatusBarAlignment } from '../status-bar/status-bar';
29
29
  import { TheiaDockPanel, BOTTOM_AREA_ID, MAIN_AREA_ID } from './theia-dock-panel';
30
30
  import { SidePanelHandler, SidePanel, SidePanelHandlerFactory } from './side-panel-handler';
@@ -1025,7 +1025,7 @@ export class ApplicationShell extends Widget {
1025
1025
  }
1026
1026
  this.tracker.add(widget);
1027
1027
  this.checkActivation(widget);
1028
- Saveable.apply(widget);
1028
+ Saveable.apply(widget, () => this.widgets.filter((maybeSaveable): maybeSaveable is Widget & SaveableSource => !!Saveable.get(maybeSaveable)));
1029
1029
  if (ApplicationShell.TrackableWidgetProvider.is(widget)) {
1030
1030
  for (const toTrack of widget.getTrackableWidgets()) {
1031
1031
  this.track(toTrack);
@@ -1036,6 +1036,11 @@ export class ApplicationShell extends Widget {
1036
1036
  }
1037
1037
  }
1038
1038
 
1039
+ /**
1040
+ * @returns an array of Widgets, all of which are tracked by the focus tracker
1041
+ * The first member of the array is the widget whose id is passed in, and the other widgets
1042
+ * are its tracked parents in ascending order
1043
+ */
1039
1044
  protected toTrackedStack(id: string): Widget[] {
1040
1045
  const tracked = new Map<string, Widget>(this.tracker.widgets.map(w => [w.id, w] as [string, Widget]));
1041
1046
  let current = tracked.get(id);
@@ -1392,24 +1397,23 @@ export class ApplicationShell extends Widget {
1392
1397
  * @param filter
1393
1398
  * If undefined, all tabs are closed; otherwise only those tabs that match the filter are closed.
1394
1399
  */
1395
- closeTabs(tabBarOrArea: TabBar<Widget> | ApplicationShell.Area,
1396
- filter?: (title: Title<Widget>, index: number) => boolean): void {
1400
+ async closeTabs(tabBarOrArea: TabBar<Widget> | ApplicationShell.Area,
1401
+ filter?: (title: Title<Widget>, index: number) => boolean): Promise<void> {
1402
+ const titles: Array<Title<Widget>> = [];
1397
1403
  if (tabBarOrArea === 'main') {
1398
- this.mainAreaTabBars.forEach(tb => this.closeTabs(tb, filter));
1404
+ this.mainAreaTabBars.forEach(tabbar => titles.push(...toArray(tabbar.titles)));
1399
1405
  } else if (tabBarOrArea === 'bottom') {
1400
- this.bottomAreaTabBars.forEach(tb => this.closeTabs(tb, filter));
1406
+ this.bottomAreaTabBars.forEach(tabbar => titles.push(...toArray(tabbar.titles)));
1401
1407
  } else if (typeof tabBarOrArea === 'string') {
1402
- const tabBar = this.getTabBarFor(tabBarOrArea);
1403
- if (tabBar) {
1404
- this.closeTabs(tabBar, filter);
1408
+ const tabbar = this.getTabBarFor(tabBarOrArea);
1409
+ if (tabbar) {
1410
+ titles.push(...toArray(tabbar.titles));
1405
1411
  }
1406
1412
  } else if (tabBarOrArea) {
1407
- const titles = toArray(tabBarOrArea.titles);
1408
- for (let i = 0; i < titles.length; i++) {
1409
- if (filter === undefined || filter(titles[i], i)) {
1410
- titles[i].owner.close();
1411
- }
1412
- }
1413
+ titles.push(...toArray(tabBarOrArea.titles));
1414
+ }
1415
+ if (titles.length) {
1416
+ await this.closeMany((filter ? titles.filter(filter) : titles).map(title => title.owner));
1413
1417
  }
1414
1418
  }
1415
1419
 
@@ -1436,6 +1440,22 @@ export class ApplicationShell extends Widget {
1436
1440
  }
1437
1441
  }
1438
1442
 
1443
+ /**
1444
+ * @param targets the widgets to be closed
1445
+ * @return an array of all the widgets that were actually closed.
1446
+ */
1447
+ async closeMany(targets: Widget[], options?: ApplicationShell.CloseOptions): Promise<Widget[]> {
1448
+ if (options?.save === false || await Saveable.confirmSaveBeforeClose(targets, this.widgets.filter(widget => !targets.includes(widget)))) {
1449
+ return (await Promise.all(targets.map(target => this.closeWidget(target.id, options)))).filter((widget): widget is Widget => widget !== undefined);
1450
+ }
1451
+ return [];
1452
+ }
1453
+
1454
+ /**
1455
+ * @returns the widget that was closed, if any, `undefined` otherwise.
1456
+ *
1457
+ * If your use case requires closing multiple widgets, use {@link ApplicationShell#closeMany} instead. That method handles closing saveable widgets more reliably.
1458
+ */
1439
1459
  async closeWidget(id: string, options?: ApplicationShell.CloseOptions): Promise<Widget | undefined> {
1440
1460
  // TODO handle save for composite widgets, i.e. the preference widget has 2 editors
1441
1461
  const stack = this.toTrackedStack(id);
@@ -1443,17 +1463,10 @@ export class ApplicationShell extends Widget {
1443
1463
  if (!current) {
1444
1464
  return undefined;
1445
1465
  }
1446
- let pendingClose;
1447
- if (SaveableWidget.is(current)) {
1448
- let shouldSave;
1449
- if (options && 'save' in options) {
1450
- shouldSave = () => options.save;
1451
- }
1452
- pendingClose = current.closeWithSaving({ shouldSave });
1453
- } else {
1454
- current.close();
1455
- pendingClose = waitForClosed(current);
1456
- };
1466
+ const saveableOptions = options && { shouldSave: () => options.save };
1467
+ const pendingClose = SaveableWidget.is(current)
1468
+ ? current.closeWithSaving(saveableOptions)
1469
+ : (current.close(), waitForClosed(current));
1457
1470
  await Promise.all([
1458
1471
  pendingClose,
1459
1472
  this.pendingUpdates
@@ -1744,8 +1757,9 @@ export class ApplicationShell extends Widget {
1744
1757
  if (!prevBar) {
1745
1758
  return false;
1746
1759
  }
1747
- const len = prevBar.titles.length;
1748
- prevBar.currentIndex = len - 1;
1760
+ if (!prevBar.currentTitle) {
1761
+ prevBar.currentIndex = prevBar.titles.length - 1;
1762
+ }
1749
1763
  if (prevBar.currentTitle) {
1750
1764
  this.activateWidget(prevBar.currentTitle.owner.id);
1751
1765
  }
@@ -458,6 +458,7 @@ export class SidePanelHandler {
458
458
  const currentTitle = tabBar.currentTitle;
459
459
  // eslint-disable-next-line no-null/no-null
460
460
  const hideDockPanel = currentTitle === null;
461
+ this.updateSashState(this.container, hideDockPanel);
461
462
  let relativeSizes: number[] | undefined;
462
463
 
463
464
  if (hideDockPanel) {
@@ -659,6 +660,17 @@ export class SidePanelHandler {
659
660
  this.refresh();
660
661
  }
661
662
 
663
+ protected updateSashState(sidePanelElement: Panel | null, sidePanelCollapsed: boolean): void {
664
+ if (sidePanelElement) {
665
+ // Hide the sash when the left/right side panel is collapsed
666
+ if (sidePanelElement.id === 'theia-left-content-panel' && sidePanelElement.node.nextElementSibling) {
667
+ sidePanelElement.node.nextElementSibling.classList.toggle('sash-hidden', sidePanelCollapsed);
668
+ } else if (sidePanelElement.id === 'theia-right-content-panel' && sidePanelElement.node.previousElementSibling) {
669
+ sidePanelElement.node.previousElementSibling.classList.toggle('sash-hidden', sidePanelCollapsed);
670
+ }
671
+ }
672
+ }
673
+
662
674
  }
663
675
 
664
676
  export namespace SidePanel {
@@ -640,6 +640,7 @@ export class ToolbarAwareTabBar extends ScrollableTabBar {
640
640
  /**
641
641
  * Overrides the `contentNode` property getter in PhosphorJS' TabBar.
642
642
  */
643
+ // @ts-expect-error TS2611 `TabBar<T>.contentNode` is declared as `readonly contentNode` but is implemented as a getter.
643
644
  get contentNode(): HTMLUListElement {
644
645
  return this.tabBarContainer.getElementsByClassName(ToolbarAwareTabBar.Styles.TAB_BAR_CONTENT)[0] as HTMLUListElement;
645
646
  }
@@ -17,7 +17,7 @@
17
17
  import * as React from 'react';
18
18
  import { injectable, postConstruct, interfaces, Container } from 'inversify';
19
19
  import { DisposableCollection } from '../../common/disposable';
20
- import { TreeWidget, TreeNode, createTreeContainer, TreeProps, TreeImpl, Tree, TreeModel } from '../tree';
20
+ import { TreeWidget, TreeNode, createTreeContainer, TreeProps, TreeModel } from '../tree';
21
21
  import { TreeSource, TreeElement } from './tree-source';
22
22
  import { SourceTree, TreeElementNode, TreeSourceNode } from './source-tree';
23
23
 
@@ -25,14 +25,11 @@ import { SourceTree, TreeElementNode, TreeSourceNode } from './source-tree';
25
25
  export class SourceTreeWidget extends TreeWidget {
26
26
 
27
27
  static createContainer(parent: interfaces.Container, props?: Partial<TreeProps>): Container {
28
- const child = createTreeContainer(parent, props);
29
-
30
- child.unbind(TreeImpl);
31
- child.bind(SourceTree).toSelf();
32
- child.rebind(Tree).toService(SourceTree);
33
-
34
- child.unbind(TreeWidget);
35
- child.bind(SourceTreeWidget).toSelf();
28
+ const child = createTreeContainer(parent, {
29
+ props,
30
+ tree: SourceTree,
31
+ widget: SourceTreeWidget,
32
+ });
36
33
 
37
34
  return child;
38
35
  }
@@ -14,6 +14,8 @@
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
16
 
17
+ /* eslint-disable @typescript-eslint/no-explicit-any */
18
+
17
19
  import { injectable } from 'inversify';
18
20
  import { MaybePromise } from '../../common/types';
19
21
  import { TreeImpl, CompositeTreeNode, TreeNode, SelectableTreeNode, ExpandableTreeNode } from '../tree';
@@ -67,15 +69,15 @@ export class SourceTree extends TreeImpl {
67
69
  } as TreeElementNode;
68
70
  }
69
71
  if (CompositeTreeElementNode.is(updated)) {
70
- delete updated.expanded;
71
- delete updated.children;
72
+ delete (updated as any).expanded;
73
+ delete (updated as any).children;
72
74
  }
73
75
  if (updated) {
74
76
  if (ExpandableTreeNode.is(updated)) {
75
- delete updated.expanded;
77
+ delete (updated as any).expanded;
76
78
  }
77
79
  if (CompositeTreeNode.is(updated)) {
78
- delete updated.children;
80
+ delete (updated as any).children;
79
81
  }
80
82
  return updated;
81
83
  }
@@ -228,6 +228,10 @@
228
228
  font-size: 16px;
229
229
  }
230
230
 
231
+ .p-SplitPanel-handle.sash-hidden {
232
+ visibility: hidden;
233
+ }
234
+
231
235
  /*-----------------------------------------------------------------------------
232
236
  | Perfect scrollbar
233
237
  |----------------------------------------------------------------------------*/
@@ -63,14 +63,6 @@
63
63
  min-height: var(--theia-sash-width);
64
64
  }
65
65
 
66
- .p-SplitPanel[data-orientation='vertical'] > .p-SplitPanel-handle.sash-hidden {
67
- visibility: hidden;
68
- }
69
-
70
- .p-SplitPanel[data-orientation='vertical'] > .p-SplitPanel-handle.sash-hidden::after {
71
- min-height: 0px;
72
- }
73
-
74
66
  .theia-view-container .part {
75
67
  height: 100%;
76
68
  }
@@ -25,3 +25,4 @@ export * from './tree-view-welcome-widget';
25
25
  export * from './tree-container';
26
26
  export * from './tree-decorator';
27
27
  export * from './tree-search';
28
+ export * from './tree-compression';
@@ -0,0 +1,46 @@
1
+ /********************************************************************************
2
+ * Copyright (C) 2022 Ericsson and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License v. 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ ********************************************************************************/
16
+
17
+ import { injectable, inject } from 'inversify';
18
+ import { CompressionToggle, TreeCompressionService } from './tree-compression-service';
19
+ import { ExpandableTreeNode, TreeExpansionServiceImpl } from '../tree-expansion';
20
+
21
+ @injectable()
22
+ export class CompressedExpansionService extends TreeExpansionServiceImpl {
23
+ @inject(CompressionToggle) protected readonly compressionToggle: CompressionToggle;
24
+ @inject(TreeCompressionService) protected readonly compressionService: TreeCompressionService;
25
+
26
+ async expandNode(raw: ExpandableTreeNode): Promise<ExpandableTreeNode | undefined> {
27
+ if (!this.compressionToggle.compress) { return super.expandNode(raw); }
28
+ const participants = this.compressionService.getCompressionChain(raw);
29
+ let expansionRoot;
30
+ for (const node of participants ?? [raw]) {
31
+ const next = await super.expandNode(node);
32
+ expansionRoot = expansionRoot ?? next;
33
+ }
34
+ return expansionRoot;
35
+ }
36
+
37
+ async collapseNode(raw: ExpandableTreeNode): Promise<boolean> {
38
+ if (!this.compressionToggle.compress) { return super.collapseNode(raw); }
39
+ const participants = this.compressionService.getCompressionChain(raw);
40
+ let didCollapse = false;
41
+ for (const participant of participants ?? [raw]) {
42
+ didCollapse = await super.collapseNode(participant) || didCollapse;
43
+ }
44
+ return didCollapse;
45
+ }
46
+ }
@@ -0,0 +1,82 @@
1
+ /********************************************************************************
2
+ * Copyright (C) 2022 Ericsson and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License v. 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ ********************************************************************************/
16
+
17
+ import { injectable, inject } from 'inversify';
18
+ import { CompressionToggle, TreeCompressionService } from './tree-compression-service';
19
+ import { CompositeTreeNode, TreeNode } from '../tree';
20
+ import { TreeModelImpl } from '../tree-model';
21
+ import { SelectableTreeNode, TreeSelection } from '../tree-selection';
22
+ import { ExpandableTreeNode } from '../tree-expansion';
23
+ import { TopDownTreeIterator, TreeIterator } from '../tree-iterator';
24
+
25
+ export class TopDownCompressedTreeIterator extends TopDownTreeIterator {
26
+ protected isCollapsed(candidate: TreeNode): boolean {
27
+ return ExpandableTreeNode.isCollapsed(candidate) && !TreeCompressionService.prototype.isCompressionParent(candidate);
28
+ }
29
+ }
30
+
31
+ enum BackOrForward {
32
+ Forward,
33
+ Backward,
34
+ }
35
+
36
+ @injectable()
37
+ export class CompressedTreeModel extends TreeModelImpl {
38
+ @inject(CompressionToggle) protected readonly compressionToggle: CompressionToggle;
39
+ @inject(TreeCompressionService) protected readonly compressionService: TreeCompressionService;
40
+
41
+ protected selectAdjacentRow(direction: BackOrForward, type: TreeSelection.SelectionType = TreeSelection.SelectionType.DEFAULT): void {
42
+ let startingPoint: TreeNode = this.selectedNodes[0];
43
+ if (this.compressionService.isCompressionParticipant(startingPoint)) {
44
+ const chain = this.compressionService.getCompressionChain(startingPoint);
45
+ startingPoint = (direction === BackOrForward.Backward ? chain?.head() : chain?.tail()) ?? startingPoint;
46
+ }
47
+
48
+ const iterator = direction === BackOrForward.Backward ? this.createBackwardIterator(startingPoint) : this.createIterator(startingPoint);
49
+
50
+ const test = (candidate: TreeNode): candidate is SelectableTreeNode => SelectableTreeNode.isVisible(candidate)
51
+ && (this.compressionService.isCompressionHead(candidate) || !this.compressionService.isCompressionParticipant(candidate));
52
+
53
+ const rowRoot = iterator && this.doGetNextNode(iterator, test);
54
+ const nodes: Array<TreeNode | undefined> = (this.compressionService.getCompressionChain(rowRoot) ?? [rowRoot]).reverse();
55
+
56
+ const node = nodes.find(SelectableTreeNode.is);
57
+
58
+ if (node) {
59
+ this.addSelection({ node, type });
60
+ }
61
+ }
62
+
63
+ selectPrevRow(type?: TreeSelection.SelectionType): void {
64
+ this.selectAdjacentRow(BackOrForward.Backward, type);
65
+ }
66
+
67
+ selectNextRow(type?: TreeSelection.SelectionType): void {
68
+ this.selectAdjacentRow(BackOrForward.Forward, type);
69
+ }
70
+
71
+ protected createForwardIteratorForNode(node: TreeNode): TreeIterator {
72
+ return new TopDownCompressedTreeIterator(node, { pruneCollapsed: true });
73
+ }
74
+
75
+ protected selectIfAncestorOfSelected(node: Readonly<ExpandableTreeNode>): void {
76
+ if (!this.compressionToggle.compress) { return super.selectIfAncestorOfSelected(node); }
77
+ const tail = this.compressionService.getCompressionChain(node)?.tail() ?? node;
78
+ if (SelectableTreeNode.is(tail) && !tail.expanded && this.selectedNodes.some(selectedNode => CompositeTreeNode.isAncestor(tail, selectedNode))) {
79
+ this.selectNode(tail);
80
+ }
81
+ }
82
+ }
@@ -0,0 +1,181 @@
1
+ /********************************************************************************
2
+ * Copyright (C) 2022 Ericsson and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License v. 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ ********************************************************************************/
16
+
17
+ import '../../../../src/browser/tree/tree-compression/tree-compression.css';
18
+ import { injectable, inject } from 'inversify';
19
+ import * as React from 'react';
20
+ import { ArrayUtils } from '../../../common/types';
21
+ import { ContextMenuRenderer } from '../../context-menu-renderer';
22
+ import { CompressionToggle, TreeCompressionService } from './tree-compression-service';
23
+ import { CompositeTreeNode, TreeNode } from '../tree';
24
+ import { NodeProps, TreeProps, TreeWidget } from '../tree-widget';
25
+ import { SelectableTreeNode, TreeSelection } from '../tree-selection';
26
+ import { ExpandableTreeNode } from '../tree-expansion';
27
+ import { TreeViewWelcomeWidget } from '../tree-view-welcome-widget';
28
+ import { CompressedTreeModel } from './compressed-tree-model';
29
+
30
+ export interface CompressedChildren {
31
+ compressionChain?: ArrayUtils.HeadAndTail<TreeNode>;
32
+ }
33
+
34
+ export interface CompressedNodeRow extends TreeWidget.NodeRow, CompressedChildren { }
35
+
36
+ export interface CompressedNodeProps extends NodeProps, CompressedChildren { }
37
+
38
+ @injectable()
39
+ export class CompressedTreeWidget extends TreeViewWelcomeWidget {
40
+
41
+ @inject(CompressionToggle) protected readonly compressionToggle: CompressionToggle;
42
+ @inject(TreeCompressionService) protected readonly compressionService: TreeCompressionService;
43
+
44
+ constructor(
45
+ @inject(TreeProps) readonly props: TreeProps,
46
+ @inject(CompressedTreeModel) readonly model: CompressedTreeModel,
47
+ @inject(ContextMenuRenderer) protected readonly contextMenuRenderer: ContextMenuRenderer,
48
+ ) {
49
+ super(props, model, contextMenuRenderer);
50
+ }
51
+
52
+ protected rows = new Map<string, CompressedNodeRow>();
53
+
54
+ toggleCompression(newCompression = !this.compressionToggle.compress): void {
55
+ if (newCompression !== this.compressionToggle.compress) {
56
+ this.compressionToggle.compress = newCompression;
57
+ this.updateRows();
58
+ }
59
+ }
60
+
61
+ protected shouldDisplayNode(node: TreeNode): boolean {
62
+ if (this.compressionToggle.compress && this.compressionService.isCompressionParticipant(node) && !this.compressionService.isCompressionHead(node)) {
63
+ return false;
64
+ }
65
+ return super.shouldDisplayNode(node);
66
+ }
67
+
68
+ protected getDepthForNode(node: TreeNode, depths: Map<CompositeTreeNode | undefined, number>): number {
69
+ if (!this.compressionToggle.compress) { return super.getDepthForNode(node, depths); }
70
+ const parent = this.compressionService.getCompressionHead(node.parent) ?? node.parent;
71
+ const parentDepth = depths.get(parent);
72
+ return parentDepth === undefined ? 0 : TreeNode.isVisible(node.parent) ? parentDepth + 1 : parentDepth;
73
+ }
74
+
75
+ protected toNodeRow(node: TreeNode, index: number, depth: number): CompressedNodeRow {
76
+ if (!this.compressionToggle.compress) { return super.toNodeRow(node, index, depth); }
77
+ const row: CompressedNodeRow = { node, index, depth };
78
+ if (this.compressionService.isCompressionHead(node)) {
79
+ row.compressionChain = this.compressionService.getCompressionChain(node);
80
+ }
81
+ return row;
82
+ }
83
+
84
+ protected doRenderNodeRow({ node, depth, compressionChain }: CompressedNodeRow): React.ReactNode {
85
+ const nodeProps: CompressedNodeProps = { depth, compressionChain };
86
+ return <>
87
+ {this.renderIndent(node, nodeProps)}
88
+ {this.renderNode(node, nodeProps)}
89
+ </>;
90
+ }
91
+
92
+ protected rowIsSelected(node: TreeNode, props: CompressedNodeProps): boolean {
93
+ if (this.compressionToggle.compress && props.compressionChain) {
94
+ return props.compressionChain.some(participant => SelectableTreeNode.isSelected(participant));
95
+ }
96
+ return SelectableTreeNode.isSelected(node);
97
+ }
98
+
99
+ protected getCaptionAttributes(node: TreeNode, props: CompressedNodeProps): React.Attributes & React.HTMLAttributes<HTMLElement> {
100
+ const operativeNode = props.compressionChain?.tail() ?? node;
101
+ return super.getCaptionAttributes(operativeNode, props);
102
+ }
103
+
104
+ protected getCaptionChildren(node: TreeNode, props: CompressedNodeProps): React.ReactNode {
105
+ if (!this.compressionToggle.compress || !props.compressionChain) { return super.getCaptionChildren(node, props); }
106
+ return props.compressionChain.map((subNode, index, self) => {
107
+ const classes = ['theia-tree-compressed-label-part'];
108
+ if (SelectableTreeNode.isSelected(subNode)) {
109
+ classes.push('theia-tree-compressed-selected');
110
+ }
111
+ const handlers = this.getCaptionChildEventHandlers(subNode, props);
112
+ const caption = <span className={classes.join(' ')} key={subNode.id} {...handlers}>{super.getCaptionChildren(subNode, props)}</span>;
113
+ if (index === self.length - 1) {
114
+ return caption;
115
+ }
116
+ return [
117
+ caption,
118
+ <span className='theia-tree-compressed-label-separator' key={subNode + '-separator'}>{this.getSeparatorContent(node, props)}</span>
119
+ ];
120
+ });
121
+ }
122
+
123
+ protected getCaptionChildEventHandlers(node: TreeNode, props: CompressedNodeProps): React.Attributes & React.HtmlHTMLAttributes<HTMLElement> {
124
+ return {
125
+ onClick: event => (event.stopPropagation(), this.handleClickEvent(node, event)),
126
+ onDoubleClick: event => (event.stopPropagation(), this.handleClickEvent(node, event)),
127
+ onContextMenu: event => (event.stopPropagation(), this.handleClickEvent(node, event)),
128
+ };
129
+ }
130
+
131
+ protected handleUp(event: KeyboardEvent): void {
132
+ if (!this.compressionToggle.compress) { return super.handleUp(event); }
133
+ const type = this.props.multiSelect && this.hasShiftMask(event) ? TreeSelection.SelectionType.RANGE : undefined;
134
+ this.model.selectPrevRow(type);
135
+ }
136
+
137
+ protected handleDown(event: KeyboardEvent): void {
138
+ if (!this.compressionToggle.compress) { return super.handleDown(event); }
139
+ const type = this.props.multiSelect && this.hasShiftMask(event) ? TreeSelection.SelectionType.RANGE : undefined;
140
+ this.model.selectNextRow(type);
141
+ }
142
+
143
+ protected async handleLeft(event: KeyboardEvent): Promise<void> {
144
+ if (!this.compressionToggle.compress) { return super.handleLeft(event); }
145
+ if (Boolean(this.props.multiSelect) && (this.hasCtrlCmdMask(event) || this.hasShiftMask(event))) {
146
+ return;
147
+ }
148
+ const active = this.model.selectedNodes[0];
149
+ if (ExpandableTreeNode.isExpanded(active)
150
+ && (
151
+ this.compressionService.isCompressionHead(active)
152
+ || !this.compressionService.isCompressionParticipant(active)
153
+ )) {
154
+ await this.model.collapseNode(active);
155
+ } else {
156
+ this.model.selectParent();
157
+ }
158
+ }
159
+
160
+ protected async handleRight(event: KeyboardEvent): Promise<void> {
161
+ if (!this.compressionToggle.compress) { return super.handleRight(event); }
162
+ if (Boolean(this.props.multiSelect) && (this.hasCtrlCmdMask(event) || this.hasShiftMask(event))) {
163
+ return;
164
+ }
165
+ const active = this.model.selectedNodes[0];
166
+
167
+ if (ExpandableTreeNode.isCollapsed(active)
168
+ && (
169
+ !this.compressionService.isCompressionParticipant(active)
170
+ || this.compressionService.isCompressionTail(active)
171
+ )) {
172
+ await this.model.expandNode(active);
173
+ } else if (ExpandableTreeNode.is(active)) {
174
+ this.model.selectNextNode();
175
+ }
176
+ }
177
+
178
+ protected getSeparatorContent(node: TreeNode, props: CompressedNodeProps): React.ReactNode {
179
+ return '/';
180
+ }
181
+ }
@@ -0,0 +1,20 @@
1
+ /********************************************************************************
2
+ * Copyright (C) 2022 Ericsson and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License v. 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ ********************************************************************************/
16
+
17
+ export * from './compressed-tree-expansion-service';
18
+ export * from './compressed-tree-model';
19
+ export * from './compressed-tree-widget';
20
+ export * from './tree-compression-service';