dockview 1.1.0 → 1.2.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 +1 -3
- package/dist/cjs/api/component.api.js +0 -14
- package/dist/cjs/api/component.api.js.map +1 -1
- package/dist/cjs/dnd/abstractDragHandler.d.ts +1 -1
- package/dist/cjs/dnd/abstractDragHandler.js +1 -2
- package/dist/cjs/dnd/abstractDragHandler.js.map +1 -1
- package/dist/cjs/dockview/deserializer.js.map +1 -1
- package/dist/cjs/dockview/dockviewComponent.d.ts +5 -3
- package/dist/cjs/dockview/dockviewComponent.js +45 -38
- package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
- package/dist/cjs/dockview/dockviewGroupPanel.d.ts +1 -0
- package/dist/cjs/dockview/dockviewGroupPanel.js +8 -0
- package/dist/cjs/dockview/dockviewGroupPanel.js.map +1 -1
- package/dist/cjs/gridview/baseComponentGridview.d.ts +3 -20
- package/dist/cjs/gridview/baseComponentGridview.js +9 -43
- package/dist/cjs/gridview/baseComponentGridview.js.map +1 -1
- package/dist/cjs/gridview/branchNode.js +1 -1
- package/dist/cjs/gridview/branchNode.js.map +1 -1
- package/dist/cjs/gridview/gridview.js +1 -0
- package/dist/cjs/gridview/gridview.js.map +1 -1
- package/dist/cjs/gridview/gridviewComponent.js +0 -1
- package/dist/cjs/gridview/gridviewComponent.js.map +1 -1
- package/dist/cjs/gridview/leafNode.js +1 -1
- package/dist/cjs/gridview/leafNode.js.map +1 -1
- package/dist/cjs/groupview/groupPanel.d.ts +1 -0
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.js +8 -4
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/paneview/paneview.js +3 -2
- package/dist/cjs/paneview/paneview.js.map +1 -1
- package/dist/cjs/paneview/paneviewComponent.d.ts +1 -0
- package/dist/cjs/paneview/paneviewComponent.js +4 -0
- package/dist/cjs/paneview/paneviewComponent.js.map +1 -1
- package/dist/cjs/react/dockview/components.js +5 -1
- package/dist/cjs/react/dockview/components.js.map +1 -1
- package/dist/cjs/react/dockview/dockview.js +14 -1
- package/dist/cjs/react/dockview/dockview.js.map +1 -1
- package/dist/cjs/react/gridview/gridview.js +9 -2
- package/dist/cjs/react/gridview/gridview.js.map +1 -1
- package/dist/cjs/react/index.js +5 -1
- package/dist/cjs/react/index.js.map +1 -1
- package/dist/cjs/react/paneview/paneview.js +5 -1
- package/dist/cjs/react/paneview/paneview.js.map +1 -1
- package/dist/cjs/react/react.js +5 -1
- package/dist/cjs/react/react.js.map +1 -1
- package/dist/cjs/react/splitview/splitview.js +8 -2
- package/dist/cjs/react/splitview/splitview.js.map +1 -1
- package/dist/cjs/splitview/core/splitview.js +1 -1
- package/dist/cjs/splitview/core/splitview.js.map +1 -1
- package/dist/cjs/splitview/splitviewComponent.js +1 -0
- package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
- package/dist/dockview.amd.js +168 -207
- package/dist/dockview.amd.min.js +2 -2
- package/dist/dockview.amd.min.noStyle.js +2 -2
- package/dist/dockview.amd.noStyle.js +167 -206
- package/dist/dockview.cjs.js +168 -207
- package/dist/dockview.esm.js +168 -201
- package/dist/dockview.esm.min.js +2 -2
- package/dist/dockview.js +168 -207
- package/dist/dockview.min.js +2 -2
- package/dist/dockview.min.noStyle.js +2 -2
- package/dist/dockview.noStyle.js +167 -206
- package/dist/esm/api/component.api.d.ts +1 -3
- package/dist/esm/api/component.api.js +0 -6
- package/dist/esm/dnd/abstractDragHandler.d.ts +1 -1
- package/dist/esm/dnd/abstractDragHandler.js +1 -2
- package/dist/esm/dockview/dockviewComponent.d.ts +5 -3
- package/dist/esm/dockview/dockviewComponent.js +20 -36
- package/dist/esm/dockview/dockviewGroupPanel.d.ts +1 -0
- package/dist/esm/dockview/dockviewGroupPanel.js +4 -0
- package/dist/esm/gridview/baseComponentGridview.d.ts +3 -20
- package/dist/esm/gridview/baseComponentGridview.js +9 -43
- package/dist/esm/gridview/branchNode.js +1 -1
- package/dist/esm/gridview/gridview.js +1 -0
- package/dist/esm/gridview/gridviewComponent.js +1 -2
- package/dist/esm/groupview/groupPanel.d.ts +1 -0
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js +1 -2
- package/dist/esm/paneview/paneview.js +1 -1
- package/dist/esm/paneview/paneviewComponent.d.ts +1 -0
- package/dist/esm/paneview/paneviewComponent.js +4 -0
- package/dist/esm/react/dockview/dockview.js +9 -0
- package/dist/esm/react/gridview/gridview.js +4 -1
- package/dist/esm/react/splitview/splitview.js +3 -1
- package/dist/esm/splitview/core/splitview.js +1 -1
- package/dist/esm/splitview/splitviewComponent.js +1 -0
- package/dist/styles/dockview.css +9 -8
- package/package.json +11 -11
|
@@ -159,9 +159,6 @@ export class GridviewApi {
|
|
|
159
159
|
get height() {
|
|
160
160
|
return this.component.height;
|
|
161
161
|
}
|
|
162
|
-
get onGridEvent() {
|
|
163
|
-
return this.component.onGridEvent;
|
|
164
|
-
}
|
|
165
162
|
get onDidLayoutChange() {
|
|
166
163
|
return this.component.onDidLayoutChange;
|
|
167
164
|
}
|
|
@@ -251,9 +248,6 @@ export class DockviewApi {
|
|
|
251
248
|
get totalPanels() {
|
|
252
249
|
return this.component.totalPanels;
|
|
253
250
|
}
|
|
254
|
-
get onGridEvent() {
|
|
255
|
-
return this.component.onGridEvent;
|
|
256
|
-
}
|
|
257
251
|
get onDidActiveGroupChange() {
|
|
258
252
|
return this.component.onDidActiveGroupChange;
|
|
259
253
|
}
|
|
@@ -3,7 +3,7 @@ export declare abstract class DragHandler extends CompositeDisposable {
|
|
|
3
3
|
private readonly el;
|
|
4
4
|
private readonly disposable;
|
|
5
5
|
private readonly _onDragStart;
|
|
6
|
-
readonly onDragStart: import("
|
|
6
|
+
readonly onDragStart: import("../events").Event<void>;
|
|
7
7
|
private iframes;
|
|
8
8
|
constructor(el: HTMLElement);
|
|
9
9
|
abstract getData(): IDisposable;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { MutableDisposable } from '..';
|
|
2
1
|
import { getElementsByTagName } from '../dom';
|
|
3
2
|
import { addDisposableListener, Emitter } from '../events';
|
|
4
|
-
import { CompositeDisposable } from '../lifecycle';
|
|
3
|
+
import { CompositeDisposable, MutableDisposable, } from '../lifecycle';
|
|
5
4
|
export class DragHandler extends CompositeDisposable {
|
|
6
5
|
constructor(el) {
|
|
7
6
|
super();
|
|
@@ -34,7 +34,7 @@ export interface SerializedDockview {
|
|
|
34
34
|
tabHeight?: number;
|
|
35
35
|
};
|
|
36
36
|
}
|
|
37
|
-
export declare type DockviewComponentUpdateOptions = Pick<DockviewComponentOptions, 'orientation' | 'components' | 'frameworkComponents' | 'tabComponents' | 'frameworkTabComponents' | 'showDndOverlay'>;
|
|
37
|
+
export declare type DockviewComponentUpdateOptions = Pick<DockviewComponentOptions, 'orientation' | 'components' | 'frameworkComponents' | 'tabComponents' | 'frameworkTabComponents' | 'showDndOverlay' | 'watermarkFrameworkComponent'>;
|
|
38
38
|
export interface DockviewDropEvent extends GroupviewDropEvent {
|
|
39
39
|
api: DockviewApi;
|
|
40
40
|
}
|
|
@@ -113,10 +113,12 @@ export declare class DockviewComponent extends BaseGrid<GroupviewPanel> implemen
|
|
|
113
113
|
closeAllGroups(): void;
|
|
114
114
|
fireMouseEvent(event: LayoutMouseEvent): void;
|
|
115
115
|
addPanel(options: AddPanelOptions): IGroupPanel;
|
|
116
|
-
removePanel(panel: IGroupPanel
|
|
116
|
+
removePanel(panel: IGroupPanel, options?: {
|
|
117
|
+
removeEmptyGroup: boolean;
|
|
118
|
+
}): void;
|
|
117
119
|
createWatermarkComponent(): IWatermarkRenderer;
|
|
118
120
|
addEmptyGroup(options: AddGroupOptions): void;
|
|
119
|
-
removeGroup(group: GroupviewPanel): void;
|
|
121
|
+
removeGroup(group: GroupviewPanel, skipActive?: boolean): void;
|
|
120
122
|
moveGroupOrPanel(referenceGroup: GroupviewPanel, groupId: string, itemId: string, target: Position, index?: number): void;
|
|
121
123
|
doSetGroupActive(group: GroupviewPanel | undefined, skipFocus?: boolean): void;
|
|
122
124
|
createGroup(options?: GroupOptions): GroupviewPanel;
|
|
@@ -3,12 +3,12 @@ import { Position } from '../dnd/droptarget';
|
|
|
3
3
|
import { tail, sequenceEquals } from '../array';
|
|
4
4
|
import { DockviewGroupPanel } from './dockviewGroupPanel';
|
|
5
5
|
import { CompositeDisposable } from '../lifecycle';
|
|
6
|
-
import { Emitter } from '../events';
|
|
6
|
+
import { Event, Emitter } from '../events';
|
|
7
7
|
import { Watermark } from './components/watermark/watermark';
|
|
8
8
|
import { sequentialNumberGenerator } from '../math';
|
|
9
9
|
import { DefaultDeserializer } from './deserializer';
|
|
10
10
|
import { createComponent } from '../panel/componentFactory';
|
|
11
|
-
import { BaseGrid,
|
|
11
|
+
import { BaseGrid, toTarget, } from '../gridview/baseComponentGridview';
|
|
12
12
|
import { DockviewApi } from '../api/component.api';
|
|
13
13
|
import { MouseEventKind } from '../groupview/tab';
|
|
14
14
|
import { Orientation } from '../splitview/core/splitview';
|
|
@@ -39,7 +39,9 @@ export class DockviewComponent extends BaseGrid {
|
|
|
39
39
|
this.onDidLayoutfromJSON = this._onDidLayoutfromJSON.event;
|
|
40
40
|
this._onDidActivePanelChange = new Emitter();
|
|
41
41
|
this.onDidActivePanelChange = this._onDidActivePanelChange.event;
|
|
42
|
-
this.addDisposables(this._onTabInteractionEvent, this._onTabContextMenu, this._onDidDrop)
|
|
42
|
+
this.addDisposables(this._onTabInteractionEvent, this._onTabContextMenu, this._onDidDrop, Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidActivePanelChange)(() => {
|
|
43
|
+
this._bufferOnDidLayoutChange.fire();
|
|
44
|
+
}));
|
|
43
45
|
this._options = options;
|
|
44
46
|
if (!this.options.components) {
|
|
45
47
|
this.options.components = {};
|
|
@@ -173,11 +175,12 @@ export class DockviewComponent extends BaseGrid {
|
|
|
173
175
|
};
|
|
174
176
|
}
|
|
175
177
|
fromJSON(data) {
|
|
178
|
+
const groups = Array.from(this._groups.values()).map((_) => _.value);
|
|
179
|
+
for (const group of groups) {
|
|
180
|
+
// remove the group will automatically remove the panels
|
|
181
|
+
this.removeGroup(group, true);
|
|
182
|
+
}
|
|
176
183
|
this.gridview.clear();
|
|
177
|
-
this.panels.forEach((panel) => {
|
|
178
|
-
panel.dispose();
|
|
179
|
-
});
|
|
180
|
-
this._groups.clear();
|
|
181
184
|
if (!this.deserializer) {
|
|
182
185
|
throw new Error('invalid deserializer');
|
|
183
186
|
}
|
|
@@ -201,7 +204,6 @@ export class DockviewComponent extends BaseGrid {
|
|
|
201
204
|
}
|
|
202
205
|
}
|
|
203
206
|
this.gridview.layout(this.width, this.height);
|
|
204
|
-
this._onGridEvent.fire({ kind: GroupChangeKind.LAYOUT_FROM_JSON });
|
|
205
207
|
this._onDidLayoutfromJSON.fire();
|
|
206
208
|
}
|
|
207
209
|
closeAllGroups() {
|
|
@@ -251,13 +253,13 @@ export class DockviewComponent extends BaseGrid {
|
|
|
251
253
|
}
|
|
252
254
|
return panel;
|
|
253
255
|
}
|
|
254
|
-
removePanel(panel) {
|
|
256
|
+
removePanel(panel, options = { removeEmptyGroup: true }) {
|
|
255
257
|
const group = panel.group;
|
|
256
258
|
if (!group) {
|
|
257
259
|
throw new Error(`cannot remove panel ${panel.id}. it's missing a group.`);
|
|
258
260
|
}
|
|
259
261
|
group.model.removePanel(panel);
|
|
260
|
-
if (group.model.size === 0) {
|
|
262
|
+
if (group.model.size === 0 && options.removeEmptyGroup) {
|
|
261
263
|
this.removeGroup(group);
|
|
262
264
|
}
|
|
263
265
|
}
|
|
@@ -289,16 +291,14 @@ export class DockviewComponent extends BaseGrid {
|
|
|
289
291
|
this.doAddGroup(group);
|
|
290
292
|
}
|
|
291
293
|
}
|
|
292
|
-
removeGroup(group) {
|
|
294
|
+
removeGroup(group, skipActive = false) {
|
|
293
295
|
const panels = [...group.model.panels]; // reassign since group panels will mutate
|
|
294
|
-
|
|
295
|
-
this.removePanel(panel
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
this._activeGroup = group;
|
|
299
|
-
return;
|
|
296
|
+
for (const panel of panels) {
|
|
297
|
+
this.removePanel(panel, {
|
|
298
|
+
removeEmptyGroup: false,
|
|
299
|
+
});
|
|
300
300
|
}
|
|
301
|
-
super.
|
|
301
|
+
super.doRemoveGroup(group, { skipActive });
|
|
302
302
|
}
|
|
303
303
|
moveGroupOrPanel(referenceGroup, groupId, itemId, target, index) {
|
|
304
304
|
var _a;
|
|
@@ -353,15 +353,11 @@ export class DockviewComponent extends BaseGrid {
|
|
|
353
353
|
}
|
|
354
354
|
}
|
|
355
355
|
doSetGroupActive(group, skipFocus) {
|
|
356
|
-
var _a, _b
|
|
356
|
+
var _a, _b;
|
|
357
357
|
const isGroupAlreadyFocused = this._activeGroup === group;
|
|
358
358
|
super.doSetGroupActive(group, skipFocus);
|
|
359
359
|
if (!isGroupAlreadyFocused && ((_a = this._activeGroup) === null || _a === void 0 ? void 0 : _a.model.activePanel)) {
|
|
360
|
-
this.
|
|
361
|
-
kind: GroupChangeKind.PANEL_ACTIVE,
|
|
362
|
-
panel: (_b = this._activeGroup) === null || _b === void 0 ? void 0 : _b.model.activePanel,
|
|
363
|
-
});
|
|
364
|
-
this._onDidActivePanelChange.fire((_c = this._activeGroup) === null || _c === void 0 ? void 0 : _c.model.activePanel);
|
|
360
|
+
this._onDidActivePanelChange.fire((_b = this._activeGroup) === null || _b === void 0 ? void 0 : _b.model.activePanel);
|
|
365
361
|
}
|
|
366
362
|
}
|
|
367
363
|
createGroup(options) {
|
|
@@ -392,28 +388,16 @@ export class DockviewComponent extends BaseGrid {
|
|
|
392
388
|
}), view.model.onDidGroupChange((event) => {
|
|
393
389
|
switch (event.kind) {
|
|
394
390
|
case GroupChangeKind2.ADD_PANEL:
|
|
395
|
-
this._onGridEvent.fire({
|
|
396
|
-
kind: GroupChangeKind.ADD_PANEL,
|
|
397
|
-
panel: event.panel,
|
|
398
|
-
});
|
|
399
391
|
if (event.panel) {
|
|
400
392
|
this._onDidAddPanel.fire(event.panel);
|
|
401
393
|
}
|
|
402
394
|
break;
|
|
403
395
|
case GroupChangeKind2.REMOVE_PANEL:
|
|
404
|
-
this._onGridEvent.fire({
|
|
405
|
-
kind: GroupChangeKind.REMOVE_PANEL,
|
|
406
|
-
panel: event.panel,
|
|
407
|
-
});
|
|
408
396
|
if (event.panel) {
|
|
409
397
|
this._onDidRemovePanel.fire(event.panel);
|
|
410
398
|
}
|
|
411
399
|
break;
|
|
412
400
|
case GroupChangeKind2.PANEL_ACTIVE:
|
|
413
|
-
this._onGridEvent.fire({
|
|
414
|
-
kind: GroupChangeKind.PANEL_ACTIVE,
|
|
415
|
-
panel: event.panel,
|
|
416
|
-
});
|
|
417
401
|
this._onDidActivePanelChange.fire(event.panel);
|
|
418
402
|
break;
|
|
419
403
|
}
|
|
@@ -15,6 +15,7 @@ export declare class DockviewGroupPanel extends CompositeDisposable implements I
|
|
|
15
15
|
private _view?;
|
|
16
16
|
private _title;
|
|
17
17
|
private _suppressClosable;
|
|
18
|
+
get params(): any;
|
|
18
19
|
get title(): string;
|
|
19
20
|
get suppressClosable(): boolean;
|
|
20
21
|
get group(): GroupviewPanel | undefined;
|
|
@@ -16,6 +16,10 @@ export class DockviewGroupPanel extends CompositeDisposable {
|
|
|
16
16
|
this.update({ params: { title } });
|
|
17
17
|
}));
|
|
18
18
|
}
|
|
19
|
+
get params() {
|
|
20
|
+
var _a;
|
|
21
|
+
return (_a = this._params) === null || _a === void 0 ? void 0 : _a.params;
|
|
22
|
+
}
|
|
19
23
|
get title() {
|
|
20
24
|
return this._title;
|
|
21
25
|
}
|
|
@@ -1,29 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Event, TickDelayedEvent } from '../events';
|
|
2
2
|
import { Gridview, IGridView } from './gridview';
|
|
3
3
|
import { Position } from '../dnd/droptarget';
|
|
4
4
|
import { CompositeDisposable, IValueDisposable } from '../lifecycle';
|
|
5
5
|
import { ISplitviewStyles, Orientation } from '../splitview/core/splitview';
|
|
6
6
|
import { IPanel } from '../panel/types';
|
|
7
7
|
import { MovementOptions2 } from '../dockview/options';
|
|
8
|
-
import { IGroupPanel } from '../groupview/groupPanel';
|
|
9
|
-
export declare enum GroupChangeKind {
|
|
10
|
-
ADD_PANEL = "ADD_PANEL",
|
|
11
|
-
REMOVE_PANEL = "REMOVE_PANEL",
|
|
12
|
-
PANEL_ACTIVE = "PANEL_ACTIVE",
|
|
13
|
-
GROUP_ACTIVE = "GROUP_ACTIVE",
|
|
14
|
-
ADD_GROUP = "ADD_GROUP",
|
|
15
|
-
REMOVE_GROUP = "REMOVE_GROUP",
|
|
16
|
-
LAYOUT_FROM_JSON = "LAYOUT_FROM_JSON",
|
|
17
|
-
LAYOUT = "LAYOUT"
|
|
18
|
-
}
|
|
19
|
-
export interface GroupChangeEvent {
|
|
20
|
-
readonly kind: GroupChangeKind;
|
|
21
|
-
readonly panel?: IGroupPanel;
|
|
22
|
-
}
|
|
23
8
|
export declare type Direction = 'left' | 'right' | 'above' | 'below' | 'within';
|
|
24
9
|
export declare function toTarget(direction: Direction): Position;
|
|
25
10
|
export interface BaseGridOptions {
|
|
26
|
-
readonly proportionalLayout
|
|
11
|
+
readonly proportionalLayout: boolean;
|
|
27
12
|
readonly orientation: Orientation;
|
|
28
13
|
readonly styles?: ISplitviewStyles;
|
|
29
14
|
}
|
|
@@ -43,7 +28,6 @@ export interface IBaseGrid<T extends IGridPanelView> {
|
|
|
43
28
|
readonly activeGroup: T | undefined;
|
|
44
29
|
readonly size: number;
|
|
45
30
|
readonly groups: T[];
|
|
46
|
-
readonly onGridEvent: Event<GroupChangeEvent>;
|
|
47
31
|
readonly onDidLayoutChange: Event<void>;
|
|
48
32
|
readonly onDidRemoveGroup: Event<T>;
|
|
49
33
|
readonly onDidAddGroup: Event<T>;
|
|
@@ -62,8 +46,6 @@ export declare abstract class BaseGrid<T extends IGridPanelView> extends Composi
|
|
|
62
46
|
protected readonly _groups: Map<string, IValueDisposable<T>>;
|
|
63
47
|
protected readonly gridview: Gridview;
|
|
64
48
|
protected _activeGroup: T | undefined;
|
|
65
|
-
protected readonly _onGridEvent: Emitter<GroupChangeEvent>;
|
|
66
|
-
readonly onGridEvent: Event<GroupChangeEvent>;
|
|
67
49
|
private _onDidLayoutChange;
|
|
68
50
|
readonly onDidLayoutChange: Event<void>;
|
|
69
51
|
private readonly _onDidRemoveGroup;
|
|
@@ -72,6 +54,7 @@ export declare abstract class BaseGrid<T extends IGridPanelView> extends Composi
|
|
|
72
54
|
readonly onDidAddGroup: Event<T>;
|
|
73
55
|
private readonly _onDidActiveGroupChange;
|
|
74
56
|
readonly onDidActiveGroupChange: Event<T | undefined>;
|
|
57
|
+
protected readonly _bufferOnDidLayoutChange: TickDelayedEvent;
|
|
75
58
|
get id(): string;
|
|
76
59
|
get element(): HTMLElement;
|
|
77
60
|
get size(): number;
|
|
@@ -1,22 +1,9 @@
|
|
|
1
|
-
import { Emitter, TickDelayedEvent } from '../events';
|
|
1
|
+
import { Emitter, Event, TickDelayedEvent } from '../events';
|
|
2
2
|
import { getGridLocation, Gridview } from './gridview';
|
|
3
3
|
import { Position } from '../dnd/droptarget';
|
|
4
4
|
import { CompositeDisposable } from '../lifecycle';
|
|
5
5
|
import { sequentialNumberGenerator } from '../math';
|
|
6
6
|
import { Sizing, } from '../splitview/core/splitview';
|
|
7
|
-
export var GroupChangeKind;
|
|
8
|
-
(function (GroupChangeKind) {
|
|
9
|
-
GroupChangeKind["ADD_PANEL"] = "ADD_PANEL";
|
|
10
|
-
GroupChangeKind["REMOVE_PANEL"] = "REMOVE_PANEL";
|
|
11
|
-
GroupChangeKind["PANEL_ACTIVE"] = "PANEL_ACTIVE";
|
|
12
|
-
//
|
|
13
|
-
GroupChangeKind["GROUP_ACTIVE"] = "GROUP_ACTIVE";
|
|
14
|
-
GroupChangeKind["ADD_GROUP"] = "ADD_GROUP";
|
|
15
|
-
GroupChangeKind["REMOVE_GROUP"] = "REMOVE_GROUP";
|
|
16
|
-
//
|
|
17
|
-
GroupChangeKind["LAYOUT_FROM_JSON"] = "LAYOUT_FROM_JSON";
|
|
18
|
-
GroupChangeKind["LAYOUT"] = "LAYOUT";
|
|
19
|
-
})(GroupChangeKind || (GroupChangeKind = {}));
|
|
20
7
|
const nextLayoutId = sequentialNumberGenerator();
|
|
21
8
|
export function toTarget(direction) {
|
|
22
9
|
switch (direction) {
|
|
@@ -39,9 +26,6 @@ export class BaseGrid extends CompositeDisposable {
|
|
|
39
26
|
this._element = _element;
|
|
40
27
|
this._id = nextLayoutId.next();
|
|
41
28
|
this._groups = new Map();
|
|
42
|
-
//
|
|
43
|
-
this._onGridEvent = new Emitter();
|
|
44
|
-
this.onGridEvent = this._onGridEvent.event;
|
|
45
29
|
this._onDidLayoutChange = new Emitter();
|
|
46
30
|
this.onDidLayoutChange = this._onDidLayoutChange.event;
|
|
47
31
|
this._onDidRemoveGroup = new Emitter();
|
|
@@ -50,30 +34,18 @@ export class BaseGrid extends CompositeDisposable {
|
|
|
50
34
|
this.onDidAddGroup = this._onDidAddGroup.event;
|
|
51
35
|
this._onDidActiveGroupChange = new Emitter();
|
|
52
36
|
this.onDidActiveGroupChange = this._onDidActiveGroupChange.event;
|
|
37
|
+
this._bufferOnDidLayoutChange = new TickDelayedEvent();
|
|
53
38
|
this.gridview = new Gridview(!!options.proportionalLayout, options.styles, options.orientation);
|
|
54
39
|
this.element.appendChild(this.gridview.element);
|
|
55
40
|
this.layout(0, 0, true); // set some elements height/widths
|
|
56
41
|
this.addDisposables(this.gridview.onDidChange(() => {
|
|
57
|
-
this.
|
|
42
|
+
this._onDidLayoutChange.fire();
|
|
58
43
|
}));
|
|
59
|
-
this.addDisposables((() => {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
GroupChangeKind.REMOVE_GROUP,
|
|
65
|
-
GroupChangeKind.ADD_PANEL,
|
|
66
|
-
GroupChangeKind.REMOVE_PANEL,
|
|
67
|
-
GroupChangeKind.GROUP_ACTIVE,
|
|
68
|
-
GroupChangeKind.PANEL_ACTIVE,
|
|
69
|
-
GroupChangeKind.LAYOUT,
|
|
70
|
-
].includes(event.kind)) {
|
|
71
|
-
tickDelayedEvent.fire();
|
|
72
|
-
}
|
|
73
|
-
}), tickDelayedEvent.onEvent(() => {
|
|
74
|
-
this._onDidLayoutChange.fire();
|
|
75
|
-
}), tickDelayedEvent);
|
|
76
|
-
})());
|
|
44
|
+
this.addDisposables(Event.any(this.onDidAddGroup, this.onDidRemoveGroup, this.onDidActiveGroupChange)(() => {
|
|
45
|
+
this._bufferOnDidLayoutChange.fire();
|
|
46
|
+
}), this._bufferOnDidLayoutChange.onEvent(() => {
|
|
47
|
+
this._onDidLayoutChange.fire();
|
|
48
|
+
}), this._bufferOnDidLayoutChange);
|
|
77
49
|
}
|
|
78
50
|
get id() {
|
|
79
51
|
return this._id;
|
|
@@ -110,14 +82,13 @@ export class BaseGrid extends CompositeDisposable {
|
|
|
110
82
|
}
|
|
111
83
|
setVisible(panel, visible) {
|
|
112
84
|
this.gridview.setViewVisible(getGridLocation(panel.element), visible);
|
|
113
|
-
this.
|
|
85
|
+
this._onDidLayoutChange.fire();
|
|
114
86
|
}
|
|
115
87
|
isVisible(panel) {
|
|
116
88
|
return this.gridview.isViewVisible(getGridLocation(panel.element));
|
|
117
89
|
}
|
|
118
90
|
doAddGroup(group, location = [0], size) {
|
|
119
91
|
this.gridview.addView(group, size !== null && size !== void 0 ? size : Sizing.Distribute, location);
|
|
120
|
-
this._onGridEvent.fire({ kind: GroupChangeKind.ADD_GROUP });
|
|
121
92
|
this._onDidAddGroup.fire(group);
|
|
122
93
|
this.doSetGroupActive(group);
|
|
123
94
|
}
|
|
@@ -131,7 +102,6 @@ export class BaseGrid extends CompositeDisposable {
|
|
|
131
102
|
item.disposable.dispose();
|
|
132
103
|
this._groups.delete(group.id);
|
|
133
104
|
}
|
|
134
|
-
this._onGridEvent.fire({ kind: GroupChangeKind.REMOVE_GROUP });
|
|
135
105
|
this._onDidRemoveGroup.fire(group);
|
|
136
106
|
if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
|
|
137
107
|
const groups = Array.from(this._groups.values());
|
|
@@ -160,9 +130,6 @@ export class BaseGrid extends CompositeDisposable {
|
|
|
160
130
|
}
|
|
161
131
|
}
|
|
162
132
|
this._activeGroup = group;
|
|
163
|
-
this._onGridEvent.fire({
|
|
164
|
-
kind: GroupChangeKind.GROUP_ACTIVE,
|
|
165
|
-
});
|
|
166
133
|
this._onDidActiveGroupChange.fire(group);
|
|
167
134
|
}
|
|
168
135
|
removeGroup(group) {
|
|
@@ -219,7 +186,6 @@ export class BaseGrid extends CompositeDisposable {
|
|
|
219
186
|
}
|
|
220
187
|
dispose() {
|
|
221
188
|
super.dispose();
|
|
222
|
-
this._onGridEvent.dispose();
|
|
223
189
|
this._onDidActiveGroupChange.dispose();
|
|
224
190
|
this._onDidAddGroup.dispose();
|
|
225
191
|
this._onDidRemoveGroup.dispose();
|
|
@@ -2,7 +2,7 @@ import { getRelativeLocation, getGridLocation, } from './gridview';
|
|
|
2
2
|
import { Position } from '../dnd/droptarget';
|
|
3
3
|
import { tail, sequenceEquals } from '../array';
|
|
4
4
|
import { CompositeDisposable } from '../lifecycle';
|
|
5
|
-
import { BaseGrid,
|
|
5
|
+
import { BaseGrid, toTarget, } from './baseComponentGridview';
|
|
6
6
|
import { GridviewApi } from '../api/component.api';
|
|
7
7
|
import { createComponent } from '../panel/componentFactory';
|
|
8
8
|
import { Emitter } from '../events';
|
|
@@ -122,7 +122,6 @@ export class GridviewComponent extends BaseGrid {
|
|
|
122
122
|
this.doSetGroupActive(panel);
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
|
-
this._onGridEvent.fire({ kind: GroupChangeKind.LAYOUT_FROM_JSON });
|
|
126
125
|
this._onDidLayoutfromJSON.fire();
|
|
127
126
|
}
|
|
128
127
|
movePanel(panel, options) {
|
|
@@ -18,6 +18,7 @@ export interface IGroupPanel extends IDisposable, IPanel {
|
|
|
18
18
|
readonly api: DockviewPanelApi;
|
|
19
19
|
readonly title: string;
|
|
20
20
|
readonly suppressClosable: boolean;
|
|
21
|
+
readonly params: Record<string, any> | undefined;
|
|
21
22
|
updateParentGroup(group: GroupviewPanel, isGroupActive: boolean): void;
|
|
22
23
|
init(params: IGroupPanelInitParameters): void;
|
|
23
24
|
toJSON(): GroupviewPanelState;
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
export * from './events';
|
|
2
|
-
export * from './lifecycle';
|
|
3
1
|
export * from './dnd/dataTransfer';
|
|
4
2
|
export * from './api/component.api';
|
|
5
3
|
export * from './splitview/core/splitview';
|
|
@@ -20,6 +18,8 @@ export * from './splitview/splitviewPanel';
|
|
|
20
18
|
export * from './paneview/paneviewPanel';
|
|
21
19
|
export * from './groupview/groupPanel';
|
|
22
20
|
export * from './react';
|
|
21
|
+
export { Event } from './events';
|
|
22
|
+
export { IDisposable } from './lifecycle';
|
|
23
23
|
export { Position } from './dnd/droptarget';
|
|
24
24
|
export { FocusEvent, PanelDimensionChangeEvent, VisibilityEvent, ActiveEvent, PanelApi, } from './api/panelApi';
|
|
25
25
|
export { SizeEvent, GridviewPanelApi, GridConstraintChangeEvent, } from './api/gridviewPanelApi';
|
package/dist/esm/index.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
export * from './events';
|
|
2
|
-
export * from './lifecycle';
|
|
3
1
|
export * from './dnd/dataTransfer';
|
|
4
2
|
export * from './api/component.api';
|
|
5
3
|
export * from './splitview/core/splitview';
|
|
@@ -20,4 +18,5 @@ export * from './splitview/splitviewPanel';
|
|
|
20
18
|
export * from './paneview/paneviewPanel';
|
|
21
19
|
export * from './groupview/groupPanel';
|
|
22
20
|
export * from './react'; // TODO: should be conditional on whether user wants the React wrappers
|
|
21
|
+
export { Event } from './events';
|
|
23
22
|
export { Position } from './dnd/droptarget';
|
|
@@ -127,7 +127,6 @@ export class Paneview extends CompositeDisposable {
|
|
|
127
127
|
}
|
|
128
128
|
dispose() {
|
|
129
129
|
super.dispose();
|
|
130
|
-
this.splitview.dispose();
|
|
131
130
|
if (this.animationTimer) {
|
|
132
131
|
clearTimeout(this.animationTimer);
|
|
133
132
|
this.animationTimer = undefined;
|
|
@@ -136,6 +135,7 @@ export class Paneview extends CompositeDisposable {
|
|
|
136
135
|
paneItem.disposable.dispose();
|
|
137
136
|
});
|
|
138
137
|
this.paneItems = [];
|
|
138
|
+
this.splitview.dispose();
|
|
139
139
|
this.element.remove();
|
|
140
140
|
}
|
|
141
141
|
}
|
|
@@ -80,6 +80,7 @@ export const DockviewReact = React.forwardRef((props, ref) => {
|
|
|
80
80
|
return () => {
|
|
81
81
|
disposable.dispose();
|
|
82
82
|
dockview.dispose();
|
|
83
|
+
element.remove();
|
|
83
84
|
};
|
|
84
85
|
}, []);
|
|
85
86
|
React.useEffect(() => {
|
|
@@ -90,6 +91,14 @@ export const DockviewReact = React.forwardRef((props, ref) => {
|
|
|
90
91
|
frameworkComponents: props.components,
|
|
91
92
|
});
|
|
92
93
|
}, [props.components]);
|
|
94
|
+
React.useEffect(() => {
|
|
95
|
+
if (!dockviewRef.current) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
dockviewRef.current.updateOptions({
|
|
99
|
+
watermarkFrameworkComponent: props.watermarkComponent,
|
|
100
|
+
});
|
|
101
|
+
}, [props.watermarkComponent]);
|
|
93
102
|
React.useEffect(() => {
|
|
94
103
|
if (!dockviewRef.current) {
|
|
95
104
|
return;
|
|
@@ -28,7 +28,9 @@ export const GridviewReact = React.forwardRef((props, ref) => {
|
|
|
28
28
|
var _a;
|
|
29
29
|
const element = document.createElement('div');
|
|
30
30
|
const gridview = new GridviewComponent(element, {
|
|
31
|
-
proportionalLayout:
|
|
31
|
+
proportionalLayout: typeof props.proportionalLayout === 'boolean'
|
|
32
|
+
? props.proportionalLayout
|
|
33
|
+
: true,
|
|
32
34
|
orientation: props.orientation,
|
|
33
35
|
frameworkComponents: props.components,
|
|
34
36
|
frameworkComponentFactory: {
|
|
@@ -51,6 +53,7 @@ export const GridviewReact = React.forwardRef((props, ref) => {
|
|
|
51
53
|
gridviewRef.current = gridview;
|
|
52
54
|
return () => {
|
|
53
55
|
gridview.dispose();
|
|
56
|
+
element.remove();
|
|
54
57
|
};
|
|
55
58
|
}, []);
|
|
56
59
|
React.useEffect(() => {
|
|
@@ -35,7 +35,9 @@ export const SplitviewReact = React.forwardRef((props, ref) => {
|
|
|
35
35
|
});
|
|
36
36
|
},
|
|
37
37
|
},
|
|
38
|
-
proportionalLayout: props.proportionalLayout
|
|
38
|
+
proportionalLayout: typeof props.proportionalLayout === 'boolean'
|
|
39
|
+
? props.proportionalLayout
|
|
40
|
+
: true,
|
|
39
41
|
styles: props.hideBorders
|
|
40
42
|
? { separatorBorder: 'transparent' }
|
|
41
43
|
: undefined,
|
|
@@ -678,12 +678,12 @@ export class Splitview {
|
|
|
678
678
|
this._onDidSashEnd.dispose();
|
|
679
679
|
this._onDidAddView.dispose();
|
|
680
680
|
this._onDidRemoveView.dispose();
|
|
681
|
-
this.element.remove();
|
|
682
681
|
for (let i = 0; i < this.element.children.length; i++) {
|
|
683
682
|
if (this.element.children.item(i) === this.element) {
|
|
684
683
|
this.element.removeChild(this.element);
|
|
685
684
|
break;
|
|
686
685
|
}
|
|
687
686
|
}
|
|
687
|
+
this.element.remove();
|
|
688
688
|
}
|
|
689
689
|
}
|
package/dist/styles/dockview.css
CHANGED
|
@@ -115,25 +115,26 @@
|
|
|
115
115
|
}
|
|
116
116
|
.drop-target > .drop-target-dropzone > .drop-target-selection {
|
|
117
117
|
position: relative;
|
|
118
|
-
pointer-events: none;
|
|
119
118
|
box-sizing: border-box;
|
|
120
119
|
height: 100%;
|
|
121
120
|
width: 100%;
|
|
122
121
|
background-color: var(--dv-drag-over-background-color);
|
|
123
122
|
transition-duration: 0.15s;
|
|
124
123
|
transition-timing-function: ease-out;
|
|
124
|
+
will-change: transform;
|
|
125
|
+
pointer-events: none;
|
|
125
126
|
}
|
|
126
|
-
.drop-target > .drop-target-dropzone > .drop-target-selection.left
|
|
127
|
-
|
|
127
|
+
.drop-target > .drop-target-dropzone > .drop-target-selection.left {
|
|
128
|
+
transform: translateX(-25%) scaleX(50%);
|
|
128
129
|
}
|
|
129
130
|
.drop-target > .drop-target-dropzone > .drop-target-selection.right {
|
|
130
|
-
transform:
|
|
131
|
+
transform: translateX(25%) scaleX(50%);
|
|
131
132
|
}
|
|
132
|
-
.drop-target > .drop-target-dropzone > .drop-target-selection.
|
|
133
|
-
transform:
|
|
133
|
+
.drop-target > .drop-target-dropzone > .drop-target-selection.top {
|
|
134
|
+
transform: translateY(-25%) scaleY(50%);
|
|
134
135
|
}
|
|
135
|
-
.drop-target > .drop-target-dropzone > .drop-target-selection.
|
|
136
|
-
|
|
136
|
+
.drop-target > .drop-target-dropzone > .drop-target-selection.bottom {
|
|
137
|
+
transform: translateY(25%) scaleY(50%);
|
|
137
138
|
}
|
|
138
139
|
.drop-target > .drop-target-dropzone > .drop-target-selection.small-top {
|
|
139
140
|
border-top: 1px solid var(--dv-drag-over-border-color);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dockview",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Zero dependency layout manager supporting tabs, grids and splitviews with ReactJS support",
|
|
5
5
|
"main": "./dist/cjs/index.js",
|
|
6
6
|
"types": "./dist/cjs/index.d.ts",
|
|
@@ -55,23 +55,23 @@
|
|
|
55
55
|
"author": "https://github.com/mathuo",
|
|
56
56
|
"license": "MIT",
|
|
57
57
|
"devDependencies": {
|
|
58
|
-
"@rollup/plugin-typescript": "^8.3.
|
|
59
|
-
"@testing-library/react": "^
|
|
60
|
-
"@types/react": "^
|
|
61
|
-
"@types/react-dom": "^
|
|
58
|
+
"@rollup/plugin-typescript": "^8.3.2",
|
|
59
|
+
"@testing-library/react": "^13.1.0",
|
|
60
|
+
"@types/react": "^18.0.5",
|
|
61
|
+
"@types/react-dom": "^18.0.1",
|
|
62
62
|
"cross-env": "^7.0.3",
|
|
63
|
-
"postcss": "^8.4.
|
|
64
|
-
"react": "^
|
|
65
|
-
"react-dom": "^
|
|
63
|
+
"postcss": "^8.4.12",
|
|
64
|
+
"react": "^18.0.0",
|
|
65
|
+
"react-dom": "^18.0.0",
|
|
66
66
|
"rimraf": "^3.0.2",
|
|
67
|
-
"rollup": "^2.
|
|
67
|
+
"rollup": "^2.70.2",
|
|
68
68
|
"rollup-plugin-postcss": "^4.0.2",
|
|
69
69
|
"rollup-plugin-terser": "^7.0.2",
|
|
70
|
-
"typedoc": "^0.22.
|
|
70
|
+
"typedoc": "^0.22.15"
|
|
71
71
|
},
|
|
72
72
|
"peerDependencies": {
|
|
73
73
|
"react": ">=16.8.0",
|
|
74
74
|
"react-dom": ">=16.8.0"
|
|
75
75
|
},
|
|
76
|
-
"gitHead": "
|
|
76
|
+
"gitHead": "2dc0c4ab219a5b2188b9d98e032d9b987561bf4d"
|
|
77
77
|
}
|