dockview-core 1.15.3 → 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 +59 -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 +258 -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 +257 -97
  45. package/dist/dockview-core.amd.noStyle.js.map +1 -1
  46. package/dist/dockview-core.cjs.js +258 -98
  47. package/dist/dockview-core.cjs.js.map +1 -1
  48. package/dist/dockview-core.esm.js +255 -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 +258 -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 +257 -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 +47 -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 +78 -82
  99. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * dockview-core
3
- * @version 1.15.3
3
+ * @version 1.16.0
4
4
  * @link https://github.com/mathuo/dockview
5
5
  * @license MIT
6
6
  */
@@ -531,6 +531,26 @@ define(['exports'], (function (exports) { 'use strict';
531
531
  function addTestId(element, id) {
532
532
  element.setAttribute('data-testid', id);
533
533
  }
534
+ function disableIframePointEvents() {
535
+ const iframes = [
536
+ ...getElementsByTagName('iframe'),
537
+ ...getElementsByTagName('webview'),
538
+ ];
539
+ const original = new WeakMap(); // don't hold onto HTMLElement references longer than required
540
+ for (const iframe of iframes) {
541
+ original.set(iframe, iframe.style.pointerEvents);
542
+ iframe.style.pointerEvents = 'none';
543
+ }
544
+ return {
545
+ release: () => {
546
+ var _a;
547
+ for (const iframe of iframes) {
548
+ iframe.style.pointerEvents = (_a = original.get(iframe)) !== null && _a !== void 0 ? _a : 'auto';
549
+ }
550
+ iframes.splice(0, iframes.length); // don't hold onto HTMLElement references longer than required
551
+ },
552
+ };
553
+ }
534
554
 
535
555
  function tail(arr) {
536
556
  if (arr.length === 0) {
@@ -1053,13 +1073,7 @@ define(['exports'], (function (exports) { 'use strict';
1053
1073
  for (const item of this.viewItems) {
1054
1074
  item.enabled = false;
1055
1075
  }
1056
- const iframes = [
1057
- ...getElementsByTagName('iframe'),
1058
- ...getElementsByTagName('webview'),
1059
- ];
1060
- for (const iframe of iframes) {
1061
- iframe.style.pointerEvents = 'none';
1062
- }
1076
+ const iframes = disableIframePointEvents();
1063
1077
  const start = this._orientation === exports.Orientation.HORIZONTAL
1064
1078
  ? event.clientX
1065
1079
  : event.clientY;
@@ -1121,9 +1135,7 @@ define(['exports'], (function (exports) { 'use strict';
1121
1135
  for (const item of this.viewItems) {
1122
1136
  item.enabled = true;
1123
1137
  }
1124
- for (const iframe of iframes) {
1125
- iframe.style.pointerEvents = 'auto';
1126
- }
1138
+ iframes.release();
1127
1139
  this.saveProportions();
1128
1140
  document.removeEventListener('pointermove', onPointerMove);
1129
1141
  document.removeEventListener('pointerup', end);
@@ -1290,29 +1302,47 @@ define(['exports'], (function (exports) { 'use strict';
1290
1302
  if (this.viewItems.length === 0) {
1291
1303
  return;
1292
1304
  }
1293
- const sashCount = this.viewItems.length - 1;
1294
- const marginReducedSize = (this.margin * sashCount) / this.viewItems.length;
1305
+ const visibleViewItems = this.viewItems.filter((i) => i.visible);
1306
+ const sashCount = Math.max(0, visibleViewItems.length - 1);
1307
+ const marginReducedSize = (this.margin * sashCount) / Math.max(1, visibleViewItems.length);
1295
1308
  let totalLeftOffset = 0;
1296
1309
  const viewLeftOffsets = [];
1297
- for (let i = 0; i < this.viewItems.length - 1; i++) {
1298
- totalLeftOffset += this.viewItems[i].size;
1299
- viewLeftOffsets.push(totalLeftOffset);
1300
- const offset = Math.min(Math.max(0, totalLeftOffset - 2), this.size - this.margin);
1301
- if (this._orientation === exports.Orientation.HORIZONTAL) {
1302
- this.sashes[i].container.style.left = `${offset}px`;
1303
- this.sashes[i].container.style.top = `0px`;
1310
+ const sashWidth = 4; // hardcoded in css
1311
+ const runningVisiblePanelCount = this.viewItems.reduce((arr, viewItem, i) => {
1312
+ const flag = viewItem.visible ? 1 : 0;
1313
+ if (i === 0) {
1314
+ arr.push(flag);
1304
1315
  }
1305
- if (this._orientation === exports.Orientation.VERTICAL) {
1306
- this.sashes[i].container.style.left = `0px`;
1307
- this.sashes[i].container.style.top = `${offset}px`;
1316
+ else {
1317
+ arr.push(arr[i - 1] + flag);
1308
1318
  }
1309
- }
1319
+ return arr;
1320
+ }, []);
1321
+ // calculate both view and cash positions
1310
1322
  this.viewItems.forEach((view, i) => {
1311
- const size = view.size - marginReducedSize;
1312
- const offset = i === 0
1323
+ totalLeftOffset += this.viewItems[i].size;
1324
+ viewLeftOffsets.push(totalLeftOffset);
1325
+ const size = view.visible ? view.size - marginReducedSize : 0;
1326
+ const visiblePanelsBeforeThisView = Math.max(0, runningVisiblePanelCount[i] - 1);
1327
+ const offset = i === 0 || visiblePanelsBeforeThisView === 0
1313
1328
  ? 0
1314
1329
  : viewLeftOffsets[i - 1] +
1315
- (i / sashCount) * marginReducedSize;
1330
+ (visiblePanelsBeforeThisView / sashCount) * marginReducedSize;
1331
+ if (i < this.viewItems.length - 1) {
1332
+ // calculate sash position
1333
+ const newSize = view.visible
1334
+ ? offset + size - sashWidth / 2 + this.margin / 2
1335
+ : offset;
1336
+ if (this._orientation === exports.Orientation.HORIZONTAL) {
1337
+ this.sashes[i].container.style.left = `${newSize}px`;
1338
+ this.sashes[i].container.style.top = `0px`;
1339
+ }
1340
+ if (this._orientation === exports.Orientation.VERTICAL) {
1341
+ this.sashes[i].container.style.left = `0px`;
1342
+ this.sashes[i].container.style.top = `${newSize}px`;
1343
+ }
1344
+ }
1345
+ // calculate view position
1316
1346
  if (this._orientation === exports.Orientation.HORIZONTAL) {
1317
1347
  view.container.style.width = `${size}px`;
1318
1348
  view.container.style.left = `${offset}px`;
@@ -2656,6 +2686,9 @@ define(['exports'], (function (exports) { 'use strict';
2656
2686
  this.onDidViewVisibilityChangeMicroTaskQueue = this._onDidViewVisibilityChangeMicroTaskQueue.onEvent;
2657
2687
  this.element.style.height = '100%';
2658
2688
  this.element.style.width = '100%';
2689
+ if (typeof options.className === 'string') {
2690
+ this.element.classList.add(options.className);
2691
+ }
2659
2692
  options.parentElement.appendChild(this.element);
2660
2693
  this.gridview = new Gridview(!!options.proportionalLayout, options.styles, options.orientation, options.locked, options.margin);
2661
2694
  this.gridview.locked = !!options.locked;
@@ -2859,12 +2892,6 @@ define(['exports'], (function (exports) { 'use strict';
2859
2892
  constructor(component) {
2860
2893
  this.component = component;
2861
2894
  }
2862
- /**
2863
- * Update configuratable options.
2864
- */
2865
- updateOptions(options) {
2866
- this.component.updateOptions(options);
2867
- }
2868
2895
  /**
2869
2896
  * Removes an existing panel and optionally provide a `Sizing` method
2870
2897
  * for the subsequent resize.
@@ -2918,6 +2945,18 @@ define(['exports'], (function (exports) { 'use strict';
2918
2945
  clear() {
2919
2946
  this.component.clear();
2920
2947
  }
2948
+ /**
2949
+ * Update configuratable options.
2950
+ */
2951
+ updateOptions(options) {
2952
+ this.component.updateOptions(options);
2953
+ }
2954
+ /**
2955
+ * Release resources and teardown component. Do not call when using framework versions of dockview.
2956
+ */
2957
+ dispose() {
2958
+ this.component.dispose();
2959
+ }
2921
2960
  }
2922
2961
  class PaneviewApi {
2923
2962
  /**
@@ -3045,6 +3084,18 @@ define(['exports'], (function (exports) { 'use strict';
3045
3084
  clear() {
3046
3085
  this.component.clear();
3047
3086
  }
3087
+ /**
3088
+ * Update configuratable options.
3089
+ */
3090
+ updateOptions(options) {
3091
+ this.component.updateOptions(options);
3092
+ }
3093
+ /**
3094
+ * Release resources and teardown component. Do not call when using framework versions of dockview.
3095
+ */
3096
+ dispose() {
3097
+ this.component.dispose();
3098
+ }
3048
3099
  }
3049
3100
  class GridviewApi {
3050
3101
  /**
@@ -3185,6 +3236,15 @@ define(['exports'], (function (exports) { 'use strict';
3185
3236
  clear() {
3186
3237
  this.component.clear();
3187
3238
  }
3239
+ updateOptions(options) {
3240
+ this.component.updateOptions(options);
3241
+ }
3242
+ /**
3243
+ * Release resources and teardown component. Do not call when using framework versions of dockview.
3244
+ */
3245
+ dispose() {
3246
+ this.component.dispose();
3247
+ }
3188
3248
  }
3189
3249
  class DockviewApi {
3190
3250
  /**
@@ -3477,6 +3537,15 @@ define(['exports'], (function (exports) { 'use strict';
3477
3537
  setGap(gap) {
3478
3538
  this.component.updateOptions({ gap });
3479
3539
  }
3540
+ updateOptions(options) {
3541
+ this.component.updateOptions(options);
3542
+ }
3543
+ /**
3544
+ * Release resources and teardown component. Do not call when using framework versions of dockview.
3545
+ */
3546
+ dispose() {
3547
+ this.component.dispose();
3548
+ }
3480
3549
  }
3481
3550
 
3482
3551
  class DragHandler extends CompositeDisposable {
@@ -3499,20 +3568,12 @@ define(['exports'], (function (exports) { 'use strict';
3499
3568
  event.preventDefault();
3500
3569
  return;
3501
3570
  }
3502
- const iframes = [
3503
- ...getElementsByTagName('iframe'),
3504
- ...getElementsByTagName('webview'),
3505
- ];
3571
+ const iframes = disableIframePointEvents();
3506
3572
  this.pointerEventsDisposable.value = {
3507
3573
  dispose: () => {
3508
- for (const iframe of iframes) {
3509
- iframe.style.pointerEvents = 'auto';
3510
- }
3574
+ iframes.release();
3511
3575
  },
3512
3576
  };
3513
- for (const iframe of iframes) {
3514
- iframe.style.pointerEvents = 'none';
3515
- }
3516
3577
  this.el.classList.add('dv-dragged');
3517
3578
  setTimeout(() => this.el.classList.remove('dv-dragged'), 0);
3518
3579
  this.dataDisposable.value = this.getData(event);
@@ -4676,7 +4737,7 @@ define(['exports'], (function (exports) { 'use strict';
4676
4737
  this._element.className = 'void-container';
4677
4738
  this._element.tabIndex = 0;
4678
4739
  this._element.draggable = true;
4679
- this.addDisposables(this._onDrop, this._onDragStart, addDisposableListener(this._element, 'click', () => {
4740
+ this.addDisposables(this._onDrop, this._onDragStart, addDisposableListener(this._element, 'pointerdown', () => {
4680
4741
  this.accessor.doSetGroupActive(this.group);
4681
4742
  }));
4682
4743
  const handler = new GroupDragHandler(this._element, accessor, group);
@@ -4991,6 +5052,7 @@ define(['exports'], (function (exports) { 'use strict';
4991
5052
  locked: undefined,
4992
5053
  disableDnd: undefined,
4993
5054
  gap: undefined,
5055
+ className: undefined,
4994
5056
  };
4995
5057
  return Object.keys(properties);
4996
5058
  })();
@@ -5546,7 +5608,7 @@ define(['exports'], (function (exports) { 'use strict';
5546
5608
  group: this.groupPanel,
5547
5609
  });
5548
5610
  this.watermark = watermark;
5549
- addDisposableListener(this.watermark.element, 'click', () => {
5611
+ addDisposableListener(this.watermark.element, 'pointerdown', () => {
5550
5612
  if (!this.isActive) {
5551
5613
  this.accessor.doSetGroupActive(this.groupPanel);
5552
5614
  }
@@ -6111,7 +6173,7 @@ define(['exports'], (function (exports) { 'use strict';
6111
6173
  // forward the resize event to the group since if you want to resize a panel
6112
6174
  // you are actually just resizing the panels parent which is the group
6113
6175
  this.group.api.setSize(event);
6114
- }), this.api.onDidRendererChange((event) => {
6176
+ }), this.api.onDidRendererChange(() => {
6115
6177
  this.group.model.rerender(this);
6116
6178
  }));
6117
6179
  }
@@ -6447,17 +6509,30 @@ define(['exports'], (function (exports) { 'use strict';
6447
6509
  }
6448
6510
  }
6449
6511
 
6450
- const bringElementToFront = (() => {
6451
- let previous = null;
6452
- function pushToTop(element) {
6453
- if (previous !== element && previous !== null) {
6454
- toggleClass(previous, 'dv-bring-to-front', false);
6512
+ const DEFAULT_OVERLAY_Z_INDEX = 999;
6513
+ class AriaLevelTracker {
6514
+ constructor() {
6515
+ this._orderedList = [];
6516
+ }
6517
+ push(element) {
6518
+ this._orderedList = [
6519
+ ...this._orderedList.filter((item) => item !== element),
6520
+ element,
6521
+ ];
6522
+ this.update();
6523
+ }
6524
+ destroy(element) {
6525
+ this._orderedList = this._orderedList.filter((item) => item !== element);
6526
+ this.update();
6527
+ }
6528
+ update() {
6529
+ for (let i = 0; i < this._orderedList.length; i++) {
6530
+ this._orderedList[i].setAttribute('aria-level', `${i}`);
6531
+ this._orderedList[i].style.zIndex = `${DEFAULT_OVERLAY_Z_INDEX + i * 2}`;
6455
6532
  }
6456
- toggleClass(element, 'dv-bring-to-front', true);
6457
- previous = element;
6458
6533
  }
6459
- return pushToTop;
6460
- })();
6534
+ }
6535
+ const arialLevelTracker = new AriaLevelTracker();
6461
6536
  class Overlay extends CompositeDisposable {
6462
6537
  set minimumInViewportWidth(value) {
6463
6538
  this.options.minimumInViewportWidth = value;
@@ -6465,6 +6540,9 @@ define(['exports'], (function (exports) { 'use strict';
6465
6540
  set minimumInViewportHeight(value) {
6466
6541
  this.options.minimumInViewportHeight = value;
6467
6542
  }
6543
+ get element() {
6544
+ return this._element;
6545
+ }
6468
6546
  constructor(options) {
6469
6547
  super();
6470
6548
  this.options = options;
@@ -6487,6 +6565,10 @@ define(['exports'], (function (exports) { 'use strict';
6487
6565
  this.options.container.appendChild(this._element);
6488
6566
  // if input bad resize within acceptable boundaries
6489
6567
  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 })));
6568
+ arialLevelTracker.push(this._element);
6569
+ }
6570
+ bringToFront() {
6571
+ arialLevelTracker.push(this._element);
6490
6572
  }
6491
6573
  setBounds(bounds = {}) {
6492
6574
  if (typeof bounds.height === 'number') {
@@ -6574,18 +6656,10 @@ define(['exports'], (function (exports) { 'use strict';
6574
6656
  const move = new MutableDisposable();
6575
6657
  const track = () => {
6576
6658
  let offset = null;
6577
- const iframes = [
6578
- ...getElementsByTagName('iframe'),
6579
- ...getElementsByTagName('webview'),
6580
- ];
6581
- for (const iframe of iframes) {
6582
- iframe.style.pointerEvents = 'none';
6583
- }
6659
+ const iframes = disableIframePointEvents();
6584
6660
  move.value = new CompositeDisposable({
6585
6661
  dispose: () => {
6586
- for (const iframe of iframes) {
6587
- iframe.style.pointerEvents = 'auto';
6588
- }
6662
+ iframes.release();
6589
6663
  },
6590
6664
  }, addDisposableWindowListener(window, 'mousemove', (e) => {
6591
6665
  const containerRect = this.options.container.getBoundingClientRect();
@@ -6654,9 +6728,8 @@ define(['exports'], (function (exports) { 'use strict';
6654
6728
  track();
6655
6729
  }
6656
6730
  }), addDisposableListener(this.options.content, 'mousedown', () => {
6657
- bringElementToFront(this._element);
6731
+ arialLevelTracker.push(this._element);
6658
6732
  }, true));
6659
- bringElementToFront(this._element);
6660
6733
  if (options.inDragMode) {
6661
6734
  track();
6662
6735
  }
@@ -6669,13 +6742,7 @@ define(['exports'], (function (exports) { 'use strict';
6669
6742
  this.addDisposables(move, addDisposableListener(resizeHandleElement, 'mousedown', (e) => {
6670
6743
  e.preventDefault();
6671
6744
  let startPosition = null;
6672
- const iframes = [
6673
- ...getElementsByTagName('iframe'),
6674
- ...getElementsByTagName('webview'),
6675
- ];
6676
- for (const iframe of iframes) {
6677
- iframe.style.pointerEvents = 'none';
6678
- }
6745
+ const iframes = disableIframePointEvents();
6679
6746
  move.value = new CompositeDisposable(addDisposableWindowListener(window, 'mousemove', (e) => {
6680
6747
  const containerRect = this.options.container.getBoundingClientRect();
6681
6748
  const overlayRect = this._element.getBoundingClientRect();
@@ -6798,9 +6865,7 @@ define(['exports'], (function (exports) { 'use strict';
6798
6865
  this.setBounds(bounds);
6799
6866
  }), {
6800
6867
  dispose: () => {
6801
- for (const iframe of iframes) {
6802
- iframe.style.pointerEvents = 'auto';
6803
- }
6868
+ iframes.release();
6804
6869
  },
6805
6870
  }, addDisposableWindowListener(window, 'mouseup', () => {
6806
6871
  move.dispose();
@@ -6821,6 +6886,7 @@ define(['exports'], (function (exports) { 'use strict';
6821
6886
  return 0;
6822
6887
  }
6823
6888
  dispose() {
6889
+ arialLevelTracker.destroy(this._element);
6824
6890
  this._element.remove();
6825
6891
  super.dispose();
6826
6892
  }
@@ -6849,9 +6915,10 @@ define(['exports'], (function (exports) { 'use strict';
6849
6915
  return element;
6850
6916
  }
6851
6917
  class OverlayRenderContainer extends CompositeDisposable {
6852
- constructor(element) {
6918
+ constructor(element, accessor) {
6853
6919
  super();
6854
6920
  this.element = element;
6921
+ this.accessor = accessor;
6855
6922
  this.map = {};
6856
6923
  this._disposed = false;
6857
6924
  this.addDisposables(exports.DockviewDisposable.from(() => {
@@ -6907,7 +6974,35 @@ define(['exports'], (function (exports) { 'use strict';
6907
6974
  }
6908
6975
  focusContainer.style.display = panel.api.isVisible ? '' : 'none';
6909
6976
  };
6910
- const disposable = new CompositeDisposable(
6977
+ const observerDisposable = new MutableDisposable();
6978
+ const correctLayerPosition = () => {
6979
+ if (panel.api.location.type === 'floating') {
6980
+ queueMicrotask(() => {
6981
+ const floatingGroup = this.accessor.floatingGroups.find((group) => group.group === panel.api.group);
6982
+ if (!floatingGroup) {
6983
+ return;
6984
+ }
6985
+ const element = floatingGroup.overlay.element;
6986
+ const update = () => {
6987
+ const level = Number(element.getAttribute('aria-level'));
6988
+ focusContainer.style.zIndex = `${DEFAULT_OVERLAY_Z_INDEX + level * 2 + 1}`;
6989
+ };
6990
+ const observer = new MutationObserver(() => {
6991
+ update();
6992
+ });
6993
+ observerDisposable.value = exports.DockviewDisposable.from(() => observer.disconnect());
6994
+ observer.observe(element, {
6995
+ attributeFilter: ['aria-level'],
6996
+ attributes: true,
6997
+ });
6998
+ update();
6999
+ });
7000
+ }
7001
+ else {
7002
+ focusContainer.style.zIndex = ''; // reset the z-index, perhaps CSS will take over here
7003
+ }
7004
+ };
7005
+ const disposable = new CompositeDisposable(observerDisposable,
6911
7006
  /**
6912
7007
  * since container is positioned absoutely we must explicitly forward
6913
7008
  * the dnd events for the expect behaviours to continue to occur in terms of dnd
@@ -6931,7 +7026,7 @@ define(['exports'], (function (exports) { 'use strict';
6931
7026
  onDragOver: (e) => {
6932
7027
  referenceContainer.dropTarget.dnd.onDragOver(e);
6933
7028
  },
6934
- }), panel.api.onDidVisibilityChange((event) => {
7029
+ }), panel.api.onDidVisibilityChange(() => {
6935
7030
  /**
6936
7031
  * Control the visibility of the content, however even when not visible (display: none)
6937
7032
  * the content is still maintained within the DOM hence DOM specific attributes
@@ -6943,6 +7038,8 @@ define(['exports'], (function (exports) { 'use strict';
6943
7038
  return;
6944
7039
  }
6945
7040
  resize();
7041
+ }), panel.api.onDidLocationChange(() => {
7042
+ correctLayerPosition();
6946
7043
  }));
6947
7044
  this.map[panel.api.id].destroy = exports.DockviewDisposable.from(() => {
6948
7045
  var _a;
@@ -6951,6 +7048,7 @@ define(['exports'], (function (exports) { 'use strict';
6951
7048
  }
6952
7049
  (_a = focusContainer.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(focusContainer);
6953
7050
  });
7051
+ correctLayerPosition();
6954
7052
  queueMicrotask(() => {
6955
7053
  if (this.isDisposed) {
6956
7054
  return;
@@ -7199,7 +7297,10 @@ define(['exports'], (function (exports) { 'use strict';
7199
7297
  get gap() {
7200
7298
  return this.gridview.margin;
7201
7299
  }
7202
- constructor(options) {
7300
+ get floatingGroups() {
7301
+ return this._floatingGroups;
7302
+ }
7303
+ constructor(parentElement, options) {
7203
7304
  var _a;
7204
7305
  super({
7205
7306
  proportionalLayout: true,
@@ -7207,10 +7308,11 @@ define(['exports'], (function (exports) { 'use strict';
7207
7308
  styles: options.hideBorders
7208
7309
  ? { separatorBorder: 'transparent' }
7209
7310
  : undefined,
7210
- parentElement: options.parentElement,
7311
+ parentElement: parentElement,
7211
7312
  disableAutoResizing: options.disableAutoResizing,
7212
7313
  locked: options.locked,
7213
7314
  margin: options.gap,
7315
+ className: options.className,
7214
7316
  });
7215
7317
  this.nextGroupId = sequentialNumberGenerator();
7216
7318
  this._deserializer = new DefaultDockviewDeserialzier(this);
@@ -7246,10 +7348,10 @@ define(['exports'], (function (exports) { 'use strict';
7246
7348
  this._onDidActiveGroupChange = new Emitter();
7247
7349
  this.onDidActiveGroupChange = this._onDidActiveGroupChange.event;
7248
7350
  this._moving = false;
7249
- const gready = document.createElement('div');
7250
- gready.className = 'dv-overlay-render-container';
7251
- this.gridview.element.appendChild(gready);
7252
- this.overlayRenderContainer = new OverlayRenderContainer(gready);
7351
+ // const gready = document.createElement('div');
7352
+ // gready.className = 'dv-overlay-render-container';
7353
+ // this.gridview.element.appendChild(gready);
7354
+ this.overlayRenderContainer = new OverlayRenderContainer(this.gridview.element, this);
7253
7355
  toggleClass(this.gridview.element, 'dv-dockview', true);
7254
7356
  toggleClass(this.element, 'dv-debug', !!options.debug);
7255
7357
  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(() => {
@@ -7415,7 +7517,7 @@ define(['exports'], (function (exports) { 'use strict';
7415
7517
  }
7416
7518
  const gready = document.createElement('div');
7417
7519
  gready.className = 'dv-overlay-render-container';
7418
- const overlayRenderContainer = new OverlayRenderContainer(gready);
7520
+ const overlayRenderContainer = new OverlayRenderContainer(gready, this);
7419
7521
  const referenceGroup = itemToPopout instanceof DockviewPanel
7420
7522
  ? itemToPopout.group
7421
7523
  : itemToPopout;
@@ -7564,7 +7666,6 @@ define(['exports'], (function (exports) { 'use strict';
7564
7666
  }
7565
7667
  }
7566
7668
  }
7567
- group.model.location = { type: 'floating' };
7568
7669
  function getAnchoredBox() {
7569
7670
  if (options === null || options === void 0 ? void 0 : options.position) {
7570
7671
  const result = {};
@@ -7631,10 +7732,14 @@ define(['exports'], (function (exports) { 'use strict';
7631
7732
  : false,
7632
7733
  });
7633
7734
  const floatingGroupPanel = new DockviewFloatingGroupPanel(group, overlay);
7634
- const disposable = watchElementResize(group.element, (entry) => {
7735
+ const disposable = new CompositeDisposable(group.api.onDidActiveChange((event) => {
7736
+ if (event.isActive) {
7737
+ overlay.bringToFront();
7738
+ }
7739
+ }), watchElementResize(group.element, (entry) => {
7635
7740
  const { width, height } = entry.contentRect;
7636
7741
  group.layout(width, height); // let the group know it's size is changing so it can fire events to the panel
7637
- });
7742
+ }));
7638
7743
  floatingGroupPanel.addDisposables(overlay.onDidChange(() => {
7639
7744
  // this is either a resize or a move
7640
7745
  // to inform the panels .layout(...) the group with it's current size
@@ -7650,12 +7755,13 @@ define(['exports'], (function (exports) { 'use strict';
7650
7755
  }), {
7651
7756
  dispose: () => {
7652
7757
  disposable.dispose();
7653
- group.model.location = { type: 'grid' };
7654
7758
  remove(this._floatingGroups, floatingGroupPanel);
7759
+ group.model.location = { type: 'grid' };
7655
7760
  this.updateWatermark();
7656
7761
  },
7657
7762
  });
7658
7763
  this._floatingGroups.push(floatingGroupPanel);
7764
+ group.model.location = { type: 'floating' };
7659
7765
  if (!(options === null || options === void 0 ? void 0 : options.skipActiveGroup)) {
7660
7766
  this.doSetGroupAndPanelActive(group);
7661
7767
  }
@@ -8237,6 +8343,7 @@ define(['exports'], (function (exports) { 'use strict';
8237
8343
  this._groups.delete(group.id);
8238
8344
  this._onDidRemoveGroup.fire(group);
8239
8345
  }
8346
+ remove(this._popoutGroups, selectedGroup);
8240
8347
  const removedGroup = selectedGroup.disposable.dispose();
8241
8348
  if (!(options === null || options === void 0 ? void 0 : options.skipPopoutReturn) && removedGroup) {
8242
8349
  this.doAddGroup(removedGroup, [0]);
@@ -8348,6 +8455,31 @@ define(['exports'], (function (exports) { 'use strict';
8348
8455
  return;
8349
8456
  }
8350
8457
  }
8458
+ if (sourceGroup.api.location.type === 'popout') {
8459
+ /**
8460
+ * the source group is a popout group with a single panel
8461
+ *
8462
+ * 1. remove the panel from the group without triggering any events
8463
+ * 2. remove the popout group
8464
+ * 3. create a new group at the requested location and add that panel
8465
+ */
8466
+ const popoutGroup = this._popoutGroups.find((group) => group.popoutGroup === sourceGroup);
8467
+ const removedPanel = this.movingLock(() => popoutGroup.popoutGroup.model.removePanel(popoutGroup.popoutGroup.panels[0], {
8468
+ skipSetActive: true,
8469
+ skipSetActiveGroup: true,
8470
+ }));
8471
+ this.doRemoveGroup(sourceGroup, { skipActive: true });
8472
+ const newGroup = this.createGroupAtLocation(targetLocation);
8473
+ this.movingLock(() => newGroup.model.openPanel(removedPanel, {
8474
+ skipSetActive: true,
8475
+ }));
8476
+ this.doSetGroupAndPanelActive(newGroup);
8477
+ this._onDidMovePanel.fire({
8478
+ panel: this.getGroupPanel(sourceItemId),
8479
+ from: sourceGroup,
8480
+ });
8481
+ return;
8482
+ }
8351
8483
  // source group will become empty so delete the group
8352
8484
  const targetGroup = this.movingLock(() => this.doRemoveGroup(sourceGroup, {
8353
8485
  skipActive: true,
@@ -8579,13 +8711,14 @@ define(['exports'], (function (exports) { 'use strict';
8579
8711
  set deserializer(value) {
8580
8712
  this._deserializer = value;
8581
8713
  }
8582
- constructor(options) {
8714
+ constructor(parentElement, options) {
8583
8715
  super({
8584
- parentElement: options.parentElement,
8716
+ parentElement: parentElement,
8585
8717
  proportionalLayout: options.proportionalLayout,
8586
8718
  orientation: options.orientation,
8587
8719
  styles: options.styles,
8588
8720
  disableAutoResizing: options.disableAutoResizing,
8721
+ className: options.className,
8589
8722
  });
8590
8723
  this._onDidLayoutfromJSON = new Emitter();
8591
8724
  this.onDidLayoutFromJSON = this._onDidLayoutfromJSON.event;
@@ -8877,8 +9010,8 @@ define(['exports'], (function (exports) { 'use strict';
8877
9010
  ? this.splitview.size
8878
9011
  : this.splitview.orthogonalSize;
8879
9012
  }
8880
- constructor(options) {
8881
- super(options.parentElement, options.disableAutoResizing);
9013
+ constructor(parentElement, options) {
9014
+ super(parentElement, options.disableAutoResizing);
8882
9015
  this._splitviewChangeDisposable = new MutableDisposable();
8883
9016
  this._panels = new Map();
8884
9017
  this._onDidLayoutfromJSON = new Emitter();
@@ -8889,6 +9022,9 @@ define(['exports'], (function (exports) { 'use strict';
8889
9022
  this.onDidRemoveView = this._onDidRemoveView.event;
8890
9023
  this._onDidLayoutChange = new Emitter();
8891
9024
  this.onDidLayoutChange = this._onDidLayoutChange.event;
9025
+ if (typeof options.className === 'string') {
9026
+ this.element.classList.add(options.className);
9027
+ }
8892
9028
  this._options = options;
8893
9029
  if (!options.components) {
8894
9030
  options.components = {};
@@ -9201,8 +9337,8 @@ define(['exports'], (function (exports) { 'use strict';
9201
9337
  get options() {
9202
9338
  return this._options;
9203
9339
  }
9204
- constructor(options) {
9205
- super(options.parentElement, options.disableAutoResizing);
9340
+ constructor(parentElement, options) {
9341
+ super(parentElement, options.disableAutoResizing);
9206
9342
  this._id = nextLayoutId.next();
9207
9343
  this._disposable = new MutableDisposable();
9208
9344
  this._viewDisposables = new Map();
@@ -9216,6 +9352,9 @@ define(['exports'], (function (exports) { 'use strict';
9216
9352
  this.onDidAddView = this._onDidAddView.event;
9217
9353
  this._onDidRemoveView = new Emitter();
9218
9354
  this.onDidRemoveView = this._onDidRemoveView.event;
9355
+ if (typeof options.className === 'string') {
9356
+ this.element.classList.add(options.className);
9357
+ }
9219
9358
  this.addDisposables(this._onDidLayoutChange, this._onDidLayoutfromJSON, this._onDidDrop, this._onDidAddView, this._onDidRemoveView);
9220
9359
  this._options = options;
9221
9360
  if (!options.components) {
@@ -9531,6 +9670,23 @@ define(['exports'], (function (exports) { 'use strict';
9531
9670
  }
9532
9671
  }
9533
9672
 
9673
+ function createDockview(element, options) {
9674
+ const component = new DockviewComponent(element, options);
9675
+ return component.api;
9676
+ }
9677
+ function createSplitview(element, options) {
9678
+ const component = new SplitviewComponent(element, options);
9679
+ return new SplitviewApi(component);
9680
+ }
9681
+ function createGridview(element, options) {
9682
+ const component = new GridviewComponent(element, options);
9683
+ return new GridviewApi(component);
9684
+ }
9685
+ function createPaneview(element, options) {
9686
+ const component = new PaneviewComponent(element, options);
9687
+ return new PaneviewApi(component);
9688
+ }
9689
+
9534
9690
  exports.BaseGrid = BaseGrid;
9535
9691
  exports.ContentContainer = ContentContainer;
9536
9692
  exports.DefaultDockviewDeserialzier = DefaultDockviewDeserialzier;
@@ -9567,6 +9723,10 @@ define(['exports'], (function (exports) { 'use strict';
9567
9723
  exports.Tab = Tab;
9568
9724
  exports.WillShowOverlayLocationEvent = WillShowOverlayLocationEvent;
9569
9725
  exports.createComponent = createComponent;
9726
+ exports.createDockview = createDockview;
9727
+ exports.createGridview = createGridview;
9728
+ exports.createPaneview = createPaneview;
9729
+ exports.createSplitview = createSplitview;
9570
9730
  exports.directionToPosition = directionToPosition;
9571
9731
  exports.getDirectionOrientation = getDirectionOrientation;
9572
9732
  exports.getGridLocation = getGridLocation;