dockview-core 4.0.1 → 4.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 (59) hide show
  1. package/dist/cjs/api/component.api.d.ts +3 -1
  2. package/dist/cjs/api/component.api.js +14 -0
  3. package/dist/cjs/dockview/components/popupService.js +1 -1
  4. package/dist/cjs/dockview/dockviewComponent.d.ts +16 -0
  5. package/dist/cjs/dockview/dockviewComponent.js +27 -10
  6. package/dist/cjs/dom.d.ts +6 -4
  7. package/dist/cjs/dom.js +90 -49
  8. package/dist/cjs/events.d.ts +1 -1
  9. package/dist/cjs/events.js +1 -10
  10. package/dist/cjs/overlay/overlay.js +4 -4
  11. package/dist/cjs/paneview/draggablePaneviewPanel.d.ts +13 -2
  12. package/dist/cjs/paneview/draggablePaneviewPanel.js +14 -4
  13. package/dist/cjs/paneview/paneviewComponent.d.ts +5 -0
  14. package/dist/cjs/paneview/paneviewComponent.js +25 -3
  15. package/dist/cjs/paneview/paneviewPanel.d.ts +13 -4
  16. package/dist/cjs/paneview/paneviewPanel.js +9 -13
  17. package/dist/cjs/popoutWindow.js +2 -2
  18. package/dist/cjs/splitview/splitviewComponent.js +3 -0
  19. package/dist/dockview-core.amd.js +154 -62
  20. package/dist/dockview-core.amd.js.map +1 -1
  21. package/dist/dockview-core.amd.min.js +2 -2
  22. package/dist/dockview-core.amd.min.js.map +1 -1
  23. package/dist/dockview-core.amd.min.noStyle.js +2 -2
  24. package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
  25. package/dist/dockview-core.amd.noStyle.js +154 -62
  26. package/dist/dockview-core.amd.noStyle.js.map +1 -1
  27. package/dist/dockview-core.cjs.js +154 -62
  28. package/dist/dockview-core.cjs.js.map +1 -1
  29. package/dist/dockview-core.esm.js +154 -62
  30. package/dist/dockview-core.esm.js.map +1 -1
  31. package/dist/dockview-core.esm.min.js +2 -2
  32. package/dist/dockview-core.esm.min.js.map +1 -1
  33. package/dist/dockview-core.js +154 -62
  34. package/dist/dockview-core.js.map +1 -1
  35. package/dist/dockview-core.min.js +2 -2
  36. package/dist/dockview-core.min.js.map +1 -1
  37. package/dist/dockview-core.min.noStyle.js +2 -2
  38. package/dist/dockview-core.min.noStyle.js.map +1 -1
  39. package/dist/dockview-core.noStyle.js +154 -62
  40. package/dist/dockview-core.noStyle.js.map +1 -1
  41. package/dist/esm/api/component.api.d.ts +3 -1
  42. package/dist/esm/api/component.api.js +6 -0
  43. package/dist/esm/dockview/components/popupService.js +2 -2
  44. package/dist/esm/dockview/dockviewComponent.d.ts +16 -0
  45. package/dist/esm/dockview/dockviewComponent.js +29 -12
  46. package/dist/esm/dom.d.ts +6 -4
  47. package/dist/esm/dom.js +65 -16
  48. package/dist/esm/events.d.ts +1 -1
  49. package/dist/esm/events.js +0 -8
  50. package/dist/esm/overlay/overlay.js +5 -5
  51. package/dist/esm/paneview/draggablePaneviewPanel.d.ts +13 -2
  52. package/dist/esm/paneview/draggablePaneviewPanel.js +14 -4
  53. package/dist/esm/paneview/paneviewComponent.d.ts +5 -0
  54. package/dist/esm/paneview/paneviewComponent.js +25 -3
  55. package/dist/esm/paneview/paneviewPanel.d.ts +13 -4
  56. package/dist/esm/paneview/paneviewPanel.js +9 -13
  57. package/dist/esm/popoutWindow.js +3 -3
  58. package/dist/esm/splitview/splitviewComponent.js +3 -0
  59. package/package.json +1 -1
@@ -65,10 +65,24 @@ var math_1 = require("../math");
65
65
  var resizable_1 = require("../resizable");
66
66
  var dom_1 = require("../dom");
67
67
  var nextLayoutId = (0, math_1.sequentialNumberGenerator)();
68
+ var HEADER_SIZE = 22;
69
+ var MINIMUM_BODY_SIZE = 0;
70
+ var MAXIMUM_BODY_SIZE = Number.MAX_SAFE_INTEGER;
68
71
  var PaneFramework = /** @class */ (function (_super) {
69
72
  __extends(PaneFramework, _super);
70
73
  function PaneFramework(options) {
71
- var _this = _super.call(this, options.accessor, options.id, options.component, options.headerComponent, options.orientation, options.isExpanded, options.disableDnd) || this;
74
+ var _this = _super.call(this, {
75
+ accessor: options.accessor,
76
+ id: options.id,
77
+ component: options.component,
78
+ headerComponent: options.headerComponent,
79
+ orientation: options.orientation,
80
+ isExpanded: options.isExpanded,
81
+ disableDnd: options.disableDnd,
82
+ headerSize: options.headerSize,
83
+ minimumBodySize: options.minimumBodySize,
84
+ maximumBodySize: options.maximumBodySize,
85
+ }) || this;
72
86
  _this.options = options;
73
87
  return _this;
74
88
  }
@@ -201,7 +215,7 @@ var PaneviewComponent = /** @class */ (function (_super) {
201
215
  this._options = __assign(__assign({}, this.options), options);
202
216
  };
203
217
  PaneviewComponent.prototype.addPanel = function (options) {
204
- var _a;
218
+ var _a, _b;
205
219
  var body = this.options.createComponent({
206
220
  id: options.id,
207
221
  name: options.component,
@@ -226,12 +240,15 @@ var PaneviewComponent = /** @class */ (function (_super) {
226
240
  isExpanded: !!options.isExpanded,
227
241
  disableDnd: !!this.options.disableDnd,
228
242
  accessor: this,
243
+ headerSize: (_a = options.headerSize) !== null && _a !== void 0 ? _a : HEADER_SIZE,
244
+ minimumBodySize: MINIMUM_BODY_SIZE,
245
+ maximumBodySize: MAXIMUM_BODY_SIZE,
229
246
  });
230
247
  this.doAddPanel(view);
231
248
  var size = typeof options.size === 'number' ? options.size : splitview_1.Sizing.Distribute;
232
249
  var index = typeof options.index === 'number' ? options.index : undefined;
233
250
  view.init({
234
- params: (_a = options.params) !== null && _a !== void 0 ? _a : {},
251
+ params: (_b = options.params) !== null && _b !== void 0 ? _b : {},
235
252
  minimumBodySize: options.minimumBodySize,
236
253
  maximumBodySize: options.maximumBodySize,
237
254
  isExpanded: options.isExpanded,
@@ -279,6 +296,7 @@ var PaneviewComponent = /** @class */ (function (_super) {
279
296
  data: view.toJSON(),
280
297
  minimumSize: minimum(view.minimumBodySize),
281
298
  maximumSize: maximum(view.maximumBodySize),
299
+ headerSize: view.headerSize,
282
300
  expanded: view.isExpanded(),
283
301
  };
284
302
  });
@@ -300,6 +318,7 @@ var PaneviewComponent = /** @class */ (function (_super) {
300
318
  descriptor: {
301
319
  size: size,
302
320
  views: views.map(function (view) {
321
+ var _a, _b, _c;
303
322
  var data = view.data;
304
323
  var body = _this.options.createComponent({
305
324
  id: data.id,
@@ -326,6 +345,9 @@ var PaneviewComponent = /** @class */ (function (_super) {
326
345
  isExpanded: !!view.expanded,
327
346
  disableDnd: !!_this.options.disableDnd,
328
347
  accessor: _this,
348
+ headerSize: (_a = view.headerSize) !== null && _a !== void 0 ? _a : HEADER_SIZE,
349
+ minimumBodySize: (_b = view.minimumSize) !== null && _b !== void 0 ? _b : MINIMUM_BODY_SIZE,
350
+ maximumBodySize: (_c = view.maximumSize) !== null && _c !== void 0 ? _c : MAXIMUM_BODY_SIZE,
329
351
  });
330
352
  _this.doAddPanel(panel);
331
353
  queue.push(function () {
@@ -39,7 +39,6 @@ export interface IPaneviewPanel extends BasePanelViewExported<PaneviewPanelApiIm
39
39
  headerVisible: boolean;
40
40
  }
41
41
  export declare abstract class PaneviewPanel extends BasePanelView<PaneviewPanelApiImpl> implements IPaneview, IPaneviewPanel {
42
- private readonly headerComponent;
43
42
  private readonly _onDidChangeExpansionState;
44
43
  onDidChangeExpansionState: Event<boolean>;
45
44
  private readonly _onDidChange;
@@ -47,7 +46,6 @@ export declare abstract class PaneviewPanel extends BasePanelView<PaneviewPanelA
47
46
  size?: number;
48
47
  orthogonalSize?: number;
49
48
  }>;
50
- private readonly headerSize;
51
49
  private _orthogonalSize;
52
50
  private _size;
53
51
  private _minimumBodySize;
@@ -57,10 +55,11 @@ export declare abstract class PaneviewPanel extends BasePanelView<PaneviewPanelA
57
55
  protected body?: HTMLElement;
58
56
  private bodyPart?;
59
57
  private headerPart?;
60
- private expandedSize;
61
58
  private animationTimer;
62
59
  private _orientation;
63
60
  private _headerVisible;
61
+ readonly headerSize: number;
62
+ readonly headerComponent: string | undefined;
64
63
  set orientation(value: Orientation);
65
64
  get orientation(): Orientation;
66
65
  get minimumSize(): number;
@@ -74,7 +73,17 @@ export declare abstract class PaneviewPanel extends BasePanelView<PaneviewPanelA
74
73
  set maximumBodySize(value: number);
75
74
  get headerVisible(): boolean;
76
75
  set headerVisible(value: boolean);
77
- constructor(id: string, component: string, headerComponent: string | undefined, orientation: Orientation, isExpanded: boolean, isHeaderVisible: boolean);
76
+ constructor(options: {
77
+ id: string;
78
+ component: string;
79
+ headerComponent: string | undefined;
80
+ orientation: Orientation;
81
+ isExpanded: boolean;
82
+ isHeaderVisible: boolean;
83
+ headerSize: number;
84
+ minimumBodySize: number;
85
+ maximumBodySize: number;
86
+ });
78
87
  setVisible(isVisible: boolean): void;
79
88
  setActive(isActive: boolean): void;
80
89
  isExpanded(): boolean;
@@ -50,26 +50,25 @@ var basePanelView_1 = require("../gridview/basePanelView");
50
50
  var splitview_1 = require("../splitview/splitview");
51
51
  var PaneviewPanel = /** @class */ (function (_super) {
52
52
  __extends(PaneviewPanel, _super);
53
- function PaneviewPanel(id, component, headerComponent, orientation, isExpanded, isHeaderVisible) {
54
- var _this = _super.call(this, id, component, new paneviewPanelApi_1.PaneviewPanelApiImpl(id, component)) || this;
55
- _this.headerComponent = headerComponent;
53
+ function PaneviewPanel(options) {
54
+ var _this = _super.call(this, options.id, options.component, new paneviewPanelApi_1.PaneviewPanelApiImpl(options.id, options.component)) || this;
56
55
  _this._onDidChangeExpansionState = new events_1.Emitter({ replay: true });
57
56
  _this.onDidChangeExpansionState = _this._onDidChangeExpansionState.event;
58
57
  _this._onDidChange = new events_1.Emitter();
59
58
  _this.onDidChange = _this._onDidChange.event;
60
- _this.headerSize = 22;
61
59
  _this._orthogonalSize = 0;
62
60
  _this._size = 0;
63
- _this._minimumBodySize = 100;
64
- _this._maximumBodySize = Number.POSITIVE_INFINITY;
65
61
  _this._isExpanded = false;
66
- _this.expandedSize = 0;
67
62
  _this.api.pane = _this; // TODO cannot use 'this' before 'super'
68
63
  _this.api.initialize(_this);
69
- _this._isExpanded = isExpanded;
70
- _this._headerVisible = isHeaderVisible;
64
+ _this.headerSize = options.headerSize;
65
+ _this.headerComponent = options.headerComponent;
66
+ _this._minimumBodySize = options.minimumBodySize;
67
+ _this._maximumBodySize = options.maximumBodySize;
68
+ _this._isExpanded = options.isExpanded;
69
+ _this._headerVisible = options.isHeaderVisible;
71
70
  _this._onDidChangeExpansionState.fire(_this.isExpanded()); // initialize value
72
- _this._orientation = orientation;
71
+ _this._orientation = options.orientation;
73
72
  _this.element.classList.add('dv-pane');
74
73
  _this.addDisposables(_this.api.onWillVisibilityChange(function (event) {
75
74
  var isVisible = event.isVisible;
@@ -217,9 +216,6 @@ var PaneviewPanel = /** @class */ (function (_super) {
217
216
  var _a = __read(this.orientation === splitview_1.Orientation.HORIZONTAL
218
217
  ? [size, orthogonalSize]
219
218
  : [orthogonalSize, size], 2), width = _a[0], height = _a[1];
220
- if (this.isExpanded()) {
221
- this.expandedSize = width;
222
- }
223
219
  _super.prototype.layout.call(this, width, height);
224
220
  };
225
221
  PaneviewPanel.prototype.init = function (parameters) {
@@ -153,7 +153,7 @@ var PopoutWindow = /** @class */ (function (_super) {
153
153
  this._window = { value: externalWindow, disposable: disposable };
154
154
  disposable.addDisposables(lifecycle_1.Disposable.from(function () {
155
155
  externalWindow.close();
156
- }), (0, events_1.addDisposableWindowListener)(window, 'beforeunload', function () {
156
+ }), (0, events_1.addDisposableListener)(window, 'beforeunload', function () {
157
157
  /**
158
158
  * before the main window closes we should close this popup too
159
159
  * to be good citizens
@@ -188,7 +188,7 @@ var PopoutWindow = /** @class */ (function (_super) {
188
188
  * beforeunload must be registered after load for reasons I could not determine
189
189
  * otherwise the beforeunload event will not fire when the window is closed
190
190
  */
191
- (0, events_1.addDisposableWindowListener)(externalWindow, 'beforeunload', function () {
191
+ (0, events_1.addDisposableListener)(externalWindow, 'beforeunload', function () {
192
192
  /**
193
193
  * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event
194
194
  */
@@ -122,6 +122,9 @@ var SplitviewComponent = /** @class */ (function (_super) {
122
122
  },
123
123
  set: function (value) {
124
124
  var _this = this;
125
+ if (this._splitview) {
126
+ this._splitview.dispose();
127
+ }
125
128
  this._splitview = value;
126
129
  this._splitviewChangeDisposable.value = new lifecycle_1.CompositeDisposable(this._splitview.onDidSashEnd(function () {
127
130
  _this._onDidLayoutChange.fire(undefined);
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * dockview-core
3
- * @version 4.0.1
3
+ * @version 4.1.0
4
4
  * @link https://github.com/mathuo/dockview
5
5
  * @license MIT
6
6
  */
@@ -245,14 +245,6 @@ define(['exports'], (function (exports) { 'use strict';
245
245
  }
246
246
  Emitter.ENABLE_TRACKING = false;
247
247
  Emitter.MEMORY_LEAK_WATCHER = new LeakageMonitor();
248
- function addDisposableWindowListener(element, type, listener, options) {
249
- element.addEventListener(type, listener, options);
250
- return {
251
- dispose: () => {
252
- element.removeEventListener(type, listener, options);
253
- },
254
- };
255
- }
256
248
  function addDisposableListener(element, type, listener, options) {
257
249
  element.addEventListener(type, listener, options);
258
250
  return {
@@ -431,9 +423,6 @@ define(['exports'], (function (exports) { 'use strict';
431
423
  }
432
424
  return false;
433
425
  }
434
- function getElementsByTagName(tag) {
435
- return Array.prototype.slice.call(document.getElementsByTagName(tag), 0);
436
- }
437
426
  function trackFocus(element) {
438
427
  return new FocusTracker(element);
439
428
  }
@@ -480,14 +469,8 @@ define(['exports'], (function (exports) { 'use strict';
480
469
  }
481
470
  }
482
471
  };
483
- if (element instanceof HTMLElement) {
484
- this.addDisposables(addDisposableListener(element, 'focus', onFocus, true));
485
- this.addDisposables(addDisposableListener(element, 'blur', onBlur, true));
486
- }
487
- else {
488
- this.addDisposables(addDisposableWindowListener(element, 'focus', onFocus, true));
489
- this.addDisposables(addDisposableWindowListener(element, 'blur', onBlur, true));
490
- }
472
+ this.addDisposables(addDisposableListener(element, 'focus', onFocus, true));
473
+ this.addDisposables(addDisposableListener(element, 'blur', onBlur, true));
491
474
  }
492
475
  refreshState() {
493
476
  this._refreshStateHandler();
@@ -561,11 +544,30 @@ define(['exports'], (function (exports) { 'use strict';
561
544
  function addTestId(element, id) {
562
545
  element.setAttribute('data-testid', id);
563
546
  }
564
- function disableIframePointEvents() {
565
- const iframes = [
566
- ...getElementsByTagName('iframe'),
567
- ...getElementsByTagName('webview'),
568
- ];
547
+ /**
548
+ * Should be more efficient than element.querySelectorAll("*") since there
549
+ * is no need to store every element in-memory using this approach
550
+ */
551
+ function allTagsNamesInclusiveOfShadowDoms(tagNames) {
552
+ const iframes = [];
553
+ function findIframesInNode(node) {
554
+ if (node.nodeType === Node.ELEMENT_NODE) {
555
+ if (tagNames.includes(node.tagName)) {
556
+ iframes.push(node);
557
+ }
558
+ if (node.shadowRoot) {
559
+ findIframesInNode(node.shadowRoot);
560
+ }
561
+ for (const child of node.children) {
562
+ findIframesInNode(child);
563
+ }
564
+ }
565
+ }
566
+ findIframesInNode(document.documentElement);
567
+ return iframes;
568
+ }
569
+ function disableIframePointEvents(rootNode = document) {
570
+ const iframes = allTagsNamesInclusiveOfShadowDoms(['IFRAME', 'WEBVIEW']);
569
571
  const original = new WeakMap(); // don't hold onto HTMLElement references longer than required
570
572
  for (const iframe of iframes) {
571
573
  original.set(iframe, iframe.style.pointerEvents);
@@ -617,6 +619,7 @@ define(['exports'], (function (exports) { 'use strict';
617
619
  }
618
620
  }
619
621
  }
622
+ const DEBOUCE_DELAY = 100;
620
623
  function isChildEntirelyVisibleWithinParent(child, parent) {
621
624
  //
622
625
  const childPosition = getDomNodePagePosition(child);
@@ -630,6 +633,41 @@ define(['exports'], (function (exports) { 'use strict';
630
633
  }
631
634
  return true;
632
635
  }
636
+ function onDidWindowMoveEnd(window) {
637
+ const emitter = new Emitter();
638
+ let previousScreenX = window.screenX;
639
+ let previousScreenY = window.screenY;
640
+ let timeout;
641
+ const checkMovement = () => {
642
+ if (window.closed) {
643
+ return;
644
+ }
645
+ const currentScreenX = window.screenX;
646
+ const currentScreenY = window.screenY;
647
+ if (currentScreenX !== previousScreenX ||
648
+ currentScreenY !== previousScreenY) {
649
+ clearTimeout(timeout);
650
+ timeout = setTimeout(() => {
651
+ emitter.fire();
652
+ }, DEBOUCE_DELAY);
653
+ previousScreenX = currentScreenX;
654
+ previousScreenY = currentScreenY;
655
+ }
656
+ requestAnimationFrame(checkMovement);
657
+ };
658
+ checkMovement();
659
+ return emitter;
660
+ }
661
+ function onDidWindowResizeEnd(element, cb) {
662
+ let resizeTimeout;
663
+ const disposable = new CompositeDisposable(addDisposableListener(element, 'resize', () => {
664
+ clearTimeout(resizeTimeout);
665
+ resizeTimeout = setTimeout(() => {
666
+ cb();
667
+ }, DEBOUCE_DELAY);
668
+ }));
669
+ return disposable;
670
+ }
633
671
 
634
672
  function tail(arr) {
635
673
  if (arr.length === 0) {
@@ -3569,6 +3607,12 @@ define(['exports'], (function (exports) { 'use strict';
3569
3607
  get onUnhandledDragOverEvent() {
3570
3608
  return this.component.onUnhandledDragOverEvent;
3571
3609
  }
3610
+ get onDidPopoutGroupSizeChange() {
3611
+ return this.component.onDidPopoutGroupSizeChange;
3612
+ }
3613
+ get onDidPopoutGroupPositionChange() {
3614
+ return this.component.onDidPopoutGroupPositionChange;
3615
+ }
3572
3616
  /**
3573
3617
  * All panel objects.
3574
3618
  */
@@ -4534,26 +4578,25 @@ define(['exports'], (function (exports) { 'use strict';
4534
4578
  this._headerVisible = value;
4535
4579
  this.header.style.display = value ? '' : 'none';
4536
4580
  }
4537
- constructor(id, component, headerComponent, orientation, isExpanded, isHeaderVisible) {
4538
- super(id, component, new PaneviewPanelApiImpl(id, component));
4539
- this.headerComponent = headerComponent;
4581
+ constructor(options) {
4582
+ super(options.id, options.component, new PaneviewPanelApiImpl(options.id, options.component));
4540
4583
  this._onDidChangeExpansionState = new Emitter({ replay: true });
4541
4584
  this.onDidChangeExpansionState = this._onDidChangeExpansionState.event;
4542
4585
  this._onDidChange = new Emitter();
4543
4586
  this.onDidChange = this._onDidChange.event;
4544
- this.headerSize = 22;
4545
4587
  this._orthogonalSize = 0;
4546
4588
  this._size = 0;
4547
- this._minimumBodySize = 100;
4548
- this._maximumBodySize = Number.POSITIVE_INFINITY;
4549
4589
  this._isExpanded = false;
4550
- this.expandedSize = 0;
4551
4590
  this.api.pane = this; // TODO cannot use 'this' before 'super'
4552
4591
  this.api.initialize(this);
4553
- this._isExpanded = isExpanded;
4554
- this._headerVisible = isHeaderVisible;
4592
+ this.headerSize = options.headerSize;
4593
+ this.headerComponent = options.headerComponent;
4594
+ this._minimumBodySize = options.minimumBodySize;
4595
+ this._maximumBodySize = options.maximumBodySize;
4596
+ this._isExpanded = options.isExpanded;
4597
+ this._headerVisible = options.isHeaderVisible;
4555
4598
  this._onDidChangeExpansionState.fire(this.isExpanded()); // initialize value
4556
- this._orientation = orientation;
4599
+ this._orientation = options.orientation;
4557
4600
  this.element.classList.add('dv-pane');
4558
4601
  this.addDisposables(this.api.onWillVisibilityChange((event) => {
4559
4602
  const { isVisible } = event;
@@ -4620,9 +4663,6 @@ define(['exports'], (function (exports) { 'use strict';
4620
4663
  const [width, height] = this.orientation === exports.Orientation.HORIZONTAL
4621
4664
  ? [size, orthogonalSize]
4622
4665
  : [orthogonalSize, size];
4623
- if (this.isExpanded()) {
4624
- this.expandedSize = width;
4625
- }
4626
4666
  super.layout(width, height);
4627
4667
  }
4628
4668
  init(parameters) {
@@ -4679,15 +4719,25 @@ define(['exports'], (function (exports) { 'use strict';
4679
4719
  }
4680
4720
 
4681
4721
  class DraggablePaneviewPanel extends PaneviewPanel {
4682
- constructor(accessor, id, component, headerComponent, orientation, isExpanded, disableDnd) {
4683
- super(id, component, headerComponent, orientation, isExpanded, true);
4684
- this.accessor = accessor;
4722
+ constructor(options) {
4723
+ super({
4724
+ id: options.id,
4725
+ component: options.component,
4726
+ headerComponent: options.headerComponent,
4727
+ orientation: options.orientation,
4728
+ isExpanded: options.isExpanded,
4729
+ isHeaderVisible: true,
4730
+ headerSize: options.headerSize,
4731
+ minimumBodySize: options.minimumBodySize,
4732
+ maximumBodySize: options.maximumBodySize,
4733
+ });
4685
4734
  this._onDidDrop = new Emitter();
4686
4735
  this.onDidDrop = this._onDidDrop.event;
4687
4736
  this._onUnhandledDragOverEvent = new Emitter();
4688
4737
  this.onUnhandledDragOverEvent = this._onUnhandledDragOverEvent.event;
4738
+ this.accessor = options.accessor;
4689
4739
  this.addDisposables(this._onDidDrop, this._onUnhandledDragOverEvent);
4690
- if (!disableDnd) {
4740
+ if (!options.disableDnd) {
4691
4741
  this.initDragFeatures();
4692
4742
  }
4693
4743
  }
@@ -7321,7 +7371,7 @@ define(['exports'], (function (exports) { 'use strict';
7321
7371
  dispose: () => {
7322
7372
  iframes.release();
7323
7373
  },
7324
- }, addDisposableWindowListener(window, 'pointermove', (e) => {
7374
+ }, addDisposableListener(window, 'pointermove', (e) => {
7325
7375
  const containerRect = this.options.container.getBoundingClientRect();
7326
7376
  const x = e.clientX - containerRect.left;
7327
7377
  const y = e.clientY - containerRect.top;
@@ -7358,7 +7408,7 @@ define(['exports'], (function (exports) { 'use strict';
7358
7408
  bounds.right = right;
7359
7409
  }
7360
7410
  this.setBounds(bounds);
7361
- }), addDisposableWindowListener(window, 'pointerup', () => {
7411
+ }), addDisposableListener(window, 'pointerup', () => {
7362
7412
  toggleClass(this._element, 'dv-resize-container-dragging', false);
7363
7413
  move.dispose();
7364
7414
  this._onDidChangeEnd.fire();
@@ -7403,7 +7453,7 @@ define(['exports'], (function (exports) { 'use strict';
7403
7453
  e.preventDefault();
7404
7454
  let startPosition = null;
7405
7455
  const iframes = disableIframePointEvents();
7406
- move.value = new CompositeDisposable(addDisposableWindowListener(window, 'pointermove', (e) => {
7456
+ move.value = new CompositeDisposable(addDisposableListener(window, 'pointermove', (e) => {
7407
7457
  const containerRect = this.options.container.getBoundingClientRect();
7408
7458
  const overlayRect = this._element.getBoundingClientRect();
7409
7459
  const y = e.clientY - containerRect.top;
@@ -7527,7 +7577,7 @@ define(['exports'], (function (exports) { 'use strict';
7527
7577
  dispose: () => {
7528
7578
  iframes.release();
7529
7579
  },
7530
- }, addDisposableWindowListener(window, 'pointerup', () => {
7580
+ }, addDisposableListener(window, 'pointerup', () => {
7531
7581
  move.dispose();
7532
7582
  this._onDidChangeEnd.fire();
7533
7583
  }));
@@ -7833,7 +7883,7 @@ define(['exports'], (function (exports) { 'use strict';
7833
7883
  this._window = { value: externalWindow, disposable };
7834
7884
  disposable.addDisposables(exports.DockviewDisposable.from(() => {
7835
7885
  externalWindow.close();
7836
- }), addDisposableWindowListener(window, 'beforeunload', () => {
7886
+ }), addDisposableListener(window, 'beforeunload', () => {
7837
7887
  /**
7838
7888
  * before the main window closes we should close this popup too
7839
7889
  * to be good citizens
@@ -7868,7 +7918,7 @@ define(['exports'], (function (exports) { 'use strict';
7868
7918
  * beforeunload must be registered after load for reasons I could not determine
7869
7919
  * otherwise the beforeunload event will not fire when the window is closed
7870
7920
  */
7871
- addDisposableWindowListener(externalWindow, 'beforeunload', () => {
7921
+ addDisposableListener(externalWindow, 'beforeunload', () => {
7872
7922
  /**
7873
7923
  * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event
7874
7924
  */
@@ -7965,7 +8015,7 @@ define(['exports'], (function (exports) { 'use strict';
7965
8015
  wrapper.style.left = `${position.x - offsetX}px`;
7966
8016
  this._element.appendChild(wrapper);
7967
8017
  this._active = wrapper;
7968
- this._activeDisposable.value = new CompositeDisposable(addDisposableWindowListener(window, 'pointerdown', (event) => {
8018
+ this._activeDisposable.value = new CompositeDisposable(addDisposableListener(window, 'pointerdown', (event) => {
7969
8019
  var _a;
7970
8020
  const target = event.target;
7971
8021
  if (!(target instanceof HTMLElement)) {
@@ -8144,6 +8194,10 @@ define(['exports'], (function (exports) { 'use strict';
8144
8194
  this.onDidRemovePanel = this._onDidRemovePanel.event;
8145
8195
  this._onDidAddPanel = new Emitter();
8146
8196
  this.onDidAddPanel = this._onDidAddPanel.event;
8197
+ this._onDidPopoutGroupSizeChange = new Emitter();
8198
+ this.onDidPopoutGroupSizeChange = this._onDidPopoutGroupSizeChange.event;
8199
+ this._onDidPopoutGroupPositionChange = new Emitter();
8200
+ this.onDidPopoutGroupPositionChange = this._onDidPopoutGroupPositionChange.event;
8147
8201
  this._onDidLayoutFromJSON = new Emitter();
8148
8202
  this.onDidLayoutFromJSON = this._onDidLayoutFromJSON.event;
8149
8203
  this._onDidActivePanelChange = new Emitter();
@@ -8173,7 +8227,7 @@ define(['exports'], (function (exports) { 'use strict';
8173
8227
  if (options.debug) {
8174
8228
  this.addDisposables(new StrictEventsSequencing(this));
8175
8229
  }
8176
- this.addDisposables(this.rootDropTargetContainer, this.overlayRenderContainer, this._onWillDragPanel, this._onWillDragGroup, this._onWillShowOverlay, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, this._onWillDrop, this._onDidMovePanel, this._onDidAddGroup, this._onDidRemoveGroup, this._onDidActiveGroupChange, this._onUnhandledDragOverEvent, this._onDidMaximizedGroupChange, this._onDidOptionsChange, this.onDidViewVisibilityChangeMicroTaskQueue(() => {
8230
+ this.addDisposables(this.rootDropTargetContainer, this.overlayRenderContainer, this._onWillDragPanel, this._onWillDragGroup, this._onWillShowOverlay, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, this._onWillDrop, this._onDidMovePanel, this._onDidAddGroup, this._onDidRemoveGroup, this._onDidActiveGroupChange, this._onUnhandledDragOverEvent, this._onDidMaximizedGroupChange, this._onDidOptionsChange, this._onDidPopoutGroupSizeChange, this._onDidPopoutGroupPositionChange, this.onDidViewVisibilityChangeMicroTaskQueue(() => {
8177
8231
  this.updateWatermark();
8178
8232
  }), this.onDidAdd((event) => {
8179
8233
  if (!this._moving) {
@@ -8194,7 +8248,7 @@ define(['exports'], (function (exports) { 'use strict';
8194
8248
  });
8195
8249
  }), exports.DockviewEvent.any(this.onDidAdd, this.onDidRemove)(() => {
8196
8250
  this.updateWatermark();
8197
- }), exports.DockviewEvent.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidAddGroup, this.onDidRemove, this.onDidMovePanel, this.onDidActivePanelChange)(() => {
8251
+ }), exports.DockviewEvent.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidAddGroup, this.onDidRemove, this.onDidMovePanel, this.onDidActivePanelChange, this.onDidPopoutGroupPositionChange, this.onDidPopoutGroupSizeChange)(() => {
8198
8252
  this._bufferOnDidLayoutChange.fire();
8199
8253
  }), exports.DockviewDisposable.from(() => {
8200
8254
  // iterate over a copy of the array since .dispose() mutates the original array
@@ -8455,13 +8509,26 @@ define(['exports'], (function (exports) { 'use strict';
8455
8509
  },
8456
8510
  },
8457
8511
  };
8458
- popoutWindowDisposable.addDisposables(
8512
+ const _onDidWindowPositionChange = onDidWindowMoveEnd(_window.window);
8513
+ popoutWindowDisposable.addDisposables(_onDidWindowPositionChange, onDidWindowResizeEnd(_window.window, () => {
8514
+ this._onDidPopoutGroupSizeChange.fire({
8515
+ width: _window.window.innerWidth,
8516
+ height: _window.window.innerHeight,
8517
+ group,
8518
+ });
8519
+ }), _onDidWindowPositionChange.event(() => {
8520
+ this._onDidPopoutGroupPositionChange.fire({
8521
+ screenX: _window.window.screenX,
8522
+ screenY: _window.window.screenX,
8523
+ group,
8524
+ });
8525
+ }),
8459
8526
  /**
8460
8527
  * ResizeObserver seems slow here, I do not know why but we don't need it
8461
8528
  * since we can reply on the window resize event as we will occupy the full
8462
8529
  * window dimensions
8463
8530
  */
8464
- addDisposableWindowListener(_window.window, 'resize', () => {
8531
+ addDisposableListener(_window.window, 'resize', () => {
8465
8532
  group.layout(_window.window.innerWidth, _window.window.innerHeight);
8466
8533
  }), overlayRenderContainer, exports.DockviewDisposable.from(() => {
8467
8534
  if (this.isDisposed) {
@@ -8675,7 +8742,7 @@ define(['exports'], (function (exports) { 'use strict';
8675
8742
  }
8676
8743
  this.updateWatermark();
8677
8744
  }
8678
- orthogonalize(position) {
8745
+ orthogonalize(position, options) {
8679
8746
  switch (position) {
8680
8747
  case 'top':
8681
8748
  case 'bottom':
@@ -8698,10 +8765,10 @@ define(['exports'], (function (exports) { 'use strict';
8698
8765
  case 'top':
8699
8766
  case 'left':
8700
8767
  case 'center':
8701
- return this.createGroupAtLocation([0]); // insert into first position
8768
+ return this.createGroupAtLocation([0], undefined, options); // insert into first position
8702
8769
  case 'bottom':
8703
8770
  case 'right':
8704
- return this.createGroupAtLocation([this.gridview.length]); // insert into last position
8771
+ return this.createGroupAtLocation([this.gridview.length], undefined, options); // insert into last position
8705
8772
  default:
8706
8773
  throw new Error(`unsupported position ${position}`);
8707
8774
  }
@@ -9197,7 +9264,7 @@ define(['exports'], (function (exports) { 'use strict';
9197
9264
  }
9198
9265
  }
9199
9266
  else {
9200
- const group = this.orthogonalize(directionToPosition(options.direction));
9267
+ const group = this.orthogonalize(directionToPosition(options.direction), options);
9201
9268
  if (!options.skipSetActive) {
9202
9269
  this.doSetGroupAndPanelActive(group);
9203
9270
  }
@@ -9639,8 +9706,8 @@ define(['exports'], (function (exports) { 'use strict';
9639
9706
  });
9640
9707
  return panel;
9641
9708
  }
9642
- createGroupAtLocation(location, size) {
9643
- const group = this.createGroup();
9709
+ createGroupAtLocation(location, size, options) {
9710
+ const group = this.createGroup(options);
9644
9711
  this.doAddGroup(group, location, size);
9645
9712
  return group;
9646
9713
  }
@@ -9974,6 +10041,9 @@ define(['exports'], (function (exports) { 'use strict';
9974
10041
  return this._splitview;
9975
10042
  }
9976
10043
  set splitview(value) {
10044
+ if (this._splitview) {
10045
+ this._splitview.dispose();
10046
+ }
9977
10047
  this._splitview = value;
9978
10048
  this._splitviewChangeDisposable.value = new CompositeDisposable(this._splitview.onDidSashEnd(() => {
9979
10049
  this._onDidLayoutChange.fire(undefined);
@@ -10277,9 +10347,23 @@ define(['exports'], (function (exports) { 'use strict';
10277
10347
  }
10278
10348
 
10279
10349
  const nextLayoutId = sequentialNumberGenerator();
10350
+ const HEADER_SIZE = 22;
10351
+ const MINIMUM_BODY_SIZE = 0;
10352
+ const MAXIMUM_BODY_SIZE = Number.MAX_SAFE_INTEGER;
10280
10353
  class PaneFramework extends DraggablePaneviewPanel {
10281
10354
  constructor(options) {
10282
- super(options.accessor, options.id, options.component, options.headerComponent, options.orientation, options.isExpanded, options.disableDnd);
10355
+ super({
10356
+ accessor: options.accessor,
10357
+ id: options.id,
10358
+ component: options.component,
10359
+ headerComponent: options.headerComponent,
10360
+ orientation: options.orientation,
10361
+ isExpanded: options.isExpanded,
10362
+ disableDnd: options.disableDnd,
10363
+ headerSize: options.headerSize,
10364
+ minimumBodySize: options.minimumBodySize,
10365
+ maximumBodySize: options.maximumBodySize,
10366
+ });
10283
10367
  this.options = options;
10284
10368
  }
10285
10369
  getBodyComponent() {
@@ -10374,7 +10458,7 @@ define(['exports'], (function (exports) { 'use strict';
10374
10458
  this._options = Object.assign(Object.assign({}, this.options), options);
10375
10459
  }
10376
10460
  addPanel(options) {
10377
- var _a;
10461
+ var _a, _b;
10378
10462
  const body = this.options.createComponent({
10379
10463
  id: options.id,
10380
10464
  name: options.component,
@@ -10399,12 +10483,15 @@ define(['exports'], (function (exports) { 'use strict';
10399
10483
  isExpanded: !!options.isExpanded,
10400
10484
  disableDnd: !!this.options.disableDnd,
10401
10485
  accessor: this,
10486
+ headerSize: (_a = options.headerSize) !== null && _a !== void 0 ? _a : HEADER_SIZE,
10487
+ minimumBodySize: MINIMUM_BODY_SIZE,
10488
+ maximumBodySize: MAXIMUM_BODY_SIZE,
10402
10489
  });
10403
10490
  this.doAddPanel(view);
10404
10491
  const size = typeof options.size === 'number' ? options.size : exports.Sizing.Distribute;
10405
10492
  const index = typeof options.index === 'number' ? options.index : undefined;
10406
10493
  view.init({
10407
- params: (_a = options.params) !== null && _a !== void 0 ? _a : {},
10494
+ params: (_b = options.params) !== null && _b !== void 0 ? _b : {},
10408
10495
  minimumBodySize: options.minimumBodySize,
10409
10496
  maximumBodySize: options.maximumBodySize,
10410
10497
  isExpanded: options.isExpanded,
@@ -10449,6 +10536,7 @@ define(['exports'], (function (exports) { 'use strict';
10449
10536
  data: view.toJSON(),
10450
10537
  minimumSize: minimum(view.minimumBodySize),
10451
10538
  maximumSize: maximum(view.maximumBodySize),
10539
+ headerSize: view.headerSize,
10452
10540
  expanded: view.isExpanded(),
10453
10541
  };
10454
10542
  });
@@ -10469,6 +10557,7 @@ define(['exports'], (function (exports) { 'use strict';
10469
10557
  descriptor: {
10470
10558
  size,
10471
10559
  views: views.map((view) => {
10560
+ var _a, _b, _c;
10472
10561
  const data = view.data;
10473
10562
  const body = this.options.createComponent({
10474
10563
  id: data.id,
@@ -10495,6 +10584,9 @@ define(['exports'], (function (exports) { 'use strict';
10495
10584
  isExpanded: !!view.expanded,
10496
10585
  disableDnd: !!this.options.disableDnd,
10497
10586
  accessor: this,
10587
+ headerSize: (_a = view.headerSize) !== null && _a !== void 0 ? _a : HEADER_SIZE,
10588
+ minimumBodySize: (_b = view.minimumSize) !== null && _b !== void 0 ? _b : MINIMUM_BODY_SIZE,
10589
+ maximumBodySize: (_c = view.maximumSize) !== null && _c !== void 0 ? _c : MAXIMUM_BODY_SIZE,
10498
10590
  });
10499
10591
  this.doAddPanel(panel);
10500
10592
  queue.push(() => {