dockview-core 6.6.1 → 7.0.3
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 +8 -1
- package/dist/cjs/api/component.api.d.ts +42 -21
- package/dist/cjs/api/component.api.js +111 -20
- package/dist/cjs/api/dockviewGroupPanelApi.d.ts +23 -8
- package/dist/cjs/api/dockviewGroupPanelApi.js +24 -1
- package/dist/cjs/api/dockviewPanelApi.d.ts +4 -3
- package/dist/cjs/api/dockviewPanelApi.js +8 -0
- package/dist/cjs/dnd/dropTargetAnchorContainer.js +1 -2
- package/dist/cjs/dnd/droptarget.d.ts +8 -0
- package/dist/cjs/dnd/droptarget.js +28 -0
- package/dist/cjs/dnd/pointer/longPress.js +1 -1
- package/dist/cjs/dnd/pointer/pointerDragController.js +9 -7
- package/dist/cjs/dnd/pointer/pointerDragSource.js +4 -2
- package/dist/cjs/dockview/accessibilityMessages.d.ts +32 -0
- package/dist/cjs/dockview/accessibilityMessages.js +51 -0
- package/dist/cjs/dockview/allModules.d.ts +8 -0
- package/dist/cjs/dockview/allModules.js +25 -0
- package/dist/cjs/dockview/components/panel/content.d.ts +2 -0
- package/dist/cjs/dockview/components/panel/content.js +41 -10
- package/dist/cjs/dockview/components/popupService.js +1 -1
- package/dist/cjs/dockview/components/tab/tab.js +35 -7
- package/dist/cjs/dockview/components/titlebar/floatingTitleBar.d.ts +34 -0
- package/dist/cjs/dockview/components/titlebar/floatingTitleBar.js +95 -0
- package/dist/cjs/dockview/components/titlebar/groupDragSource.d.ts +51 -0
- package/dist/cjs/dockview/components/titlebar/groupDragSource.js +218 -0
- package/dist/cjs/dockview/components/titlebar/tabGroupIndicator.d.ts +2 -1
- package/dist/cjs/dockview/components/titlebar/tabGroupIndicator.js +36 -30
- package/dist/cjs/dockview/components/titlebar/tabGroups.d.ts +27 -5
- package/dist/cjs/dockview/components/titlebar/tabGroups.js +104 -53
- package/dist/cjs/dockview/components/titlebar/tabs.d.ts +12 -0
- package/dist/cjs/dockview/components/titlebar/tabs.js +121 -25
- package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts +4 -0
- package/dist/cjs/dockview/components/titlebar/tabsContainer.js +13 -3
- package/dist/cjs/dockview/components/titlebar/voidContainer.d.ts +1 -4
- package/dist/cjs/dockview/components/titlebar/voidContainer.js +32 -156
- package/dist/cjs/dockview/dndCapabilities.js +3 -3
- package/dist/cjs/dockview/dockviewComponent.d.ts +304 -49
- package/dist/cjs/dockview/dockviewComponent.js +1839 -1075
- package/dist/cjs/dockview/dockviewFloatingGroupPanel.d.ts +33 -2
- package/dist/cjs/dockview/dockviewFloatingGroupPanel.js +39 -3
- package/dist/cjs/dockview/dockviewGroupPanel.d.ts +1 -2
- package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +36 -14
- package/dist/cjs/dockview/dockviewGroupPanelModel.js +151 -125
- package/dist/cjs/dockview/dockviewPanel.d.ts +2 -2
- package/dist/cjs/dockview/dockviewPanel.js +4 -5
- package/dist/cjs/dockview/dockviewShell.d.ts +29 -7
- package/dist/cjs/dockview/dockviewShell.js +94 -36
- package/dist/cjs/dockview/edgeGroupService.d.ts +38 -0
- package/dist/cjs/dockview/edgeGroupService.js +128 -0
- package/dist/cjs/dockview/floatingGroupService.d.ts +37 -0
- package/dist/cjs/dockview/floatingGroupService.js +231 -0
- package/dist/cjs/dockview/headerActionsService.d.ts +32 -0
- package/dist/cjs/dockview/headerActionsService.js +149 -0
- package/dist/cjs/dockview/liveRegionService.d.ts +53 -0
- package/dist/cjs/dockview/liveRegionService.js +185 -0
- package/dist/cjs/dockview/moduleContracts.d.ts +119 -0
- package/dist/cjs/dockview/moduleContracts.js +2 -0
- package/dist/cjs/dockview/modules.d.ts +110 -0
- package/dist/cjs/dockview/modules.js +304 -0
- package/dist/cjs/dockview/options.d.ts +159 -6
- package/dist/cjs/dockview/options.js +8 -1
- package/dist/cjs/dockview/popoutWindowService.d.ts +95 -0
- package/dist/cjs/dockview/popoutWindowService.js +261 -0
- package/dist/cjs/dockview/rootDropTargetService.d.ts +35 -0
- package/dist/cjs/dockview/rootDropTargetService.js +87 -0
- package/dist/cjs/dockview/strictEventsSequencing.js +6 -6
- package/dist/cjs/dockview/tabGroup.js +3 -3
- package/dist/cjs/dockview/tabGroupAccent.js +1 -3
- package/dist/cjs/dockview/watermarkService.d.ts +30 -0
- package/dist/cjs/dockview/watermarkService.js +61 -0
- package/dist/cjs/dom.js +1 -1
- package/dist/cjs/events.js +1 -1
- package/dist/cjs/gridview/baseComponentGridview.d.ts +1 -1
- package/dist/cjs/gridview/baseComponentGridview.js +6 -10
- package/dist/cjs/gridview/branchNode.js +13 -17
- package/dist/cjs/gridview/gridview.js +8 -8
- package/dist/cjs/gridview/gridviewComponent.d.ts +3 -3
- package/dist/cjs/gridview/gridviewComponent.js +1 -6
- package/dist/cjs/gridview/gridviewPanel.d.ts +1 -1
- package/dist/cjs/index.d.ts +11 -4
- package/dist/cjs/index.js +14 -1
- package/dist/cjs/overlay/overlay.d.ts +43 -1
- package/dist/cjs/overlay/overlay.js +82 -36
- package/dist/cjs/overlay/overlayRenderContainer.js +3 -4
- package/dist/cjs/paneview/draggablePaneviewPanel.d.ts +2 -2
- package/dist/cjs/paneview/draggablePaneviewPanel.js +5 -5
- package/dist/cjs/paneview/paneviewComponent.d.ts +3 -3
- package/dist/cjs/paneview/paneviewComponent.js +7 -11
- package/dist/cjs/popoutWindow.js +4 -4
- package/dist/cjs/scrollbar.d.ts +1 -1
- package/dist/cjs/scrollbar.js +7 -6
- package/dist/cjs/splitview/splitview.d.ts +1 -1
- package/dist/cjs/splitview/splitview.js +21 -20
- package/dist/cjs/splitview/viewItem.js +1 -1
- package/dist/dockview-core.js +3548 -1544
- package/dist/dockview-core.min.js +2 -2
- package/dist/dockview-core.min.js.map +1 -1
- package/dist/dockview-core.min.noStyle.js +2 -2
- package/dist/dockview-core.min.noStyle.js.map +1 -1
- package/dist/dockview-core.noStyle.js +3547 -1543
- package/dist/esm/api/component.api.d.ts +42 -21
- package/dist/esm/api/component.api.js +63 -18
- package/dist/esm/api/dockviewGroupPanelApi.d.ts +23 -8
- package/dist/esm/api/dockviewGroupPanelApi.js +20 -1
- package/dist/esm/api/dockviewPanelApi.d.ts +4 -3
- package/dist/esm/api/dockviewPanelApi.js +7 -0
- package/dist/esm/dnd/dropTargetAnchorContainer.js +1 -2
- package/dist/esm/dnd/droptarget.d.ts +8 -0
- package/dist/esm/dnd/droptarget.js +28 -0
- package/dist/esm/dnd/pointer/longPress.js +1 -1
- package/dist/esm/dnd/pointer/pointerDragController.js +9 -7
- package/dist/esm/dnd/pointer/pointerDragSource.js +4 -2
- package/dist/esm/dockview/accessibilityMessages.d.ts +32 -0
- package/dist/esm/dockview/accessibilityMessages.js +30 -0
- package/dist/esm/dockview/allModules.d.ts +8 -0
- package/dist/esm/dockview/allModules.js +22 -0
- package/dist/esm/dockview/components/panel/content.d.ts +2 -0
- package/dist/esm/dockview/components/panel/content.js +42 -11
- package/dist/esm/dockview/components/popupService.js +1 -1
- package/dist/esm/dockview/components/tab/tab.js +35 -7
- package/dist/esm/dockview/components/titlebar/floatingTitleBar.d.ts +34 -0
- package/dist/esm/dockview/components/titlebar/floatingTitleBar.js +65 -0
- package/dist/esm/dockview/components/titlebar/groupDragSource.d.ts +51 -0
- package/dist/esm/dockview/components/titlebar/groupDragSource.js +178 -0
- package/dist/esm/dockview/components/titlebar/tabGroupIndicator.d.ts +2 -1
- package/dist/esm/dockview/components/titlebar/tabGroupIndicator.js +36 -30
- package/dist/esm/dockview/components/titlebar/tabGroups.d.ts +27 -5
- package/dist/esm/dockview/components/titlebar/tabGroups.js +91 -41
- package/dist/esm/dockview/components/titlebar/tabs.d.ts +12 -0
- package/dist/esm/dockview/components/titlebar/tabs.js +119 -26
- package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts +4 -0
- package/dist/esm/dockview/components/titlebar/tabsContainer.js +8 -2
- package/dist/esm/dockview/components/titlebar/voidContainer.d.ts +1 -4
- package/dist/esm/dockview/components/titlebar/voidContainer.js +34 -146
- package/dist/esm/dockview/dndCapabilities.js +3 -3
- package/dist/esm/dockview/dockviewComponent.d.ts +304 -49
- package/dist/esm/dockview/dockviewComponent.js +1459 -772
- package/dist/esm/dockview/dockviewFloatingGroupPanel.d.ts +33 -2
- package/dist/esm/dockview/dockviewFloatingGroupPanel.js +35 -3
- package/dist/esm/dockview/dockviewGroupPanel.d.ts +1 -2
- package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +36 -14
- package/dist/esm/dockview/dockviewGroupPanelModel.js +127 -117
- package/dist/esm/dockview/dockviewPanel.d.ts +2 -2
- package/dist/esm/dockview/dockviewPanel.js +1 -2
- package/dist/esm/dockview/dockviewShell.d.ts +29 -7
- package/dist/esm/dockview/dockviewShell.js +89 -37
- package/dist/esm/dockview/edgeGroupService.d.ts +38 -0
- package/dist/esm/dockview/edgeGroupService.js +63 -0
- package/dist/esm/dockview/floatingGroupService.d.ts +37 -0
- package/dist/esm/dockview/floatingGroupService.js +150 -0
- package/dist/esm/dockview/headerActionsService.d.ts +32 -0
- package/dist/esm/dockview/headerActionsService.js +86 -0
- package/dist/esm/dockview/liveRegionService.d.ts +53 -0
- package/dist/esm/dockview/liveRegionService.js +159 -0
- package/dist/esm/dockview/moduleContracts.d.ts +119 -0
- package/dist/esm/dockview/moduleContracts.js +1 -0
- package/dist/esm/dockview/modules.d.ts +110 -0
- package/dist/esm/dockview/modules.js +170 -0
- package/dist/esm/dockview/options.d.ts +159 -6
- package/dist/esm/dockview/options.js +8 -1
- package/dist/esm/dockview/popoutWindowService.d.ts +95 -0
- package/dist/esm/dockview/popoutWindowService.js +175 -0
- package/dist/esm/dockview/rootDropTargetService.d.ts +35 -0
- package/dist/esm/dockview/rootDropTargetService.js +82 -0
- package/dist/esm/dockview/strictEventsSequencing.js +6 -6
- package/dist/esm/dockview/tabGroup.js +3 -3
- package/dist/esm/dockview/tabGroupAccent.js +1 -3
- package/dist/esm/dockview/watermarkService.d.ts +30 -0
- package/dist/esm/dockview/watermarkService.js +56 -0
- package/dist/esm/dom.js +1 -1
- package/dist/esm/events.js +1 -1
- package/dist/esm/gridview/baseComponentGridview.d.ts +1 -1
- package/dist/esm/gridview/baseComponentGridview.js +5 -10
- package/dist/esm/gridview/branchNode.js +13 -15
- package/dist/esm/gridview/gridview.js +8 -8
- package/dist/esm/gridview/gridviewComponent.d.ts +3 -3
- package/dist/esm/gridview/gridviewComponent.js +1 -6
- package/dist/esm/gridview/gridviewPanel.d.ts +1 -1
- package/dist/esm/index.d.ts +11 -4
- package/dist/esm/index.js +4 -0
- package/dist/esm/overlay/overlay.d.ts +43 -1
- package/dist/esm/overlay/overlay.js +78 -36
- package/dist/esm/overlay/overlayRenderContainer.js +3 -4
- package/dist/esm/paneview/draggablePaneviewPanel.d.ts +2 -2
- package/dist/esm/paneview/draggablePaneviewPanel.js +5 -5
- package/dist/esm/paneview/paneviewComponent.d.ts +3 -3
- package/dist/esm/paneview/paneviewComponent.js +7 -11
- package/dist/esm/popoutWindow.js +4 -4
- package/dist/esm/scrollbar.d.ts +1 -1
- package/dist/esm/scrollbar.js +7 -6
- package/dist/esm/splitview/splitview.d.ts +1 -1
- package/dist/esm/splitview/splitview.js +21 -20
- package/dist/esm/splitview/viewItem.js +1 -1
- package/dist/package/main.cjs.js +3550 -1546
- package/dist/package/main.cjs.min.js +2 -2
- package/dist/package/main.esm.min.mjs +2 -2
- package/dist/package/main.esm.mjs +3538 -1545
- package/dist/styles/dockview.css +283 -21
- package/package.json +10 -1
- package/dist/cjs/dockview/contextMenu.d.ts +0 -10
- package/dist/cjs/dockview/contextMenu.js +0 -313
- package/dist/esm/dockview/contextMenu.d.ts +0 -10
- package/dist/esm/dockview/contextMenu.js +0 -228
|
@@ -3,7 +3,7 @@ import { getPanelData } from '../dnd/dataTransfer';
|
|
|
3
3
|
import { addClasses, isAncestor, removeClasses, toggleClass } from '../dom';
|
|
4
4
|
import { addDisposableListener, DockviewEvent, Emitter, } from '../events';
|
|
5
5
|
import { DockviewWillShowOverlayLocationEvent, } from './events';
|
|
6
|
-
import { CompositeDisposable
|
|
6
|
+
import { CompositeDisposable } from '../lifecycle';
|
|
7
7
|
import { ContentContainer, } from './components/panel/content';
|
|
8
8
|
import { TabsContainer, } from './components/titlebar/tabsContainer';
|
|
9
9
|
import { DockviewUnhandledDragOverEvent, } from './options';
|
|
@@ -55,6 +55,14 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
55
55
|
get activePanel() {
|
|
56
56
|
return this._activePanel;
|
|
57
57
|
}
|
|
58
|
+
/** DOM id of the content container (the group's tabpanel), referenced by each tab's `aria-controls`. */
|
|
59
|
+
get contentContainerId() {
|
|
60
|
+
return this.contentContainer.element.id;
|
|
61
|
+
}
|
|
62
|
+
/** The group's content drop target — lets keyboard docking preview a drop here. */
|
|
63
|
+
get contentDropTarget() {
|
|
64
|
+
return this.contentContainer.dropTarget;
|
|
65
|
+
}
|
|
58
66
|
get locked() {
|
|
59
67
|
return this._locked;
|
|
60
68
|
}
|
|
@@ -103,11 +111,7 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
103
111
|
if ((_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.layout) {
|
|
104
112
|
this._activePanel.layout(this._width, this._height);
|
|
105
113
|
}
|
|
106
|
-
|
|
107
|
-
this._rightHeaderActions ||
|
|
108
|
-
this._prefixHeaderActions) {
|
|
109
|
-
this.updateHeaderActions();
|
|
110
|
-
}
|
|
114
|
+
this.updateHeaderActions();
|
|
111
115
|
}
|
|
112
116
|
get location() {
|
|
113
117
|
return this._location;
|
|
@@ -127,14 +131,15 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
127
131
|
applyZones(['top', 'bottom', 'left', 'right', 'center']);
|
|
128
132
|
break;
|
|
129
133
|
case 'floating':
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
: ['top', 'bottom', 'left', 'right', 'center']);
|
|
134
|
+
// Floating windows host their own nested gridview, so an edge
|
|
135
|
+
// drop splits the window's layout just like the main grid.
|
|
136
|
+
applyZones(['top', 'bottom', 'left', 'right', 'center']);
|
|
134
137
|
toggleClass(this.container, 'dv-groupview-floating', true);
|
|
135
138
|
break;
|
|
136
139
|
case 'popout':
|
|
137
|
-
|
|
140
|
+
// Popout windows host their own nested gridview, so an edge
|
|
141
|
+
// drop splits the window's layout just like the main grid.
|
|
142
|
+
applyZones(['top', 'bottom', 'left', 'right', 'center']);
|
|
138
143
|
toggleClass(this.container, 'dv-groupview-popout', true);
|
|
139
144
|
break;
|
|
140
145
|
case 'edge':
|
|
@@ -156,9 +161,6 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
156
161
|
this.groupPanel = groupPanel;
|
|
157
162
|
this._isGroupActive = false;
|
|
158
163
|
this._locked = false;
|
|
159
|
-
this._rightHeaderActionsDisposable = new MutableDisposable();
|
|
160
|
-
this._leftHeaderActionsDisposable = new MutableDisposable();
|
|
161
|
-
this._prefixHeaderActionsDisposable = new MutableDisposable();
|
|
162
164
|
this._location = { type: 'grid' };
|
|
163
165
|
this.mostRecentlyUsed = [];
|
|
164
166
|
this._overwriteRenderContainer = null;
|
|
@@ -193,8 +195,8 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
193
195
|
this.onDidRemovePanel = this._onDidRemovePanel.event;
|
|
194
196
|
this._onDidActivePanelChange = new Emitter();
|
|
195
197
|
this.onDidActivePanelChange = this._onDidActivePanelChange.event;
|
|
196
|
-
this.
|
|
197
|
-
this.
|
|
198
|
+
this._onUnhandledDragOver = new Emitter();
|
|
199
|
+
this.onUnhandledDragOver = this._onUnhandledDragOver.event;
|
|
198
200
|
this._tabGroups = [];
|
|
199
201
|
this._tabGroupMap = new Map();
|
|
200
202
|
this._panelToTabGroup = new Map();
|
|
@@ -213,6 +215,9 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
213
215
|
this._onDidTabGroupCollapsedChange = new Emitter();
|
|
214
216
|
this.onDidTabGroupCollapsedChange = this._onDidTabGroupCollapsedChange.event;
|
|
215
217
|
toggleClass(this.container, 'dv-groupview', true);
|
|
218
|
+
// Each group is a navigable region, labelled by its active panel
|
|
219
|
+
// (see `updateAccessibleLabel`, driven on activation / title change).
|
|
220
|
+
this.container.setAttribute('role', 'region');
|
|
216
221
|
this._api = new DockviewApi(this.accessor);
|
|
217
222
|
this.tabsContainer = new TabsContainer(this.accessor, this.groupPanel);
|
|
218
223
|
this.contentContainer = new ContentContainer(this.accessor, this);
|
|
@@ -221,7 +226,10 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
221
226
|
this.locked = (_a = options.locked) !== null && _a !== void 0 ? _a : false;
|
|
222
227
|
this.headerPosition =
|
|
223
228
|
(_b = options.headerPosition) !== null && _b !== void 0 ? _b : accessor.defaultHeaderPosition;
|
|
224
|
-
this.addDisposables(
|
|
229
|
+
this.addDisposables(
|
|
230
|
+
// Keep the region's accessible name in sync when the active
|
|
231
|
+
// panel's title changes (no-op when a non-active title changes).
|
|
232
|
+
this._onDidPanelTitleChange.event(() => this.updateAccessibleLabel()), this._onTabDragStart, this._onGroupDragStart, this._onWillShowOverlay, this.tabsContainer.onTabDragStart((event) => {
|
|
225
233
|
this._onTabDragStart.fire(event);
|
|
226
234
|
}), this.tabsContainer.onGroupDragStart((event) => {
|
|
227
235
|
this._onGroupDragStart.fire(event);
|
|
@@ -284,7 +292,7 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
284
292
|
group: this.groupPanel,
|
|
285
293
|
getData: getPanelData,
|
|
286
294
|
}));
|
|
287
|
-
}), this._onMove, this._onDidChange, this._onDidDrop, this._onWillDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange, this.
|
|
295
|
+
}), this._onMove, this._onDidChange, this._onDidDrop, this._onWillDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange, this._onUnhandledDragOver, this._onDidPanelTitleChange, this._onDidPanelParametersChange, this._onDidCreateTabGroup, this._onDidDestroyTabGroup, this._onDidAddPanelToTabGroup, this._onDidRemovePanelFromTabGroup, this._onDidTabGroupChange, this._onDidTabGroupCollapsedChange, this._onDidCreateTabGroup.event(() => {
|
|
288
296
|
this._scheduleTabGroupUpdate();
|
|
289
297
|
}), this._onDidDestroyTabGroup.event(() => {
|
|
290
298
|
this._scheduleTabGroupUpdate();
|
|
@@ -310,7 +318,22 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
310
318
|
}
|
|
311
319
|
});
|
|
312
320
|
}
|
|
321
|
+
/**
|
|
322
|
+
* Bracket a tab-group mutation as a layout transaction. `accessor` is
|
|
323
|
+
* always a full {@link DockviewComponent} in production; the optional-call
|
|
324
|
+
* fallback keeps partial test doubles (which omit `mutation`) working.
|
|
325
|
+
* When nested inside a larger operation (a drag-driven move, fromJSON
|
|
326
|
+
* restore) the component's depth counter folds it into the outer one.
|
|
327
|
+
*/
|
|
328
|
+
_bracketTabGroupMutation(func) {
|
|
329
|
+
return this.accessor.mutation
|
|
330
|
+
? this.accessor.mutation('tab-group', func)
|
|
331
|
+
: func();
|
|
332
|
+
}
|
|
313
333
|
createTabGroup(options) {
|
|
334
|
+
return this._bracketTabGroupMutation(() => this._doCreateTabGroup(options));
|
|
335
|
+
}
|
|
336
|
+
_doCreateTabGroup(options) {
|
|
314
337
|
var _a;
|
|
315
338
|
const id = (_a = options === null || options === void 0 ? void 0 : options.id) !== null && _a !== void 0 ? _a : `tg-${this.id}-${this._tabGroupIdCounter++}`;
|
|
316
339
|
const tabGroup = new TabGroup(id, {
|
|
@@ -344,14 +367,16 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
344
367
|
if (!tabGroup) {
|
|
345
368
|
return;
|
|
346
369
|
}
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
370
|
+
this._bracketTabGroupMutation(() => {
|
|
371
|
+
// Remove all panels from the group (they stay in the flat panel list)
|
|
372
|
+
const panelIds = [...tabGroup.panelIds];
|
|
373
|
+
for (const panelId of panelIds) {
|
|
374
|
+
tabGroup.removePanel(panelId);
|
|
375
|
+
this._panelToTabGroup.delete(panelId);
|
|
376
|
+
this._onDidRemovePanelFromTabGroup.fire({ tabGroup, panelId });
|
|
377
|
+
}
|
|
378
|
+
tabGroup.dispose();
|
|
379
|
+
});
|
|
355
380
|
}
|
|
356
381
|
addPanelToTabGroup(tabGroupId, panelId, index) {
|
|
357
382
|
const tabGroup = this._tabGroupMap.get(tabGroupId);
|
|
@@ -364,18 +389,20 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
364
389
|
}
|
|
365
390
|
// Remove from any existing group first
|
|
366
391
|
const existingGroup = this.getTabGroupForPanel(panelId);
|
|
367
|
-
if (existingGroup) {
|
|
368
|
-
|
|
369
|
-
return; // already in this group
|
|
370
|
-
}
|
|
371
|
-
this.removePanelFromTabGroup(panelId);
|
|
392
|
+
if ((existingGroup === null || existingGroup === void 0 ? void 0 : existingGroup.id) === tabGroupId) {
|
|
393
|
+
return; // already in this group — no mutation
|
|
372
394
|
}
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
395
|
+
this._bracketTabGroupMutation(() => {
|
|
396
|
+
if (existingGroup) {
|
|
397
|
+
this.removePanelFromTabGroup(panelId);
|
|
398
|
+
}
|
|
399
|
+
tabGroup.addPanel(panelId, index);
|
|
400
|
+
this._panelToTabGroup.set(panelId, tabGroup);
|
|
401
|
+
// Enforce contiguity: move the panel in the flat _panels array
|
|
402
|
+
// to the correct global position matching its group-local index
|
|
403
|
+
this._enforceContiguity(tabGroup, panelId);
|
|
404
|
+
this._onDidAddPanelToTabGroup.fire({ tabGroup, panelId });
|
|
405
|
+
});
|
|
379
406
|
}
|
|
380
407
|
/**
|
|
381
408
|
* Move a panel to a new index within its tab group.
|
|
@@ -383,7 +410,7 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
383
410
|
*/
|
|
384
411
|
movePanelWithinGroup(tabGroupId, panelId, newIndex) {
|
|
385
412
|
const tabGroup = this._tabGroupMap.get(tabGroupId);
|
|
386
|
-
if (!tabGroup ||
|
|
413
|
+
if (!(tabGroup === null || tabGroup === void 0 ? void 0 : tabGroup.containsPanel(panelId))) {
|
|
387
414
|
return;
|
|
388
415
|
}
|
|
389
416
|
// Remove and re-add at new index within the group
|
|
@@ -523,13 +550,15 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
523
550
|
if (!tabGroup) {
|
|
524
551
|
return;
|
|
525
552
|
}
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
tabGroup.
|
|
532
|
-
|
|
553
|
+
this._bracketTabGroupMutation(() => {
|
|
554
|
+
tabGroup.removePanel(panelId);
|
|
555
|
+
this._panelToTabGroup.delete(panelId);
|
|
556
|
+
this._onDidRemovePanelFromTabGroup.fire({ tabGroup, panelId });
|
|
557
|
+
// Auto-destroy empty groups
|
|
558
|
+
if (tabGroup.isEmpty) {
|
|
559
|
+
tabGroup.dispose();
|
|
560
|
+
}
|
|
561
|
+
});
|
|
533
562
|
}
|
|
534
563
|
getTabGroups() {
|
|
535
564
|
return this._tabGroups;
|
|
@@ -594,7 +623,7 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
594
623
|
for (let i = activePanelIndex + 1; i < this._panels.length; i++) {
|
|
595
624
|
const candidate = this._panels[i];
|
|
596
625
|
const candidateGroup = this._findTabGroupForPanel(candidate.id);
|
|
597
|
-
if (!candidateGroup ||
|
|
626
|
+
if (!(candidateGroup === null || candidateGroup === void 0 ? void 0 : candidateGroup.collapsed)) {
|
|
598
627
|
this.doSetActivePanel(candidate);
|
|
599
628
|
this.updateContainer();
|
|
600
629
|
return;
|
|
@@ -603,7 +632,7 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
603
632
|
for (let i = activePanelIndex - 1; i >= 0; i--) {
|
|
604
633
|
const candidate = this._panels[i];
|
|
605
634
|
const candidateGroup = this._findTabGroupForPanel(candidate.id);
|
|
606
|
-
if (!candidateGroup ||
|
|
635
|
+
if (!(candidateGroup === null || candidateGroup === void 0 ? void 0 : candidateGroup.collapsed)) {
|
|
607
636
|
this.doSetActivePanel(candidate);
|
|
608
637
|
this.updateContainer();
|
|
609
638
|
return;
|
|
@@ -633,9 +662,9 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
633
662
|
restoreTabGroups(serializedGroups) {
|
|
634
663
|
// Bump counter past any restored numeric suffixes to avoid ID collisions
|
|
635
664
|
for (const data of serializedGroups) {
|
|
636
|
-
const match =
|
|
665
|
+
const match = /-(\d+)$/.exec(data.id);
|
|
637
666
|
if (match) {
|
|
638
|
-
const num = parseInt(match[1], 10) + 1;
|
|
667
|
+
const num = Number.parseInt(match[1], 10) + 1;
|
|
639
668
|
if (num > this._tabGroupIdCounter) {
|
|
640
669
|
this._tabGroupIdCounter = num;
|
|
641
670
|
}
|
|
@@ -669,6 +698,9 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
669
698
|
focusContent() {
|
|
670
699
|
this.contentContainer.element.focus();
|
|
671
700
|
}
|
|
701
|
+
focusActiveTab() {
|
|
702
|
+
this.tabsContainer.focusActiveTab();
|
|
703
|
+
}
|
|
672
704
|
set renderContainer(value) {
|
|
673
705
|
this.panels.forEach((panel) => {
|
|
674
706
|
this.renderContainer.detatch(panel);
|
|
@@ -705,54 +737,20 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
705
737
|
this.updateHeaderActions();
|
|
706
738
|
}
|
|
707
739
|
updateHeaderActions() {
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
this.tabsContainer.setRightActionsElement(undefined);
|
|
723
|
-
}
|
|
724
|
-
if (this.accessor.options.createLeftHeaderActionComponent) {
|
|
725
|
-
this._leftHeaderActions =
|
|
726
|
-
this.accessor.options.createLeftHeaderActionComponent(this.groupPanel);
|
|
727
|
-
this._leftHeaderActionsDisposable.value = this._leftHeaderActions;
|
|
728
|
-
this._leftHeaderActions.init({
|
|
729
|
-
containerApi: this._api,
|
|
730
|
-
api: this.groupPanel.api,
|
|
731
|
-
group: this.groupPanel,
|
|
732
|
-
});
|
|
733
|
-
this.tabsContainer.setLeftActionsElement(this._leftHeaderActions.element);
|
|
734
|
-
}
|
|
735
|
-
else {
|
|
736
|
-
this._leftHeaderActions = undefined;
|
|
737
|
-
this._leftHeaderActionsDisposable.dispose();
|
|
738
|
-
this.tabsContainer.setLeftActionsElement(undefined);
|
|
739
|
-
}
|
|
740
|
-
if (this.accessor.options.createPrefixHeaderActionComponent) {
|
|
741
|
-
this._prefixHeaderActions =
|
|
742
|
-
this.accessor.options.createPrefixHeaderActionComponent(this.groupPanel);
|
|
743
|
-
this._prefixHeaderActionsDisposable.value =
|
|
744
|
-
this._prefixHeaderActions;
|
|
745
|
-
this._prefixHeaderActions.init({
|
|
746
|
-
containerApi: this._api,
|
|
747
|
-
api: this.groupPanel.api,
|
|
748
|
-
group: this.groupPanel,
|
|
749
|
-
});
|
|
750
|
-
this.tabsContainer.setPrefixActionsElement(this._prefixHeaderActions.element);
|
|
751
|
-
}
|
|
752
|
-
else {
|
|
753
|
-
this._prefixHeaderActions = undefined;
|
|
754
|
-
this._prefixHeaderActionsDisposable.dispose();
|
|
755
|
-
this.tabsContainer.setPrefixActionsElement(undefined);
|
|
740
|
+
var _a;
|
|
741
|
+
(_a = this.accessor.headerActionsService) === null || _a === void 0 ? void 0 : _a.refresh(this.groupPanel);
|
|
742
|
+
}
|
|
743
|
+
attachHeaderAction(slot, element) {
|
|
744
|
+
switch (slot) {
|
|
745
|
+
case 'left':
|
|
746
|
+
this.tabsContainer.setLeftActionsElement(element);
|
|
747
|
+
break;
|
|
748
|
+
case 'right':
|
|
749
|
+
this.tabsContainer.setRightActionsElement(element);
|
|
750
|
+
break;
|
|
751
|
+
case 'prefix':
|
|
752
|
+
this.tabsContainer.setPrefixActionsElement(element);
|
|
753
|
+
break;
|
|
756
754
|
}
|
|
757
755
|
}
|
|
758
756
|
rerender(panel) {
|
|
@@ -783,32 +781,26 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
783
781
|
return result;
|
|
784
782
|
}
|
|
785
783
|
moveToNext(options) {
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
if (!options.panel) {
|
|
790
|
-
options.panel = this.activePanel;
|
|
791
|
-
}
|
|
784
|
+
var _a;
|
|
785
|
+
options !== null && options !== void 0 ? options : (options = {});
|
|
786
|
+
(_a = options.panel) !== null && _a !== void 0 ? _a : (options.panel = this.activePanel);
|
|
792
787
|
const index = options.panel ? this.panels.indexOf(options.panel) : -1;
|
|
793
788
|
let normalizedIndex;
|
|
794
789
|
if (index < this.panels.length - 1) {
|
|
795
790
|
normalizedIndex = index + 1;
|
|
796
791
|
}
|
|
797
|
-
else if (
|
|
798
|
-
|
|
792
|
+
else if (options.suppressRoll) {
|
|
793
|
+
return;
|
|
799
794
|
}
|
|
800
795
|
else {
|
|
801
|
-
|
|
796
|
+
normalizedIndex = 0;
|
|
802
797
|
}
|
|
803
798
|
this.openPanel(this.panels[normalizedIndex]);
|
|
804
799
|
}
|
|
805
800
|
moveToPrevious(options) {
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
if (!options.panel) {
|
|
810
|
-
options.panel = this.activePanel;
|
|
811
|
-
}
|
|
801
|
+
var _a;
|
|
802
|
+
options !== null && options !== void 0 ? options : (options = {});
|
|
803
|
+
(_a = options.panel) !== null && _a !== void 0 ? _a : (options.panel = this.activePanel);
|
|
812
804
|
if (!options.panel) {
|
|
813
805
|
return;
|
|
814
806
|
}
|
|
@@ -817,11 +809,11 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
817
809
|
if (index > 0) {
|
|
818
810
|
normalizedIndex = index - 1;
|
|
819
811
|
}
|
|
820
|
-
else if (
|
|
821
|
-
|
|
812
|
+
else if (options.suppressRoll) {
|
|
813
|
+
return;
|
|
822
814
|
}
|
|
823
815
|
else {
|
|
824
|
-
|
|
816
|
+
normalizedIndex = this.panels.length - 1;
|
|
825
817
|
}
|
|
826
818
|
this.openPanel(this.panels[normalizedIndex]);
|
|
827
819
|
}
|
|
@@ -921,7 +913,7 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
921
913
|
if (!this._activePanel && this.panels.length > 0) {
|
|
922
914
|
const candidate = this._panels.find((p) => {
|
|
923
915
|
const tg = this._findTabGroupForPanel(p.id);
|
|
924
|
-
return !tg ||
|
|
916
|
+
return !(tg === null || tg === void 0 ? void 0 : tg.collapsed);
|
|
925
917
|
});
|
|
926
918
|
if (candidate) {
|
|
927
919
|
this.doSetActivePanel(candidate);
|
|
@@ -998,12 +990,15 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
998
990
|
this._onDidAddPanel.fire({ panel });
|
|
999
991
|
}
|
|
1000
992
|
doSetActivePanel(panel) {
|
|
993
|
+
var _a, _b, _c;
|
|
1001
994
|
if (this._activePanel === panel) {
|
|
1002
995
|
return;
|
|
1003
996
|
}
|
|
1004
997
|
this._activePanel = panel;
|
|
1005
998
|
if (panel) {
|
|
1006
999
|
this.tabsContainer.setActivePanel(panel);
|
|
1000
|
+
// Point the tabpanel's `aria-labelledby` at the now-active tab.
|
|
1001
|
+
this.contentContainer.setLabelledBy(this.tabsContainer.getTabId(panel.id));
|
|
1007
1002
|
this.contentContainer.openPanel(panel);
|
|
1008
1003
|
panel.layout(this._width, this._height);
|
|
1009
1004
|
this.updateMru(panel);
|
|
@@ -1011,8 +1006,23 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
1011
1006
|
this.contentContainer.refreshFocusState();
|
|
1012
1007
|
this._onDidActivePanelChange.fire({
|
|
1013
1008
|
panel,
|
|
1009
|
+
// `currentOrigin` is always present on the real component;
|
|
1010
|
+
// default to 'user' for minimal test accessors.
|
|
1011
|
+
origin: (_c = (_b = (_a = this.accessor).currentOrigin) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : 'user',
|
|
1014
1012
|
});
|
|
1015
1013
|
}
|
|
1014
|
+
this.updateAccessibleLabel();
|
|
1015
|
+
}
|
|
1016
|
+
/** Label the group region with its active panel's title (the WAI-ARIA region name). */
|
|
1017
|
+
updateAccessibleLabel() {
|
|
1018
|
+
var _a;
|
|
1019
|
+
const title = (_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.title;
|
|
1020
|
+
if (title) {
|
|
1021
|
+
this.container.setAttribute('aria-label', title);
|
|
1022
|
+
}
|
|
1023
|
+
else {
|
|
1024
|
+
this.container.removeAttribute('aria-label');
|
|
1025
|
+
}
|
|
1016
1026
|
}
|
|
1017
1027
|
updateMru(panel) {
|
|
1018
1028
|
if (this.mostRecentlyUsed.includes(panel)) {
|
|
@@ -1046,7 +1056,7 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
1046
1056
|
}
|
|
1047
1057
|
canDisplayOverlay(event, position, target) {
|
|
1048
1058
|
const firedEvent = new DockviewUnhandledDragOverEvent(event, target, position, getPanelData, this.accessor.getPanel(this.id));
|
|
1049
|
-
this.
|
|
1059
|
+
this._onUnhandledDragOver.fire(firedEvent);
|
|
1050
1060
|
return firedEvent.isAccepted;
|
|
1051
1061
|
}
|
|
1052
1062
|
handleDropEvent(type, event, position, index) {
|
|
@@ -7,7 +7,7 @@ import { IPanel, PanelUpdateEvent, Parameters } from '../panel/types';
|
|
|
7
7
|
import { IDockviewPanelModel } from './dockviewPanelModel';
|
|
8
8
|
import { DockviewComponent } from './dockviewComponent';
|
|
9
9
|
import { DockviewPanelRenderer } from '../overlay/overlayRenderContainer';
|
|
10
|
-
import {
|
|
10
|
+
import { Constraints } from '../gridview/gridviewPanel';
|
|
11
11
|
export interface IDockviewPanel extends IDisposable, IPanel {
|
|
12
12
|
readonly view: IDockviewPanelModel;
|
|
13
13
|
readonly group: DockviewGroupPanel;
|
|
@@ -52,7 +52,7 @@ export declare class DockviewPanel extends CompositeDisposable implements IDockv
|
|
|
52
52
|
get maximumHeight(): number | undefined;
|
|
53
53
|
constructor(id: string, component: string, tabComponent: string | undefined, accessor: DockviewComponent, containerApi: DockviewApi, group: DockviewGroupPanel, view: IDockviewPanelModel, options: {
|
|
54
54
|
renderer?: DockviewPanelRenderer;
|
|
55
|
-
} & Partial<
|
|
55
|
+
} & Partial<Constraints>);
|
|
56
56
|
init(params: IGroupPanelInitParameters): void;
|
|
57
57
|
focus(): void;
|
|
58
58
|
toJSON(): GroupviewPanelState;
|
|
@@ -103,9 +103,8 @@ export class DockviewPanel extends CompositeDisposable {
|
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
105
|
update(event) {
|
|
106
|
-
var _a;
|
|
107
106
|
// merge the new parameters with the existing parameters
|
|
108
|
-
this._params = Object.assign(Object.assign({},
|
|
107
|
+
this._params = Object.assign(Object.assign({}, this._params), event.params);
|
|
109
108
|
/**
|
|
110
109
|
* delete new keys that have a value of undefined,
|
|
111
110
|
* allow values of null
|
|
@@ -56,16 +56,37 @@ export declare class EdgeGroupView implements IView {
|
|
|
56
56
|
readonly priority = LayoutPriority.Low;
|
|
57
57
|
private _isCollapsed;
|
|
58
58
|
private _lastExpandedSize;
|
|
59
|
-
private
|
|
60
|
-
private
|
|
59
|
+
private _baseCollapsedSize;
|
|
60
|
+
private _baseMinimumSize;
|
|
61
|
+
private _gapAdd;
|
|
61
62
|
private readonly _expandedMaximumSize;
|
|
63
|
+
private _measuredTabSize;
|
|
64
|
+
private readonly _tabSizeDisposables;
|
|
65
|
+
/**
|
|
66
|
+
* The effective (pre-gap) collapsed size: the measured tab-strip size when
|
|
67
|
+
* available, otherwise the configured/theme base.
|
|
68
|
+
*/
|
|
69
|
+
private get _effectiveBaseCollapsed();
|
|
62
70
|
get minimumSize(): number;
|
|
63
71
|
get maximumSize(): number;
|
|
64
72
|
get element(): HTMLElement;
|
|
65
73
|
get isCollapsed(): boolean;
|
|
66
74
|
get lastExpandedSize(): number;
|
|
67
75
|
get collapsedSize(): number;
|
|
68
|
-
constructor(options: EdgeGroupOptions, group: IEdgeGroupHost, orientation: 'horizontal' | 'vertical');
|
|
76
|
+
constructor(options: EdgeGroupOptions, group: IEdgeGroupHost, orientation: 'horizontal' | 'vertical', gapAdd?: number);
|
|
77
|
+
/**
|
|
78
|
+
* Watch the group's tab strip so the collapsed size follows the live tab
|
|
79
|
+
* height. The strip's cross-axis size (height for top/bottom, width for
|
|
80
|
+
* left/right) is exactly what a collapsed edge group should occupy; a
|
|
81
|
+
* ResizeObserver keeps them in sync when the tab height changes at runtime.
|
|
82
|
+
*/
|
|
83
|
+
private _observeTabStrip;
|
|
84
|
+
/**
|
|
85
|
+
* Apply a freshly-measured tab-strip cross size. When the group is
|
|
86
|
+
* collapsed this resizes it in the parent splitview so the collapsed strip
|
|
87
|
+
* always shows the full tab height.
|
|
88
|
+
*/
|
|
89
|
+
private _applyMeasuredTabSize;
|
|
69
90
|
layout(size: number, orthogonalSize: number): void;
|
|
70
91
|
setCollapsed(collapsed: boolean): void;
|
|
71
92
|
setVisible(_visible: boolean): void;
|
|
@@ -76,11 +97,12 @@ export declare class EdgeGroupView implements IView {
|
|
|
76
97
|
*/
|
|
77
98
|
restoreExpandedSize(size: number): void;
|
|
78
99
|
/**
|
|
79
|
-
* Apply new
|
|
80
|
-
* or gap change.
|
|
81
|
-
*
|
|
100
|
+
* Apply a new base (pre-gap) collapsed size, base minimum size and gap
|
|
101
|
+
* contribution after a theme or gap change. Base values come from the
|
|
102
|
+
* original config; the ShellManager owns the gap arithmetic. A live
|
|
103
|
+
* measured tab size (if any) continues to win over the base collapsed size.
|
|
82
104
|
*/
|
|
83
|
-
|
|
105
|
+
updateSizing(baseCollapsedSize: number, baseMinimumSize: number | undefined, gapAdd: number): void;
|
|
84
106
|
dispose(): void;
|
|
85
107
|
}
|
|
86
108
|
export declare class ShellManager implements IDisposable {
|