dockview-core 3.1.1 → 4.0.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 +0 -2
- package/dist/cjs/api/component.api.js +0 -10
- package/dist/cjs/dnd/abstractDragHandler.js +4 -2
- package/dist/cjs/dnd/dropTargetAnchorContainer.d.ts +16 -0
- package/dist/cjs/dnd/dropTargetAnchorContainer.js +105 -0
- package/dist/cjs/dnd/droptarget.d.ts +16 -0
- package/dist/cjs/dnd/droptarget.js +138 -14
- package/dist/cjs/dnd/ghost.d.ts +4 -1
- package/dist/cjs/dnd/ghost.js +3 -2
- package/dist/cjs/dnd/groupDragHandler.js +3 -1
- package/dist/cjs/dockview/components/panel/content.js +10 -13
- package/dist/cjs/dockview/components/popupService.d.ts +13 -0
- package/dist/cjs/dockview/components/popupService.js +76 -0
- package/dist/cjs/dockview/components/tab/tab.js +17 -7
- package/dist/cjs/dockview/components/titlebar/tabOverflowControl.d.ts +8 -0
- package/dist/cjs/dockview/components/titlebar/tabOverflowControl.js +20 -0
- package/dist/cjs/dockview/components/titlebar/tabs.d.ts +45 -0
- package/dist/cjs/dockview/components/titlebar/tabs.js +288 -0
- package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts +8 -9
- package/dist/cjs/dockview/components/titlebar/tabsContainer.js +108 -152
- package/dist/cjs/dockview/components/titlebar/voidContainer.js +2 -9
- package/dist/cjs/dockview/dockviewComponent.d.ts +10 -3
- package/dist/cjs/dockview/dockviewComponent.js +71 -30
- package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +4 -0
- package/dist/cjs/dockview/dockviewGroupPanelModel.js +31 -0
- package/dist/cjs/dockview/dockviewPanelModel.d.ts +5 -3
- package/dist/cjs/dockview/dockviewPanelModel.js +25 -4
- package/dist/cjs/dockview/framework.d.ts +4 -1
- package/dist/cjs/dockview/options.d.ts +8 -5
- package/dist/cjs/dockview/options.js +3 -1
- package/dist/cjs/dockview/theme.d.ts +31 -0
- package/dist/cjs/dockview/theme.js +42 -0
- package/dist/cjs/dockview/types.d.ts +5 -1
- package/dist/cjs/dom.d.ts +1 -0
- package/dist/cjs/dom.js +15 -1
- package/dist/cjs/gridview/baseComponentGridview.d.ts +3 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/paneview/paneviewComponent.js +1 -0
- package/dist/cjs/scrollbar.d.ts +12 -0
- package/dist/cjs/scrollbar.js +106 -0
- package/dist/cjs/splitview/splitview.js +1 -0
- package/dist/cjs/splitview/splitviewComponent.js +1 -0
- package/dist/dockview-core.amd.js +930 -293
- 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 +929 -292
- package/dist/dockview-core.amd.noStyle.js.map +1 -1
- package/dist/dockview-core.cjs.js +930 -293
- package/dist/dockview-core.cjs.js.map +1 -1
- package/dist/dockview-core.esm.js +923 -294
- 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 +930 -293
- 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 +929 -292
- package/dist/dockview-core.noStyle.js.map +1 -1
- package/dist/esm/api/component.api.d.ts +0 -2
- package/dist/esm/api/component.api.js +0 -6
- package/dist/esm/dnd/abstractDragHandler.js +4 -2
- package/dist/esm/dnd/dropTargetAnchorContainer.d.ts +16 -0
- package/dist/esm/dnd/dropTargetAnchorContainer.js +74 -0
- package/dist/esm/dnd/droptarget.d.ts +16 -0
- package/dist/esm/dnd/droptarget.js +134 -14
- package/dist/esm/dnd/ghost.d.ts +4 -1
- package/dist/esm/dnd/ghost.js +3 -2
- package/dist/esm/dnd/groupDragHandler.js +3 -1
- package/dist/esm/dockview/components/panel/content.js +10 -13
- package/dist/esm/dockview/components/popupService.d.ts +13 -0
- package/dist/esm/dockview/components/popupService.js +53 -0
- package/dist/esm/dockview/components/tab/tab.js +15 -7
- package/dist/esm/dockview/components/titlebar/tabOverflowControl.d.ts +8 -0
- package/dist/esm/dockview/components/titlebar/tabOverflowControl.js +16 -0
- package/dist/esm/dockview/components/titlebar/tabs.d.ts +45 -0
- package/dist/esm/dockview/components/titlebar/tabs.js +183 -0
- package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts +8 -9
- package/dist/esm/dockview/components/titlebar/tabsContainer.js +133 -162
- package/dist/esm/dockview/components/titlebar/voidContainer.js +2 -9
- package/dist/esm/dockview/dockviewComponent.d.ts +10 -3
- package/dist/esm/dockview/dockviewComponent.js +69 -24
- package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +4 -0
- package/dist/esm/dockview/dockviewGroupPanelModel.js +27 -0
- package/dist/esm/dockview/dockviewPanelModel.d.ts +5 -3
- package/dist/esm/dockview/dockviewPanelModel.js +14 -4
- package/dist/esm/dockview/framework.d.ts +4 -1
- package/dist/esm/dockview/options.d.ts +8 -5
- package/dist/esm/dockview/options.js +3 -1
- package/dist/esm/dockview/theme.d.ts +31 -0
- package/dist/esm/dockview/theme.js +39 -0
- package/dist/esm/dockview/types.d.ts +5 -1
- package/dist/esm/dom.d.ts +1 -0
- package/dist/esm/dom.js +13 -0
- package/dist/esm/gridview/baseComponentGridview.d.ts +3 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/paneview/paneviewComponent.js +1 -0
- package/dist/esm/scrollbar.d.ts +12 -0
- package/dist/esm/scrollbar.js +80 -0
- package/dist/esm/splitview/splitview.js +1 -0
- package/dist/esm/splitview/splitviewComponent.js +1 -0
- package/dist/styles/dockview.css +444 -76
- package/package.json +1 -1
|
@@ -14,6 +14,8 @@ import { DockviewFloatingGroupPanel } from './dockviewFloatingGroupPanel';
|
|
|
14
14
|
import { GroupDragEvent, TabDragEvent } from './components/titlebar/tabsContainer';
|
|
15
15
|
import { AnchoredBox, AnchorPosition, Box } from '../types';
|
|
16
16
|
import { DockviewPanelRenderer, OverlayRenderContainer } from '../overlay/overlayRenderContainer';
|
|
17
|
+
import { PopupService } from './components/popupService';
|
|
18
|
+
import { DropTargetAnchorContainer } from '../dnd/dropTargetAnchorContainer';
|
|
17
19
|
export interface DockviewPopoutGroupOptions {
|
|
18
20
|
/**
|
|
19
21
|
* The position of the popout group
|
|
@@ -110,7 +112,6 @@ export interface IDockviewComponent extends IBaseGrid<DockviewGroupPanel> {
|
|
|
110
112
|
readonly totalPanels: number;
|
|
111
113
|
readonly panels: IDockviewPanel[];
|
|
112
114
|
readonly orientation: Orientation;
|
|
113
|
-
readonly gap: number;
|
|
114
115
|
readonly onDidDrop: Event<DockviewDidDropEvent>;
|
|
115
116
|
readonly onWillDrop: Event<DockviewWillDropEvent>;
|
|
116
117
|
readonly onWillShowOverlay: Event<WillShowOverlayLocationEvent>;
|
|
@@ -163,8 +164,11 @@ export declare class DockviewComponent extends BaseGrid<DockviewGroupPanel> impl
|
|
|
163
164
|
private readonly _deserializer;
|
|
164
165
|
private readonly _api;
|
|
165
166
|
private _options;
|
|
166
|
-
private
|
|
167
|
+
private _watermark;
|
|
168
|
+
private readonly _themeClassnames;
|
|
167
169
|
readonly overlayRenderContainer: OverlayRenderContainer;
|
|
170
|
+
readonly popupService: PopupService;
|
|
171
|
+
readonly rootDropTargetContainer: DropTargetAnchorContainer;
|
|
168
172
|
private readonly _onWillDragPanel;
|
|
169
173
|
readonly onWillDragPanel: Event<TabDragEvent>;
|
|
170
174
|
private readonly _onWillDragGroup;
|
|
@@ -196,6 +200,8 @@ export declare class DockviewComponent extends BaseGrid<DockviewGroupPanel> impl
|
|
|
196
200
|
readonly onDidRemoveGroup: Event<DockviewGroupPanel>;
|
|
197
201
|
protected readonly _onDidAddGroup: Emitter<DockviewGroupPanel>;
|
|
198
202
|
readonly onDidAddGroup: Event<DockviewGroupPanel>;
|
|
203
|
+
private readonly _onDidOptionsChange;
|
|
204
|
+
readonly onDidOptionsChange: Event<void>;
|
|
199
205
|
private readonly _onDidActiveGroupChange;
|
|
200
206
|
readonly onDidActiveGroupChange: Event<DockviewGroupPanel | undefined>;
|
|
201
207
|
get orientation(): Orientation;
|
|
@@ -205,7 +211,6 @@ export declare class DockviewComponent extends BaseGrid<DockviewGroupPanel> impl
|
|
|
205
211
|
get activePanel(): IDockviewPanel | undefined;
|
|
206
212
|
get renderer(): DockviewPanelRenderer;
|
|
207
213
|
get api(): DockviewApi;
|
|
208
|
-
get gap(): number;
|
|
209
214
|
get floatingGroups(): DockviewFloatingGroupPanel[];
|
|
210
215
|
constructor(container: HTMLElement, options: DockviewComponentOptions);
|
|
211
216
|
setVisible(panel: DockviewGroupPanel, visible: boolean): void;
|
|
@@ -262,5 +267,7 @@ export declare class DockviewComponent extends BaseGrid<DockviewGroupPanel> impl
|
|
|
262
267
|
private createGroupAtLocation;
|
|
263
268
|
private findGroup;
|
|
264
269
|
private orientationAtLocation;
|
|
270
|
+
private updateDropTargetModel;
|
|
271
|
+
private updateTheme;
|
|
265
272
|
}
|
|
266
273
|
export {};
|
|
@@ -16,12 +16,15 @@ import { DockviewGroupPanel } from './dockviewGroupPanel';
|
|
|
16
16
|
import { DockviewPanelModel } from './dockviewPanelModel';
|
|
17
17
|
import { getPanelData } from '../dnd/dataTransfer';
|
|
18
18
|
import { Overlay } from '../overlay/overlay';
|
|
19
|
-
import { addTestId, getDockviewTheme, toggleClass, watchElementResize, } from '../dom';
|
|
19
|
+
import { addTestId, Classnames, getDockviewTheme, toggleClass, watchElementResize, } from '../dom';
|
|
20
20
|
import { DockviewFloatingGroupPanel } from './dockviewFloatingGroupPanel';
|
|
21
21
|
import { DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE, DEFAULT_FLOATING_GROUP_POSITION, } from '../constants';
|
|
22
22
|
import { OverlayRenderContainer, } from '../overlay/overlayRenderContainer';
|
|
23
23
|
import { PopoutWindow } from '../popoutWindow';
|
|
24
24
|
import { StrictEventsSequencing } from './strictEventsSequencing';
|
|
25
|
+
import { PopupService } from './components/popupService';
|
|
26
|
+
import { DropTargetAnchorContainer } from '../dnd/dropTargetAnchorContainer';
|
|
27
|
+
import { themeAbyss } from './theme';
|
|
25
28
|
const DEFAULT_ROOT_OVERLAY_MODEL = {
|
|
26
29
|
activationSize: { type: 'pixels', value: 10 },
|
|
27
30
|
size: { type: 'pixels', value: 20 },
|
|
@@ -67,14 +70,11 @@ export class DockviewComponent extends BaseGrid {
|
|
|
67
70
|
get api() {
|
|
68
71
|
return this._api;
|
|
69
72
|
}
|
|
70
|
-
get gap() {
|
|
71
|
-
return this.gridview.margin;
|
|
72
|
-
}
|
|
73
73
|
get floatingGroups() {
|
|
74
74
|
return this._floatingGroups;
|
|
75
75
|
}
|
|
76
76
|
constructor(container, options) {
|
|
77
|
-
var _a;
|
|
77
|
+
var _a, _b, _c;
|
|
78
78
|
super(container, {
|
|
79
79
|
proportionalLayout: true,
|
|
80
80
|
orientation: Orientation.HORIZONTAL,
|
|
@@ -83,12 +83,12 @@ export class DockviewComponent extends BaseGrid {
|
|
|
83
83
|
: undefined,
|
|
84
84
|
disableAutoResizing: options.disableAutoResizing,
|
|
85
85
|
locked: options.locked,
|
|
86
|
-
margin: options.gap,
|
|
86
|
+
margin: (_b = (_a = options.theme) === null || _a === void 0 ? void 0 : _a.gap) !== null && _b !== void 0 ? _b : 0,
|
|
87
87
|
className: options.className,
|
|
88
88
|
});
|
|
89
89
|
this.nextGroupId = sequentialNumberGenerator();
|
|
90
90
|
this._deserializer = new DefaultDockviewDeserialzier(this);
|
|
91
|
-
this.
|
|
91
|
+
this._watermark = null;
|
|
92
92
|
this._onWillDragPanel = new Emitter();
|
|
93
93
|
this.onWillDragPanel = this._onWillDragPanel.event;
|
|
94
94
|
this._onWillDragGroup = new Emitter();
|
|
@@ -119,16 +119,22 @@ export class DockviewComponent extends BaseGrid {
|
|
|
119
119
|
this.onDidRemoveGroup = this._onDidRemoveGroup.event;
|
|
120
120
|
this._onDidAddGroup = new Emitter();
|
|
121
121
|
this.onDidAddGroup = this._onDidAddGroup.event;
|
|
122
|
+
this._onDidOptionsChange = new Emitter();
|
|
123
|
+
this.onDidOptionsChange = this._onDidOptionsChange.event;
|
|
122
124
|
this._onDidActiveGroupChange = new Emitter();
|
|
123
125
|
this.onDidActiveGroupChange = this._onDidActiveGroupChange.event;
|
|
124
126
|
this._moving = false;
|
|
127
|
+
this.popupService = new PopupService(this.element);
|
|
128
|
+
this.updateDropTargetModel(options);
|
|
129
|
+
this._themeClassnames = new Classnames(this.element);
|
|
130
|
+
this.rootDropTargetContainer = new DropTargetAnchorContainer(this.element, { disabled: true });
|
|
125
131
|
this.overlayRenderContainer = new OverlayRenderContainer(this.gridview.element, this);
|
|
126
132
|
toggleClass(this.gridview.element, 'dv-dockview', true);
|
|
127
133
|
toggleClass(this.element, 'dv-debug', !!options.debug);
|
|
128
134
|
if (options.debug) {
|
|
129
135
|
this.addDisposables(new StrictEventsSequencing(this));
|
|
130
136
|
}
|
|
131
|
-
this.addDisposables(this.overlayRenderContainer, this._onWillDragPanel, this._onWillDragGroup, this._onWillShowOverlay, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, this._onWillDrop, this._onDidMovePanel, this._onDidAddGroup, this._onDidRemoveGroup, this._onDidActiveGroupChange, this._onUnhandledDragOverEvent, this._onDidMaximizedGroupChange, this.onDidViewVisibilityChangeMicroTaskQueue(() => {
|
|
137
|
+
this.addDisposables(this.rootDropTargetContainer, this.overlayRenderContainer, this._onWillDragPanel, this._onWillDragGroup, this._onWillShowOverlay, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, this._onWillDrop, this._onDidMovePanel, this._onDidAddGroup, this._onDidRemoveGroup, this._onDidActiveGroupChange, this._onUnhandledDragOverEvent, this._onDidMaximizedGroupChange, this._onDidOptionsChange, this.onDidViewVisibilityChangeMicroTaskQueue(() => {
|
|
132
138
|
this.updateWatermark();
|
|
133
139
|
}), this.onDidAdd((event) => {
|
|
134
140
|
if (!this._moving) {
|
|
@@ -162,7 +168,9 @@ export class DockviewComponent extends BaseGrid {
|
|
|
162
168
|
}
|
|
163
169
|
}));
|
|
164
170
|
this._options = options;
|
|
171
|
+
this.updateTheme();
|
|
165
172
|
this._rootDropTarget = new Droptarget(this.element, {
|
|
173
|
+
className: 'dv-drop-target-edge',
|
|
166
174
|
canDisplayOverlay: (event, position) => {
|
|
167
175
|
const data = getPanelData();
|
|
168
176
|
if (data) {
|
|
@@ -189,7 +197,8 @@ export class DockviewComponent extends BaseGrid {
|
|
|
189
197
|
return firedEvent.isAccepted;
|
|
190
198
|
},
|
|
191
199
|
acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
|
|
192
|
-
overlayModel: (
|
|
200
|
+
overlayModel: (_c = this.options.rootOverlayModel) !== null && _c !== void 0 ? _c : DEFAULT_ROOT_OVERLAY_MODEL,
|
|
201
|
+
getOverrideTarget: () => { var _a; return (_a = this.rootDropTargetContainer) === null || _a === void 0 ? void 0 : _a.model; },
|
|
193
202
|
});
|
|
194
203
|
this.addDisposables(this._rootDropTarget, this._rootDropTarget.onWillShowOverlay((event) => {
|
|
195
204
|
if (this.gridview.length > 0 && event.position === 'center') {
|
|
@@ -367,6 +376,10 @@ export class DockviewComponent extends BaseGrid {
|
|
|
367
376
|
popoutContainer.style.overflow = 'hidden';
|
|
368
377
|
popoutContainer.appendChild(gready);
|
|
369
378
|
popoutContainer.appendChild(group.element);
|
|
379
|
+
const anchor = document.createElement('div');
|
|
380
|
+
const dropTargetContainer = new DropTargetAnchorContainer(anchor, { disabled: this.rootDropTargetContainer.disabled });
|
|
381
|
+
popoutContainer.appendChild(anchor);
|
|
382
|
+
group.model.dropTargetContainer = dropTargetContainer;
|
|
370
383
|
group.model.location = {
|
|
371
384
|
type: 'popout',
|
|
372
385
|
getWindow: () => _window.window,
|
|
@@ -433,6 +446,8 @@ export class DockviewComponent extends BaseGrid {
|
|
|
433
446
|
else if (this.getPanel(group.id)) {
|
|
434
447
|
group.model.renderContainer =
|
|
435
448
|
this.overlayRenderContainer;
|
|
449
|
+
group.model.dropTargetContainer =
|
|
450
|
+
this.rootDropTargetContainer;
|
|
436
451
|
returnedGroup = group;
|
|
437
452
|
const alreadyRemoved = !this._popoutGroups.find((p) => p.popoutGroup === group);
|
|
438
453
|
if (alreadyRemoved) {
|
|
@@ -655,7 +670,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
655
670
|
}
|
|
656
671
|
}
|
|
657
672
|
updateOptions(options) {
|
|
658
|
-
var _a, _b
|
|
673
|
+
var _a, _b;
|
|
659
674
|
super.updateOptions(options);
|
|
660
675
|
if ('floatingGroupBounds' in options) {
|
|
661
676
|
for (const group of this._floatingGroups) {
|
|
@@ -679,13 +694,11 @@ export class DockviewComponent extends BaseGrid {
|
|
|
679
694
|
group.overlay.setBounds();
|
|
680
695
|
}
|
|
681
696
|
}
|
|
682
|
-
|
|
683
|
-
this._rootDropTarget.setOverlayModel((_c = options.rootOverlayModel) !== null && _c !== void 0 ? _c : DEFAULT_ROOT_OVERLAY_MODEL);
|
|
684
|
-
}
|
|
685
|
-
if ('gap' in options) {
|
|
686
|
-
this.gridview.margin = (_d = options.gap) !== null && _d !== void 0 ? _d : 0;
|
|
687
|
-
}
|
|
697
|
+
this.updateDropTargetModel(options);
|
|
688
698
|
this._options = Object.assign(Object.assign({}, this.options), options);
|
|
699
|
+
if ('theme' in options) {
|
|
700
|
+
this.updateTheme();
|
|
701
|
+
}
|
|
689
702
|
this.layout(this.gridview.width, this.gridview.height, true);
|
|
690
703
|
}
|
|
691
704
|
layout(width, height, forceResize) {
|
|
@@ -1103,22 +1116,22 @@ export class DockviewComponent extends BaseGrid {
|
|
|
1103
1116
|
updateWatermark() {
|
|
1104
1117
|
var _a, _b;
|
|
1105
1118
|
if (this.groups.filter((x) => x.api.location.type === 'grid' && x.api.isVisible).length === 0) {
|
|
1106
|
-
if (!this.
|
|
1107
|
-
this.
|
|
1108
|
-
this.
|
|
1119
|
+
if (!this._watermark) {
|
|
1120
|
+
this._watermark = this.createWatermarkComponent();
|
|
1121
|
+
this._watermark.init({
|
|
1109
1122
|
containerApi: new DockviewApi(this),
|
|
1110
1123
|
});
|
|
1111
1124
|
const watermarkContainer = document.createElement('div');
|
|
1112
1125
|
watermarkContainer.className = 'dv-watermark-container';
|
|
1113
1126
|
addTestId(watermarkContainer, 'watermark-component');
|
|
1114
|
-
watermarkContainer.appendChild(this.
|
|
1127
|
+
watermarkContainer.appendChild(this._watermark.element);
|
|
1115
1128
|
this.gridview.element.appendChild(watermarkContainer);
|
|
1116
1129
|
}
|
|
1117
1130
|
}
|
|
1118
|
-
else if (this.
|
|
1119
|
-
this.
|
|
1120
|
-
(_b = (_a = this.
|
|
1121
|
-
this.
|
|
1131
|
+
else if (this._watermark) {
|
|
1132
|
+
this._watermark.element.parentElement.remove();
|
|
1133
|
+
(_b = (_a = this._watermark).dispose) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
1134
|
+
this._watermark = null;
|
|
1122
1135
|
}
|
|
1123
1136
|
}
|
|
1124
1137
|
addGroup(options) {
|
|
@@ -1604,4 +1617,36 @@ export class DockviewComponent extends BaseGrid {
|
|
|
1604
1617
|
? rootOrientation
|
|
1605
1618
|
: orthogonal(rootOrientation);
|
|
1606
1619
|
}
|
|
1620
|
+
updateDropTargetModel(options) {
|
|
1621
|
+
if ('dndEdges' in options) {
|
|
1622
|
+
this._rootDropTarget.disabled =
|
|
1623
|
+
typeof options.dndEdges === 'boolean' &&
|
|
1624
|
+
options.dndEdges === false;
|
|
1625
|
+
if (typeof options.dndEdges === 'object' &&
|
|
1626
|
+
options.dndEdges !== null) {
|
|
1627
|
+
this._rootDropTarget.setOverlayModel(options.dndEdges);
|
|
1628
|
+
}
|
|
1629
|
+
else {
|
|
1630
|
+
this._rootDropTarget.setOverlayModel(DEFAULT_ROOT_OVERLAY_MODEL);
|
|
1631
|
+
}
|
|
1632
|
+
}
|
|
1633
|
+
if ('rootOverlayModel' in options) {
|
|
1634
|
+
this.updateDropTargetModel({ dndEdges: options.dndEdges });
|
|
1635
|
+
}
|
|
1636
|
+
}
|
|
1637
|
+
updateTheme() {
|
|
1638
|
+
var _a, _b;
|
|
1639
|
+
const theme = (_a = this._options.theme) !== null && _a !== void 0 ? _a : themeAbyss;
|
|
1640
|
+
this._themeClassnames.setClassNames(theme.className);
|
|
1641
|
+
this.gridview.margin = (_b = theme.gap) !== null && _b !== void 0 ? _b : 0;
|
|
1642
|
+
switch (theme.dndOverlayMounting) {
|
|
1643
|
+
case 'absolute':
|
|
1644
|
+
this.rootDropTargetContainer.disabled = false;
|
|
1645
|
+
break;
|
|
1646
|
+
case 'relative':
|
|
1647
|
+
default:
|
|
1648
|
+
this.rootDropTargetContainer.disabled = true;
|
|
1649
|
+
break;
|
|
1650
|
+
}
|
|
1651
|
+
}
|
|
1607
1652
|
}
|
|
@@ -13,6 +13,7 @@ import { DockviewDndOverlayEvent } from './options';
|
|
|
13
13
|
import { OverlayRenderContainer } from '../overlay/overlayRenderContainer';
|
|
14
14
|
import { TitleEvent } from '../api/dockviewPanelApi';
|
|
15
15
|
import { Contraints } from '../gridview/gridviewPanel';
|
|
16
|
+
import { DropTargetAnchorContainer } from '../dnd/dropTargetAnchorContainer';
|
|
16
17
|
interface GroupMoveEvent {
|
|
17
18
|
groupId: string;
|
|
18
19
|
itemId?: string;
|
|
@@ -160,6 +161,7 @@ export declare class DockviewGroupPanelModel extends CompositeDisposable impleme
|
|
|
160
161
|
private _location;
|
|
161
162
|
private mostRecentlyUsed;
|
|
162
163
|
private _overwriteRenderContainer;
|
|
164
|
+
private _overwriteDropTargetContainer;
|
|
163
165
|
private readonly _onDidChange;
|
|
164
166
|
readonly onDidChange: Event<IViewSize | undefined>;
|
|
165
167
|
private _width;
|
|
@@ -208,6 +210,8 @@ export declare class DockviewGroupPanelModel extends CompositeDisposable impleme
|
|
|
208
210
|
focusContent(): void;
|
|
209
211
|
set renderContainer(value: OverlayRenderContainer | null);
|
|
210
212
|
get renderContainer(): OverlayRenderContainer;
|
|
213
|
+
set dropTargetContainer(value: DropTargetAnchorContainer | null);
|
|
214
|
+
get dropTargetContainer(): DropTargetAnchorContainer | null;
|
|
211
215
|
initialize(): void;
|
|
212
216
|
rerender(panel: IDockviewPanel): void;
|
|
213
217
|
indexOf(panel: IDockviewPanel): number;
|
|
@@ -156,6 +156,7 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
156
156
|
this._location = { type: 'grid' };
|
|
157
157
|
this.mostRecentlyUsed = [];
|
|
158
158
|
this._overwriteRenderContainer = null;
|
|
159
|
+
this._overwriteDropTargetContainer = null;
|
|
159
160
|
this._onDidChange = new Emitter();
|
|
160
161
|
this.onDidChange = this._onDidChange.event;
|
|
161
162
|
this._width = 0;
|
|
@@ -233,6 +234,13 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
233
234
|
var _a;
|
|
234
235
|
return ((_a = this._overwriteRenderContainer) !== null && _a !== void 0 ? _a : this.accessor.overlayRenderContainer);
|
|
235
236
|
}
|
|
237
|
+
set dropTargetContainer(value) {
|
|
238
|
+
this._overwriteDropTargetContainer = value;
|
|
239
|
+
}
|
|
240
|
+
get dropTargetContainer() {
|
|
241
|
+
var _a;
|
|
242
|
+
return ((_a = this._overwriteDropTargetContainer) !== null && _a !== void 0 ? _a : this.accessor.rootDropTargetContainer);
|
|
243
|
+
}
|
|
236
244
|
initialize() {
|
|
237
245
|
if (this.options.panels) {
|
|
238
246
|
this.options.panels.forEach((panel) => {
|
|
@@ -581,6 +589,25 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
581
589
|
}
|
|
582
590
|
const data = getPanelData();
|
|
583
591
|
if (data && data.viewId === this.accessor.id) {
|
|
592
|
+
if (type === 'content') {
|
|
593
|
+
if (data.groupId === this.id) {
|
|
594
|
+
// don't allow to drop on self for center position
|
|
595
|
+
if (position === 'center') {
|
|
596
|
+
return;
|
|
597
|
+
}
|
|
598
|
+
if (data.panelId === null) {
|
|
599
|
+
// don't allow group move to drop anywhere on self
|
|
600
|
+
return;
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
if (type === 'header') {
|
|
605
|
+
if (data.groupId === this.id) {
|
|
606
|
+
if (data.panelId === null) {
|
|
607
|
+
return;
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
}
|
|
584
611
|
if (data.panelId === null) {
|
|
585
612
|
// this is a group move dnd event
|
|
586
613
|
const { groupId } = data;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { GroupPanelPartInitParameters, IContentRenderer, ITabRenderer } from './types';
|
|
2
|
-
import { DockviewGroupPanel } from './dockviewGroupPanel';
|
|
3
2
|
import { IDisposable } from '../lifecycle';
|
|
4
3
|
import { IDockviewComponent } from './dockviewComponent';
|
|
5
4
|
import { PanelUpdateEvent } from '../panel/types';
|
|
5
|
+
import { TabLocation } from './framework';
|
|
6
6
|
export interface IDockviewPanelModel extends IDisposable {
|
|
7
7
|
readonly contentComponent: string;
|
|
8
8
|
readonly tabComponent?: string;
|
|
@@ -11,7 +11,7 @@ export interface IDockviewPanelModel extends IDisposable {
|
|
|
11
11
|
update(event: PanelUpdateEvent): void;
|
|
12
12
|
layout(width: number, height: number): void;
|
|
13
13
|
init(params: GroupPanelPartInitParameters): void;
|
|
14
|
-
|
|
14
|
+
createTabRenderer(tabLocation: TabLocation): ITabRenderer;
|
|
15
15
|
}
|
|
16
16
|
export declare class DockviewPanelModel implements IDockviewPanelModel {
|
|
17
17
|
private readonly accessor;
|
|
@@ -20,11 +20,13 @@ export declare class DockviewPanelModel implements IDockviewPanelModel {
|
|
|
20
20
|
readonly tabComponent?: string | undefined;
|
|
21
21
|
private readonly _content;
|
|
22
22
|
private readonly _tab;
|
|
23
|
+
private _params;
|
|
24
|
+
private _updateEvent;
|
|
23
25
|
get content(): IContentRenderer;
|
|
24
26
|
get tab(): ITabRenderer;
|
|
25
27
|
constructor(accessor: IDockviewComponent, id: string, contentComponent: string, tabComponent?: string | undefined);
|
|
28
|
+
createTabRenderer(tabLocation: TabLocation): ITabRenderer;
|
|
26
29
|
init(params: GroupPanelPartInitParameters): void;
|
|
27
|
-
updateParentGroup(_group: DockviewGroupPanel, _isPanelVisible: boolean): void;
|
|
28
30
|
layout(width: number, height: number): void;
|
|
29
31
|
update(event: PanelUpdateEvent): void;
|
|
30
32
|
dispose(): void;
|
|
@@ -14,12 +14,21 @@ export class DockviewPanelModel {
|
|
|
14
14
|
this._content = this.createContentComponent(this.id, contentComponent);
|
|
15
15
|
this._tab = this.createTabComponent(this.id, tabComponent);
|
|
16
16
|
}
|
|
17
|
+
createTabRenderer(tabLocation) {
|
|
18
|
+
var _a;
|
|
19
|
+
const cmp = this.createTabComponent(this.id, this.tabComponent);
|
|
20
|
+
if (this._params) {
|
|
21
|
+
cmp.init(Object.assign(Object.assign({}, this._params), { tabLocation }));
|
|
22
|
+
}
|
|
23
|
+
if (this._updateEvent) {
|
|
24
|
+
(_a = cmp.update) === null || _a === void 0 ? void 0 : _a.call(cmp, this._updateEvent);
|
|
25
|
+
}
|
|
26
|
+
return cmp;
|
|
27
|
+
}
|
|
17
28
|
init(params) {
|
|
29
|
+
this._params = params;
|
|
18
30
|
this.content.init(params);
|
|
19
|
-
this.tab.init(params);
|
|
20
|
-
}
|
|
21
|
-
updateParentGroup(_group, _isPanelVisible) {
|
|
22
|
-
// noop
|
|
31
|
+
this.tab.init(Object.assign(Object.assign({}, params), { tabLocation: 'header' }));
|
|
23
32
|
}
|
|
24
33
|
layout(width, height) {
|
|
25
34
|
var _a, _b;
|
|
@@ -27,6 +36,7 @@ export class DockviewPanelModel {
|
|
|
27
36
|
}
|
|
28
37
|
update(event) {
|
|
29
38
|
var _a, _b, _c, _d;
|
|
39
|
+
this._updateEvent = event;
|
|
30
40
|
(_b = (_a = this.content).update) === null || _b === void 0 ? void 0 : _b.call(_a, event);
|
|
31
41
|
(_d = (_c = this.tab).update) === null || _d === void 0 ? void 0 : _d.call(_c, event);
|
|
32
42
|
}
|
|
@@ -10,9 +10,12 @@ export interface IGroupPanelBaseProps<T extends {
|
|
|
10
10
|
api: DockviewPanelApi;
|
|
11
11
|
containerApi: DockviewApi;
|
|
12
12
|
}
|
|
13
|
+
export type TabLocation = 'header' | 'headerOverflow';
|
|
13
14
|
export type IDockviewPanelHeaderProps<T extends {
|
|
14
15
|
[index: string]: any;
|
|
15
|
-
} = any> = IGroupPanelBaseProps<T
|
|
16
|
+
} = any> = IGroupPanelBaseProps<T> & {
|
|
17
|
+
tabLocation: TabLocation;
|
|
18
|
+
};
|
|
16
19
|
export type IDockviewPanelProps<T extends {
|
|
17
20
|
[index: string]: any;
|
|
18
21
|
} = any> = IGroupPanelBaseProps<T>;
|
|
@@ -14,6 +14,7 @@ import { IGroupHeaderProps } from './framework';
|
|
|
14
14
|
import { FloatingGroupOptions } from './dockviewComponent';
|
|
15
15
|
import { Contraints } from '../gridview/gridviewPanel';
|
|
16
16
|
import { AcceptableEvent, IAcceptableEvent } from '../events';
|
|
17
|
+
import { DockviewTheme } from './theme';
|
|
17
18
|
export interface IHeaderActionsRenderer extends IDisposable {
|
|
18
19
|
readonly element: HTMLElement;
|
|
19
20
|
init(params: IGroupHeaderProps): void;
|
|
@@ -43,18 +44,20 @@ export interface DockviewOptions {
|
|
|
43
44
|
popoutUrl?: string;
|
|
44
45
|
defaultRenderer?: DockviewPanelRenderer;
|
|
45
46
|
debug?: boolean;
|
|
47
|
+
dndEdges?: false | DroptargetOverlayModel;
|
|
48
|
+
/**
|
|
49
|
+
* @deprecated use `dndEdges` instead. To be removed in a future version.
|
|
50
|
+
* */
|
|
46
51
|
rootOverlayModel?: DroptargetOverlayModel;
|
|
47
|
-
locked?: boolean;
|
|
48
52
|
disableDnd?: boolean;
|
|
53
|
+
locked?: boolean;
|
|
49
54
|
className?: string;
|
|
50
|
-
/**
|
|
51
|
-
* Pixel gap between groups
|
|
52
|
-
*/
|
|
53
|
-
gap?: number;
|
|
54
55
|
/**
|
|
55
56
|
* Define the behaviour of the dock when there are no panels to display. Defaults to `watermark`.
|
|
56
57
|
*/
|
|
57
58
|
noPanelsOverlay?: 'emptyGroup' | 'watermark';
|
|
59
|
+
theme?: DockviewTheme;
|
|
60
|
+
disableTabsOverflowList?: boolean;
|
|
58
61
|
}
|
|
59
62
|
export interface DockviewDndOverlayEvent extends IAcceptableEvent {
|
|
60
63
|
nativeEvent: DragEvent;
|
|
@@ -26,9 +26,11 @@ export const PROPERTY_KEYS_DOCKVIEW = (() => {
|
|
|
26
26
|
rootOverlayModel: undefined,
|
|
27
27
|
locked: undefined,
|
|
28
28
|
disableDnd: undefined,
|
|
29
|
-
gap: undefined,
|
|
30
29
|
className: undefined,
|
|
31
30
|
noPanelsOverlay: undefined,
|
|
31
|
+
dndEdges: undefined,
|
|
32
|
+
theme: undefined,
|
|
33
|
+
disableTabsOverflowList: undefined,
|
|
32
34
|
};
|
|
33
35
|
return Object.keys(properties);
|
|
34
36
|
})();
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface DockviewTheme {
|
|
2
|
+
/**
|
|
3
|
+
* The name of the theme
|
|
4
|
+
*/
|
|
5
|
+
name: string;
|
|
6
|
+
/**
|
|
7
|
+
* The class name to apply to the theme containing the CSS variables settings.
|
|
8
|
+
*/
|
|
9
|
+
className: string;
|
|
10
|
+
/**
|
|
11
|
+
* The gap between the groups
|
|
12
|
+
*/
|
|
13
|
+
gap?: number;
|
|
14
|
+
/**
|
|
15
|
+
* The mouting position of the overlay shown when dragging a panel. `absolute`
|
|
16
|
+
* will mount the overlay to root of the dockview component whereas `relative` will mount the overlay to the group container.
|
|
17
|
+
*/
|
|
18
|
+
dndOverlayMounting?: 'absolute' | 'relative';
|
|
19
|
+
/**
|
|
20
|
+
* When dragging a panel, the overlay can either encompass the panel contents or the entire group including the tab header space.
|
|
21
|
+
*/
|
|
22
|
+
dndPanelOverlay?: 'content' | 'group';
|
|
23
|
+
}
|
|
24
|
+
export declare const themeDark: DockviewTheme;
|
|
25
|
+
export declare const themeLight: DockviewTheme;
|
|
26
|
+
export declare const themeVisualStudio: DockviewTheme;
|
|
27
|
+
export declare const themeAbyss: DockviewTheme;
|
|
28
|
+
export declare const themeDracula: DockviewTheme;
|
|
29
|
+
export declare const themeReplit: DockviewTheme;
|
|
30
|
+
export declare const themeAbyssSpaced: DockviewTheme;
|
|
31
|
+
export declare const themeLightSpaced: DockviewTheme;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export const themeDark = {
|
|
2
|
+
name: 'dark',
|
|
3
|
+
className: 'dockview-theme-dark',
|
|
4
|
+
};
|
|
5
|
+
export const themeLight = {
|
|
6
|
+
name: 'light',
|
|
7
|
+
className: 'dockview-theme-light',
|
|
8
|
+
};
|
|
9
|
+
export const themeVisualStudio = {
|
|
10
|
+
name: 'visualStudio',
|
|
11
|
+
className: 'dockview-theme-vs',
|
|
12
|
+
};
|
|
13
|
+
export const themeAbyss = {
|
|
14
|
+
name: 'abyss',
|
|
15
|
+
className: 'dockview-theme-abyss',
|
|
16
|
+
};
|
|
17
|
+
export const themeDracula = {
|
|
18
|
+
name: 'dracula',
|
|
19
|
+
className: 'dockview-theme-dracula',
|
|
20
|
+
};
|
|
21
|
+
export const themeReplit = {
|
|
22
|
+
name: 'replit',
|
|
23
|
+
className: 'dockview-theme-replit',
|
|
24
|
+
gap: 10,
|
|
25
|
+
};
|
|
26
|
+
export const themeAbyssSpaced = {
|
|
27
|
+
name: 'abyssSpaced',
|
|
28
|
+
className: 'dockview-theme-abyss-spaced',
|
|
29
|
+
gap: 10,
|
|
30
|
+
dndOverlayMounting: 'absolute',
|
|
31
|
+
dndPanelOverlay: 'group',
|
|
32
|
+
};
|
|
33
|
+
export const themeLightSpaced = {
|
|
34
|
+
name: 'lightSpaced',
|
|
35
|
+
className: 'dockview-theme-light-spaced',
|
|
36
|
+
gap: 10,
|
|
37
|
+
dndOverlayMounting: 'absolute',
|
|
38
|
+
dndPanelOverlay: 'group',
|
|
39
|
+
};
|
|
@@ -4,6 +4,7 @@ import { DockviewApi } from '../api/component.api';
|
|
|
4
4
|
import { Optional } from '../types';
|
|
5
5
|
import { IDockviewGroupPanel } from './dockviewGroupPanel';
|
|
6
6
|
import { DockviewPanelRenderer } from '../overlay/overlayRenderContainer';
|
|
7
|
+
import { TabLocation } from './framework';
|
|
7
8
|
export interface HeaderPartInitParameters {
|
|
8
9
|
title: string;
|
|
9
10
|
}
|
|
@@ -20,9 +21,12 @@ export interface IWatermarkRenderer extends Optional<Omit<IPanel, 'id' | 'init'>
|
|
|
20
21
|
readonly element: HTMLElement;
|
|
21
22
|
init: (params: WatermarkRendererInitParameters) => void;
|
|
22
23
|
}
|
|
24
|
+
export interface TabPartInitParameters extends GroupPanelPartInitParameters {
|
|
25
|
+
tabLocation: TabLocation;
|
|
26
|
+
}
|
|
23
27
|
export interface ITabRenderer extends Optional<Omit<IPanel, 'id'>, RendererMethodOptionalList> {
|
|
24
28
|
readonly element: HTMLElement;
|
|
25
|
-
init(parameters:
|
|
29
|
+
init(parameters: TabPartInitParameters): void;
|
|
26
30
|
}
|
|
27
31
|
export interface IContentRenderer extends Optional<Omit<IPanel, 'id'>, RendererMethodOptionalList> {
|
|
28
32
|
readonly element: HTMLElement;
|
package/dist/esm/dom.d.ts
CHANGED
package/dist/esm/dom.js
CHANGED
|
@@ -252,3 +252,16 @@ export class Classnames {
|
|
|
252
252
|
}
|
|
253
253
|
}
|
|
254
254
|
}
|
|
255
|
+
export function isChildEntirelyVisibleWithinParent(child, parent) {
|
|
256
|
+
//
|
|
257
|
+
const childPosition = getDomNodePagePosition(child);
|
|
258
|
+
const parentPosition = getDomNodePagePosition(parent);
|
|
259
|
+
if (childPosition.left < parentPosition.left) {
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
if (childPosition.left + childPosition.width >
|
|
263
|
+
parentPosition.left + parentPosition.width) {
|
|
264
|
+
return false;
|
|
265
|
+
}
|
|
266
|
+
return true;
|
|
267
|
+
}
|
|
@@ -6,6 +6,9 @@ import { ISplitviewStyles, Orientation } from '../splitview/splitview';
|
|
|
6
6
|
import { IPanel } from '../panel/types';
|
|
7
7
|
import { MovementOptions2 } from '../dockview/options';
|
|
8
8
|
import { Resizable } from '../resizable';
|
|
9
|
+
/**
|
|
10
|
+
* A direction in which a panel can be moved or placed relative to another panel.
|
|
11
|
+
*/
|
|
9
12
|
export type Direction = 'left' | 'right' | 'above' | 'below' | 'within';
|
|
10
13
|
export declare function toTarget(direction: Direction): Position;
|
|
11
14
|
export interface MaximizedChanged<T extends IGridPanelView> {
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -22,6 +22,7 @@ export * from './dockview/types';
|
|
|
22
22
|
export * from './dockview/dockviewGroupPanel';
|
|
23
23
|
export { IGroupPanelBaseProps, IDockviewPanelHeaderProps, IDockviewPanelProps, IDockviewHeaderActionsProps, IGroupHeaderProps, IWatermarkPanelProps, DockviewReadyEvent, } from './dockview/framework';
|
|
24
24
|
export * from './dockview/options';
|
|
25
|
+
export * from './dockview/theme';
|
|
25
26
|
export * from './dockview/dockviewPanel';
|
|
26
27
|
export { DefaultTab } from './dockview/components/tab/defaultTab';
|
|
27
28
|
export { DefaultDockviewDeserialzier, IPanelDeserializer, } from './dockview/deserializer';
|
package/dist/esm/index.js
CHANGED
|
@@ -20,6 +20,7 @@ export * from './dockview/dockviewGroupPanelModel';
|
|
|
20
20
|
export * from './dockview/types';
|
|
21
21
|
export * from './dockview/dockviewGroupPanel';
|
|
22
22
|
export * from './dockview/options';
|
|
23
|
+
export * from './dockview/theme';
|
|
23
24
|
export * from './dockview/dockviewPanel';
|
|
24
25
|
export { DefaultTab } from './dockview/components/tab/defaultTab';
|
|
25
26
|
export { DefaultDockviewDeserialzier, } from './dockview/deserializer';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CompositeDisposable } from './lifecycle';
|
|
2
|
+
export declare class Scrollbar extends CompositeDisposable {
|
|
3
|
+
private readonly scrollableElement;
|
|
4
|
+
private readonly _element;
|
|
5
|
+
private readonly _horizontalScrollbar;
|
|
6
|
+
private _scrollLeft;
|
|
7
|
+
private _animationTimer;
|
|
8
|
+
static MouseWheelSpeed: number;
|
|
9
|
+
get element(): HTMLElement;
|
|
10
|
+
constructor(scrollableElement: HTMLElement);
|
|
11
|
+
private calculateScrollbarStyles;
|
|
12
|
+
}
|