@opensumi/ide-core-browser 2.21.13 → 2.22.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 (560) hide show
  1. package/lib/application/application-state-service.d.ts +1 -1
  2. package/lib/application/application-state-service.d.ts.map +1 -1
  3. package/lib/application/application-state-service.js.map +1 -1
  4. package/lib/application/application.service.js.map +1 -1
  5. package/lib/authentication/authentication.contribution.js.map +1 -1
  6. package/lib/authentication/authentication.service.js.map +1 -1
  7. package/lib/bootstrap/app.d.ts +2 -35
  8. package/lib/bootstrap/app.d.ts.map +1 -1
  9. package/lib/bootstrap/app.interface.d.ts +39 -0
  10. package/lib/bootstrap/app.interface.d.ts.map +1 -0
  11. package/lib/bootstrap/app.interface.js +3 -0
  12. package/lib/bootstrap/app.interface.js.map +1 -0
  13. package/lib/bootstrap/app.js +8 -8
  14. package/lib/bootstrap/app.js.map +1 -1
  15. package/lib/bootstrap/app.view.d.ts +1 -1
  16. package/lib/bootstrap/app.view.d.ts.map +1 -1
  17. package/lib/bootstrap/connection.d.ts +1 -1
  18. package/lib/bootstrap/connection.d.ts.map +1 -1
  19. package/lib/bootstrap/connection.js +4 -4
  20. package/lib/bootstrap/connection.js.map +1 -1
  21. package/lib/bootstrap/index.d.ts +1 -1
  22. package/lib/bootstrap/index.d.ts.map +1 -1
  23. package/lib/bootstrap/index.js +1 -1
  24. package/lib/bootstrap/index.js.map +1 -1
  25. package/lib/bootstrap/inner-providers.js +1 -1
  26. package/lib/bootstrap/inner-providers.js.map +1 -1
  27. package/lib/bootstrap/lifecycle.service.js.map +1 -1
  28. package/lib/browser-module.js.map +1 -1
  29. package/lib/common/common.command.d.ts +24 -1
  30. package/lib/common/common.command.d.ts.map +1 -1
  31. package/lib/common/common.command.js +42 -6
  32. package/lib/common/common.command.js.map +1 -1
  33. package/lib/common/common.contribution.js.map +1 -1
  34. package/lib/common/common.module.js.map +1 -1
  35. package/lib/common/common.storage.js.map +1 -1
  36. package/lib/components/actions/index.d.ts +2 -2
  37. package/lib/components/actions/index.d.ts.map +1 -1
  38. package/lib/components/actions/index.js +2 -22
  39. package/lib/components/actions/index.js.map +1 -1
  40. package/lib/components/index.d.ts +0 -4
  41. package/lib/components/index.d.ts.map +1 -1
  42. package/lib/components/index.js +0 -4
  43. package/lib/components/index.js.map +1 -1
  44. package/lib/components/layout/box-panel.d.ts +1 -1
  45. package/lib/components/layout/box-panel.d.ts.map +1 -1
  46. package/lib/components/layout/split-panel.d.ts +17 -1
  47. package/lib/components/layout/split-panel.d.ts.map +1 -1
  48. package/lib/components/layout/split-panel.js +16 -16
  49. package/lib/components/layout/split-panel.js.map +1 -1
  50. package/lib/components/layout/split-panel.service.js.map +1 -1
  51. package/lib/components/progressbar/index.d.ts +2 -2
  52. package/lib/components/progressbar/index.d.ts.map +1 -1
  53. package/lib/components/progressbar/index.js +2 -10
  54. package/lib/components/progressbar/index.js.map +1 -1
  55. package/lib/contextkey/resource.d.ts +1 -1
  56. package/lib/contextkey/resource.d.ts.map +1 -1
  57. package/lib/contextkey/search.d.ts +24 -0
  58. package/lib/contextkey/search.d.ts.map +1 -0
  59. package/lib/contextkey/search.js +29 -0
  60. package/lib/contextkey/search.js.map +1 -0
  61. package/lib/contextkey/testing.d.ts +1 -0
  62. package/lib/contextkey/testing.d.ts.map +1 -1
  63. package/lib/contextkey/testing.js +2 -1
  64. package/lib/contextkey/testing.js.map +1 -1
  65. package/lib/core-preferences.d.ts +4 -3
  66. package/lib/core-preferences.d.ts.map +1 -1
  67. package/lib/core-preferences.js +2 -2
  68. package/lib/core-preferences.js.map +1 -1
  69. package/lib/dom/index.d.ts +1 -1
  70. package/lib/dom/index.d.ts.map +1 -1
  71. package/lib/encoding-registry.js.map +1 -1
  72. package/lib/extensions/extensions-point.service.js.map +1 -1
  73. package/lib/file-decoration.d.ts +10 -0
  74. package/lib/file-decoration.d.ts.map +1 -0
  75. package/lib/file-decoration.js +3 -0
  76. package/lib/file-decoration.js.map +1 -0
  77. package/lib/hash-calculate/hash-calculate.contribution.js.map +1 -1
  78. package/lib/index.d.ts +1 -1
  79. package/lib/index.d.ts.map +1 -1
  80. package/lib/index.js +1 -1
  81. package/lib/index.js.map +1 -1
  82. package/lib/keybinding/keybinding.js.map +1 -1
  83. package/lib/keyboard/keyboard-layout-provider.d.ts +2 -2
  84. package/lib/keyboard/keyboard-layout-provider.d.ts.map +1 -1
  85. package/lib/keyboard/keyboard-layout-provider.js +13 -13
  86. package/lib/keyboard/keyboard-layout-provider.js.map +1 -1
  87. package/lib/keyboard/keyboard-layout-service.js.map +1 -1
  88. package/lib/keyboard/keys.d.ts +2 -2
  89. package/lib/keyboard/keys.d.ts.map +1 -1
  90. package/lib/keyboard/layouts/_.contribution.js +3 -3
  91. package/lib/keyboard/layouts/_.contribution.js.map +1 -1
  92. package/lib/layout/accordion/tab-bar-toolbar.js.map +1 -1
  93. package/lib/layout/accordion/view-context-key.registry.js.map +1 -1
  94. package/lib/layout/layout-hooks.d.ts +1 -1
  95. package/lib/layout/layout-hooks.d.ts.map +1 -1
  96. package/lib/layout/layout-state.js.map +1 -1
  97. package/lib/layout/layout.interface.d.ts +1 -1
  98. package/lib/layout/layout.interface.d.ts.map +1 -1
  99. package/lib/layout/layout.js.map +1 -1
  100. package/lib/logger/browser-logger.js.map +1 -1
  101. package/lib/markdown/index.d.ts +1 -1
  102. package/lib/markdown/index.d.ts.map +1 -1
  103. package/lib/markdown/index.js +4 -31
  104. package/lib/markdown/index.js.map +1 -1
  105. package/lib/menu/next/base.d.ts +4 -4
  106. package/lib/menu/next/base.d.ts.map +1 -1
  107. package/lib/menu/next/base.js.map +1 -1
  108. package/lib/menu/next/ctxmenu-service.js +10 -10
  109. package/lib/menu/next/ctxmenu-service.js.map +1 -1
  110. package/lib/menu/next/menu-service.js +6 -6
  111. package/lib/menu/next/menu-service.js.map +1 -1
  112. package/lib/menu/next/menu.contrib.interface.d.ts +16 -15
  113. package/lib/menu/next/menu.contrib.interface.d.ts.map +1 -1
  114. package/lib/menu/next/menu.contrib.interface.js.map +1 -1
  115. package/lib/menu/next/menu.interface.d.ts +2 -2
  116. package/lib/menu/next/menu.interface.d.ts.map +1 -1
  117. package/lib/menu/next/menu.interface.js.map +1 -1
  118. package/lib/menu/next/menubar-service.js +10 -10
  119. package/lib/menu/next/menubar-service.js.map +1 -1
  120. package/lib/menu/next/renderer/ctxmenu/browser.js.map +1 -1
  121. package/lib/menu/next/renderer/ctxmenu/electron.js.map +1 -1
  122. package/lib/menu/next/toolbar-action.service.d.ts +1 -1
  123. package/lib/menu/next/toolbar-action.service.d.ts.map +1 -1
  124. package/lib/menu/next/toolbar-action.service.js.map +1 -1
  125. package/lib/monaco/index.d.ts +7 -3
  126. package/lib/monaco/index.d.ts.map +1 -1
  127. package/lib/monaco/index.js.map +1 -1
  128. package/lib/monaco/merge-editor-widget.d.ts +53 -0
  129. package/lib/monaco/merge-editor-widget.d.ts.map +1 -0
  130. package/lib/monaco/merge-editor-widget.js +107 -0
  131. package/lib/monaco/merge-editor-widget.js.map +1 -0
  132. package/lib/opener/command-opener.js.map +1 -1
  133. package/lib/opener/default-opener.js.map +1 -1
  134. package/lib/opener/http-opener.js.map +1 -1
  135. package/lib/opener/opener.contribution.js.map +1 -1
  136. package/lib/opener/opener.service.js.map +1 -1
  137. package/lib/preferences/early-preferences.js +4 -4
  138. package/lib/preferences/early-preferences.js.map +1 -1
  139. package/lib/preferences/preference-configurations.js +1 -1
  140. package/lib/preferences/preference-configurations.js.map +1 -1
  141. package/lib/preferences/preference-contribution.d.ts +1 -2
  142. package/lib/preferences/preference-contribution.d.ts.map +1 -1
  143. package/lib/preferences/preference-contribution.js +26 -22
  144. package/lib/preferences/preference-contribution.js.map +1 -1
  145. package/lib/preferences/preference-provider.js.map +1 -1
  146. package/lib/preferences/preference-proxy.d.ts +2 -3
  147. package/lib/preferences/preference-proxy.d.ts.map +1 -1
  148. package/lib/preferences/preference-proxy.js.map +1 -1
  149. package/lib/preferences/preference-service.d.ts +1 -0
  150. package/lib/preferences/preference-service.d.ts.map +1 -1
  151. package/lib/preferences/preference-service.js +48 -3
  152. package/lib/preferences/preference-service.js.map +1 -1
  153. package/lib/preferences/settings.d.ts +44 -5
  154. package/lib/preferences/settings.d.ts.map +1 -1
  155. package/lib/preferences/settings.js.map +1 -1
  156. package/lib/preferences/types.d.ts +8 -1
  157. package/lib/preferences/types.d.ts.map +1 -1
  158. package/lib/preferences/types.js.map +1 -1
  159. package/lib/progress/progress-bar.d.ts +4 -1
  160. package/lib/progress/progress-bar.d.ts.map +1 -1
  161. package/lib/progress/progress-bar.js +11 -4
  162. package/lib/progress/progress-bar.js.map +1 -1
  163. package/lib/progress/progress-indicator.js.map +1 -1
  164. package/lib/progress/progress.service.js +6 -6
  165. package/lib/progress/progress.service.js.map +1 -1
  166. package/lib/quick-open/index.d.ts +1 -1
  167. package/lib/quick-open/index.d.ts.map +1 -1
  168. package/lib/quick-open/index.js.map +1 -1
  169. package/lib/quick-open/recent-files.js.map +1 -1
  170. package/lib/raw-context-key.d.ts +1 -1
  171. package/lib/raw-context-key.d.ts.map +1 -1
  172. package/lib/raw-context-key.js +4 -4
  173. package/lib/raw-context-key.js.map +1 -1
  174. package/lib/react-hooks/useThrottleFn/index.d.ts +13 -0
  175. package/lib/react-hooks/useThrottleFn/index.d.ts.map +1 -0
  176. package/lib/react-hooks/useThrottleFn/index.js +20 -0
  177. package/lib/react-hooks/useThrottleFn/index.js.map +1 -0
  178. package/lib/react-providers/config-provider.d.ts +6 -0
  179. package/lib/react-providers/config-provider.d.ts.map +1 -1
  180. package/lib/react-providers/config-provider.js.map +1 -1
  181. package/lib/react-providers/slot.d.ts +2 -2
  182. package/lib/react-providers/slot.d.ts.map +1 -1
  183. package/lib/services/clipboard.service.d.ts +1 -0
  184. package/lib/services/clipboard.service.d.ts.map +1 -1
  185. package/lib/services/clipboard.service.js +17 -30
  186. package/lib/services/clipboard.service.js.map +1 -1
  187. package/lib/services/credentials-service.js.map +1 -1
  188. package/lib/services/crypto-service.js.map +1 -1
  189. package/lib/services/external-uri.service.js.map +1 -1
  190. package/lib/services/label-service.js.map +1 -1
  191. package/lib/services/storage-service.d.ts +1 -0
  192. package/lib/services/storage-service.d.ts.map +1 -1
  193. package/lib/services/storage-service.js +13 -2
  194. package/lib/services/storage-service.js.map +1 -1
  195. package/lib/style/icon/icon.d.ts +3 -2
  196. package/lib/style/icon/icon.d.ts.map +1 -1
  197. package/lib/style/icon/icon.js +5 -1
  198. package/lib/style/icon/icon.js.map +1 -1
  199. package/lib/style/icon/ide-iconfont.d.ts +1 -1
  200. package/lib/style/icon/ide-iconfont.d.ts.map +1 -1
  201. package/lib/style/icon/ide-iconfont.js +1 -1
  202. package/lib/style/icon/ide-iconfont.js.map +1 -1
  203. package/lib/style/icon/index.less +13 -0
  204. package/lib/toolbar/components/button.js +12 -12
  205. package/lib/toolbar/components/button.js.map +1 -1
  206. package/lib/toolbar/toolbar.popover.registry.js.map +1 -1
  207. package/lib/toolbar/toolbar.registry.d.ts +1 -1
  208. package/lib/toolbar/toolbar.registry.d.ts.map +1 -1
  209. package/lib/toolbar/toolbar.registry.js.map +1 -1
  210. package/lib/toolbar/types.d.ts +1 -1
  211. package/lib/toolbar/types.d.ts.map +1 -1
  212. package/lib/utils/json.d.ts +5 -5
  213. package/lib/utils/json.d.ts.map +1 -1
  214. package/lib/utils/label.d.ts.map +1 -1
  215. package/lib/utils/label.js +16 -9
  216. package/lib/utils/label.js.map +1 -1
  217. package/lib/utils/parse.d.ts +2 -1
  218. package/lib/utils/parse.d.ts.map +1 -1
  219. package/lib/utils/parse.js +10 -1
  220. package/lib/utils/parse.js.map +1 -1
  221. package/lib/variable/variable.d.ts +1 -1
  222. package/lib/variable/variable.d.ts.map +1 -1
  223. package/lib/variable/variable.js.map +1 -1
  224. package/lib/window/window.service.js.map +1 -1
  225. package/package.json +9 -11
  226. package/src/application/application-state-service.ts +54 -0
  227. package/src/application/application.service.ts +51 -0
  228. package/src/application/index.ts +2 -0
  229. package/src/authentication/authentication.contribution.ts +35 -0
  230. package/src/authentication/authentication.service.ts +517 -0
  231. package/src/bootstrap/app.interface.ts +46 -0
  232. package/src/bootstrap/app.ts +710 -0
  233. package/src/bootstrap/app.view.tsx +88 -0
  234. package/src/bootstrap/connection.ts +116 -0
  235. package/src/bootstrap/index.ts +3 -0
  236. package/src/bootstrap/inner-providers.ts +297 -0
  237. package/src/bootstrap/lifecycle.service.ts +19 -0
  238. package/src/browser-module.ts +24 -0
  239. package/src/common/common.command.ts +1018 -0
  240. package/src/common/common.contribution.ts +343 -0
  241. package/src/common/common.define.ts +55 -0
  242. package/src/common/common.module.ts +33 -0
  243. package/src/common/common.storage.ts +22 -0
  244. package/src/common/container-id.ts +12 -0
  245. package/src/common/index.ts +4 -0
  246. package/src/components/actions/index.tsx +486 -0
  247. package/src/components/actions/placements.ts +47 -0
  248. package/src/components/actions/styles.module.less +144 -0
  249. package/src/components/badge/index.tsx +1 -0
  250. package/src/components/index.ts +22 -0
  251. package/src/components/layout/box-panel.tsx +88 -0
  252. package/src/components/layout/default-layout.tsx +61 -0
  253. package/src/components/layout/index.ts +4 -0
  254. package/src/components/layout/layout.ts +80 -0
  255. package/src/components/layout/split-panel.service.ts +56 -0
  256. package/src/components/layout/split-panel.tsx +315 -0
  257. package/src/components/layout/styles.module.less +21 -0
  258. package/src/components/loading/index.ts +1 -0
  259. package/src/components/loading/loading.less +14 -0
  260. package/src/components/loading/loading.view.tsx +7 -0
  261. package/src/components/loading/media/loading-dark.svg +52 -0
  262. package/src/components/loading/media/loading-hc.svg +52 -0
  263. package/src/components/loading/media/loading.svg +52 -0
  264. package/src/components/popover/styles.module.less +81 -0
  265. package/src/components/portal/index.tsx +13 -0
  266. package/src/components/progressbar/index.tsx +3 -0
  267. package/src/components/resize/resize.module.less +78 -0
  268. package/src/components/resize/resize.tsx +663 -0
  269. package/src/components/select/index.tsx +12 -0
  270. package/src/components/select/styles.less +6 -0
  271. package/src/context-key.ts +48 -0
  272. package/src/contextkey/dialog.ts +3 -0
  273. package/src/contextkey/explorer.ts +26 -0
  274. package/src/contextkey/index.ts +6 -0
  275. package/src/contextkey/outline.ts +4 -0
  276. package/src/contextkey/resource.ts +61 -0
  277. package/src/contextkey/search.ts +30 -0
  278. package/src/contextkey/terminal.ts +7 -0
  279. package/src/contextkey/testing.ts +9 -0
  280. package/src/contextkey/workspace.ts +7 -0
  281. package/src/core-preferences.ts +318 -0
  282. package/src/dom/index.ts +176 -0
  283. package/src/encoding-registry.ts +83 -0
  284. package/src/extensions/extensions-point.service.ts +78 -0
  285. package/src/extensions/index.ts +3 -0
  286. package/src/extensions/schema/browserViews.ts +96 -0
  287. package/src/extensions/schema/menu.ts +245 -0
  288. package/src/extensions/schema/opensumiExtensionPackageSchema.ts +12 -0
  289. package/src/extensions/schema/toolbar.ts +338 -0
  290. package/src/extensions/schema/vscodeExtensionPackageSchema.ts +330 -0
  291. package/src/file-decoration.ts +10 -0
  292. package/src/fs/index.ts +12 -0
  293. package/src/hash-calculate/hash-calculate.contribution.ts +19 -0
  294. package/src/index.ts +42 -0
  295. package/src/keybinding/index.ts +1 -0
  296. package/src/keybinding/keybinding.ts +908 -0
  297. package/src/keyboard/index.ts +3 -0
  298. package/src/keyboard/keyboard-layout-provider.ts +412 -0
  299. package/src/keyboard/keyboard-layout-service.ts +449 -0
  300. package/src/keyboard/keys.ts +748 -0
  301. package/src/keyboard/layouts/_.contribution.ts +24 -0
  302. package/src/keyboard/layouts/cz.win.ts +168 -0
  303. package/src/keyboard/layouts/de-swiss.win.ts +168 -0
  304. package/src/keyboard/layouts/de.darwin.ts +131 -0
  305. package/src/keyboard/layouts/de.linux.ts +186 -0
  306. package/src/keyboard/layouts/de.win.ts +168 -0
  307. package/src/keyboard/layouts/dk.win.ts +168 -0
  308. package/src/keyboard/layouts/dvorak.darwin.ts +131 -0
  309. package/src/keyboard/layouts/en-belgian.win.ts +168 -0
  310. package/src/keyboard/layouts/en-ext.darwin.ts +131 -0
  311. package/src/keyboard/layouts/en-in.win.ts +168 -0
  312. package/src/keyboard/layouts/en-intl.darwin.ts +131 -0
  313. package/src/keyboard/layouts/en-intl.win.ts +168 -0
  314. package/src/keyboard/layouts/en-uk.darwin.ts +131 -0
  315. package/src/keyboard/layouts/en-uk.win.ts +168 -0
  316. package/src/keyboard/layouts/en.darwin.ts +139 -0
  317. package/src/keyboard/layouts/en.linux.ts +186 -0
  318. package/src/keyboard/layouts/en.win.ts +173 -0
  319. package/src/keyboard/layouts/es-latin.win.ts +168 -0
  320. package/src/keyboard/layouts/es.darwin.ts +131 -0
  321. package/src/keyboard/layouts/es.linux.ts +186 -0
  322. package/src/keyboard/layouts/es.win.ts +168 -0
  323. package/src/keyboard/layouts/fr.darwin.ts +131 -0
  324. package/src/keyboard/layouts/fr.linux.ts +186 -0
  325. package/src/keyboard/layouts/fr.win.ts +168 -0
  326. package/src/keyboard/layouts/hu.win.ts +168 -0
  327. package/src/keyboard/layouts/it.darwin.ts +131 -0
  328. package/src/keyboard/layouts/it.win.ts +168 -0
  329. package/src/keyboard/layouts/jp-roman.darwin.ts +131 -0
  330. package/src/keyboard/layouts/jp.darwin.ts +131 -0
  331. package/src/keyboard/layouts/ko.darwin.ts +131 -0
  332. package/src/keyboard/layouts/layout.contribution.darwin.ts +23 -0
  333. package/src/keyboard/layouts/layout.contribution.linux.ts +12 -0
  334. package/src/keyboard/layouts/layout.contribution.ts +9 -0
  335. package/src/keyboard/layouts/layout.contribution.win.ts +29 -0
  336. package/src/keyboard/layouts/no.win.ts +168 -0
  337. package/src/keyboard/layouts/pl.darwin.ts +131 -0
  338. package/src/keyboard/layouts/pl.win.ts +168 -0
  339. package/src/keyboard/layouts/pt-br.win.ts +169 -0
  340. package/src/keyboard/layouts/pt.darwin.ts +131 -0
  341. package/src/keyboard/layouts/pt.win.ts +168 -0
  342. package/src/keyboard/layouts/ru.darwin.ts +131 -0
  343. package/src/keyboard/layouts/ru.linux.ts +186 -0
  344. package/src/keyboard/layouts/ru.win.ts +168 -0
  345. package/src/keyboard/layouts/sv.darwin.ts +131 -0
  346. package/src/keyboard/layouts/sv.win.ts +168 -0
  347. package/src/keyboard/layouts/thai.win.ts +168 -0
  348. package/src/keyboard/layouts/tr.win.ts +168 -0
  349. package/src/keyboard/layouts/zh-hans.darwin.ts +131 -0
  350. package/src/layout/accordion/tab-bar-toolbar.tsx +59 -0
  351. package/src/layout/accordion/view-context-key.registry.ts +34 -0
  352. package/src/layout/constants.ts +7 -0
  353. package/src/layout/index.ts +5 -0
  354. package/src/layout/layout-hooks.ts +70 -0
  355. package/src/layout/layout-state.ts +107 -0
  356. package/src/layout/layout.interface.ts +101 -0
  357. package/src/layout/layout.ts +80 -0
  358. package/src/layout/view-id.ts +18 -0
  359. package/src/logger/browser-logger.ts +51 -0
  360. package/src/logger/index.ts +1 -0
  361. package/src/markdown/index.tsx +30 -0
  362. package/src/menu/next/base.ts +513 -0
  363. package/src/menu/next/ctxmenu-service.ts +188 -0
  364. package/src/menu/next/index.ts +10 -0
  365. package/src/menu/next/menu-id.ts +86 -0
  366. package/src/menu/next/menu-service.ts +252 -0
  367. package/src/menu/next/menu-util.ts +77 -0
  368. package/src/menu/next/menu.contrib.interface.ts +79 -0
  369. package/src/menu/next/menu.interface.ts +253 -0
  370. package/src/menu/next/menubar-service.ts +211 -0
  371. package/src/menu/next/renderer/ctxmenu/base.ts +18 -0
  372. package/src/menu/next/renderer/ctxmenu/browser.ts +45 -0
  373. package/src/menu/next/renderer/ctxmenu/electron.ts +207 -0
  374. package/src/menu/next/toolbar-action.service.ts +132 -0
  375. package/src/monaco/index.ts +136 -0
  376. package/src/monaco/merge-editor-widget.ts +159 -0
  377. package/src/opener/command-opener.ts +42 -0
  378. package/src/opener/default-opener.ts +31 -0
  379. package/src/opener/http-opener.ts +25 -0
  380. package/src/opener/index.ts +19 -0
  381. package/src/opener/opener.contribution.ts +57 -0
  382. package/src/opener/opener.service.ts +66 -0
  383. package/src/preferences/early-preferences.ts +117 -0
  384. package/src/preferences/index.ts +9 -0
  385. package/src/preferences/preference-configurations.ts +77 -0
  386. package/src/preferences/preference-contribution.ts +397 -0
  387. package/src/preferences/preference-provider.ts +414 -0
  388. package/src/preferences/preference-proxy.ts +291 -0
  389. package/src/preferences/preference-scope.ts +3 -0
  390. package/src/preferences/preference-service.ts +621 -0
  391. package/src/preferences/settings.ts +90 -0
  392. package/src/preferences/types.ts +119 -0
  393. package/src/progress/index.ts +58 -0
  394. package/src/progress/progress-bar.tsx +34 -0
  395. package/src/progress/progress-indicator.ts +90 -0
  396. package/src/progress/progress.module.less +46 -0
  397. package/src/progress/progress.service.tsx +429 -0
  398. package/src/quick-open/index.ts +655 -0
  399. package/src/quick-open/recent-files.ts +68 -0
  400. package/src/raw-context-key.ts +116 -0
  401. package/src/react-hooks/event.tsx +80 -0
  402. package/src/react-hooks/hot-key.tsx +58 -0
  403. package/src/react-hooks/index.ts +3 -0
  404. package/src/react-hooks/injectable-hooks.tsx +35 -0
  405. package/src/react-hooks/portal-hooks.tsx +38 -0
  406. package/src/react-hooks/useThrottleFn/index.ts +34 -0
  407. package/src/react-providers/config-provider.tsx +269 -0
  408. package/src/react-providers/index.tsx +2 -0
  409. package/src/react-providers/slot.module.less +19 -0
  410. package/src/react-providers/slot.tsx +242 -0
  411. package/src/services/clipboard.service.ts +92 -0
  412. package/src/services/credentials-service.ts +91 -0
  413. package/src/services/crypto-service.ts +23 -0
  414. package/src/services/external-uri.service.ts +68 -0
  415. package/src/services/index.ts +7 -0
  416. package/src/services/label-service.ts +386 -0
  417. package/src/services/status-bar-service.ts +108 -0
  418. package/src/services/storage-service.ts +201 -0
  419. package/src/style/codicons/README.md +22 -0
  420. package/src/style/codicons/codicon-animations.css +15 -0
  421. package/src/style/codicons/generator.js +15 -0
  422. package/src/style/entry.less +25 -0
  423. package/src/style/icon/fileicons/file-default.svg +1 -0
  424. package/src/style/icon/fileicons/folder-default.svg +1 -0
  425. package/src/style/icon/fileicons.less +20 -0
  426. package/src/style/icon/icon.ts +547 -0
  427. package/src/style/icon/ide-iconfont.ts +13 -0
  428. package/src/style/icon/index.less +67 -0
  429. package/src/style/icon/seti.woff +0 -0
  430. package/src/style/icon/symbol-icons/boolean-dark.svg +3 -0
  431. package/src/style/icon/symbol-icons/boolean-light.svg +3 -0
  432. package/src/style/icon/symbol-icons/class-dark.svg +3 -0
  433. package/src/style/icon/symbol-icons/class-light.svg +3 -0
  434. package/src/style/icon/symbol-icons/constant-dark.svg +4 -0
  435. package/src/style/icon/symbol-icons/constant-light.svg +4 -0
  436. package/src/style/icon/symbol-icons/enumerator-dark.svg +3 -0
  437. package/src/style/icon/symbol-icons/enumerator-item-dark.svg +3 -0
  438. package/src/style/icon/symbol-icons/enumerator-item-light.svg +3 -0
  439. package/src/style/icon/symbol-icons/enumerator-light.svg +3 -0
  440. package/src/style/icon/symbol-icons/event-dark.svg +3 -0
  441. package/src/style/icon/symbol-icons/event-light.svg +3 -0
  442. package/src/style/icon/symbol-icons/field-dark.svg +3 -0
  443. package/src/style/icon/symbol-icons/field-light.svg +3 -0
  444. package/src/style/icon/symbol-icons/file-dark.svg +3 -0
  445. package/src/style/icon/symbol-icons/file-light.svg +3 -0
  446. package/src/style/icon/symbol-icons/indexer-dark.svg +3 -0
  447. package/src/style/icon/symbol-icons/indexer-light.svg +3 -0
  448. package/src/style/icon/symbol-icons/interface-dark.svg +3 -0
  449. package/src/style/icon/symbol-icons/interface-light.svg +3 -0
  450. package/src/style/icon/symbol-icons/keyword-dark.svg +3 -0
  451. package/src/style/icon/symbol-icons/keyword-light.svg +3 -0
  452. package/src/style/icon/symbol-icons/method-dark.svg +3 -0
  453. package/src/style/icon/symbol-icons/method-light.svg +3 -0
  454. package/src/style/icon/symbol-icons/namespace-dark.svg +3 -0
  455. package/src/style/icon/symbol-icons/namespace-light.svg +3 -0
  456. package/src/style/icon/symbol-icons/numeric-dark.svg +3 -0
  457. package/src/style/icon/symbol-icons/numeric-light.svg +3 -0
  458. package/src/style/icon/symbol-icons/operator-dark.svg +3 -0
  459. package/src/style/icon/symbol-icons/operator-light.svg +3 -0
  460. package/src/style/icon/symbol-icons/property-dark.svg +3 -0
  461. package/src/style/icon/symbol-icons/property-light.svg +3 -0
  462. package/src/style/icon/symbol-icons/snippet-dark.svg +3 -0
  463. package/src/style/icon/symbol-icons/snippet-light.svg +3 -0
  464. package/src/style/icon/symbol-icons/string-dark.svg +3 -0
  465. package/src/style/icon/symbol-icons/string-light.svg +3 -0
  466. package/src/style/icon/symbol-icons/structure-dark.svg +3 -0
  467. package/src/style/icon/symbol-icons/structure-light.svg +3 -0
  468. package/src/style/icon/symbol-icons/symbol-icons.css +284 -0
  469. package/src/style/icon/symbol-icons/template-dark.svg +3 -0
  470. package/src/style/icon/symbol-icons/template-light.svg +3 -0
  471. package/src/style/icon/symbol-icons/variable-dark.svg +3 -0
  472. package/src/style/icon/symbol-icons/variable-light.svg +3 -0
  473. package/src/style/icon.less +8 -0
  474. package/src/style/index.less +14 -0
  475. package/src/style/monaco-override.less +116 -0
  476. package/src/style/normalize.less +92 -0
  477. package/src/style/octicons/octicons-cdn.css +720 -0
  478. package/src/style/octicons/octicons.css +714 -0
  479. package/src/style/octicons/octicons.html +1882 -0
  480. package/src/style/octicons/octicons.svg +582 -0
  481. package/src/style/octicons/octicons.ttf +0 -0
  482. package/src/style/override.less +97 -0
  483. package/src/style/toolbar.less +199 -0
  484. package/src/style/utilities.less +8 -0
  485. package/src/style/variable.less +8 -0
  486. package/src/terminal/index.ts +7 -0
  487. package/src/toolbar/components/auto-complete.tsx +0 -0
  488. package/src/toolbar/components/button.tsx +440 -0
  489. package/src/toolbar/components/index.ts +2 -0
  490. package/src/toolbar/components/select.tsx +189 -0
  491. package/src/toolbar/index.ts +3 -0
  492. package/src/toolbar/toolbar.popover.registry.ts +32 -0
  493. package/src/toolbar/toolbar.registry.ts +352 -0
  494. package/src/toolbar/toolbar.tsx +710 -0
  495. package/src/toolbar/types.ts +383 -0
  496. package/src/utils/create-overlay.tsx +53 -0
  497. package/src/utils/electron.ts +92 -0
  498. package/src/utils/env.ts +26 -0
  499. package/src/utils/icon.ts +13 -0
  500. package/src/utils/index.ts +7 -0
  501. package/src/utils/json.ts +251 -0
  502. package/src/utils/label.tsx +36 -0
  503. package/src/utils/parse.ts +82 -0
  504. package/src/utils/react-hooks.ts +118 -0
  505. package/src/variable/index.ts +1 -0
  506. package/src/variable/variable.ts +84 -0
  507. package/src/window/index.ts +34 -0
  508. package/src/window/window.service.ts +100 -0
  509. package/lib/components/progressbar/styles.module.less +0 -31
  510. package/lib/components/recycle-tree/index.d.ts +0 -2
  511. package/lib/components/recycle-tree/index.d.ts.map +0 -1
  512. package/lib/components/recycle-tree/index.js +0 -5
  513. package/lib/components/recycle-tree/index.js.map +0 -1
  514. package/lib/components/recycle-tree/recycle-tree.view.d.ts +0 -82
  515. package/lib/components/recycle-tree/recycle-tree.view.d.ts.map +0 -1
  516. package/lib/components/recycle-tree/recycle-tree.view.js +0 -188
  517. package/lib/components/recycle-tree/recycle-tree.view.js.map +0 -1
  518. package/lib/components/scroll/index.d.ts +0 -68
  519. package/lib/components/scroll/index.d.ts.map +0 -1
  520. package/lib/components/scroll/index.js +0 -279
  521. package/lib/components/scroll/index.js.map +0 -1
  522. package/lib/components/scroll/scroll.module.less +0 -108
  523. package/lib/components/scrollbar/index.d.ts +0 -2
  524. package/lib/components/scrollbar/index.d.ts.map +0 -1
  525. package/lib/components/scrollbar/index.js +0 -5
  526. package/lib/components/scrollbar/index.js.map +0 -1
  527. package/lib/components/scrollbar/scrollbar.less +0 -36
  528. package/lib/components/scrollbar/scrollbar.view.d.ts +0 -7
  529. package/lib/components/scrollbar/scrollbar.view.d.ts.map +0 -1
  530. package/lib/components/scrollbar/scrollbar.view.js +0 -11
  531. package/lib/components/scrollbar/scrollbar.view.js.map +0 -1
  532. package/lib/components/tree/index.d.ts +0 -4
  533. package/lib/components/tree/index.d.ts.map +0 -1
  534. package/lib/components/tree/index.js +0 -7
  535. package/lib/components/tree/index.js.map +0 -1
  536. package/lib/components/tree/tree-node.view.d.ts +0 -26
  537. package/lib/components/tree/tree-node.view.d.ts.map +0 -1
  538. package/lib/components/tree/tree-node.view.js +0 -350
  539. package/lib/components/tree/tree-node.view.js.map +0 -1
  540. package/lib/components/tree/tree.module.less +0 -296
  541. package/lib/components/tree/tree.view.d.ts +0 -132
  542. package/lib/components/tree/tree.view.d.ts.map +0 -1
  543. package/lib/components/tree/tree.view.js +0 -238
  544. package/lib/components/tree/tree.view.js.map +0 -1
  545. package/lib/tree/index.d.ts +0 -4
  546. package/lib/tree/index.d.ts.map +0 -1
  547. package/lib/tree/index.js +0 -7
  548. package/lib/tree/index.js.map +0 -1
  549. package/lib/tree/tree-expansion.d.ts +0 -16
  550. package/lib/tree/tree-expansion.d.ts.map +0 -1
  551. package/lib/tree/tree-expansion.js +0 -20
  552. package/lib/tree/tree-expansion.js.map +0 -1
  553. package/lib/tree/tree-selection.d.ts +0 -48
  554. package/lib/tree/tree-selection.d.ts.map +0 -1
  555. package/lib/tree/tree-selection.js +0 -64
  556. package/lib/tree/tree-selection.js.map +0 -1
  557. package/lib/tree/tree.d.ts +0 -195
  558. package/lib/tree/tree.d.ts.map +0 -1
  559. package/lib/tree/tree.js +0 -108
  560. package/lib/tree/tree.js.map +0 -1
@@ -0,0 +1,513 @@
1
+ import ReactIs from 'react-is';
2
+
3
+ import { Injectable, Autowired } from '@opensumi/di';
4
+ import { ButtonType } from '@opensumi/ide-components';
5
+ import { warning } from '@opensumi/ide-components/lib/utils';
6
+ import {
7
+ replaceLocalizePlaceholder,
8
+ ILogger,
9
+ Disposable,
10
+ combinedDisposable,
11
+ CommandRegistry,
12
+ IDisposable,
13
+ Event,
14
+ Emitter,
15
+ Command,
16
+ ContributionProvider,
17
+ ISumiMenuExtendInfo,
18
+ } from '@opensumi/ide-core-common';
19
+ import { ContextKeyExpr } from '@opensumi/monaco-editor-core/esm/vs/platform/contextkey/common/contextkey';
20
+
21
+
22
+ import { MenuId } from './menu-id';
23
+
24
+ export const MenuContribution = Symbol('MenuContribution');
25
+ export interface MenuContribution {
26
+ /**
27
+ * @deprecated 请使用 registerMenus
28
+ */
29
+ registerNextMenus?(menus: IMenuRegistry): void;
30
+ registerMenus?(menus: IMenuRegistry): void;
31
+ }
32
+
33
+ /**
34
+ * @deprecated 请使用 NextMenuContribution
35
+ */
36
+ export const NextMenuContribution = MenuContribution;
37
+ /**
38
+ * @deprecated 请使用 NextMenuContribution
39
+ */
40
+ export type NextMenuContribution = MenuContribution;
41
+
42
+ type PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
43
+
44
+ export interface MenuCommandDesc {
45
+ id: string;
46
+ label: string;
47
+ }
48
+
49
+ interface ICoreMenuItem {
50
+ order?: number;
51
+ /**
52
+ * 决定是否在视图层展示
53
+ */
54
+ when?: string | ContextKeyExpr;
55
+ // 以下为 sumi 拓展的属性
56
+ /**
57
+ * 单独变更此 menu action 的 args
58
+ */
59
+ argsTransformer?: (...args: any[]) => any[];
60
+ }
61
+
62
+ interface IBaseMenuItem extends ICoreMenuItem {
63
+ group?: 'navigation' | string;
64
+ /**
65
+ * 图标的名称
66
+ * 当 menu 在 InlineActionBar 出现时,使用的 iconClass
67
+ * 如果这个值不存在,则默认跟随 command 的 iconClass
68
+ * 如果command的icon也不存在,使用 command 的 label
69
+ */
70
+ iconClass?: string;
71
+ /**
72
+ * electron native 菜单使用
73
+ */
74
+ nativeRole?: string;
75
+ /**
76
+ * 决定 menu 渲染的类型
77
+ * 默认值为 icon
78
+ */
79
+ type?: IMenuActionDisplayType;
80
+ }
81
+
82
+ export interface IComponentMenuItemProps {
83
+ getExecuteArgs: () => any[];
84
+ }
85
+
86
+ /**
87
+ * 有限开放,目前仅支持 navigation 的 group,也不支持 context 系列的位置
88
+ */
89
+ interface IInternalComponentMenuItem extends ICoreMenuItem {
90
+ /**
91
+ * 单个 menu 支持传入额外参数
92
+ */
93
+ extraTailArgs?: any[];
94
+ /**
95
+ * 组件形式的 menu item
96
+ */
97
+ component: React.ComponentType<IComponentMenuItemProps>;
98
+ }
99
+
100
+ export interface IComponentMenuItem extends IInternalComponentMenuItem {
101
+ /**
102
+ * group 默认为 `navigation`
103
+ */
104
+ group: 'navigation';
105
+ }
106
+
107
+ export interface IMenuItem extends IBaseMenuItem {
108
+ command: string | MenuCommandDesc;
109
+ // 以下为 sumi 拓展的属性
110
+ /**
111
+ * 单个 menu 支持传入额外参数
112
+ */
113
+ extraTailArgs?: any[];
114
+ /**
115
+ * 决定 toggled 状态
116
+ * more-dropdown 中主要表现为文字左侧有一个 ✅
117
+ * icon 则表现为 背景色选中 状态
118
+ */
119
+ toggledWhen?: string | ContextKeyExpr;
120
+ /**
121
+ * 决定 disabled 状态,主要表现为 menu item 颜色变灰
122
+ */
123
+ enabledWhen?: string | ContextKeyExpr;
124
+ /**
125
+ * 菜单栏最右侧显示的额外信息
126
+ */
127
+ extraDesc?: string;
128
+ }
129
+
130
+ export interface ISubmenuItem extends IBaseMenuItem {
131
+ submenu: MenuId | string;
132
+ /**
133
+ * 支持国际化占位符,例如 %evenEditorGroups%
134
+ */
135
+ label?: string;
136
+ }
137
+
138
+ export type ICommandsMap = Map<string, Command>;
139
+
140
+ export abstract class IMenuRegistry {
141
+ readonly onDidChangeMenubar: Event<string>;
142
+ abstract registerMenubarItem(menuId: string, item: PartialBy<IMenubarItem, 'id'>): IDisposable;
143
+ abstract removeMenubarItem(menuId: string): void;
144
+ abstract getMenubarItem(menuId: string): IMenubarItem | undefined;
145
+ abstract getMenubarItems(): Array<IMenubarItem>;
146
+
147
+ readonly onDidChangeMenu: Event<string>;
148
+
149
+ abstract getMenuCommand(command: string | MenuCommandDesc): PartialBy<MenuCommandDesc, 'label'>;
150
+ abstract registerMenuExtendInfo(menuId: MenuId | string, items: Array<ISumiMenuExtendInfo>);
151
+ abstract registerMenuItem(
152
+ menuId: MenuId | string,
153
+ item: IMenuItem | ISubmenuItem | IInternalComponentMenuItem,
154
+ ): IDisposable;
155
+ abstract unregisterMenuItem(menuId: MenuId | string, menuItemId: string): void;
156
+ abstract registerMenuItems(
157
+ menuId: MenuId | string,
158
+ items: Array<IMenuItem | ISubmenuItem | IInternalComponentMenuItem>,
159
+ ): IDisposable;
160
+ abstract unregisterMenuId(menuId: string): IDisposable;
161
+ abstract getMenuItems(menuId: MenuId | string): Array<IMenuItem | ISubmenuItem | IComponentMenuItem>;
162
+ }
163
+
164
+ export interface IMenubarItem {
165
+ id: string; // 作为 menu-id 注册进来
166
+ label: string;
167
+ order?: number;
168
+ nativeRole?: string; // electron menu 使用
169
+ }
170
+
171
+ @Injectable()
172
+ export class CoreMenuRegistryImpl implements IMenuRegistry {
173
+ // 目前只支持 `EditorTitle` 开放 `ComponentMenuItem`
174
+ static EnableComponentMenuIds: Array<MenuId | string> = [MenuId.EditorTitle];
175
+
176
+ private readonly _menubarItems = new Map<string, IMenubarItem>();
177
+
178
+ private readonly _onDidChangeMenubar = new Emitter<string>();
179
+ readonly onDidChangeMenubar: Event<string> = this._onDidChangeMenubar.event;
180
+
181
+ private readonly _menuItems = new Map<string, Array<IMenuItem | ISubmenuItem | IComponentMenuItem>>();
182
+ private readonly _menuExtendInfo = new Map<string, Array<ISumiMenuExtendInfo>>();
183
+
184
+ private readonly _onDidChangeMenu = new Emitter<string>();
185
+ readonly onDidChangeMenu: Event<string> = this._onDidChangeMenu.event;
186
+
187
+ // 记录被禁用的 menu-id
188
+ private readonly _disabledMenuIds = new Set<string>();
189
+
190
+ @Autowired(MenuContribution)
191
+ protected readonly contributions: ContributionProvider<MenuContribution>;
192
+
193
+ @Autowired(CommandRegistry)
194
+ private readonly commandRegistry: CommandRegistry;
195
+
196
+ @Autowired(ILogger)
197
+ private readonly logger: ILogger;
198
+
199
+ /**
200
+ * 这里的注册只允许注册一次
201
+ */
202
+ registerMenubarItem(menuId: string, item: PartialBy<IMenubarItem, 'id'>): IDisposable {
203
+ // 将 menuId 存到结构中去
204
+ const menubarItem = { ...item, id: menuId } as IMenubarItem;
205
+ const existedItem = this._menubarItems.get(menuId);
206
+ if (existedItem) {
207
+ this.logger.warn(`this menuId ${menuId} already existed`);
208
+ return Disposable.NULL;
209
+ }
210
+
211
+ this._menubarItems.set(menuId, menubarItem);
212
+ this._onDidChangeMenubar.fire(menuId);
213
+
214
+ return Disposable.create(() => this.removeMenubarItem(menuId));
215
+ }
216
+
217
+ removeMenubarItem(menuId: string) {
218
+ const item = this._menubarItems.get(menuId);
219
+ if (item) {
220
+ this._menubarItems.delete(menuId);
221
+ this._onDidChangeMenubar.fire(menuId);
222
+ }
223
+ }
224
+
225
+ getMenubarItem(menuId: string): IMenubarItem | undefined {
226
+ return this._menubarItems.get(menuId);
227
+ }
228
+
229
+ getMenubarItems(): IMenubarItem[] {
230
+ const menubarIds = Array.from(this._menubarItems.keys());
231
+ return menubarIds.reduce((prev, menubarId) => {
232
+ const menubarItem = this._menubarItems.get(menubarId);
233
+ if (menubarItem) {
234
+ prev.push(menubarItem);
235
+ }
236
+ return prev;
237
+ }, [] as IMenubarItem[]);
238
+ }
239
+
240
+ registerMenuExtendInfo(menuId: MenuId | string, item: Array<ISumiMenuExtendInfo>): IDisposable {
241
+ this._menuExtendInfo.set(menuId, item);
242
+
243
+ return Disposable.create(() => this._menuExtendInfo.delete(menuId));
244
+ }
245
+
246
+ registerMenuItem(menuId: MenuId | string, item: IMenuItem | ISubmenuItem): IDisposable {
247
+ let array = this._menuItems.get(menuId);
248
+ if (!array) {
249
+ array = [item];
250
+ this._menuItems.set(menuId, array);
251
+ } else {
252
+ array.push(item);
253
+ }
254
+
255
+ this._onDidChangeMenu.fire(menuId);
256
+
257
+ return Disposable.create(() => {
258
+ const idx = array!.indexOf(item);
259
+ if (idx >= 0) {
260
+ array!.splice(idx, 1);
261
+ this._onDidChangeMenu.fire(menuId);
262
+ }
263
+ });
264
+ }
265
+
266
+ unregisterMenuItem(menuId: MenuId | string, menuItemId: string): void {
267
+ const array = this._menuItems.get(menuId);
268
+ if (array) {
269
+ const idx = array.findIndex((item) => {
270
+ const command: string | MenuCommandDesc = (item as IMenuItem).command;
271
+ if (command) {
272
+ if (typeof command === 'string') {
273
+ return command === menuItemId;
274
+ }
275
+ return command.id === menuItemId;
276
+ } else {
277
+ return (item as ISubmenuItem).submenu === menuItemId;
278
+ }
279
+ });
280
+ if (idx >= 0) {
281
+ array.splice(idx, 1);
282
+ this._onDidChangeMenu.fire(menuId);
283
+ }
284
+ }
285
+ }
286
+
287
+ registerMenuItems(menuId: string, items: (IMenuItem | ISubmenuItem)[]): IDisposable {
288
+ const disposables = [] as IDisposable[];
289
+ items.forEach((item) => {
290
+ disposables.push(this.registerMenuItem(menuId, item));
291
+ });
292
+
293
+ return combinedDisposable(disposables);
294
+ }
295
+
296
+ unregisterMenuId(menuId: string): IDisposable {
297
+ this._disabledMenuIds.add(menuId);
298
+ this._onDidChangeMenu.fire(menuId);
299
+
300
+ return Disposable.create(() => {
301
+ const deleted = this._disabledMenuIds.delete(menuId);
302
+ if (deleted) {
303
+ this._onDidChangeMenu.fire(menuId);
304
+ }
305
+ });
306
+ }
307
+
308
+ getMenuItems(id: MenuId | string): Array<IMenuItem | ISubmenuItem | IComponentMenuItem> {
309
+ // 将 disable 掉的 MenuId 返回为空
310
+ if (this._disabledMenuIds.has(id)) {
311
+ return [];
312
+ }
313
+
314
+ const result = (this._menuItems.get(id) || []).slice(0).reduce((prev, cur) => {
315
+ if (isIComponentMenuItem(cur)) {
316
+ // 目前只支持 `EditorTitle` 开放 `ComponentMenuItem`
317
+ if (CoreMenuRegistryImpl.EnableComponentMenuIds.includes(id)) {
318
+ prev.push({
319
+ ...cur,
320
+ group: 'navigation',
321
+ });
322
+ }
323
+ } else {
324
+ prev.push(cur);
325
+ }
326
+
327
+ return prev;
328
+ }, [] as Array<IMenuItem | ISubmenuItem | IComponentMenuItem>);
329
+
330
+ if (id === MenuId.CommandPalette) {
331
+ // CommandPalette 特殊处理, 默认展示所有的 command
332
+ // CommandPalette 负责添加 when 条件
333
+ this.appendImplicitMenuItems(result);
334
+ }
335
+
336
+ if (this._menuExtendInfo.has(id)) {
337
+ return this.convertToMenuExtendInfo(this._menuExtendInfo.get(id)!, result);
338
+ }
339
+
340
+ return result;
341
+ }
342
+
343
+ getMenuCommand(command: string | MenuCommandDesc) {
344
+ if (typeof command === 'string') {
345
+ return { id: command };
346
+ }
347
+
348
+ return command;
349
+ }
350
+
351
+ private appendImplicitMenuItems(result: Array<IMenuItem | ISubmenuItem | IComponentMenuItem>) {
352
+ // 只保留 MenuItem
353
+ const temp = result.filter((item) => isIMenuItem(item)) as IMenuItem[];
354
+ const set = new Set<string>(temp.map((n) => this.getMenuCommand(n.command).id));
355
+
356
+ const allCommands = this.commandRegistry.getCommands();
357
+ // 将 commandRegistry 中 "其他" command 加进去
358
+ allCommands.forEach((command) => {
359
+ if (!set.has(command.id)) {
360
+ result.push({ command: command.id });
361
+ }
362
+ });
363
+ }
364
+
365
+ private convertToMenuExtendInfo(
366
+ extendInfoArr: ISumiMenuExtendInfo[],
367
+ result: Array<IMenuItem | ISubmenuItem | IComponentMenuItem>,
368
+ ) {
369
+ return result.map((menuItem) => {
370
+ if (!isIMenuItem(menuItem)) {
371
+ return menuItem;
372
+ }
373
+
374
+ const { command } = menuItem;
375
+ const info = extendInfoArr.find((item) => item.command === command);
376
+
377
+ return info ? { ...menuItem, ...info } : menuItem;
378
+ });
379
+ }
380
+ }
381
+
382
+ @Injectable()
383
+ export class MenuRegistryImpl extends CoreMenuRegistryImpl {
384
+ @Autowired(MenuContribution)
385
+ protected readonly contributions: ContributionProvider<MenuContribution>;
386
+
387
+ // MenuContribution
388
+ initialize() {
389
+ for (const contrib of this.contributions.getContributions()) {
390
+ if (contrib.registerNextMenus) {
391
+ contrib.registerNextMenus(this);
392
+ warning(false, '`registerNextMenus` was deprecated in favor of `registerMenus`');
393
+ }
394
+ contrib.registerMenus && contrib.registerMenus(this);
395
+ }
396
+ }
397
+ }
398
+
399
+ export function isIMenuItem(item: IMenuItem | ISubmenuItem | IInternalComponentMenuItem): item is IMenuItem {
400
+ return (item as IMenuItem).command !== undefined;
401
+ }
402
+
403
+ export function isISubmenuItem(item: IMenuItem | ISubmenuItem | IInternalComponentMenuItem): item is ISubmenuItem {
404
+ return (item as ISubmenuItem).submenu !== undefined;
405
+ }
406
+
407
+ export function isIComponentMenuItem(
408
+ item: IMenuItem | ISubmenuItem | IInternalComponentMenuItem,
409
+ ): item is IInternalComponentMenuItem {
410
+ return ReactIs.isValidElementType((item as IInternalComponentMenuItem).component);
411
+ }
412
+
413
+ /**
414
+ * 这里的 MenuAction 的展示类型拓展为支持 Button 组件的类型以及 checkbox
415
+ * 由于 Comment 模块的默认用的 Menu 的展示类型为 Button 类型
416
+ * 同时从设计角度更完善的展示 checked 属性,额外拓展了 checkbox 类型
417
+ * 用在 button 类型时 checked 状态的展示
418
+ */
419
+ export type IMenuActionDisplayType = ButtonType | 'checkbox';
420
+
421
+ export interface IMenuAction {
422
+ /**
423
+ * command id
424
+ */
425
+ readonly id: string;
426
+ label: string;
427
+ /**
428
+ * 标准的 vscode icon 是分两种主题的
429
+ */
430
+ icon?: string;
431
+ tooltip?: string;
432
+ className?: string;
433
+ /**
434
+ * 快捷键描述
435
+ */
436
+ keybinding?: string;
437
+ rawKeybinding?: string;
438
+ /**
439
+ * 是否为组合键
440
+ */
441
+ isKeyCombination?: boolean;
442
+ /**
443
+ * disable 状态的 menu
444
+ */
445
+ disabled?: boolean;
446
+ /**
447
+ * checked 状态 通过 toggledWhen 实现
448
+ */
449
+ checked?: boolean;
450
+ /**
451
+ * electron menu 使用
452
+ */
453
+ nativeRole?: string;
454
+ execute?: (...args: any[]) => any;
455
+ /**
456
+ * 默认值为 'icon'
457
+ */
458
+ type?: IMenuActionDisplayType;
459
+ /**
460
+ * menu 子项最右侧的额外描述信息
461
+ */
462
+ extraDesc?: string;
463
+ }
464
+
465
+ /**
466
+ * base 类
467
+ */
468
+ export class MenuNode implements IMenuAction {
469
+ readonly id: string;
470
+ label: string;
471
+ icon?: string;
472
+ tooltip?: string;
473
+ className?: string;
474
+ keybinding: string;
475
+ rawKeybinding: string;
476
+ isKeyCombination: boolean;
477
+ disabled: boolean;
478
+ checked: boolean;
479
+ nativeRole: string;
480
+ extraDesc: string;
481
+ children: MenuNode[];
482
+ type?: IMenuActionDisplayType;
483
+ protected _actionCallback?: (...args: any[]) => any;
484
+
485
+ constructor(props: IMenuAction) {
486
+ this.id = props.id;
487
+ this.label = replaceLocalizePlaceholder(props.label)!;
488
+ this.className = props.className || '';
489
+ this.icon = props.icon || '';
490
+ this.keybinding = props.keybinding || '';
491
+ this.rawKeybinding = props.rawKeybinding || '';
492
+ this.isKeyCombination = Boolean(props.isKeyCombination);
493
+ this.disabled = Boolean(props.disabled);
494
+ this.checked = Boolean(props.checked);
495
+ this.nativeRole = props.nativeRole || '';
496
+ this.type = props.type;
497
+ this.extraDesc = props.extraDesc || '';
498
+ this._actionCallback = props.execute;
499
+ }
500
+
501
+ getExecuteArgs(...args: any[]): any[] {
502
+ return args;
503
+ }
504
+
505
+ execute(...args: any[]): any {
506
+ const runArgs = this.getExecuteArgs(args);
507
+ if (this._actionCallback) {
508
+ return this._actionCallback(...runArgs);
509
+ }
510
+
511
+ return Promise.resolve(true);
512
+ }
513
+ }
@@ -0,0 +1,188 @@
1
+ import { Autowired, Injectable, Optional, INJECTOR_TOKEN, Injector } from '@opensumi/di';
2
+ import { IDisposable, Disposable, Event, Emitter } from '@opensumi/ide-core-common';
3
+
4
+ import { IContextKeyService } from '../../context-key';
5
+
6
+ import { MenuNode } from './base';
7
+ import { generateMergedCtxMenu, generateCtxMenu, mergeTupleMenuNodeResult } from './menu-util';
8
+ import {
9
+ AbstractMenuService,
10
+ AbstractContextMenuService,
11
+ IContextMenu,
12
+ IMenu,
13
+ IMenuConfig,
14
+ SubmenuItemNode,
15
+ TupleMenuNodeResult,
16
+ CreateMenuPayload,
17
+ } from './menu.interface';
18
+
19
+ @Injectable()
20
+ export class ContextMenuServiceImpl implements AbstractContextMenuService {
21
+ @Autowired(INJECTOR_TOKEN)
22
+ private readonly injector: Injector;
23
+
24
+ public createMenu(payload: CreateMenuPayload): IContextMenu {
25
+ return this.injector.get(ContextMenu, [payload]);
26
+ }
27
+ }
28
+
29
+ @Injectable()
30
+ export class ContextMenu extends Disposable implements IContextMenu {
31
+ @Autowired(AbstractMenuService)
32
+ private readonly menuService: AbstractMenuService;
33
+
34
+ private readonly _onDidMenuChange = new Emitter<string>();
35
+ public get onDidChange(): Event<string> {
36
+ return this._onDidMenuChange.event;
37
+ }
38
+
39
+ private readonly _onMenuChange = new Emitter<string>();
40
+ // internal 的 MenuChange 监听器,监听 menu/submenu 的变化
41
+ private get onMenuChange(): Event<string | undefined> {
42
+ return this._onMenuChange.event;
43
+ }
44
+
45
+ private _menus: Map<string, IMenu> = new Map();
46
+ private _menuItems: TupleMenuNodeResult = [[], []];
47
+
48
+ private _menusListener: Map<string, IDisposable> = new Map();
49
+ private _menuId: string;
50
+
51
+ private readonly config: IMenuConfig;
52
+ private readonly contextKeyService: IContextKeyService;
53
+
54
+ public get menuId() {
55
+ return this._menuId;
56
+ }
57
+
58
+ constructor(@Optional() payload: CreateMenuPayload) {
59
+ super();
60
+ this._menuId = payload.id;
61
+ if (payload.config) {
62
+ this.config = payload.config;
63
+ }
64
+ if (payload.contextKeyService) {
65
+ this.contextKeyService = payload.contextKeyService;
66
+ }
67
+
68
+ this._build();
69
+
70
+ // 监听内部的 onMenuChange 刷新单个 menu 下的所有节点
71
+ this.addDispose(
72
+ Event.debounce(
73
+ Event.filter(this.onMenuChange, (menuId) => menuId === this._menuId),
74
+ () => {},
75
+ 50,
76
+ )(this._rebuildMenus, this),
77
+ );
78
+
79
+ this.addDispose(this._onDidMenuChange);
80
+ }
81
+
82
+ // 构建完整的 menuItems
83
+ private _build() {
84
+ // reset
85
+ this._menuItems = [[], []];
86
+ this._buildMenus(this._menuId);
87
+ }
88
+
89
+ // 根据事件监听结果更新
90
+ private _rebuildMenus() {
91
+ this._buildMenus(this._menuId);
92
+ this._onDidMenuChange.fire(this._menuId);
93
+ }
94
+
95
+ /**
96
+ * 构建产生每个 submenu item 下方点击展开的 menus
97
+ * 包括递归产生多层级结构
98
+ * @param menuId [string]
99
+ */
100
+ private _buildMenus(menuId: string) {
101
+ const menus = this.menuService.createMenu(menuId, this.contextKeyService);
102
+
103
+ // clean up for IMenu
104
+ const oldMenus = this._menus.get(menuId);
105
+ if (oldMenus) {
106
+ oldMenus.dispose();
107
+ this._menus.delete(menuId);
108
+ }
109
+
110
+ // clean up for menu.onDidChange
111
+ const oldMenusListener = this._menusListener.get(menuId);
112
+ if (oldMenusListener) {
113
+ oldMenusListener.dispose();
114
+ this._menusListener.delete(menuId);
115
+ }
116
+
117
+ this._menus.set(menuId, menus);
118
+ this._menusListener.set(
119
+ menuId,
120
+ menus.onDidChange(() => this._onMenuChange.fire(menuId), this, this.disposables),
121
+ );
122
+
123
+ // 顶层结果最后会通过 navigation/inline 等分隔符分割,所以维持原结构
124
+ const menuNodes = [[], []] as TupleMenuNodeResult;
125
+ const tupleMenuNodeResult = generateCtxMenu({ menus, ...this.config });
126
+ tupleMenuNodeResult.forEach((menuItems, index) => {
127
+ this._traverseMenuItems(menuItems, menuNodes[index], menuId);
128
+ });
129
+
130
+ this._menuItems = menuNodes;
131
+ }
132
+
133
+ /**
134
+ * 递归构建生成单个 Menu 下所有层级菜单的数据结构的函数
135
+ * @param menus IMenu 实例, menuService.createMenu 返回值
136
+ * @param menuToPopulate 递归中用来收集数结果
137
+ * @param rootMenuId 顶级的 menuId, 下方所有 submenuId 的 onDidChange 都触发顶层 menuId 事件以刷新该 menuId 下所有的数据
138
+ */
139
+ private _traverseMenuItems(menuItems: MenuNode[], menuToPopulate: MenuNode[], rootMenuId: string) {
140
+ menuItems.forEach((menuItem) => {
141
+ if (menuItem instanceof SubmenuItemNode) {
142
+ const submenuItems = [] as MenuNode[];
143
+
144
+ const submenuId = menuItem.item.submenu;
145
+ if (!this._menus.has(submenuId)) {
146
+ const menus = this.registerDispose(this.menuService.createMenu(submenuId, this.contextKeyService));
147
+ this._menus.set(submenuId, menus);
148
+ this.registerDispose(
149
+ menus.onDidChange(() => {
150
+ // 通知外部 顶层 menuId 下所有结构变了, 需要重新生成数据结构
151
+ this._onMenuChange.fire(rootMenuId);
152
+ }),
153
+ );
154
+ }
155
+
156
+ const menuToDispose = this.menuService.createMenu(submenuId, this.contextKeyService);
157
+ const menuNodes = generateMergedCtxMenu({ menus: menuToDispose, ...this.config });
158
+ this._traverseMenuItems(menuNodes, submenuItems, rootMenuId);
159
+
160
+ // 挂载 submenu 下的子级 menuItems
161
+ menuItem.children = submenuItems;
162
+
163
+ menuToPopulate.push(menuItem);
164
+ menuToDispose.dispose();
165
+ } else {
166
+ menuToPopulate.push(menuItem);
167
+ }
168
+ });
169
+ }
170
+
171
+ public dispose() {
172
+ this._menusListener.forEach((disposable) => disposable.dispose());
173
+ this._menusListener.clear();
174
+ this._menus.forEach((menu) => menu.dispose());
175
+ this._menus.clear();
176
+ super.dispose();
177
+ }
178
+
179
+ // 获得已分好组并合并的 MenuNodes 列表
180
+ public getMergedMenuNodes() {
181
+ return mergeTupleMenuNodeResult(this._menuItems);
182
+ }
183
+
184
+ // 获得已分好组的 MenuNodes 列表
185
+ public getGroupedMenuNodes() {
186
+ return this._menuItems;
187
+ }
188
+ }
@@ -0,0 +1,10 @@
1
+ export * from './base';
2
+ export * from './menu-service';
3
+ export * from './menu-util';
4
+ export * from './menu-id';
5
+ export * from './menu.interface';
6
+ export * from './menu.contrib.interface';
7
+ export * from './renderer/ctxmenu/base';
8
+ export * from './menubar-service';
9
+ export * from './ctxmenu-service';
10
+ export * from './toolbar-action.service';