@opensumi/ide-core-browser 2.21.8-rc-1670567192.0 → 2.21.8

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 (317) hide show
  1. package/lib/components/actions/index.d.ts.map +1 -1
  2. package/lib/components/actions/index.js +22 -2
  3. package/lib/components/actions/index.js.map +1 -1
  4. package/lib/components/tree/tree.module.less +0 -1
  5. package/lib/contextkey/testing.d.ts +0 -1
  6. package/lib/contextkey/testing.d.ts.map +1 -1
  7. package/lib/contextkey/testing.js +1 -2
  8. package/lib/contextkey/testing.js.map +1 -1
  9. package/lib/menu/next/menu.contrib.interface.d.ts +2 -3
  10. package/lib/menu/next/menu.contrib.interface.d.ts.map +1 -1
  11. package/lib/menu/next/menu.contrib.interface.js.map +1 -1
  12. package/lib/preferences/preference-configurations.js +1 -1
  13. package/lib/preferences/preference-configurations.js.map +1 -1
  14. package/lib/react-providers/config-provider.d.ts +0 -4
  15. package/lib/react-providers/config-provider.d.ts.map +1 -1
  16. package/lib/react-providers/config-provider.js.map +1 -1
  17. package/lib/services/storage-service.d.ts.map +1 -1
  18. package/lib/services/storage-service.js +1 -7
  19. package/lib/services/storage-service.js.map +1 -1
  20. package/lib/utils/label.d.ts.map +1 -1
  21. package/lib/utils/label.js +9 -16
  22. package/lib/utils/label.js.map +1 -1
  23. package/package.json +6 -7
  24. package/src/application/application-state-service.ts +0 -54
  25. package/src/application/application.service.ts +0 -51
  26. package/src/application/index.ts +0 -2
  27. package/src/authentication/authentication.contribution.ts +0 -35
  28. package/src/authentication/authentication.service.ts +0 -517
  29. package/src/bootstrap/app.ts +0 -745
  30. package/src/bootstrap/app.view.tsx +0 -88
  31. package/src/bootstrap/connection.ts +0 -116
  32. package/src/bootstrap/index.ts +0 -3
  33. package/src/bootstrap/inner-providers.ts +0 -297
  34. package/src/bootstrap/lifecycle.service.ts +0 -19
  35. package/src/browser-module.ts +0 -24
  36. package/src/common/common.command.ts +0 -977
  37. package/src/common/common.contribution.ts +0 -343
  38. package/src/common/common.define.ts +0 -55
  39. package/src/common/common.module.ts +0 -33
  40. package/src/common/common.storage.ts +0 -22
  41. package/src/common/container-id.ts +0 -12
  42. package/src/common/index.ts +0 -4
  43. package/src/components/actions/index.tsx +0 -486
  44. package/src/components/actions/placements.ts +0 -47
  45. package/src/components/actions/styles.module.less +0 -144
  46. package/src/components/badge/index.tsx +0 -1
  47. package/src/components/index.ts +0 -26
  48. package/src/components/layout/box-panel.tsx +0 -88
  49. package/src/components/layout/default-layout.tsx +0 -61
  50. package/src/components/layout/index.ts +0 -4
  51. package/src/components/layout/layout.ts +0 -80
  52. package/src/components/layout/split-panel.service.ts +0 -56
  53. package/src/components/layout/split-panel.tsx +0 -296
  54. package/src/components/layout/styles.module.less +0 -21
  55. package/src/components/loading/index.ts +0 -1
  56. package/src/components/loading/loading.less +0 -14
  57. package/src/components/loading/loading.view.tsx +0 -7
  58. package/src/components/loading/media/loading-dark.svg +0 -52
  59. package/src/components/loading/media/loading-hc.svg +0 -52
  60. package/src/components/loading/media/loading.svg +0 -52
  61. package/src/components/popover/styles.module.less +0 -81
  62. package/src/components/portal/index.tsx +0 -13
  63. package/src/components/progressbar/index.tsx +0 -16
  64. package/src/components/progressbar/styles.module.less +0 -31
  65. package/src/components/recycle-tree/index.ts +0 -1
  66. package/src/components/recycle-tree/recycle-tree.view.tsx +0 -368
  67. package/src/components/resize/resize.module.less +0 -78
  68. package/src/components/resize/resize.tsx +0 -663
  69. package/src/components/scroll/index.tsx +0 -386
  70. package/src/components/scroll/scroll.module.less +0 -108
  71. package/src/components/scrollbar/index.ts +0 -1
  72. package/src/components/scrollbar/scrollbar.less +0 -36
  73. package/src/components/scrollbar/scrollbar.view.ts +0 -8
  74. package/src/components/select/index.tsx +0 -12
  75. package/src/components/select/styles.less +0 -6
  76. package/src/components/tree/index.ts +0 -3
  77. package/src/components/tree/tree-node.view.tsx +0 -546
  78. package/src/components/tree/tree.module.less +0 -297
  79. package/src/components/tree/tree.view.tsx +0 -486
  80. package/src/context-key.ts +0 -48
  81. package/src/contextkey/dialog.ts +0 -3
  82. package/src/contextkey/explorer.ts +0 -26
  83. package/src/contextkey/index.ts +0 -6
  84. package/src/contextkey/outline.ts +0 -4
  85. package/src/contextkey/resource.ts +0 -61
  86. package/src/contextkey/terminal.ts +0 -7
  87. package/src/contextkey/testing.ts +0 -9
  88. package/src/contextkey/workspace.ts +0 -7
  89. package/src/core-preferences.ts +0 -318
  90. package/src/dom/index.ts +0 -176
  91. package/src/encoding-registry.ts +0 -83
  92. package/src/extensions/extensions-point.service.ts +0 -78
  93. package/src/extensions/index.ts +0 -3
  94. package/src/extensions/schema/browserViews.ts +0 -96
  95. package/src/extensions/schema/menu.ts +0 -245
  96. package/src/extensions/schema/opensumiExtensionPackageSchema.ts +0 -12
  97. package/src/extensions/schema/toolbar.ts +0 -338
  98. package/src/extensions/schema/vscodeExtensionPackageSchema.ts +0 -330
  99. package/src/fs/index.ts +0 -12
  100. package/src/hash-calculate/hash-calculate.contribution.ts +0 -19
  101. package/src/index.ts +0 -42
  102. package/src/keybinding/index.ts +0 -1
  103. package/src/keybinding/keybinding.ts +0 -908
  104. package/src/keyboard/index.ts +0 -3
  105. package/src/keyboard/keyboard-layout-provider.ts +0 -412
  106. package/src/keyboard/keyboard-layout-service.ts +0 -449
  107. package/src/keyboard/keys.ts +0 -748
  108. package/src/keyboard/layouts/_.contribution.ts +0 -24
  109. package/src/keyboard/layouts/cz.win.ts +0 -168
  110. package/src/keyboard/layouts/de-swiss.win.ts +0 -168
  111. package/src/keyboard/layouts/de.darwin.ts +0 -131
  112. package/src/keyboard/layouts/de.linux.ts +0 -186
  113. package/src/keyboard/layouts/de.win.ts +0 -168
  114. package/src/keyboard/layouts/dk.win.ts +0 -168
  115. package/src/keyboard/layouts/dvorak.darwin.ts +0 -131
  116. package/src/keyboard/layouts/en-belgian.win.ts +0 -168
  117. package/src/keyboard/layouts/en-ext.darwin.ts +0 -131
  118. package/src/keyboard/layouts/en-in.win.ts +0 -168
  119. package/src/keyboard/layouts/en-intl.darwin.ts +0 -131
  120. package/src/keyboard/layouts/en-intl.win.ts +0 -168
  121. package/src/keyboard/layouts/en-uk.darwin.ts +0 -131
  122. package/src/keyboard/layouts/en-uk.win.ts +0 -168
  123. package/src/keyboard/layouts/en.darwin.ts +0 -139
  124. package/src/keyboard/layouts/en.linux.ts +0 -186
  125. package/src/keyboard/layouts/en.win.ts +0 -173
  126. package/src/keyboard/layouts/es-latin.win.ts +0 -168
  127. package/src/keyboard/layouts/es.darwin.ts +0 -131
  128. package/src/keyboard/layouts/es.linux.ts +0 -186
  129. package/src/keyboard/layouts/es.win.ts +0 -168
  130. package/src/keyboard/layouts/fr.darwin.ts +0 -131
  131. package/src/keyboard/layouts/fr.linux.ts +0 -186
  132. package/src/keyboard/layouts/fr.win.ts +0 -168
  133. package/src/keyboard/layouts/hu.win.ts +0 -168
  134. package/src/keyboard/layouts/it.darwin.ts +0 -131
  135. package/src/keyboard/layouts/it.win.ts +0 -168
  136. package/src/keyboard/layouts/jp-roman.darwin.ts +0 -131
  137. package/src/keyboard/layouts/jp.darwin.ts +0 -131
  138. package/src/keyboard/layouts/ko.darwin.ts +0 -131
  139. package/src/keyboard/layouts/layout.contribution.darwin.ts +0 -23
  140. package/src/keyboard/layouts/layout.contribution.linux.ts +0 -12
  141. package/src/keyboard/layouts/layout.contribution.ts +0 -9
  142. package/src/keyboard/layouts/layout.contribution.win.ts +0 -29
  143. package/src/keyboard/layouts/no.win.ts +0 -168
  144. package/src/keyboard/layouts/pl.darwin.ts +0 -131
  145. package/src/keyboard/layouts/pl.win.ts +0 -168
  146. package/src/keyboard/layouts/pt-br.win.ts +0 -169
  147. package/src/keyboard/layouts/pt.darwin.ts +0 -131
  148. package/src/keyboard/layouts/pt.win.ts +0 -168
  149. package/src/keyboard/layouts/ru.darwin.ts +0 -131
  150. package/src/keyboard/layouts/ru.linux.ts +0 -186
  151. package/src/keyboard/layouts/ru.win.ts +0 -168
  152. package/src/keyboard/layouts/sv.darwin.ts +0 -131
  153. package/src/keyboard/layouts/sv.win.ts +0 -168
  154. package/src/keyboard/layouts/thai.win.ts +0 -168
  155. package/src/keyboard/layouts/tr.win.ts +0 -168
  156. package/src/keyboard/layouts/zh-hans.darwin.ts +0 -131
  157. package/src/layout/accordion/tab-bar-toolbar.tsx +0 -59
  158. package/src/layout/accordion/view-context-key.registry.ts +0 -34
  159. package/src/layout/constants.ts +0 -7
  160. package/src/layout/index.ts +0 -5
  161. package/src/layout/layout-hooks.ts +0 -68
  162. package/src/layout/layout-state.ts +0 -107
  163. package/src/layout/layout.interface.ts +0 -101
  164. package/src/layout/layout.ts +0 -80
  165. package/src/layout/view-id.ts +0 -18
  166. package/src/logger/browser-logger.ts +0 -51
  167. package/src/logger/index.ts +0 -1
  168. package/src/markdown/index.tsx +0 -62
  169. package/src/menu/next/base.ts +0 -513
  170. package/src/menu/next/ctxmenu-service.ts +0 -188
  171. package/src/menu/next/index.ts +0 -10
  172. package/src/menu/next/menu-id.ts +0 -86
  173. package/src/menu/next/menu-service.ts +0 -252
  174. package/src/menu/next/menu-util.ts +0 -77
  175. package/src/menu/next/menu.contrib.interface.ts +0 -79
  176. package/src/menu/next/menu.interface.ts +0 -253
  177. package/src/menu/next/menubar-service.ts +0 -211
  178. package/src/menu/next/renderer/ctxmenu/base.ts +0 -18
  179. package/src/menu/next/renderer/ctxmenu/browser.ts +0 -45
  180. package/src/menu/next/renderer/ctxmenu/electron.ts +0 -207
  181. package/src/menu/next/toolbar-action.service.ts +0 -132
  182. package/src/monaco/index.ts +0 -128
  183. package/src/opener/command-opener.ts +0 -42
  184. package/src/opener/default-opener.ts +0 -31
  185. package/src/opener/http-opener.ts +0 -25
  186. package/src/opener/index.ts +0 -19
  187. package/src/opener/opener.contribution.ts +0 -57
  188. package/src/opener/opener.service.ts +0 -66
  189. package/src/preferences/early-preferences.ts +0 -117
  190. package/src/preferences/index.ts +0 -9
  191. package/src/preferences/preference-configurations.ts +0 -77
  192. package/src/preferences/preference-contribution.ts +0 -401
  193. package/src/preferences/preference-provider.ts +0 -414
  194. package/src/preferences/preference-proxy.ts +0 -292
  195. package/src/preferences/preference-scope.ts +0 -3
  196. package/src/preferences/preference-service.ts +0 -571
  197. package/src/preferences/settings.ts +0 -53
  198. package/src/preferences/types.ts +0 -111
  199. package/src/progress/index.ts +0 -58
  200. package/src/progress/progress-bar.tsx +0 -22
  201. package/src/progress/progress-indicator.ts +0 -90
  202. package/src/progress/progress.module.less +0 -46
  203. package/src/progress/progress.service.tsx +0 -429
  204. package/src/quick-open/index.ts +0 -655
  205. package/src/quick-open/recent-files.ts +0 -68
  206. package/src/raw-context-key.ts +0 -116
  207. package/src/react-hooks/event.tsx +0 -80
  208. package/src/react-hooks/hot-key.tsx +0 -58
  209. package/src/react-hooks/index.ts +0 -3
  210. package/src/react-hooks/injectable-hooks.tsx +0 -35
  211. package/src/react-hooks/portal-hooks.tsx +0 -38
  212. package/src/react-providers/config-provider.tsx +0 -263
  213. package/src/react-providers/index.tsx +0 -2
  214. package/src/react-providers/slot.module.less +0 -19
  215. package/src/react-providers/slot.tsx +0 -242
  216. package/src/services/clipboard.service.ts +0 -97
  217. package/src/services/credentials-service.ts +0 -91
  218. package/src/services/crypto-service.ts +0 -23
  219. package/src/services/external-uri.service.ts +0 -68
  220. package/src/services/index.ts +0 -7
  221. package/src/services/label-service.ts +0 -386
  222. package/src/services/status-bar-service.ts +0 -108
  223. package/src/services/storage-service.ts +0 -197
  224. package/src/style/codicons/README.md +0 -22
  225. package/src/style/codicons/codicon-animations.css +0 -15
  226. package/src/style/codicons/generator.js +0 -15
  227. package/src/style/entry.less +0 -25
  228. package/src/style/icon/fileicons/file-default.svg +0 -1
  229. package/src/style/icon/fileicons/folder-default.svg +0 -1
  230. package/src/style/icon/fileicons.less +0 -20
  231. package/src/style/icon/icon.ts +0 -543
  232. package/src/style/icon/ide-iconfont.ts +0 -13
  233. package/src/style/icon/index.less +0 -54
  234. package/src/style/icon/seti.woff +0 -0
  235. package/src/style/icon/symbol-icons/boolean-dark.svg +0 -3
  236. package/src/style/icon/symbol-icons/boolean-light.svg +0 -3
  237. package/src/style/icon/symbol-icons/class-dark.svg +0 -3
  238. package/src/style/icon/symbol-icons/class-light.svg +0 -3
  239. package/src/style/icon/symbol-icons/constant-dark.svg +0 -4
  240. package/src/style/icon/symbol-icons/constant-light.svg +0 -4
  241. package/src/style/icon/symbol-icons/enumerator-dark.svg +0 -3
  242. package/src/style/icon/symbol-icons/enumerator-item-dark.svg +0 -3
  243. package/src/style/icon/symbol-icons/enumerator-item-light.svg +0 -3
  244. package/src/style/icon/symbol-icons/enumerator-light.svg +0 -3
  245. package/src/style/icon/symbol-icons/event-dark.svg +0 -3
  246. package/src/style/icon/symbol-icons/event-light.svg +0 -3
  247. package/src/style/icon/symbol-icons/field-dark.svg +0 -3
  248. package/src/style/icon/symbol-icons/field-light.svg +0 -3
  249. package/src/style/icon/symbol-icons/file-dark.svg +0 -3
  250. package/src/style/icon/symbol-icons/file-light.svg +0 -3
  251. package/src/style/icon/symbol-icons/indexer-dark.svg +0 -3
  252. package/src/style/icon/symbol-icons/indexer-light.svg +0 -3
  253. package/src/style/icon/symbol-icons/interface-dark.svg +0 -3
  254. package/src/style/icon/symbol-icons/interface-light.svg +0 -3
  255. package/src/style/icon/symbol-icons/keyword-dark.svg +0 -3
  256. package/src/style/icon/symbol-icons/keyword-light.svg +0 -3
  257. package/src/style/icon/symbol-icons/method-dark.svg +0 -3
  258. package/src/style/icon/symbol-icons/method-light.svg +0 -3
  259. package/src/style/icon/symbol-icons/namespace-dark.svg +0 -3
  260. package/src/style/icon/symbol-icons/namespace-light.svg +0 -3
  261. package/src/style/icon/symbol-icons/numeric-dark.svg +0 -3
  262. package/src/style/icon/symbol-icons/numeric-light.svg +0 -3
  263. package/src/style/icon/symbol-icons/operator-dark.svg +0 -3
  264. package/src/style/icon/symbol-icons/operator-light.svg +0 -3
  265. package/src/style/icon/symbol-icons/property-dark.svg +0 -3
  266. package/src/style/icon/symbol-icons/property-light.svg +0 -3
  267. package/src/style/icon/symbol-icons/snippet-dark.svg +0 -3
  268. package/src/style/icon/symbol-icons/snippet-light.svg +0 -3
  269. package/src/style/icon/symbol-icons/string-dark.svg +0 -3
  270. package/src/style/icon/symbol-icons/string-light.svg +0 -3
  271. package/src/style/icon/symbol-icons/structure-dark.svg +0 -3
  272. package/src/style/icon/symbol-icons/structure-light.svg +0 -3
  273. package/src/style/icon/symbol-icons/symbol-icons.css +0 -284
  274. package/src/style/icon/symbol-icons/template-dark.svg +0 -3
  275. package/src/style/icon/symbol-icons/template-light.svg +0 -3
  276. package/src/style/icon/symbol-icons/variable-dark.svg +0 -3
  277. package/src/style/icon/symbol-icons/variable-light.svg +0 -3
  278. package/src/style/icon.less +0 -8
  279. package/src/style/index.less +0 -14
  280. package/src/style/monaco-override.less +0 -116
  281. package/src/style/normalize.less +0 -92
  282. package/src/style/octicons/octicons-cdn.css +0 -720
  283. package/src/style/octicons/octicons.css +0 -714
  284. package/src/style/octicons/octicons.html +0 -1882
  285. package/src/style/octicons/octicons.svg +0 -582
  286. package/src/style/octicons/octicons.ttf +0 -0
  287. package/src/style/override.less +0 -97
  288. package/src/style/toolbar.less +0 -199
  289. package/src/style/utilities.less +0 -8
  290. package/src/style/variable.less +0 -8
  291. package/src/terminal/index.ts +0 -7
  292. package/src/toolbar/components/auto-complete.tsx +0 -0
  293. package/src/toolbar/components/button.tsx +0 -440
  294. package/src/toolbar/components/index.ts +0 -2
  295. package/src/toolbar/components/select.tsx +0 -189
  296. package/src/toolbar/index.ts +0 -3
  297. package/src/toolbar/toolbar.popover.registry.ts +0 -32
  298. package/src/toolbar/toolbar.registry.ts +0 -352
  299. package/src/toolbar/toolbar.tsx +0 -710
  300. package/src/toolbar/types.ts +0 -383
  301. package/src/tree/index.ts +0 -3
  302. package/src/tree/tree-expansion.ts +0 -25
  303. package/src/tree/tree-selection.ts +0 -89
  304. package/src/tree/tree.ts +0 -294
  305. package/src/utils/create-overlay.tsx +0 -53
  306. package/src/utils/electron.ts +0 -92
  307. package/src/utils/env.ts +0 -26
  308. package/src/utils/icon.ts +0 -13
  309. package/src/utils/index.ts +0 -7
  310. package/src/utils/json.ts +0 -251
  311. package/src/utils/label.tsx +0 -36
  312. package/src/utils/parse.ts +0 -72
  313. package/src/utils/react-hooks.ts +0 -118
  314. package/src/variable/index.ts +0 -1
  315. package/src/variable/variable.ts +0 -84
  316. package/src/window/index.ts +0 -34
  317. package/src/window/window.service.ts +0 -100
@@ -1,486 +0,0 @@
1
- import clsx from 'classnames';
2
- import React, { useCallback } from 'react';
3
-
4
- import { Button, CheckBox, Icon } from '@opensumi/ide-components';
5
- import { ClickParam, Menu } from '@opensumi/ide-components/lib/menu';
6
- import { isBoolean, strings } from '@opensumi/ide-core-common';
7
-
8
- import {
9
- MenuNode,
10
- ICtxMenuRenderer,
11
- SeparatorMenuItemNode,
12
- IContextMenu,
13
- IMenu,
14
- IMenuSeparator,
15
- MenuId,
16
- SubmenuItemNode,
17
- IMenuAction,
18
- ComponentMenuItemNode,
19
- AbstractMenuService,
20
- generateMergedCtxMenu,
21
- } from '../../menu/next';
22
- import { useInjectable } from '../../react-hooks';
23
- import { useMenus, useContextMenus, transformLabelWithCodicon } from '../../utils';
24
-
25
- import placements from './placements';
26
- import styles from './styles.module.less';
27
-
28
- const MenuAction: React.FC<{
29
- data: MenuNode;
30
- disabled?: boolean;
31
- hasSubmenu?: boolean;
32
- }> = ({ data, hasSubmenu, disabled }) => (
33
- // 这里遵循 native menu 的原则,保留一个 icon 位置
34
- <div className={clsx(styles.menuAction, { [styles.disabled]: disabled, [styles.checked]: data.checked })}>
35
- <div className={styles.icon}>{data.checked ? <Icon icon='check' /> : null}</div>
36
- <div className={styles.label}>{data.label ? strings.mnemonicButtonLabel(data.label, true) : ''}</div>
37
- <div className={styles.tip}>
38
- {data.keybinding ? <div className={styles.shortcut}>{data.keybinding}</div> : null}
39
- {hasSubmenu ? (
40
- <div className={styles.submenuIcon}>
41
- <Icon icon='right' />
42
- </div>
43
- ) : null}
44
- {!data.keybinding && !hasSubmenu && data.extraDesc && <div className={styles.extraDesc}>{data.extraDesc}</div>}
45
- </div>
46
- </div>
47
- );
48
- /**
49
- * 用于 context menu
50
- */
51
- export const MenuActionList: React.FC<{
52
- data: MenuNode[];
53
- afterClick?: (item: MenuNode) => void;
54
- context?: any[];
55
- }> = ({ data = [], context = [], afterClick }) => {
56
- if (!data.length) {
57
- return null;
58
- }
59
-
60
- const handleClick = React.useCallback(
61
- (params: ClickParam) => {
62
- const { key, item } = params;
63
- // do nothing when click separator/submenu node
64
- if ([SeparatorMenuItemNode.ID, SubmenuItemNode.ID].includes(key)) {
65
- return;
66
- }
67
-
68
- // hacky: read MenuNode from MenuItem.children.props
69
- const child = Array.isArray(item.props.children) ? item.props.children[0] : item.props.children;
70
- const menuItem = child.props.data as MenuNode;
71
- if (!menuItem) {
72
- return;
73
- }
74
-
75
- if (typeof menuItem.execute === 'function') {
76
- menuItem.execute(context);
77
- }
78
-
79
- if (typeof afterClick === 'function') {
80
- afterClick(menuItem);
81
- }
82
- },
83
- [data, context],
84
- );
85
-
86
- const recursiveRender = React.useCallback(
87
- (dataSource: MenuNode[], key?: string) =>
88
- dataSource.map((menuNode, index) => {
89
- if (menuNode.id === SeparatorMenuItemNode.ID) {
90
- return <Menu.Divider key={`divider-${index}`} className={styles.menuItemDivider} />;
91
- }
92
-
93
- if (menuNode.id === SubmenuItemNode.ID) {
94
- // 子菜单项为空时不渲染
95
- if (!Array.isArray(menuNode.children) || !menuNode.children.length) {
96
- return null;
97
- }
98
-
99
- return (
100
- <Menu.SubMenu
101
- key={`${(menuNode as SubmenuItemNode).submenuId}-${index}`}
102
- className={styles.submenuItem}
103
- popupClassName='kt-menu'
104
- title={<MenuAction hasSubmenu data={menuNode} />}
105
- >
106
- {recursiveRender(menuNode.children, menuNode.label)}
107
- </Menu.SubMenu>
108
- );
109
- }
110
-
111
- return (
112
- <Menu.Item
113
- id={`${menuNode.id}-${index}`}
114
- key={`${menuNode.id}-${key}-${index}`}
115
- className={styles.menuItem}
116
- disabled={menuNode.disabled}
117
- >
118
- <MenuAction data={menuNode} disabled={menuNode.disabled} />
119
- </Menu.Item>
120
- );
121
- }),
122
- [],
123
- );
124
-
125
- return (
126
- <Menu
127
- className='kt-menu'
128
- selectable={false}
129
- motion={{ motionLeave: false, motionEnter: false }}
130
- {...({ builtinPlacements: placements } as any)}
131
- onClick={handleClick}
132
- >
133
- {recursiveRender(data)}
134
- </Menu>
135
- );
136
- };
137
-
138
- const EllipsisWidget: React.FC<{
139
- type?: ActionListType;
140
- icon?: string;
141
- disabled?: boolean;
142
- onClick?: React.MouseEventHandler<HTMLElement>;
143
- }> = ({ type, icon, disabled, onClick }) => {
144
- if (type === 'icon') {
145
- return <Icon icon={icon || 'ellipsis'} className={styles.iconAction} onClick={onClick} />;
146
- }
147
- const props = {};
148
- if (isBoolean(disabled)) {
149
- props['disabled'] = disabled;
150
- }
151
-
152
- return (
153
- <Button size='small' type='secondary' className={styles.btnAction} onClick={onClick} {...props}>
154
- <Icon icon={icon || 'ellipsis'} />
155
- </Button>
156
- );
157
- };
158
-
159
- EllipsisWidget.displayName = 'EllipsisWidget';
160
-
161
- const InlineActionWidget: React.FC<
162
- {
163
- data: MenuNode;
164
- context?: any[];
165
- type?: ActionListType;
166
- afterClick?: () => void;
167
- iconService?: IMenubarIconService;
168
- } & React.HTMLAttributes<HTMLElement>
169
- > = React.memo(({ iconService, type = 'icon', data, context = [], className, afterClick, ...restProps }) => {
170
- const handleClick = React.useCallback(
171
- (event?: React.MouseEvent<HTMLElement>, ...extraArgs: any[]) => {
172
- if (event) {
173
- event.preventDefault();
174
- event.stopPropagation();
175
- }
176
- if (data.id === SubmenuItemNode.ID && event) {
177
- const anchor = { x: event.clientX, y: event.clientY };
178
- data.execute([anchor, ...context]);
179
- } else if (typeof data.execute === 'function') {
180
- data.execute([...context, ...extraArgs]);
181
- }
182
-
183
- if (typeof afterClick === 'function') {
184
- afterClick();
185
- }
186
- },
187
- [data, context],
188
- );
189
-
190
- const [title, label] = React.useMemo(() => {
191
- let title = data.tooltip || data.label;
192
- const label = data.label;
193
- if (data.keybinding) {
194
- title = `${title} (${data.keybinding})`;
195
- }
196
- return [title, label];
197
- }, [data]);
198
-
199
- const isSubmenuNode = data.id === SubmenuItemNode.ID;
200
-
201
- // Button 类型需要额外处理来自 MenuNode 上的类型
202
- if (type === 'icon' && !data.type) {
203
- return (
204
- <Button
205
- type={data.icon ? 'icon' : 'link'}
206
- className={clsx(styles.iconAction, className, {
207
- [styles.disabled]: data.disabled,
208
- [styles.submenuIconAction]: isSubmenuNode,
209
- })}
210
- title={title}
211
- iconClass={data.icon}
212
- onClick={handleClick}
213
- {...restProps}
214
- >
215
- {!data.icon && label /* 没有 icon 时渲染 label */}
216
- </Button>
217
- );
218
- }
219
-
220
- if (data.type === 'checkbox') {
221
- return (
222
- <CheckBox
223
- className={clsx(className, styles.btnAction)}
224
- disabled={data.disabled}
225
- label={data.label}
226
- title={title}
227
- checked={data.checked}
228
- onChange={(e) => handleClick(undefined, (e.target as HTMLInputElement).checked)}
229
- {...restProps}
230
- />
231
- );
232
- }
233
-
234
- return (
235
- <Button
236
- className={clsx(className, styles.btnAction)}
237
- disabled={data.disabled}
238
- onClick={handleClick}
239
- size='small'
240
- type={data.type}
241
- title={title}
242
- {...restProps}
243
- >
244
- {transformLabelWithCodicon(label, { margin: '0 3px' }, iconService?.fromString.bind(iconService))}
245
- {isSubmenuNode && <Icon icon='down' className='kt-button-secondary-more' />}
246
- </Button>
247
- );
248
- });
249
-
250
- InlineActionWidget.displayName = 'InlineAction';
251
-
252
- const CustomActionWidget: React.FC<{
253
- data: ComponentMenuItemNode;
254
- context?: any[];
255
- }> = ({ data, context }) => {
256
- const getExecuteArgs = React.useCallback(() => data.getExecuteArgs(context), [data, context]);
257
-
258
- return React.createElement(data.component, {
259
- getExecuteArgs,
260
- });
261
- };
262
-
263
- CustomActionWidget.displayName = 'CustomAction';
264
-
265
- type ActionListType = 'icon' | 'button';
266
-
267
- interface BaseActionListProps {
268
- /**
269
- * 顺序反转,满足 `...` aka `更多` 渲染到第一个
270
- */
271
- moreAtFirst?: boolean;
272
- /**
273
- * click handler 获取到的参数,长度为 0 - N 个
274
- */
275
- context?: any[];
276
- /**
277
- * reserve option 额外的 IMenuAction
278
- */
279
- extraNavActions?: IMenuAction[];
280
- /**
281
- * class name
282
- */
283
- className?: string;
284
- /**
285
- * menu 的类型, 默认为 icon
286
- * icon:显示为一排 icon 图标,图标带有 toggle 效果
287
- * button:显示为一排 button 按钮, 每个按钮可以自定义 Button#type, toggle 效果为 checkbox 组件
288
- */
289
- type?: ActionListType;
290
- /**
291
- * InlineAction 点击之后的回调
292
- */
293
- afterClick?: () => void;
294
-
295
- /**
296
- * 将 Nav MenuNode 和 More MenuNode 进行重新分组
297
- * 解决
298
- * * `editor/title` 下只展示 more menu
299
- * * `scm/input` 下只展示一个 nav menu 其他都进到 more menu
300
- */
301
- regroup?: (...args: [MenuNode[], MenuNode[]]) => [MenuNode[], MenuNode[]];
302
- }
303
-
304
- /**
305
- * 用于 scm/title or view/title or inline actions
306
- * 请不要直接使用 TitleActionList 组件,请使用 InlineActionBar/InlineMenubar 等组件
307
- * 目前仅给 tree view 使用,其不带 contextkey service change 事件监听
308
- */
309
- export const TitleActionList: React.FC<
310
- {
311
- menuId: string | MenuId;
312
- nav: MenuNode[];
313
- more?: MenuNode[];
314
- moreIcon?: string;
315
- className?: string;
316
- iconService?: IMenubarIconService;
317
- } & BaseActionListProps
318
- > = React.memo(
319
- ({
320
- /**
321
- * ActionListType 默认为 icon 类型
322
- * 所有没有增加 type 的 menu 都是 icon 类型
323
- */
324
- type = 'icon',
325
- nav = [],
326
- more = [],
327
- moreIcon,
328
- context = [],
329
- extraNavActions = [],
330
- moreAtFirst = false,
331
- className,
332
- afterClick,
333
- menuId,
334
- iconService,
335
- regroup = (...args: [MenuNode[], MenuNode[]]) => args,
336
- }) => {
337
- const ctxMenuRenderer = useInjectable<ICtxMenuRenderer>(ICtxMenuRenderer);
338
- const abstractMenuService = useInjectable<AbstractMenuService>(AbstractMenuService);
339
- const [primary, secondary] = regroup(nav, more);
340
- const handleShowMore = React.useCallback(
341
- (e: React.MouseEvent<HTMLElement>) => {
342
- e.preventDefault();
343
- e.stopPropagation();
344
- if (secondary) {
345
- ctxMenuRenderer.show({
346
- anchor: { x: e.clientX, y: e.clientY },
347
- // 合并结果
348
- menuNodes: secondary,
349
- args: context,
350
- onHide: afterClick,
351
- });
352
- }
353
- },
354
- [secondary, context],
355
- );
356
-
357
- if (primary.length === 0 && secondary.length === 0 && extraNavActions.length === 0) {
358
- return null;
359
- }
360
-
361
- const moreAction =
362
- secondary.length > 0 ? (
363
- <EllipsisWidget disabled={secondary[0].disabled} icon={moreIcon} type={type} onClick={handleShowMore} />
364
- ) : null;
365
-
366
- return (
367
- <div className={clsx([styles.titleActions, className])} data-menu-id={menuId}>
368
- {moreAtFirst && moreAction}
369
- {primary.map((item) => {
370
- if (item.id === ComponentMenuItemNode.ID) {
371
- return (
372
- <CustomActionWidget
373
- context={context}
374
- data={item as ComponentMenuItemNode}
375
- key={(item as ComponentMenuItemNode).nodeId}
376
- />
377
- );
378
- }
379
-
380
- if (item.id === SubmenuItemNode.ID) {
381
- const menus = abstractMenuService.createMenu((item as SubmenuItemNode).submenuId);
382
- const hasSubMenu = generateMergedCtxMenu({ menus }).length > 0;
383
- if (!hasSubMenu) {
384
- return;
385
- }
386
- }
387
-
388
- // submenu 使用 submenu-id 作为 id 唯一值
389
- const id = item.id === SubmenuItemNode.ID ? (item as SubmenuItemNode).submenuId : item.id;
390
- return (
391
- <InlineActionWidget
392
- id={id}
393
- key={id}
394
- className={clsx({ [styles.selected]: item.checked })}
395
- type={type}
396
- data={item}
397
- afterClick={afterClick}
398
- context={context}
399
- iconService={iconService}
400
- />
401
- );
402
- })}
403
- {Array.isArray(extraNavActions) && extraNavActions.length ? (
404
- <>
405
- {primary.length && <span className={styles.divider} />}
406
- {extraNavActions}
407
- </>
408
- ) : null}
409
- {!moreAtFirst && moreAction}
410
- </div>
411
- );
412
- },
413
- );
414
-
415
- TitleActionList.displayName = 'TitleActionList';
416
-
417
- type TupleContext<T, U, K, M> = M extends undefined
418
- ? K extends undefined
419
- ? U extends undefined
420
- ? T extends undefined
421
- ? undefined
422
- : [T]
423
- : [T, U]
424
- : [T, U, K]
425
- : [T, U, K, M];
426
-
427
- // 目前先不放出来 extraNavActions 保持 InlineActionBar 只有一个分组
428
- // 需要两个分组时考虑组合两个 InlineActionBar 组件使用
429
- interface InlineActionBarProps<T, U, K, M> extends Omit<BaseActionListProps, 'extraNavActions'> {
430
- context?: TupleContext<T, U, K, M>;
431
- menus: IMenu;
432
- separator?: IMenuSeparator;
433
- className?: string;
434
- debounce?: { delay: number; maxWait?: number };
435
- }
436
-
437
- interface IMenubarIconService {
438
- fromString: (iconString: string) => string | undefined;
439
- }
440
-
441
- export function InlineActionBar<T = undefined, U = undefined, K = undefined, M = undefined>(
442
- props: InlineActionBarProps<T, U, K, M>,
443
- ): React.ReactElement<InlineActionBarProps<T, U, K, M>> {
444
- const { menus, context, separator = 'navigation', debounce, ...restProps } = props;
445
- // 因为这里的 context 塞到 useMenus 之后会自动把参数加入到 MenuItem.execute 里面
446
- const [navMenu, moreMenu] = useMenus(menus, separator, context, debounce);
447
-
448
- // inline 菜单不取第二组,对应内容由关联 context menu 去渲染
449
- return (
450
- <TitleActionList menuId={menus.menuId} nav={navMenu} more={separator === 'inline' ? [] : moreMenu} {...restProps} />
451
- );
452
- }
453
-
454
- // 目前先不放出来 extraNavActions 保持 InlineActionBar 只有一个分组
455
- // 需要两个分组时考虑组合两个 InlineActionBar 组件使用
456
- interface InlineMenuBarProps<T, U, K, M> extends Omit<BaseActionListProps, 'extraNavActions'> {
457
- context?: TupleContext<T, U, K, M>;
458
- menus: IContextMenu;
459
- moreIcon?: string;
460
- separator?: IMenuSeparator;
461
- iconService?: IMenubarIconService;
462
- }
463
-
464
- // 后续考虑使用 IContextMenu, useContextMenus 和 InlineMenuBar 来替换掉老的 IMenu
465
- // 完成 InlineActionBar 的升级
466
- export function InlineMenuBar<T = undefined, U = undefined, K = undefined, M = undefined>(
467
- props: InlineMenuBarProps<T, U, K, M>,
468
- ): React.ReactElement<InlineMenuBarProps<T, U, K, M>> {
469
- const { iconService, menus, context, moreIcon, separator = 'navigation', ...restProps } = props;
470
- const [navMenu, moreMenu] = useContextMenus(menus);
471
-
472
- // inline 菜单不取第二组,对应内容由关联 context menu 去渲染
473
- return (
474
- <TitleActionList
475
- menuId={menus.menuId}
476
- nav={navMenu}
477
- more={separator === 'inline' ? [] : moreMenu}
478
- moreIcon={moreIcon}
479
- context={context}
480
- iconService={iconService}
481
- {...restProps}
482
- />
483
- );
484
- }
485
-
486
- InlineMenuBar.displayName = 'InlineMenuBar';
@@ -1,47 +0,0 @@
1
- const autoAdjustOverflow = {
2
- adjustX: 1,
3
- adjustY: 1,
4
- };
5
-
6
- const targetOffset = [0, 0];
7
-
8
- export const placements = {
9
- topLeft: {
10
- points: ['bl', 'tl'],
11
- overflow: autoAdjustOverflow,
12
- offset: [0, -4],
13
- targetOffset,
14
- },
15
- topCenter: {
16
- points: ['bc', 'tc'],
17
- overflow: autoAdjustOverflow,
18
- offset: [0, -4],
19
- targetOffset,
20
- },
21
- topRight: {
22
- points: ['br', 'tr'],
23
- overflow: autoAdjustOverflow,
24
- offset: [0, -4],
25
- targetOffset,
26
- },
27
- bottomLeft: {
28
- points: ['tl', 'bl'],
29
- overflow: autoAdjustOverflow,
30
- offset: [0, 4],
31
- targetOffset,
32
- },
33
- bottomCenter: {
34
- points: ['tc', 'bc'],
35
- overflow: autoAdjustOverflow,
36
- offset: [0, 4],
37
- targetOffset,
38
- },
39
- bottomRight: {
40
- points: ['tr', 'br'],
41
- overflow: autoAdjustOverflow,
42
- offset: [0, 4],
43
- targetOffset,
44
- },
45
- };
46
-
47
- export default placements;
@@ -1,144 +0,0 @@
1
- .icon,
2
- .submenuIcon {
3
- width: 12px;
4
- text-align: center;
5
- display: flex;
6
- justify-content: center;
7
- align-items: center;
8
- :global(.kt-icon) {
9
- color: var(--menu-foreground);
10
- }
11
- }
12
-
13
- .label {
14
- flex: 1;
15
- padding-left: 4px;
16
- padding-right: 16px;
17
- }
18
-
19
- .shortcut,
20
- .submenuIcon,
21
- .extraDesc {
22
- padding-right: 4px;
23
- }
24
-
25
- .extraDesc,
26
- .shortcut {
27
- justify-content: right;
28
- text-align: center;
29
- color: var(--kt-menu-descriptionForeground);
30
- }
31
-
32
- .menuAction {
33
- display: flex;
34
- justify-content: space-between;
35
- align-items: center;
36
- width: 100%;
37
- user-select: none;
38
-
39
- &.disabled {
40
- .shortcut {
41
- color: var(--kt-menu-disableForeground);
42
- }
43
- }
44
-
45
- &:not(.disabled):hover {
46
- .shortcut {
47
- color: var(--menu-selectionForeground);
48
- }
49
- }
50
-
51
- &:focus {
52
- .shortcut {
53
- color: var(--menu-selectionForeground);
54
- }
55
- }
56
- }
57
-
58
- .titleActions {
59
- display: flex;
60
- align-items: center;
61
- height: 100%;
62
- }
63
-
64
- .iconAction {
65
- cursor: pointer;
66
- color: var(--kt-actionbar-foreground);
67
- border: 1px solid transparent;
68
-
69
- &.disabled {
70
- color: var(--kt-actionbar-disableForeground);
71
- pointer-events: none;
72
- }
73
-
74
- &:not(.disabled):hover {
75
- border-radius: 4px;
76
- background-color: var(--kt-icon-hoverBackground);
77
- }
78
-
79
- &.selected {
80
- background-color: var(--kt-actionbar-selectionBackground);
81
- border-color: var(--kt-actionbar-selectionBorder);
82
- }
83
-
84
- :global(.kt-button) {
85
- padding: 0;
86
- }
87
- }
88
-
89
- .btnAction :global(.kt-icon) {
90
- color: inherit;
91
- }
92
-
93
- .btnAction + .btnAction,
94
- .btnAction + .iconAction,
95
- .iconAction + .btnAction,
96
- .iconAction + .iconAction {
97
- margin-left: 6px;
98
- overflow: hidden;
99
- text-overflow: ellipsis;
100
- white-space: nowrap;
101
- }
102
-
103
- .iconAction + .divider,
104
- .divider + .iconAction {
105
- margin-left: 8px;
106
- }
107
-
108
- .titleActions + .titleActions::before {
109
- content: ' ';
110
- display: block;
111
- margin: 0 6px;
112
- }
113
-
114
- // divider 存在于两个 InlineActionBar 组件之间,也存在与 group 之间
115
- .titleActions + .titleActions::before,
116
- .divider {
117
- background-color: var(--kt-actionbar-separatorBackground);
118
- width: 1px;
119
- height: 14px;
120
- }
121
-
122
- // 这里的 css 规则是为了合理展示 divider 元素/菜单分割符
123
- // .menuItemDivider {
124
- // display: none;
125
- // }
126
-
127
- // .menuItem + .menuItemDivider,
128
- // .submenuItem + .menuItemDivider {
129
- // display: block;
130
- // }
131
-
132
- .menuItemDivider:first-child,
133
- .menuItemDivider:last-child {
134
- display: none;
135
- }
136
-
137
- :global {
138
- // 菜单项增加滚动条
139
- .kt-menu {
140
- max-height: 75vh;
141
- overflow-x: hidden;
142
- overflow-y: auto;
143
- }
144
- }
@@ -1 +0,0 @@
1
- export { Badge as default } from '@opensumi/ide-components';
@@ -1,26 +0,0 @@
1
- export * from './scrollbar';
2
- export * from './recycle-tree';
3
- export * from './tree';
4
- export * from './portal';
5
- export * from './resize/resize';
6
- export * from './layout';
7
- export * from './scroll';
8
- export { Select as NativeSelect } from './select';
9
-
10
- /**
11
- * re exports from ide-components
12
- */
13
- export * from '@opensumi/ide-components/lib/button';
14
- export * from '@opensumi/ide-components/lib/badge';
15
- export * from '@opensumi/ide-components/lib/input';
16
- export * from '@opensumi/ide-components/lib/checkbox';
17
- export * from '@opensumi/ide-components/lib/select';
18
- export * from '@opensumi/ide-components/lib/tabs';
19
- export * from '@opensumi/ide-components/lib/overlay';
20
- export * from '@opensumi/ide-components/lib/dialog';
21
- export * from '@opensumi/ide-components/lib/icon';
22
- export * from '@opensumi/ide-components/lib/notification';
23
- export * from '@opensumi/ide-components/lib/popover';
24
- export * from '@opensumi/ide-components/lib/message';
25
- export * from '@opensumi/ide-components/lib/tooltip';
26
- export * from '@opensumi/ide-components/lib/recycle-list';