dockview-core 1.17.2 → 2.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 (132) hide show
  1. package/dist/cjs/api/component.api.d.ts +3 -3
  2. package/dist/cjs/api/dockviewGroupPanelApi.d.ts +10 -8
  3. package/dist/cjs/api/dockviewGroupPanelApi.js +1 -0
  4. package/dist/cjs/api/dockviewPanelApi.d.ts +6 -14
  5. package/dist/cjs/api/dockviewPanelApi.js +5 -3
  6. package/dist/cjs/dnd/abstractDragHandler.js +1 -1
  7. package/dist/cjs/dnd/dnd.d.ts +2 -2
  8. package/dist/cjs/dnd/droptarget.js +4 -4
  9. package/dist/cjs/dockview/components/panel/content.d.ts +2 -2
  10. package/dist/cjs/dockview/components/panel/content.js +3 -1
  11. package/dist/cjs/dockview/components/tab/defaultTab.d.ts +3 -3
  12. package/dist/cjs/dockview/components/tab/tab.js +4 -4
  13. package/dist/cjs/dockview/components/titlebar/tabsContainer.js +5 -9
  14. package/dist/cjs/dockview/components/titlebar/voidContainer.js +1 -2
  15. package/dist/cjs/dockview/components/watermark/watermark.d.ts +1 -4
  16. package/dist/cjs/dockview/components/watermark/watermark.js +2 -34
  17. package/dist/cjs/dockview/dockviewComponent.d.ts +33 -16
  18. package/dist/cjs/dockview/dockviewComponent.js +103 -38
  19. package/dist/cjs/dockview/dockviewGroupPanel.js +16 -12
  20. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +4 -3
  21. package/dist/cjs/dockview/dockviewGroupPanelModel.js +10 -10
  22. package/dist/cjs/dockview/dockviewPanel.d.ts +4 -4
  23. package/dist/cjs/dockview/dockviewPanelModel.d.ts +1 -1
  24. package/dist/cjs/dockview/options.d.ts +12 -0
  25. package/dist/cjs/dockview/options.js +1 -0
  26. package/dist/cjs/dom.d.ts +11 -1
  27. package/dist/cjs/dom.js +19 -1
  28. package/dist/cjs/gridview/baseComponentGridview.d.ts +8 -3
  29. package/dist/cjs/gridview/baseComponentGridview.js +8 -8
  30. package/dist/cjs/gridview/basePanelView.d.ts +1 -1
  31. package/dist/cjs/gridview/branchNode.d.ts +1 -1
  32. package/dist/cjs/gridview/branchNode.js +1 -1
  33. package/dist/cjs/gridview/gridview.d.ts +9 -1
  34. package/dist/cjs/gridview/gridview.js +51 -7
  35. package/dist/cjs/gridview/gridviewPanel.d.ts +4 -0
  36. package/dist/cjs/gridview/gridviewPanel.js +60 -32
  37. package/dist/cjs/gridview/leafNode.d.ts +1 -1
  38. package/dist/cjs/index.d.ts +8 -9
  39. package/dist/cjs/index.js +14 -7
  40. package/dist/cjs/overlay/overlay.d.ts +6 -3
  41. package/dist/cjs/overlay/overlay.js +15 -0
  42. package/dist/cjs/paneview/defaultPaneviewHeader.d.ts +1 -1
  43. package/dist/cjs/paneview/defaultPaneviewHeader.js +5 -3
  44. package/dist/cjs/paneview/paneview.d.ts +3 -3
  45. package/dist/cjs/paneview/paneview.js +3 -3
  46. package/dist/cjs/paneview/paneviewComponent.d.ts +2 -2
  47. package/dist/cjs/paneview/paneviewPanel.d.ts +2 -2
  48. package/dist/cjs/paneview/paneviewPanel.js +3 -3
  49. package/dist/cjs/popoutWindow.js +23 -16
  50. package/dist/cjs/splitview/splitview.d.ts +6 -6
  51. package/dist/cjs/splitview/splitview.js +18 -17
  52. package/dist/cjs/splitview/splitviewComponent.d.ts +2 -2
  53. package/dist/cjs/splitview/viewItem.d.ts +1 -1
  54. package/dist/cjs/svg.js +1 -1
  55. package/dist/dockview-core.amd.js +346 -210
  56. package/dist/dockview-core.amd.js.map +1 -1
  57. package/dist/dockview-core.amd.min.js +2 -2
  58. package/dist/dockview-core.amd.min.js.map +1 -1
  59. package/dist/dockview-core.amd.min.noStyle.js +2 -2
  60. package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
  61. package/dist/dockview-core.amd.noStyle.js +345 -209
  62. package/dist/dockview-core.amd.noStyle.js.map +1 -1
  63. package/dist/dockview-core.cjs.js +346 -210
  64. package/dist/dockview-core.cjs.js.map +1 -1
  65. package/dist/dockview-core.esm.js +347 -209
  66. package/dist/dockview-core.esm.js.map +1 -1
  67. package/dist/dockview-core.esm.min.js +2 -2
  68. package/dist/dockview-core.esm.min.js.map +1 -1
  69. package/dist/dockview-core.js +346 -210
  70. package/dist/dockview-core.js.map +1 -1
  71. package/dist/dockview-core.min.js +2 -2
  72. package/dist/dockview-core.min.js.map +1 -1
  73. package/dist/dockview-core.min.noStyle.js +2 -2
  74. package/dist/dockview-core.min.noStyle.js.map +1 -1
  75. package/dist/dockview-core.noStyle.js +345 -209
  76. package/dist/dockview-core.noStyle.js.map +1 -1
  77. package/dist/esm/api/component.api.d.ts +3 -3
  78. package/dist/esm/api/dockviewGroupPanelApi.d.ts +10 -8
  79. package/dist/esm/api/dockviewGroupPanelApi.js +1 -0
  80. package/dist/esm/api/dockviewPanelApi.d.ts +6 -14
  81. package/dist/esm/api/dockviewPanelApi.js +5 -3
  82. package/dist/esm/dnd/abstractDragHandler.js +1 -1
  83. package/dist/esm/dnd/dnd.d.ts +2 -2
  84. package/dist/esm/dnd/droptarget.js +4 -4
  85. package/dist/esm/dockview/components/panel/content.d.ts +2 -2
  86. package/dist/esm/dockview/components/panel/content.js +4 -2
  87. package/dist/esm/dockview/components/tab/defaultTab.d.ts +3 -3
  88. package/dist/esm/dockview/components/tab/tab.js +4 -4
  89. package/dist/esm/dockview/components/titlebar/tabsContainer.js +5 -9
  90. package/dist/esm/dockview/components/titlebar/voidContainer.js +1 -2
  91. package/dist/esm/dockview/components/watermark/watermark.d.ts +1 -4
  92. package/dist/esm/dockview/components/watermark/watermark.js +2 -34
  93. package/dist/esm/dockview/dockviewComponent.d.ts +33 -16
  94. package/dist/esm/dockview/dockviewComponent.js +102 -37
  95. package/dist/esm/dockview/dockviewGroupPanel.js +16 -12
  96. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +4 -3
  97. package/dist/esm/dockview/dockviewGroupPanelModel.js +10 -10
  98. package/dist/esm/dockview/dockviewPanel.d.ts +4 -4
  99. package/dist/esm/dockview/dockviewPanelModel.d.ts +1 -1
  100. package/dist/esm/dockview/options.d.ts +12 -0
  101. package/dist/esm/dockview/options.js +1 -0
  102. package/dist/esm/dom.d.ts +11 -1
  103. package/dist/esm/dom.js +14 -0
  104. package/dist/esm/gridview/baseComponentGridview.d.ts +8 -3
  105. package/dist/esm/gridview/baseComponentGridview.js +8 -4
  106. package/dist/esm/gridview/basePanelView.d.ts +1 -1
  107. package/dist/esm/gridview/branchNode.d.ts +1 -1
  108. package/dist/esm/gridview/branchNode.js +1 -1
  109. package/dist/esm/gridview/gridview.d.ts +9 -1
  110. package/dist/esm/gridview/gridview.js +51 -7
  111. package/dist/esm/gridview/gridviewPanel.d.ts +4 -0
  112. package/dist/esm/gridview/gridviewPanel.js +40 -12
  113. package/dist/esm/gridview/leafNode.d.ts +1 -1
  114. package/dist/esm/index.d.ts +8 -9
  115. package/dist/esm/index.js +5 -6
  116. package/dist/esm/overlay/overlay.d.ts +6 -3
  117. package/dist/esm/overlay/overlay.js +11 -0
  118. package/dist/esm/paneview/defaultPaneviewHeader.d.ts +1 -1
  119. package/dist/esm/paneview/defaultPaneviewHeader.js +5 -3
  120. package/dist/esm/paneview/paneview.d.ts +3 -3
  121. package/dist/esm/paneview/paneview.js +3 -3
  122. package/dist/esm/paneview/paneviewComponent.d.ts +2 -2
  123. package/dist/esm/paneview/paneviewPanel.d.ts +2 -2
  124. package/dist/esm/paneview/paneviewPanel.js +3 -3
  125. package/dist/esm/popoutWindow.js +24 -17
  126. package/dist/esm/splitview/splitview.d.ts +6 -6
  127. package/dist/esm/splitview/splitview.js +18 -17
  128. package/dist/esm/splitview/splitviewComponent.d.ts +2 -2
  129. package/dist/esm/splitview/viewItem.d.ts +1 -1
  130. package/dist/esm/svg.js +1 -1
  131. package/dist/styles/dockview.css +111 -151
  132. package/package.json +1 -1
@@ -144,6 +144,8 @@ var DockviewComponent = /** @class */ (function (_super) {
144
144
  _this.onDidActivePanelChange = _this._onDidActivePanelChange.event;
145
145
  _this._onDidMovePanel = new events_1.Emitter();
146
146
  _this.onDidMovePanel = _this._onDidMovePanel.event;
147
+ _this._onDidMaximizedGroupChange = new events_1.Emitter();
148
+ _this.onDidMaximizedGroupChange = _this._onDidMaximizedGroupChange.event;
147
149
  _this._floatingGroups = [];
148
150
  _this._popoutGroups = [];
149
151
  _this._onDidRemoveGroup = new events_1.Emitter();
@@ -170,6 +172,11 @@ var DockviewComponent = /** @class */ (function (_super) {
170
172
  if (!_this._moving) {
171
173
  _this._onDidActiveGroupChange.fire(event);
172
174
  }
175
+ }), _this.onDidMaximizedChange(function (event) {
176
+ _this._onDidMaximizedGroupChange.fire({
177
+ group: event.panel,
178
+ isMaximized: event.isMaximized,
179
+ });
173
180
  }), events_1.Event.any(_this.onDidAdd, _this.onDidRemove)(function () {
174
181
  _this.updateWatermark();
175
182
  }), events_1.Event.any(_this.onDidAddPanel, _this.onDidRemovePanel, _this.onDidAddGroup, _this.onDidRemove, _this.onDidMovePanel, _this.onDidActivePanelChange)(function () {
@@ -358,9 +365,29 @@ var DockviewComponent = /** @class */ (function (_super) {
358
365
  enumerable: false,
359
366
  configurable: true
360
367
  });
368
+ DockviewComponent.prototype.setVisible = function (panel, visible) {
369
+ switch (panel.api.location.type) {
370
+ case 'grid':
371
+ _super.prototype.setVisible.call(this, panel, visible);
372
+ break;
373
+ case 'floating': {
374
+ var item = this.floatingGroups.find(function (floatingGroup) { return floatingGroup.group === panel; });
375
+ if (item) {
376
+ item.overlay.setVisible(visible);
377
+ panel.api._onDidVisibilityChange.fire({
378
+ isVisible: visible,
379
+ });
380
+ }
381
+ break;
382
+ }
383
+ case 'popout':
384
+ console.warn('dockview: You cannot hide a group that is in a popout window');
385
+ break;
386
+ }
387
+ };
361
388
  DockviewComponent.prototype.addPopoutGroup = function (itemToPopout, options) {
362
389
  var _this = this;
363
- var _a, _b, _c;
390
+ var _a, _b, _c, _d, _e;
364
391
  if (itemToPopout instanceof dockviewPanel_1.DockviewPanel &&
365
392
  itemToPopout.group.size === 1) {
366
393
  return this.addPopoutGroup(itemToPopout.group, options);
@@ -381,12 +408,9 @@ var DockviewComponent = /** @class */ (function (_super) {
381
408
  }
382
409
  var box = getBox();
383
410
  var groupId = (_b = (_a = options === null || options === void 0 ? void 0 : options.overridePopoutGroup) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : this.getNextGroupId();
384
- if (itemToPopout.api.location.type === 'grid') {
385
- itemToPopout.api.setVisible(false);
386
- }
387
411
  var _window = new popoutWindow_1.PopoutWindow("".concat(this.id, "-").concat(groupId), // unique id
388
412
  theme !== null && theme !== void 0 ? theme : '', {
389
- url: (_c = options === null || options === void 0 ? void 0 : options.popoutUrl) !== null && _c !== void 0 ? _c : '/popout.html',
413
+ url: (_e = (_c = options === null || options === void 0 ? void 0 : options.popoutUrl) !== null && _c !== void 0 ? _c : (_d = this.options) === null || _d === void 0 ? void 0 : _d.popoutUrl) !== null && _e !== void 0 ? _e : '/popout.html',
390
414
  left: window.screenX + box.left,
391
415
  top: window.screenY + box.top,
392
416
  width: box.width,
@@ -400,13 +424,12 @@ var DockviewComponent = /** @class */ (function (_super) {
400
424
  return _window
401
425
  .open()
402
426
  .then(function (popoutContainer) {
403
- var _a;
404
427
  if (_window.isDisposed) {
405
- return;
428
+ return false;
406
429
  }
407
430
  if (popoutContainer === null) {
408
431
  popoutWindowDisposable.dispose();
409
- return;
432
+ return false;
410
433
  }
411
434
  var gready = document.createElement('div');
412
435
  gready.className = 'dv-overlay-render-container';
@@ -415,32 +438,47 @@ var DockviewComponent = /** @class */ (function (_super) {
415
438
  ? itemToPopout.group
416
439
  : itemToPopout;
417
440
  var referenceLocation = itemToPopout.api.location.type;
418
- var group = (_a = options === null || options === void 0 ? void 0 : options.overridePopoutGroup) !== null && _a !== void 0 ? _a : _this.createGroup({ id: groupId });
419
- group.model.renderContainer = overlayRenderContainer;
420
- if (!(options === null || options === void 0 ? void 0 : options.overridePopoutGroup)) {
421
- _this._onDidAddGroup.fire(group);
441
+ /**
442
+ * The group that is being added doesn't already exist within the DOM, the most likely occurance
443
+ * of this case is when being called from the `fromJSON(...)` method
444
+ */
445
+ var isGroupAddedToDom = referenceGroup.element.parentElement !== null;
446
+ var group;
447
+ if (!isGroupAddedToDom) {
448
+ group = referenceGroup;
422
449
  }
423
- if (itemToPopout instanceof dockviewPanel_1.DockviewPanel) {
424
- _this.movingLock(function () {
425
- var panel = referenceGroup.model.removePanel(itemToPopout);
426
- group.model.openPanel(panel);
427
- });
450
+ else if (options === null || options === void 0 ? void 0 : options.overridePopoutGroup) {
451
+ group = options.overridePopoutGroup;
428
452
  }
429
453
  else {
430
- _this.movingLock(function () {
431
- return moveGroupWithoutDestroying({
432
- from: referenceGroup,
433
- to: group,
454
+ group = _this.createGroup({ id: groupId });
455
+ _this._onDidAddGroup.fire(group);
456
+ }
457
+ group.model.renderContainer = overlayRenderContainer;
458
+ group.layout(_window.window.innerWidth, _window.window.innerHeight);
459
+ if (!(options === null || options === void 0 ? void 0 : options.overridePopoutGroup) && isGroupAddedToDom) {
460
+ if (itemToPopout instanceof dockviewPanel_1.DockviewPanel) {
461
+ _this.movingLock(function () {
462
+ var panel = referenceGroup.model.removePanel(itemToPopout);
463
+ group.model.openPanel(panel);
434
464
  });
435
- });
436
- switch (referenceLocation) {
437
- case 'grid':
438
- referenceGroup.api.setVisible(false);
439
- break;
440
- case 'floating':
441
- case 'popout':
442
- _this.removeGroup(referenceGroup);
443
- break;
465
+ }
466
+ else {
467
+ _this.movingLock(function () {
468
+ return moveGroupWithoutDestroying({
469
+ from: referenceGroup,
470
+ to: group,
471
+ });
472
+ });
473
+ switch (referenceLocation) {
474
+ case 'grid':
475
+ referenceGroup.api.setVisible(false);
476
+ break;
477
+ case 'floating':
478
+ case 'popout':
479
+ _this.removeGroup(referenceGroup);
480
+ break;
481
+ }
444
482
  }
445
483
  }
446
484
  popoutContainer.classList.add('dv-dockview');
@@ -450,7 +488,12 @@ var DockviewComponent = /** @class */ (function (_super) {
450
488
  group.model.location = {
451
489
  type: 'popout',
452
490
  getWindow: function () { return _window.window; },
491
+ popoutUrl: options === null || options === void 0 ? void 0 : options.popoutUrl,
453
492
  };
493
+ if (isGroupAddedToDom &&
494
+ itemToPopout.api.location.type === 'grid') {
495
+ itemToPopout.api.setVisible(false);
496
+ }
454
497
  _this.doSetGroupAndPanelActive(group);
455
498
  popoutWindowDisposable.addDisposables(group.api.onDidActiveChange(function (event) {
456
499
  var _a;
@@ -462,10 +505,13 @@ var DockviewComponent = /** @class */ (function (_super) {
462
505
  (_a = _window.window) === null || _a === void 0 ? void 0 : _a.focus();
463
506
  }));
464
507
  var returnedGroup;
508
+ var isValidReferenceGroup = isGroupAddedToDom &&
509
+ referenceGroup &&
510
+ _this.getPanel(referenceGroup.id);
465
511
  var value = {
466
512
  window: _window,
467
513
  popoutGroup: group,
468
- referenceGroup: _this.getPanel(referenceGroup.id)
514
+ referenceGroup: isValidReferenceGroup
469
515
  ? referenceGroup.id
470
516
  : undefined,
471
517
  disposable: {
@@ -482,9 +528,10 @@ var DockviewComponent = /** @class */ (function (_super) {
482
528
  * window dimensions
483
529
  */
484
530
  (0, events_1.addDisposableWindowListener)(_window.window, 'resize', function () {
485
- group.layout(window.innerWidth, window.innerHeight);
531
+ group.layout(_window.window.innerWidth, _window.window.innerHeight);
486
532
  }), overlayRenderContainer, lifecycle_1.Disposable.from(function () {
487
- if (_this.getPanel(referenceGroup.id)) {
533
+ if (isGroupAddedToDom &&
534
+ _this.getPanel(referenceGroup.id)) {
488
535
  _this.movingLock(function () {
489
536
  return moveGroupWithoutDestroying({
490
537
  from: group,
@@ -501,21 +548,27 @@ var DockviewComponent = /** @class */ (function (_super) {
501
548
  }
502
549
  }
503
550
  else if (_this.getPanel(group.id)) {
504
- var removedGroup = _this.doRemoveGroup(group, {
551
+ _this.doRemoveGroup(group, {
505
552
  skipDispose: true,
506
553
  skipActive: true,
554
+ skipPopoutReturn: true,
507
555
  });
556
+ var removedGroup = group;
508
557
  removedGroup.model.renderContainer =
509
558
  _this.overlayRenderContainer;
510
559
  removedGroup.model.location = { type: 'grid' };
511
560
  returnedGroup = removedGroup;
561
+ _this.doAddGroup(removedGroup, [0]);
562
+ _this.doSetGroupAndPanelActive(removedGroup);
512
563
  }
513
564
  }));
514
565
  _this._popoutGroups.push(value);
515
566
  _this.updateWatermark();
567
+ return true;
516
568
  })
517
569
  .catch(function (err) {
518
570
  console.error('dockview: failed to create popout window', err);
571
+ return false;
519
572
  });
520
573
  };
521
574
  DockviewComponent.prototype.addFloatingGroup = function (item, options) {
@@ -626,7 +679,7 @@ var DockviewComponent = /** @class */ (function (_super) {
626
679
  : (_c = (_b = this.options.floatingGroupBounds) === null || _b === void 0 ? void 0 : _b.minimumWidthWithinViewport) !== null && _c !== void 0 ? _c : constants_1.DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE, minimumInViewportHeight: this.options.floatingGroupBounds === 'boundedWithinViewport'
627
680
  ? undefined
628
681
  : (_e = (_d = this.options.floatingGroupBounds) === null || _d === void 0 ? void 0 : _d.minimumHeightWithinViewport) !== null && _e !== void 0 ? _e : constants_1.DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE }));
629
- var el = group.element.querySelector('.void-container');
682
+ var el = group.element.querySelector('.dv-void-container');
630
683
  if (!el) {
631
684
  throw new Error('failed to find drag handle');
632
685
  }
@@ -844,6 +897,9 @@ var DockviewComponent = /** @class */ (function (_super) {
844
897
  data: group.popoutGroup.toJSON(),
845
898
  gridReferenceGroup: group.referenceGroup,
846
899
  position: group.window.dimensions(),
900
+ url: group.popoutGroup.api.location.type === 'popout'
901
+ ? group.popoutGroup.api.location.popoutUrl
902
+ : undefined,
847
903
  };
848
904
  });
849
905
  var result = {
@@ -955,16 +1011,16 @@ var DockviewComponent = /** @class */ (function (_super) {
955
1011
  try {
956
1012
  for (var serializedPopoutGroups_1 = __values(serializedPopoutGroups), serializedPopoutGroups_1_1 = serializedPopoutGroups_1.next(); !serializedPopoutGroups_1_1.done; serializedPopoutGroups_1_1 = serializedPopoutGroups_1.next()) {
957
1013
  var serializedPopoutGroup = serializedPopoutGroups_1_1.value;
958
- var data_2 = serializedPopoutGroup.data, position = serializedPopoutGroup.position, gridReferenceGroup = serializedPopoutGroup.gridReferenceGroup;
1014
+ var data_2 = serializedPopoutGroup.data, position = serializedPopoutGroup.position, gridReferenceGroup = serializedPopoutGroup.gridReferenceGroup, url = serializedPopoutGroup.url;
959
1015
  var group = createGroupFromSerializedState_1(data_2);
960
1016
  this.addPopoutGroup((_k = (gridReferenceGroup
961
1017
  ? this.getPanel(gridReferenceGroup)
962
1018
  : undefined)) !== null && _k !== void 0 ? _k : group, {
963
- skipRemoveGroup: true,
964
1019
  position: position !== null && position !== void 0 ? position : undefined,
965
1020
  overridePopoutGroup: gridReferenceGroup
966
1021
  ? group
967
1022
  : undefined,
1023
+ popoutUrl: url,
968
1024
  });
969
1025
  }
970
1026
  }
@@ -996,6 +1052,7 @@ var DockviewComponent = /** @class */ (function (_super) {
996
1052
  }
997
1053
  }
998
1054
  catch (err) {
1055
+ console.error('dockview: failed to deserialize layout. Reverting changes', err);
999
1056
  try {
1000
1057
  /**
1001
1058
  * Takes all the successfully created groups and remove all of their panels.
@@ -1125,11 +1182,13 @@ var DockviewComponent = /** @class */ (function (_super) {
1125
1182
  width: options.initialWidth,
1126
1183
  height: options.initialHeight,
1127
1184
  };
1185
+ var index;
1128
1186
  if (options.position) {
1129
1187
  if ((0, options_1.isPanelOptionsWithPanel)(options.position)) {
1130
1188
  var referencePanel = typeof options.position.referencePanel === 'string'
1131
1189
  ? this.getGroupPanel(options.position.referencePanel)
1132
1190
  : options.position.referencePanel;
1191
+ index = options.position.index;
1133
1192
  if (!referencePanel) {
1134
1193
  throw new Error("referencePanel '".concat(options.position.referencePanel, "' does not exist"));
1135
1194
  }
@@ -1140,6 +1199,7 @@ var DockviewComponent = /** @class */ (function (_super) {
1140
1199
  typeof options.position.referenceGroup === 'string'
1141
1200
  ? (_a = this._groups.get(options.position.referenceGroup)) === null || _a === void 0 ? void 0 : _a.value
1142
1201
  : options.position.referenceGroup;
1202
+ index = options.position.index;
1143
1203
  if (!referenceGroup) {
1144
1204
  throw new Error("referenceGroup '".concat(options.position.referenceGroup, "' does not exist"));
1145
1205
  }
@@ -1150,6 +1210,7 @@ var DockviewComponent = /** @class */ (function (_super) {
1150
1210
  group.model.openPanel(panel_1, {
1151
1211
  skipSetActive: options.inactive,
1152
1212
  skipSetGroupActive: options.inactive,
1213
+ index: index,
1153
1214
  });
1154
1215
  if (!options.inactive) {
1155
1216
  this.doSetGroupAndPanelActive(group);
@@ -1179,6 +1240,7 @@ var DockviewComponent = /** @class */ (function (_super) {
1179
1240
  group.model.openPanel(panel, {
1180
1241
  skipSetActive: options.inactive,
1181
1242
  skipSetGroupActive: options.inactive,
1243
+ index: index,
1182
1244
  });
1183
1245
  }
1184
1246
  else if (referenceGroup.api.location.type === 'floating' ||
@@ -1187,6 +1249,7 @@ var DockviewComponent = /** @class */ (function (_super) {
1187
1249
  referenceGroup.model.openPanel(panel, {
1188
1250
  skipSetActive: options.inactive,
1189
1251
  skipSetGroupActive: options.inactive,
1252
+ index: index,
1190
1253
  });
1191
1254
  referenceGroup.api.setSize({
1192
1255
  width: initial === null || initial === void 0 ? void 0 : initial.width,
@@ -1207,6 +1270,7 @@ var DockviewComponent = /** @class */ (function (_super) {
1207
1270
  group.model.openPanel(panel, {
1208
1271
  skipSetActive: options.inactive,
1209
1272
  skipSetGroupActive: options.inactive,
1273
+ index: index,
1210
1274
  });
1211
1275
  if (!options.inactive) {
1212
1276
  this.doSetGroupAndPanelActive(group);
@@ -1225,6 +1289,7 @@ var DockviewComponent = /** @class */ (function (_super) {
1225
1289
  group.model.openPanel(panel, {
1226
1290
  skipSetActive: options.inactive,
1227
1291
  skipSetGroupActive: options.inactive,
1292
+ index: index,
1228
1293
  });
1229
1294
  }
1230
1295
  else {
@@ -1235,6 +1300,7 @@ var DockviewComponent = /** @class */ (function (_super) {
1235
1300
  group.model.openPanel(panel, {
1236
1301
  skipSetActive: options.inactive,
1237
1302
  skipSetGroupActive: options.inactive,
1303
+ index: index,
1238
1304
  });
1239
1305
  if (!options.inactive) {
1240
1306
  this.doSetGroupAndPanelActive(group);
@@ -1245,7 +1311,6 @@ var DockviewComponent = /** @class */ (function (_super) {
1245
1311
  DockviewComponent.prototype.removePanel = function (panel, options) {
1246
1312
  if (options === void 0) { options = {
1247
1313
  removeEmptyGroup: true,
1248
- skipDispose: false,
1249
1314
  }; }
1250
1315
  var group = panel.group;
1251
1316
  if (!group) {
@@ -39,9 +39,10 @@ var DockviewGroupPanel = /** @class */ (function (_super) {
39
39
  get: function () {
40
40
  var _a;
41
41
  var activePanelMinimumWidth = (_a = this.activePanel) === null || _a === void 0 ? void 0 : _a.minimumWidth;
42
- return typeof activePanelMinimumWidth === 'number'
43
- ? activePanelMinimumWidth
44
- : MINIMUM_DOCKVIEW_GROUP_PANEL_WIDTH;
42
+ if (typeof activePanelMinimumWidth === 'number') {
43
+ return activePanelMinimumWidth;
44
+ }
45
+ return _super.prototype.__minimumWidth.call(this);
45
46
  },
46
47
  enumerable: false,
47
48
  configurable: true
@@ -50,9 +51,10 @@ var DockviewGroupPanel = /** @class */ (function (_super) {
50
51
  get: function () {
51
52
  var _a;
52
53
  var activePanelMinimumHeight = (_a = this.activePanel) === null || _a === void 0 ? void 0 : _a.minimumHeight;
53
- return typeof activePanelMinimumHeight === 'number'
54
- ? activePanelMinimumHeight
55
- : MINIMUM_DOCKVIEW_GROUP_PANEL_HEIGHT;
54
+ if (typeof activePanelMinimumHeight === 'number') {
55
+ return activePanelMinimumHeight;
56
+ }
57
+ return _super.prototype.__minimumHeight.call(this);
56
58
  },
57
59
  enumerable: false,
58
60
  configurable: true
@@ -61,9 +63,10 @@ var DockviewGroupPanel = /** @class */ (function (_super) {
61
63
  get: function () {
62
64
  var _a;
63
65
  var activePanelMaximumWidth = (_a = this.activePanel) === null || _a === void 0 ? void 0 : _a.maximumWidth;
64
- return typeof activePanelMaximumWidth === 'number'
65
- ? activePanelMaximumWidth
66
- : Number.MAX_SAFE_INTEGER;
66
+ if (typeof activePanelMaximumWidth === 'number') {
67
+ return activePanelMaximumWidth;
68
+ }
69
+ return _super.prototype.__maximumWidth.call(this);
67
70
  },
68
71
  enumerable: false,
69
72
  configurable: true
@@ -72,9 +75,10 @@ var DockviewGroupPanel = /** @class */ (function (_super) {
72
75
  get: function () {
73
76
  var _a;
74
77
  var activePanelMaximumHeight = (_a = this.activePanel) === null || _a === void 0 ? void 0 : _a.maximumHeight;
75
- return typeof activePanelMaximumHeight === 'number'
76
- ? activePanelMaximumHeight
77
- : Number.MAX_SAFE_INTEGER;
78
+ if (typeof activePanelMaximumHeight === 'number') {
79
+ return activePanelMaximumHeight;
80
+ }
81
+ return _super.prototype.__maximumHeight.call(this);
78
82
  },
79
83
  enumerable: false,
80
84
  configurable: true
@@ -120,6 +120,7 @@ export type DockviewGroupLocation = {
120
120
  } | {
121
121
  type: 'popout';
122
122
  getWindow: () => Window;
123
+ popoutUrl?: string;
123
124
  };
124
125
  export declare class WillShowOverlayLocationEvent implements IDockviewEvent {
125
126
  private readonly event;
@@ -143,7 +144,7 @@ export declare class WillShowOverlayLocationEvent implements IDockviewEvent {
143
144
  }
144
145
  export declare class DockviewGroupPanelModel extends CompositeDisposable implements IDockviewGroupPanelModel {
145
146
  private readonly container;
146
- private accessor;
147
+ private readonly accessor;
147
148
  id: string;
148
149
  private readonly options;
149
150
  private readonly groupPanel;
@@ -158,11 +159,12 @@ export declare class DockviewGroupPanelModel extends CompositeDisposable impleme
158
159
  private _prefixHeaderActions;
159
160
  private _location;
160
161
  private mostRecentlyUsed;
162
+ private _overwriteRenderContainer;
161
163
  private readonly _onDidChange;
162
164
  readonly onDidChange: Event<IViewSize | undefined>;
163
165
  private _width;
164
166
  private _height;
165
- private _panels;
167
+ private readonly _panels;
166
168
  private readonly _panelDisposables;
167
169
  private readonly _onMove;
168
170
  readonly onMove: Event<GroupMoveEvent>;
@@ -204,7 +206,6 @@ export declare class DockviewGroupPanelModel extends CompositeDisposable impleme
204
206
  set location(value: DockviewGroupLocation);
205
207
  constructor(container: HTMLElement, accessor: DockviewComponent, id: string, options: GroupOptions, groupPanel: DockviewGroupPanel);
206
208
  focusContent(): void;
207
- private _overwriteRenderContainer;
208
209
  set renderContainer(value: OverlayRenderContainer | null);
209
210
  get renderContainer(): OverlayRenderContainer;
210
211
  initialize(): void;
@@ -202,6 +202,7 @@ var DockviewGroupPanelModel = /** @class */ (function (_super) {
202
202
  _this._locked = false;
203
203
  _this._location = { type: 'grid' };
204
204
  _this.mostRecentlyUsed = [];
205
+ _this._overwriteRenderContainer = null;
205
206
  _this._onDidChange = new events_1.Emitter();
206
207
  _this.onDidChange = _this._onDidChange.event;
207
208
  _this._width = 0;
@@ -232,8 +233,7 @@ var DockviewGroupPanelModel = /** @class */ (function (_super) {
232
233
  _this.onDidActivePanelChange = _this._onDidActivePanelChange.event;
233
234
  _this._onUnhandledDragOverEvent = new events_1.Emitter();
234
235
  _this.onUnhandledDragOverEvent = _this._onUnhandledDragOverEvent.event;
235
- _this._overwriteRenderContainer = null;
236
- (0, dom_1.toggleClass)(_this.container, 'groupview', true);
236
+ (0, dom_1.toggleClass)(_this.container, 'dv-groupview', true);
237
237
  _this._api = new component_api_1.DockviewApi(_this.accessor);
238
238
  _this.tabsContainer = new tabsContainer_1.TabsContainer(_this.accessor, _this.groupPanel);
239
239
  _this.contentContainer = new content_1.ContentContainer(_this.accessor, _this);
@@ -267,7 +267,7 @@ var DockviewGroupPanelModel = /** @class */ (function (_super) {
267
267
  }
268
268
  Object.defineProperty(DockviewGroupPanelModel.prototype, "element", {
269
269
  get: function () {
270
- throw new Error('not supported');
270
+ throw new Error('dockview: not supported');
271
271
  },
272
272
  enumerable: false,
273
273
  configurable: true
@@ -285,7 +285,7 @@ var DockviewGroupPanelModel = /** @class */ (function (_super) {
285
285
  },
286
286
  set: function (value) {
287
287
  this._locked = value;
288
- (0, dom_1.toggleClass)(this.container, 'locked-groupview', value === 'no-drop-target' || value);
288
+ (0, dom_1.toggleClass)(this.container, 'dv-locked-groupview', value === 'no-drop-target' || value);
289
289
  },
290
290
  enumerable: false,
291
291
  configurable: true
@@ -599,7 +599,10 @@ var DockviewGroupPanelModel = /** @class */ (function (_super) {
599
599
  this.doClose(panel);
600
600
  };
601
601
  DockviewGroupPanelModel.prototype.doClose = function (panel) {
602
- this.accessor.removePanel(panel);
602
+ var isLast = this.panels.length === 1 && this.accessor.groups.length === 1;
603
+ this.accessor.removePanel(panel, isLast && this.accessor.options.noPanelsOverlay === 'emptyGroup'
604
+ ? { removeEmptyGroup: false }
605
+ : undefined);
603
606
  };
604
607
  DockviewGroupPanelModel.prototype.isPanelActive = function (panel) {
605
608
  return this._activePanel === panel;
@@ -613,8 +616,8 @@ var DockviewGroupPanelModel = /** @class */ (function (_super) {
613
616
  return;
614
617
  }
615
618
  this._isGroupActive = isGroupActive;
616
- (0, dom_1.toggleClass)(this.container, 'active-group', isGroupActive);
617
- (0, dom_1.toggleClass)(this.container, 'inactive-group', !isGroupActive);
619
+ (0, dom_1.toggleClass)(this.container, 'dv-active-group', isGroupActive);
620
+ (0, dom_1.toggleClass)(this.container, 'dv-inactive-group', !isGroupActive);
618
621
  this.tabsContainer.setActive(this.isActive);
619
622
  if (!this._activePanel && this.panels.length > 0) {
620
623
  this.doSetActivePanel(this.panels[0]);
@@ -714,7 +717,6 @@ var DockviewGroupPanelModel = /** @class */ (function (_super) {
714
717
  DockviewGroupPanelModel.prototype.updateContainer = function () {
715
718
  var _this = this;
716
719
  var _a, _b;
717
- (0, dom_1.toggleClass)(this.container, 'empty', this.isEmpty);
718
720
  this.panels.forEach(function (panel) { return panel.runEvents(); });
719
721
  if (this.isEmpty && !this.watermark) {
720
722
  var watermark = this.accessor.createWatermarkComponent();
@@ -728,14 +730,12 @@ var DockviewGroupPanelModel = /** @class */ (function (_super) {
728
730
  _this.accessor.doSetGroupActive(_this.groupPanel);
729
731
  }
730
732
  });
731
- this.tabsContainer.hide();
732
733
  this.contentContainer.element.appendChild(this.watermark.element);
733
734
  }
734
735
  if (!this.isEmpty && this.watermark) {
735
736
  this.watermark.element.remove();
736
737
  (_b = (_a = this.watermark).dispose) === null || _b === void 0 ? void 0 : _b.call(_a);
737
738
  this.watermark = undefined;
738
- this.tabsContainer.show();
739
739
  }
740
740
  };
741
741
  DockviewGroupPanelModel.prototype.canDisplayOverlay = function (event, position, target) {
@@ -37,10 +37,10 @@ export declare class DockviewPanel extends CompositeDisposable implements IDockv
37
37
  private _params?;
38
38
  private _title;
39
39
  private _renderer;
40
- private _minimumWidth;
41
- private _minimumHeight;
42
- private _maximumWidth;
43
- private _maximumHeight;
40
+ private readonly _minimumWidth;
41
+ private readonly _minimumHeight;
42
+ private readonly _maximumWidth;
43
+ private readonly _maximumHeight;
44
44
  get params(): Parameters | undefined;
45
45
  get title(): string | undefined;
46
46
  get group(): DockviewGroupPanel;
@@ -7,7 +7,7 @@ export interface IDockviewPanelModel extends IDisposable {
7
7
  readonly contentComponent: string;
8
8
  readonly tabComponent?: string;
9
9
  readonly content: IContentRenderer;
10
- readonly tab?: ITabRenderer;
10
+ readonly tab: ITabRenderer;
11
11
  update(event: PanelUpdateEvent): void;
12
12
  layout(width: number, height: number): void;
13
13
  init(params: GroupPanelPartInitParameters): void;
@@ -50,6 +50,10 @@ export interface DockviewOptions {
50
50
  * Pixel gap between groups
51
51
  */
52
52
  gap?: number;
53
+ /**
54
+ * Define the behaviour of the dock when there are no panels to display. Defaults to `watermark`.
55
+ */
56
+ noPanelsOverlay?: 'emptyGroup' | 'watermark';
53
57
  }
54
58
  export interface DockviewDndOverlayEvent {
55
59
  nativeEvent: DragEvent;
@@ -102,10 +106,18 @@ export interface PanelOptions<P extends object = Parameters> {
102
106
  type RelativePanel = {
103
107
  direction?: Direction;
104
108
  referencePanel: string | IDockviewPanel;
109
+ /**
110
+ * The index to place the panel within a group, only applicable if the placement is within an existing group
111
+ */
112
+ index?: number;
105
113
  };
106
114
  type RelativeGroup = {
107
115
  direction?: Direction;
108
116
  referenceGroup: string | DockviewGroupPanel;
117
+ /**
118
+ * The index to place the panel within a group, only applicable if the placement is within an existing group
119
+ */
120
+ index?: number;
109
121
  };
110
122
  type AbsolutePosition = {
111
123
  direction: Omit<Direction, 'within'>;
@@ -42,6 +42,7 @@ exports.PROPERTY_KEYS = (function () {
42
42
  disableDnd: undefined,
43
43
  gap: undefined,
44
44
  className: undefined,
45
+ noPanelsOverlay: undefined,
45
46
  };
46
47
  return Object.keys(properties);
47
48
  })();
package/dist/cjs/dom.d.ts CHANGED
@@ -1,5 +1,15 @@
1
1
  import { Event as DockviewEvent } from './events';
2
- import { IDisposable } from './lifecycle';
2
+ import { IDisposable, CompositeDisposable } from './lifecycle';
3
+ export interface OverflowEvent {
4
+ hasScrollX: boolean;
5
+ hasScrollY: boolean;
6
+ }
7
+ export declare class OverflowObserver extends CompositeDisposable {
8
+ private readonly _onDidChange;
9
+ readonly onDidChange: DockviewEvent<OverflowEvent>;
10
+ private _value;
11
+ constructor(el: HTMLElement);
12
+ }
3
13
  export declare function watchElementResize(element: HTMLElement, cb: (entry: ResizeObserverEntry) => void): IDisposable;
4
14
  export declare const removeClasses: (element: HTMLElement, ...classes: string[]) => void;
5
15
  export declare const addClasses: (element: HTMLElement, ...classes: string[]) => void;
package/dist/cjs/dom.js CHANGED
@@ -51,9 +51,27 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
51
51
  return to.concat(ar || Array.prototype.slice.call(from));
52
52
  };
53
53
  Object.defineProperty(exports, "__esModule", { value: true });
54
- exports.Classnames = exports.getDockviewTheme = exports.disableIframePointEvents = exports.addTestId = exports.isInDocument = exports.getDomNodePagePosition = exports.addStyles = exports.quasiDefaultPrevented = exports.quasiPreventDefault = exports.trackFocus = exports.getElementsByTagName = exports.isAncestor = exports.toggleClass = exports.addClasses = exports.removeClasses = exports.watchElementResize = void 0;
54
+ exports.Classnames = exports.getDockviewTheme = exports.disableIframePointEvents = exports.addTestId = exports.isInDocument = exports.getDomNodePagePosition = exports.addStyles = exports.quasiDefaultPrevented = exports.quasiPreventDefault = exports.trackFocus = exports.getElementsByTagName = exports.isAncestor = exports.toggleClass = exports.addClasses = exports.removeClasses = exports.watchElementResize = exports.OverflowObserver = void 0;
55
55
  var events_1 = require("./events");
56
56
  var lifecycle_1 = require("./lifecycle");
57
+ var OverflowObserver = /** @class */ (function (_super) {
58
+ __extends(OverflowObserver, _super);
59
+ function OverflowObserver(el) {
60
+ var _this = _super.call(this) || this;
61
+ _this._onDidChange = new events_1.Emitter();
62
+ _this.onDidChange = _this._onDidChange.event;
63
+ _this._value = null;
64
+ _this.addDisposables(_this._onDidChange, watchElementResize(el, function (entry) {
65
+ var hasScrollX = entry.target.scrollWidth > entry.target.clientWidth;
66
+ var hasScrollY = entry.target.scrollHeight > entry.target.clientHeight;
67
+ _this._value = { hasScrollX: hasScrollX, hasScrollY: hasScrollY };
68
+ _this._onDidChange.fire(_this._value);
69
+ }));
70
+ return _this;
71
+ }
72
+ return OverflowObserver;
73
+ }(lifecycle_1.CompositeDisposable));
74
+ exports.OverflowObserver = OverflowObserver;
57
75
  function watchElementResize(element, cb) {
58
76
  var observer = new ResizeObserver(function (entires) {
59
77
  /**