dockview-core 1.15.2 → 1.16.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 (99) hide show
  1. package/dist/cjs/api/component.api.d.ts +30 -6
  2. package/dist/cjs/api/component.api.js +42 -6
  3. package/dist/cjs/api/dockviewPanelApi.d.ts +1 -1
  4. package/dist/cjs/api/entryPoints.d.ts +9 -0
  5. package/dist/cjs/api/entryPoints.js +28 -0
  6. package/dist/cjs/dnd/abstractDragHandler.js +2 -65
  7. package/dist/cjs/dockview/components/titlebar/voidContainer.js +1 -1
  8. package/dist/cjs/dockview/dockviewComponent.d.ts +4 -2
  9. package/dist/cjs/dockview/dockviewComponent.js +61 -17
  10. package/dist/cjs/dockview/dockviewFloatingGroupPanel.d.ts +1 -1
  11. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +1 -1
  12. package/dist/cjs/dockview/dockviewGroupPanelModel.js +1 -1
  13. package/dist/cjs/dockview/dockviewPanel.d.ts +1 -1
  14. package/dist/cjs/dockview/dockviewPanel.js +1 -1
  15. package/dist/cjs/dockview/options.d.ts +2 -2
  16. package/dist/cjs/dockview/options.js +1 -0
  17. package/dist/cjs/dockview/types.d.ts +1 -1
  18. package/dist/cjs/dom.d.ts +3 -0
  19. package/dist/cjs/dom.js +66 -1
  20. package/dist/cjs/gridview/baseComponentGridview.d.ts +3 -2
  21. package/dist/cjs/gridview/baseComponentGridview.js +3 -0
  22. package/dist/cjs/gridview/gridviewComponent.d.ts +1 -1
  23. package/dist/cjs/gridview/gridviewComponent.js +3 -2
  24. package/dist/cjs/gridview/options.d.ts +1 -1
  25. package/dist/cjs/index.d.ts +2 -1
  26. package/dist/cjs/index.js +6 -1
  27. package/dist/cjs/{dnd → overlay}/overlay.d.ts +3 -0
  28. package/dist/cjs/{dnd → overlay}/overlay.js +41 -82
  29. package/dist/cjs/{overlayRenderContainer.d.ts → overlay/overlayRenderContainer.d.ts} +7 -5
  30. package/dist/cjs/{overlayRenderContainer.js → overlay/overlayRenderContainer.js} +41 -6
  31. package/dist/cjs/paneview/options.d.ts +1 -1
  32. package/dist/cjs/paneview/paneviewComponent.d.ts +1 -1
  33. package/dist/cjs/paneview/paneviewComponent.js +5 -2
  34. package/dist/cjs/splitview/options.d.ts +1 -1
  35. package/dist/cjs/splitview/splitview.js +64 -71
  36. package/dist/cjs/splitview/splitviewComponent.d.ts +1 -1
  37. package/dist/cjs/splitview/splitviewComponent.js +5 -2
  38. package/dist/dockview-core.amd.js +260 -98
  39. package/dist/dockview-core.amd.js.map +1 -1
  40. package/dist/dockview-core.amd.min.js +2 -2
  41. package/dist/dockview-core.amd.min.js.map +1 -1
  42. package/dist/dockview-core.amd.min.noStyle.js +2 -2
  43. package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
  44. package/dist/dockview-core.amd.noStyle.js +259 -97
  45. package/dist/dockview-core.amd.noStyle.js.map +1 -1
  46. package/dist/dockview-core.cjs.js +260 -98
  47. package/dist/dockview-core.cjs.js.map +1 -1
  48. package/dist/dockview-core.esm.js +257 -99
  49. package/dist/dockview-core.esm.js.map +1 -1
  50. package/dist/dockview-core.esm.min.js +2 -2
  51. package/dist/dockview-core.esm.min.js.map +1 -1
  52. package/dist/dockview-core.js +260 -98
  53. package/dist/dockview-core.js.map +1 -1
  54. package/dist/dockview-core.min.js +2 -2
  55. package/dist/dockview-core.min.js.map +1 -1
  56. package/dist/dockview-core.min.noStyle.js +2 -2
  57. package/dist/dockview-core.min.noStyle.js.map +1 -1
  58. package/dist/dockview-core.noStyle.js +259 -97
  59. package/dist/dockview-core.noStyle.js.map +1 -1
  60. package/dist/esm/api/component.api.d.ts +30 -6
  61. package/dist/esm/api/component.api.js +42 -6
  62. package/dist/esm/api/dockviewPanelApi.d.ts +1 -1
  63. package/dist/esm/api/entryPoints.d.ts +9 -0
  64. package/dist/esm/api/entryPoints.js +21 -0
  65. package/dist/esm/dnd/abstractDragHandler.js +3 -11
  66. package/dist/esm/dockview/components/panel/content.js +1 -1
  67. package/dist/esm/dockview/components/titlebar/voidContainer.js +1 -1
  68. package/dist/esm/dockview/dockviewComponent.d.ts +4 -2
  69. package/dist/esm/dockview/dockviewComponent.js +49 -13
  70. package/dist/esm/dockview/dockviewFloatingGroupPanel.d.ts +1 -1
  71. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +1 -1
  72. package/dist/esm/dockview/dockviewGroupPanelModel.js +1 -1
  73. package/dist/esm/dockview/dockviewPanel.d.ts +1 -1
  74. package/dist/esm/dockview/dockviewPanel.js +1 -1
  75. package/dist/esm/dockview/options.d.ts +2 -2
  76. package/dist/esm/dockview/options.js +1 -0
  77. package/dist/esm/dockview/types.d.ts +1 -1
  78. package/dist/esm/dom.d.ts +3 -0
  79. package/dist/esm/dom.js +20 -0
  80. package/dist/esm/gridview/baseComponentGridview.d.ts +3 -2
  81. package/dist/esm/gridview/baseComponentGridview.js +3 -0
  82. package/dist/esm/gridview/gridviewComponent.d.ts +1 -1
  83. package/dist/esm/gridview/gridviewComponent.js +3 -2
  84. package/dist/esm/gridview/options.d.ts +1 -1
  85. package/dist/esm/index.d.ts +2 -1
  86. package/dist/esm/index.js +1 -0
  87. package/dist/esm/{dnd → overlay}/overlay.d.ts +3 -0
  88. package/dist/esm/{dnd → overlay}/overlay.js +36 -32
  89. package/dist/esm/{overlayRenderContainer.d.ts → overlay/overlayRenderContainer.d.ts} +7 -5
  90. package/dist/esm/{overlayRenderContainer.js → overlay/overlayRenderContainer.js} +39 -6
  91. package/dist/esm/paneview/options.d.ts +1 -1
  92. package/dist/esm/paneview/paneviewComponent.d.ts +1 -1
  93. package/dist/esm/paneview/paneviewComponent.js +5 -2
  94. package/dist/esm/splitview/options.d.ts +1 -1
  95. package/dist/esm/splitview/splitview.js +37 -27
  96. package/dist/esm/splitview/splitviewComponent.d.ts +1 -1
  97. package/dist/esm/splitview/splitviewComponent.js +5 -2
  98. package/dist/styles/dockview.css +79 -83
  99. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * dockview-core
3
- * @version 1.15.2
3
+ * @version 1.16.0
4
4
  * @link https://github.com/mathuo/dockview
5
5
  * @license MIT
6
6
  */
@@ -535,6 +535,26 @@
535
535
  function addTestId(element, id) {
536
536
  element.setAttribute('data-testid', id);
537
537
  }
538
+ function disableIframePointEvents() {
539
+ const iframes = [
540
+ ...getElementsByTagName('iframe'),
541
+ ...getElementsByTagName('webview'),
542
+ ];
543
+ const original = new WeakMap(); // don't hold onto HTMLElement references longer than required
544
+ for (const iframe of iframes) {
545
+ original.set(iframe, iframe.style.pointerEvents);
546
+ iframe.style.pointerEvents = 'none';
547
+ }
548
+ return {
549
+ release: () => {
550
+ var _a;
551
+ for (const iframe of iframes) {
552
+ iframe.style.pointerEvents = (_a = original.get(iframe)) !== null && _a !== void 0 ? _a : 'auto';
553
+ }
554
+ iframes.splice(0, iframes.length); // don't hold onto HTMLElement references longer than required
555
+ },
556
+ };
557
+ }
538
558
 
539
559
  function tail(arr) {
540
560
  if (arr.length === 0) {
@@ -1057,13 +1077,7 @@
1057
1077
  for (const item of this.viewItems) {
1058
1078
  item.enabled = false;
1059
1079
  }
1060
- const iframes = [
1061
- ...getElementsByTagName('iframe'),
1062
- ...getElementsByTagName('webview'),
1063
- ];
1064
- for (const iframe of iframes) {
1065
- iframe.style.pointerEvents = 'none';
1066
- }
1080
+ const iframes = disableIframePointEvents();
1067
1081
  const start = this._orientation === exports.Orientation.HORIZONTAL
1068
1082
  ? event.clientX
1069
1083
  : event.clientY;
@@ -1125,9 +1139,7 @@
1125
1139
  for (const item of this.viewItems) {
1126
1140
  item.enabled = true;
1127
1141
  }
1128
- for (const iframe of iframes) {
1129
- iframe.style.pointerEvents = 'auto';
1130
- }
1142
+ iframes.release();
1131
1143
  this.saveProportions();
1132
1144
  document.removeEventListener('pointermove', onPointerMove);
1133
1145
  document.removeEventListener('pointerup', end);
@@ -1294,29 +1306,47 @@
1294
1306
  if (this.viewItems.length === 0) {
1295
1307
  return;
1296
1308
  }
1297
- const sashCount = this.viewItems.length - 1;
1298
- const marginReducedSize = (this.margin * sashCount) / this.viewItems.length;
1309
+ const visibleViewItems = this.viewItems.filter((i) => i.visible);
1310
+ const sashCount = Math.max(0, visibleViewItems.length - 1);
1311
+ const marginReducedSize = (this.margin * sashCount) / Math.max(1, visibleViewItems.length);
1299
1312
  let totalLeftOffset = 0;
1300
1313
  const viewLeftOffsets = [];
1301
- for (let i = 0; i < this.viewItems.length - 1; i++) {
1302
- totalLeftOffset += this.viewItems[i].size;
1303
- viewLeftOffsets.push(totalLeftOffset);
1304
- const offset = Math.min(Math.max(0, totalLeftOffset - 2), this.size - this.margin);
1305
- if (this._orientation === exports.Orientation.HORIZONTAL) {
1306
- this.sashes[i].container.style.left = `${offset}px`;
1307
- this.sashes[i].container.style.top = `0px`;
1314
+ const sashWidth = 4; // hardcoded in css
1315
+ const runningVisiblePanelCount = this.viewItems.reduce((arr, viewItem, i) => {
1316
+ const flag = viewItem.visible ? 1 : 0;
1317
+ if (i === 0) {
1318
+ arr.push(flag);
1308
1319
  }
1309
- if (this._orientation === exports.Orientation.VERTICAL) {
1310
- this.sashes[i].container.style.left = `0px`;
1311
- this.sashes[i].container.style.top = `${offset}px`;
1320
+ else {
1321
+ arr.push(arr[i - 1] + flag);
1312
1322
  }
1313
- }
1323
+ return arr;
1324
+ }, []);
1325
+ // calculate both view and cash positions
1314
1326
  this.viewItems.forEach((view, i) => {
1315
- const size = view.size - marginReducedSize;
1316
- const offset = i === 0
1327
+ totalLeftOffset += this.viewItems[i].size;
1328
+ viewLeftOffsets.push(totalLeftOffset);
1329
+ const size = view.visible ? view.size - marginReducedSize : 0;
1330
+ const visiblePanelsBeforeThisView = Math.max(0, runningVisiblePanelCount[i] - 1);
1331
+ const offset = i === 0 || visiblePanelsBeforeThisView === 0
1317
1332
  ? 0
1318
1333
  : viewLeftOffsets[i - 1] +
1319
- (i / sashCount) * marginReducedSize;
1334
+ (visiblePanelsBeforeThisView / sashCount) * marginReducedSize;
1335
+ if (i < this.viewItems.length - 1) {
1336
+ // calculate sash position
1337
+ const newSize = view.visible
1338
+ ? offset + size - sashWidth / 2 + this.margin / 2
1339
+ : offset;
1340
+ if (this._orientation === exports.Orientation.HORIZONTAL) {
1341
+ this.sashes[i].container.style.left = `${newSize}px`;
1342
+ this.sashes[i].container.style.top = `0px`;
1343
+ }
1344
+ if (this._orientation === exports.Orientation.VERTICAL) {
1345
+ this.sashes[i].container.style.left = `0px`;
1346
+ this.sashes[i].container.style.top = `${newSize}px`;
1347
+ }
1348
+ }
1349
+ // calculate view position
1320
1350
  if (this._orientation === exports.Orientation.HORIZONTAL) {
1321
1351
  view.container.style.width = `${size}px`;
1322
1352
  view.container.style.left = `${offset}px`;
@@ -2660,6 +2690,9 @@
2660
2690
  this.onDidViewVisibilityChangeMicroTaskQueue = this._onDidViewVisibilityChangeMicroTaskQueue.onEvent;
2661
2691
  this.element.style.height = '100%';
2662
2692
  this.element.style.width = '100%';
2693
+ if (typeof options.className === 'string') {
2694
+ this.element.classList.add(options.className);
2695
+ }
2663
2696
  options.parentElement.appendChild(this.element);
2664
2697
  this.gridview = new Gridview(!!options.proportionalLayout, options.styles, options.orientation, options.locked, options.margin);
2665
2698
  this.gridview.locked = !!options.locked;
@@ -2863,12 +2896,6 @@
2863
2896
  constructor(component) {
2864
2897
  this.component = component;
2865
2898
  }
2866
- /**
2867
- * Update configuratable options.
2868
- */
2869
- updateOptions(options) {
2870
- this.component.updateOptions(options);
2871
- }
2872
2899
  /**
2873
2900
  * Removes an existing panel and optionally provide a `Sizing` method
2874
2901
  * for the subsequent resize.
@@ -2922,6 +2949,18 @@
2922
2949
  clear() {
2923
2950
  this.component.clear();
2924
2951
  }
2952
+ /**
2953
+ * Update configuratable options.
2954
+ */
2955
+ updateOptions(options) {
2956
+ this.component.updateOptions(options);
2957
+ }
2958
+ /**
2959
+ * Release resources and teardown component. Do not call when using framework versions of dockview.
2960
+ */
2961
+ dispose() {
2962
+ this.component.dispose();
2963
+ }
2925
2964
  }
2926
2965
  class PaneviewApi {
2927
2966
  /**
@@ -3049,6 +3088,18 @@
3049
3088
  clear() {
3050
3089
  this.component.clear();
3051
3090
  }
3091
+ /**
3092
+ * Update configuratable options.
3093
+ */
3094
+ updateOptions(options) {
3095
+ this.component.updateOptions(options);
3096
+ }
3097
+ /**
3098
+ * Release resources and teardown component. Do not call when using framework versions of dockview.
3099
+ */
3100
+ dispose() {
3101
+ this.component.dispose();
3102
+ }
3052
3103
  }
3053
3104
  class GridviewApi {
3054
3105
  /**
@@ -3189,6 +3240,15 @@
3189
3240
  clear() {
3190
3241
  this.component.clear();
3191
3242
  }
3243
+ updateOptions(options) {
3244
+ this.component.updateOptions(options);
3245
+ }
3246
+ /**
3247
+ * Release resources and teardown component. Do not call when using framework versions of dockview.
3248
+ */
3249
+ dispose() {
3250
+ this.component.dispose();
3251
+ }
3192
3252
  }
3193
3253
  class DockviewApi {
3194
3254
  /**
@@ -3481,6 +3541,15 @@
3481
3541
  setGap(gap) {
3482
3542
  this.component.updateOptions({ gap });
3483
3543
  }
3544
+ updateOptions(options) {
3545
+ this.component.updateOptions(options);
3546
+ }
3547
+ /**
3548
+ * Release resources and teardown component. Do not call when using framework versions of dockview.
3549
+ */
3550
+ dispose() {
3551
+ this.component.dispose();
3552
+ }
3484
3553
  }
3485
3554
 
3486
3555
  class DragHandler extends CompositeDisposable {
@@ -3503,20 +3572,12 @@
3503
3572
  event.preventDefault();
3504
3573
  return;
3505
3574
  }
3506
- const iframes = [
3507
- ...getElementsByTagName('iframe'),
3508
- ...getElementsByTagName('webview'),
3509
- ];
3575
+ const iframes = disableIframePointEvents();
3510
3576
  this.pointerEventsDisposable.value = {
3511
3577
  dispose: () => {
3512
- for (const iframe of iframes) {
3513
- iframe.style.pointerEvents = 'auto';
3514
- }
3578
+ iframes.release();
3515
3579
  },
3516
3580
  };
3517
- for (const iframe of iframes) {
3518
- iframe.style.pointerEvents = 'none';
3519
- }
3520
3581
  this.el.classList.add('dv-dragged');
3521
3582
  setTimeout(() => this.el.classList.remove('dv-dragged'), 0);
3522
3583
  this.dataDisposable.value = this.getData(event);
@@ -4680,7 +4741,7 @@
4680
4741
  this._element.className = 'void-container';
4681
4742
  this._element.tabIndex = 0;
4682
4743
  this._element.draggable = true;
4683
- this.addDisposables(this._onDrop, this._onDragStart, addDisposableListener(this._element, 'click', () => {
4744
+ this.addDisposables(this._onDrop, this._onDragStart, addDisposableListener(this._element, 'pointerdown', () => {
4684
4745
  this.accessor.doSetGroupActive(this.group);
4685
4746
  }));
4686
4747
  const handler = new GroupDragHandler(this._element, accessor, group);
@@ -4995,6 +5056,7 @@
4995
5056
  locked: undefined,
4996
5057
  disableDnd: undefined,
4997
5058
  gap: undefined,
5059
+ className: undefined,
4998
5060
  };
4999
5061
  return Object.keys(properties);
5000
5062
  })();
@@ -5550,7 +5612,7 @@
5550
5612
  group: this.groupPanel,
5551
5613
  });
5552
5614
  this.watermark = watermark;
5553
- addDisposableListener(this.watermark.element, 'click', () => {
5615
+ addDisposableListener(this.watermark.element, 'pointerdown', () => {
5554
5616
  if (!this.isActive) {
5555
5617
  this.accessor.doSetGroupActive(this.groupPanel);
5556
5618
  }
@@ -6115,7 +6177,7 @@
6115
6177
  // forward the resize event to the group since if you want to resize a panel
6116
6178
  // you are actually just resizing the panels parent which is the group
6117
6179
  this.group.api.setSize(event);
6118
- }), this.api.onDidRendererChange((event) => {
6180
+ }), this.api.onDidRendererChange(() => {
6119
6181
  this.group.model.rerender(this);
6120
6182
  }));
6121
6183
  }
@@ -6451,17 +6513,30 @@
6451
6513
  }
6452
6514
  }
6453
6515
 
6454
- const bringElementToFront = (() => {
6455
- let previous = null;
6456
- function pushToTop(element) {
6457
- if (previous !== element && previous !== null) {
6458
- toggleClass(previous, 'dv-bring-to-front', false);
6516
+ const DEFAULT_OVERLAY_Z_INDEX = 999;
6517
+ class AriaLevelTracker {
6518
+ constructor() {
6519
+ this._orderedList = [];
6520
+ }
6521
+ push(element) {
6522
+ this._orderedList = [
6523
+ ...this._orderedList.filter((item) => item !== element),
6524
+ element,
6525
+ ];
6526
+ this.update();
6527
+ }
6528
+ destroy(element) {
6529
+ this._orderedList = this._orderedList.filter((item) => item !== element);
6530
+ this.update();
6531
+ }
6532
+ update() {
6533
+ for (let i = 0; i < this._orderedList.length; i++) {
6534
+ this._orderedList[i].setAttribute('aria-level', `${i}`);
6535
+ this._orderedList[i].style.zIndex = `${DEFAULT_OVERLAY_Z_INDEX + i * 2}`;
6459
6536
  }
6460
- toggleClass(element, 'dv-bring-to-front', true);
6461
- previous = element;
6462
6537
  }
6463
- return pushToTop;
6464
- })();
6538
+ }
6539
+ const arialLevelTracker = new AriaLevelTracker();
6465
6540
  class Overlay extends CompositeDisposable {
6466
6541
  set minimumInViewportWidth(value) {
6467
6542
  this.options.minimumInViewportWidth = value;
@@ -6469,6 +6544,9 @@
6469
6544
  set minimumInViewportHeight(value) {
6470
6545
  this.options.minimumInViewportHeight = value;
6471
6546
  }
6547
+ get element() {
6548
+ return this._element;
6549
+ }
6472
6550
  constructor(options) {
6473
6551
  super();
6474
6552
  this.options = options;
@@ -6491,6 +6569,10 @@
6491
6569
  this.options.container.appendChild(this._element);
6492
6570
  // if input bad resize within acceptable boundaries
6493
6571
  this.setBounds(Object.assign(Object.assign(Object.assign(Object.assign({ height: this.options.height, width: this.options.width }, ('top' in this.options && { top: this.options.top })), ('bottom' in this.options && { bottom: this.options.bottom })), ('left' in this.options && { left: this.options.left })), ('right' in this.options && { right: this.options.right })));
6572
+ arialLevelTracker.push(this._element);
6573
+ }
6574
+ bringToFront() {
6575
+ arialLevelTracker.push(this._element);
6494
6576
  }
6495
6577
  setBounds(bounds = {}) {
6496
6578
  if (typeof bounds.height === 'number') {
@@ -6578,18 +6660,10 @@
6578
6660
  const move = new MutableDisposable();
6579
6661
  const track = () => {
6580
6662
  let offset = null;
6581
- const iframes = [
6582
- ...getElementsByTagName('iframe'),
6583
- ...getElementsByTagName('webview'),
6584
- ];
6585
- for (const iframe of iframes) {
6586
- iframe.style.pointerEvents = 'none';
6587
- }
6663
+ const iframes = disableIframePointEvents();
6588
6664
  move.value = new CompositeDisposable({
6589
6665
  dispose: () => {
6590
- for (const iframe of iframes) {
6591
- iframe.style.pointerEvents = 'auto';
6592
- }
6666
+ iframes.release();
6593
6667
  },
6594
6668
  }, addDisposableWindowListener(window, 'mousemove', (e) => {
6595
6669
  const containerRect = this.options.container.getBoundingClientRect();
@@ -6658,9 +6732,8 @@
6658
6732
  track();
6659
6733
  }
6660
6734
  }), addDisposableListener(this.options.content, 'mousedown', () => {
6661
- bringElementToFront(this._element);
6735
+ arialLevelTracker.push(this._element);
6662
6736
  }, true));
6663
- bringElementToFront(this._element);
6664
6737
  if (options.inDragMode) {
6665
6738
  track();
6666
6739
  }
@@ -6673,13 +6746,7 @@
6673
6746
  this.addDisposables(move, addDisposableListener(resizeHandleElement, 'mousedown', (e) => {
6674
6747
  e.preventDefault();
6675
6748
  let startPosition = null;
6676
- const iframes = [
6677
- ...getElementsByTagName('iframe'),
6678
- ...getElementsByTagName('webview'),
6679
- ];
6680
- for (const iframe of iframes) {
6681
- iframe.style.pointerEvents = 'none';
6682
- }
6749
+ const iframes = disableIframePointEvents();
6683
6750
  move.value = new CompositeDisposable(addDisposableWindowListener(window, 'mousemove', (e) => {
6684
6751
  const containerRect = this.options.container.getBoundingClientRect();
6685
6752
  const overlayRect = this._element.getBoundingClientRect();
@@ -6802,9 +6869,7 @@
6802
6869
  this.setBounds(bounds);
6803
6870
  }), {
6804
6871
  dispose: () => {
6805
- for (const iframe of iframes) {
6806
- iframe.style.pointerEvents = 'auto';
6807
- }
6872
+ iframes.release();
6808
6873
  },
6809
6874
  }, addDisposableWindowListener(window, 'mouseup', () => {
6810
6875
  move.dispose();
@@ -6825,6 +6890,7 @@
6825
6890
  return 0;
6826
6891
  }
6827
6892
  dispose() {
6893
+ arialLevelTracker.destroy(this._element);
6828
6894
  this._element.remove();
6829
6895
  super.dispose();
6830
6896
  }
@@ -6853,9 +6919,10 @@
6853
6919
  return element;
6854
6920
  }
6855
6921
  class OverlayRenderContainer extends CompositeDisposable {
6856
- constructor(element) {
6922
+ constructor(element, accessor) {
6857
6923
  super();
6858
6924
  this.element = element;
6925
+ this.accessor = accessor;
6859
6926
  this.map = {};
6860
6927
  this._disposed = false;
6861
6928
  this.addDisposables(exports.DockviewDisposable.from(() => {
@@ -6911,7 +6978,35 @@
6911
6978
  }
6912
6979
  focusContainer.style.display = panel.api.isVisible ? '' : 'none';
6913
6980
  };
6914
- const disposable = new CompositeDisposable(
6981
+ const observerDisposable = new MutableDisposable();
6982
+ const correctLayerPosition = () => {
6983
+ if (panel.api.location.type === 'floating') {
6984
+ queueMicrotask(() => {
6985
+ const floatingGroup = this.accessor.floatingGroups.find((group) => group.group === panel.api.group);
6986
+ if (!floatingGroup) {
6987
+ return;
6988
+ }
6989
+ const element = floatingGroup.overlay.element;
6990
+ const update = () => {
6991
+ const level = Number(element.getAttribute('aria-level'));
6992
+ focusContainer.style.zIndex = `${DEFAULT_OVERLAY_Z_INDEX + level * 2 + 1}`;
6993
+ };
6994
+ const observer = new MutationObserver(() => {
6995
+ update();
6996
+ });
6997
+ observerDisposable.value = exports.DockviewDisposable.from(() => observer.disconnect());
6998
+ observer.observe(element, {
6999
+ attributeFilter: ['aria-level'],
7000
+ attributes: true,
7001
+ });
7002
+ update();
7003
+ });
7004
+ }
7005
+ else {
7006
+ focusContainer.style.zIndex = ''; // reset the z-index, perhaps CSS will take over here
7007
+ }
7008
+ };
7009
+ const disposable = new CompositeDisposable(observerDisposable,
6915
7010
  /**
6916
7011
  * since container is positioned absoutely we must explicitly forward
6917
7012
  * the dnd events for the expect behaviours to continue to occur in terms of dnd
@@ -6935,7 +7030,7 @@
6935
7030
  onDragOver: (e) => {
6936
7031
  referenceContainer.dropTarget.dnd.onDragOver(e);
6937
7032
  },
6938
- }), panel.api.onDidVisibilityChange((event) => {
7033
+ }), panel.api.onDidVisibilityChange(() => {
6939
7034
  /**
6940
7035
  * Control the visibility of the content, however even when not visible (display: none)
6941
7036
  * the content is still maintained within the DOM hence DOM specific attributes
@@ -6947,6 +7042,8 @@
6947
7042
  return;
6948
7043
  }
6949
7044
  resize();
7045
+ }), panel.api.onDidLocationChange(() => {
7046
+ correctLayerPosition();
6950
7047
  }));
6951
7048
  this.map[panel.api.id].destroy = exports.DockviewDisposable.from(() => {
6952
7049
  var _a;
@@ -6955,6 +7052,7 @@
6955
7052
  }
6956
7053
  (_a = focusContainer.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(focusContainer);
6957
7054
  });
7055
+ correctLayerPosition();
6958
7056
  queueMicrotask(() => {
6959
7057
  if (this.isDisposed) {
6960
7058
  return;
@@ -7203,7 +7301,10 @@
7203
7301
  get gap() {
7204
7302
  return this.gridview.margin;
7205
7303
  }
7206
- constructor(options) {
7304
+ get floatingGroups() {
7305
+ return this._floatingGroups;
7306
+ }
7307
+ constructor(parentElement, options) {
7207
7308
  var _a;
7208
7309
  super({
7209
7310
  proportionalLayout: true,
@@ -7211,10 +7312,11 @@
7211
7312
  styles: options.hideBorders
7212
7313
  ? { separatorBorder: 'transparent' }
7213
7314
  : undefined,
7214
- parentElement: options.parentElement,
7315
+ parentElement: parentElement,
7215
7316
  disableAutoResizing: options.disableAutoResizing,
7216
7317
  locked: options.locked,
7217
7318
  margin: options.gap,
7319
+ className: options.className,
7218
7320
  });
7219
7321
  this.nextGroupId = sequentialNumberGenerator();
7220
7322
  this._deserializer = new DefaultDockviewDeserialzier(this);
@@ -7250,10 +7352,10 @@
7250
7352
  this._onDidActiveGroupChange = new Emitter();
7251
7353
  this.onDidActiveGroupChange = this._onDidActiveGroupChange.event;
7252
7354
  this._moving = false;
7253
- const gready = document.createElement('div');
7254
- gready.className = 'dv-overlay-render-container';
7255
- this.gridview.element.appendChild(gready);
7256
- this.overlayRenderContainer = new OverlayRenderContainer(gready);
7355
+ // const gready = document.createElement('div');
7356
+ // gready.className = 'dv-overlay-render-container';
7357
+ // this.gridview.element.appendChild(gready);
7358
+ this.overlayRenderContainer = new OverlayRenderContainer(this.gridview.element, this);
7257
7359
  toggleClass(this.gridview.element, 'dv-dockview', true);
7258
7360
  toggleClass(this.element, 'dv-debug', !!options.debug);
7259
7361
  this.addDisposables(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.onDidViewVisibilityChangeMicroTaskQueue(() => {
@@ -7419,7 +7521,7 @@
7419
7521
  }
7420
7522
  const gready = document.createElement('div');
7421
7523
  gready.className = 'dv-overlay-render-container';
7422
- const overlayRenderContainer = new OverlayRenderContainer(gready);
7524
+ const overlayRenderContainer = new OverlayRenderContainer(gready, this);
7423
7525
  const referenceGroup = itemToPopout instanceof DockviewPanel
7424
7526
  ? itemToPopout.group
7425
7527
  : itemToPopout;
@@ -7568,7 +7670,6 @@
7568
7670
  }
7569
7671
  }
7570
7672
  }
7571
- group.model.location = { type: 'floating' };
7572
7673
  function getAnchoredBox() {
7573
7674
  if (options === null || options === void 0 ? void 0 : options.position) {
7574
7675
  const result = {};
@@ -7635,10 +7736,14 @@
7635
7736
  : false,
7636
7737
  });
7637
7738
  const floatingGroupPanel = new DockviewFloatingGroupPanel(group, overlay);
7638
- const disposable = watchElementResize(group.element, (entry) => {
7739
+ const disposable = new CompositeDisposable(group.api.onDidActiveChange((event) => {
7740
+ if (event.isActive) {
7741
+ overlay.bringToFront();
7742
+ }
7743
+ }), watchElementResize(group.element, (entry) => {
7639
7744
  const { width, height } = entry.contentRect;
7640
7745
  group.layout(width, height); // let the group know it's size is changing so it can fire events to the panel
7641
- });
7746
+ }));
7642
7747
  floatingGroupPanel.addDisposables(overlay.onDidChange(() => {
7643
7748
  // this is either a resize or a move
7644
7749
  // to inform the panels .layout(...) the group with it's current size
@@ -7654,12 +7759,13 @@
7654
7759
  }), {
7655
7760
  dispose: () => {
7656
7761
  disposable.dispose();
7657
- group.model.location = { type: 'grid' };
7658
7762
  remove(this._floatingGroups, floatingGroupPanel);
7763
+ group.model.location = { type: 'grid' };
7659
7764
  this.updateWatermark();
7660
7765
  },
7661
7766
  });
7662
7767
  this._floatingGroups.push(floatingGroupPanel);
7768
+ group.model.location = { type: 'floating' };
7663
7769
  if (!(options === null || options === void 0 ? void 0 : options.skipActiveGroup)) {
7664
7770
  this.doSetGroupAndPanelActive(group);
7665
7771
  }
@@ -7899,6 +8005,8 @@
7899
8005
  const group = createGroupFromSerializedState(data);
7900
8006
  this.addFloatingGroup(group, {
7901
8007
  position: position,
8008
+ width: position.width,
8009
+ height: position.height,
7902
8010
  skipRemoveGroup: true,
7903
8011
  inDragMode: false,
7904
8012
  });
@@ -8239,6 +8347,7 @@
8239
8347
  this._groups.delete(group.id);
8240
8348
  this._onDidRemoveGroup.fire(group);
8241
8349
  }
8350
+ remove(this._popoutGroups, selectedGroup);
8242
8351
  const removedGroup = selectedGroup.disposable.dispose();
8243
8352
  if (!(options === null || options === void 0 ? void 0 : options.skipPopoutReturn) && removedGroup) {
8244
8353
  this.doAddGroup(removedGroup, [0]);
@@ -8350,6 +8459,31 @@
8350
8459
  return;
8351
8460
  }
8352
8461
  }
8462
+ if (sourceGroup.api.location.type === 'popout') {
8463
+ /**
8464
+ * the source group is a popout group with a single panel
8465
+ *
8466
+ * 1. remove the panel from the group without triggering any events
8467
+ * 2. remove the popout group
8468
+ * 3. create a new group at the requested location and add that panel
8469
+ */
8470
+ const popoutGroup = this._popoutGroups.find((group) => group.popoutGroup === sourceGroup);
8471
+ const removedPanel = this.movingLock(() => popoutGroup.popoutGroup.model.removePanel(popoutGroup.popoutGroup.panels[0], {
8472
+ skipSetActive: true,
8473
+ skipSetActiveGroup: true,
8474
+ }));
8475
+ this.doRemoveGroup(sourceGroup, { skipActive: true });
8476
+ const newGroup = this.createGroupAtLocation(targetLocation);
8477
+ this.movingLock(() => newGroup.model.openPanel(removedPanel, {
8478
+ skipSetActive: true,
8479
+ }));
8480
+ this.doSetGroupAndPanelActive(newGroup);
8481
+ this._onDidMovePanel.fire({
8482
+ panel: this.getGroupPanel(sourceItemId),
8483
+ from: sourceGroup,
8484
+ });
8485
+ return;
8486
+ }
8353
8487
  // source group will become empty so delete the group
8354
8488
  const targetGroup = this.movingLock(() => this.doRemoveGroup(sourceGroup, {
8355
8489
  skipActive: true,
@@ -8581,13 +8715,14 @@
8581
8715
  set deserializer(value) {
8582
8716
  this._deserializer = value;
8583
8717
  }
8584
- constructor(options) {
8718
+ constructor(parentElement, options) {
8585
8719
  super({
8586
- parentElement: options.parentElement,
8720
+ parentElement: parentElement,
8587
8721
  proportionalLayout: options.proportionalLayout,
8588
8722
  orientation: options.orientation,
8589
8723
  styles: options.styles,
8590
8724
  disableAutoResizing: options.disableAutoResizing,
8725
+ className: options.className,
8591
8726
  });
8592
8727
  this._onDidLayoutfromJSON = new Emitter();
8593
8728
  this.onDidLayoutFromJSON = this._onDidLayoutfromJSON.event;
@@ -8879,8 +9014,8 @@
8879
9014
  ? this.splitview.size
8880
9015
  : this.splitview.orthogonalSize;
8881
9016
  }
8882
- constructor(options) {
8883
- super(options.parentElement, options.disableAutoResizing);
9017
+ constructor(parentElement, options) {
9018
+ super(parentElement, options.disableAutoResizing);
8884
9019
  this._splitviewChangeDisposable = new MutableDisposable();
8885
9020
  this._panels = new Map();
8886
9021
  this._onDidLayoutfromJSON = new Emitter();
@@ -8891,6 +9026,9 @@
8891
9026
  this.onDidRemoveView = this._onDidRemoveView.event;
8892
9027
  this._onDidLayoutChange = new Emitter();
8893
9028
  this.onDidLayoutChange = this._onDidLayoutChange.event;
9029
+ if (typeof options.className === 'string') {
9030
+ this.element.classList.add(options.className);
9031
+ }
8894
9032
  this._options = options;
8895
9033
  if (!options.components) {
8896
9034
  options.components = {};
@@ -9203,8 +9341,8 @@
9203
9341
  get options() {
9204
9342
  return this._options;
9205
9343
  }
9206
- constructor(options) {
9207
- super(options.parentElement, options.disableAutoResizing);
9344
+ constructor(parentElement, options) {
9345
+ super(parentElement, options.disableAutoResizing);
9208
9346
  this._id = nextLayoutId.next();
9209
9347
  this._disposable = new MutableDisposable();
9210
9348
  this._viewDisposables = new Map();
@@ -9218,6 +9356,9 @@
9218
9356
  this.onDidAddView = this._onDidAddView.event;
9219
9357
  this._onDidRemoveView = new Emitter();
9220
9358
  this.onDidRemoveView = this._onDidRemoveView.event;
9359
+ if (typeof options.className === 'string') {
9360
+ this.element.classList.add(options.className);
9361
+ }
9221
9362
  this.addDisposables(this._onDidLayoutChange, this._onDidLayoutfromJSON, this._onDidDrop, this._onDidAddView, this._onDidRemoveView);
9222
9363
  this._options = options;
9223
9364
  if (!options.components) {
@@ -9533,6 +9674,23 @@
9533
9674
  }
9534
9675
  }
9535
9676
 
9677
+ function createDockview(element, options) {
9678
+ const component = new DockviewComponent(element, options);
9679
+ return component.api;
9680
+ }
9681
+ function createSplitview(element, options) {
9682
+ const component = new SplitviewComponent(element, options);
9683
+ return new SplitviewApi(component);
9684
+ }
9685
+ function createGridview(element, options) {
9686
+ const component = new GridviewComponent(element, options);
9687
+ return new GridviewApi(component);
9688
+ }
9689
+ function createPaneview(element, options) {
9690
+ const component = new PaneviewComponent(element, options);
9691
+ return new PaneviewApi(component);
9692
+ }
9693
+
9536
9694
  exports.BaseGrid = BaseGrid;
9537
9695
  exports.ContentContainer = ContentContainer;
9538
9696
  exports.DefaultDockviewDeserialzier = DefaultDockviewDeserialzier;
@@ -9569,6 +9727,10 @@
9569
9727
  exports.Tab = Tab;
9570
9728
  exports.WillShowOverlayLocationEvent = WillShowOverlayLocationEvent;
9571
9729
  exports.createComponent = createComponent;
9730
+ exports.createDockview = createDockview;
9731
+ exports.createGridview = createGridview;
9732
+ exports.createPaneview = createPaneview;
9733
+ exports.createSplitview = createSplitview;
9572
9734
  exports.directionToPosition = directionToPosition;
9573
9735
  exports.getDirectionOrientation = getDirectionOrientation;
9574
9736
  exports.getGridLocation = getGridLocation;