@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,251 @@
1
+ import stripJsonComments from 'strip-json-comments';
2
+
3
+ /**
4
+ * JSON对象的值为引用类型的类型
5
+ */
6
+ export type JSONPrimitive = boolean | number | string | null;
7
+
8
+ /**
9
+ * JSON对象值类型
10
+ */
11
+ export type JSONValue = JSONPrimitive | JSONObject | JSONArray;
12
+
13
+ /**
14
+ * JSON Object值类型
15
+ */
16
+ export interface JSONObject {
17
+ [key: string]: JSONValue;
18
+ }
19
+
20
+ /**
21
+ * JSON Array值类型
22
+ */
23
+ export type JSONArray = Array<JSONValue>;
24
+
25
+ /**
26
+ * 只读的JSON Object类型
27
+ */
28
+ export interface ReadonlyJSONObject {
29
+ readonly [key: string]: ReadonlyJSONValue;
30
+ }
31
+
32
+ /**
33
+ * 只读的JSON Array类型
34
+ */
35
+ export type ReadonlyJSONArray = ReadonlyArray<ReadonlyJSONValue>;
36
+
37
+ /**
38
+ * 只读的JSON值类型
39
+ */
40
+ export type ReadonlyJSONValue = JSONPrimitive | ReadonlyJSONObject | ReadonlyJSONArray;
41
+
42
+ /**
43
+ * JSON 工具方法空间
44
+ */
45
+ export namespace JSONUtils {
46
+ /**
47
+ * 冻结的空JSON Object
48
+ */
49
+ export const emptyObject = Object.freeze({}) as ReadonlyJSONObject;
50
+
51
+ /**
52
+ * 冻结的空JSON Array
53
+ */
54
+ export const emptyArray = Object.freeze([]) as ReadonlyJSONArray;
55
+
56
+ /**
57
+ * 判断JSON是否为普通类型值,如JSONPrimitive
58
+ * @param value
59
+ */
60
+ export function isPrimitive(value: ReadonlyJSONValue): value is JSONPrimitive {
61
+ return value === null || typeof value === 'boolean' || typeof value === 'number' || typeof value === 'string';
62
+ }
63
+
64
+ /**
65
+ * 判断JSON值是否为Array
66
+ * @param value
67
+ */
68
+ export function isArray(value: JSONValue): value is JSONArray;
69
+ export function isArray(value: ReadonlyJSONValue): value is ReadonlyJSONArray;
70
+ export function isArray(value: ReadonlyJSONValue): boolean {
71
+ return Array.isArray(value);
72
+ }
73
+
74
+ /**
75
+ * 判断JSON值是否为Object.
76
+ * @param value
77
+ */
78
+ export function isObject(value: JSONValue): value is JSONObject;
79
+ export function isObject(value: ReadonlyJSONValue): value is ReadonlyJSONObject;
80
+ export function isObject(value: ReadonlyJSONValue): boolean {
81
+ return !isPrimitive(value) && !isArray(value);
82
+ }
83
+
84
+ /**
85
+ * 判断两个值是否深层相等
86
+ * @param first
87
+ * @param second
88
+ */
89
+ export function deepEqual(first: ReadonlyJSONValue, second: ReadonlyJSONValue): boolean {
90
+ if (first === second) {
91
+ return true;
92
+ }
93
+
94
+ if (isPrimitive(first) || isPrimitive(second)) {
95
+ return false;
96
+ }
97
+
98
+ const a1 = isArray(first);
99
+ const a2 = isArray(second);
100
+
101
+ if (a1 !== a2) {
102
+ return false;
103
+ }
104
+
105
+ if (a1 && a2) {
106
+ return deepArrayEqual(first as ReadonlyJSONArray, second as ReadonlyJSONArray);
107
+ }
108
+
109
+ return deepObjectEqual(first as ReadonlyJSONObject, second as ReadonlyJSONObject);
110
+ }
111
+
112
+ /**
113
+ * 深拷贝JSON值
114
+ * @param value
115
+ */
116
+ export function deepCopy<T extends ReadonlyJSONValue>(value: T): T {
117
+ if (isPrimitive(value)) {
118
+ return value;
119
+ }
120
+
121
+ if (isArray(value)) {
122
+ return deepArrayCopy(value);
123
+ }
124
+
125
+ return deepObjectCopy(value);
126
+ }
127
+
128
+ /**
129
+ * 对比两个数组类型的JSON是否深匹配
130
+ */
131
+ function deepArrayEqual(first: ReadonlyJSONArray, second: ReadonlyJSONArray): boolean {
132
+ if (first === second) {
133
+ return true;
134
+ }
135
+
136
+ if (first.length !== second.length) {
137
+ return false;
138
+ }
139
+
140
+ // Compare the values for equality.
141
+ for (let i = 0, n = first.length; i < n; ++i) {
142
+ if (!deepEqual(first[i], second[i])) {
143
+ return false;
144
+ }
145
+ }
146
+
147
+ // At this point, the arrays are equal.
148
+ return true;
149
+ }
150
+
151
+ /**
152
+ * 对比两个对象类型的JSON是否深匹配
153
+ */
154
+ function deepObjectEqual(first: ReadonlyJSONObject, second: ReadonlyJSONObject): boolean {
155
+ if (first === second) {
156
+ return true;
157
+ }
158
+
159
+ for (const key in first) {
160
+ if (!(key in second)) {
161
+ return false;
162
+ }
163
+ }
164
+
165
+ // Check for the second object's keys in the first object.
166
+ for (const key in second) {
167
+ if (!(key in first)) {
168
+ return false;
169
+ }
170
+ }
171
+
172
+ // Compare the values for equality.
173
+ for (const key in first) {
174
+ if (!deepEqual(first[key], second[key])) {
175
+ return false;
176
+ }
177
+ }
178
+
179
+ // At this point, the objects are equal.
180
+ return true;
181
+ }
182
+
183
+ /**
184
+ * 深拷贝Array类型的值
185
+ */
186
+ function deepArrayCopy(value: any): any {
187
+ const result = new Array<any>(value.length);
188
+ for (let i = 0, n = value.length; i < n; ++i) {
189
+ result[i] = deepCopy(value[i]);
190
+ }
191
+ return result;
192
+ }
193
+
194
+ /**
195
+ * 深拷贝Object类型的值
196
+ */
197
+ function deepObjectCopy(value: any): any {
198
+ const result: any = {};
199
+ // eslint-disable-next-line guard-for-in
200
+ for (const key in value) {
201
+ result[key] = deepCopy(value[key]);
202
+ }
203
+ return result;
204
+ }
205
+ }
206
+
207
+ export function parseWithComments<T>(content): T {
208
+ content = stripTrailingComma(stripJsonComments(content));
209
+ const res = JSON.parse(content);
210
+ return res;
211
+ }
212
+
213
+ export function stripTrailingComma(content: string) {
214
+ const subStrs: string[] = [];
215
+ let lastIndex = 0;
216
+ let inString = false;
217
+ let i = 0;
218
+ while (i < content.length) {
219
+ if (inString) {
220
+ if (content[i] === '"' && content[i - 1] !== '\\') {
221
+ inString = false;
222
+ }
223
+ } else {
224
+ if (content[i] === ',') {
225
+ // 跳过空白
226
+ const candidate = i;
227
+ while (content[i + 1] && isWhiteSpace(content[i + 1])) {
228
+ i++;
229
+ }
230
+ if (content[i + 1] === ']' || content[i + 1] === '}') {
231
+ subStrs.push(content.substring(lastIndex, candidate));
232
+ lastIndex = candidate + 1;
233
+ }
234
+ } else if (content[i] === '"') {
235
+ // 肯定是开始字符串
236
+ inString = true;
237
+ }
238
+ }
239
+ i++;
240
+ }
241
+ if (lastIndex > 0) {
242
+ subStrs.push(content.substr(lastIndex));
243
+ return subStrs.join('');
244
+ } else {
245
+ return content;
246
+ }
247
+ }
248
+
249
+ function isWhiteSpace(char) {
250
+ return char === ' ' || char === '\t' || char === '\n' || char === '\r';
251
+ }
@@ -0,0 +1,36 @@
1
+ import React, { CSSProperties } from 'react';
2
+
3
+ import { Icon } from '@opensumi/ide-components/lib/icon/icon';
4
+
5
+ const SEPERATOR = ' ';
6
+
7
+ export function transformLabelWithCodicon(
8
+ label: string,
9
+ iconStyles: CSSProperties = {},
10
+ transformer?: (str: string) => string | undefined,
11
+ ) {
12
+ const ICON_REGX = /\$\(([a-z.]+\/)?([a-z-]+)(~[a-z]+)?\)/gi;
13
+ const ICON_WITH_ANIMATE_REGX = /\$\(([a-z.]+\/)?([a-z-]+)~([a-z]+)\)/gi;
14
+ return label.split(SEPERATOR).map((e, index) => {
15
+ if (!transformer) {
16
+ return e;
17
+ }
18
+ const icon = transformer(e);
19
+ if (icon) {
20
+ return <Icon className={icon} style={iconStyles} key={`${index}-${icon}`} />;
21
+ } else if (ICON_REGX.test(e)) {
22
+ if (e.includes('~')) {
23
+ const [, , icon, animate] = ICON_WITH_ANIMATE_REGX.exec(e) || [];
24
+ if (animate && icon) {
25
+ return (
26
+ <Icon className={transformer(`$(${icon})`)} style={iconStyles} animate={animate} key={`${index}-${icon}`} />
27
+ );
28
+ }
29
+ }
30
+ const newStr = e.replaceAll(ICON_REGX, (e) => `${SEPERATOR}${e}${SEPERATOR}`);
31
+ return transformLabelWithCodicon(newStr, iconStyles, transformer);
32
+ } else {
33
+ return <span key={`${index}-${e}`}>{e}</span>;
34
+ }
35
+ });
36
+ }
@@ -0,0 +1,82 @@
1
+ /** ******************************************************************************
2
+ * Copyright (C) 2018 Red Hat, Inc. 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
+ // Some code copied and modified from https://github.com/eclipse-theia/theia/tree/v1.14.0/packages/core/src/browser/label-parser.ts
17
+
18
+ export interface LabelIcon {
19
+ name: string;
20
+ owner?: string;
21
+ animation?: string;
22
+ }
23
+
24
+ export namespace LabelIcon {
25
+ export function is(val: object): val is LabelIcon {
26
+ return 'name' in val;
27
+ }
28
+ }
29
+
30
+ export type LabelPart = string | LabelIcon;
31
+
32
+ export function parseLabel(text: string): LabelPart[] {
33
+ const parserArray: LabelPart[] = [];
34
+ let arrPointer = 0;
35
+ let potentialIcon = '';
36
+
37
+ for (let idx = 0; idx < text.length; idx++) {
38
+ const char = text.charAt(idx);
39
+ parserArray[arrPointer] = parserArray[arrPointer] || '';
40
+ if (potentialIcon === '') {
41
+ if (char === '$') {
42
+ potentialIcon += char;
43
+ } else {
44
+ parserArray[arrPointer] += char;
45
+ }
46
+ } else if (potentialIcon === '$') {
47
+ if (char === '(') {
48
+ potentialIcon += char;
49
+ } else {
50
+ parserArray[arrPointer] += potentialIcon + char;
51
+ potentialIcon = '';
52
+ }
53
+ } else {
54
+ if (char === ')') {
55
+ const iconClassArr = potentialIcon.substring(2, potentialIcon.length).split('~');
56
+ let name = iconClassArr[0];
57
+ let owner: string | undefined;
58
+ if (name) {
59
+ const index = name.indexOf('/');
60
+ if (index !== -1) {
61
+ owner = name.substring(0, index);
62
+ name = name.substring(index + 1);
63
+ }
64
+ }
65
+ if (parserArray[arrPointer] !== '') {
66
+ arrPointer++;
67
+ }
68
+ parserArray[arrPointer] = { name, owner, animation: iconClassArr[1] };
69
+ arrPointer++;
70
+ potentialIcon = '';
71
+ } else {
72
+ potentialIcon += char;
73
+ }
74
+ }
75
+ }
76
+
77
+ if (potentialIcon !== '') {
78
+ parserArray[arrPointer] += potentialIcon;
79
+ }
80
+
81
+ return parserArray;
82
+ }
@@ -0,0 +1,118 @@
1
+ import _debounce from 'lodash/debounce';
2
+ import { useState, useEffect, DependencyList } from 'react';
3
+
4
+ import { Disposable, DisposableStore, IDisposable } from '@opensumi/ide-core-common';
5
+
6
+ import { MenuNode } from '../menu/next/base';
7
+ import { generateInlineActions } from '../menu/next/menu-util';
8
+ import { IMenu, IMenuSeparator, IContextMenu } from '../menu/next/menu.interface';
9
+ import { PreferenceService } from '../preferences/types';
10
+ import { useInjectable } from '../react-hooks/injectable-hooks';
11
+
12
+ export function useDebounce(value, delay) {
13
+ const [denouncedValue, setDenouncedValue] = useState(value);
14
+
15
+ useEffect(() => {
16
+ const handler = setTimeout(() => {
17
+ setDenouncedValue(value);
18
+ }, delay);
19
+
20
+ return () => {
21
+ clearTimeout(handler);
22
+ };
23
+ }, [value, delay]);
24
+
25
+ return denouncedValue;
26
+ }
27
+
28
+ export function useDisposable(callback: () => IDisposable | IDisposable[], deps: DependencyList = []) {
29
+ useEffect(() => {
30
+ const disposableStore = new DisposableStore();
31
+ const disposables = callback();
32
+ if (Array.isArray(disposables)) {
33
+ disposables.forEach((disposable) => {
34
+ disposableStore.add(disposable);
35
+ });
36
+ } else {
37
+ disposableStore.add(disposables);
38
+ }
39
+
40
+ return () => {
41
+ disposableStore.dispose();
42
+ };
43
+ }, deps);
44
+ }
45
+
46
+ export function useMenus(
47
+ menus: IMenu,
48
+ separator?: IMenuSeparator,
49
+ args?: any[],
50
+ // 防止 menu 快速变化
51
+ debounce?: { delay: number; maxWait?: number },
52
+ ) {
53
+ const [menuConfig, setMenuConfig] = useState<[MenuNode[], MenuNode[]]>([[], []]);
54
+
55
+ useDisposable(() => {
56
+ let updateMenuConfig = () => {
57
+ const result = generateInlineActions({
58
+ menus,
59
+ separator,
60
+ args,
61
+ });
62
+
63
+ setMenuConfig(result);
64
+ };
65
+
66
+ if (debounce) {
67
+ updateMenuConfig = _debounce(updateMenuConfig, debounce.delay, { maxWait: debounce.maxWait });
68
+ }
69
+
70
+ // initialize
71
+ updateMenuConfig();
72
+
73
+ return [
74
+ menus.onDidChange(() => {
75
+ updateMenuConfig();
76
+ }),
77
+ ];
78
+ }, [menus, args]);
79
+
80
+ return menuConfig;
81
+ }
82
+
83
+ export function useContextMenus(menus: IContextMenu) {
84
+ const [menuConfig, setMenuConfig] = useState<[MenuNode[], MenuNode[]]>([[], []]);
85
+ useDisposable(() => {
86
+ updateMenuConfig(menus);
87
+
88
+ function updateMenuConfig(menuArg: IContextMenu) {
89
+ const result = menuArg.getGroupedMenuNodes();
90
+ setMenuConfig(result);
91
+ }
92
+
93
+ return [
94
+ menus.onDidChange(() => {
95
+ updateMenuConfig(menus);
96
+ }),
97
+ ];
98
+ }, [menus]);
99
+
100
+ return menuConfig;
101
+ }
102
+
103
+ export function usePreference<T>(key: string, defaultValue: T) {
104
+ const preferenceService: PreferenceService = useInjectable(PreferenceService);
105
+ const [value, setValue] = useState<T>(preferenceService.get<T>(key, defaultValue) ?? defaultValue);
106
+
107
+ useEffect(() => {
108
+ const disposer = new Disposable(
109
+ preferenceService.onSpecificPreferenceChange(key, (change) => {
110
+ setValue(change.newValue);
111
+ }),
112
+ );
113
+ return () => {
114
+ disposer.dispose();
115
+ };
116
+ }, []);
117
+ return value;
118
+ }
@@ -0,0 +1 @@
1
+ export * from './variable';
@@ -0,0 +1,84 @@
1
+ import { Injectable } from '@opensumi/di';
2
+ import { URI, IDisposable, Disposable, DisposableCollection, MaybePromise } from '@opensumi/ide-core-common';
3
+
4
+ export type TVariableResolve = string | undefined | { [x: string]: string | undefined };
5
+ export interface Variable {
6
+ /**
7
+ * 变量名,也作为唯一标识使用
8
+ */
9
+ readonly name: string;
10
+
11
+ /**
12
+ * 描述信息
13
+ */
14
+ readonly description?: string;
15
+
16
+ /**
17
+ * 处理返回值
18
+ */
19
+ resolve(context?: URI): MaybePromise<TVariableResolve>;
20
+ }
21
+
22
+ export const VariableContribution = Symbol('VariableContribution');
23
+
24
+ export interface VariableContribution {
25
+ registerVariables(variables: VariableRegistry): void;
26
+ }
27
+
28
+ export const VariableRegistry = Symbol('VariableRegistry');
29
+
30
+ export interface VariableRegistry {
31
+ registerVariable(variable: Variable): IDisposable;
32
+ getVariables(): Variable[];
33
+ getVariable(name: string): Variable | undefined;
34
+ registerVariables(variables: Variable[]): IDisposable[];
35
+ }
36
+
37
+ @Injectable()
38
+ export class VariableRegistryImpl implements IDisposable {
39
+ protected readonly variables: Map<string, Variable> = new Map();
40
+ protected readonly toDispose = new DisposableCollection();
41
+
42
+ dispose(): void {
43
+ this.toDispose.dispose();
44
+ }
45
+
46
+ /**
47
+ * 为给定的变量名注册处理函数
48
+ * 忽略已处理的变量
49
+ */
50
+ registerVariable(variable: Variable): IDisposable {
51
+ if (this.variables.has(variable.name)) {
52
+ // eslint-disable-next-line no-console
53
+ console.warn(`A variables with name ${variable.name} is already registered.`);
54
+ return Disposable.NULL;
55
+ }
56
+ this.variables.set(variable.name, variable);
57
+ const disposable = {
58
+ dispose: () => this.variables.delete(variable.name),
59
+ };
60
+ this.toDispose.push(disposable);
61
+ return disposable;
62
+ }
63
+
64
+ /**
65
+ * 返回所有已注册的变量
66
+ */
67
+ getVariables(): Variable[] {
68
+ return [...this.variables.values()];
69
+ }
70
+
71
+ /**
72
+ * 通过名称获取变量
73
+ */
74
+ getVariable(name: string): Variable | undefined {
75
+ return this.variables.get(name);
76
+ }
77
+
78
+ /**
79
+ * 注册多个变量
80
+ */
81
+ registerVariables(variables: Variable[]): IDisposable[] {
82
+ return variables.map((v) => this.registerVariable(v));
83
+ }
84
+ }
@@ -0,0 +1,34 @@
1
+ import { URI } from '@opensumi/ide-core-common';
2
+
3
+ export const IWindowService = Symbol('WindowService');
4
+
5
+ export interface NewWindowOptions {
6
+ readonly external?: boolean;
7
+ }
8
+
9
+ export interface IOpenWorkspaceOption {
10
+ newWindow?: boolean;
11
+ }
12
+
13
+ export interface IWindowService {
14
+ /**
15
+ * 打开新的window窗口
16
+ * @param {string} url
17
+ * @param {NewWindowOptions} [options]
18
+ * @returns {(Window | undefined)}
19
+ * @memberof WindowService
20
+ */
21
+ openNewWindow(url: string, options?: NewWindowOptions): Window | undefined;
22
+
23
+ openWorkspace(workspace?: URI, options?: IOpenWorkspaceOption): void;
24
+
25
+ close(): void;
26
+
27
+ maximize(): void;
28
+
29
+ unmaximize(): void;
30
+
31
+ fullscreen(): void;
32
+
33
+ minimize(): void;
34
+ }
@@ -0,0 +1,100 @@
1
+ import { Injectable, Autowired, INJECTOR_TOKEN, Injector } from '@opensumi/di';
2
+ import { URI } from '@opensumi/ide-core-common';
3
+ import { IElectronMainLifeCycleService, IElectronMainUIService } from '@opensumi/ide-core-common/lib/electron';
4
+
5
+ import { AppConfig } from '../react-providers/config-provider';
6
+ import { IExternalUriService } from '../services';
7
+ import { electronEnv } from '../utils/electron';
8
+
9
+ import { IWindowService, IOpenWorkspaceOption, NewWindowOptions } from '.';
10
+
11
+ @Injectable()
12
+ export class WindowService implements IWindowService {
13
+ @Autowired(INJECTOR_TOKEN)
14
+ private readonly injector: Injector;
15
+
16
+ @Autowired(AppConfig)
17
+ private readonly appConfig: AppConfig;
18
+
19
+ openNewWindow(url: string, options?: NewWindowOptions): Window | undefined {
20
+ if (this.appConfig.isElectronRenderer) {
21
+ // Electron 环境下使用 shell.openExternal 方法打开外部 Uri
22
+ const electronMainUIService: IElectronMainUIService = this.injector.get(IElectronMainUIService);
23
+ // TODO: 由于 electron 下没有打开外部的警告(静默打开),此处直接 openExternal 可能会存在一定的安全隐患
24
+ // 需要给用户添加一点提示。 或者这个也可以统一做到 OpenerService 里面。
25
+ electronMainUIService.openExternal(url);
26
+ return undefined;
27
+ } else {
28
+ if (options?.external) {
29
+ const externalUriService = this.injector.get(IExternalUriService);
30
+ url = externalUriService.resolveExternalUri(new URI(url)).toString(true);
31
+ }
32
+ const newWindow = window.open(url);
33
+ if (newWindow === null) {
34
+ throw new Error('Cannot open a new window for URL: ' + url);
35
+ }
36
+ return newWindow;
37
+ }
38
+ }
39
+
40
+ openWorkspace(workspace: URI, options: IOpenWorkspaceOption = {}): void {
41
+ if (this.appConfig.isElectronRenderer) {
42
+ const electronMainLifecycle: IElectronMainLifeCycleService = this.injector.get(IElectronMainLifeCycleService);
43
+ if (options.newWindow) {
44
+ electronMainLifecycle.openWorkspace(workspace.toString());
45
+ } else {
46
+ electronMainLifecycle.openWorkspace(workspace.toString(), {
47
+ windowId: electronEnv.currentWindowId,
48
+ replace: true,
49
+ });
50
+ }
51
+ } else {
52
+ throw new Error('Method not implemented.');
53
+ }
54
+ }
55
+
56
+ close(): void {
57
+ if (this.appConfig.isElectronRenderer) {
58
+ // 防止 node 进程被先关闭掉,导致再也无法关闭
59
+ window.close();
60
+ } else {
61
+ throw new Error('Method not implemented.');
62
+ }
63
+ }
64
+
65
+ maximize(): void {
66
+ if (this.appConfig.isElectronRenderer) {
67
+ const electronMainLifecycle: IElectronMainLifeCycleService = this.injector.get(IElectronMainLifeCycleService);
68
+ electronMainLifecycle.maximizeWindow(electronEnv.currentWindowId);
69
+ } else {
70
+ throw new Error('Method not implemented.');
71
+ }
72
+ }
73
+
74
+ unmaximize(): void {
75
+ if (this.appConfig.isElectronRenderer) {
76
+ const electronMainLifecycle: IElectronMainLifeCycleService = this.injector.get(IElectronMainLifeCycleService);
77
+ electronMainLifecycle.unmaximizeWindow(electronEnv.currentWindowId);
78
+ } else {
79
+ throw new Error('Method not implemented.');
80
+ }
81
+ }
82
+
83
+ fullscreen(): void {
84
+ if (this.appConfig.isElectronRenderer) {
85
+ const electronMainLifecycle: IElectronMainLifeCycleService = this.injector.get(IElectronMainLifeCycleService);
86
+ electronMainLifecycle.fullscreenWindow(electronEnv.currentWindowId);
87
+ } else {
88
+ throw new Error('Method not implemented.');
89
+ }
90
+ }
91
+
92
+ minimize(): void {
93
+ if (this.appConfig.isElectronRenderer) {
94
+ const electronMainLifecycle: IElectronMainLifeCycleService = this.injector.get(IElectronMainLifeCycleService);
95
+ electronMainLifecycle.minimizeWindow(electronEnv.currentWindowId);
96
+ } else {
97
+ throw new Error('Method not implemented.');
98
+ }
99
+ }
100
+ }