@opensumi/ide-main-layout 3.9.1-next-1748425167.0 → 3.9.1-next-1748425792.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 (71) hide show
  1. package/README.md +31 -30
  2. package/lib/browser/accordion/accordion.service.d.ts +1 -9
  3. package/lib/browser/accordion/accordion.service.d.ts.map +1 -1
  4. package/lib/browser/accordion/accordion.service.js +33 -120
  5. package/lib/browser/accordion/accordion.service.js.map +1 -1
  6. package/lib/browser/accordion/accordion.view.d.ts.map +1 -1
  7. package/lib/browser/accordion/accordion.view.js +1 -4
  8. package/lib/browser/accordion/accordion.view.js.map +1 -1
  9. package/lib/browser/accordion/section.view.d.ts.map +1 -1
  10. package/lib/browser/accordion/section.view.js +1 -1
  11. package/lib/browser/accordion/section.view.js.map +1 -1
  12. package/lib/browser/accordion/styles.module.less +0 -61
  13. package/lib/browser/default-config.d.ts.map +1 -1
  14. package/lib/browser/default-config.js +6 -7
  15. package/lib/browser/default-config.js.map +1 -1
  16. package/lib/browser/drop-area/drop-area.d.ts +2 -3
  17. package/lib/browser/drop-area/drop-area.d.ts.map +1 -1
  18. package/lib/browser/drop-area/drop-area.js +5 -8
  19. package/lib/browser/drop-area/drop-area.js.map +1 -1
  20. package/lib/browser/index.d.ts.map +1 -1
  21. package/lib/browser/index.js.map +1 -1
  22. package/lib/browser/layout.service.d.ts +0 -3
  23. package/lib/browser/layout.service.d.ts.map +1 -1
  24. package/lib/browser/layout.service.js +78 -120
  25. package/lib/browser/layout.service.js.map +1 -1
  26. package/lib/browser/main-layout.contribution.d.ts +18 -2
  27. package/lib/browser/main-layout.contribution.d.ts.map +1 -1
  28. package/lib/browser/main-layout.contribution.js +131 -75
  29. package/lib/browser/main-layout.contribution.js.map +1 -1
  30. package/lib/browser/tabbar/bar.view.d.ts.map +1 -1
  31. package/lib/browser/tabbar/bar.view.js +10 -5
  32. package/lib/browser/tabbar/bar.view.js.map +1 -1
  33. package/lib/browser/tabbar/panel.view.js +1 -1
  34. package/lib/browser/tabbar/panel.view.js.map +1 -1
  35. package/lib/browser/tabbar/renderer.view.js +4 -4
  36. package/lib/browser/tabbar/renderer.view.js.map +1 -1
  37. package/lib/browser/tabbar/tabbar.service.d.ts +19 -8
  38. package/lib/browser/tabbar/tabbar.service.d.ts.map +1 -1
  39. package/lib/browser/tabbar/tabbar.service.js +146 -37
  40. package/lib/browser/tabbar/tabbar.service.js.map +1 -1
  41. package/lib/common/main-layout.definition.d.ts +3 -4
  42. package/lib/common/main-layout.definition.d.ts.map +1 -1
  43. package/lib/common/main-layout.definition.js +4 -5
  44. package/lib/common/main-layout.definition.js.map +1 -1
  45. package/package.json +8 -8
  46. package/src/browser/accordion/accordion.service.ts +35 -152
  47. package/src/browser/accordion/accordion.view.tsx +2 -4
  48. package/src/browser/accordion/section.view.tsx +1 -5
  49. package/src/browser/accordion/styles.module.less +0 -61
  50. package/src/browser/default-config.ts +7 -8
  51. package/src/browser/drop-area/drop-area.tsx +3 -6
  52. package/src/browser/index.ts +0 -1
  53. package/src/browser/layout.service.ts +66 -134
  54. package/src/browser/main-layout.contribution.ts +138 -93
  55. package/src/browser/tabbar/bar.view.tsx +15 -9
  56. package/src/browser/tabbar/panel.view.tsx +2 -2
  57. package/src/browser/tabbar/renderer.view.tsx +4 -4
  58. package/src/browser/tabbar/tabbar.service.ts +161 -52
  59. package/src/common/main-layout.definition.ts +4 -6
  60. package/lib/browser/command.d.ts +0 -29
  61. package/lib/browser/command.d.ts.map +0 -1
  62. package/lib/browser/command.js +0 -84
  63. package/lib/browser/command.js.map +0 -1
  64. package/lib/browser/tabbar/TABBAR_CONFIG_USAGE.md +0 -141
  65. package/lib/browser/tabbar/tabbar-behavior-handler.d.ts +0 -71
  66. package/lib/browser/tabbar/tabbar-behavior-handler.d.ts.map +0 -1
  67. package/lib/browser/tabbar/tabbar-behavior-handler.js +0 -210
  68. package/lib/browser/tabbar/tabbar-behavior-handler.js.map +0 -1
  69. package/src/browser/command.ts +0 -99
  70. package/src/browser/tabbar/TABBAR_CONFIG_USAGE.md +0 -141
  71. package/src/browser/tabbar/tabbar-behavior-handler.ts +0 -260
@@ -1,260 +0,0 @@
1
- import { ComponentRegistryProvider, DisposableCollection } from '@opensumi/ide-core-browser';
2
- import { SCM_CONTAINER_ID } from '@opensumi/ide-core-browser/lib/common/container-id';
3
- import { ResizeHandle } from '@opensumi/ide-core-browser/lib/components';
4
- import { AbstractContextMenuService, IContextMenu, IMenuRegistry } from '@opensumi/ide-core-browser/lib/menu/next';
5
- import { TabbarBehaviorConfig } from '@opensumi/ide-core-browser/lib/react-providers';
6
-
7
- import { IMainLayoutService } from '../../common';
8
- import { EXPAND_PANEL_COMMAND, RETRACT_PANEL_COMMAND, TOGGLE_PANEL_COMMAND } from '../command';
9
-
10
- export interface ITabbarResizeOptions {
11
- setSize: (targetSize?: number) => void;
12
- setRelativeSize: (prev: number, next: number) => void;
13
- getSize: () => number;
14
- getRelativeSize: () => number[];
15
- lockSize: (lock: boolean | undefined) => void;
16
- setMaxSize: (lock: boolean | undefined) => void;
17
- hidePanel: (show?: boolean) => void;
18
- }
19
-
20
- /**
21
- * 基于配置的 Tabbar 行为处理器
22
- * 通过配置驱动,替代复杂的策略模式
23
- */
24
- export class TabbarBehaviorHandler {
25
- private accordionRestored: Set<string> = new Set();
26
-
27
- constructor(private location: string, private config?: TabbarBehaviorConfig) {}
28
-
29
- /**
30
- * 获取 isLatter 配置
31
- */
32
- getIsLatter(): boolean {
33
- if (this.config?.isLatter !== undefined) {
34
- return this.config.isLatter;
35
- }
36
- // 默认配置:扩展视图和底部面板为后置位置
37
- return this.location === 'extendView' || this.location === 'panel';
38
- }
39
-
40
- /**
41
- * 包装 resize handle
42
- */
43
- wrapResizeHandle(resizeHandle: ResizeHandle): ITabbarResizeOptions {
44
- const { setSize, setRelativeSize, getSize, getRelativeSize, lockSize, setMaxSize, hidePanel } = resizeHandle;
45
- const isLatter = this.getIsLatter();
46
-
47
- return {
48
- setSize: (size) => setSize(size, isLatter),
49
- setRelativeSize: (prev: number, next: number) => setRelativeSize(prev, next, isLatter),
50
- getSize: () => getSize(isLatter),
51
- getRelativeSize: () => getRelativeSize(isLatter),
52
- setMaxSize: (lock: boolean | undefined) => setMaxSize(lock, isLatter),
53
- lockSize: (lock: boolean | undefined) => lockSize(lock, isLatter),
54
- hidePanel: (show) => hidePanel(show),
55
- };
56
- }
57
-
58
- /**
59
- * 注册特定位置的命令(基于配置)
60
- */
61
- registerLocationSpecificCommands(context: {
62
- commandRegistry: any;
63
- layoutService: IMainLayoutService;
64
- }): DisposableCollection {
65
- const disposables = new DisposableCollection();
66
- const { supportedActions } = this.config || {};
67
-
68
- // 如果支持展开操作,注册相关命令
69
- if (supportedActions?.expand) {
70
- disposables.push(
71
- context.commandRegistry.registerCommand(EXPAND_PANEL_COMMAND, {
72
- execute: () => {
73
- context.layoutService.expandBottom(true);
74
- },
75
- }),
76
- );
77
-
78
- disposables.push(
79
- context.commandRegistry.registerCommand(RETRACT_PANEL_COMMAND, {
80
- execute: () => {
81
- context.layoutService.expandBottom(false);
82
- },
83
- }),
84
- );
85
- }
86
-
87
- // 如果支持 toggle 操作,注册相关命令
88
- if (supportedActions?.toggle) {
89
- disposables.push(
90
- context.commandRegistry.registerCommand(TOGGLE_PANEL_COMMAND, {
91
- execute: (show?: boolean, size?: number) => {
92
- context.layoutService.toggleSlot(this.location, show, size);
93
- },
94
- }),
95
- );
96
- }
97
-
98
- return disposables;
99
- }
100
-
101
- /**
102
- * 注册特定位置的菜单(基于配置)
103
- */
104
- registerLocationSpecificMenus(context: {
105
- menuRegistry: IMenuRegistry;
106
- ctxMenuService: AbstractContextMenuService;
107
- }): IContextMenu | undefined {
108
- // 如果支持展开操作,注册相关菜单
109
- const menuItems: any[] = [];
110
-
111
- if (this.config?.supportedActions?.expand) {
112
- menuItems.push(
113
- {
114
- command: EXPAND_PANEL_COMMAND.id,
115
- group: 'navigation',
116
- when: '!bottomFullExpanded',
117
- order: 1,
118
- },
119
- {
120
- command: RETRACT_PANEL_COMMAND.id,
121
- group: 'navigation',
122
- when: 'bottomFullExpanded',
123
- order: 1,
124
- },
125
- );
126
- }
127
-
128
- if (this.config?.supportedActions?.toggle) {
129
- menuItems.push({
130
- command: TOGGLE_PANEL_COMMAND.id,
131
- group: 'navigation',
132
- order: 2,
133
- });
134
- }
135
-
136
- if (menuItems.length > 0) {
137
- context.menuRegistry.registerMenuItems(`tabbar/${this.location}/common`, menuItems);
138
-
139
- return context.ctxMenuService.createMenu({
140
- id: `tabbar/${this.location}/common`,
141
- });
142
- }
143
-
144
- return undefined;
145
- }
146
-
147
- /**
148
- * 处理展开/收缩逻辑(基于配置)
149
- */
150
- doExpand(expand: boolean, resizeHandle?: ITabbarResizeOptions): void {
151
- if (!this.config?.supportedActions?.expand || !resizeHandle) {
152
- return;
153
- }
154
-
155
- const { setRelativeSize } = resizeHandle;
156
- const isLatter = this.getIsLatter();
157
-
158
- if (expand) {
159
- if (isLatter) {
160
- // 后置位置:完全展开
161
- setRelativeSize(0, 1);
162
- } else {
163
- // 前置位置:完全展开
164
- setRelativeSize(1, 0);
165
- }
166
- } else {
167
- // 恢复正常尺寸
168
- setRelativeSize(2, 1);
169
- }
170
- }
171
-
172
- /**
173
- * 判断是否处于展开状态(基于配置)
174
- */
175
- isExpanded(resizeHandle?: ITabbarResizeOptions): boolean {
176
- if (!this.config?.supportedActions?.expand || !resizeHandle) {
177
- return false;
178
- }
179
-
180
- const { getRelativeSize } = resizeHandle;
181
- const relativeSizes = getRelativeSize().join(',');
182
- const isLatter = this.getIsLatter();
183
-
184
- return isLatter ? relativeSizes === '0,1' : relativeSizes === '1,0';
185
- }
186
-
187
- /**
188
- * 激活快捷键的处理逻辑(基于配置)
189
- */
190
- handleActivateKeyBinding(
191
- containerId: string,
192
- currentContainerId: string,
193
- updateCurrentContainerId: (id: string) => void,
194
- forceShow?: boolean,
195
- ): void {
196
- // 如果支持 toggle,根据当前状态切换
197
- if (this.config?.supportedActions?.toggle && !forceShow) {
198
- updateCurrentContainerId(currentContainerId === containerId ? '' : containerId);
199
- } else {
200
- // 否则直接激活
201
- updateCurrentContainerId(containerId);
202
- }
203
- }
204
-
205
- /**
206
- * 处理全展开状态(基于配置)
207
- */
208
- handleFullExpanded(
209
- currentId: string,
210
- isCurrentExpanded: boolean,
211
- resizeHandle: ITabbarResizeOptions,
212
- options: { barSize: number; panelSize: number; prevSize?: number },
213
- ): void {
214
- const { barSize, panelSize, prevSize } = options;
215
- const { setRelativeSize, setSize } = resizeHandle;
216
-
217
- if (currentId) {
218
- if (isCurrentExpanded && this.config?.supportedActions?.expand) {
219
- const isLatter = this.getIsLatter();
220
- if (isLatter) {
221
- setRelativeSize(0, 1);
222
- } else {
223
- setRelativeSize(1, 0);
224
- }
225
- } else {
226
- setSize(prevSize || panelSize + barSize);
227
- }
228
- } else {
229
- setSize(barSize);
230
- }
231
- }
232
-
233
- /**
234
- * 尝试恢复手风琴尺寸(基于配置)
235
- */
236
- tryRestoreAccordionSize(containerInfo: ComponentRegistryProvider, layoutService: IMainLayoutService): void {
237
- // 如果不支持手风琴,直接返回
238
- if (!this.config?.supportedActions?.accordion) {
239
- return;
240
- }
241
-
242
- const { containerId } = containerInfo.options || {};
243
- if (!containerId || this.accordionRestored.has(containerId)) {
244
- return;
245
- }
246
-
247
- // 使用自定义视图取代手风琴的面板不需要 restore
248
- // scm 视图例外,因为在新版本 Gitlens 中可以将自己注册到 scm 中
249
- if (
250
- (!containerInfo || containerInfo.options?.component) &&
251
- containerInfo?.options?.containerId !== SCM_CONTAINER_ID
252
- ) {
253
- return;
254
- }
255
-
256
- const accordionService = layoutService.getAccordionService(containerId);
257
- accordionService.restoreState();
258
- this.accordionRestored.add(containerId);
259
- }
260
- }