dockview-core 1.15.3 → 1.16.1

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 +32 -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 +60 -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 +5 -2
  21. package/dist/cjs/gridview/baseComponentGridview.js +54 -3
  22. package/dist/cjs/gridview/gridviewComponent.d.ts +3 -4
  23. package/dist/cjs/gridview/gridviewComponent.js +4 -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 +2 -1
  33. package/dist/cjs/paneview/paneviewComponent.js +68 -19
  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 +5 -5
  37. package/dist/cjs/splitview/splitviewComponent.js +70 -21
  38. package/dist/dockview-core.amd.js +301 -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 +300 -97
  45. package/dist/dockview-core.amd.noStyle.js.map +1 -1
  46. package/dist/dockview-core.cjs.js +301 -98
  47. package/dist/dockview-core.cjs.js.map +1 -1
  48. package/dist/dockview-core.esm.js +298 -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 +301 -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 +300 -97
  59. package/dist/dockview-core.noStyle.js.map +1 -1
  60. package/dist/esm/api/component.api.d.ts +32 -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 +48 -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 +5 -2
  81. package/dist/esm/gridview/baseComponentGridview.js +19 -0
  82. package/dist/esm/gridview/gridviewComponent.d.ts +3 -4
  83. package/dist/esm/gridview/gridviewComponent.js +4 -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 +2 -1
  93. package/dist/esm/paneview/paneviewComponent.js +19 -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 +5 -5
  97. package/dist/esm/splitview/splitviewComponent.js +19 -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.1
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`;
@@ -2641,6 +2671,7 @@ define(['exports'], (function (exports) { 'use strict';
2641
2671
  this.gridview.locked = value;
2642
2672
  }
2643
2673
  constructor(options) {
2674
+ var _a, _b;
2644
2675
  super(document.createElement('div'), options.disableAutoResizing);
2645
2676
  this._id = nextLayoutId$1.next();
2646
2677
  this._groups = new Map();
@@ -2654,8 +2685,13 @@ define(['exports'], (function (exports) { 'use strict';
2654
2685
  this.onDidLayoutChange = this._bufferOnDidLayoutChange.onEvent;
2655
2686
  this._onDidViewVisibilityChangeMicroTaskQueue = new AsapEvent();
2656
2687
  this.onDidViewVisibilityChangeMicroTaskQueue = this._onDidViewVisibilityChangeMicroTaskQueue.onEvent;
2688
+ this.classNames = [];
2657
2689
  this.element.style.height = '100%';
2658
2690
  this.element.style.width = '100%';
2691
+ this.classNames = (_b = (_a = options.className) === null || _a === void 0 ? void 0 : _a.split(' ')) !== null && _b !== void 0 ? _b : [];
2692
+ for (const className of this.classNames) {
2693
+ toggleClass(this.element, className, true);
2694
+ }
2659
2695
  options.parentElement.appendChild(this.element);
2660
2696
  this.gridview = new Gridview(!!options.proportionalLayout, options.styles, options.orientation, options.locked, options.margin);
2661
2697
  this.gridview.locked = !!options.locked;
@@ -2679,6 +2715,18 @@ define(['exports'], (function (exports) { 'use strict';
2679
2715
  isVisible(panel) {
2680
2716
  return this.gridview.isViewVisible(getGridLocation(panel.element));
2681
2717
  }
2718
+ updateOptions(options) {
2719
+ var _a, _b;
2720
+ if ('className' in options) {
2721
+ for (const className of this.classNames) {
2722
+ toggleClass(this.element, className, false);
2723
+ }
2724
+ this.classNames = (_b = (_a = options.className) === null || _a === void 0 ? void 0 : _a.split(' ')) !== null && _b !== void 0 ? _b : [];
2725
+ for (const className of this.classNames) {
2726
+ toggleClass(this.element, className, true);
2727
+ }
2728
+ }
2729
+ }
2682
2730
  maximizeGroup(panel) {
2683
2731
  this.gridview.maximizeView(panel);
2684
2732
  this.doSetGroupActive(panel);
@@ -2859,12 +2907,6 @@ define(['exports'], (function (exports) { 'use strict';
2859
2907
  constructor(component) {
2860
2908
  this.component = component;
2861
2909
  }
2862
- /**
2863
- * Update configuratable options.
2864
- */
2865
- updateOptions(options) {
2866
- this.component.updateOptions(options);
2867
- }
2868
2910
  /**
2869
2911
  * Removes an existing panel and optionally provide a `Sizing` method
2870
2912
  * for the subsequent resize.
@@ -2918,6 +2960,18 @@ define(['exports'], (function (exports) { 'use strict';
2918
2960
  clear() {
2919
2961
  this.component.clear();
2920
2962
  }
2963
+ /**
2964
+ * Update configuratable options.
2965
+ */
2966
+ updateOptions(options) {
2967
+ this.component.updateOptions(options);
2968
+ }
2969
+ /**
2970
+ * Release resources and teardown component. Do not call when using framework versions of dockview.
2971
+ */
2972
+ dispose() {
2973
+ this.component.dispose();
2974
+ }
2921
2975
  }
2922
2976
  class PaneviewApi {
2923
2977
  /**
@@ -3045,6 +3099,18 @@ define(['exports'], (function (exports) { 'use strict';
3045
3099
  clear() {
3046
3100
  this.component.clear();
3047
3101
  }
3102
+ /**
3103
+ * Update configuratable options.
3104
+ */
3105
+ updateOptions(options) {
3106
+ this.component.updateOptions(options);
3107
+ }
3108
+ /**
3109
+ * Release resources and teardown component. Do not call when using framework versions of dockview.
3110
+ */
3111
+ dispose() {
3112
+ this.component.dispose();
3113
+ }
3048
3114
  }
3049
3115
  class GridviewApi {
3050
3116
  /**
@@ -3185,6 +3251,15 @@ define(['exports'], (function (exports) { 'use strict';
3185
3251
  clear() {
3186
3252
  this.component.clear();
3187
3253
  }
3254
+ updateOptions(options) {
3255
+ this.component.updateOptions(options);
3256
+ }
3257
+ /**
3258
+ * Release resources and teardown component. Do not call when using framework versions of dockview.
3259
+ */
3260
+ dispose() {
3261
+ this.component.dispose();
3262
+ }
3188
3263
  }
3189
3264
  class DockviewApi {
3190
3265
  /**
@@ -3477,6 +3552,15 @@ define(['exports'], (function (exports) { 'use strict';
3477
3552
  setGap(gap) {
3478
3553
  this.component.updateOptions({ gap });
3479
3554
  }
3555
+ updateOptions(options) {
3556
+ this.component.updateOptions(options);
3557
+ }
3558
+ /**
3559
+ * Release resources and teardown component. Do not call when using framework versions of dockview.
3560
+ */
3561
+ dispose() {
3562
+ this.component.dispose();
3563
+ }
3480
3564
  }
3481
3565
 
3482
3566
  class DragHandler extends CompositeDisposable {
@@ -3499,20 +3583,12 @@ define(['exports'], (function (exports) { 'use strict';
3499
3583
  event.preventDefault();
3500
3584
  return;
3501
3585
  }
3502
- const iframes = [
3503
- ...getElementsByTagName('iframe'),
3504
- ...getElementsByTagName('webview'),
3505
- ];
3586
+ const iframes = disableIframePointEvents();
3506
3587
  this.pointerEventsDisposable.value = {
3507
3588
  dispose: () => {
3508
- for (const iframe of iframes) {
3509
- iframe.style.pointerEvents = 'auto';
3510
- }
3589
+ iframes.release();
3511
3590
  },
3512
3591
  };
3513
- for (const iframe of iframes) {
3514
- iframe.style.pointerEvents = 'none';
3515
- }
3516
3592
  this.el.classList.add('dv-dragged');
3517
3593
  setTimeout(() => this.el.classList.remove('dv-dragged'), 0);
3518
3594
  this.dataDisposable.value = this.getData(event);
@@ -4676,7 +4752,7 @@ define(['exports'], (function (exports) { 'use strict';
4676
4752
  this._element.className = 'void-container';
4677
4753
  this._element.tabIndex = 0;
4678
4754
  this._element.draggable = true;
4679
- this.addDisposables(this._onDrop, this._onDragStart, addDisposableListener(this._element, 'click', () => {
4755
+ this.addDisposables(this._onDrop, this._onDragStart, addDisposableListener(this._element, 'pointerdown', () => {
4680
4756
  this.accessor.doSetGroupActive(this.group);
4681
4757
  }));
4682
4758
  const handler = new GroupDragHandler(this._element, accessor, group);
@@ -4991,6 +5067,7 @@ define(['exports'], (function (exports) { 'use strict';
4991
5067
  locked: undefined,
4992
5068
  disableDnd: undefined,
4993
5069
  gap: undefined,
5070
+ className: undefined,
4994
5071
  };
4995
5072
  return Object.keys(properties);
4996
5073
  })();
@@ -5546,7 +5623,7 @@ define(['exports'], (function (exports) { 'use strict';
5546
5623
  group: this.groupPanel,
5547
5624
  });
5548
5625
  this.watermark = watermark;
5549
- addDisposableListener(this.watermark.element, 'click', () => {
5626
+ addDisposableListener(this.watermark.element, 'pointerdown', () => {
5550
5627
  if (!this.isActive) {
5551
5628
  this.accessor.doSetGroupActive(this.groupPanel);
5552
5629
  }
@@ -6111,7 +6188,7 @@ define(['exports'], (function (exports) { 'use strict';
6111
6188
  // forward the resize event to the group since if you want to resize a panel
6112
6189
  // you are actually just resizing the panels parent which is the group
6113
6190
  this.group.api.setSize(event);
6114
- }), this.api.onDidRendererChange((event) => {
6191
+ }), this.api.onDidRendererChange(() => {
6115
6192
  this.group.model.rerender(this);
6116
6193
  }));
6117
6194
  }
@@ -6447,17 +6524,30 @@ define(['exports'], (function (exports) { 'use strict';
6447
6524
  }
6448
6525
  }
6449
6526
 
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);
6527
+ const DEFAULT_OVERLAY_Z_INDEX = 999;
6528
+ class AriaLevelTracker {
6529
+ constructor() {
6530
+ this._orderedList = [];
6531
+ }
6532
+ push(element) {
6533
+ this._orderedList = [
6534
+ ...this._orderedList.filter((item) => item !== element),
6535
+ element,
6536
+ ];
6537
+ this.update();
6538
+ }
6539
+ destroy(element) {
6540
+ this._orderedList = this._orderedList.filter((item) => item !== element);
6541
+ this.update();
6542
+ }
6543
+ update() {
6544
+ for (let i = 0; i < this._orderedList.length; i++) {
6545
+ this._orderedList[i].setAttribute('aria-level', `${i}`);
6546
+ this._orderedList[i].style.zIndex = `${DEFAULT_OVERLAY_Z_INDEX + i * 2}`;
6455
6547
  }
6456
- toggleClass(element, 'dv-bring-to-front', true);
6457
- previous = element;
6458
6548
  }
6459
- return pushToTop;
6460
- })();
6549
+ }
6550
+ const arialLevelTracker = new AriaLevelTracker();
6461
6551
  class Overlay extends CompositeDisposable {
6462
6552
  set minimumInViewportWidth(value) {
6463
6553
  this.options.minimumInViewportWidth = value;
@@ -6465,6 +6555,9 @@ define(['exports'], (function (exports) { 'use strict';
6465
6555
  set minimumInViewportHeight(value) {
6466
6556
  this.options.minimumInViewportHeight = value;
6467
6557
  }
6558
+ get element() {
6559
+ return this._element;
6560
+ }
6468
6561
  constructor(options) {
6469
6562
  super();
6470
6563
  this.options = options;
@@ -6487,6 +6580,10 @@ define(['exports'], (function (exports) { 'use strict';
6487
6580
  this.options.container.appendChild(this._element);
6488
6581
  // if input bad resize within acceptable boundaries
6489
6582
  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 })));
6583
+ arialLevelTracker.push(this._element);
6584
+ }
6585
+ bringToFront() {
6586
+ arialLevelTracker.push(this._element);
6490
6587
  }
6491
6588
  setBounds(bounds = {}) {
6492
6589
  if (typeof bounds.height === 'number') {
@@ -6574,18 +6671,10 @@ define(['exports'], (function (exports) { 'use strict';
6574
6671
  const move = new MutableDisposable();
6575
6672
  const track = () => {
6576
6673
  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
- }
6674
+ const iframes = disableIframePointEvents();
6584
6675
  move.value = new CompositeDisposable({
6585
6676
  dispose: () => {
6586
- for (const iframe of iframes) {
6587
- iframe.style.pointerEvents = 'auto';
6588
- }
6677
+ iframes.release();
6589
6678
  },
6590
6679
  }, addDisposableWindowListener(window, 'mousemove', (e) => {
6591
6680
  const containerRect = this.options.container.getBoundingClientRect();
@@ -6654,9 +6743,8 @@ define(['exports'], (function (exports) { 'use strict';
6654
6743
  track();
6655
6744
  }
6656
6745
  }), addDisposableListener(this.options.content, 'mousedown', () => {
6657
- bringElementToFront(this._element);
6746
+ arialLevelTracker.push(this._element);
6658
6747
  }, true));
6659
- bringElementToFront(this._element);
6660
6748
  if (options.inDragMode) {
6661
6749
  track();
6662
6750
  }
@@ -6669,13 +6757,7 @@ define(['exports'], (function (exports) { 'use strict';
6669
6757
  this.addDisposables(move, addDisposableListener(resizeHandleElement, 'mousedown', (e) => {
6670
6758
  e.preventDefault();
6671
6759
  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
- }
6760
+ const iframes = disableIframePointEvents();
6679
6761
  move.value = new CompositeDisposable(addDisposableWindowListener(window, 'mousemove', (e) => {
6680
6762
  const containerRect = this.options.container.getBoundingClientRect();
6681
6763
  const overlayRect = this._element.getBoundingClientRect();
@@ -6798,9 +6880,7 @@ define(['exports'], (function (exports) { 'use strict';
6798
6880
  this.setBounds(bounds);
6799
6881
  }), {
6800
6882
  dispose: () => {
6801
- for (const iframe of iframes) {
6802
- iframe.style.pointerEvents = 'auto';
6803
- }
6883
+ iframes.release();
6804
6884
  },
6805
6885
  }, addDisposableWindowListener(window, 'mouseup', () => {
6806
6886
  move.dispose();
@@ -6821,6 +6901,7 @@ define(['exports'], (function (exports) { 'use strict';
6821
6901
  return 0;
6822
6902
  }
6823
6903
  dispose() {
6904
+ arialLevelTracker.destroy(this._element);
6824
6905
  this._element.remove();
6825
6906
  super.dispose();
6826
6907
  }
@@ -6849,9 +6930,10 @@ define(['exports'], (function (exports) { 'use strict';
6849
6930
  return element;
6850
6931
  }
6851
6932
  class OverlayRenderContainer extends CompositeDisposable {
6852
- constructor(element) {
6933
+ constructor(element, accessor) {
6853
6934
  super();
6854
6935
  this.element = element;
6936
+ this.accessor = accessor;
6855
6937
  this.map = {};
6856
6938
  this._disposed = false;
6857
6939
  this.addDisposables(exports.DockviewDisposable.from(() => {
@@ -6907,7 +6989,35 @@ define(['exports'], (function (exports) { 'use strict';
6907
6989
  }
6908
6990
  focusContainer.style.display = panel.api.isVisible ? '' : 'none';
6909
6991
  };
6910
- const disposable = new CompositeDisposable(
6992
+ const observerDisposable = new MutableDisposable();
6993
+ const correctLayerPosition = () => {
6994
+ if (panel.api.location.type === 'floating') {
6995
+ queueMicrotask(() => {
6996
+ const floatingGroup = this.accessor.floatingGroups.find((group) => group.group === panel.api.group);
6997
+ if (!floatingGroup) {
6998
+ return;
6999
+ }
7000
+ const element = floatingGroup.overlay.element;
7001
+ const update = () => {
7002
+ const level = Number(element.getAttribute('aria-level'));
7003
+ focusContainer.style.zIndex = `${DEFAULT_OVERLAY_Z_INDEX + level * 2 + 1}`;
7004
+ };
7005
+ const observer = new MutationObserver(() => {
7006
+ update();
7007
+ });
7008
+ observerDisposable.value = exports.DockviewDisposable.from(() => observer.disconnect());
7009
+ observer.observe(element, {
7010
+ attributeFilter: ['aria-level'],
7011
+ attributes: true,
7012
+ });
7013
+ update();
7014
+ });
7015
+ }
7016
+ else {
7017
+ focusContainer.style.zIndex = ''; // reset the z-index, perhaps CSS will take over here
7018
+ }
7019
+ };
7020
+ const disposable = new CompositeDisposable(observerDisposable,
6911
7021
  /**
6912
7022
  * since container is positioned absoutely we must explicitly forward
6913
7023
  * the dnd events for the expect behaviours to continue to occur in terms of dnd
@@ -6931,7 +7041,7 @@ define(['exports'], (function (exports) { 'use strict';
6931
7041
  onDragOver: (e) => {
6932
7042
  referenceContainer.dropTarget.dnd.onDragOver(e);
6933
7043
  },
6934
- }), panel.api.onDidVisibilityChange((event) => {
7044
+ }), panel.api.onDidVisibilityChange(() => {
6935
7045
  /**
6936
7046
  * Control the visibility of the content, however even when not visible (display: none)
6937
7047
  * the content is still maintained within the DOM hence DOM specific attributes
@@ -6943,6 +7053,8 @@ define(['exports'], (function (exports) { 'use strict';
6943
7053
  return;
6944
7054
  }
6945
7055
  resize();
7056
+ }), panel.api.onDidLocationChange(() => {
7057
+ correctLayerPosition();
6946
7058
  }));
6947
7059
  this.map[panel.api.id].destroy = exports.DockviewDisposable.from(() => {
6948
7060
  var _a;
@@ -6951,6 +7063,7 @@ define(['exports'], (function (exports) { 'use strict';
6951
7063
  }
6952
7064
  (_a = focusContainer.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(focusContainer);
6953
7065
  });
7066
+ correctLayerPosition();
6954
7067
  queueMicrotask(() => {
6955
7068
  if (this.isDisposed) {
6956
7069
  return;
@@ -7199,7 +7312,10 @@ define(['exports'], (function (exports) { 'use strict';
7199
7312
  get gap() {
7200
7313
  return this.gridview.margin;
7201
7314
  }
7202
- constructor(options) {
7315
+ get floatingGroups() {
7316
+ return this._floatingGroups;
7317
+ }
7318
+ constructor(parentElement, options) {
7203
7319
  var _a;
7204
7320
  super({
7205
7321
  proportionalLayout: true,
@@ -7207,10 +7323,11 @@ define(['exports'], (function (exports) { 'use strict';
7207
7323
  styles: options.hideBorders
7208
7324
  ? { separatorBorder: 'transparent' }
7209
7325
  : undefined,
7210
- parentElement: options.parentElement,
7326
+ parentElement: parentElement,
7211
7327
  disableAutoResizing: options.disableAutoResizing,
7212
7328
  locked: options.locked,
7213
7329
  margin: options.gap,
7330
+ className: options.className,
7214
7331
  });
7215
7332
  this.nextGroupId = sequentialNumberGenerator();
7216
7333
  this._deserializer = new DefaultDockviewDeserialzier(this);
@@ -7246,10 +7363,10 @@ define(['exports'], (function (exports) { 'use strict';
7246
7363
  this._onDidActiveGroupChange = new Emitter();
7247
7364
  this.onDidActiveGroupChange = this._onDidActiveGroupChange.event;
7248
7365
  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);
7366
+ // const gready = document.createElement('div');
7367
+ // gready.className = 'dv-overlay-render-container';
7368
+ // this.gridview.element.appendChild(gready);
7369
+ this.overlayRenderContainer = new OverlayRenderContainer(this.gridview.element, this);
7253
7370
  toggleClass(this.gridview.element, 'dv-dockview', true);
7254
7371
  toggleClass(this.element, 'dv-debug', !!options.debug);
7255
7372
  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 +7532,7 @@ define(['exports'], (function (exports) { 'use strict';
7415
7532
  }
7416
7533
  const gready = document.createElement('div');
7417
7534
  gready.className = 'dv-overlay-render-container';
7418
- const overlayRenderContainer = new OverlayRenderContainer(gready);
7535
+ const overlayRenderContainer = new OverlayRenderContainer(gready, this);
7419
7536
  const referenceGroup = itemToPopout instanceof DockviewPanel
7420
7537
  ? itemToPopout.group
7421
7538
  : itemToPopout;
@@ -7564,7 +7681,6 @@ define(['exports'], (function (exports) { 'use strict';
7564
7681
  }
7565
7682
  }
7566
7683
  }
7567
- group.model.location = { type: 'floating' };
7568
7684
  function getAnchoredBox() {
7569
7685
  if (options === null || options === void 0 ? void 0 : options.position) {
7570
7686
  const result = {};
@@ -7631,10 +7747,14 @@ define(['exports'], (function (exports) { 'use strict';
7631
7747
  : false,
7632
7748
  });
7633
7749
  const floatingGroupPanel = new DockviewFloatingGroupPanel(group, overlay);
7634
- const disposable = watchElementResize(group.element, (entry) => {
7750
+ const disposable = new CompositeDisposable(group.api.onDidActiveChange((event) => {
7751
+ if (event.isActive) {
7752
+ overlay.bringToFront();
7753
+ }
7754
+ }), watchElementResize(group.element, (entry) => {
7635
7755
  const { width, height } = entry.contentRect;
7636
7756
  group.layout(width, height); // let the group know it's size is changing so it can fire events to the panel
7637
- });
7757
+ }));
7638
7758
  floatingGroupPanel.addDisposables(overlay.onDidChange(() => {
7639
7759
  // this is either a resize or a move
7640
7760
  // to inform the panels .layout(...) the group with it's current size
@@ -7650,12 +7770,13 @@ define(['exports'], (function (exports) { 'use strict';
7650
7770
  }), {
7651
7771
  dispose: () => {
7652
7772
  disposable.dispose();
7653
- group.model.location = { type: 'grid' };
7654
7773
  remove(this._floatingGroups, floatingGroupPanel);
7774
+ group.model.location = { type: 'grid' };
7655
7775
  this.updateWatermark();
7656
7776
  },
7657
7777
  });
7658
7778
  this._floatingGroups.push(floatingGroupPanel);
7779
+ group.model.location = { type: 'floating' };
7659
7780
  if (!(options === null || options === void 0 ? void 0 : options.skipActiveGroup)) {
7660
7781
  this.doSetGroupAndPanelActive(group);
7661
7782
  }
@@ -7694,6 +7815,7 @@ define(['exports'], (function (exports) { 'use strict';
7694
7815
  }
7695
7816
  updateOptions(options) {
7696
7817
  var _a, _b;
7818
+ super.updateOptions(options);
7697
7819
  const changed_floatingGroupBounds = 'floatingGroupBounds' in options &&
7698
7820
  options.floatingGroupBounds !== this.options.floatingGroupBounds;
7699
7821
  const changed_rootOverlayOptions = 'rootOverlayModel' in options &&
@@ -8237,6 +8359,7 @@ define(['exports'], (function (exports) { 'use strict';
8237
8359
  this._groups.delete(group.id);
8238
8360
  this._onDidRemoveGroup.fire(group);
8239
8361
  }
8362
+ remove(this._popoutGroups, selectedGroup);
8240
8363
  const removedGroup = selectedGroup.disposable.dispose();
8241
8364
  if (!(options === null || options === void 0 ? void 0 : options.skipPopoutReturn) && removedGroup) {
8242
8365
  this.doAddGroup(removedGroup, [0]);
@@ -8348,6 +8471,31 @@ define(['exports'], (function (exports) { 'use strict';
8348
8471
  return;
8349
8472
  }
8350
8473
  }
8474
+ if (sourceGroup.api.location.type === 'popout') {
8475
+ /**
8476
+ * the source group is a popout group with a single panel
8477
+ *
8478
+ * 1. remove the panel from the group without triggering any events
8479
+ * 2. remove the popout group
8480
+ * 3. create a new group at the requested location and add that panel
8481
+ */
8482
+ const popoutGroup = this._popoutGroups.find((group) => group.popoutGroup === sourceGroup);
8483
+ const removedPanel = this.movingLock(() => popoutGroup.popoutGroup.model.removePanel(popoutGroup.popoutGroup.panels[0], {
8484
+ skipSetActive: true,
8485
+ skipSetActiveGroup: true,
8486
+ }));
8487
+ this.doRemoveGroup(sourceGroup, { skipActive: true });
8488
+ const newGroup = this.createGroupAtLocation(targetLocation);
8489
+ this.movingLock(() => newGroup.model.openPanel(removedPanel, {
8490
+ skipSetActive: true,
8491
+ }));
8492
+ this.doSetGroupAndPanelActive(newGroup);
8493
+ this._onDidMovePanel.fire({
8494
+ panel: this.getGroupPanel(sourceItemId),
8495
+ from: sourceGroup,
8496
+ });
8497
+ return;
8498
+ }
8351
8499
  // source group will become empty so delete the group
8352
8500
  const targetGroup = this.movingLock(() => this.doRemoveGroup(sourceGroup, {
8353
8501
  skipActive: true,
@@ -8579,13 +8727,14 @@ define(['exports'], (function (exports) { 'use strict';
8579
8727
  set deserializer(value) {
8580
8728
  this._deserializer = value;
8581
8729
  }
8582
- constructor(options) {
8730
+ constructor(parentElement, options) {
8583
8731
  super({
8584
- parentElement: options.parentElement,
8732
+ parentElement: parentElement,
8585
8733
  proportionalLayout: options.proportionalLayout,
8586
8734
  orientation: options.orientation,
8587
8735
  styles: options.styles,
8588
8736
  disableAutoResizing: options.disableAutoResizing,
8737
+ className: options.className,
8589
8738
  });
8590
8739
  this._onDidLayoutfromJSON = new Emitter();
8591
8740
  this.onDidLayoutFromJSON = this._onDidLayoutfromJSON.event;
@@ -8611,6 +8760,7 @@ define(['exports'], (function (exports) { 'use strict';
8611
8760
  }
8612
8761
  }
8613
8762
  updateOptions(options) {
8763
+ super.updateOptions(options);
8614
8764
  const hasOrientationChanged = typeof options.orientation === 'string' &&
8615
8765
  this.gridview.orientation !== options.orientation;
8616
8766
  this._options = Object.assign(Object.assign({}, this.options), options);
@@ -8877,8 +9027,9 @@ define(['exports'], (function (exports) { 'use strict';
8877
9027
  ? this.splitview.size
8878
9028
  : this.splitview.orthogonalSize;
8879
9029
  }
8880
- constructor(options) {
8881
- super(options.parentElement, options.disableAutoResizing);
9030
+ constructor(parentElement, options) {
9031
+ var _a, _b;
9032
+ super(parentElement, options.disableAutoResizing);
8882
9033
  this._splitviewChangeDisposable = new MutableDisposable();
8883
9034
  this._panels = new Map();
8884
9035
  this._onDidLayoutfromJSON = new Emitter();
@@ -8889,6 +9040,11 @@ define(['exports'], (function (exports) { 'use strict';
8889
9040
  this.onDidRemoveView = this._onDidRemoveView.event;
8890
9041
  this._onDidLayoutChange = new Emitter();
8891
9042
  this.onDidLayoutChange = this._onDidLayoutChange.event;
9043
+ this.classNames = [];
9044
+ this.classNames = (_b = (_a = options.className) === null || _a === void 0 ? void 0 : _a.split(' ')) !== null && _b !== void 0 ? _b : [];
9045
+ for (const className of this.classNames) {
9046
+ toggleClass(this.element, className, true);
9047
+ }
8892
9048
  this._options = options;
8893
9049
  if (!options.components) {
8894
9050
  options.components = {};
@@ -8900,6 +9056,16 @@ define(['exports'], (function (exports) { 'use strict';
8900
9056
  this.addDisposables(this._onDidAddView, this._onDidLayoutfromJSON, this._onDidRemoveView, this._onDidLayoutChange);
8901
9057
  }
8902
9058
  updateOptions(options) {
9059
+ var _a, _b;
9060
+ if ('className' in options) {
9061
+ for (const className of this.classNames) {
9062
+ toggleClass(this.element, className, false);
9063
+ }
9064
+ this.classNames = (_b = (_a = options.className) === null || _a === void 0 ? void 0 : _a.split(' ')) !== null && _b !== void 0 ? _b : [];
9065
+ for (const className of this.classNames) {
9066
+ toggleClass(this.element, className, true);
9067
+ }
9068
+ }
8903
9069
  const hasOrientationChanged = typeof options.orientation === 'string' &&
8904
9070
  this.options.orientation !== options.orientation;
8905
9071
  this._options = Object.assign(Object.assign({}, this.options), options);
@@ -9201,8 +9367,9 @@ define(['exports'], (function (exports) { 'use strict';
9201
9367
  get options() {
9202
9368
  return this._options;
9203
9369
  }
9204
- constructor(options) {
9205
- super(options.parentElement, options.disableAutoResizing);
9370
+ constructor(parentElement, options) {
9371
+ var _a, _b;
9372
+ super(parentElement, options.disableAutoResizing);
9206
9373
  this._id = nextLayoutId.next();
9207
9374
  this._disposable = new MutableDisposable();
9208
9375
  this._viewDisposables = new Map();
@@ -9216,7 +9383,12 @@ define(['exports'], (function (exports) { 'use strict';
9216
9383
  this.onDidAddView = this._onDidAddView.event;
9217
9384
  this._onDidRemoveView = new Emitter();
9218
9385
  this.onDidRemoveView = this._onDidRemoveView.event;
9386
+ this.classNames = [];
9219
9387
  this.addDisposables(this._onDidLayoutChange, this._onDidLayoutfromJSON, this._onDidDrop, this._onDidAddView, this._onDidRemoveView);
9388
+ this.classNames = (_b = (_a = options.className) === null || _a === void 0 ? void 0 : _a.split(' ')) !== null && _b !== void 0 ? _b : [];
9389
+ for (const className of this.classNames) {
9390
+ toggleClass(this.element, className, true);
9391
+ }
9220
9392
  this._options = options;
9221
9393
  if (!options.components) {
9222
9394
  options.components = {};
@@ -9238,6 +9410,16 @@ define(['exports'], (function (exports) { 'use strict';
9238
9410
  //noop
9239
9411
  }
9240
9412
  updateOptions(options) {
9413
+ var _a, _b;
9414
+ if ('className' in options) {
9415
+ for (const className of this.classNames) {
9416
+ toggleClass(this.element, className, false);
9417
+ }
9418
+ this.classNames = (_b = (_a = options.className) === null || _a === void 0 ? void 0 : _a.split(' ')) !== null && _b !== void 0 ? _b : [];
9419
+ for (const className of this.classNames) {
9420
+ toggleClass(this.element, className, true);
9421
+ }
9422
+ }
9241
9423
  this._options = Object.assign(Object.assign({}, this.options), options);
9242
9424
  }
9243
9425
  addPanel(options) {
@@ -9531,6 +9713,23 @@ define(['exports'], (function (exports) { 'use strict';
9531
9713
  }
9532
9714
  }
9533
9715
 
9716
+ function createDockview(element, options) {
9717
+ const component = new DockviewComponent(element, options);
9718
+ return component.api;
9719
+ }
9720
+ function createSplitview(element, options) {
9721
+ const component = new SplitviewComponent(element, options);
9722
+ return new SplitviewApi(component);
9723
+ }
9724
+ function createGridview(element, options) {
9725
+ const component = new GridviewComponent(element, options);
9726
+ return new GridviewApi(component);
9727
+ }
9728
+ function createPaneview(element, options) {
9729
+ const component = new PaneviewComponent(element, options);
9730
+ return new PaneviewApi(component);
9731
+ }
9732
+
9534
9733
  exports.BaseGrid = BaseGrid;
9535
9734
  exports.ContentContainer = ContentContainer;
9536
9735
  exports.DefaultDockviewDeserialzier = DefaultDockviewDeserialzier;
@@ -9567,6 +9766,10 @@ define(['exports'], (function (exports) { 'use strict';
9567
9766
  exports.Tab = Tab;
9568
9767
  exports.WillShowOverlayLocationEvent = WillShowOverlayLocationEvent;
9569
9768
  exports.createComponent = createComponent;
9769
+ exports.createDockview = createDockview;
9770
+ exports.createGridview = createGridview;
9771
+ exports.createPaneview = createPaneview;
9772
+ exports.createSplitview = createSplitview;
9570
9773
  exports.directionToPosition = directionToPosition;
9571
9774
  exports.getDirectionOrientation = getDirectionOrientation;
9572
9775
  exports.getGridLocation = getGridLocation;