dockview-core 4.10.0 → 4.12.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/dist/cjs/api/component.api.d.ts +3 -1
- package/dist/cjs/api/component.api.js +2 -2
- package/dist/cjs/api/dockviewPanelApi.d.ts +1 -1
- package/dist/cjs/dockview/components/panel/content.d.ts +7 -0
- package/dist/cjs/dockview/components/panel/content.js +11 -0
- package/dist/cjs/dockview/dockviewComponent.d.ts +7 -1
- package/dist/cjs/dockview/dockviewComponent.js +159 -84
- package/dist/cjs/dockview/dockviewGroupPanel.d.ts +1 -0
- package/dist/cjs/dockview/dockviewGroupPanel.js +43 -1
- package/dist/cjs/dockview/dockviewGroupPanelModel.js +3 -0
- package/dist/cjs/dockview/dockviewPanel.d.ts +6 -4
- package/dist/cjs/dockview/dockviewPanel.js +12 -0
- package/dist/dockview-core.amd.js +162 -35
- package/dist/dockview-core.amd.js.map +1 -1
- package/dist/dockview-core.amd.min.js +2 -2
- package/dist/dockview-core.amd.min.js.map +1 -1
- package/dist/dockview-core.amd.min.noStyle.js +2 -2
- package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
- package/dist/dockview-core.amd.noStyle.js +162 -35
- package/dist/dockview-core.amd.noStyle.js.map +1 -1
- package/dist/dockview-core.cjs.js +162 -35
- package/dist/dockview-core.cjs.js.map +1 -1
- package/dist/dockview-core.esm.js +162 -35
- package/dist/dockview-core.esm.js.map +1 -1
- package/dist/dockview-core.esm.min.js +2 -2
- package/dist/dockview-core.esm.min.js.map +1 -1
- package/dist/dockview-core.js +162 -35
- package/dist/dockview-core.js.map +1 -1
- 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 +162 -35
- package/dist/dockview-core.noStyle.js.map +1 -1
- package/dist/esm/api/component.api.d.ts +3 -1
- package/dist/esm/api/component.api.js +2 -2
- package/dist/esm/api/dockviewPanelApi.d.ts +1 -1
- package/dist/esm/dockview/components/panel/content.d.ts +7 -0
- package/dist/esm/dockview/components/panel/content.js +11 -0
- package/dist/esm/dockview/dockviewComponent.d.ts +7 -1
- package/dist/esm/dockview/dockviewComponent.js +90 -31
- package/dist/esm/dockview/dockviewGroupPanel.d.ts +1 -0
- package/dist/esm/dockview/dockviewGroupPanel.js +43 -1
- package/dist/esm/dockview/dockviewGroupPanelModel.js +3 -0
- package/dist/esm/dockview/dockviewPanel.d.ts +6 -4
- package/dist/esm/dockview/dockviewPanel.js +12 -0
- package/package.json +1 -1
|
@@ -481,7 +481,9 @@ export declare class DockviewApi implements CommonApi<SerializedDockview> {
|
|
|
481
481
|
/**
|
|
482
482
|
* Create a component from a serialized object.
|
|
483
483
|
*/
|
|
484
|
-
fromJSON(data: SerializedDockview
|
|
484
|
+
fromJSON(data: SerializedDockview, options?: {
|
|
485
|
+
reuseExistingPanels: boolean;
|
|
486
|
+
}): void;
|
|
485
487
|
/**
|
|
486
488
|
* Create a serialized object of the current component.
|
|
487
489
|
*/
|
|
@@ -667,8 +667,8 @@ export class DockviewApi {
|
|
|
667
667
|
/**
|
|
668
668
|
* Create a component from a serialized object.
|
|
669
669
|
*/
|
|
670
|
-
fromJSON(data) {
|
|
671
|
-
this.component.fromJSON(data);
|
|
670
|
+
fromJSON(data, options) {
|
|
671
|
+
this.component.fromJSON(data, options);
|
|
672
672
|
}
|
|
673
673
|
/**
|
|
674
674
|
* Create a serialized object of the current component.
|
|
@@ -18,7 +18,7 @@ export interface ActiveGroupEvent {
|
|
|
18
18
|
export interface GroupChangedEvent {
|
|
19
19
|
}
|
|
20
20
|
export type DockviewPanelMoveParams = DockviewGroupMoveParams;
|
|
21
|
-
export interface DockviewPanelApi extends Omit<GridviewPanelApi, 'setVisible' | 'onDidConstraintsChange'
|
|
21
|
+
export interface DockviewPanelApi extends Omit<GridviewPanelApi, 'setVisible' | 'onDidConstraintsChange'> {
|
|
22
22
|
/**
|
|
23
23
|
* The id of the tab component renderer
|
|
24
24
|
*
|
|
@@ -17,6 +17,7 @@ export interface IContentContainer extends IDisposable {
|
|
|
17
17
|
renderPanel(panel: IDockviewPanel, options: {
|
|
18
18
|
asActive: boolean;
|
|
19
19
|
}): void;
|
|
20
|
+
refreshFocusState(): void;
|
|
20
21
|
}
|
|
21
22
|
export declare class ContentContainer extends CompositeDisposable implements IContentContainer {
|
|
22
23
|
private readonly accessor;
|
|
@@ -24,6 +25,7 @@ export declare class ContentContainer extends CompositeDisposable implements ICo
|
|
|
24
25
|
private readonly _element;
|
|
25
26
|
private panel;
|
|
26
27
|
private readonly disposable;
|
|
28
|
+
private focusTracker;
|
|
27
29
|
private readonly _onDidFocus;
|
|
28
30
|
readonly onDidFocus: Event<void>;
|
|
29
31
|
private readonly _onDidBlur;
|
|
@@ -40,4 +42,9 @@ export declare class ContentContainer extends CompositeDisposable implements ICo
|
|
|
40
42
|
layout(_width: number, _height: number): void;
|
|
41
43
|
closePanel(): void;
|
|
42
44
|
dispose(): void;
|
|
45
|
+
/**
|
|
46
|
+
* Refresh the focus tracker state to handle cases where focus state
|
|
47
|
+
* gets out of sync due to programmatic panel activation
|
|
48
|
+
*/
|
|
49
|
+
refreshFocusState(): void;
|
|
43
50
|
}
|
|
@@ -92,6 +92,7 @@ export class ContentContainer extends CompositeDisposable {
|
|
|
92
92
|
}
|
|
93
93
|
if (doRender) {
|
|
94
94
|
const focusTracker = trackFocus(container);
|
|
95
|
+
this.focusTracker = focusTracker;
|
|
95
96
|
const disposable = new CompositeDisposable();
|
|
96
97
|
disposable.addDisposables(focusTracker, focusTracker.onDidFocus(() => this._onDidFocus.fire()), focusTracker.onDidBlur(() => this._onDidBlur.fire()));
|
|
97
98
|
this.disposable.value = disposable;
|
|
@@ -119,4 +120,14 @@ export class ContentContainer extends CompositeDisposable {
|
|
|
119
120
|
this.disposable.dispose();
|
|
120
121
|
super.dispose();
|
|
121
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* Refresh the focus tracker state to handle cases where focus state
|
|
125
|
+
* gets out of sync due to programmatic panel activation
|
|
126
|
+
*/
|
|
127
|
+
refreshFocusState() {
|
|
128
|
+
var _a;
|
|
129
|
+
if ((_a = this.focusTracker) === null || _a === void 0 ? void 0 : _a.refreshState) {
|
|
130
|
+
this.focusTracker.refreshState();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
122
133
|
}
|
|
@@ -94,6 +94,7 @@ type MoveGroupOrPanelOptions = {
|
|
|
94
94
|
index?: number;
|
|
95
95
|
};
|
|
96
96
|
skipSetActive?: boolean;
|
|
97
|
+
keepEmptyGroups?: boolean;
|
|
97
98
|
};
|
|
98
99
|
export interface FloatingGroupOptions {
|
|
99
100
|
x?: number;
|
|
@@ -175,6 +176,9 @@ export interface IDockviewComponent extends IBaseGrid<DockviewGroupPanel> {
|
|
|
175
176
|
window: Window;
|
|
176
177
|
}) => void;
|
|
177
178
|
}): Promise<boolean>;
|
|
179
|
+
fromJSON(data: any, options?: {
|
|
180
|
+
reuseExistingPanels: boolean;
|
|
181
|
+
}): void;
|
|
178
182
|
}
|
|
179
183
|
export declare class DockviewComponent extends BaseGrid<DockviewGroupPanel> implements IDockviewComponent {
|
|
180
184
|
private readonly nextGroupId;
|
|
@@ -260,7 +264,9 @@ export declare class DockviewComponent extends BaseGrid<DockviewGroupPanel> impl
|
|
|
260
264
|
* @returns A JSON respresentation of the layout
|
|
261
265
|
*/
|
|
262
266
|
toJSON(): SerializedDockview;
|
|
263
|
-
fromJSON(data: SerializedDockview
|
|
267
|
+
fromJSON(data: SerializedDockview, options?: {
|
|
268
|
+
reuseExistingPanels: boolean;
|
|
269
|
+
}): void;
|
|
264
270
|
clear(): void;
|
|
265
271
|
closeAllGroups(): void;
|
|
266
272
|
addPanel<T extends object = Parameters>(options: AddPanelOptions<T>): DockviewPanel;
|
|
@@ -635,7 +635,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
635
635
|
: (_e = (_d = this.options.floatingGroupBounds) === null || _d === void 0 ? void 0 : _d.minimumHeightWithinViewport) !== null && _e !== void 0 ? _e : DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE }));
|
|
636
636
|
const el = group.element.querySelector('.dv-void-container');
|
|
637
637
|
if (!el) {
|
|
638
|
-
throw new Error('failed to find drag handle');
|
|
638
|
+
throw new Error('dockview: failed to find drag handle');
|
|
639
639
|
}
|
|
640
640
|
overlay.setupDrag(el, {
|
|
641
641
|
inDragMode: typeof (options === null || options === void 0 ? void 0 : options.inDragMode) === 'boolean'
|
|
@@ -709,7 +709,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
709
709
|
case 'right':
|
|
710
710
|
return this.createGroupAtLocation([this.gridview.length], undefined, options); // insert into last position
|
|
711
711
|
default:
|
|
712
|
-
throw new Error(`unsupported position ${position}`);
|
|
712
|
+
throw new Error(`dockview: unsupported position ${position}`);
|
|
713
713
|
}
|
|
714
714
|
}
|
|
715
715
|
updateOptions(options) {
|
|
@@ -855,15 +855,48 @@ export class DockviewComponent extends BaseGrid {
|
|
|
855
855
|
}
|
|
856
856
|
return result;
|
|
857
857
|
}
|
|
858
|
-
fromJSON(data) {
|
|
858
|
+
fromJSON(data, options) {
|
|
859
859
|
var _a, _b;
|
|
860
|
+
const existingPanels = new Map();
|
|
861
|
+
let tempGroup;
|
|
862
|
+
if (options === null || options === void 0 ? void 0 : options.reuseExistingPanels) {
|
|
863
|
+
/**
|
|
864
|
+
* What are we doing here?
|
|
865
|
+
*
|
|
866
|
+
* 1. Create a temporary group to hold any panels that currently exist and that also exist in the new layout
|
|
867
|
+
* 2. Remove that temporary group from the group mapping so that it doesn't get cleared when we clear the layout
|
|
868
|
+
*/
|
|
869
|
+
tempGroup = this.createGroup();
|
|
870
|
+
this._groups.delete(tempGroup.api.id);
|
|
871
|
+
const newPanels = Object.keys(data.panels);
|
|
872
|
+
for (const panel of this.panels) {
|
|
873
|
+
if (newPanels.includes(panel.api.id)) {
|
|
874
|
+
existingPanels.set(panel.api.id, panel);
|
|
875
|
+
}
|
|
876
|
+
}
|
|
877
|
+
this.movingLock(() => {
|
|
878
|
+
Array.from(existingPanels.values()).forEach((panel) => {
|
|
879
|
+
this.moveGroupOrPanel({
|
|
880
|
+
from: {
|
|
881
|
+
groupId: panel.api.group.api.id,
|
|
882
|
+
panelId: panel.api.id,
|
|
883
|
+
},
|
|
884
|
+
to: {
|
|
885
|
+
group: tempGroup,
|
|
886
|
+
position: 'center',
|
|
887
|
+
},
|
|
888
|
+
keepEmptyGroups: true,
|
|
889
|
+
});
|
|
890
|
+
});
|
|
891
|
+
});
|
|
892
|
+
}
|
|
860
893
|
this.clear();
|
|
861
894
|
if (typeof data !== 'object' || data === null) {
|
|
862
|
-
throw new Error('serialized layout must be a non-null object');
|
|
895
|
+
throw new Error('dockview: serialized layout must be a non-null object');
|
|
863
896
|
}
|
|
864
897
|
const { grid, panels, activeGroup } = data;
|
|
865
898
|
if (grid.root.type !== 'branch' || !Array.isArray(grid.root.data)) {
|
|
866
|
-
throw new Error('root must be of type branch');
|
|
899
|
+
throw new Error('dockview: root must be of type branch');
|
|
867
900
|
}
|
|
868
901
|
try {
|
|
869
902
|
// take note of the existing dimensions
|
|
@@ -872,7 +905,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
872
905
|
const createGroupFromSerializedState = (data) => {
|
|
873
906
|
const { id, locked, hideHeader, views, activeView } = data;
|
|
874
907
|
if (typeof id !== 'string') {
|
|
875
|
-
throw new Error('group id must be of type string');
|
|
908
|
+
throw new Error('dockview: group id must be of type string');
|
|
876
909
|
}
|
|
877
910
|
const group = this.createGroup({
|
|
878
911
|
id,
|
|
@@ -887,17 +920,38 @@ export class DockviewComponent extends BaseGrid {
|
|
|
887
920
|
* In running this section first we avoid firing lots of 'add' events in the event of a failure
|
|
888
921
|
* due to a corruption of input data.
|
|
889
922
|
*/
|
|
890
|
-
const
|
|
891
|
-
|
|
923
|
+
const existingPanel = existingPanels.get(child);
|
|
924
|
+
if (tempGroup && existingPanel) {
|
|
925
|
+
this.movingLock(() => {
|
|
926
|
+
tempGroup.model.removePanel(existingPanel);
|
|
927
|
+
});
|
|
928
|
+
createdPanels.push(existingPanel);
|
|
929
|
+
existingPanel.updateFromStateModel(panels[child]);
|
|
930
|
+
}
|
|
931
|
+
else {
|
|
932
|
+
const panel = this._deserializer.fromJSON(panels[child], group);
|
|
933
|
+
createdPanels.push(panel);
|
|
934
|
+
}
|
|
892
935
|
}
|
|
893
936
|
for (let i = 0; i < views.length; i++) {
|
|
894
937
|
const panel = createdPanels[i];
|
|
895
938
|
const isActive = typeof activeView === 'string' &&
|
|
896
939
|
activeView === panel.id;
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
940
|
+
const hasExisting = existingPanels.has(panel.api.id);
|
|
941
|
+
if (hasExisting) {
|
|
942
|
+
this.movingLock(() => {
|
|
943
|
+
group.model.openPanel(panel, {
|
|
944
|
+
skipSetActive: !isActive,
|
|
945
|
+
skipSetGroupActive: true,
|
|
946
|
+
});
|
|
947
|
+
});
|
|
948
|
+
}
|
|
949
|
+
else {
|
|
950
|
+
group.model.openPanel(panel, {
|
|
951
|
+
skipSetActive: !isActive,
|
|
952
|
+
skipSetGroupActive: true,
|
|
953
|
+
});
|
|
954
|
+
}
|
|
901
955
|
}
|
|
902
956
|
if (!group.activePanel && group.panels.length > 0) {
|
|
903
957
|
group.model.openPanel(group.panels[group.panels.length - 1], {
|
|
@@ -936,7 +990,9 @@ export class DockviewComponent extends BaseGrid {
|
|
|
936
990
|
setTimeout(() => {
|
|
937
991
|
this.addPopoutGroup(group, {
|
|
938
992
|
position: position !== null && position !== void 0 ? position : undefined,
|
|
939
|
-
overridePopoutGroup: gridReferenceGroup
|
|
993
|
+
overridePopoutGroup: gridReferenceGroup
|
|
994
|
+
? group
|
|
995
|
+
: undefined,
|
|
940
996
|
referenceGroup: gridReferenceGroup
|
|
941
997
|
? this.getPanel(gridReferenceGroup)
|
|
942
998
|
: undefined,
|
|
@@ -1022,11 +1078,11 @@ export class DockviewComponent extends BaseGrid {
|
|
|
1022
1078
|
addPanel(options) {
|
|
1023
1079
|
var _a, _b;
|
|
1024
1080
|
if (this.panels.find((_) => _.id === options.id)) {
|
|
1025
|
-
throw new Error(`panel with id ${options.id} already exists`);
|
|
1081
|
+
throw new Error(`dockview: panel with id ${options.id} already exists`);
|
|
1026
1082
|
}
|
|
1027
1083
|
let referenceGroup;
|
|
1028
1084
|
if (options.position && options.floating) {
|
|
1029
|
-
throw new Error('you can only provide one of: position, floating as arguments to .addPanel(...)');
|
|
1085
|
+
throw new Error('dockview: you can only provide one of: position, floating as arguments to .addPanel(...)');
|
|
1030
1086
|
}
|
|
1031
1087
|
const initial = {
|
|
1032
1088
|
width: options.initialWidth,
|
|
@@ -1040,7 +1096,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
1040
1096
|
: options.position.referencePanel;
|
|
1041
1097
|
index = options.position.index;
|
|
1042
1098
|
if (!referencePanel) {
|
|
1043
|
-
throw new Error(`referencePanel '${options.position.referencePanel}' does not exist`);
|
|
1099
|
+
throw new Error(`dockview: referencePanel '${options.position.referencePanel}' does not exist`);
|
|
1044
1100
|
}
|
|
1045
1101
|
referenceGroup = this.findGroup(referencePanel);
|
|
1046
1102
|
}
|
|
@@ -1051,7 +1107,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
1051
1107
|
: options.position.referenceGroup;
|
|
1052
1108
|
index = options.position.index;
|
|
1053
1109
|
if (!referenceGroup) {
|
|
1054
|
-
throw new Error(`referenceGroup '${options.position.referenceGroup}' does not exist`);
|
|
1110
|
+
throw new Error(`dockview: referenceGroup '${options.position.referenceGroup}' does not exist`);
|
|
1055
1111
|
}
|
|
1056
1112
|
}
|
|
1057
1113
|
else {
|
|
@@ -1163,7 +1219,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
1163
1219
|
}) {
|
|
1164
1220
|
const group = panel.group;
|
|
1165
1221
|
if (!group) {
|
|
1166
|
-
throw new Error(`cannot remove panel ${panel.id}. it's missing a group.`);
|
|
1222
|
+
throw new Error(`dockview: cannot remove panel ${panel.id}. it's missing a group.`);
|
|
1167
1223
|
}
|
|
1168
1224
|
group.model.removePanel(panel, {
|
|
1169
1225
|
skipSetActiveGroup: options.skipSetActiveGroup,
|
|
@@ -1212,11 +1268,11 @@ export class DockviewComponent extends BaseGrid {
|
|
|
1212
1268
|
? this.panels.find((panel) => panel.id === options.referencePanel)
|
|
1213
1269
|
: options.referencePanel;
|
|
1214
1270
|
if (!referencePanel) {
|
|
1215
|
-
throw new Error(`reference panel ${options.referencePanel} does not exist`);
|
|
1271
|
+
throw new Error(`dockview: reference panel ${options.referencePanel} does not exist`);
|
|
1216
1272
|
}
|
|
1217
1273
|
referenceGroup = this.findGroup(referencePanel);
|
|
1218
1274
|
if (!referenceGroup) {
|
|
1219
|
-
throw new Error(`reference group for reference panel ${options.referencePanel} does not exist`);
|
|
1275
|
+
throw new Error(`dockview: reference group for reference panel ${options.referencePanel} does not exist`);
|
|
1220
1276
|
}
|
|
1221
1277
|
}
|
|
1222
1278
|
else if (isGroupOptionsWithGroup(options)) {
|
|
@@ -1225,7 +1281,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
1225
1281
|
? (_a = this._groups.get(options.referenceGroup)) === null || _a === void 0 ? void 0 : _a.value
|
|
1226
1282
|
: options.referenceGroup;
|
|
1227
1283
|
if (!referenceGroup) {
|
|
1228
|
-
throw new Error(`reference group ${options.referenceGroup} does not exist`);
|
|
1284
|
+
throw new Error(`dockview: reference group ${options.referenceGroup} does not exist`);
|
|
1229
1285
|
}
|
|
1230
1286
|
}
|
|
1231
1287
|
else {
|
|
@@ -1293,7 +1349,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
1293
1349
|
}
|
|
1294
1350
|
return floatingGroup.group;
|
|
1295
1351
|
}
|
|
1296
|
-
throw new Error('failed to find floating group');
|
|
1352
|
+
throw new Error('dockview: failed to find floating group');
|
|
1297
1353
|
}
|
|
1298
1354
|
if (group.api.location.type === 'popout') {
|
|
1299
1355
|
const selectedGroup = this._popoutGroups.find((_) => _.popoutGroup === group);
|
|
@@ -1324,7 +1380,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
1324
1380
|
this.updateWatermark();
|
|
1325
1381
|
return selectedGroup.popoutGroup;
|
|
1326
1382
|
}
|
|
1327
|
-
throw new Error('failed to find popout group');
|
|
1383
|
+
throw new Error('dockview: failed to find popout group');
|
|
1328
1384
|
}
|
|
1329
1385
|
const re = super.doRemoveGroup(group, options);
|
|
1330
1386
|
if (!(options === null || options === void 0 ? void 0 : options.skipActive)) {
|
|
@@ -1355,7 +1411,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
1355
1411
|
? (_a = this._groups.get(sourceGroupId)) === null || _a === void 0 ? void 0 : _a.value
|
|
1356
1412
|
: undefined;
|
|
1357
1413
|
if (!sourceGroup) {
|
|
1358
|
-
throw new Error(`Failed to find group id ${sourceGroupId}`);
|
|
1414
|
+
throw new Error(`dockview: Failed to find group id ${sourceGroupId}`);
|
|
1359
1415
|
}
|
|
1360
1416
|
if (sourceItemId === undefined) {
|
|
1361
1417
|
/**
|
|
@@ -1380,9 +1436,9 @@ export class DockviewComponent extends BaseGrid {
|
|
|
1380
1436
|
skipSetActiveGroup: true,
|
|
1381
1437
|
}));
|
|
1382
1438
|
if (!removedPanel) {
|
|
1383
|
-
throw new Error(`No panel with id ${sourceItemId}`);
|
|
1439
|
+
throw new Error(`dockview: No panel with id ${sourceItemId}`);
|
|
1384
1440
|
}
|
|
1385
|
-
if (sourceGroup.model.size === 0) {
|
|
1441
|
+
if (!options.keepEmptyGroups && sourceGroup.model.size === 0) {
|
|
1386
1442
|
// remove the group and do not set a new group as active
|
|
1387
1443
|
this.doRemoveGroup(sourceGroup, { skipActive: true });
|
|
1388
1444
|
}
|
|
@@ -1392,7 +1448,8 @@ export class DockviewComponent extends BaseGrid {
|
|
|
1392
1448
|
var _a;
|
|
1393
1449
|
return destinationGroup.model.openPanel(removedPanel, {
|
|
1394
1450
|
index: destinationIndex,
|
|
1395
|
-
skipSetActive: ((_a = options.skipSetActive) !== null && _a !== void 0 ? _a : false) &&
|
|
1451
|
+
skipSetActive: ((_a = options.skipSetActive) !== null && _a !== void 0 ? _a : false) &&
|
|
1452
|
+
!isDestinationGroupEmpty,
|
|
1396
1453
|
skipSetGroupActive: true,
|
|
1397
1454
|
});
|
|
1398
1455
|
});
|
|
@@ -1447,7 +1504,9 @@ export class DockviewComponent extends BaseGrid {
|
|
|
1447
1504
|
}));
|
|
1448
1505
|
this.doRemoveGroup(sourceGroup, { skipActive: true });
|
|
1449
1506
|
const newGroup = this.createGroupAtLocation(targetLocation);
|
|
1450
|
-
this.movingLock(() => newGroup.model.openPanel(removedPanel
|
|
1507
|
+
this.movingLock(() => newGroup.model.openPanel(removedPanel, {
|
|
1508
|
+
skipSetActive: true,
|
|
1509
|
+
}));
|
|
1451
1510
|
this.doSetGroupAndPanelActive(newGroup);
|
|
1452
1511
|
this._onDidMovePanel.fire({
|
|
1453
1512
|
panel: this.getGroupPanel(sourceItemId),
|
|
@@ -1480,7 +1539,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
1480
1539
|
skipSetActiveGroup: true,
|
|
1481
1540
|
}));
|
|
1482
1541
|
if (!removedPanel) {
|
|
1483
|
-
throw new Error(`No panel with id ${sourceItemId}`);
|
|
1542
|
+
throw new Error(`dockview: No panel with id ${sourceItemId}`);
|
|
1484
1543
|
}
|
|
1485
1544
|
const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
|
|
1486
1545
|
const group = this.createGroupAtLocation(dropLocation);
|
|
@@ -1535,7 +1594,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
1535
1594
|
case 'floating': {
|
|
1536
1595
|
const selectedFloatingGroup = this._floatingGroups.find((x) => x.group === from);
|
|
1537
1596
|
if (!selectedFloatingGroup) {
|
|
1538
|
-
throw new Error('failed to find floating group');
|
|
1597
|
+
throw new Error('dockview: failed to find floating group');
|
|
1539
1598
|
}
|
|
1540
1599
|
selectedFloatingGroup.dispose();
|
|
1541
1600
|
break;
|
|
@@ -1543,7 +1602,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
1543
1602
|
case 'popout': {
|
|
1544
1603
|
const selectedPopoutGroup = this._popoutGroups.find((x) => x.popoutGroup === from);
|
|
1545
1604
|
if (!selectedPopoutGroup) {
|
|
1546
|
-
throw new Error('failed to find popout group');
|
|
1605
|
+
throw new Error('dockview: failed to find popout group');
|
|
1547
1606
|
}
|
|
1548
1607
|
// Remove from popout groups list to prevent automatic restoration
|
|
1549
1608
|
const index = this._popoutGroups.indexOf(selectedPopoutGroup);
|
|
@@ -14,6 +14,7 @@ export interface IDockviewGroupPanel extends IGridviewPanel<DockviewGroupPanelAp
|
|
|
14
14
|
export type IDockviewGroupPanelPublic = IDockviewGroupPanel;
|
|
15
15
|
export declare class DockviewGroupPanel extends GridviewPanel<DockviewGroupPanelApiImpl> implements IDockviewGroupPanel {
|
|
16
16
|
private readonly _model;
|
|
17
|
+
private _explicitConstraints;
|
|
17
18
|
get minimumWidth(): number;
|
|
18
19
|
get minimumHeight(): number;
|
|
19
20
|
get maximumWidth(): number;
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import { DockviewGroupPanelModel, } from './dockviewGroupPanelModel';
|
|
2
2
|
import { GridviewPanel } from '../gridview/gridviewPanel';
|
|
3
3
|
import { DockviewGroupPanelApiImpl, } from '../api/dockviewGroupPanelApi';
|
|
4
|
+
// GridConstraintChangeEvent2 is not exported, so we'll type it manually
|
|
4
5
|
const MINIMUM_DOCKVIEW_GROUP_PANEL_WIDTH = 100;
|
|
5
6
|
const MINIMUM_DOCKVIEW_GROUP_PANEL_HEIGHT = 100;
|
|
6
7
|
export class DockviewGroupPanel extends GridviewPanel {
|
|
7
8
|
get minimumWidth() {
|
|
8
9
|
var _a;
|
|
10
|
+
// Check for explicitly set group constraint first
|
|
11
|
+
if (typeof this._explicitConstraints.minimumWidth === 'number') {
|
|
12
|
+
return this._explicitConstraints.minimumWidth;
|
|
13
|
+
}
|
|
9
14
|
const activePanelMinimumWidth = (_a = this.activePanel) === null || _a === void 0 ? void 0 : _a.minimumWidth;
|
|
10
15
|
if (typeof activePanelMinimumWidth === 'number') {
|
|
11
16
|
return activePanelMinimumWidth;
|
|
@@ -14,6 +19,10 @@ export class DockviewGroupPanel extends GridviewPanel {
|
|
|
14
19
|
}
|
|
15
20
|
get minimumHeight() {
|
|
16
21
|
var _a;
|
|
22
|
+
// Check for explicitly set group constraint first
|
|
23
|
+
if (typeof this._explicitConstraints.minimumHeight === 'number') {
|
|
24
|
+
return this._explicitConstraints.minimumHeight;
|
|
25
|
+
}
|
|
17
26
|
const activePanelMinimumHeight = (_a = this.activePanel) === null || _a === void 0 ? void 0 : _a.minimumHeight;
|
|
18
27
|
if (typeof activePanelMinimumHeight === 'number') {
|
|
19
28
|
return activePanelMinimumHeight;
|
|
@@ -22,6 +31,10 @@ export class DockviewGroupPanel extends GridviewPanel {
|
|
|
22
31
|
}
|
|
23
32
|
get maximumWidth() {
|
|
24
33
|
var _a;
|
|
34
|
+
// Check for explicitly set group constraint first
|
|
35
|
+
if (typeof this._explicitConstraints.maximumWidth === 'number') {
|
|
36
|
+
return this._explicitConstraints.maximumWidth;
|
|
37
|
+
}
|
|
25
38
|
const activePanelMaximumWidth = (_a = this.activePanel) === null || _a === void 0 ? void 0 : _a.maximumWidth;
|
|
26
39
|
if (typeof activePanelMaximumWidth === 'number') {
|
|
27
40
|
return activePanelMaximumWidth;
|
|
@@ -30,6 +43,10 @@ export class DockviewGroupPanel extends GridviewPanel {
|
|
|
30
43
|
}
|
|
31
44
|
get maximumHeight() {
|
|
32
45
|
var _a;
|
|
46
|
+
// Check for explicitly set group constraint first
|
|
47
|
+
if (typeof this._explicitConstraints.maximumHeight === 'number') {
|
|
48
|
+
return this._explicitConstraints.maximumHeight;
|
|
49
|
+
}
|
|
33
50
|
const activePanelMaximumHeight = (_a = this.activePanel) === null || _a === void 0 ? void 0 : _a.maximumHeight;
|
|
34
51
|
if (typeof activePanelMaximumHeight === 'number') {
|
|
35
52
|
return activePanelMaximumHeight;
|
|
@@ -61,14 +78,39 @@ export class DockviewGroupPanel extends GridviewPanel {
|
|
|
61
78
|
var _a, _b, _c, _d, _e, _f;
|
|
62
79
|
super(id, 'groupview_default', {
|
|
63
80
|
minimumHeight: (_b = (_a = options.constraints) === null || _a === void 0 ? void 0 : _a.minimumHeight) !== null && _b !== void 0 ? _b : MINIMUM_DOCKVIEW_GROUP_PANEL_HEIGHT,
|
|
64
|
-
minimumWidth: (_d = (_c = options.constraints) === null || _c === void 0 ? void 0 : _c.
|
|
81
|
+
minimumWidth: (_d = (_c = options.constraints) === null || _c === void 0 ? void 0 : _c.minimumWidth) !== null && _d !== void 0 ? _d : MINIMUM_DOCKVIEW_GROUP_PANEL_WIDTH,
|
|
65
82
|
maximumHeight: (_e = options.constraints) === null || _e === void 0 ? void 0 : _e.maximumHeight,
|
|
66
83
|
maximumWidth: (_f = options.constraints) === null || _f === void 0 ? void 0 : _f.maximumWidth,
|
|
67
84
|
}, new DockviewGroupPanelApiImpl(id, accessor));
|
|
85
|
+
// Track explicitly set constraints to override panel constraints
|
|
86
|
+
this._explicitConstraints = {};
|
|
68
87
|
this.api.initialize(this); // cannot use 'this' after after 'super' call
|
|
69
88
|
this._model = new DockviewGroupPanelModel(this.element, accessor, id, options, this);
|
|
70
89
|
this.addDisposables(this.model.onDidActivePanelChange((event) => {
|
|
71
90
|
this.api._onDidActivePanelChange.fire(event);
|
|
91
|
+
}), this.api.onDidConstraintsChangeInternal((event) => {
|
|
92
|
+
// Track explicitly set constraints to override panel constraints
|
|
93
|
+
// Extract numeric values from functions or values
|
|
94
|
+
if (event.minimumWidth !== undefined) {
|
|
95
|
+
this._explicitConstraints.minimumWidth = typeof event.minimumWidth === 'function'
|
|
96
|
+
? event.minimumWidth()
|
|
97
|
+
: event.minimumWidth;
|
|
98
|
+
}
|
|
99
|
+
if (event.minimumHeight !== undefined) {
|
|
100
|
+
this._explicitConstraints.minimumHeight = typeof event.minimumHeight === 'function'
|
|
101
|
+
? event.minimumHeight()
|
|
102
|
+
: event.minimumHeight;
|
|
103
|
+
}
|
|
104
|
+
if (event.maximumWidth !== undefined) {
|
|
105
|
+
this._explicitConstraints.maximumWidth = typeof event.maximumWidth === 'function'
|
|
106
|
+
? event.maximumWidth()
|
|
107
|
+
: event.maximumWidth;
|
|
108
|
+
}
|
|
109
|
+
if (event.maximumHeight !== undefined) {
|
|
110
|
+
this._explicitConstraints.maximumHeight = typeof event.maximumHeight === 'function'
|
|
111
|
+
? event.maximumHeight()
|
|
112
|
+
: event.maximumHeight;
|
|
113
|
+
}
|
|
72
114
|
}));
|
|
73
115
|
}
|
|
74
116
|
focus() {
|
|
@@ -488,8 +488,11 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
488
488
|
this._activePanel = panel;
|
|
489
489
|
if (panel) {
|
|
490
490
|
this.tabsContainer.setActivePanel(panel);
|
|
491
|
+
this.contentContainer.openPanel(panel);
|
|
491
492
|
panel.layout(this._width, this._height);
|
|
492
493
|
this.updateMru(panel);
|
|
494
|
+
// Refresh focus state to handle programmatic activation without DOM focus change
|
|
495
|
+
this.contentContainer.refreshFocusState();
|
|
493
496
|
this._onDidActivePanelChange.fire({
|
|
494
497
|
panel,
|
|
495
498
|
});
|
|
@@ -21,6 +21,7 @@ export interface IDockviewPanel extends IDisposable, IPanel {
|
|
|
21
21
|
updateParentGroup(group: DockviewGroupPanel, options?: {
|
|
22
22
|
skipSetActive?: boolean;
|
|
23
23
|
}): void;
|
|
24
|
+
updateFromStateModel(state: GroupviewPanelState): void;
|
|
24
25
|
init(params: IGroupPanelInitParameters): void;
|
|
25
26
|
toJSON(): GroupviewPanelState;
|
|
26
27
|
setTitle(title: string): void;
|
|
@@ -37,10 +38,10 @@ export declare class DockviewPanel extends CompositeDisposable implements IDockv
|
|
|
37
38
|
private _params?;
|
|
38
39
|
private _title;
|
|
39
40
|
private _renderer;
|
|
40
|
-
private
|
|
41
|
-
private
|
|
42
|
-
private
|
|
43
|
-
private
|
|
41
|
+
private _minimumWidth;
|
|
42
|
+
private _minimumHeight;
|
|
43
|
+
private _maximumWidth;
|
|
44
|
+
private _maximumHeight;
|
|
44
45
|
get params(): Parameters | undefined;
|
|
45
46
|
get title(): string | undefined;
|
|
46
47
|
get group(): DockviewGroupPanel;
|
|
@@ -58,6 +59,7 @@ export declare class DockviewPanel extends CompositeDisposable implements IDockv
|
|
|
58
59
|
setTitle(title: string): void;
|
|
59
60
|
setRenderer(renderer: DockviewPanelRenderer): void;
|
|
60
61
|
update(event: PanelUpdateEvent): void;
|
|
62
|
+
updateFromStateModel(state: GroupviewPanelState): void;
|
|
61
63
|
updateParentGroup(group: DockviewGroupPanel, options?: {
|
|
62
64
|
skipSetActive?: boolean;
|
|
63
65
|
}): void;
|
|
@@ -115,6 +115,18 @@ export class DockviewPanel extends CompositeDisposable {
|
|
|
115
115
|
params: this._params,
|
|
116
116
|
});
|
|
117
117
|
}
|
|
118
|
+
updateFromStateModel(state) {
|
|
119
|
+
var _a, _b, _c;
|
|
120
|
+
this._maximumHeight = state.maximumHeight;
|
|
121
|
+
this._minimumHeight = state.minimumHeight;
|
|
122
|
+
this._maximumWidth = state.maximumWidth;
|
|
123
|
+
this._minimumWidth = state.minimumWidth;
|
|
124
|
+
this.update({ params: (_a = state.params) !== null && _a !== void 0 ? _a : {} });
|
|
125
|
+
this.setTitle((_b = state.title) !== null && _b !== void 0 ? _b : this.id);
|
|
126
|
+
this.setRenderer((_c = state.renderer) !== null && _c !== void 0 ? _c : this.accessor.renderer);
|
|
127
|
+
// state.contentComponent;
|
|
128
|
+
// state.tabComponent;
|
|
129
|
+
}
|
|
118
130
|
updateParentGroup(group, options) {
|
|
119
131
|
this._group = group;
|
|
120
132
|
this.api.group = this._group;
|