@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.
- package/README.md +31 -30
- package/lib/browser/accordion/accordion.service.d.ts +1 -9
- package/lib/browser/accordion/accordion.service.d.ts.map +1 -1
- package/lib/browser/accordion/accordion.service.js +33 -120
- package/lib/browser/accordion/accordion.service.js.map +1 -1
- package/lib/browser/accordion/accordion.view.d.ts.map +1 -1
- package/lib/browser/accordion/accordion.view.js +1 -4
- package/lib/browser/accordion/accordion.view.js.map +1 -1
- package/lib/browser/accordion/section.view.d.ts.map +1 -1
- package/lib/browser/accordion/section.view.js +1 -1
- package/lib/browser/accordion/section.view.js.map +1 -1
- package/lib/browser/accordion/styles.module.less +0 -61
- package/lib/browser/default-config.d.ts.map +1 -1
- package/lib/browser/default-config.js +6 -7
- package/lib/browser/default-config.js.map +1 -1
- package/lib/browser/drop-area/drop-area.d.ts +2 -3
- package/lib/browser/drop-area/drop-area.d.ts.map +1 -1
- package/lib/browser/drop-area/drop-area.js +5 -8
- package/lib/browser/drop-area/drop-area.js.map +1 -1
- package/lib/browser/index.d.ts.map +1 -1
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/layout.service.d.ts +0 -3
- package/lib/browser/layout.service.d.ts.map +1 -1
- package/lib/browser/layout.service.js +78 -120
- package/lib/browser/layout.service.js.map +1 -1
- package/lib/browser/main-layout.contribution.d.ts +18 -2
- package/lib/browser/main-layout.contribution.d.ts.map +1 -1
- package/lib/browser/main-layout.contribution.js +131 -75
- package/lib/browser/main-layout.contribution.js.map +1 -1
- package/lib/browser/tabbar/bar.view.d.ts.map +1 -1
- package/lib/browser/tabbar/bar.view.js +10 -5
- package/lib/browser/tabbar/bar.view.js.map +1 -1
- package/lib/browser/tabbar/panel.view.js +1 -1
- package/lib/browser/tabbar/panel.view.js.map +1 -1
- package/lib/browser/tabbar/renderer.view.js +4 -4
- package/lib/browser/tabbar/renderer.view.js.map +1 -1
- package/lib/browser/tabbar/tabbar.service.d.ts +19 -8
- package/lib/browser/tabbar/tabbar.service.d.ts.map +1 -1
- package/lib/browser/tabbar/tabbar.service.js +146 -37
- package/lib/browser/tabbar/tabbar.service.js.map +1 -1
- package/lib/common/main-layout.definition.d.ts +3 -4
- package/lib/common/main-layout.definition.d.ts.map +1 -1
- package/lib/common/main-layout.definition.js +4 -5
- package/lib/common/main-layout.definition.js.map +1 -1
- package/package.json +8 -8
- package/src/browser/accordion/accordion.service.ts +35 -152
- package/src/browser/accordion/accordion.view.tsx +2 -4
- package/src/browser/accordion/section.view.tsx +1 -5
- package/src/browser/accordion/styles.module.less +0 -61
- package/src/browser/default-config.ts +7 -8
- package/src/browser/drop-area/drop-area.tsx +3 -6
- package/src/browser/index.ts +0 -1
- package/src/browser/layout.service.ts +66 -134
- package/src/browser/main-layout.contribution.ts +138 -93
- package/src/browser/tabbar/bar.view.tsx +15 -9
- package/src/browser/tabbar/panel.view.tsx +2 -2
- package/src/browser/tabbar/renderer.view.tsx +4 -4
- package/src/browser/tabbar/tabbar.service.ts +161 -52
- package/src/common/main-layout.definition.ts +4 -6
- package/lib/browser/command.d.ts +0 -29
- package/lib/browser/command.d.ts.map +0 -1
- package/lib/browser/command.js +0 -84
- package/lib/browser/command.js.map +0 -1
- package/lib/browser/tabbar/TABBAR_CONFIG_USAGE.md +0 -141
- package/lib/browser/tabbar/tabbar-behavior-handler.d.ts +0 -71
- package/lib/browser/tabbar/tabbar-behavior-handler.d.ts.map +0 -1
- package/lib/browser/tabbar/tabbar-behavior-handler.js +0 -210
- package/lib/browser/tabbar/tabbar-behavior-handler.js.map +0 -1
- package/src/browser/command.ts +0 -99
- package/src/browser/tabbar/TABBAR_CONFIG_USAGE.md +0 -141
- package/src/browser/tabbar/tabbar-behavior-handler.ts +0 -260
|
@@ -5,7 +5,6 @@ import { Badge, Icon } from '@opensumi/ide-components';
|
|
|
5
5
|
import {
|
|
6
6
|
ComponentRegistryInfo,
|
|
7
7
|
ComponentRegistryProvider,
|
|
8
|
-
Event,
|
|
9
8
|
KeybindingRegistry,
|
|
10
9
|
addClassName,
|
|
11
10
|
getIcon,
|
|
@@ -18,6 +17,7 @@ import { InlineMenuBar } from '@opensumi/ide-core-browser/lib/components/actions
|
|
|
18
17
|
import { Layout } from '@opensumi/ide-core-browser/lib/components/layout/layout';
|
|
19
18
|
import { VIEW_CONTAINERS } from '@opensumi/ide-core-browser/lib/layout/view-id';
|
|
20
19
|
import { IProgressService } from '@opensumi/ide-core-browser/lib/progress';
|
|
20
|
+
import { observableValue } from '@opensumi/ide-monaco/lib/common/observable';
|
|
21
21
|
|
|
22
22
|
import { IMainLayoutService } from '../../common';
|
|
23
23
|
|
|
@@ -110,20 +110,20 @@ export const TabbarViewBase: FC<ITabbarViewProps> = (props) => {
|
|
|
110
110
|
}, []);
|
|
111
111
|
|
|
112
112
|
useEffect(() => {
|
|
113
|
-
|
|
113
|
+
setContainers(
|
|
114
|
+
splitVisibleTabs(
|
|
115
|
+
tabbarService.visibleContainers.filter((container) => !container.options?.hideTab),
|
|
116
|
+
visibleCount,
|
|
117
|
+
),
|
|
118
|
+
);
|
|
119
|
+
const disposable = tabbarService.onStateChange(() => {
|
|
114
120
|
setContainers(
|
|
115
121
|
splitVisibleTabs(
|
|
116
122
|
tabbarService.visibleContainers.filter((container) => !container.options?.hideTab),
|
|
117
123
|
visibleCount,
|
|
118
124
|
),
|
|
119
125
|
);
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
updateContainers();
|
|
123
|
-
const disposable = Event.any<any>(
|
|
124
|
-
tabbarService.onDidRegisterContainer,
|
|
125
|
-
tabbarService.onStateChange,
|
|
126
|
-
)(updateContainers);
|
|
126
|
+
});
|
|
127
127
|
return () => {
|
|
128
128
|
disposable.dispose();
|
|
129
129
|
};
|
|
@@ -154,6 +154,9 @@ export const TabbarViewBase: FC<ITabbarViewProps> = (props) => {
|
|
|
154
154
|
if (!containerId) {
|
|
155
155
|
return null;
|
|
156
156
|
}
|
|
157
|
+
if (side && component.options?.hideLocationTab?.includes(side)) {
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
157
160
|
|
|
158
161
|
tabbarService.updateTabInMoreKey(containerId, false);
|
|
159
162
|
let ref: HTMLLIElement | null;
|
|
@@ -421,6 +424,9 @@ export const ChatTabbarRenderer2: FC<{ barSize?: number; style?: CSSProperties }
|
|
|
421
424
|
const { barSize = 32, style } = props;
|
|
422
425
|
const { side } = useContext(TabbarConfig);
|
|
423
426
|
const tabbarService: TabbarService = useInjectable(TabbarServiceFactory)(side);
|
|
427
|
+
useEffect(() => {
|
|
428
|
+
tabbarService.setIsLatter(true);
|
|
429
|
+
}, [tabbarService]);
|
|
424
430
|
const styles_right_tab_bar = useDesignStyles(styles.ai_right_tab_bar, 'ai_right_tab_bar');
|
|
425
431
|
const styles_right_tab = useDesignStyles(styles.ai_right_tab, 'ai_right_tab');
|
|
426
432
|
|
|
@@ -224,7 +224,7 @@ const BottomPanelView: React.FC<{
|
|
|
224
224
|
</div>
|
|
225
225
|
<div className={styles_panel_toolbar_container}>
|
|
226
226
|
{titleMenu && <InlineActionBar menus={titleMenu} />}
|
|
227
|
-
<InlineMenuBar menus={tabbarService.commonTitleMenu
|
|
227
|
+
<InlineMenuBar menus={tabbarService.commonTitleMenu} moreAtFirst />
|
|
228
228
|
</div>
|
|
229
229
|
</div>
|
|
230
230
|
<div className={styles.container_wrap} ref={(ele) => (ref.current = ele)}>
|
|
@@ -240,7 +240,7 @@ const BottomPanelView: React.FC<{
|
|
|
240
240
|
<AccordionContainer
|
|
241
241
|
views={component.views}
|
|
242
242
|
alignment='horizontal'
|
|
243
|
-
minSize={component.options!.miniSize
|
|
243
|
+
minSize={component.options!.miniSize}
|
|
244
244
|
containerId={component.options!.containerId}
|
|
245
245
|
/>
|
|
246
246
|
)}
|
|
@@ -34,7 +34,7 @@ export const TabbarConfig = createContext<{
|
|
|
34
34
|
direction: Layout.direction;
|
|
35
35
|
fullSize: number;
|
|
36
36
|
}>({
|
|
37
|
-
side: SlotLocation.
|
|
37
|
+
side: SlotLocation.left,
|
|
38
38
|
direction: EDirection.LeftToRight,
|
|
39
39
|
fullSize: 0,
|
|
40
40
|
});
|
|
@@ -114,7 +114,7 @@ export const RightTabRenderer = ({
|
|
|
114
114
|
tabpanelView?: FC<{}>;
|
|
115
115
|
}) => (
|
|
116
116
|
<TabRendererBase
|
|
117
|
-
side={SlotLocation.
|
|
117
|
+
side={SlotLocation.right}
|
|
118
118
|
direction={EDirection.RightToLeft}
|
|
119
119
|
id={VIEW_CONTAINERS.RIGHT_TABBAR_PANEL}
|
|
120
120
|
className={cls(className, 'right-slot')}
|
|
@@ -134,7 +134,7 @@ export const LeftTabRenderer = ({
|
|
|
134
134
|
tabbarView?: FC<{}>;
|
|
135
135
|
}) => (
|
|
136
136
|
<TabRendererBase
|
|
137
|
-
side={SlotLocation.
|
|
137
|
+
side={SlotLocation.left}
|
|
138
138
|
direction={EDirection.LeftToRight}
|
|
139
139
|
id={VIEW_CONTAINERS.LEFT_TABBAR_PANEL}
|
|
140
140
|
className={cls(className, 'left-slot')}
|
|
@@ -154,7 +154,7 @@ export const BottomTabRenderer = ({
|
|
|
154
154
|
tabbarView?: FC<{}>;
|
|
155
155
|
}) => (
|
|
156
156
|
<TabRendererBase
|
|
157
|
-
side={SlotLocation.
|
|
157
|
+
side={SlotLocation.bottom}
|
|
158
158
|
id={VIEW_CONTAINERS.BOTTOM_TABBAR_PANEL}
|
|
159
159
|
direction={EDirection.BottomToTop}
|
|
160
160
|
className={cls(className, 'bottom-slot')}
|
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
IScopedContextKeyService,
|
|
15
15
|
KeybindingRegistry,
|
|
16
16
|
ResizeEvent,
|
|
17
|
+
SlotLocation,
|
|
17
18
|
ViewContextKeyRegistry,
|
|
18
19
|
WithEventBus,
|
|
19
20
|
createFormatLocalizedStr,
|
|
@@ -25,6 +26,7 @@ import {
|
|
|
25
26
|
localize,
|
|
26
27
|
toDisposable,
|
|
27
28
|
} from '@opensumi/ide-core-browser';
|
|
29
|
+
import { SCM_CONTAINER_ID } from '@opensumi/ide-core-browser/lib/common/container-id';
|
|
28
30
|
import { ResizeHandle } from '@opensumi/ide-core-browser/lib/components';
|
|
29
31
|
import { LAYOUT_STATE, LayoutState } from '@opensumi/ide-core-browser/lib/layout/layout-state';
|
|
30
32
|
import {
|
|
@@ -36,11 +38,10 @@ import {
|
|
|
36
38
|
IMenuRegistry,
|
|
37
39
|
MenuId,
|
|
38
40
|
generateCtxMenu,
|
|
41
|
+
getTabbarCommonMenuId,
|
|
39
42
|
} from '@opensumi/ide-core-browser/lib/menu/next';
|
|
40
43
|
import { IProgressService } from '@opensumi/ide-core-browser/lib/progress';
|
|
41
|
-
import { slotRendererRegistry } from '@opensumi/ide-core-browser/lib/react-providers';
|
|
42
44
|
import {
|
|
43
|
-
ITransaction,
|
|
44
45
|
autorunDelta,
|
|
45
46
|
derivedOpts,
|
|
46
47
|
observableFromEventOpts,
|
|
@@ -48,9 +49,8 @@ import {
|
|
|
48
49
|
transaction,
|
|
49
50
|
} from '@opensumi/ide-monaco/lib/common/observable';
|
|
50
51
|
|
|
51
|
-
import { IMainLayoutService, TabBarRegistrationEvent } from '../../common';
|
|
52
|
-
|
|
53
|
-
import { ITabbarResizeOptions, TabbarBehaviorHandler } from './tabbar-behavior-handler';
|
|
52
|
+
import { IMainLayoutService, SUPPORT_ACCORDION_LOCATION, TabBarRegistrationEvent } from '../../common';
|
|
53
|
+
import { EXPAND_BOTTOM_PANEL, RETRACT_BOTTOM_PANEL, TOGGLE_BOTTOM_PANEL_COMMAND } from '../main-layout.contribution';
|
|
54
54
|
|
|
55
55
|
import type { ViewBadge } from 'vscode';
|
|
56
56
|
|
|
@@ -65,6 +65,11 @@ export interface TabState {
|
|
|
65
65
|
// 排序位置,数字越小优先级越高
|
|
66
66
|
priority: number;
|
|
67
67
|
}
|
|
68
|
+
const CONTAINER_NAME_MAP = {
|
|
69
|
+
left: 'view',
|
|
70
|
+
right: 'extendView',
|
|
71
|
+
bottom: 'panel',
|
|
72
|
+
};
|
|
68
73
|
|
|
69
74
|
const NONE_CONTAINER_ID = undefined;
|
|
70
75
|
|
|
@@ -99,15 +104,21 @@ export class TabbarService extends WithEventBus {
|
|
|
99
104
|
public previousContainerId: string | undefined = undefined;
|
|
100
105
|
public containersMap: Map<string, ComponentRegistryProvider> = new Map();
|
|
101
106
|
public prevSize?: number;
|
|
102
|
-
public commonTitleMenu
|
|
107
|
+
public commonTitleMenu: IContextMenu;
|
|
103
108
|
public viewReady = new Deferred<void>();
|
|
104
109
|
|
|
105
110
|
private state: Map<string, TabState> = new Map();
|
|
106
111
|
private storedState: { [containerId: string]: TabState } = {};
|
|
107
112
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
113
|
+
resizeHandle?: {
|
|
114
|
+
setSize: (targetSize?: number) => void;
|
|
115
|
+
setRelativeSize: (prev: number, next: number) => void;
|
|
116
|
+
getSize: () => number;
|
|
117
|
+
getRelativeSize: () => number[];
|
|
118
|
+
lockSize: (lock: boolean | undefined) => void;
|
|
119
|
+
setMaxSize: (lock: boolean | undefined) => void;
|
|
120
|
+
hidePanel: (show?: boolean) => void;
|
|
121
|
+
};
|
|
111
122
|
|
|
112
123
|
@Autowired(AbstractMenuService)
|
|
113
124
|
protected menuService: AbstractMenuService;
|
|
@@ -142,6 +153,8 @@ export class TabbarService extends WithEventBus {
|
|
|
142
153
|
@Autowired(IProgressService)
|
|
143
154
|
private progressService: IProgressService;
|
|
144
155
|
|
|
156
|
+
private accordionRestored: Set<string> = new Set();
|
|
157
|
+
|
|
145
158
|
private readonly onCurrentChangeEmitter = new Emitter<{ previousId: string; currentId: string }>();
|
|
146
159
|
readonly onCurrentChange: Event<{ previousId: string; currentId: string }> = this.onCurrentChangeEmitter.event;
|
|
147
160
|
|
|
@@ -157,6 +170,7 @@ export class TabbarService extends WithEventBus {
|
|
|
157
170
|
private disposableMap: Map<string, DisposableCollection> = new Map();
|
|
158
171
|
private tabInMoreKeyMap: Map<string, IContextKey<boolean>> = new Map();
|
|
159
172
|
private shouldWaitForViewRender = false;
|
|
173
|
+
private isLatter: boolean;
|
|
160
174
|
|
|
161
175
|
private scopedCtxKeyService: IScopedContextKeyService;
|
|
162
176
|
private onDidRegisterContainerEmitter = new Emitter<string>();
|
|
@@ -164,10 +178,7 @@ export class TabbarService extends WithEventBus {
|
|
|
164
178
|
|
|
165
179
|
constructor(public location: string) {
|
|
166
180
|
super();
|
|
167
|
-
|
|
168
|
-
const tabbarConfig = slotRendererRegistry.getTabbarConfig(location);
|
|
169
|
-
this.behaviorHandler = new TabbarBehaviorHandler(location, tabbarConfig);
|
|
170
|
-
|
|
181
|
+
this.setIsLatter(location === SlotLocation.right || location === SlotLocation.bottom);
|
|
171
182
|
this.scopedCtxKeyService = this.contextKeyService.createScoped();
|
|
172
183
|
this.scopedCtxKeyService.createKey('triggerWithTab', true);
|
|
173
184
|
this.menuRegistry.registerMenuItem(this.menuId, {
|
|
@@ -179,17 +190,10 @@ export class TabbarService extends WithEventBus {
|
|
|
179
190
|
when: 'triggerWithTab == true',
|
|
180
191
|
});
|
|
181
192
|
this.activatedKey = this.contextKeyService.createKey(getTabbarCtxKey(this.location), '');
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
layoutService: this.layoutService,
|
|
187
|
-
});
|
|
188
|
-
|
|
189
|
-
this.commonTitleMenu = this.behaviorHandler.registerLocationSpecificMenus({
|
|
190
|
-
menuRegistry: this.menuRegistry,
|
|
191
|
-
ctxMenuService: this.ctxMenuService,
|
|
192
|
-
});
|
|
193
|
+
if (this.location === 'bottom') {
|
|
194
|
+
this.registerPanelCommands();
|
|
195
|
+
this.registerPanelMenus();
|
|
196
|
+
}
|
|
193
197
|
|
|
194
198
|
this.eventBus.onDirective(ResizeEvent.createDirective(this.location), () => {
|
|
195
199
|
this.onResize();
|
|
@@ -200,6 +204,10 @@ export class TabbarService extends WithEventBus {
|
|
|
200
204
|
return this.onDidRegisterContainerEmitter.event;
|
|
201
205
|
}
|
|
202
206
|
|
|
207
|
+
public setIsLatter(v: boolean) {
|
|
208
|
+
this.isLatter = v;
|
|
209
|
+
}
|
|
210
|
+
|
|
203
211
|
updateNextContainerId(nextContainerId?: string) {
|
|
204
212
|
if (isUndefined(nextContainerId)) {
|
|
205
213
|
this.useFirstContainerId = true;
|
|
@@ -208,14 +216,10 @@ export class TabbarService extends WithEventBus {
|
|
|
208
216
|
}
|
|
209
217
|
}
|
|
210
218
|
|
|
211
|
-
updateCurrentContainerId(containerId: string
|
|
212
|
-
|
|
219
|
+
updateCurrentContainerId(containerId: string) {
|
|
220
|
+
transaction((tx) => {
|
|
213
221
|
this.containerIdObs.set(containerId, tx);
|
|
214
|
-
}
|
|
215
|
-
transaction((tx) => {
|
|
216
|
-
this.containerIdObs.set(containerId, tx);
|
|
217
|
-
});
|
|
218
|
-
}
|
|
222
|
+
});
|
|
219
223
|
}
|
|
220
224
|
|
|
221
225
|
updateBadge(containerId: string, value?: ViewBadge | string) {
|
|
@@ -226,6 +230,24 @@ export class TabbarService extends WithEventBus {
|
|
|
226
230
|
component?.fireChange(component);
|
|
227
231
|
}
|
|
228
232
|
|
|
233
|
+
registerPanelCommands(): void {
|
|
234
|
+
this.commandRegistry.registerCommand(EXPAND_BOTTOM_PANEL, {
|
|
235
|
+
execute: () => {
|
|
236
|
+
this.layoutService.expandBottom(true);
|
|
237
|
+
},
|
|
238
|
+
});
|
|
239
|
+
this.commandRegistry.registerCommand(RETRACT_BOTTOM_PANEL, {
|
|
240
|
+
execute: () => {
|
|
241
|
+
this.layoutService.expandBottom(false);
|
|
242
|
+
},
|
|
243
|
+
});
|
|
244
|
+
this.commandRegistry.registerCommand(TOGGLE_BOTTOM_PANEL_COMMAND, {
|
|
245
|
+
execute: (show?: boolean, size?: number) => {
|
|
246
|
+
this.layoutService.toggleSlot(SlotLocation.bottom, show, size);
|
|
247
|
+
},
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
|
|
229
251
|
public getContainerState(containerId: string) {
|
|
230
252
|
const viewState = this.state.get(containerId);
|
|
231
253
|
return viewState!;
|
|
@@ -323,7 +345,16 @@ export class TabbarService extends WithEventBus {
|
|
|
323
345
|
}
|
|
324
346
|
|
|
325
347
|
registerResizeHandle(resizeHandle: ResizeHandle) {
|
|
326
|
-
|
|
348
|
+
const { setSize, setRelativeSize, getSize, getRelativeSize, lockSize, setMaxSize, hidePanel } = resizeHandle;
|
|
349
|
+
this.resizeHandle = {
|
|
350
|
+
setSize: (size) => setSize(size, this.isLatter),
|
|
351
|
+
setRelativeSize: (prev: number, next: number) => setRelativeSize(prev, next, this.isLatter),
|
|
352
|
+
getSize: () => getSize(this.isLatter),
|
|
353
|
+
getRelativeSize: () => getRelativeSize(this.isLatter),
|
|
354
|
+
setMaxSize: (lock: boolean | undefined) => setMaxSize(lock, this.isLatter),
|
|
355
|
+
lockSize: (lock: boolean | undefined) => lockSize(lock, this.isLatter),
|
|
356
|
+
hidePanel: (show) => hidePanel(show),
|
|
357
|
+
};
|
|
327
358
|
return this.listenCurrentChange();
|
|
328
359
|
}
|
|
329
360
|
|
|
@@ -410,7 +441,7 @@ export class TabbarService extends WithEventBus {
|
|
|
410
441
|
disposables.push(this.registerActivateKeyBinding(componentInfo, componentInfo.options!.fromExtension));
|
|
411
442
|
// 注册视图是否存在的contextKey
|
|
412
443
|
const containerExistKey = this.contextKeyService.createKey<boolean>(
|
|
413
|
-
`workbench.${this.location}.${componentInfo.options!.containerId}`,
|
|
444
|
+
`workbench.${CONTAINER_NAME_MAP[this.location] || 'view'}.${componentInfo.options!.containerId}`,
|
|
414
445
|
true,
|
|
415
446
|
);
|
|
416
447
|
disposables.push({
|
|
@@ -572,11 +603,28 @@ export class TabbarService extends WithEventBus {
|
|
|
572
603
|
}
|
|
573
604
|
|
|
574
605
|
doExpand(expand: boolean) {
|
|
575
|
-
|
|
606
|
+
if (this.resizeHandle) {
|
|
607
|
+
const { setRelativeSize } = this.resizeHandle;
|
|
608
|
+
if (expand) {
|
|
609
|
+
if (!this.isLatter) {
|
|
610
|
+
setRelativeSize(1, 0);
|
|
611
|
+
} else {
|
|
612
|
+
setRelativeSize(0, 1);
|
|
613
|
+
}
|
|
614
|
+
} else {
|
|
615
|
+
// FIXME 底部需要额外的字段记录展开前的尺寸
|
|
616
|
+
setRelativeSize(2, 1);
|
|
617
|
+
}
|
|
618
|
+
}
|
|
576
619
|
}
|
|
577
620
|
|
|
578
621
|
get isExpanded(): boolean {
|
|
579
|
-
|
|
622
|
+
if (this.resizeHandle) {
|
|
623
|
+
const { getRelativeSize } = this.resizeHandle;
|
|
624
|
+
const relativeSizes = getRelativeSize().join(',');
|
|
625
|
+
return this.isLatter ? relativeSizes === '0,1' : relativeSizes === '1,0';
|
|
626
|
+
}
|
|
627
|
+
return false;
|
|
580
628
|
}
|
|
581
629
|
|
|
582
630
|
handleTabClick(e: React.MouseEvent, forbidCollapse?: boolean) {
|
|
@@ -647,19 +695,23 @@ export class TabbarService extends WithEventBus {
|
|
|
647
695
|
}
|
|
648
696
|
}
|
|
649
697
|
this.visibleContainers.forEach((container) => {
|
|
650
|
-
this.
|
|
698
|
+
if (SUPPORT_ACCORDION_LOCATION.has(this.location)) {
|
|
699
|
+
this.tryRestoreAccordionSize(container.options!.containerId);
|
|
700
|
+
}
|
|
651
701
|
});
|
|
652
702
|
}
|
|
653
703
|
|
|
654
704
|
removeContainer(containerId: string) {
|
|
655
705
|
const disposable = this.disposableMap.get(containerId);
|
|
656
706
|
disposable?.dispose();
|
|
657
|
-
this.
|
|
707
|
+
this.updateCurrentContainerId('');
|
|
708
|
+
this.doChangeViewEmitter.fire();
|
|
658
709
|
}
|
|
659
710
|
|
|
660
711
|
dynamicAddContainer(containerId: string, options: ComponentRegistryInfo) {
|
|
661
712
|
this.registerContainer(containerId, options);
|
|
662
713
|
this.updateCurrentContainerId(containerId);
|
|
714
|
+
this.doChangeViewEmitter.fire();
|
|
663
715
|
}
|
|
664
716
|
|
|
665
717
|
protected doInsertTab(containers: ComponentRegistryInfo[], sourceIndex: number, targetIndex: number) {
|
|
@@ -710,12 +762,12 @@ export class TabbarService extends WithEventBus {
|
|
|
710
762
|
},
|
|
711
763
|
{
|
|
712
764
|
execute: ({ forceShow }: { forceShow?: boolean } = {}) => {
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
this.currentContainerId.get()
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
765
|
+
// 支持toggle
|
|
766
|
+
if (this.location === 'bottom' && !forceShow) {
|
|
767
|
+
this.updateCurrentContainerId(this.currentContainerId.get() === containerId ? '' : containerId);
|
|
768
|
+
} else {
|
|
769
|
+
this.updateCurrentContainerId(containerId);
|
|
770
|
+
}
|
|
719
771
|
},
|
|
720
772
|
},
|
|
721
773
|
),
|
|
@@ -806,6 +858,31 @@ export class TabbarService extends WithEventBus {
|
|
|
806
858
|
return `${containerId}.isInMore`;
|
|
807
859
|
}
|
|
808
860
|
|
|
861
|
+
protected registerPanelMenus() {
|
|
862
|
+
this.menuRegistry.registerMenuItems(getTabbarCommonMenuId('bottom'), [
|
|
863
|
+
{
|
|
864
|
+
command: EXPAND_BOTTOM_PANEL.id,
|
|
865
|
+
group: 'navigation',
|
|
866
|
+
when: '!bottomFullExpanded',
|
|
867
|
+
order: 1,
|
|
868
|
+
},
|
|
869
|
+
{
|
|
870
|
+
command: RETRACT_BOTTOM_PANEL.id,
|
|
871
|
+
group: 'navigation',
|
|
872
|
+
when: 'bottomFullExpanded',
|
|
873
|
+
order: 1,
|
|
874
|
+
},
|
|
875
|
+
{
|
|
876
|
+
command: TOGGLE_BOTTOM_PANEL_COMMAND.id,
|
|
877
|
+
group: 'navigation',
|
|
878
|
+
order: 2,
|
|
879
|
+
},
|
|
880
|
+
]);
|
|
881
|
+
this.commonTitleMenu = this.ctxMenuService.createMenu({
|
|
882
|
+
id: 'tabbar/bottom/common',
|
|
883
|
+
});
|
|
884
|
+
}
|
|
885
|
+
|
|
809
886
|
protected doToggleTab(containerId: string, forceShow?: boolean) {
|
|
810
887
|
const state = this.getContainerState(containerId);
|
|
811
888
|
if (forceShow === undefined) {
|
|
@@ -821,9 +898,9 @@ export class TabbarService extends WithEventBus {
|
|
|
821
898
|
this.storeState();
|
|
822
899
|
}
|
|
823
900
|
|
|
824
|
-
protected shouldExpand(containerId: string | undefined)
|
|
901
|
+
protected shouldExpand(containerId: string | undefined) {
|
|
825
902
|
const info = this.getContainer(containerId);
|
|
826
|
-
return
|
|
903
|
+
return info && info.options && info.options.expanded;
|
|
827
904
|
}
|
|
828
905
|
|
|
829
906
|
protected onResize() {
|
|
@@ -857,11 +934,7 @@ export class TabbarService extends WithEventBus {
|
|
|
857
934
|
this.onCurrentChangeEmitter.fire({ previousId, currentId });
|
|
858
935
|
const isCurrentExpanded = this.shouldExpand(currentId);
|
|
859
936
|
if (this.shouldExpand(this.previousContainerId) || isCurrentExpanded) {
|
|
860
|
-
this.
|
|
861
|
-
barSize: this.barSize,
|
|
862
|
-
panelSize: this.panelSize,
|
|
863
|
-
prevSize: this.prevSize,
|
|
864
|
-
});
|
|
937
|
+
this.handleFullExpanded(currentId, isCurrentExpanded);
|
|
865
938
|
} else {
|
|
866
939
|
if (currentId) {
|
|
867
940
|
if (previousId && currentId !== previousId) {
|
|
@@ -880,7 +953,43 @@ export class TabbarService extends WithEventBus {
|
|
|
880
953
|
}
|
|
881
954
|
}
|
|
882
955
|
|
|
883
|
-
protected tryRestoreAccordionSize(
|
|
884
|
-
this.
|
|
956
|
+
protected tryRestoreAccordionSize(containerId: string) {
|
|
957
|
+
if (this.accordionRestored.has(containerId)) {
|
|
958
|
+
return;
|
|
959
|
+
}
|
|
960
|
+
const containerInfo = this.containersMap.get(containerId);
|
|
961
|
+
// 使用自定义视图取代手风琴的面板不需要 restore
|
|
962
|
+
// scm 视图例外,因为在新版本 Gitlens 中可以将自己注册到 scm 中
|
|
963
|
+
// 暂时用这种方式使 scm 面板状态可以被持久化
|
|
964
|
+
if (
|
|
965
|
+
(!containerInfo || containerInfo.options?.component) &&
|
|
966
|
+
containerInfo?.options?.containerId !== SCM_CONTAINER_ID
|
|
967
|
+
) {
|
|
968
|
+
return;
|
|
969
|
+
}
|
|
970
|
+
const accordionService = this.layoutService.getAccordionService(containerId);
|
|
971
|
+
// 需要保证此时tab切换已完成dom渲染
|
|
972
|
+
accordionService.restoreState();
|
|
973
|
+
this.accordionRestored.add(containerId);
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
protected handleFullExpanded(currentId: string, isCurrentExpanded?: boolean) {
|
|
977
|
+
if (!this.resizeHandle) {
|
|
978
|
+
return;
|
|
979
|
+
}
|
|
980
|
+
const { setRelativeSize, setSize } = this.resizeHandle;
|
|
981
|
+
if (currentId) {
|
|
982
|
+
if (isCurrentExpanded) {
|
|
983
|
+
if (!this.isLatter) {
|
|
984
|
+
setRelativeSize(1, 0);
|
|
985
|
+
} else {
|
|
986
|
+
setRelativeSize(0, 1);
|
|
987
|
+
}
|
|
988
|
+
} else {
|
|
989
|
+
setSize(this.prevSize || this.panelSize + this.barSize);
|
|
990
|
+
}
|
|
991
|
+
} else {
|
|
992
|
+
setSize(this.barSize);
|
|
993
|
+
}
|
|
885
994
|
}
|
|
886
995
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { BasicEvent, IDisposable, SlotLocation } from '@opensumi/ide-core-browser';
|
|
2
|
-
import { Layout } from '@opensumi/ide-core-browser/lib/components';
|
|
3
2
|
import { SideStateManager, View, ViewContainerOptions } from '@opensumi/ide-core-browser/lib/layout';
|
|
4
3
|
import { ComponentRegistryInfo } from '@opensumi/ide-core-browser/lib/layout/layout.interface';
|
|
5
4
|
import { IContextMenu } from '@opensumi/ide-core-browser/lib/menu/next';
|
|
@@ -42,7 +41,7 @@ export interface IMainLayoutService {
|
|
|
42
41
|
* 注册单个或多个视图到tabbar位置
|
|
43
42
|
* @param views 使用手风琴能力时传入的多个子视图
|
|
44
43
|
* @param options container相关选项
|
|
45
|
-
* @param side 注册的位置,支持
|
|
44
|
+
* @param side 注册的位置,支持left、right、bottom
|
|
46
45
|
*/
|
|
47
46
|
collectTabbarComponent(views: View[], options: ViewContainerOptions, side: string): string;
|
|
48
47
|
|
|
@@ -132,8 +131,7 @@ export class ViewCollapseChangedEvent extends BasicEvent<{
|
|
|
132
131
|
collapsed: boolean;
|
|
133
132
|
}> {}
|
|
134
133
|
|
|
135
|
-
export const SUPPORT_ACCORDION_LOCATION = new Set([SlotLocation.
|
|
134
|
+
export const SUPPORT_ACCORDION_LOCATION = new Set([SlotLocation.left, SlotLocation.right]);
|
|
136
135
|
|
|
137
|
-
export const
|
|
138
|
-
export const
|
|
139
|
-
export const DROP_VIEW_CONTAINER = 'drop-view';
|
|
136
|
+
export const DROP_BOTTOM_CONTAINER = 'drop-bottom';
|
|
137
|
+
export const DROP_RIGHT_CONTAINER = 'drop-right';
|
package/lib/browser/command.d.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { Command } from '@opensumi/ide-core-browser';
|
|
2
|
-
import { MenuCommandDesc } from '@opensumi/ide-core-browser/lib/menu/next';
|
|
3
|
-
/** @deprecated 请使用 main-layout.view.toggle */
|
|
4
|
-
export declare const TOGGLE_LEFT_PANEL_COMMAND: Command;
|
|
5
|
-
/** @deprecated 请使用 main-layout.extendView.toggle */
|
|
6
|
-
export declare const TOGGLE_RIGHT_PANEL_COMMAND: Command;
|
|
7
|
-
/** @deprecated 请使用 main-layout.panel.toggle */
|
|
8
|
-
export declare const TOGGLE_BOTTOM_PANEL_COMMAND: Command;
|
|
9
|
-
/** @deprecated 请使用 main-layout.panel.is-visible */
|
|
10
|
-
export declare const IS_VISIBLE_BOTTOM_PANEL_COMMAND: Command;
|
|
11
|
-
/** @deprecated 请使用 main-layout.view.is-visible */
|
|
12
|
-
export declare const IS_VISIBLE_LEFT_PANEL_COMMAND: Command;
|
|
13
|
-
/** @deprecated 请使用 main-layout.extend-view.is-visible */
|
|
14
|
-
export declare const IS_VISIBLE_RIGHT_PANEL_COMMAND: Command;
|
|
15
|
-
/** @deprecated 请使用 main-layout.panel.expand */
|
|
16
|
-
export declare const EXPAND_BOTTOM_PANEL: Command;
|
|
17
|
-
/** @deprecated 请使用 main-layout.panel.retract */
|
|
18
|
-
export declare const RETRACT_BOTTOM_PANEL: Command;
|
|
19
|
-
export declare const WORKBENCH_ACTION_CLOSESIDECAR: Command;
|
|
20
|
-
export declare const WORKBENCH_ACTION_CLOSEPANEL: Command;
|
|
21
|
-
export declare const TOGGLE_VIEW_COMMAND: MenuCommandDesc;
|
|
22
|
-
export declare const TOGGLE_EXTEND_VIEW_COMMAND: MenuCommandDesc;
|
|
23
|
-
export declare const TOGGLE_PANEL_COMMAND: Command;
|
|
24
|
-
export declare const IS_VISIBLE_VIEW_COMMAND: Command;
|
|
25
|
-
export declare const IS_VISIBLE_EXTEND_VIEW_COMMAND: Command;
|
|
26
|
-
export declare const IS_VISIBLE_PANEL_COMMAND: Command;
|
|
27
|
-
export declare const EXPAND_PANEL_COMMAND: Command;
|
|
28
|
-
export declare const RETRACT_PANEL_COMMAND: Command;
|
|
29
|
-
//# sourceMappingURL=command.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/browser/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAW,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAE3E,8CAA8C;AAC9C,eAAO,MAAM,yBAAyB,EAAE,OAGvC,CAAC;AAEF,oDAAoD;AACpD,eAAO,MAAM,0BAA0B,EAAE,OAGxC,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,2BAA2B,EAAE,OAGzC,CAAC;AAEF,mDAAmD;AACnD,eAAO,MAAM,+BAA+B,EAAE,OAG7C,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,6BAA6B,EAAE,OAG3C,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,8BAA8B,EAAE,OAG5C,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,mBAAmB,EAAE,OAGjC,CAAC;AAEF,gDAAgD;AAChD,eAAO,MAAM,oBAAoB,EAAE,OAGlC,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,OAG3C,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,OAEzC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,eAGjC,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,eAGxC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,OAIlC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,OAErC,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,OAE5C,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,OAEtC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,OAIlC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,OAInC,CAAC"}
|
package/lib/browser/command.js
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RETRACT_PANEL_COMMAND = exports.EXPAND_PANEL_COMMAND = exports.IS_VISIBLE_PANEL_COMMAND = exports.IS_VISIBLE_EXTEND_VIEW_COMMAND = exports.IS_VISIBLE_VIEW_COMMAND = exports.TOGGLE_PANEL_COMMAND = exports.TOGGLE_EXTEND_VIEW_COMMAND = exports.TOGGLE_VIEW_COMMAND = exports.WORKBENCH_ACTION_CLOSEPANEL = exports.WORKBENCH_ACTION_CLOSESIDECAR = exports.RETRACT_BOTTOM_PANEL = exports.EXPAND_BOTTOM_PANEL = exports.IS_VISIBLE_RIGHT_PANEL_COMMAND = exports.IS_VISIBLE_LEFT_PANEL_COMMAND = exports.IS_VISIBLE_BOTTOM_PANEL_COMMAND = exports.TOGGLE_BOTTOM_PANEL_COMMAND = exports.TOGGLE_RIGHT_PANEL_COMMAND = exports.TOGGLE_LEFT_PANEL_COMMAND = void 0;
|
|
4
|
-
const ide_core_browser_1 = require("@opensumi/ide-core-browser");
|
|
5
|
-
/** @deprecated 请使用 main-layout.view.toggle */
|
|
6
|
-
exports.TOGGLE_LEFT_PANEL_COMMAND = {
|
|
7
|
-
id: 'main-layout.left-panel.toggle',
|
|
8
|
-
delegate: 'main-layout.view.toggle',
|
|
9
|
-
};
|
|
10
|
-
/** @deprecated 请使用 main-layout.extendView.toggle */
|
|
11
|
-
exports.TOGGLE_RIGHT_PANEL_COMMAND = {
|
|
12
|
-
id: 'main-layout.right-panel.toggle',
|
|
13
|
-
delegate: 'main-layout.extend-view.toggle',
|
|
14
|
-
};
|
|
15
|
-
/** @deprecated 请使用 main-layout.panel.toggle */
|
|
16
|
-
exports.TOGGLE_BOTTOM_PANEL_COMMAND = {
|
|
17
|
-
id: 'main-layout.bottom-panel.toggle',
|
|
18
|
-
delegate: 'main-layout.panel.toggle',
|
|
19
|
-
};
|
|
20
|
-
/** @deprecated 请使用 main-layout.panel.is-visible */
|
|
21
|
-
exports.IS_VISIBLE_BOTTOM_PANEL_COMMAND = {
|
|
22
|
-
id: 'main-layout.bottom-panel.is-visible',
|
|
23
|
-
delegate: 'main-layout.panel.is-visible',
|
|
24
|
-
};
|
|
25
|
-
/** @deprecated 请使用 main-layout.view.is-visible */
|
|
26
|
-
exports.IS_VISIBLE_LEFT_PANEL_COMMAND = {
|
|
27
|
-
id: 'main-layout.left-panel.is-visible',
|
|
28
|
-
delegate: 'main-layout.view.is-visible',
|
|
29
|
-
};
|
|
30
|
-
/** @deprecated 请使用 main-layout.extend-view.is-visible */
|
|
31
|
-
exports.IS_VISIBLE_RIGHT_PANEL_COMMAND = {
|
|
32
|
-
id: 'main-layout.right-panel.is-visible',
|
|
33
|
-
delegate: 'main-layout.extend-view.is-visible',
|
|
34
|
-
};
|
|
35
|
-
/** @deprecated 请使用 main-layout.panel.expand */
|
|
36
|
-
exports.EXPAND_BOTTOM_PANEL = {
|
|
37
|
-
id: 'main-layout.bottom-panel.expand',
|
|
38
|
-
delegate: 'main-layout.panel.expand',
|
|
39
|
-
};
|
|
40
|
-
/** @deprecated 请使用 main-layout.panel.retract */
|
|
41
|
-
exports.RETRACT_BOTTOM_PANEL = {
|
|
42
|
-
id: 'main-layout.bottom-panel.retract',
|
|
43
|
-
delegate: 'main-layout.panel.retract',
|
|
44
|
-
};
|
|
45
|
-
exports.WORKBENCH_ACTION_CLOSESIDECAR = {
|
|
46
|
-
id: 'workbench.action.closeSidebar',
|
|
47
|
-
label: '%main-layout.sidebar.hide%',
|
|
48
|
-
};
|
|
49
|
-
exports.WORKBENCH_ACTION_CLOSEPANEL = {
|
|
50
|
-
id: 'workbench.action.closePanel',
|
|
51
|
-
};
|
|
52
|
-
exports.TOGGLE_VIEW_COMMAND = {
|
|
53
|
-
id: 'main-layout.view.toggle',
|
|
54
|
-
label: '%main-layout.view.toggle%',
|
|
55
|
-
};
|
|
56
|
-
exports.TOGGLE_EXTEND_VIEW_COMMAND = {
|
|
57
|
-
id: 'main-layout.extend-view.toggle',
|
|
58
|
-
label: '%main-layout.extend-view.toggle%',
|
|
59
|
-
};
|
|
60
|
-
exports.TOGGLE_PANEL_COMMAND = {
|
|
61
|
-
id: 'main-layout.panel.toggle',
|
|
62
|
-
iconClass: (0, ide_core_browser_1.getIcon)('minus'),
|
|
63
|
-
label: '%main-layout.panel.toggle%',
|
|
64
|
-
};
|
|
65
|
-
exports.IS_VISIBLE_VIEW_COMMAND = {
|
|
66
|
-
id: 'main-layout.view.is-visible',
|
|
67
|
-
};
|
|
68
|
-
exports.IS_VISIBLE_EXTEND_VIEW_COMMAND = {
|
|
69
|
-
id: 'main-layout.extend-view.is-visible',
|
|
70
|
-
};
|
|
71
|
-
exports.IS_VISIBLE_PANEL_COMMAND = {
|
|
72
|
-
id: 'main-layout.panel.is-visible',
|
|
73
|
-
};
|
|
74
|
-
exports.EXPAND_PANEL_COMMAND = {
|
|
75
|
-
id: 'main-layout.panel.expand',
|
|
76
|
-
label: '%layout.tabbar.expand%',
|
|
77
|
-
iconClass: (0, ide_core_browser_1.getIcon)('expand'),
|
|
78
|
-
};
|
|
79
|
-
exports.RETRACT_PANEL_COMMAND = {
|
|
80
|
-
id: 'main-layout.panel.retract',
|
|
81
|
-
label: '%layout.tabbar.retract%',
|
|
82
|
-
iconClass: (0, ide_core_browser_1.getIcon)('shrink'),
|
|
83
|
-
};
|
|
84
|
-
//# sourceMappingURL=command.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/browser/command.ts"],"names":[],"mappings":";;;AAAA,iEAA8D;AAG9D,8CAA8C;AACjC,QAAA,yBAAyB,GAAY;IAChD,EAAE,EAAE,+BAA+B;IACnC,QAAQ,EAAE,yBAAyB;CACpC,CAAC;AAEF,oDAAoD;AACvC,QAAA,0BAA0B,GAAY;IACjD,EAAE,EAAE,gCAAgC;IACpC,QAAQ,EAAE,gCAAgC;CAC3C,CAAC;AAEF,+CAA+C;AAClC,QAAA,2BAA2B,GAAY;IAClD,EAAE,EAAE,iCAAiC;IACrC,QAAQ,EAAE,0BAA0B;CACrC,CAAC;AAEF,mDAAmD;AACtC,QAAA,+BAA+B,GAAY;IACtD,EAAE,EAAE,qCAAqC;IACzC,QAAQ,EAAE,8BAA8B;CACzC,CAAC;AAEF,kDAAkD;AACrC,QAAA,6BAA6B,GAAY;IACpD,EAAE,EAAE,mCAAmC;IACvC,QAAQ,EAAE,6BAA6B;CACxC,CAAC;AAEF,yDAAyD;AAC5C,QAAA,8BAA8B,GAAY;IACrD,EAAE,EAAE,oCAAoC;IACxC,QAAQ,EAAE,oCAAoC;CAC/C,CAAC;AAEF,+CAA+C;AAClC,QAAA,mBAAmB,GAAY;IAC1C,EAAE,EAAE,iCAAiC;IACrC,QAAQ,EAAE,0BAA0B;CACrC,CAAC;AAEF,gDAAgD;AACnC,QAAA,oBAAoB,GAAY;IAC3C,EAAE,EAAE,kCAAkC;IACtC,QAAQ,EAAE,2BAA2B;CACtC,CAAC;AAEW,QAAA,6BAA6B,GAAY;IACpD,EAAE,EAAE,+BAA+B;IACnC,KAAK,EAAE,4BAA4B;CACpC,CAAC;AAEW,QAAA,2BAA2B,GAAY;IAClD,EAAE,EAAE,6BAA6B;CAClC,CAAC;AAEW,QAAA,mBAAmB,GAAoB;IAClD,EAAE,EAAE,yBAAyB;IAC7B,KAAK,EAAE,2BAA2B;CACnC,CAAC;AAEW,QAAA,0BAA0B,GAAoB;IACzD,EAAE,EAAE,gCAAgC;IACpC,KAAK,EAAE,kCAAkC;CAC1C,CAAC;AAEW,QAAA,oBAAoB,GAAY;IAC3C,EAAE,EAAE,0BAA0B;IAC9B,SAAS,EAAE,IAAA,0BAAO,EAAC,OAAO,CAAC;IAC3B,KAAK,EAAE,4BAA4B;CACpC,CAAC;AAEW,QAAA,uBAAuB,GAAY;IAC9C,EAAE,EAAE,6BAA6B;CAClC,CAAC;AAEW,QAAA,8BAA8B,GAAY;IACrD,EAAE,EAAE,oCAAoC;CACzC,CAAC;AAEW,QAAA,wBAAwB,GAAY;IAC/C,EAAE,EAAE,8BAA8B;CACnC,CAAC;AAEW,QAAA,oBAAoB,GAAY;IAC3C,EAAE,EAAE,0BAA0B;IAC9B,KAAK,EAAE,wBAAwB;IAC/B,SAAS,EAAE,IAAA,0BAAO,EAAC,QAAQ,CAAC;CAC7B,CAAC;AAEW,QAAA,qBAAqB,GAAY;IAC5C,EAAE,EAAE,2BAA2B;IAC/B,KAAK,EAAE,yBAAyB;IAChC,SAAS,EAAE,IAAA,0BAAO,EAAC,QAAQ,CAAC;CAC7B,CAAC"}
|