dockview-core 3.0.1 → 3.1.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 (58) hide show
  1. package/dist/cjs/api/dockviewGroupPanelApi.d.ts +1 -2
  2. package/dist/cjs/api/dockviewGroupPanelApi.js +1 -17
  3. package/dist/cjs/dockview/components/tab/defaultTab.js +0 -3
  4. package/dist/cjs/dockview/components/titlebar/tabsContainer.js +15 -6
  5. package/dist/cjs/dockview/dockviewComponent.d.ts +1 -1
  6. package/dist/cjs/dockview/dockviewComponent.js +15 -2
  7. package/dist/cjs/dockview/dockviewGroupPanel.js +3 -0
  8. package/dist/cjs/gridview/baseComponentGridview.d.ts +1 -1
  9. package/dist/cjs/gridview/baseComponentGridview.js +4 -2
  10. package/dist/cjs/gridview/gridviewComponent.d.ts +1 -1
  11. package/dist/cjs/gridview/gridviewComponent.js +2 -2
  12. package/dist/cjs/paneview/paneviewComponent.d.ts +1 -1
  13. package/dist/cjs/paneview/paneviewComponent.js +6 -2
  14. package/dist/cjs/splitview/splitview.d.ts +1 -1
  15. package/dist/cjs/splitview/splitview.js +3 -3
  16. package/dist/cjs/splitview/splitviewComponent.d.ts +1 -1
  17. package/dist/cjs/splitview/splitviewComponent.js +6 -2
  18. package/dist/dockview-core.amd.js +57 -39
  19. package/dist/dockview-core.amd.js.map +1 -1
  20. package/dist/dockview-core.amd.min.js +2 -2
  21. package/dist/dockview-core.amd.min.js.map +1 -1
  22. package/dist/dockview-core.amd.min.noStyle.js +2 -2
  23. package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
  24. package/dist/dockview-core.amd.noStyle.js +56 -38
  25. package/dist/dockview-core.amd.noStyle.js.map +1 -1
  26. package/dist/dockview-core.cjs.js +57 -39
  27. package/dist/dockview-core.cjs.js.map +1 -1
  28. package/dist/dockview-core.esm.js +57 -39
  29. package/dist/dockview-core.esm.js.map +1 -1
  30. package/dist/dockview-core.esm.min.js +2 -2
  31. package/dist/dockview-core.esm.min.js.map +1 -1
  32. package/dist/dockview-core.js +57 -39
  33. package/dist/dockview-core.js.map +1 -1
  34. package/dist/dockview-core.min.js +2 -2
  35. package/dist/dockview-core.min.js.map +1 -1
  36. package/dist/dockview-core.min.noStyle.js +2 -2
  37. package/dist/dockview-core.min.noStyle.js.map +1 -1
  38. package/dist/dockview-core.noStyle.js +56 -38
  39. package/dist/dockview-core.noStyle.js.map +1 -1
  40. package/dist/esm/api/dockviewGroupPanelApi.d.ts +1 -2
  41. package/dist/esm/api/dockviewGroupPanelApi.js +1 -16
  42. package/dist/esm/dockview/components/tab/defaultTab.js +0 -3
  43. package/dist/esm/dockview/components/titlebar/tabsContainer.js +15 -6
  44. package/dist/esm/dockview/dockviewComponent.d.ts +1 -1
  45. package/dist/esm/dockview/dockviewComponent.js +15 -2
  46. package/dist/esm/dockview/dockviewGroupPanel.js +3 -0
  47. package/dist/esm/gridview/baseComponentGridview.d.ts +1 -1
  48. package/dist/esm/gridview/baseComponentGridview.js +4 -2
  49. package/dist/esm/gridview/gridviewComponent.d.ts +1 -1
  50. package/dist/esm/gridview/gridviewComponent.js +2 -2
  51. package/dist/esm/paneview/paneviewComponent.d.ts +1 -1
  52. package/dist/esm/paneview/paneviewComponent.js +6 -2
  53. package/dist/esm/splitview/splitview.d.ts +1 -1
  54. package/dist/esm/splitview/splitview.js +3 -3
  55. package/dist/esm/splitview/splitviewComponent.d.ts +1 -1
  56. package/dist/esm/splitview/splitviewComponent.js +6 -2
  57. package/dist/styles/dockview.css +2 -2
  58. package/package.json +1 -1
@@ -31,11 +31,10 @@ export interface DockviewGroupPanelFloatingChangeEvent {
31
31
  }
32
32
  export declare class DockviewGroupPanelApiImpl extends GridviewPanelApiImpl {
33
33
  private readonly accessor;
34
- private readonly _mutableDisposable;
35
34
  private _group;
36
35
  readonly _onDidLocationChange: Emitter<DockviewGroupPanelFloatingChangeEvent>;
37
36
  readonly onDidLocationChange: Event<DockviewGroupPanelFloatingChangeEvent>;
38
- private readonly _onDidActivePanelChange;
37
+ readonly _onDidActivePanelChange: Emitter<DockviewGroupChangeEvent>;
39
38
  readonly onDidActivePanelChange: Event<DockviewGroupChangeEvent>;
40
39
  get location(): DockviewGroupLocation;
41
40
  constructor(id: string, accessor: DockviewComponent);
@@ -18,7 +18,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.DockviewGroupPanelApiImpl = void 0;
19
19
  var droptarget_1 = require("../dnd/droptarget");
20
20
  var events_1 = require("../events");
21
- var lifecycle_1 = require("../lifecycle");
22
21
  var gridviewPanelApi_1 = require("./gridviewPanelApi");
23
22
  var NOT_INITIALIZED_MESSAGE = 'dockview: DockviewGroupPanelApiImpl not initialized';
24
23
  var DockviewGroupPanelApiImpl = /** @class */ (function (_super) {
@@ -26,12 +25,11 @@ var DockviewGroupPanelApiImpl = /** @class */ (function (_super) {
26
25
  function DockviewGroupPanelApiImpl(id, accessor) {
27
26
  var _this = _super.call(this, id, '__dockviewgroup__') || this;
28
27
  _this.accessor = accessor;
29
- _this._mutableDisposable = new lifecycle_1.MutableDisposable();
30
28
  _this._onDidLocationChange = new events_1.Emitter();
31
29
  _this.onDidLocationChange = _this._onDidLocationChange.event;
32
30
  _this._onDidActivePanelChange = new events_1.Emitter();
33
31
  _this.onDidActivePanelChange = _this._onDidActivePanelChange.event;
34
- _this.addDisposables(_this._onDidLocationChange, _this._onDidActivePanelChange, _this._mutableDisposable);
32
+ _this.addDisposables(_this._onDidLocationChange, _this._onDidActivePanelChange);
35
33
  return _this;
36
34
  }
37
35
  Object.defineProperty(DockviewGroupPanelApiImpl.prototype, "location", {
@@ -100,21 +98,7 @@ var DockviewGroupPanelApiImpl = /** @class */ (function (_super) {
100
98
  }
101
99
  };
102
100
  DockviewGroupPanelApiImpl.prototype.initialize = function (group) {
103
- /**
104
- * TODO: Annoying initialization order caveat, find a better way to initialize and avoid needing null checks
105
- *
106
- * Due to the order on initialization we know that the model isn't defined until later in the same stack-frame of setup.
107
- * By queuing a microtask we can ensure the setup is completed within the same stack-frame, but after everything else has
108
- * finished ensuring the `model` is defined.
109
- */
110
- var _this = this;
111
101
  this._group = group;
112
- queueMicrotask(function () {
113
- _this._mutableDisposable.value =
114
- _this._group.model.onDidActivePanelChange(function (event) {
115
- _this._onDidActivePanelChange.fire(event);
116
- });
117
- });
118
102
  };
119
103
  return DockviewGroupPanelApiImpl;
120
104
  }(gridviewPanelApi_1.GridviewPanelApiImpl));
@@ -32,9 +32,6 @@ var DefaultTab = /** @class */ (function (_super) {
32
32
  _this.action.appendChild((0, svg_1.createCloseButton)());
33
33
  _this._element.appendChild(_this._content);
34
34
  _this._element.appendChild(_this.action);
35
- _this.addDisposables((0, events_1.addDisposableListener)(_this.action, 'pointerdown', function (ev) {
36
- ev.preventDefault();
37
- }));
38
35
  _this.render();
39
36
  return _this;
40
37
  }
@@ -228,6 +228,9 @@ var TabsContainer = /** @class */ (function (_super) {
228
228
  TabsContainer.prototype.delete = function (id) {
229
229
  var index = this.tabs.findIndex(function (tab) { return tab.value.panel.id === id; });
230
230
  var tabToRemove = this.tabs.splice(index, 1)[0];
231
+ if (!tabToRemove) {
232
+ throw new Error("dockview: Tab not found");
233
+ }
231
234
  var value = tabToRemove.value, disposable = tabToRemove.disposable;
232
235
  disposable.dispose();
233
236
  value.dispose();
@@ -251,6 +254,9 @@ var TabsContainer = /** @class */ (function (_super) {
251
254
  var disposable = new lifecycle_1.CompositeDisposable(tab.onDragStart(function (event) {
252
255
  _this._onTabDragStart.fire({ nativeEvent: event, panel: panel });
253
256
  }), tab.onChanged(function (event) {
257
+ if (event.defaultPrevented) {
258
+ return;
259
+ }
254
260
  var isFloatingGroupsEnabled = !_this.accessor.options.disableFloatingGroups;
255
261
  var isFloatingWithOnePanel = _this.group.api.location.type === 'floating' &&
256
262
  _this.size === 1;
@@ -268,12 +274,15 @@ var TabsContainer = /** @class */ (function (_super) {
268
274
  });
269
275
  return;
270
276
  }
271
- var isLeftClick = event.button === 0;
272
- if (!isLeftClick || event.defaultPrevented) {
273
- return;
274
- }
275
- if (_this.group.activePanel !== panel) {
276
- _this.group.model.openPanel(panel);
277
+ switch (event.button) {
278
+ case 0: // left click or touch
279
+ if (_this.group.activePanel !== panel) {
280
+ _this.group.model.openPanel(panel);
281
+ }
282
+ break;
283
+ case 1: // middle click
284
+ panel.api.close();
285
+ break;
277
286
  }
278
287
  }), tab.onDrop(function (event) {
279
288
  _this._onDrop.fire({
@@ -207,7 +207,7 @@ export declare class DockviewComponent extends BaseGrid<DockviewGroupPanel> impl
207
207
  get api(): DockviewApi;
208
208
  get gap(): number;
209
209
  get floatingGroups(): DockviewFloatingGroupPanel[];
210
- constructor(parentElement: HTMLElement, options: DockviewComponentOptions);
210
+ constructor(container: HTMLElement, options: DockviewComponentOptions);
211
211
  setVisible(panel: DockviewGroupPanel, visible: boolean): void;
212
212
  addPopoutGroup(itemToPopout: DockviewPanel | DockviewGroupPanel, options?: DockviewPopoutGroupOptions): Promise<boolean>;
213
213
  addFloatingGroup(item: DockviewPanel | DockviewGroupPanel, options?: FloatingGroupOptionsInternal): void;
@@ -107,9 +107,9 @@ function moveGroupWithoutDestroying(options) {
107
107
  }
108
108
  var DockviewComponent = /** @class */ (function (_super) {
109
109
  __extends(DockviewComponent, _super);
110
- function DockviewComponent(parentElement, options) {
110
+ function DockviewComponent(container, options) {
111
111
  var _a;
112
- var _this = _super.call(this, parentElement, {
112
+ var _this = _super.call(this, container, {
113
113
  proportionalLayout: true,
114
114
  orientation: splitview_1.Orientation.HORIZONTAL,
115
115
  styles: options.hideBorders
@@ -541,6 +541,9 @@ var DockviewComponent = /** @class */ (function (_super) {
541
541
  (0, events_1.addDisposableWindowListener)(_window.window, 'resize', function () {
542
542
  group.layout(_window.window.innerWidth, _window.window.innerHeight);
543
543
  }), overlayRenderContainer, lifecycle_1.Disposable.from(function () {
544
+ if (_this.isDisposed) {
545
+ return; // cleanup may run after instance is disposed
546
+ }
544
547
  if (isGroupAddedToDom &&
545
548
  _this.getPanel(referenceGroup.id)) {
546
549
  _this.movingLock(function () {
@@ -562,6 +565,16 @@ var DockviewComponent = /** @class */ (function (_super) {
562
565
  group.model.renderContainer =
563
566
  _this.overlayRenderContainer;
564
567
  returnedGroup = group;
568
+ var alreadyRemoved = !_this._popoutGroups.find(function (p) { return p.popoutGroup === group; });
569
+ if (alreadyRemoved) {
570
+ /**
571
+ * If this popout group was explicitly removed then we shouldn't run the additional
572
+ * steps. To tell if the running of this disposable is the result of this popout group
573
+ * being explicitly removed we can check if this popout group is still referenced in
574
+ * the `this._popoutGroups` list.
575
+ */
576
+ return;
577
+ }
565
578
  if (floatingBox) {
566
579
  _this.addFloatingGroup(group, {
567
580
  height: floatingBox.height,
@@ -33,6 +33,9 @@ var DockviewGroupPanel = /** @class */ (function (_super) {
33
33
  }, new dockviewGroupPanelApi_1.DockviewGroupPanelApiImpl(id, accessor)) || this;
34
34
  _this.api.initialize(_this); // cannot use 'this' after after 'super' call
35
35
  _this._model = new dockviewGroupPanelModel_1.DockviewGroupPanelModel(_this.element, accessor, id, options, _this);
36
+ _this.addDisposables(_this.model.onDidActivePanelChange(function (event) {
37
+ _this.api._onDidActivePanelChange.fire(event);
38
+ }));
36
39
  return _this;
37
40
  }
38
41
  Object.defineProperty(DockviewGroupPanel.prototype, "minimumWidth", {
@@ -81,7 +81,7 @@ export declare abstract class BaseGrid<T extends IGridPanelView> extends Resizab
81
81
  get activeGroup(): T | undefined;
82
82
  get locked(): boolean;
83
83
  set locked(value: boolean);
84
- constructor(parentElement: HTMLElement, options: BaseGridOptions);
84
+ constructor(container: HTMLElement, options: BaseGridOptions);
85
85
  abstract toJSON(): object;
86
86
  abstract fromJSON(data: any): void;
87
87
  abstract clear(): void;
@@ -53,9 +53,9 @@ function toTarget(direction) {
53
53
  exports.toTarget = toTarget;
54
54
  var BaseGrid = /** @class */ (function (_super) {
55
55
  __extends(BaseGrid, _super);
56
- function BaseGrid(parentElement, options) {
56
+ function BaseGrid(container, options) {
57
57
  var _a;
58
- var _this = _super.call(this, parentElement, options.disableAutoResizing) || this;
58
+ var _this = _super.call(this, document.createElement('div'), options.disableAutoResizing) || this;
59
59
  _this._id = nextLayoutId.next();
60
60
  _this._groups = new Map();
61
61
  _this._onDidRemove = new events_1.Emitter();
@@ -74,6 +74,8 @@ var BaseGrid = /** @class */ (function (_super) {
74
74
  _this.element.style.width = '100%';
75
75
  _this._classNames = new dom_1.Classnames(_this.element);
76
76
  _this._classNames.setClassNames((_a = options.className) !== null && _a !== void 0 ? _a : '');
77
+ // the container is owned by the third-party, do not modify/delete it
78
+ container.appendChild(_this.element);
77
79
  _this.gridview = new gridview_1.Gridview(!!options.proportionalLayout, options.styles, options.orientation, options.locked, options.margin);
78
80
  _this.gridview.locked = !!options.locked;
79
81
  _this.element.appendChild(_this.gridview.element);
@@ -61,7 +61,7 @@ export declare class GridviewComponent extends BaseGrid<GridviewPanel> implement
61
61
  get options(): GridviewComponentOptions;
62
62
  get deserializer(): IPanelDeserializer | undefined;
63
63
  set deserializer(value: IPanelDeserializer | undefined);
64
- constructor(parentElement: HTMLElement, options: GridviewComponentOptions);
64
+ constructor(container: HTMLElement, options: GridviewComponentOptions);
65
65
  updateOptions(options: Partial<GridviewComponentOptions>): void;
66
66
  removePanel(panel: GridviewPanel): void;
67
67
  /**
@@ -61,9 +61,9 @@ var baseComponentGridview_1 = require("./baseComponentGridview");
61
61
  var events_1 = require("../events");
62
62
  var GridviewComponent = /** @class */ (function (_super) {
63
63
  __extends(GridviewComponent, _super);
64
- function GridviewComponent(parentElement, options) {
64
+ function GridviewComponent(container, options) {
65
65
  var _a;
66
- var _this = _super.call(this, parentElement, {
66
+ var _this = _super.call(this, container, {
67
67
  proportionalLayout: (_a = options.proportionalLayout) !== null && _a !== void 0 ? _a : true,
68
68
  orientation: options.orientation,
69
69
  styles: options.hideBorders
@@ -110,7 +110,7 @@ export declare class PaneviewComponent extends Resizable implements IPaneviewCom
110
110
  get height(): number;
111
111
  get width(): number;
112
112
  get options(): PaneviewComponentOptions;
113
- constructor(parentElement: HTMLElement, options: PaneviewComponentOptions);
113
+ constructor(container: HTMLElement, options: PaneviewComponentOptions);
114
114
  setVisible(panel: PaneviewPanel, visible: boolean): void;
115
115
  focus(): void;
116
116
  updateOptions(options: Partial<PaneviewComponentOptions>): void;
@@ -83,9 +83,9 @@ var PaneFramework = /** @class */ (function (_super) {
83
83
  exports.PaneFramework = PaneFramework;
84
84
  var PaneviewComponent = /** @class */ (function (_super) {
85
85
  __extends(PaneviewComponent, _super);
86
- function PaneviewComponent(parentElement, options) {
86
+ function PaneviewComponent(container, options) {
87
87
  var _a;
88
- var _this = _super.call(this, parentElement, options.disableAutoResizing) || this;
88
+ var _this = _super.call(this, document.createElement('div'), options.disableAutoResizing) || this;
89
89
  _this._id = nextLayoutId.next();
90
90
  _this._disposable = new lifecycle_1.MutableDisposable();
91
91
  _this._viewDisposables = new Map();
@@ -101,9 +101,13 @@ var PaneviewComponent = /** @class */ (function (_super) {
101
101
  _this.onDidRemoveView = _this._onDidRemoveView.event;
102
102
  _this._onUnhandledDragOverEvent = new events_1.Emitter();
103
103
  _this.onUnhandledDragOverEvent = _this._onUnhandledDragOverEvent.event;
104
+ _this.element.style.height = '100%';
105
+ _this.element.style.width = '100%';
104
106
  _this.addDisposables(_this._onDidLayoutChange, _this._onDidLayoutfromJSON, _this._onDidDrop, _this._onDidAddView, _this._onDidRemoveView, _this._onUnhandledDragOverEvent);
105
107
  _this._classNames = new dom_1.Classnames(_this.element);
106
108
  _this._classNames.setClassNames((_a = options.className) !== null && _a !== void 0 ? _a : '');
109
+ // the container is owned by the third-party, do not modify/delete it
110
+ container.appendChild(_this.element);
107
111
  _this._options = options;
108
112
  _this.paneview = new paneview_1.Paneview(_this.element, {
109
113
  // only allow paneview in the vertical orientation for now
@@ -14,7 +14,7 @@ export interface ISplitviewStyles {
14
14
  separatorBorder: string;
15
15
  }
16
16
  export interface SplitViewOptions {
17
- orientation: Orientation;
17
+ orientation?: Orientation;
18
18
  descriptor?: ISplitViewDescriptor;
19
19
  proportionalLayout?: boolean;
20
20
  styles?: ISplitviewStyles;
@@ -79,7 +79,7 @@ var Sizing;
79
79
  var Splitview = /** @class */ (function () {
80
80
  function Splitview(container, options) {
81
81
  var _this = this;
82
- var _a;
82
+ var _a, _b;
83
83
  this.container = container;
84
84
  this.viewItems = [];
85
85
  this.sashes = [];
@@ -201,9 +201,9 @@ var Splitview = /** @class */ (function () {
201
201
  //
202
202
  return delta;
203
203
  };
204
- this._orientation = options.orientation;
204
+ this._orientation = (_a = options.orientation) !== null && _a !== void 0 ? _a : Orientation.VERTICAL;
205
205
  this.element = this.createContainer();
206
- this.margin = (_a = options.margin) !== null && _a !== void 0 ? _a : 0;
206
+ this.margin = (_b = options.margin) !== null && _b !== void 0 ? _b : 0;
207
207
  this.proportionalLayout =
208
208
  options.proportionalLayout === undefined
209
209
  ? true
@@ -83,7 +83,7 @@ export declare class SplitviewComponent extends Resizable implements ISplitviewC
83
83
  get maximumSize(): number;
84
84
  get height(): number;
85
85
  get width(): number;
86
- constructor(parentElement: HTMLElement, options: SplitviewComponentOptions);
86
+ constructor(container: HTMLElement, options: SplitviewComponentOptions);
87
87
  updateOptions(options: Partial<SplitviewComponentOptions>): void;
88
88
  focus(): void;
89
89
  movePanel(from: number, to: number): void;
@@ -64,9 +64,9 @@ var dom_1 = require("../dom");
64
64
  */
65
65
  var SplitviewComponent = /** @class */ (function (_super) {
66
66
  __extends(SplitviewComponent, _super);
67
- function SplitviewComponent(parentElement, options) {
67
+ function SplitviewComponent(container, options) {
68
68
  var _a;
69
- var _this = _super.call(this, parentElement, options.disableAutoResizing) || this;
69
+ var _this = _super.call(this, document.createElement('div'), options.disableAutoResizing) || this;
70
70
  _this._splitviewChangeDisposable = new lifecycle_1.MutableDisposable();
71
71
  _this._panels = new Map();
72
72
  _this._onDidLayoutfromJSON = new events_1.Emitter();
@@ -77,8 +77,12 @@ var SplitviewComponent = /** @class */ (function (_super) {
77
77
  _this.onDidRemoveView = _this._onDidRemoveView.event;
78
78
  _this._onDidLayoutChange = new events_1.Emitter();
79
79
  _this.onDidLayoutChange = _this._onDidLayoutChange.event;
80
+ _this.element.style.height = '100%';
81
+ _this.element.style.width = '100%';
80
82
  _this._classNames = new dom_1.Classnames(_this.element);
81
83
  _this._classNames.setClassNames((_a = options.className) !== null && _a !== void 0 ? _a : '');
84
+ // the container is owned by the third-party, do not modify/delete it
85
+ container.appendChild(_this.element);
82
86
  _this._options = options;
83
87
  _this.splitview = new splitview_1.Splitview(_this.element, options);
84
88
  _this.addDisposables(_this._onDidAddView, _this._onDidLayoutfromJSON, _this._onDidRemoveView, _this._onDidLayoutChange);