@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,386 @@
1
+ import classnames from 'classnames';
2
+
3
+ import { Autowired, Injectable } from '@opensumi/di';
4
+ import {
5
+ URI,
6
+ Emitter,
7
+ IDisposable,
8
+ arrays,
9
+ Event,
10
+ WithEventBus,
11
+ BasicEvent,
12
+ Disposable,
13
+ LRUMap,
14
+ } from '@opensumi/ide-core-common';
15
+ import { ILanguageService } from '@opensumi/monaco-editor-core/esm/vs/editor/common/languages/language';
16
+ import { IModelService } from '@opensumi/monaco-editor-core/esm/vs/editor/common/services/model';
17
+ import * as monaco from '@opensumi/monaco-editor-core/esm/vs/editor/editor.api';
18
+ import { StandaloneServices } from '@opensumi/monaco-editor-core/esm/vs/editor/standalone/browser/standaloneServices';
19
+
20
+ import { getIcon } from '../style/icon/icon';
21
+
22
+ const { addElement } = arrays;
23
+
24
+ /**
25
+ * Data URI related helpers.
26
+ */
27
+ export namespace DataUri {
28
+ export const META_DATA_LABEL = 'label';
29
+ export const META_DATA_DESCRIPTION = 'description';
30
+ export const META_DATA_SIZE = 'size';
31
+ export const META_DATA_MIME = 'mime';
32
+
33
+ export function parseMetaData(dataUri: monaco.Uri): Map<string, string> {
34
+ const metadata = new Map<string, string>();
35
+ const uriPath = dataUri.path;
36
+ // Given a URI of: data:image/png;size:2313;label:SomeLabel;description:SomeDescription;base64,77+9UE5...
37
+ // the metadata is: size:2313;label:SomeLabel;description:SomeDescription
38
+ const meta = uriPath.substring(uriPath.indexOf(';') + 1, uriPath.lastIndexOf(';'));
39
+ meta.split(';').forEach((property) => {
40
+ const [key, value] = property.split(':');
41
+ if (key && value) {
42
+ metadata.set(key, value);
43
+ }
44
+ });
45
+
46
+ // Given a URI of: data:image/png;size:2313;label:SomeLabel;description:SomeDescription;base64,77+9UE5...
47
+ // the mime is: image/png
48
+ const mime = uriPath.substring(0, uriPath.indexOf(';'));
49
+ if (mime) {
50
+ metadata.set(META_DATA_MIME, mime);
51
+ }
52
+
53
+ return metadata;
54
+ }
55
+ }
56
+
57
+ export interface ILabelProvider {
58
+ /**
59
+ * 判断该Contribution是否能处理该类型,返回权重
60
+ */
61
+ canHandle(element: URI, options?: ILabelOptions): number;
62
+
63
+ /**
64
+ * 根据URI返回Icon样式.
65
+ */
66
+ getIcon?(element: URI, options?: ILabelOptions): string;
67
+
68
+ /**
69
+ * 返回短名称.
70
+ */
71
+ getName?(element: URI): string;
72
+
73
+ /**
74
+ * 返回长名称.
75
+ */
76
+ getLongName?(element: URI): string;
77
+
78
+ /**
79
+ * 通知使用方发生了变更
80
+ */
81
+ onDidChange?: Event<URI>;
82
+ }
83
+
84
+ export interface ILabelOptions {
85
+ isDirectory?: boolean;
86
+ isOpenedDirectory?: boolean;
87
+ isSymbolicLink?: boolean;
88
+ }
89
+
90
+ export function serializeLabelOptions(options?: ILabelOptions): string {
91
+ if (!options) {
92
+ return 'default';
93
+ } else {
94
+ return [
95
+ options.isDirectory ? '0' : '1',
96
+ options.isOpenedDirectory ? '0' : '1',
97
+ options.isSymbolicLink ? '0' : '1',
98
+ ].join('');
99
+ }
100
+ }
101
+
102
+ export function deserializeLabelOptions(key: string): ILabelOptions | undefined {
103
+ if (key === 'default') {
104
+ return undefined;
105
+ } else {
106
+ return {
107
+ isDirectory: key[0] === '0',
108
+ isOpenedDirectory: key[1] === '0',
109
+ isSymbolicLink: key[2] === '0',
110
+ };
111
+ }
112
+ }
113
+
114
+ @Injectable()
115
+ export class DefaultUriLabelProvider extends Disposable implements ILabelProvider {
116
+ private _onDidChange = this.registerDispose(new Emitter<URI>());
117
+
118
+ public onDidChange = this._onDidChange.event;
119
+
120
+ public canHandle(uri: object, options?: ILabelOptions): number {
121
+ if (uri instanceof URI) {
122
+ return 1;
123
+ }
124
+ return 0;
125
+ }
126
+
127
+ public getIcon(uri: URI, options?: ILabelOptions): string {
128
+ const { iconClass, onDidChange } = getIconClass(uri, options);
129
+ if (onDidChange) {
130
+ const disposer = onDidChange(() => {
131
+ this._onDidChange.fire(uri);
132
+ disposer.dispose();
133
+ });
134
+ this.addDispose(disposer);
135
+ }
136
+ return iconClass || getIcon('ellipsis');
137
+ }
138
+
139
+ public getName(uri: URI): string {
140
+ return uri.displayName;
141
+ }
142
+
143
+ public getLongName(uri: URI): string {
144
+ return uri.path.toString();
145
+ }
146
+ }
147
+
148
+ interface ICachedLabelProvider {
149
+ [option: string]: ILabelProvider | undefined;
150
+ }
151
+
152
+ @Injectable()
153
+ export class LabelService extends WithEventBus {
154
+ @Autowired()
155
+ public defaultLabelProvider: DefaultUriLabelProvider;
156
+
157
+ private providers: ILabelProvider[] = [];
158
+
159
+ private cachedProviderMap: Map<string, ICachedLabelProvider> = new LRUMap<string, ICachedLabelProvider>(1000, 500);
160
+
161
+ private onDidChangeEmitter: Emitter<URI> = new Emitter();
162
+
163
+ constructor() {
164
+ super();
165
+ this.registerLabelProvider(this.defaultLabelProvider);
166
+ }
167
+
168
+ get onDidChange() {
169
+ return this.onDidChangeEmitter.event;
170
+ }
171
+
172
+ private getProviderForUri(uri: URI, options?: ILabelOptions): ILabelProvider | undefined {
173
+ const uriKey = uri.toString();
174
+ if (!this.cachedProviderMap.has(uriKey)) {
175
+ this.cachedProviderMap.set(uriKey, {});
176
+ }
177
+ const cached = this.cachedProviderMap.get(uriKey)!;
178
+ const optionKey = serializeLabelOptions(options);
179
+ if (cached[optionKey]) {
180
+ return cached[optionKey];
181
+ } else {
182
+ let candidate: ILabelProvider | undefined;
183
+ let currentWeight = -1;
184
+ for (const provider of this.providers) {
185
+ const weight = provider.canHandle(uri, options);
186
+ if (weight > currentWeight) {
187
+ candidate = provider;
188
+ currentWeight = weight;
189
+ }
190
+ }
191
+ cached[optionKey] = candidate;
192
+ return candidate;
193
+ }
194
+ }
195
+
196
+ public registerLabelProvider(provider: ILabelProvider): IDisposable {
197
+ const currentProvided = Array.from(this.cachedProviderMap.entries());
198
+ this.cachedProviderMap.clear();
199
+ const disposer = new Disposable();
200
+ if (provider.onDidChange) {
201
+ disposer.addDispose(
202
+ provider.onDidChange((uri) => {
203
+ this.onDidChangeEmitter.fire(uri);
204
+ this.cachedProviderMap.delete(uri.toString());
205
+ }),
206
+ );
207
+ }
208
+ disposer.addDispose(addElement(this.providers, provider, true));
209
+ disposer.addDispose({
210
+ dispose: () => {
211
+ this.cachedProviderMap.clear();
212
+ },
213
+ });
214
+ /**
215
+ * 对于已经提供过 icon label的,如果发生改变, 通知一遍已经改变
216
+ */
217
+ currentProvided.forEach(([uriString, prev]) => {
218
+ const uri = new URI(uriString);
219
+ for (const key of Object.keys(prev)) {
220
+ const options = deserializeLabelOptions(key);
221
+ const newProvider = this.getProviderForUri(uri, options);
222
+ if (newProvider !== prev[key]) {
223
+ this.onDidChangeEmitter.fire(uri);
224
+ return;
225
+ }
226
+ }
227
+ });
228
+
229
+ return disposer;
230
+ }
231
+
232
+ public getIcon(uri: URI, options?: ILabelOptions): string {
233
+ const provider = this.getProviderForUri(uri, options);
234
+ if (provider) {
235
+ return provider.getIcon!(uri, options);
236
+ } else {
237
+ return '';
238
+ }
239
+ }
240
+
241
+ public getName(uri: URI): string {
242
+ const provider = this.getProviderForUri(uri);
243
+ if (provider) {
244
+ return provider.getName!(uri);
245
+ } else {
246
+ return '';
247
+ }
248
+ }
249
+
250
+ public getLongName(uri: URI): string {
251
+ const provider = this.getProviderForUri(uri);
252
+ if (provider) {
253
+ return provider.getLongName!(uri);
254
+ } else {
255
+ return '';
256
+ }
257
+ }
258
+ }
259
+
260
+ let modeService: any;
261
+ let modelService: any;
262
+ let languageService: any;
263
+ const getIconClass = (
264
+ resource: URI,
265
+ options?: ILabelOptions,
266
+ ): {
267
+ iconClass: string;
268
+ onDidChange?: Event<void>;
269
+ } => {
270
+ const classes = options && options.isDirectory ? ['folder-icon'] : ['file-icon'];
271
+ let name: string | undefined;
272
+ // 获取资源的路径和名称,data-uri单独处理
273
+ if (resource.scheme === 'data') {
274
+ const metadata = DataUri.parseMetaData(monaco.Uri.file(resource.toString()));
275
+ name = metadata.get(DataUri.META_DATA_LABEL);
276
+ } else {
277
+ name = cssEscape(basenameOrAuthority(resource).toLowerCase());
278
+ }
279
+
280
+ let _onDidChange: Emitter<void> | undefined;
281
+ // 文件夹图标
282
+ if (options && options.isDirectory) {
283
+ classes.push(`${name}-name-folder-icon`);
284
+ } else {
285
+ // 文件图标
286
+ // Name & Extension(s)
287
+ if (name) {
288
+ classes.push(`${name}-name-file-icon`);
289
+ const dotSegments = name.split('.');
290
+ for (let i = 1; i < dotSegments.length; i++) {
291
+ classes.push(`${dotSegments.slice(i).join('.')}-ext-file-icon`); // add each combination of all found extensions if more than one
292
+ }
293
+ classes.push('ext-file-icon'); // extra segment to increase file-ext score
294
+ }
295
+ // Language Mode探测
296
+ if (!modeService) {
297
+ // modeService = StandaloneServices.modeService.get();
298
+ }
299
+ if (!languageService) {
300
+ languageService = StandaloneServices.get(ILanguageService);
301
+ }
302
+ if (!modelService) {
303
+ modelService = StandaloneServices.get(IModelService);
304
+ }
305
+ const detectedModeId = detectModeId(
306
+ modelService,
307
+ languageService,
308
+ monaco.Uri.file(resource.withoutQuery().toString()),
309
+ );
310
+ if (detectedModeId) {
311
+ classes.push(`${cssEscape(detectedModeId)}-lang-file-icon`);
312
+ } else {
313
+ _onDidChange = new Emitter<void>();
314
+ languageService.onDidEncounterLanguage(() => {
315
+ if (detectModeId(modelService, languageService, monaco.Uri.file(resource.withoutQuery().toString()))) {
316
+ _onDidChange?.fire();
317
+ _onDidChange?.dispose();
318
+ }
319
+ });
320
+ }
321
+ }
322
+ // 统一的图标类
323
+ classes.push('icon-label');
324
+ return {
325
+ iconClass: classnames(classes),
326
+ // 对于首次没找到的,添加一个检测新语言注册的 change 事件
327
+ onDidChange: _onDidChange?.event,
328
+ };
329
+ };
330
+
331
+ export function cssEscape(str: string): string {
332
+ return str.replace(/[\11\12\14\15\40]/g, '/'); // HTML class names can not contain certain whitespace characters, use / instead, which doesn't exist in file names.
333
+ }
334
+
335
+ export function basenameOrAuthority(resource: URI) {
336
+ return resource.path.base || resource.authority;
337
+ }
338
+
339
+ export function detectModeId(
340
+ modelService: IModelService,
341
+ languageService: ILanguageService,
342
+ resource: monaco.Uri,
343
+ ): string | null {
344
+ if (!resource) {
345
+ return null; // we need a resource at least
346
+ }
347
+
348
+ let modeId: string | null = null;
349
+
350
+ // Data URI: check for encoded metadata
351
+ if (resource.scheme === 'data') {
352
+ const metadata = DataUri.parseMetaData(resource);
353
+ const mime = metadata.get(DataUri.META_DATA_MIME);
354
+
355
+ if (mime) {
356
+ modeId = languageService.getLanguageIdByMimeType(mime);
357
+ }
358
+ } else {
359
+ const model = modelService.getModel(resource);
360
+ if (model) {
361
+ modeId = model.getLanguageId();
362
+ }
363
+ }
364
+
365
+ // only take if the mode is specific (aka no just plain text)
366
+ if (modeId && modeId !== 'plaintext') {
367
+ return modeId;
368
+ }
369
+
370
+ // otherwise fallback to path based detection
371
+ // return modeService.getModeIdByFilepathOrFirstLine(resource);
372
+ const guessLanguageId = languageService.guessLanguageIdByFilepathOrFirstLine(resource);
373
+ // 相关 issue: https://github.com/microsoft/vscode/commit/2959fcde6aa9ff2058ad13cef8a5265ddb5f58a4#diff-7dd3b615572806b4d2210a9e7b32e1ae3714bc7b5fb201e437edaa8b372ce1aaR188
374
+ return guessLanguageId === 'unknown' ? null : guessLanguageId;
375
+ }
376
+
377
+ export function getLanguageIdFromMonaco(uri: URI) {
378
+ languageService = StandaloneServices.get(ILanguageService);
379
+ modelService = StandaloneServices.get(IModelService);
380
+ return detectModeId(modelService, languageService, monaco.Uri.parse(uri.toString()));
381
+ }
382
+
383
+ /**
384
+ * labelService所处理的label或者icon变更的事件
385
+ */
386
+ export class ResourceLabelOrIconChangedEvent extends BasicEvent<URI> {}
@@ -0,0 +1,108 @@
1
+ import { IMarkdownString, IThemeColor, StatusBarHoverCommand } from '@opensumi/ide-core-common';
2
+ import { IDisposable } from '@opensumi/ide-core-common';
3
+
4
+ import { IMenu } from '../menu/next';
5
+
6
+ export const IStatusBarService = Symbol('IStatusBarService');
7
+
8
+ export interface IStatusBarService {
9
+ getBackgroundColor(): string | undefined;
10
+ getColor(): string | undefined;
11
+ setBackgroundColor(color?: string): void;
12
+ setColor(color?: string): void;
13
+ addElement(entryId: string, entry: StatusBarEntry): StatusBarEntryAccessor;
14
+ setElement(entryId: string, fields: object): void;
15
+ removeElement(entryId: string): void;
16
+ /**
17
+ * 设置状态栏元素显隐
18
+ * @param entryId
19
+ */
20
+ toggleElement(entryId: string): void;
21
+ contextMenu: IMenu;
22
+ leftEntries: StatusBarEntry[];
23
+ rightEntries: StatusBarEntry[];
24
+ }
25
+
26
+ export interface StatusBarHoverContent {
27
+ title: string;
28
+ name?: string;
29
+ command?: StatusBarHoverCommand;
30
+ }
31
+
32
+ export interface StatusBarEntry {
33
+ /**
34
+ * 状态栏元素唯一 ID,如果由插件进程生成则为随机
35
+ */
36
+ entryId?: string;
37
+ /**
38
+ * 状态栏可读 id
39
+ * 上层可指定,会设置在元素 id 上,若不存在则使用 entryId
40
+ * 一个插件注册的状态栏元素 id 相同
41
+ */
42
+ id?: string;
43
+ /**
44
+ * 状态栏显示文案
45
+ * 可以通过 text 设置图标
46
+ * $(iconClassName) :text
47
+ */
48
+ text?: string;
49
+ /**
50
+ * 当前菜单显示名称
51
+ * 标识当前状态栏组件 contextmenu 显示的名称,如果没有使用 text 代替
52
+ */
53
+ name?: string;
54
+ alignment: StatusBarAlignment;
55
+ color?: IThemeColor | string;
56
+ backgroundColor?: IThemeColor | string;
57
+ className?: string;
58
+ tooltip?: string | IMarkdownString;
59
+ command?: string;
60
+ arguments?: any[];
61
+ priority?: number;
62
+ iconClass?: string;
63
+ ariaLabel?: string;
64
+ role?: string;
65
+ /**
66
+ * 是否默认展示,可以通过右键菜单控制
67
+ */
68
+ hidden?: boolean;
69
+ /**
70
+ * 鼠标移上去 Content 的内容
71
+ */
72
+ hoverContents?: StatusBarHoverContent[];
73
+ onClick?: (e: any) => void;
74
+ }
75
+
76
+ export interface StatusBarEntryAccessor extends IDisposable {
77
+ /**
78
+ * Allows to update an existing status bar entry.
79
+ */
80
+ update(properties: StatusBarEntry): void;
81
+ }
82
+
83
+ export enum StatusBarAlignment {
84
+ LEFT,
85
+ RIGHT,
86
+ }
87
+
88
+ export namespace StatusBarCommand {
89
+ export const changeColor = {
90
+ id: 'statusbar.changeColor',
91
+ };
92
+
93
+ export const changeBackgroundColor = {
94
+ id: 'statusbar.changeBackgroundColor',
95
+ };
96
+
97
+ export const addElement = {
98
+ id: 'statusbar.addElement',
99
+ };
100
+
101
+ export const toggleElement = {
102
+ id: 'statusbar.toggleElement',
103
+ };
104
+ }
105
+
106
+ export interface StatusBarState {
107
+ hidden: boolean;
108
+ }
@@ -0,0 +1,201 @@
1
+ import { Autowired, Injectable, Optional } from '@opensumi/di';
2
+ import { isObject, isUndefinedOrNull, runWhenIdle } from '@opensumi/ide-core-common';
3
+
4
+ import { Logger } from '../logger';
5
+ import { AppConfig } from '../react-providers/index';
6
+
7
+ export const GLOBAL_BROWSER_STORAGE_PREFIX = 'global';
8
+ export const SCOPED_BROWSER_STORAGE_PREFIX = 'scoped';
9
+
10
+ export const StorageService = Symbol('IStorageService');
11
+ /**
12
+ * StorageService用于提供给插件或模块进行session级别的数据存储能力
13
+ */
14
+ export interface StorageService {
15
+ /**
16
+ * 值设置
17
+ */
18
+ setData<T>(key: string, data: T): void;
19
+ setData<T>(key: string, data: T): Promise<void> | void;
20
+
21
+ /**
22
+ * 获取值
23
+ */
24
+ getData<T>(key: string, defaultValue: T): Promise<T>;
25
+ getData<T>(key: string, defaultValue: T): T;
26
+ getData<T>(key: string): Promise<T | undefined>;
27
+ getData<T>(key: string): T | undefined;
28
+
29
+ /**
30
+ * 删除值
31
+ */
32
+ removeData(key: string): Promise<void> | void;
33
+ removeData(key: string): void;
34
+ }
35
+
36
+ @Injectable()
37
+ abstract class BaseBrowserStorageService implements StorageService {
38
+ // 默认对于 14 天内无使用的 LocalStorage 数据进行清理
39
+ private static EXPIRES_DAY = 14;
40
+ private static EXPIRES_LIMITE_NUMBER = 20;
41
+
42
+ @Autowired()
43
+ private logger: Logger;
44
+
45
+ private _enableExpired = false;
46
+
47
+ /**
48
+ * global/scoped 浏览器层存储定义
49
+ * @param key {string} 存储的唯一 key
50
+ */
51
+ abstract prefix(key: string): string;
52
+
53
+ constructor() {
54
+ this.init();
55
+ }
56
+
57
+ public setExpires(value: boolean) {
58
+ this._enableExpired = value;
59
+ }
60
+
61
+ private get storage(): Storage {
62
+ return window.localStorage;
63
+ }
64
+
65
+ private init() {
66
+ if (typeof window !== 'undefined' && window.localStorage) {
67
+ runWhenIdle(() => {
68
+ this.clearLocalStorage();
69
+ this.testLocalStorage();
70
+ });
71
+ } else {
72
+ this.logger.warn("The browser doesn't support localStorage. state will not be persisted across sessions.");
73
+ }
74
+ }
75
+
76
+ public setData<T>(key: string, data?: T): void {
77
+ if (data !== undefined) {
78
+ try {
79
+ if (isObject(data) && this._enableExpired) {
80
+ // 追加数据过期时间
81
+ data['expires'] = Date.now() + BaseBrowserStorageService.EXPIRES_DAY * 24 * 60 * 60 * 1000;
82
+ }
83
+ this.storage.setItem(this.prefix(key), JSON.stringify(data));
84
+ } catch (e) {
85
+ this.removeExpiringStorage();
86
+ }
87
+ } else {
88
+ this.removeData(key);
89
+ }
90
+ }
91
+
92
+ public getData<T>(key: string, defaultValue?: T): T | undefined {
93
+ const result = this.storage.getItem(this.prefix(key));
94
+ if (isUndefinedOrNull(result)) {
95
+ return defaultValue;
96
+ }
97
+ try {
98
+ return JSON.parse(result);
99
+ } catch (e) {
100
+ this.logger.error(`storage getDate error: ${e}, use defaultValue as result.`);
101
+ }
102
+ return defaultValue;
103
+ }
104
+
105
+ public removeData<T>(key: string): void {
106
+ this.storage.removeItem(this.prefix(key));
107
+ }
108
+
109
+ /**
110
+ * 验证是否还有空间生育用来存储另一个工作区配置
111
+ * 如果超出限制大小,提示用户进行清理
112
+ *
113
+ * @private
114
+ * @memberof LocalStorageService
115
+ */
116
+ private testLocalStorage() {
117
+ const keyTest = this.prefix('Test');
118
+ try {
119
+ this.storage.setItem(keyTest, JSON.stringify(new Array(60000)));
120
+ } catch (error) {
121
+ this.removeExpiringStorage();
122
+ } finally {
123
+ this.storage.removeItem(keyTest);
124
+ }
125
+ }
126
+
127
+ /**
128
+ * 清理过期的本地存储数据
129
+ */
130
+ private clearLocalStorage() {
131
+ const allKeys = Object.keys(this.storage);
132
+ for (const key of allKeys) {
133
+ try {
134
+ const data = JSON.parse(this.storage[key]);
135
+ if (isObject(data) && data.expires) {
136
+ if (data.expires < Date.now()) {
137
+ this.storage.removeItem(key);
138
+ }
139
+ }
140
+ } catch (e) {
141
+ continue;
142
+ }
143
+ }
144
+ }
145
+
146
+ /**
147
+ * 移除即将过期的数据,为后续数据腾出存储空间
148
+ */
149
+ private async removeExpiringStorage(): Promise<void> {
150
+ const allKeys = Object.keys(this.storage);
151
+ const sortedKeys = allKeys
152
+ .filter((key) => this.storage[key]?.indexOf('expires') > 0)
153
+ .sort((a, b) => {
154
+ try {
155
+ const expiresA = JSON.parse(this.storage[a])?.expires;
156
+ const expiresB = JSON.parse(this.storage[b])?.expires;
157
+ return expiresA - expiresB;
158
+ } catch (e) {
159
+ return 0;
160
+ }
161
+ });
162
+ // 移除即将过期的 EXPIRES_LIMITE_NUMBER 个数据
163
+ for (const key of sortedKeys.slice(0, BaseBrowserStorageService.EXPIRES_LIMITE_NUMBER)) {
164
+ this.storage.removeItem(key);
165
+ }
166
+ }
167
+ }
168
+
169
+ /**
170
+ * @internal
171
+ * 全局的浏览器层存储
172
+ */
173
+ @Injectable()
174
+ export class GlobalBrowserStorageService extends BaseBrowserStorageService {
175
+ prefix(key: string): string {
176
+ return `${GLOBAL_BROWSER_STORAGE_PREFIX}:${key}`;
177
+ }
178
+ }
179
+
180
+ /**
181
+ * @internal
182
+ * scoped 浏览器层存储
183
+ */
184
+ @Injectable()
185
+ export class ScopedBrowserStorageService extends BaseBrowserStorageService {
186
+ @Autowired(AppConfig)
187
+ private appConfig: AppConfig;
188
+
189
+ private pathname = 'unknown';
190
+
191
+ constructor(@Optional() key: string) {
192
+ super();
193
+ this.pathname = key || this.appConfig.workspaceDir;
194
+ // 仅对局部 LocalStorage 设置过期时间
195
+ this.setExpires(true);
196
+ }
197
+
198
+ prefix(key: string): string {
199
+ return `${SCOPED_BROWSER_STORAGE_PREFIX}:${this.pathname}:${key}`;
200
+ }
201
+ }