@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
@@ -1,8 +1,10 @@
1
1
  /// <reference types="node" />
2
2
  import * as http from 'http';
3
3
  import * as https from 'https';
4
- import { WebSocketChannel } from '../../../common/messaging/web-socket-channel';
5
- export declare class TestWebSocketChannel extends WebSocketChannel {
4
+ import { Channel, ChannelMultiplexer } from '../../../common/message-rpc/channel';
5
+ export declare class TestWebSocketChannelSetup {
6
+ readonly multiplexer: ChannelMultiplexer;
7
+ readonly channel: Channel;
6
8
  constructor({ server, path }: {
7
9
  server: http.Server | https.Server;
8
10
  path: string;
@@ -1 +1 @@
1
- {"version":3,"file":"test-web-socket-channel.d.ts","sourceRoot":"","sources":["../../../../src/node/messaging/test/test-web-socket-channel.ts"],"names":[],"mappings":";AAgBA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAKhF,qBAAa,oBAAqB,SAAQ,gBAAgB;gBAE1C,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QAC1B,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QACnC,IAAI,EAAE,MAAM,CAAA;KACf;CAkBJ"}
1
+ {"version":3,"file":"test-web-socket-channel.d.ts","sourceRoot":"","sources":["../../../../src/node/messaging/test/test-web-socket-channel.ts"],"names":[],"mappings":";AAgBA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAGlF,qBAAa,yBAAyB;IAClC,SAAgB,WAAW,EAAE,kBAAkB,CAAC;IAChD,SAAgB,OAAO,EAAE,OAAO,CAAC;gBAErB,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QAC1B,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QACnC,IAAI,EAAE,MAAM,CAAA;KACf;CASJ"}
@@ -15,22 +15,35 @@
15
15
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
16
16
  // *****************************************************************************
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.TestWebSocketChannel = void 0;
19
- const web_socket_channel_1 = require("../../../common/messaging/web-socket-channel");
20
- const disposable_1 = require("../../../common/disposable");
18
+ exports.TestWebSocketChannelSetup = void 0;
21
19
  const socket_io_client_1 = require("socket.io-client");
22
- class TestWebSocketChannel extends web_socket_channel_1.WebSocketChannel {
20
+ const channel_1 = require("../../../common/message-rpc/channel");
21
+ const web_socket_channel_1 = require("../../../common/messaging/web-socket-channel");
22
+ class TestWebSocketChannelSetup {
23
23
  constructor({ server, path }) {
24
- super(0, content => socket.send(content));
25
24
  const socket = (0, socket_io_client_1.io)(`ws://localhost:${server.address().port}${web_socket_channel_1.WebSocketChannel.wsPath}`);
26
- socket.on('error', error => this.fireError(error));
27
- socket.on('disconnect', reason => this.fireClose(0, reason));
28
- socket.on('message', data => {
29
- this.handleMessage(JSON.parse(data.toString()));
25
+ this.channel = new web_socket_channel_1.WebSocketChannel(toIWebSocket(socket));
26
+ this.multiplexer = new channel_1.ChannelMultiplexer(this.channel);
27
+ socket.on('connect', () => {
28
+ this.multiplexer.open(path);
30
29
  });
31
- socket.on('connect', () => this.open(path));
32
- this.toDispose.push(disposable_1.Disposable.create(() => socket.close()));
30
+ socket.connect();
33
31
  }
34
32
  }
35
- exports.TestWebSocketChannel = TestWebSocketChannel;
33
+ exports.TestWebSocketChannelSetup = TestWebSocketChannelSetup;
34
+ function toIWebSocket(socket) {
35
+ return {
36
+ close: () => {
37
+ socket.removeAllListeners('disconnect');
38
+ socket.removeAllListeners('error');
39
+ socket.removeAllListeners('message');
40
+ socket.close();
41
+ },
42
+ isConnected: () => socket.connected,
43
+ onClose: cb => socket.on('disconnect', reason => cb(reason)),
44
+ onError: cb => socket.on('error', reason => cb(reason)),
45
+ onMessage: cb => socket.on('message', data => cb(data)),
46
+ send: message => socket.emit('message', message)
47
+ };
48
+ }
36
49
  //# sourceMappingURL=test-web-socket-channel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-web-socket-channel.js","sourceRoot":"","sources":["../../../../src/node/messaging/test/test-web-socket-channel.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,2EAA2E;AAC3E,gFAAgF;;;AAIhF,qFAAgF;AAChF,2DAAwD;AAExD,uDAAsC;AAEtC,MAAa,oBAAqB,SAAQ,qCAAgB;IAEtD,YAAY,EAAE,MAAM,EAAE,IAAI,EAGzB;QACG,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAA,qBAAE,EAAC,kBAAmB,MAAM,CAAC,OAAO,EAAkB,CAAC,IAAI,GAAG,qCAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;QACxG,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CACvB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CACxB,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,CAC7B,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAC5B,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE;YACxB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CACtB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAClB,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,uBAAU,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC;CAEJ;AAvBD,oDAuBC"}
1
+ {"version":3,"file":"test-web-socket-channel.js","sourceRoot":"","sources":["../../../../src/node/messaging/test/test-web-socket-channel.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,2EAA2E;AAC3E,gFAAgF;;;AAKhF,uDAA8C;AAC9C,iEAAkF;AAClF,qFAA4F;AAE5F,MAAa,yBAAyB;IAIlC,YAAY,EAAE,MAAM,EAAE,IAAI,EAGzB;QACG,MAAM,MAAM,GAAG,IAAA,qBAAE,EAAC,kBAAmB,MAAM,CAAC,OAAO,EAAkB,CAAC,IAAI,GAAG,qCAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;QACxG,IAAI,CAAC,OAAO,GAAG,IAAI,qCAAgB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,WAAW,GAAG,IAAI,4BAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACtB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC;CACJ;AAhBD,8DAgBC;AAED,SAAS,YAAY,CAAC,MAAc;IAChC,OAAO;QACH,KAAK,EAAE,GAAG,EAAE;YACR,MAAM,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;YACxC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;YACrC,MAAM,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;QACD,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS;QACnC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QAC5D,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QACvD,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;KACnD,CAAC;AACN,CAAC"}
@@ -41,7 +41,7 @@ let ProxyCliContribution = class ProxyCliContribution {
41
41
  type: 'string'
42
42
  });
43
43
  conf.option(exports.StrictSSL, {
44
- description: 'Detemines whether SSL is strictly set for outgoing requests.',
44
+ description: 'Determines whether SSL is strictly set for outgoing requests.',
45
45
  type: 'boolean'
46
46
  });
47
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"proxy-cli-contribution.js","sourceRoot":"","sources":["../../../src/node/request/proxy-cli-contribution.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;kFAckF;;;;;;;;;;;;AAElF,yCAA+C;AAE/C,4CAAsE;AAIzD,QAAA,QAAQ,GAAG,WAAW,CAAC;AACvB,QAAA,kBAAkB,GAAG,qBAAqB,CAAC;AAC3C,QAAA,SAAS,GAAG,YAAY,CAAC;AAGtC,IAAa,oBAAoB,GAAjC,MAAa,oBAAoB;IAK7B,SAAS,CAAC,IAAU;QAChB,IAAI,CAAC,MAAM,CAAC,gBAAQ,EAAE;YAClB,WAAW,EAAE,2CAA2C;YACxD,IAAI,EAAE,QAAQ;SACjB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,0BAAkB,EAAE;YAC5B,WAAW,EAAE,4DAA4D;YACzE,IAAI,EAAE,QAAQ;SACjB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,iBAAS,EAAE;YACnB,WAAW,EAAE,8DAA8D;YAC3E,IAAI,EAAE,SAAS;SAClB,CAAC,CAAC;IACP,CAAC;IAED,YAAY,CAAC,IAAe;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAQ,CAAC,CAAC;QAChC,MAAM,aAAa,GAAG,IAAI,CAAC,0BAAkB,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAS,CAAC,CAAC;QAClC,MAAM,MAAM,GAAyB,EAAE,CAAC;QACxC,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;YAC9B,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;SACrC;QACD,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;YACnC,MAAM,CAAC,kBAAkB,GAAG,aAAa,CAAC;SAC7C;QACD,IAAI,OAAO,SAAS,KAAK,SAAS,EAAE;YAChC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;SAChC;QACD,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;CAEJ,CAAA;AAlCG;IADC,IAAA,kBAAM,EAAC,wBAAc,CAAC;;4DAC2B;AAHzC,oBAAoB;IADhC,IAAA,sBAAU,GAAE;GACA,oBAAoB,CAqChC;AArCY,oDAAoB"}
1
+ {"version":3,"file":"proxy-cli-contribution.js","sourceRoot":"","sources":["../../../src/node/request/proxy-cli-contribution.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;kFAckF;;;;;;;;;;;;AAElF,yCAA+C;AAE/C,4CAAsE;AAIzD,QAAA,QAAQ,GAAG,WAAW,CAAC;AACvB,QAAA,kBAAkB,GAAG,qBAAqB,CAAC;AAC3C,QAAA,SAAS,GAAG,YAAY,CAAC;AAGtC,IAAa,oBAAoB,GAAjC,MAAa,oBAAoB;IAK7B,SAAS,CAAC,IAAU;QAChB,IAAI,CAAC,MAAM,CAAC,gBAAQ,EAAE;YAClB,WAAW,EAAE,2CAA2C;YACxD,IAAI,EAAE,QAAQ;SACjB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,0BAAkB,EAAE;YAC5B,WAAW,EAAE,4DAA4D;YACzE,IAAI,EAAE,QAAQ;SACjB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,iBAAS,EAAE;YACnB,WAAW,EAAE,+DAA+D;YAC5E,IAAI,EAAE,SAAS;SAClB,CAAC,CAAC;IACP,CAAC;IAED,YAAY,CAAC,IAAe;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAQ,CAAC,CAAC;QAChC,MAAM,aAAa,GAAG,IAAI,CAAC,0BAAkB,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAS,CAAC,CAAC;QAClC,MAAM,MAAM,GAAyB,EAAE,CAAC;QACxC,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;YAC9B,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;SACrC;QACD,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;YACnC,MAAM,CAAC,kBAAkB,GAAG,aAAa,CAAC;SAC7C;QACD,IAAI,OAAO,SAAS,KAAK,SAAS,EAAE;YAChC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;SAChC;QACD,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;CAEJ,CAAA;AAlCG;IADC,IAAA,kBAAM,EAAC,wBAAc,CAAC;;4DAC2B;AAHzC,oBAAoB;IADhC,IAAA,sBAAU,GAAE;GACA,oBAAoB,CAqChC;AArCY,oDAAoB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@theia/core",
3
- "version": "1.27.0-next.9+53a272e1138",
3
+ "version": "1.27.0",
4
4
  "description": "Theia is a cloud & desktop IDE framework implemented in TypeScript.",
5
5
  "main": "lib/common/index.js",
6
6
  "typings": "lib/common/index.d.ts",
@@ -16,8 +16,8 @@
16
16
  "@phosphor/signaling": "1",
17
17
  "@phosphor/virtualdom": "1",
18
18
  "@phosphor/widgets": "1",
19
- "@theia/application-package": "1.27.0-next.9+53a272e1138",
20
- "@theia/request": "1.27.0-next.9+53a272e1138",
19
+ "@theia/application-package": "1.27.0",
20
+ "@theia/request": "1.27.0",
21
21
  "@types/body-parser": "^1.16.4",
22
22
  "@types/cookie": "^0.3.3",
23
23
  "@types/dompurify": "^2.2.2",
@@ -61,7 +61,6 @@
61
61
  "react-dom": "^16.8.0",
62
62
  "react-tooltip": "^4.2.21",
63
63
  "react-virtualized": "^9.20.0",
64
- "reconnecting-websocket": "^4.2.0",
65
64
  "reflect-metadata": "^0.1.10",
66
65
  "route-parser": "^0.0.5",
67
66
  "safer-buffer": "^2.1.2",
@@ -70,7 +69,6 @@
70
69
  "uuid": "^8.3.2",
71
70
  "vscode-languageserver-protocol": "~3.15.3",
72
71
  "vscode-uri": "^2.1.1",
73
- "vscode-ws-jsonrpc": "^0.2.0",
74
72
  "ws": "^7.1.2",
75
73
  "yargs": "^15.3.1"
76
74
  },
@@ -113,8 +111,7 @@
113
111
  "react-dom",
114
112
  "react-virtualized",
115
113
  "vscode-languageserver-protocol",
116
- "vscode-uri",
117
- "vscode-ws-jsonrpc"
114
+ "vscode-uri"
118
115
  ],
119
116
  "export =": [
120
117
  "dompurify as DOMPurify",
@@ -196,12 +193,12 @@
196
193
  "watch": "theiaext watch"
197
194
  },
198
195
  "devDependencies": {
199
- "@theia/ext-scripts": "1.26.0",
200
- "@theia/re-exports": "1.26.0",
196
+ "@theia/ext-scripts": "1.27.0",
197
+ "@theia/re-exports": "1.27.0",
201
198
  "minimist": "^1.2.0"
202
199
  },
203
200
  "nyc": {
204
201
  "extends": "../../configs/nyc.json"
205
202
  },
206
- "gitHead": "53a272e113890174c8b3049b8d1a74999dee0cd4"
203
+ "gitHead": "b952ad743a97821dee94787e946f5a288174d4e8"
207
204
  }
@@ -21,6 +21,7 @@ import { ThemeService } from './theming';
21
21
  import { FrontendApplicationContribution } from './frontend-application';
22
22
  import { ContributionProvider } from '../common/contribution-provider';
23
23
  import { Disposable, DisposableCollection } from '../common/disposable';
24
+ import { DEFAULT_BACKGROUND_COLOR_STORAGE_KEY } from './frontend-application-config-provider';
24
25
 
25
26
  export const ColorContribution = Symbol('ColorContribution');
26
27
  export interface ColorContribution {
@@ -39,18 +40,17 @@ export class ColorApplicationContribution implements FrontendApplicationContribu
39
40
  @inject(ContributionProvider) @named(ColorContribution)
40
41
  protected readonly colorContributions: ContributionProvider<ColorContribution>;
41
42
 
42
- private static themeBackgroundId = 'theme.background';
43
+ @inject(ThemeService) protected readonly themeService: ThemeService;
43
44
 
44
45
  onStart(): void {
45
46
  for (const contribution of this.colorContributions.getContributions()) {
46
47
  contribution.registerColors(this.colors);
47
48
  }
48
-
49
- this.updateThemeBackground();
50
- ThemeService.get().onDidColorThemeChange(() => this.updateThemeBackground());
51
-
52
- this.update();
53
- ThemeService.get().onDidColorThemeChange(() => this.update());
49
+ this.themeService.initialized.then(() => this.update());
50
+ this.themeService.onDidColorThemeChange(() => {
51
+ this.update();
52
+ this.updateThemeBackground();
53
+ });
54
54
  this.colors.onDidChange(() => this.update());
55
55
  }
56
56
 
@@ -60,7 +60,7 @@ export class ColorApplicationContribution implements FrontendApplicationContribu
60
60
  return;
61
61
  }
62
62
  this.toUpdate.dispose();
63
- const theme = 'theia-' + ThemeService.get().getCurrentTheme().type;
63
+ const theme = 'theia-' + this.themeService.getCurrentTheme().type;
64
64
  document.body.classList.add(theme);
65
65
  this.toUpdate.push(Disposable.create(() => document.body.classList.remove(theme)));
66
66
 
@@ -81,16 +81,9 @@ export class ColorApplicationContribution implements FrontendApplicationContribu
81
81
  protected updateThemeBackground(): void {
82
82
  const color = this.colors.getCurrentColor('editor.background');
83
83
  if (color) {
84
- window.localStorage.setItem(ColorApplicationContribution.themeBackgroundId, color);
84
+ window.localStorage.setItem(DEFAULT_BACKGROUND_COLOR_STORAGE_KEY, color);
85
85
  } else {
86
- window.localStorage.removeItem(ColorApplicationContribution.themeBackgroundId);
86
+ window.localStorage.removeItem(DEFAULT_BACKGROUND_COLOR_STORAGE_KEY);
87
87
  }
88
88
  }
89
-
90
- static initBackground(): void {
91
- const value = window.localStorage.getItem(this.themeBackgroundId) || '#1d1d1d';
92
- const documentElement = document.documentElement;
93
- documentElement.style.setProperty('--theia-editor-background', value);
94
- }
95
-
96
89
  }
@@ -19,11 +19,6 @@ import { DisposableCollection, Disposable } from '../common/disposable';
19
19
  import { Emitter } from '../common/event';
20
20
  import { ColorDefinition, ColorCssVariable } from '../common/color';
21
21
 
22
- /**
23
- * @deprecated since 1.20.0. Import from `@theia/core/lib/common/color` instead.
24
- */
25
- export * from '../common/color';
26
-
27
22
  @injectable()
28
23
  export class ColorRegistry {
29
24
 
@@ -41,7 +41,8 @@ import { QuickViewService } from './quick-input/quick-view-service';
41
41
  import { environment } from '@theia/application-package/lib/environment';
42
42
  import { IconThemeService } from './icon-theme-service';
43
43
  import { ColorContribution } from './color-application-contribution';
44
- import { ColorRegistry, Color } from './color-registry';
44
+ import { ColorRegistry } from './color-registry';
45
+ import { Color } from '../common/color';
45
46
  import { CoreConfiguration, CorePreferences } from './core-preferences';
46
47
  import { ThemeService } from './theming';
47
48
  import { PreferenceService, PreferenceScope, PreferenceChangeEvent } from './preferences';
@@ -62,7 +63,8 @@ import { DecorationStyle } from './decoration-style';
62
63
  import { isPinned, Title, togglePinned, Widget } from './widgets';
63
64
  import { SaveResourceService } from './save-resource-service';
64
65
  import { UserWorkingDirectoryProvider } from './user-working-directory-provider';
65
- import { createUntitledURI } from '../common';
66
+ import { UntitledResourceResolver } from '../common';
67
+ import { LanguageQuickPickService } from './i18n/language-quick-pick-service';
66
68
 
67
69
  export namespace CommonMenus {
68
70
 
@@ -399,6 +401,12 @@ export class CommonFrontendContribution implements FrontendApplicationContributi
399
401
  @inject(UserWorkingDirectoryProvider)
400
402
  protected readonly workingDirProvider: UserWorkingDirectoryProvider;
401
403
 
404
+ @inject(LanguageQuickPickService)
405
+ protected readonly languageQuickPickService: LanguageQuickPickService;
406
+
407
+ @inject(UntitledResourceResolver)
408
+ protected readonly untitledResourceResolver: UntitledResourceResolver;
409
+
402
410
  protected pinnedKey: ContextKey<boolean>;
403
411
 
404
412
  async configure(app: FrontendApplication): Promise<void> {
@@ -956,7 +964,11 @@ export class CommonFrontendContribution implements FrontendApplicationContributi
956
964
  execute: () => this.configureDisplayLanguage()
957
965
  });
958
966
  commandRegistry.registerCommand(CommonCommands.NEW_FILE, {
959
- execute: async () => open(this.openerService, createUntitledURI('', await this.workingDirProvider.getUserWorkingDir()))
967
+ execute: async () => {
968
+ const untitledUri = this.untitledResourceResolver.createUntitledURI('', await this.workingDirProvider.getUserWorkingDir());
969
+ this.untitledResourceResolver.resolve(untitledUri);
970
+ return open(this.openerService, untitledUri);
971
+ }
960
972
  });
961
973
  }
962
974
 
@@ -1141,27 +1153,12 @@ export class CommonFrontendContribution implements FrontendApplicationContributi
1141
1153
  }
1142
1154
 
1143
1155
  protected async configureDisplayLanguage(): Promise<void> {
1144
- const availableLanguages = await this.localizationProvider.getAvailableLanguages();
1145
- const items: QuickPickItem[] = [];
1146
- for (const languageId of ['en', ...availableLanguages.map(e => e.languageId)]) {
1147
- if (typeof languageId === 'string') {
1148
- items.push({
1149
- label: languageId,
1150
- execute: async () => {
1151
- if (languageId !== nls.locale && await this.confirmRestart()) {
1152
- this.windowService.setSafeToShutDown();
1153
- window.localStorage.setItem(nls.localeId, languageId);
1154
- this.windowService.reload();
1155
- }
1156
- }
1157
- });
1158
- }
1156
+ const languageId = await this.languageQuickPickService.pickDisplayLanguage();
1157
+ if (languageId && !nls.isSelectedLocale(languageId) && await this.confirmRestart()) {
1158
+ nls.setLocale(languageId);
1159
+ this.windowService.setSafeToShutDown();
1160
+ this.windowService.reload();
1159
1161
  }
1160
- this.quickInputService?.showQuickPick(items,
1161
- {
1162
- placeholder: CommonCommands.CONFIGURE_DISPLAY_LANGUAGE.label,
1163
- activeItem: items.find(item => item.label === (nls.locale || 'en'))
1164
- });
1165
1162
  }
1166
1163
 
1167
1164
  protected async confirmRestart(): Promise<boolean> {
@@ -1486,10 +1483,6 @@ export class CommonFrontendContribution implements FrontendApplicationContributi
1486
1483
  },
1487
1484
  {
1488
1485
  id: 'tab.hoverBackground',
1489
- defaults: {
1490
- dark: 'tab.inactiveBackground',
1491
- light: 'tab.inactiveBackground'
1492
- },
1493
1486
  description: 'Tab background color when hovering. Tabs are the containers for editors in the editor area. Multiple tabs can be opened in one editor group. There can be multiple editor groups.'
1494
1487
  },
1495
1488
  {
@@ -1624,16 +1617,16 @@ export class CommonFrontendContribution implements FrontendApplicationContributi
1624
1617
  // if not yet contributed by Monaco, check runtime css variables to learn.
1625
1618
  {
1626
1619
  id: 'quickInput.background', defaults: {
1627
- dark: 'sideBar.background',
1628
- light: 'sideBar.background',
1629
- hc: 'sideBar.background'
1620
+ dark: 'editorWidget.background',
1621
+ light: 'editorWidget.background',
1622
+ hc: 'editorWidget.background'
1630
1623
  }, description: 'Quick Input background color. The Quick Input widget is the container for views like the color theme picker.'
1631
1624
  },
1632
1625
  {
1633
1626
  id: 'quickInput.foreground', defaults: {
1634
- dark: 'sideBar.foreground',
1635
- light: 'sideBar.foreground',
1636
- hc: 'sideBar.foreground'
1627
+ dark: 'editorWidget.foreground',
1628
+ light: 'editorWidget.foreground',
1629
+ hc: 'editorWidget.foreground'
1637
1630
  }, description: 'Quick Input foreground color. The Quick Input widget is the container for views like the color theme picker.'
1638
1631
  },
1639
1632
  {
@@ -0,0 +1,307 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2022 TypeFox 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, interfaces } from 'inversify';
18
+ import { ColorTheme, CssStyleCollector, StylingParticipant } from './styling-service';
19
+ import { isHighContrast } from '../common/theme';
20
+
21
+ export function bindCommonStylingParticipants(bind: interfaces.Bind): void {
22
+ for (const participant of [
23
+ ActionLabelStylingParticipant,
24
+ BadgeStylingParticipant,
25
+ BreadcrumbStylingParticipant,
26
+ ButtonStylingParticipant,
27
+ MenuStylingParticipant,
28
+ TabbarStylingParticipant,
29
+ TreeStylingParticipant,
30
+ StatusBarStylingParticipant
31
+ ]) {
32
+ bind(participant).toSelf().inSingletonScope();
33
+ bind(StylingParticipant).toService(participant);
34
+ }
35
+ }
36
+
37
+ @injectable()
38
+ export class ActionLabelStylingParticipant implements StylingParticipant {
39
+ registerThemeStyle(theme: ColorTheme, collector: CssStyleCollector): void {
40
+ const focusBorder = theme.getColor('focusBorder');
41
+
42
+ if (isHighContrast(theme.type) && focusBorder) {
43
+ if (focusBorder) {
44
+ collector.addRule(`
45
+ .action-label:hover {
46
+ outline: 1px dashed ${focusBorder};
47
+ }
48
+ `);
49
+ }
50
+ }
51
+ }
52
+ }
53
+
54
+ @injectable()
55
+ export class TreeStylingParticipant implements StylingParticipant {
56
+ registerThemeStyle(theme: ColorTheme, collector: CssStyleCollector): void {
57
+ const focusBorder = theme.getColor('focusBorder');
58
+
59
+ if (isHighContrast(theme.type) && focusBorder) {
60
+ collector.addRule(`
61
+ .theia-TreeNode {
62
+ outline-offset: -1px;
63
+ }
64
+ .theia-TreeNode:hover {
65
+ outline: 1px dashed ${focusBorder};
66
+ }
67
+ .theia-Tree .theia-TreeNode.theia-mod-selected {
68
+ outline: 1px dotted ${focusBorder};
69
+ }
70
+ .theia-Tree:focus .theia-TreeNode.theia-mod-selected,
71
+ .theia-Tree .ReactVirtualized__List:focus .theia-TreeNode.theia-mod-selected {
72
+ outline: 1px solid ${focusBorder};
73
+ }
74
+ `);
75
+ }
76
+ }
77
+ }
78
+
79
+ @injectable()
80
+ export class BreadcrumbStylingParticipant implements StylingParticipant {
81
+ registerThemeStyle(theme: ColorTheme, collector: CssStyleCollector): void {
82
+ const contrastBorder = theme.getColor('contrastBorder');
83
+
84
+ if (isHighContrast(theme.type) && contrastBorder) {
85
+ collector.addRule(`
86
+ .theia-tabBar-breadcrumb-row {
87
+ outline: 1px solid ${contrastBorder};
88
+ }
89
+ `);
90
+ }
91
+ }
92
+ }
93
+
94
+ @injectable()
95
+ export class StatusBarStylingParticipant implements StylingParticipant {
96
+ registerThemeStyle(theme: ColorTheme, collector: CssStyleCollector): void {
97
+ const focusBorder = theme.getColor('focusBorder');
98
+
99
+ if (isHighContrast(theme.type) && focusBorder) {
100
+ collector.addRule(`
101
+ #theia-statusBar .area .element.hasCommand:hover {
102
+ outline: 1px dashed ${focusBorder};
103
+ }
104
+ #theia-statusBar .area .element.hasCommand:active {
105
+ outline: 1px solid ${focusBorder};
106
+ }
107
+ .theia-mod-offline #theia-statusBar .area .element.hasCommand:hover {
108
+ outline: none;
109
+ }
110
+ .theia-mod-offline #theia-statusBar .area .element.hasCommand:active {
111
+ outline: none;
112
+ }
113
+ `);
114
+ } else {
115
+ collector.addRule(`
116
+ #theia-statusBar .area .element.hasCommand:hover {
117
+ background-color: var(--theia-statusBarItem-hoverBackground);
118
+ }
119
+ #theia-statusBar .area .element.hasCommand:active {
120
+ background-color: var(--theia-statusBarItem-activeBackground);
121
+ }
122
+ .theia-mod-offline #theia-statusBar .area .element.hasCommand:hover {
123
+ background-color: var(--theia-statusBarItem-offlineHoverBackground) !important;
124
+ }
125
+ .theia-mod-offline #theia-statusBar .area .element.hasCommand:active {
126
+ background-color: var(--theia-statusBarItem-offlineActiveBackground) !important;
127
+ }
128
+ `);
129
+ }
130
+ }
131
+ }
132
+
133
+ @injectable()
134
+ export class MenuStylingParticipant implements StylingParticipant {
135
+ registerThemeStyle(theme: ColorTheme, collector: CssStyleCollector): void {
136
+ const focusBorder = theme.getColor('focusBorder');
137
+
138
+ if (isHighContrast(theme.type) && focusBorder) {
139
+ // Menu items
140
+ collector.addRule(`
141
+ .p-Menu .p-Menu-item.p-mod-active {
142
+ outline: 1px solid ${focusBorder};
143
+ outline-offset: -1px;
144
+ }
145
+ .p-MenuBar .p-MenuBar-item.p-mod-active {
146
+ outline: 1px dashed ${focusBorder};
147
+ }
148
+ .p-MenuBar.p-mod-active .p-MenuBar-item.p-mod-active {
149
+ outline: 1px solid ${focusBorder};
150
+ }
151
+ `);
152
+ // Sidebar items
153
+ collector.addRule(`
154
+ .theia-sidebar-menu > :hover {
155
+ outline: 1px dashed ${focusBorder};
156
+ outline-offset: -7px;
157
+ }
158
+ `);
159
+ }
160
+ }
161
+ }
162
+
163
+ @injectable()
164
+ export class BadgeStylingParticipant implements StylingParticipant {
165
+ registerThemeStyle(theme: ColorTheme, collector: CssStyleCollector): void {
166
+ const contrastBorder = theme.getColor('contrastBorder');
167
+
168
+ if (isHighContrast(theme.type) && contrastBorder) {
169
+ collector.addRule(`.p-TabBar .theia-badge-decorator-sidebar {
170
+ outline: 1px solid ${contrastBorder};
171
+ }`);
172
+ }
173
+ }
174
+ }
175
+
176
+ @injectable()
177
+ export class TabbarStylingParticipant implements StylingParticipant {
178
+ registerThemeStyle(theme: ColorTheme, collector: CssStyleCollector): void {
179
+ const focusBorder = theme.getColor('focusBorder');
180
+ const contrastBorder = theme.getColor('contrastBorder');
181
+ const highContrast = isHighContrast(theme.type);
182
+
183
+ if (highContrast && focusBorder) {
184
+ collector.addRule(`
185
+ #theia-main-content-panel .p-TabBar .p-TabBar-tab {
186
+ outline-offset: -4px;
187
+ }
188
+ #theia-main-content-panel .p-TabBar .p-TabBar-tab.p-mod-current {
189
+ outline: 1px solid ${focusBorder};
190
+ }
191
+ #theia-main-content-panel .p-TabBar .p-TabBar-tab:not(.p-mod-current):hover {
192
+ outline: 1px dashed ${focusBorder};
193
+ }
194
+ `);
195
+ }
196
+ const tabActiveBackground = theme.getColor('tab.activeBackground');
197
+ const tabActiveBorderTop = theme.getColor('tab.activeBorderTop') || (highContrast && contrastBorder) || 'transparent';
198
+ const tabActiveBorder = theme.getColor('tab.activeBorder') || (highContrast && contrastBorder) || 'transparent';
199
+ collector.addRule(`
200
+ #theia-main-content-panel .p-TabBar .p-TabBar-tab.p-mod-current {
201
+ color: var(--theia-tab-activeForeground);
202
+ ${tabActiveBackground && `background: ${tabActiveBackground};`}
203
+ box-shadow: 0 1px 0 ${tabActiveBorderTop}, 0 -1px 0 ${tabActiveBorder} inset;
204
+ }
205
+ `);
206
+ // Hover Background
207
+ const tabHoverBackground = theme.getColor('tab.hoverBackground');
208
+ if (tabHoverBackground) {
209
+ collector.addRule(`
210
+ #theia-main-content-panel .p-TabBar .p-TabBar-tab:hover {
211
+ background-color: ${tabHoverBackground};
212
+ }
213
+ `);
214
+ }
215
+
216
+ const tabUnfocusedHoverBackground = theme.getColor('tab.unfocusedHoverBackground');
217
+ if (tabUnfocusedHoverBackground) {
218
+ collector.addRule(`
219
+ #theia-main-content-panel .p-TabBar:not(.theia-tabBar-active) .p-TabBar-tab:hover {
220
+ background-color: ${tabUnfocusedHoverBackground};
221
+ }
222
+ `);
223
+ }
224
+
225
+ // Hover Foreground
226
+ const tabHoverForeground = theme.getColor('tab.hoverForeground');
227
+ if (tabHoverForeground) {
228
+ collector.addRule(`
229
+ #theia-main-content-panel .p-TabBar .p-TabBar-tab:hover {
230
+ color: ${tabHoverForeground};
231
+ }
232
+ `);
233
+ }
234
+
235
+ const tabUnfocusedHoverForeground = theme.getColor('tab.unfocusedHoverForeground');
236
+ if (tabUnfocusedHoverForeground) {
237
+ collector.addRule(`
238
+ #theia-main-content-panel .p-TabBar:not(.theia-tabBar-active) .p-TabBar-tab:hover {
239
+ color: ${tabUnfocusedHoverForeground};
240
+ }
241
+ `);
242
+ }
243
+
244
+ // Hover Border
245
+ const tabHoverBorder = theme.getColor('tab.hoverBorder');
246
+ if (tabHoverBorder) {
247
+ collector.addRule(`
248
+ #theia-main-content-panel .p-TabBar .p-TabBar-tab:hover {
249
+ box-shadow: 0 1px 0 ${tabHoverBorder} inset;
250
+ }
251
+ `);
252
+ }
253
+
254
+ const tabUnfocusedHoverBorder = theme.getColor('tab.unfocusedHoverBorder');
255
+ if (tabUnfocusedHoverBorder) {
256
+ collector.addRule(`
257
+ #theia-main-content-panel .p-TabBar:not(.theia-tabBar-active) .p-TabBar-tab:hover {
258
+ box-shadow: 0 1px 0 ${tabUnfocusedHoverBorder} inset;
259
+ }
260
+ `);
261
+ }
262
+ }
263
+ }
264
+
265
+ @injectable()
266
+ export class ButtonStylingParticipant implements StylingParticipant {
267
+ registerThemeStyle(theme: ColorTheme, collector: CssStyleCollector): void {
268
+ const contrastBorder = theme.getColor('contrastBorder');
269
+
270
+ if (isHighContrast(theme.type) && contrastBorder) {
271
+ collector.addRule(`
272
+ .theia-button {
273
+ border: 1px solid ${contrastBorder};
274
+ }
275
+ `);
276
+ }
277
+
278
+ const buttonBackground = theme.getColor('button.background');
279
+ collector.addRule(`
280
+ .theia-button {
281
+ background: ${buttonBackground || 'none'};
282
+ }
283
+ `);
284
+ const buttonHoverBackground = theme.getColor('button.hoverBackground');
285
+ if (buttonHoverBackground) {
286
+ collector.addRule(`
287
+ .theia-button:hover {
288
+ background-color: ${buttonHoverBackground};
289
+ }
290
+ `);
291
+ }
292
+ const secondaryButtonBackground = theme.getColor('secondaryButton.background');
293
+ collector.addRule(`
294
+ .theia-button.secondary {
295
+ background: ${secondaryButtonBackground || 'none'};
296
+ }
297
+ `);
298
+ const secondaryButtonHoverBackground = theme.getColor('secondaryButton.hoverBackground');
299
+ if (secondaryButtonHoverBackground) {
300
+ collector.addRule(`
301
+ .theia-button.secondary:hover {
302
+ background-color: ${secondaryButtonHoverBackground};
303
+ }
304
+ `);
305
+ }
306
+ }
307
+ }