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.
Files changed (88) hide show
  1. package/dist/cjs/api/component.api.d.ts +1 -3
  2. package/dist/cjs/api/component.api.js +0 -14
  3. package/dist/cjs/api/component.api.js.map +1 -1
  4. package/dist/cjs/dnd/abstractDragHandler.d.ts +1 -1
  5. package/dist/cjs/dnd/abstractDragHandler.js +1 -2
  6. package/dist/cjs/dnd/abstractDragHandler.js.map +1 -1
  7. package/dist/cjs/dockview/deserializer.js.map +1 -1
  8. package/dist/cjs/dockview/dockviewComponent.d.ts +5 -3
  9. package/dist/cjs/dockview/dockviewComponent.js +45 -38
  10. package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
  11. package/dist/cjs/dockview/dockviewGroupPanel.d.ts +1 -0
  12. package/dist/cjs/dockview/dockviewGroupPanel.js +8 -0
  13. package/dist/cjs/dockview/dockviewGroupPanel.js.map +1 -1
  14. package/dist/cjs/gridview/baseComponentGridview.d.ts +3 -20
  15. package/dist/cjs/gridview/baseComponentGridview.js +9 -43
  16. package/dist/cjs/gridview/baseComponentGridview.js.map +1 -1
  17. package/dist/cjs/gridview/branchNode.js +1 -1
  18. package/dist/cjs/gridview/branchNode.js.map +1 -1
  19. package/dist/cjs/gridview/gridview.js +1 -0
  20. package/dist/cjs/gridview/gridview.js.map +1 -1
  21. package/dist/cjs/gridview/gridviewComponent.js +0 -1
  22. package/dist/cjs/gridview/gridviewComponent.js.map +1 -1
  23. package/dist/cjs/gridview/leafNode.js +1 -1
  24. package/dist/cjs/gridview/leafNode.js.map +1 -1
  25. package/dist/cjs/groupview/groupPanel.d.ts +1 -0
  26. package/dist/cjs/index.d.ts +2 -2
  27. package/dist/cjs/index.js +8 -4
  28. package/dist/cjs/index.js.map +1 -1
  29. package/dist/cjs/paneview/paneview.js +3 -2
  30. package/dist/cjs/paneview/paneview.js.map +1 -1
  31. package/dist/cjs/paneview/paneviewComponent.d.ts +1 -0
  32. package/dist/cjs/paneview/paneviewComponent.js +4 -0
  33. package/dist/cjs/paneview/paneviewComponent.js.map +1 -1
  34. package/dist/cjs/react/dockview/components.js +5 -1
  35. package/dist/cjs/react/dockview/components.js.map +1 -1
  36. package/dist/cjs/react/dockview/dockview.js +14 -1
  37. package/dist/cjs/react/dockview/dockview.js.map +1 -1
  38. package/dist/cjs/react/gridview/gridview.js +9 -2
  39. package/dist/cjs/react/gridview/gridview.js.map +1 -1
  40. package/dist/cjs/react/index.js +5 -1
  41. package/dist/cjs/react/index.js.map +1 -1
  42. package/dist/cjs/react/paneview/paneview.js +5 -1
  43. package/dist/cjs/react/paneview/paneview.js.map +1 -1
  44. package/dist/cjs/react/react.js +5 -1
  45. package/dist/cjs/react/react.js.map +1 -1
  46. package/dist/cjs/react/splitview/splitview.js +8 -2
  47. package/dist/cjs/react/splitview/splitview.js.map +1 -1
  48. package/dist/cjs/splitview/core/splitview.js +1 -1
  49. package/dist/cjs/splitview/core/splitview.js.map +1 -1
  50. package/dist/cjs/splitview/splitviewComponent.js +1 -0
  51. package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
  52. package/dist/dockview.amd.js +168 -207
  53. package/dist/dockview.amd.min.js +2 -2
  54. package/dist/dockview.amd.min.noStyle.js +2 -2
  55. package/dist/dockview.amd.noStyle.js +167 -206
  56. package/dist/dockview.cjs.js +168 -207
  57. package/dist/dockview.esm.js +168 -201
  58. package/dist/dockview.esm.min.js +2 -2
  59. package/dist/dockview.js +168 -207
  60. package/dist/dockview.min.js +2 -2
  61. package/dist/dockview.min.noStyle.js +2 -2
  62. package/dist/dockview.noStyle.js +167 -206
  63. package/dist/esm/api/component.api.d.ts +1 -3
  64. package/dist/esm/api/component.api.js +0 -6
  65. package/dist/esm/dnd/abstractDragHandler.d.ts +1 -1
  66. package/dist/esm/dnd/abstractDragHandler.js +1 -2
  67. package/dist/esm/dockview/dockviewComponent.d.ts +5 -3
  68. package/dist/esm/dockview/dockviewComponent.js +20 -36
  69. package/dist/esm/dockview/dockviewGroupPanel.d.ts +1 -0
  70. package/dist/esm/dockview/dockviewGroupPanel.js +4 -0
  71. package/dist/esm/gridview/baseComponentGridview.d.ts +3 -20
  72. package/dist/esm/gridview/baseComponentGridview.js +9 -43
  73. package/dist/esm/gridview/branchNode.js +1 -1
  74. package/dist/esm/gridview/gridview.js +1 -0
  75. package/dist/esm/gridview/gridviewComponent.js +1 -2
  76. package/dist/esm/groupview/groupPanel.d.ts +1 -0
  77. package/dist/esm/index.d.ts +2 -2
  78. package/dist/esm/index.js +1 -2
  79. package/dist/esm/paneview/paneview.js +1 -1
  80. package/dist/esm/paneview/paneviewComponent.d.ts +1 -0
  81. package/dist/esm/paneview/paneviewComponent.js +4 -0
  82. package/dist/esm/react/dockview/dockview.js +9 -0
  83. package/dist/esm/react/gridview/gridview.js +4 -1
  84. package/dist/esm/react/splitview/splitview.js +3 -1
  85. package/dist/esm/splitview/core/splitview.js +1 -1
  86. package/dist/esm/splitview/splitviewComponent.js +1 -0
  87. package/dist/styles/dockview.css +9 -8
  88. 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("..").Event<void>;
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): void;
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, GroupChangeKind, toTarget, } from '../gridview/baseComponentGridview';
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
- panels.forEach((panel) => {
295
- this.removePanel(panel);
296
- });
297
- if (this._groups.size === 1) {
298
- this._activeGroup = group;
299
- return;
296
+ for (const panel of panels) {
297
+ this.removePanel(panel, {
298
+ removeEmptyGroup: false,
299
+ });
300
300
  }
301
- super.removeGroup(group);
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, _c;
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._onGridEvent.fire({
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 { Emitter, Event } from '../events';
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?: boolean;
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._onGridEvent.fire({ kind: GroupChangeKind.LAYOUT });
42
+ this._onDidLayoutChange.fire();
58
43
  }));
59
- this.addDisposables((() => {
60
- const tickDelayedEvent = new TickDelayedEvent();
61
- return new CompositeDisposable(this.onGridEvent((event) => {
62
- if ([
63
- GroupChangeKind.ADD_GROUP,
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._onGridEvent.fire({ kind: GroupChangeKind.LAYOUT });
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();
@@ -40,7 +40,7 @@ export class BranchNode extends CompositeDisposable {
40
40
  : true,
41
41
  };
42
42
  }),
43
- size: this.orthogonalSize,
43
+ size: this.size,
44
44
  };
45
45
  this.children = childDescriptors.map((c) => c.node);
46
46
  this.splitview = new Splitview(this.element, {
@@ -149,6 +149,7 @@ export class Gridview {
149
149
  this.disposable.dispose();
150
150
  this._onDidChange.dispose();
151
151
  this.root.dispose();
152
+ this.element.remove();
152
153
  }
153
154
  clear() {
154
155
  const orientation = this.root.orientation;
@@ -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, GroupChangeKind, toTarget, } from './baseComponentGridview';
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;
@@ -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
  }
@@ -111,4 +111,5 @@ export declare class PaneviewComponent extends CompositeDisposable implements IP
111
111
  resizeToFit(): void;
112
112
  toJSON(): SerializedPaneview;
113
113
  fromJSON(serializedPaneview: SerializedPaneview, deferComponentLayout?: boolean): void;
114
+ dispose(): void;
114
115
  }
@@ -247,4 +247,8 @@ export class PaneviewComponent extends CompositeDisposable {
247
247
  queue.forEach((f) => f());
248
248
  }
249
249
  }
250
+ dispose() {
251
+ super.dispose();
252
+ this.paneview.dispose();
253
+ }
250
254
  }
@@ -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: !!props.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
  }
@@ -244,6 +244,7 @@ export class SplitviewComponent extends CompositeDisposable {
244
244
  value.dispose();
245
245
  });
246
246
  this.panels.clear();
247
+ this.splitview.dispose();
247
248
  super.dispose();
248
249
  }
249
250
  }
@@ -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, .drop-target > .drop-target-dropzone > .drop-target-selection.right {
127
- width: 50%;
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: translate(100%, 0%);
131
+ transform: translateX(25%) scaleX(50%);
131
132
  }
132
- .drop-target > .drop-target-dropzone > .drop-target-selection.bottom {
133
- transform: translate(0%, 100%);
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.top, .drop-target > .drop-target-dropzone > .drop-target-selection.bottom {
136
- height: 50%;
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.1.0",
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.0",
59
- "@testing-library/react": "^12.1.3",
60
- "@types/react": "^17.0.39",
61
- "@types/react-dom": "^17.0.11",
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.6",
64
- "react": "^17.0.1",
65
- "react-dom": "^17.0.1",
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.68.0",
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.12"
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": "1816476fbbd7c1ec674f20d0df4f443f36124660"
76
+ "gitHead": "2dc0c4ab219a5b2188b9d98e032d9b987561bf4d"
77
77
  }