@theia/core 1.27.0-next.9 → 1.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (436) hide show
  1. package/README.md +6 -7
  2. package/i18n/nls.cs.json +52 -6
  3. package/i18n/nls.de.json +52 -6
  4. package/i18n/nls.es.json +52 -6
  5. package/i18n/nls.fr.json +52 -6
  6. package/i18n/nls.hu.json +55 -9
  7. package/i18n/nls.it.json +52 -6
  8. package/i18n/nls.ja.json +52 -6
  9. package/i18n/nls.json +52 -6
  10. package/i18n/nls.pl.json +52 -6
  11. package/i18n/nls.pt-br.json +52 -6
  12. package/i18n/nls.pt-pt.json +52 -6
  13. package/i18n/nls.ru.json +52 -6
  14. package/i18n/nls.zh-cn.json +52 -6
  15. package/lib/browser/color-application-contribution.d.ts +2 -2
  16. package/lib/browser/color-application-contribution.d.ts.map +1 -1
  17. package/lib/browser/color-application-contribution.js +15 -16
  18. package/lib/browser/color-application-contribution.js.map +1 -1
  19. package/lib/browser/color-registry.d.ts +0 -4
  20. package/lib/browser/color-registry.d.ts.map +1 -1
  21. package/lib/browser/color-registry.js +0 -14
  22. package/lib/browser/color-registry.js.map +1 -1
  23. package/lib/browser/common-frontend-contribution.d.ts +4 -0
  24. package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
  25. package/lib/browser/common-frontend-contribution.js +157 -163
  26. package/lib/browser/common-frontend-contribution.js.map +1 -1
  27. package/lib/browser/common-styling-participants.d.ts +28 -0
  28. package/lib/browser/common-styling-participants.d.ts.map +1 -0
  29. package/lib/browser/common-styling-participants.js +319 -0
  30. package/lib/browser/common-styling-participants.js.map +1 -0
  31. package/lib/browser/connection-status-service.d.ts.map +1 -1
  32. package/lib/browser/connection-status-service.js +2 -2
  33. package/lib/browser/connection-status-service.js.map +1 -1
  34. package/lib/browser/connection-status-service.spec.js +1 -2
  35. package/lib/browser/connection-status-service.spec.js.map +1 -1
  36. package/lib/browser/context-menu-renderer.d.ts +1 -5
  37. package/lib/browser/context-menu-renderer.d.ts.map +1 -1
  38. package/lib/browser/context-menu-renderer.js +10 -30
  39. package/lib/browser/context-menu-renderer.js.map +1 -1
  40. package/lib/browser/core-preferences.d.ts +1 -0
  41. package/lib/browser/core-preferences.d.ts.map +1 -1
  42. package/lib/browser/core-preferences.js +5 -0
  43. package/lib/browser/core-preferences.js.map +1 -1
  44. package/lib/browser/decoration-style.d.ts +1 -0
  45. package/lib/browser/decoration-style.d.ts.map +1 -1
  46. package/lib/browser/decoration-style.js +6 -2
  47. package/lib/browser/decoration-style.js.map +1 -1
  48. package/lib/browser/frontend-application-bindings.d.ts.map +1 -1
  49. package/lib/browser/frontend-application-bindings.js +1 -3
  50. package/lib/browser/frontend-application-bindings.js.map +1 -1
  51. package/lib/browser/frontend-application-config-provider.d.ts +1 -0
  52. package/lib/browser/frontend-application-config-provider.d.ts.map +1 -1
  53. package/lib/browser/frontend-application-config-provider.js +2 -1
  54. package/lib/browser/frontend-application-config-provider.js.map +1 -1
  55. package/lib/browser/frontend-application-module.d.ts.map +1 -1
  56. package/lib/browser/frontend-application-module.js +9 -3
  57. package/lib/browser/frontend-application-module.js.map +1 -1
  58. package/lib/browser/i18n/i18n-frontend-module.d.ts.map +1 -1
  59. package/lib/browser/i18n/i18n-frontend-module.js +2 -0
  60. package/lib/browser/i18n/i18n-frontend-module.js.map +1 -1
  61. package/lib/browser/i18n/language-quick-pick-service.d.ts +17 -0
  62. package/lib/browser/i18n/language-quick-pick-service.d.ts.map +1 -0
  63. package/lib/browser/i18n/language-quick-pick-service.js +142 -0
  64. package/lib/browser/i18n/language-quick-pick-service.js.map +1 -0
  65. package/lib/browser/index.d.ts +1 -0
  66. package/lib/browser/index.d.ts.map +1 -1
  67. package/lib/browser/index.js +1 -0
  68. package/lib/browser/index.js.map +1 -1
  69. package/lib/browser/keybinding.d.ts.map +1 -1
  70. package/lib/browser/keybinding.js +2 -1
  71. package/lib/browser/keybinding.js.map +1 -1
  72. package/lib/browser/keybinding.spec.js +18 -21
  73. package/lib/browser/keybinding.spec.js.map +1 -1
  74. package/lib/browser/label-provider.d.ts +0 -12
  75. package/lib/browser/label-provider.d.ts.map +1 -1
  76. package/lib/browser/label-provider.js +1 -13
  77. package/lib/browser/label-provider.js.map +1 -1
  78. package/lib/browser/logger-frontend-module.d.ts.map +1 -1
  79. package/lib/browser/logger-frontend-module.js +8 -1
  80. package/lib/browser/logger-frontend-module.js.map +1 -1
  81. package/lib/browser/messaging/ws-connection-provider.d.ts +5 -4
  82. package/lib/browser/messaging/ws-connection-provider.d.ts.map +1 -1
  83. package/lib/browser/messaging/ws-connection-provider.js +30 -23
  84. package/lib/browser/messaging/ws-connection-provider.js.map +1 -1
  85. package/lib/browser/preferences/preference-contribution.d.ts +2 -19
  86. package/lib/browser/preferences/preference-contribution.d.ts.map +1 -1
  87. package/lib/browser/preferences/preference-contribution.js +1 -24
  88. package/lib/browser/preferences/preference-contribution.js.map +1 -1
  89. package/lib/browser/preferences/preference-proxy.d.ts +0 -4
  90. package/lib/browser/preferences/preference-proxy.d.ts.map +1 -1
  91. package/lib/browser/preferences/preference-proxy.js.map +1 -1
  92. package/lib/browser/preferences/preference-proxy.spec.js +3 -102
  93. package/lib/browser/preferences/preference-proxy.spec.js.map +1 -1
  94. package/lib/browser/preferences/preference-schema-provider.spec.js +4 -3
  95. package/lib/browser/preferences/preference-schema-provider.spec.js.map +1 -1
  96. package/lib/browser/preferences/preference-service.spec.js +1 -2
  97. package/lib/browser/preferences/preference-service.spec.js.map +1 -1
  98. package/lib/browser/preferences/preference-validation-service.d.ts +2 -2
  99. package/lib/browser/preferences/preference-validation-service.d.ts.map +1 -1
  100. package/lib/browser/preferences/preference-validation-service.spec.js.map +1 -1
  101. package/lib/browser/preloader.d.ts.map +1 -1
  102. package/lib/browser/preloader.js +7 -1
  103. package/lib/browser/preloader.js.map +1 -1
  104. package/lib/browser/progress-status-bar-item.d.ts +1 -1
  105. package/lib/browser/progress-status-bar-item.d.ts.map +1 -1
  106. package/lib/browser/quick-input/quick-command-service.d.ts.map +1 -1
  107. package/lib/browser/quick-input/quick-command-service.js +2 -2
  108. package/lib/browser/quick-input/quick-command-service.js.map +1 -1
  109. package/lib/browser/saveable.d.ts.map +1 -1
  110. package/lib/browser/saveable.js +5 -4
  111. package/lib/browser/saveable.js.map +1 -1
  112. package/lib/browser/shell/application-shell.d.ts +4 -0
  113. package/lib/browser/shell/application-shell.d.ts.map +1 -1
  114. package/lib/browser/shell/application-shell.js +42 -36
  115. package/lib/browser/shell/application-shell.js.map +1 -1
  116. package/lib/browser/shell/shell-layout-restorer.d.ts +2 -0
  117. package/lib/browser/shell/shell-layout-restorer.d.ts.map +1 -1
  118. package/lib/browser/shell/shell-layout-restorer.js +5 -1
  119. package/lib/browser/shell/shell-layout-restorer.js.map +1 -1
  120. package/lib/browser/shell/side-panel-handler.d.ts.map +1 -1
  121. package/lib/browser/shell/side-panel-handler.js +3 -2
  122. package/lib/browser/shell/side-panel-handler.js.map +1 -1
  123. package/lib/browser/shell/tab-bars.d.ts +4 -2
  124. package/lib/browser/shell/tab-bars.d.ts.map +1 -1
  125. package/lib/browser/shell/tab-bars.js +12 -4
  126. package/lib/browser/shell/tab-bars.js.map +1 -1
  127. package/lib/browser/source-tree/source-tree-widget.js +1 -1
  128. package/lib/browser/source-tree/source-tree-widget.js.map +1 -1
  129. package/lib/browser/source-tree/tree-source.d.ts +2 -1
  130. package/lib/browser/source-tree/tree-source.d.ts.map +1 -1
  131. package/lib/browser/source-tree/tree-source.js.map +1 -1
  132. package/lib/browser/styling-service.d.ts +26 -0
  133. package/lib/browser/styling-service.d.ts.map +1 -0
  134. package/lib/browser/styling-service.js +76 -0
  135. package/lib/browser/styling-service.js.map +1 -0
  136. package/lib/browser/theming.d.ts +4 -8
  137. package/lib/browser/theming.d.ts.map +1 -1
  138. package/lib/browser/theming.js +38 -53
  139. package/lib/browser/theming.js.map +1 -1
  140. package/lib/browser/tree/search-box.d.ts.map +1 -1
  141. package/lib/browser/tree/search-box.js +5 -4
  142. package/lib/browser/tree/search-box.js.map +1 -1
  143. package/lib/browser/tree/test/tree-test-container.d.ts.map +1 -1
  144. package/lib/browser/tree/test/tree-test-container.js +2 -0
  145. package/lib/browser/tree/test/tree-test-container.js.map +1 -1
  146. package/lib/browser/tree/tree-compression/compressed-tree-model.d.ts +1 -1
  147. package/lib/browser/tree/tree-compression/compressed-tree-model.d.ts.map +1 -1
  148. package/lib/browser/tree/tree-compression/compressed-tree-model.js +4 -2
  149. package/lib/browser/tree/tree-compression/compressed-tree-model.js.map +1 -1
  150. package/lib/browser/tree/tree-compression/compressed-tree-widget.d.ts.map +1 -1
  151. package/lib/browser/tree/tree-compression/compressed-tree-widget.js +4 -2
  152. package/lib/browser/tree/tree-compression/compressed-tree-widget.js.map +1 -1
  153. package/lib/browser/tree/tree-container.d.ts +2 -0
  154. package/lib/browser/tree/tree-container.d.ts.map +1 -1
  155. package/lib/browser/tree/tree-container.js +3 -0
  156. package/lib/browser/tree/tree-container.js.map +1 -1
  157. package/lib/browser/tree/tree-focus-service.d.ts +20 -0
  158. package/lib/browser/tree/tree-focus-service.d.ts.map +1 -0
  159. package/lib/browser/tree/tree-focus-service.js +62 -0
  160. package/lib/browser/tree/tree-focus-service.js.map +1 -0
  161. package/lib/browser/tree/tree-model.d.ts +11 -2
  162. package/lib/browser/tree/tree-model.d.ts.map +1 -1
  163. package/lib/browser/tree/tree-model.js +29 -8
  164. package/lib/browser/tree/tree-model.js.map +1 -1
  165. package/lib/browser/tree/tree-selection-impl.d.ts +4 -1
  166. package/lib/browser/tree/tree-selection-impl.d.ts.map +1 -1
  167. package/lib/browser/tree/tree-selection-impl.js +13 -2
  168. package/lib/browser/tree/tree-selection-impl.js.map +1 -1
  169. package/lib/browser/tree/tree-selection-state.d.ts +1 -0
  170. package/lib/browser/tree/tree-selection-state.d.ts.map +1 -1
  171. package/lib/browser/tree/tree-selection-state.js +8 -2
  172. package/lib/browser/tree/tree-selection-state.js.map +1 -1
  173. package/lib/browser/tree/tree-selection.d.ts +9 -0
  174. package/lib/browser/tree/tree-selection.d.ts.map +1 -1
  175. package/lib/browser/tree/tree-selection.js +3 -0
  176. package/lib/browser/tree/tree-selection.js.map +1 -1
  177. package/lib/browser/tree/tree-widget-selection.d.ts.map +1 -1
  178. package/lib/browser/tree/tree-widget-selection.js +9 -1
  179. package/lib/browser/tree/tree-widget-selection.js.map +1 -1
  180. package/lib/browser/tree/tree-widget.d.ts +14 -0
  181. package/lib/browser/tree/tree-widget.d.ts.map +1 -1
  182. package/lib/browser/tree/tree-widget.js +80 -40
  183. package/lib/browser/tree/tree-widget.js.map +1 -1
  184. package/lib/browser/tree/tree.d.ts +2 -1
  185. package/lib/browser/tree/tree.d.ts.map +1 -1
  186. package/lib/browser/tree/tree.js +12 -2
  187. package/lib/browser/tree/tree.js.map +1 -1
  188. package/lib/browser/view-container.d.ts +9 -4
  189. package/lib/browser/view-container.d.ts.map +1 -1
  190. package/lib/browser/view-container.js +36 -6
  191. package/lib/browser/view-container.js.map +1 -1
  192. package/lib/common/cancellation.d.ts +1 -0
  193. package/lib/common/cancellation.d.ts.map +1 -1
  194. package/lib/common/cancellation.js +8 -0
  195. package/lib/common/cancellation.js.map +1 -1
  196. package/lib/common/command.d.ts +1 -1
  197. package/lib/common/command.d.ts.map +1 -1
  198. package/lib/common/command.js +13 -16
  199. package/lib/common/command.js.map +1 -1
  200. package/lib/common/index.d.ts +1 -0
  201. package/lib/common/index.d.ts.map +1 -1
  202. package/lib/common/index.js +1 -0
  203. package/lib/common/index.js.map +1 -1
  204. package/lib/common/message-rpc/channel.d.ts +106 -0
  205. package/lib/common/message-rpc/channel.d.ts.map +1 -0
  206. package/lib/common/message-rpc/channel.js +195 -0
  207. package/lib/common/message-rpc/channel.js.map +1 -0
  208. package/lib/common/message-rpc/channel.spec.d.ts +9 -0
  209. package/lib/common/message-rpc/channel.spec.d.ts.map +1 -0
  210. package/lib/common/message-rpc/channel.spec.js +80 -0
  211. package/lib/common/message-rpc/channel.spec.js.map +1 -0
  212. package/lib/common/message-rpc/index.d.ts +4 -0
  213. package/lib/common/message-rpc/index.d.ts.map +1 -0
  214. package/lib/{node/messaging/logger.js → common/message-rpc/index.js} +6 -19
  215. package/lib/common/message-rpc/index.js.map +1 -0
  216. package/lib/common/message-rpc/message-buffer.d.ts +50 -0
  217. package/lib/common/message-rpc/message-buffer.d.ts.map +1 -0
  218. package/lib/common/message-rpc/message-buffer.js +56 -0
  219. package/lib/common/message-rpc/message-buffer.js.map +1 -0
  220. package/lib/common/message-rpc/rpc-message-encoder.d.ts +171 -0
  221. package/lib/common/message-rpc/rpc-message-encoder.d.ts.map +1 -0
  222. package/lib/common/message-rpc/rpc-message-encoder.js +409 -0
  223. package/lib/common/message-rpc/rpc-message-encoder.js.map +1 -0
  224. package/lib/common/message-rpc/rpc-message-encoder.spec.d.ts +2 -0
  225. package/lib/common/message-rpc/rpc-message-encoder.spec.d.ts.map +1 -0
  226. package/lib/common/message-rpc/rpc-message-encoder.spec.js +49 -0
  227. package/lib/common/message-rpc/rpc-message-encoder.spec.js.map +1 -0
  228. package/lib/common/message-rpc/rpc-protocol.d.ts +61 -0
  229. package/lib/common/message-rpc/rpc-protocol.d.ts.map +1 -0
  230. package/lib/common/message-rpc/rpc-protocol.js +183 -0
  231. package/lib/common/message-rpc/rpc-protocol.js.map +1 -0
  232. package/lib/common/message-rpc/uint8-array-message-buffer.d.ts +52 -0
  233. package/lib/common/message-rpc/uint8-array-message-buffer.d.ts.map +1 -0
  234. package/lib/common/message-rpc/uint8-array-message-buffer.js +169 -0
  235. package/lib/common/message-rpc/uint8-array-message-buffer.js.map +1 -0
  236. package/lib/common/message-rpc/uint8-array-message-buffer.spec.d.ts +2 -0
  237. package/lib/common/message-rpc/uint8-array-message-buffer.spec.d.ts.map +1 -0
  238. package/lib/common/message-rpc/uint8-array-message-buffer.spec.js +39 -0
  239. package/lib/common/message-rpc/uint8-array-message-buffer.spec.js.map +1 -0
  240. package/lib/common/messaging/abstract-connection-provider.d.ts +9 -8
  241. package/lib/common/messaging/abstract-connection-provider.d.ts.map +1 -1
  242. package/lib/common/messaging/abstract-connection-provider.js +20 -35
  243. package/lib/common/messaging/abstract-connection-provider.js.map +1 -1
  244. package/lib/common/messaging/connection-error-handler.d.ts +1 -2
  245. package/lib/common/messaging/connection-error-handler.d.ts.map +1 -1
  246. package/lib/common/messaging/connection-error-handler.js +1 -1
  247. package/lib/common/messaging/connection-error-handler.js.map +1 -1
  248. package/lib/common/messaging/handler.d.ts +2 -2
  249. package/lib/common/messaging/handler.d.ts.map +1 -1
  250. package/lib/common/messaging/proxy-factory.d.ts +13 -7
  251. package/lib/common/messaging/proxy-factory.d.ts.map +1 -1
  252. package/lib/common/messaging/proxy-factory.js +18 -13
  253. package/lib/common/messaging/proxy-factory.js.map +1 -1
  254. package/lib/common/messaging/proxy-factory.spec.js +4 -15
  255. package/lib/common/messaging/proxy-factory.spec.js.map +1 -1
  256. package/lib/common/messaging/web-socket-channel.d.ts +54 -48
  257. package/lib/common/messaging/web-socket-channel.d.ts.map +1 -1
  258. package/lib/common/messaging/web-socket-channel.js +41 -105
  259. package/lib/common/messaging/web-socket-channel.js.map +1 -1
  260. package/lib/common/nls.d.ts +2 -0
  261. package/lib/common/nls.d.ts.map +1 -1
  262. package/lib/common/nls.js +11 -0
  263. package/lib/common/nls.js.map +1 -1
  264. package/lib/common/preferences/preference-schema.d.ts +1 -5
  265. package/lib/common/preferences/preference-schema.d.ts.map +1 -1
  266. package/lib/common/preferences/preference-schema.js.map +1 -1
  267. package/lib/common/promise-util.d.ts +2 -1
  268. package/lib/common/promise-util.d.ts.map +1 -1
  269. package/lib/common/promise-util.js +8 -13
  270. package/lib/common/promise-util.js.map +1 -1
  271. package/lib/common/resource.d.ts +5 -0
  272. package/lib/common/resource.d.ts.map +1 -1
  273. package/lib/common/resource.js +28 -1
  274. package/lib/common/resource.js.map +1 -1
  275. package/lib/common/theme.d.ts +3 -2
  276. package/lib/common/theme.d.ts.map +1 -1
  277. package/lib/common/theme.js +5 -0
  278. package/lib/common/theme.js.map +1 -1
  279. package/lib/electron-browser/messaging/electron-ipc-connection-provider.d.ts +2 -2
  280. package/lib/electron-browser/messaging/electron-ipc-connection-provider.d.ts.map +1 -1
  281. package/lib/electron-browser/messaging/electron-ipc-connection-provider.js +18 -7
  282. package/lib/electron-browser/messaging/electron-ipc-connection-provider.js.map +1 -1
  283. package/lib/electron-browser/messaging/electron-ws-connection-provider.d.ts +2 -2
  284. package/lib/electron-browser/messaging/electron-ws-connection-provider.d.ts.map +1 -1
  285. package/lib/electron-browser/messaging/electron-ws-connection-provider.js +5 -7
  286. package/lib/electron-browser/messaging/electron-ws-connection-provider.js.map +1 -1
  287. package/lib/electron-main/event-utils.d.ts +1 -1
  288. package/lib/electron-main/messaging/electron-messaging-contribution.d.ts +37 -9
  289. package/lib/electron-main/messaging/electron-messaging-contribution.d.ts.map +1 -1
  290. package/lib/electron-main/messaging/electron-messaging-contribution.js +83 -68
  291. package/lib/electron-main/messaging/electron-messaging-contribution.js.map +1 -1
  292. package/lib/electron-main/messaging/electron-messaging-service.d.ts +2 -8
  293. package/lib/electron-main/messaging/electron-messaging-service.d.ts.map +1 -1
  294. package/lib/electron-main/messaging/electron-messaging-service.js.map +1 -1
  295. package/lib/node/messaging/binary-message-pipe.d.ts +45 -0
  296. package/lib/node/messaging/binary-message-pipe.d.ts.map +1 -0
  297. package/lib/node/messaging/binary-message-pipe.js +152 -0
  298. package/lib/node/messaging/binary-message-pipe.js.map +1 -0
  299. package/lib/node/messaging/ipc-bootstrap.js +2 -11
  300. package/lib/node/messaging/ipc-bootstrap.js.map +1 -1
  301. package/lib/node/messaging/ipc-channel.d.ts +26 -0
  302. package/lib/node/messaging/ipc-channel.d.ts.map +1 -0
  303. package/lib/node/messaging/ipc-channel.js +86 -0
  304. package/lib/node/messaging/ipc-channel.js.map +1 -0
  305. package/lib/node/messaging/ipc-connection-provider.d.ts +3 -5
  306. package/lib/node/messaging/ipc-connection-provider.d.ts.map +1 -1
  307. package/lib/node/messaging/ipc-connection-provider.js +14 -31
  308. package/lib/node/messaging/ipc-connection-provider.js.map +1 -1
  309. package/lib/node/messaging/ipc-protocol.d.ts +2 -2
  310. package/lib/node/messaging/ipc-protocol.d.ts.map +1 -1
  311. package/lib/node/messaging/messaging-contribution.d.ts +6 -9
  312. package/lib/node/messaging/messaging-contribution.d.ts.map +1 -1
  313. package/lib/node/messaging/messaging-contribution.js +23 -68
  314. package/lib/node/messaging/messaging-contribution.js.map +1 -1
  315. package/lib/node/messaging/messaging-service.d.ts +4 -23
  316. package/lib/node/messaging/messaging-service.d.ts.map +1 -1
  317. package/lib/node/messaging/messaging-service.js +1 -15
  318. package/lib/node/messaging/messaging-service.js.map +1 -1
  319. package/lib/node/messaging/test/test-web-socket-channel.d.ts +4 -2
  320. package/lib/node/messaging/test/test-web-socket-channel.d.ts.map +1 -1
  321. package/lib/node/messaging/test/test-web-socket-channel.js +25 -12
  322. package/lib/node/messaging/test/test-web-socket-channel.js.map +1 -1
  323. package/lib/node/request/proxy-cli-contribution.js +1 -1
  324. package/lib/node/request/proxy-cli-contribution.js.map +1 -1
  325. package/package.json +7 -10
  326. package/src/browser/color-application-contribution.ts +10 -17
  327. package/src/browser/color-registry.ts +0 -5
  328. package/src/browser/common-frontend-contribution.ts +26 -33
  329. package/src/browser/common-styling-participants.ts +307 -0
  330. package/src/browser/connection-status-service.spec.ts +1 -4
  331. package/src/browser/connection-status-service.ts +3 -3
  332. package/src/browser/context-menu-renderer.ts +13 -29
  333. package/src/browser/core-preferences.ts +6 -0
  334. package/src/browser/decoration-style.ts +6 -2
  335. package/src/browser/frontend-application-bindings.ts +1 -3
  336. package/src/browser/frontend-application-config-provider.ts +2 -0
  337. package/src/browser/frontend-application-module.ts +11 -4
  338. package/src/browser/i18n/i18n-frontend-module.ts +2 -0
  339. package/src/browser/i18n/language-quick-pick-service.ts +128 -0
  340. package/src/browser/index.ts +1 -0
  341. package/src/browser/keybinding.spec.ts +22 -27
  342. package/src/browser/keybinding.ts +2 -1
  343. package/src/browser/label-provider.ts +0 -13
  344. package/src/browser/logger-frontend-module.ts +8 -1
  345. package/src/browser/messaging/ws-connection-provider.ts +34 -25
  346. package/src/browser/preferences/preference-contribution.ts +3 -28
  347. package/src/browser/preferences/preference-proxy.spec.ts +3 -113
  348. package/src/browser/preferences/preference-proxy.ts +0 -4
  349. package/src/browser/preferences/preference-schema-provider.spec.ts +1 -4
  350. package/src/browser/preferences/preference-service.spec.ts +1 -5
  351. package/src/browser/preferences/preference-validation-service.spec.ts +2 -2
  352. package/src/browser/preferences/preference-validation-service.ts +2 -2
  353. package/src/browser/preloader.ts +9 -2
  354. package/src/browser/progress-status-bar-item.ts +1 -1
  355. package/src/browser/quick-input/quick-command-service.ts +3 -3
  356. package/src/browser/saveable.ts +5 -4
  357. package/src/browser/shell/application-shell.ts +42 -35
  358. package/src/browser/shell/shell-layout-restorer.ts +4 -6
  359. package/src/browser/shell/side-panel-handler.ts +3 -2
  360. package/src/browser/shell/tab-bars.ts +14 -4
  361. package/src/browser/source-tree/source-tree-widget.tsx +1 -1
  362. package/src/browser/source-tree/tree-source.ts +2 -1
  363. package/src/browser/style/breadcrumbs.css +0 -1
  364. package/src/browser/style/index.css +66 -29
  365. package/src/browser/style/menus.css +4 -2
  366. package/src/browser/style/select-component.css +2 -0
  367. package/src/browser/style/sidepanel.css +11 -25
  368. package/src/browser/style/status-bar.css +8 -17
  369. package/src/browser/style/tabs.css +0 -16
  370. package/src/browser/style/tooltip.css +3 -3
  371. package/src/browser/style/tree.css +27 -11
  372. package/src/browser/style/view-container.css +4 -0
  373. package/src/browser/styling-service.ts +76 -0
  374. package/src/browser/theming.ts +18 -45
  375. package/src/browser/tree/search-box.ts +5 -4
  376. package/src/browser/tree/test/tree-test-container.ts +2 -0
  377. package/src/browser/tree/tree-compression/compressed-tree-model.ts +8 -2
  378. package/src/browser/tree/tree-compression/compressed-tree-widget.tsx +4 -2
  379. package/src/browser/tree/tree-container.ts +4 -0
  380. package/src/browser/tree/tree-focus-service.ts +55 -0
  381. package/src/browser/tree/tree-model.ts +32 -8
  382. package/src/browser/tree/tree-selection-impl.ts +13 -4
  383. package/src/browser/tree/tree-selection-state.ts +7 -2
  384. package/src/browser/tree/tree-selection.ts +10 -0
  385. package/src/browser/tree/tree-widget-selection.ts +10 -1
  386. package/src/browser/tree/tree-widget.tsx +83 -43
  387. package/src/browser/tree/tree.ts +8 -2
  388. package/src/browser/view-container.ts +41 -4
  389. package/src/common/cancellation.ts +8 -0
  390. package/src/common/command.ts +14 -16
  391. package/src/common/index.ts +1 -0
  392. package/src/common/message-rpc/channel.spec.ts +88 -0
  393. package/src/common/message-rpc/channel.ts +260 -0
  394. package/src/{node/messaging/logger.ts → common/message-rpc/index.ts} +4 -23
  395. package/src/common/message-rpc/message-buffer.ts +99 -0
  396. package/src/common/message-rpc/rpc-message-encoder.spec.ts +55 -0
  397. package/src/common/message-rpc/rpc-message-encoder.ts +552 -0
  398. package/src/common/message-rpc/rpc-protocol.ts +217 -0
  399. package/src/common/message-rpc/uint8-array-message-buffer.spec.ts +41 -0
  400. package/src/common/message-rpc/uint8-array-message-buffer.ts +206 -0
  401. package/src/common/messaging/abstract-connection-provider.ts +28 -37
  402. package/src/common/messaging/connection-error-handler.ts +1 -2
  403. package/src/common/messaging/handler.ts +2 -2
  404. package/src/common/messaging/proxy-factory.spec.ts +4 -17
  405. package/src/common/messaging/proxy-factory.ts +27 -16
  406. package/src/common/messaging/web-socket-channel.ts +79 -135
  407. package/src/common/nls.ts +11 -0
  408. package/src/common/preferences/preference-schema.ts +1 -6
  409. package/src/common/promise-util.ts +13 -14
  410. package/src/common/resource.ts +29 -2
  411. package/src/common/theme.ts +6 -2
  412. package/src/electron-browser/messaging/electron-ipc-connection-provider.ts +21 -7
  413. package/src/electron-browser/messaging/electron-ws-connection-provider.ts +5 -8
  414. package/src/electron-main/messaging/electron-messaging-contribution.ts +87 -65
  415. package/src/electron-main/messaging/electron-messaging-service.ts +2 -8
  416. package/src/node/messaging/binary-message-pipe.ts +168 -0
  417. package/src/node/messaging/ipc-bootstrap.ts +3 -11
  418. package/src/node/messaging/ipc-channel.ts +97 -0
  419. package/src/node/messaging/ipc-connection-provider.ts +18 -35
  420. package/src/node/messaging/ipc-protocol.ts +2 -2
  421. package/src/node/messaging/messaging-contribution.ts +29 -74
  422. package/src/node/messaging/messaging-service.ts +4 -31
  423. package/src/node/messaging/test/test-web-socket-channel.ts +26 -17
  424. package/src/node/request/proxy-cli-contribution.ts +1 -1
  425. package/lib/browser/preferences/validated-preference-proxy.d.ts +0 -21
  426. package/lib/browser/preferences/validated-preference-proxy.d.ts.map +0 -1
  427. package/lib/browser/preferences/validated-preference-proxy.js +0 -118
  428. package/lib/browser/preferences/validated-preference-proxy.js.map +0 -1
  429. package/lib/node/messaging/logger.d.ts +0 -8
  430. package/lib/node/messaging/logger.d.ts.map +0 -1
  431. package/lib/node/messaging/logger.js.map +0 -1
  432. package/shared/vscode-ws-jsonrpc/index.d.ts +0 -1
  433. package/shared/vscode-ws-jsonrpc/index.js +0 -1
  434. package/src/browser/preferences/validated-preference-proxy.ts +0 -111
  435. package/src/browser/style/variables-bright.useable.css +0 -93
  436. package/src/browser/style/variables-dark.useable.css +0 -93
@@ -31,7 +31,6 @@ import { PreferenceScope } from './preference-scope';
31
31
  import { PreferenceProvider } from './preference-provider';
32
32
  import { FrontendApplicationConfigProvider } from '../frontend-application-config-provider';
33
33
  import { PreferenceProxyOptions, PreferenceProxy, PreferenceChangeEvent, createPreferenceProxy } from './preference-proxy';
34
- import { ApplicationProps } from '@theia/application-package/lib/application-props';
35
34
  import { PreferenceProxyFactory } from './injectable-preference-proxy';
36
35
  import { waitForEvent } from '../../common/promise-util';
37
36
 
@@ -43,8 +42,6 @@ process.on('unhandledRejection', (reason, promise) => {
43
42
  });
44
43
 
45
44
  import { expect } from 'chai';
46
- import { PreferenceValidationService } from './preference-validation-service';
47
- import { JSONValue } from '@phosphor/coreutils';
48
45
  let testContainer: Container;
49
46
 
50
47
  function createTestContainer(): Container {
@@ -57,14 +54,10 @@ function createTestContainer(): Container {
57
54
  describe('Preference Proxy', () => {
58
55
  let prefService: PreferenceServiceImpl;
59
56
  let prefSchema: PreferenceSchemaProvider;
60
- let validator: PreferenceValidationService;
61
57
 
62
58
  before(() => {
63
59
  disableJSDOM = enableJSDOM();
64
- FrontendApplicationConfigProvider.set({
65
- ...ApplicationProps.DEFAULT.frontend.config,
66
- 'applicationName': 'test'
67
- });
60
+ FrontendApplicationConfigProvider.set({});
68
61
  });
69
62
 
70
63
  after(() => {
@@ -75,7 +68,6 @@ describe('Preference Proxy', () => {
75
68
  testContainer = createTestContainer();
76
69
  prefSchema = testContainer.get(PreferenceSchemaProvider);
77
70
  prefService = testContainer.get<PreferenceService>(PreferenceService) as PreferenceServiceImpl;
78
- validator = testContainer.get(PreferenceValidationService);
79
71
  getProvider(PreferenceScope.User).markReady();
80
72
  getProvider(PreferenceScope.Workspace).markReady();
81
73
  getProvider(PreferenceScope.Folder).markReady();
@@ -121,13 +113,13 @@ describe('Preference Proxy', () => {
121
113
  prefSchema.setSchema(s);
122
114
  resolve(s);
123
115
  }, 1000));
124
- const proxy = (testOptions.useFactory || options?.validated)
116
+ const proxy = testOptions.useFactory
125
117
  ? testContainer.get<PreferenceProxyFactory>(PreferenceProxyFactory)(promisedSchema, options)
126
118
  : createPreferenceProxy(prefService, promisedSchema, options);
127
119
  return { proxy, promisedSchema };
128
120
  } else {
129
121
  prefSchema.setSchema(s);
130
- const proxy = (testOptions.useFactory || options?.validated)
122
+ const proxy = testOptions.useFactory
131
123
  ? testContainer.get<PreferenceProxyFactory>(PreferenceProxyFactory)(s, options)
132
124
  : createPreferenceProxy(prefService, s, options);
133
125
  return { proxy };
@@ -275,108 +267,6 @@ describe('Preference Proxy', () => {
275
267
  expect(changesAffectingTypescript, 'One event should have been fired that does affect typescript.').to.equal(1);
276
268
  });
277
269
 
278
- if (testOptions.useFactory) {
279
- async function prepareValidationTest(): Promise<{ proxy: PreferenceProxy<{ [key: string]: unknown }>, validationCallCounter: { calls: number } }> {
280
- const validationCallCounter = { calls: 0 };
281
- const originalValidateByName = validator.validateByName.bind(validator);
282
- function newValidateByName(...args: unknown[]): JSONValue {
283
- validationCallCounter.calls++;
284
- return originalValidateByName(...args);
285
- };
286
- validator.validateByName = newValidateByName;
287
- const { proxy, promisedSchema } = getProxy({
288
- properties: {
289
- 'my.pref': {
290
- type: 'string',
291
- defaultValue: 'foo',
292
- overridable: true,
293
- }
294
- }
295
- }, { style: 'both', validated: true });
296
- await promisedSchema;
297
- return { proxy, validationCallCounter };
298
- }
299
-
300
- it('Validated proxies always return good values.', async () => {
301
- const { proxy, validationCallCounter } = await prepareValidationTest();
302
- let event: PreferenceChangeEvent<{ [key: string]: unknown }> | undefined = undefined;
303
- proxy.onPreferenceChanged(change => event = change);
304
- expect(proxy['my.pref']).to.equal('foo', 'Should start with default value.');
305
- expect(validationCallCounter.calls).to.equal(1, 'Should have validated preference retrieval.');
306
- expect(proxy.get('my.pref')).to.equal('foo', 'Should have default value for `get`.');
307
- expect(validationCallCounter.calls).to.equal(1, 'Should have cached first validation.');
308
- const newValue = 'Also a string';
309
- await prefService.set('my.pref', newValue, PreferenceScope.User);
310
- expect(event !== undefined);
311
- expect(event!.newValue).to.equal(newValue, 'Should accept good value');
312
- expect(validationCallCounter.calls).to.equal(2, 'Should have validated event value');
313
- expect(proxy['my.pref']).to.equal(newValue, 'Should return default value on access.');
314
- expect(proxy.get('my.pref')).to.equal(newValue);
315
- expect(validationCallCounter.calls).to.equal(2, 'Should have used cached value for retrievals');
316
- await prefService.set('my.pref', { complete: 'garbage' }, PreferenceScope.User);
317
- expect(event !== undefined);
318
- expect(event!.newValue).to.equal('foo', 'Should have fallen back to default.');
319
- expect(validationCallCounter.calls).to.equal(3, 'Should have validated event');
320
- expect(proxy['my.pref']).to.equal('foo', 'Should return default value on access.');
321
- expect(proxy.get('my.pref')).to.equal('foo');
322
- expect(validationCallCounter.calls).to.equal(3, 'Should have used cached value for retrievals');
323
- });
324
-
325
- it('Validated proxies only validate one value if multiple language-override events are emitted for the same change', async () => {
326
- const { proxy, validationCallCounter } = await prepareValidationTest();
327
- prefSchema.registerOverrideIdentifier('swift');
328
- prefSchema.registerOverrideIdentifier('typescript');
329
- const events: Array<PreferenceChangeEvent<{ [key: string]: unknown }>> = [];
330
- proxy.onPreferenceChanged(event => events.push(event));
331
- await prefService.set('my.pref', { complete: 'garbage' }, PreferenceScope.User);
332
- expect(validationCallCounter.calls, 'Validation should have been performed once.').to.equal(1);
333
- expect(events).to.have.length(3, 'One event for base, one for each override');
334
- expect(events.every(event => event.newValue === 'foo'), 'Should have returned the default in case of garbage.');
335
- });
336
-
337
- it("Validated proxies don't retain old values for overrides after a change (no emitter).", async () => {
338
- const { proxy, validationCallCounter } = await prepareValidationTest();
339
- prefSchema.registerOverrideIdentifier('swift');
340
- const initialValue = proxy.get({ preferenceName: 'my.pref', overrideIdentifier: 'swift' });
341
- expect(initialValue).to.equal('foo', 'Proxy should start with default value.');
342
- expect(validationCallCounter.calls).to.equal(1, 'Retrieval should validate (1).');
343
- await prefService.set('my.pref', 'bar', PreferenceScope.User);
344
- expect(proxy.get('my.pref')).to.equal('bar', 'The base should have been updated.');
345
- expect(validationCallCounter.calls).to.equal(2, 'Retrieval should validate (2).');
346
- expect(proxy.get({ preferenceName: 'my.pref', overrideIdentifier: 'swift' })).to.equal('bar', 'Proxy should update empty overrides on change.');
347
- expect(validationCallCounter.calls).to.equal(3, 'Retrieval should validate (3).');
348
- });
349
-
350
- // The scenario with a listener differs because the proxy will start caching known valid values when a listener is attached.
351
- it("Validated proxies don't retain old values for overrides after a change (with emitter)", async () => {
352
- const { proxy, validationCallCounter } = await prepareValidationTest();
353
- prefSchema.registerOverrideIdentifier('swift');
354
- const override = { preferenceName: 'my.pref', overrideIdentifier: 'swift' };
355
- proxy.onPreferenceChanged; // Initialize the listeners.
356
- const initialValue = proxy.get(override);
357
- expect(initialValue).to.equal('foo', 'Proxy should start with default value.');
358
- expect(validationCallCounter.calls).to.equal(1, 'Retrieval should validate.');
359
-
360
- await prefService.set('my.pref', 'bar', PreferenceScope.User);
361
- expect(validationCallCounter.calls).to.equal(2, 'Event should trigger validation (1).');
362
- expect(proxy.get('my.pref')).to.equal('bar', 'The base should have been updated.');
363
- expect(proxy.get(override)).to.equal('bar', 'Proxy should update empty overrides on change.');
364
- expect(validationCallCounter.calls).to.equal(2, 'Subsequent retrievals should not trigger validation. (1)');
365
-
366
- await prefService.set(prefService.overridePreferenceName(override), 'baz', PreferenceScope.User);
367
- expect(validationCallCounter.calls).to.equal(3, 'Event should trigger validation (2).');
368
- expect(proxy.get('my.pref')).to.equal('bar', 'Base should not have been updated.');
369
- expect(proxy.get(override)).to.equal('baz', 'Override should have been updated');
370
- expect(validationCallCounter.calls).to.equal(3, 'Subsequent retrievals should not trigger validation. (2)');
371
-
372
- await prefService.set('my.pref', 'boom', PreferenceScope.User);
373
- expect(validationCallCounter.calls).to.equal(4, 'Event should trigger validation (3).');
374
- expect(proxy.get('my.pref')).to.equal('boom', 'Base should have been updated.');
375
- expect(proxy.get(override)).to.equal('baz', 'Override should not have been updated');
376
- expect(validationCallCounter.calls).to.equal(4, 'Subsequent retrievals should not trigger validation. (3)');
377
- });
378
- }
379
-
380
270
  it('toJSON with deep', async () => {
381
271
  const { proxy, promisedSchema } = getProxy({
382
272
  properties: {
@@ -151,10 +151,6 @@ export interface PreferenceProxyOptions {
151
151
  * Indicates whether the proxy should be disposable. Proxies that are shared between multiple callers should not be disposable.
152
152
  */
153
153
  isDisposable?: boolean;
154
- /**
155
- * Indicates whether the proxy will validate values before returning them to clients.
156
- */
157
- validated?: boolean;
158
154
  }
159
155
 
160
156
  /**
@@ -23,7 +23,6 @@ import { Container } from 'inversify';
23
23
  import { bindPreferenceService } from '../frontend-application-bindings';
24
24
  import { PreferenceSchemaProperties, PreferenceSchemaProvider } from './preference-contribution';
25
25
  import { FrontendApplicationConfigProvider } from '../frontend-application-config-provider';
26
- import { ApplicationProps } from '@theia/application-package/lib/application-props';
27
26
 
28
27
  disableJSDOM();
29
28
 
@@ -62,9 +61,7 @@ describe('Preference Schema Provider', () => {
62
61
  before(() => {
63
62
  disableJSDOM = enableJSDOM();
64
63
  FrontendApplicationConfigProvider.set({
65
- ...ApplicationProps.DEFAULT.frontend.config,
66
- 'applicationName': 'test',
67
- 'preferences': {
64
+ preferences: {
68
65
  'editor.fontSize': 20,
69
66
  '[typescript]': { 'editor.fontSize': 24 }
70
67
  }
@@ -31,7 +31,6 @@ import { PreferenceScope } from './preference-scope';
31
31
  import { PreferenceProvider } from './preference-provider';
32
32
  import { FrontendApplicationConfigProvider } from '../frontend-application-config-provider';
33
33
  import { createPreferenceProxy, PreferenceChangeEvent } from './preference-proxy';
34
- import { ApplicationProps } from '@theia/application-package/lib/application-props';
35
34
 
36
35
  disableJSDOM();
37
36
 
@@ -56,10 +55,7 @@ describe('Preference Service', () => {
56
55
 
57
56
  before(() => {
58
57
  disableJSDOM = enableJSDOM();
59
- FrontendApplicationConfigProvider.set({
60
- ...ApplicationProps.DEFAULT.frontend.config,
61
- 'applicationName': 'test',
62
- });
58
+ FrontendApplicationConfigProvider.set({});
63
59
  });
64
60
 
65
61
  after(() => {
@@ -16,11 +16,11 @@
16
16
 
17
17
  import { Container } from 'inversify';
18
18
  import { PreferenceValidationService } from './preference-validation-service';
19
- import { JsonType, PreferenceItem, PreferenceSchemaProvider } from './preference-contribution';
19
+ import { PreferenceItem, PreferenceSchemaProvider } from './preference-contribution';
20
20
  import { PreferenceLanguageOverrideService } from './preference-language-override-service';
21
21
  import * as assert from 'assert';
22
22
  import { JSONValue } from '@phosphor/coreutils';
23
- import { IJSONSchema } from 'src/common/json-schema';
23
+ import { IJSONSchema, JsonType } from '../../common/json-schema';
24
24
 
25
25
  /* eslint-disable no-unused-expressions,no-null/no-null */
26
26
 
@@ -14,12 +14,12 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- import { JsonType, PreferenceItem } from '../../common/preferences/preference-schema';
17
+ import { PreferenceItem } from '../../common/preferences/preference-schema';
18
18
  import { JSONObject, JSONValue } from '../../../shared/@phosphor/coreutils';
19
19
  import { PreferenceSchemaProvider } from './preference-contribution';
20
20
  import { PreferenceLanguageOverrideService } from './preference-language-override-service';
21
21
  import { inject, injectable } from '../../../shared/inversify';
22
- import { IJSONSchema } from '../../common/json-schema';
22
+ import { IJSONSchema, JsonType } from '../../common/json-schema';
23
23
  import { deepClone, unreachable } from '../../common';
24
24
  import { PreferenceProvider } from './preference-provider';
25
25
 
@@ -17,7 +17,7 @@
17
17
  import { nls } from '../common/nls';
18
18
  import { Endpoint } from './endpoint';
19
19
  import { OS } from '../common/os';
20
- import { FrontendApplicationConfigProvider } from './frontend-application-config-provider';
20
+ import { DEFAULT_BACKGROUND_COLOR_STORAGE_KEY, FrontendApplicationConfigProvider } from './frontend-application-config-provider';
21
21
 
22
22
  function fetchFrom(path: string): Promise<Response> {
23
23
  const endpoint = new Endpoint({ path }).getRestUrl().toString();
@@ -47,9 +47,16 @@ async function loadBackendOS(): Promise<void> {
47
47
  OS.backend.type = () => osType;
48
48
  }
49
49
 
50
+ function initBackground(): void {
51
+ const value = window.localStorage.getItem(DEFAULT_BACKGROUND_COLOR_STORAGE_KEY) || '#1d1d1d';
52
+ const documentElement = document.documentElement;
53
+ documentElement.style.setProperty('--theia-editor-background', value);
54
+ }
55
+
50
56
  export async function preload(): Promise<void> {
51
57
  await Promise.allSettled([
52
58
  loadTranslations(),
53
- loadBackendOS()
59
+ loadBackendOS(),
60
+ initBackground(),
54
61
  ]);
55
62
  }
@@ -15,7 +15,7 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { injectable, inject } from 'inversify';
18
- import { CancellationToken } from 'vscode-ws-jsonrpc';
18
+ import { CancellationToken } from '../../shared/vscode-languageserver-protocol';
19
19
  import { ProgressClient, ProgressMessage, ProgressUpdate } from '../common';
20
20
  import { StatusBar, StatusBarAlignment } from './status-bar';
21
21
  import { Deferred } from '../common/promise-util';
@@ -16,7 +16,7 @@
16
16
 
17
17
  import { inject, injectable } from 'inversify';
18
18
  import { KeybindingRegistry } from '../keybinding';
19
- import { Disposable, Command, CommandRegistry, CancellationToken } from '../../common';
19
+ import { Disposable, Command, CommandRegistry, CancellationToken, nls } from '../../common';
20
20
  import { ContextKeyService } from '../context-key-service';
21
21
  import { CorePreferences } from '../core-preferences';
22
22
  import { QuickAccessContribution, QuickAccessProvider, QuickAccessRegistry } from './quick-access';
@@ -86,12 +86,12 @@ export class QuickCommandService implements QuickAccessContribution, QuickAccess
86
86
  const otherItems = filterItems(this.otherItems.slice(), filter);
87
87
 
88
88
  if (recentItems.length > 0) {
89
- items.push({ type: 'separator', label: 'recently used' }, ...recentItems);
89
+ items.push({ type: 'separator', label: nls.localizeByDefault('recently used') }, ...recentItems);
90
90
  }
91
91
 
92
92
  if (otherItems.length > 0) {
93
93
  if (recentItems.length > 0) {
94
- items.push({ type: 'separator', label: 'other commands' });
94
+ items.push({ type: 'separator', label: nls.localizeByDefault('other commands') });
95
95
  }
96
96
  items.push(...otherItems);
97
97
  }
@@ -21,6 +21,7 @@ import { MaybePromise } from '../common/types';
21
21
  import { Key } from './keyboard/keys';
22
22
  import { AbstractDialog } from './dialogs';
23
23
  import { waitForClosed } from './widgets';
24
+ import { nls } from '../common/nls';
24
25
 
25
26
  export interface Saveable {
26
27
  readonly dirty: boolean;
@@ -290,20 +291,20 @@ export class ShouldSaveDialog extends AbstractDialog<boolean> {
290
291
 
291
292
  constructor(widget: Widget) {
292
293
  super({
293
- title: `Do you want to save the changes you made to ${widget.title.label || widget.title.caption}?`
294
+ title: nls.localizeByDefault('Do you want to save the changes you made to {0}?', widget.title.label || widget.title.caption)
294
295
  });
295
296
 
296
297
  const messageNode = document.createElement('div');
297
- messageNode.textContent = "Your changes will be lost if you don't save them.";
298
+ messageNode.textContent = nls.localizeByDefault("Your changes will be lost if you don't save them.");
298
299
  messageNode.setAttribute('style', 'flex: 1 100%; padding-bottom: calc(var(--theia-ui-padding)*3);');
299
300
  this.contentNode.appendChild(messageNode);
300
301
  this.dontSaveButton = this.appendDontSaveButton();
301
302
  this.appendCloseButton();
302
- this.appendAcceptButton('Save');
303
+ this.appendAcceptButton(nls.localizeByDefault('Save'));
303
304
  }
304
305
 
305
306
  protected appendDontSaveButton(): HTMLButtonElement {
306
- const button = this.createButton("Don't save");
307
+ const button = this.createButton(nls.localizeByDefault("Don't Save"));
307
308
  this.controlPanel.appendChild(button);
308
309
  button.classList.add('secondary');
309
310
  return button;
@@ -34,11 +34,12 @@ import { FrontendApplicationStateService } from '../frontend-application-state';
34
34
  import { TabBarToolbarRegistry, TabBarToolbarFactory } from './tab-bar-toolbar';
35
35
  import { ContextKeyService } from '../context-key-service';
36
36
  import { Emitter } from '../../common/event';
37
- import { waitForRevealed, waitForClosed } from '../widgets';
37
+ import { waitForRevealed, waitForClosed, PINNED_CLASS } from '../widgets';
38
38
  import { CorePreferences } from '../core-preferences';
39
39
  import { BreadcrumbsRendererFactory } from '../breadcrumbs/breadcrumbs-renderer';
40
40
  import { Deferred } from '../../common/promise-util';
41
41
  import { SaveResourceService } from '../save-resource-service';
42
+ import { nls } from '../../common/nls';
42
43
 
43
44
  /** The class name added to ApplicationShell instances. */
44
45
  const APPLICATION_SHELL_CLASS = 'theia-ApplicationShell';
@@ -622,7 +623,7 @@ export class ApplicationShell extends Widget {
622
623
  const pinned: boolean[] = [];
623
624
 
624
625
  toArray(this.mainPanel.widgets()).forEach((a, i) => {
625
- pinned[i] = a.title.className.indexOf('theia-mod-pinned') >= 0;
626
+ pinned[i] = a.title.className.includes(PINNED_CLASS);
626
627
  });
627
628
 
628
629
  return pinned;
@@ -633,7 +634,7 @@ export class ApplicationShell extends Widget {
633
634
  const pinned: boolean[] = [];
634
635
 
635
636
  toArray(this.bottomPanel.widgets()).forEach((a, i) => {
636
- pinned[i] = a.title.className.indexOf('theia-mod-pinned') >= 0;
637
+ pinned[i] = a.title.className.includes(PINNED_CLASS);
637
638
  });
638
639
 
639
640
  return pinned;
@@ -700,7 +701,7 @@ export class ApplicationShell extends Widget {
700
701
  if (bottomPanel.pinned && bottomPanel.pinned.length === widgets.length) {
701
702
  widgets.forEach((a, i) => {
702
703
  if (bottomPanel.pinned![i]) {
703
- a.title.className += ' theia-mod-pinned';
704
+ a.title.className += ` ${PINNED_CLASS}`;
704
705
  a.title.closable = false;
705
706
  }
706
707
  });
@@ -719,7 +720,7 @@ export class ApplicationShell extends Widget {
719
720
  if (mainPanelPinned && mainPanelPinned.length === widgets.length) {
720
721
  widgets.forEach((a, i) => {
721
722
  if (mainPanelPinned[i]) {
722
- a.title.className += ' theia-mod-pinned';
723
+ a.title.className += ` ${PINNED_CLASS}`;
723
724
  a.title.closable = false;
724
725
  }
725
726
  });
@@ -795,36 +796,13 @@ export class ApplicationShell extends Widget {
795
796
  *
796
797
  * Widgets added to the top area are not tracked regarding the _current_ and _active_ states.
797
798
  */
798
- async addWidget(widget: Widget, options: Readonly<ApplicationShell.WidgetOptions> = {}): Promise<void> {
799
+ async addWidget(widget: Widget, options?: Readonly<ApplicationShell.WidgetOptions>): Promise<void> {
799
800
  if (!widget.id) {
800
801
  console.error('Widgets added to the application shell must have a unique id property.');
801
802
  return;
802
803
  }
803
- let ref: Widget | undefined = options.ref;
804
- let area: ApplicationShell.Area = options.area || 'main';
805
- if (!ref && (area === 'main' || area === 'bottom')) {
806
- const tabBar = this.getTabBarFor(area);
807
- ref = tabBar && tabBar.currentTitle && tabBar.currentTitle.owner || undefined;
808
- }
809
- // make sure that ref belongs to area
810
- area = ref && this.getAreaFor(ref) || area;
811
- const addOptions: DockPanel.IAddOptions = {};
812
- if (ApplicationShell.isOpenToSideMode(options.mode)) {
813
- const areaPanel = area === 'main' ? this.mainPanel : area === 'bottom' ? this.bottomPanel : undefined;
814
- const sideRef = areaPanel && ref && (options.mode === 'open-to-left' ?
815
- areaPanel.previousTabBarWidget(ref) :
816
- areaPanel.nextTabBarWidget(ref));
817
- if (sideRef) {
818
- addOptions.ref = sideRef;
819
- } else {
820
- addOptions.ref = ref;
821
- addOptions.mode = options.mode === 'open-to-left' ? 'split-left' : 'split-right';
822
- }
823
- } else {
824
- addOptions.ref = ref;
825
- addOptions.mode = options.mode;
826
- }
827
- const sidePanelOptions: SidePanel.WidgetOptions = { rank: options.rank };
804
+ const { area, addOptions } = this.getInsertionOptions(options);
805
+ const sidePanelOptions: SidePanel.WidgetOptions = { rank: options?.rank };
828
806
  switch (area) {
829
807
  case 'main':
830
808
  this.mainPanel.addWidget(widget, addOptions);
@@ -842,13 +820,41 @@ export class ApplicationShell extends Widget {
842
820
  this.rightPanelHandler.addWidget(widget, sidePanelOptions);
843
821
  break;
844
822
  default:
845
- throw new Error('Unexpected area: ' + options.area);
823
+ throw new Error('Unexpected area: ' + options?.area);
846
824
  }
847
825
  if (area !== 'top') {
848
826
  this.track(widget);
849
827
  }
850
828
  }
851
829
 
830
+ getInsertionOptions(options?: Readonly<ApplicationShell.WidgetOptions>): { area: string; addOptions: DockLayout.IAddOptions; } {
831
+ let ref: Widget | undefined = options?.ref;
832
+ let area: ApplicationShell.Area = options?.area || 'main';
833
+ if (!ref && (area === 'main' || area === 'bottom')) {
834
+ const tabBar = this.getTabBarFor(area);
835
+ ref = tabBar && tabBar.currentTitle && tabBar.currentTitle.owner || undefined;
836
+ }
837
+ // make sure that ref belongs to area
838
+ area = ref && this.getAreaFor(ref) || area;
839
+ const addOptions: DockPanel.IAddOptions = {};
840
+ if (ApplicationShell.isOpenToSideMode(options?.mode)) {
841
+ const areaPanel = area === 'main' ? this.mainPanel : area === 'bottom' ? this.bottomPanel : undefined;
842
+ const sideRef = areaPanel && ref && (options?.mode === 'open-to-left' ?
843
+ areaPanel.previousTabBarWidget(ref) :
844
+ areaPanel.nextTabBarWidget(ref));
845
+ if (sideRef) {
846
+ addOptions.ref = sideRef;
847
+ } else {
848
+ addOptions.ref = ref;
849
+ addOptions.mode = options?.mode === 'open-to-left' ? 'split-left' : 'split-right';
850
+ }
851
+ } else {
852
+ addOptions.ref = ref;
853
+ addOptions.mode = options?.mode;
854
+ }
855
+ return { area, addOptions };
856
+ }
857
+
852
858
  /**
853
859
  * The widgets contained in the given shell area.
854
860
  */
@@ -1423,14 +1429,15 @@ export class ApplicationShell extends Widget {
1423
1429
  if (this.bottomPanel.isEmpty) {
1424
1430
  this.statusBar.removeElement(BOTTOM_PANEL_TOGGLE_ID);
1425
1431
  } else {
1432
+ const label = nls.localize('theia/core/common/collapseBottomPanel', 'Toggle Bottom Panel');
1426
1433
  const element: StatusBarEntry = {
1427
- name: 'Toggle Bottom Panel',
1434
+ name: label,
1428
1435
  text: '$(codicon-window)',
1429
1436
  alignment: StatusBarAlignment.RIGHT,
1430
- tooltip: 'Toggle Bottom Panel',
1437
+ tooltip: label,
1431
1438
  command: 'core.toggle.bottom.panel',
1432
1439
  accessibilityInformation: {
1433
- label: 'Toggle Bottom Panel',
1440
+ label: label,
1434
1441
  role: 'button'
1435
1442
  },
1436
1443
  priority: -1000
@@ -123,11 +123,9 @@ export class ShellLayoutRestorer implements CommandContribution {
123
123
  protected storageKey = 'layout';
124
124
  protected shouldStoreLayout: boolean = true;
125
125
 
126
- @inject(ContributionProvider) @named(ApplicationShellLayoutMigration)
127
- protected readonly migrations: ContributionProvider<ApplicationShellLayoutMigration>;
128
-
129
- @inject(WindowService)
130
- protected readonly windowService: WindowService;
126
+ @inject(ContributionProvider) @named(ApplicationShellLayoutMigration) protected readonly migrations: ContributionProvider<ApplicationShellLayoutMigration>;
127
+ @inject(WindowService) protected readonly windowService: WindowService;
128
+ @inject(ThemeService) protected readonly themeService: ThemeService;
131
129
 
132
130
  constructor(
133
131
  @inject(WidgetManager) protected widgetManager: WidgetManager,
@@ -145,7 +143,7 @@ export class ShellLayoutRestorer implements CommandContribution {
145
143
  this.logger.info('>>> Resetting layout...');
146
144
  this.shouldStoreLayout = false;
147
145
  this.storageService.setData(this.storageKey, undefined);
148
- ThemeService.get().reset(); // Theme service cannot use DI, so the current theme ID is stored elsewhere. Hence the explicit reset.
146
+ this.themeService.reset();
149
147
  this.logger.info('<<< The layout has been successfully reset.');
150
148
  this.windowService.reload();
151
149
  }
@@ -33,6 +33,7 @@ import { ContextMenuRenderer } from '../context-menu-renderer';
33
33
  import { MenuPath } from '../../common/menu';
34
34
  import { SidebarBottomMenuWidget } from './sidebar-bottom-menu-widget';
35
35
  import { SidebarTopMenuWidget } from './sidebar-top-menu-widget';
36
+ import { PINNED_CLASS } from '../widgets';
36
37
 
37
38
  /** The class name added to the left and right area panels. */
38
39
  export const LEFT_RIGHT_AREA_CLASS = 'theia-app-sides';
@@ -274,7 +275,7 @@ export class SidePanelHandler {
274
275
  widget: title.owner,
275
276
  rank: SidePanelHandler.rankProperty.get(title.owner),
276
277
  expanded: title === currentTitle,
277
- pinned: title.className.indexOf('theia-mod-pinned') >= 0
278
+ pinned: title.className.includes(PINNED_CLASS)
278
279
  }));
279
280
  // eslint-disable-next-line no-null/no-null
280
281
  const size = currentTitle !== null ? this.getPanelSize() : this.state.lastPanelSize;
@@ -299,7 +300,7 @@ export class SidePanelHandler {
299
300
  currentTitle = widget.title;
300
301
  }
301
302
  if (pinned) {
302
- widget.title.className += ' theia-mod-pinned';
303
+ widget.title.className += ` ${PINNED_CLASS}`;
303
304
  widget.title.closable = false;
304
305
  }
305
306
  // Add the widgets directly to the tab bar in the same order as they are stored
@@ -17,7 +17,7 @@
17
17
  import PerfectScrollbar from 'perfect-scrollbar';
18
18
  import { TabBar, Title, Widget } from '@phosphor/widgets';
19
19
  import { VirtualElement, h, VirtualDOM, ElementInlineStyle } from '@phosphor/virtualdom';
20
- import { Disposable, DisposableCollection, MenuPath, notEmpty, SelectionService, CommandService } from '../../common';
20
+ import { Disposable, DisposableCollection, MenuPath, notEmpty, SelectionService, CommandService, nls } from '../../common';
21
21
  import { ContextMenuRenderer } from '../context-menu-renderer';
22
22
  import { Signal, Slot } from '@phosphor/signaling';
23
23
  import { Message, MessageLoop } from '@phosphor/messaging';
@@ -32,6 +32,7 @@ import { BreadcrumbsRenderer, BreadcrumbsRendererFactory } from '../breadcrumbs/
32
32
  import { NavigatableWidget } from '../navigatable-types';
33
33
  import { IDragEvent } from '@phosphor/dragdrop';
34
34
  import { PINNED_CLASS } from '../widgets/widget';
35
+ import { CorePreferences } from '../core-preferences';
35
36
 
36
37
  /** The class name added to hidden content nodes, which are required to render vertical side bars. */
37
38
  const HIDDEN_CONTENT_CLASS = 'theia-TabBar-hidden-content';
@@ -88,7 +89,8 @@ export class TabBarRenderer extends TabBar.Renderer {
88
89
  protected readonly decoratorService?: TabBarDecoratorService,
89
90
  protected readonly iconThemeService?: IconThemeService,
90
91
  protected readonly selectionService?: SelectionService,
91
- protected readonly commandService?: CommandService
92
+ protected readonly commandService?: CommandService,
93
+ protected readonly corePreferences?: CorePreferences
92
94
  ) {
93
95
  super();
94
96
  if (this.decoratorService) {
@@ -148,6 +150,9 @@ export class TabBarRenderer extends TabBar.Renderer {
148
150
  const style = this.createTabStyle(data);
149
151
  const className = this.createTabClass(data);
150
152
  const dataset = this.createTabDataset(data);
153
+ const closeIconTitle = data.title.className.includes(PINNED_CLASS)
154
+ ? nls.localizeByDefault('Unpin')
155
+ : nls.localizeByDefault('Close');
151
156
  return h.li(
152
157
  {
153
158
  key, className, id, title: title.caption, style, dataset,
@@ -166,6 +171,7 @@ export class TabBarRenderer extends TabBar.Renderer {
166
171
  ),
167
172
  h.div({
168
173
  className: 'p-TabBar-tabCloseIcon action-label',
174
+ title: closeIconTitle,
169
175
  onclick: this.handleCloseClickEvent
170
176
  })
171
177
  );
@@ -483,6 +489,9 @@ export class TabBarRenderer extends TabBar.Renderer {
483
489
  };
484
490
 
485
491
  protected handleDblClickEvent = (event: MouseEvent) => {
492
+ if (!this.corePreferences?.get('workbench.tab.maximize')) {
493
+ return;
494
+ }
486
495
  if (this.tabBar && event.currentTarget instanceof HTMLElement) {
487
496
  const id = event.currentTarget.id;
488
497
  // eslint-disable-next-line no-null/no-null
@@ -493,6 +502,7 @@ export class TabBarRenderer extends TabBar.Renderer {
493
502
  }
494
503
  }
495
504
  };
505
+
496
506
  }
497
507
 
498
508
  /**
@@ -686,7 +696,7 @@ export class ToolbarAwareTabBar extends ScrollableTabBar {
686
696
  if (this.breadcrumbsContainer) {
687
697
  this.node.appendChild(this.breadcrumbsContainer);
688
698
  }
689
- this.breadcrumbsRenderer?.refresh();
699
+ this.updateBreadcrumbs();
690
700
  }
691
701
  super.onAfterAttach(msg);
692
702
  }
@@ -1014,7 +1024,7 @@ export class SideTabBar extends ScrollableTabBar {
1014
1024
 
1015
1025
  /**
1016
1026
  * Handle `viewContainerPart` drag over,
1017
- * Defines the appropriate `drpAction` and opens the tab on which the mouse stands on for more than 800 ms.
1027
+ * Defines the appropriate `dropAction` and opens the tab on which the mouse stands on for more than 800 ms.
1018
1028
  */
1019
1029
  protected onDragOver = (event: IDragEvent) => {
1020
1030
  const factory = event.mimeData.getData('application/vnd.phosphor.view-container-factory');
@@ -81,7 +81,7 @@ export class SourceTreeWidget extends TreeWidget {
81
81
  protected override renderCaption(node: TreeNode): React.ReactNode {
82
82
  if (TreeElementNode.is(node)) {
83
83
  const classNames = this.createTreeElementNodeClassNames(node);
84
- return <div className={classNames.join(' ')}>{node.element.render()}</div>;
84
+ return <div className={classNames.join(' ')}>{node.element.render(this)}</div>;
85
85
  }
86
86
  return undefined;
87
87
  }