dockview-core 3.1.1 → 4.0.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 (110) hide show
  1. package/dist/cjs/api/component.api.d.ts +0 -2
  2. package/dist/cjs/api/component.api.js +0 -10
  3. package/dist/cjs/dnd/abstractDragHandler.js +4 -2
  4. package/dist/cjs/dnd/dropTargetAnchorContainer.d.ts +16 -0
  5. package/dist/cjs/dnd/dropTargetAnchorContainer.js +105 -0
  6. package/dist/cjs/dnd/droptarget.d.ts +16 -0
  7. package/dist/cjs/dnd/droptarget.js +138 -14
  8. package/dist/cjs/dnd/ghost.d.ts +4 -1
  9. package/dist/cjs/dnd/ghost.js +3 -2
  10. package/dist/cjs/dnd/groupDragHandler.js +3 -1
  11. package/dist/cjs/dockview/components/panel/content.js +10 -13
  12. package/dist/cjs/dockview/components/popupService.d.ts +13 -0
  13. package/dist/cjs/dockview/components/popupService.js +76 -0
  14. package/dist/cjs/dockview/components/tab/tab.js +17 -7
  15. package/dist/cjs/dockview/components/titlebar/tabOverflowControl.d.ts +8 -0
  16. package/dist/cjs/dockview/components/titlebar/tabOverflowControl.js +20 -0
  17. package/dist/cjs/dockview/components/titlebar/tabs.d.ts +45 -0
  18. package/dist/cjs/dockview/components/titlebar/tabs.js +288 -0
  19. package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts +8 -9
  20. package/dist/cjs/dockview/components/titlebar/tabsContainer.js +108 -152
  21. package/dist/cjs/dockview/components/titlebar/voidContainer.js +2 -9
  22. package/dist/cjs/dockview/dockviewComponent.d.ts +10 -3
  23. package/dist/cjs/dockview/dockviewComponent.js +71 -30
  24. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +4 -0
  25. package/dist/cjs/dockview/dockviewGroupPanelModel.js +31 -0
  26. package/dist/cjs/dockview/dockviewPanelModel.d.ts +5 -3
  27. package/dist/cjs/dockview/dockviewPanelModel.js +25 -4
  28. package/dist/cjs/dockview/framework.d.ts +4 -1
  29. package/dist/cjs/dockview/options.d.ts +8 -5
  30. package/dist/cjs/dockview/options.js +3 -1
  31. package/dist/cjs/dockview/theme.d.ts +31 -0
  32. package/dist/cjs/dockview/theme.js +42 -0
  33. package/dist/cjs/dockview/types.d.ts +5 -1
  34. package/dist/cjs/dom.d.ts +1 -0
  35. package/dist/cjs/dom.js +15 -1
  36. package/dist/cjs/gridview/baseComponentGridview.d.ts +3 -0
  37. package/dist/cjs/index.d.ts +1 -0
  38. package/dist/cjs/index.js +1 -0
  39. package/dist/cjs/paneview/paneviewComponent.js +1 -0
  40. package/dist/cjs/scrollbar.d.ts +12 -0
  41. package/dist/cjs/scrollbar.js +106 -0
  42. package/dist/cjs/splitview/splitview.js +1 -0
  43. package/dist/cjs/splitview/splitviewComponent.js +1 -0
  44. package/dist/dockview-core.amd.js +930 -293
  45. package/dist/dockview-core.amd.js.map +1 -1
  46. package/dist/dockview-core.amd.min.js +2 -2
  47. package/dist/dockview-core.amd.min.js.map +1 -1
  48. package/dist/dockview-core.amd.min.noStyle.js +2 -2
  49. package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
  50. package/dist/dockview-core.amd.noStyle.js +929 -292
  51. package/dist/dockview-core.amd.noStyle.js.map +1 -1
  52. package/dist/dockview-core.cjs.js +930 -293
  53. package/dist/dockview-core.cjs.js.map +1 -1
  54. package/dist/dockview-core.esm.js +923 -294
  55. package/dist/dockview-core.esm.js.map +1 -1
  56. package/dist/dockview-core.esm.min.js +2 -2
  57. package/dist/dockview-core.esm.min.js.map +1 -1
  58. package/dist/dockview-core.js +930 -293
  59. package/dist/dockview-core.js.map +1 -1
  60. package/dist/dockview-core.min.js +2 -2
  61. package/dist/dockview-core.min.js.map +1 -1
  62. package/dist/dockview-core.min.noStyle.js +2 -2
  63. package/dist/dockview-core.min.noStyle.js.map +1 -1
  64. package/dist/dockview-core.noStyle.js +929 -292
  65. package/dist/dockview-core.noStyle.js.map +1 -1
  66. package/dist/esm/api/component.api.d.ts +0 -2
  67. package/dist/esm/api/component.api.js +0 -6
  68. package/dist/esm/dnd/abstractDragHandler.js +4 -2
  69. package/dist/esm/dnd/dropTargetAnchorContainer.d.ts +16 -0
  70. package/dist/esm/dnd/dropTargetAnchorContainer.js +74 -0
  71. package/dist/esm/dnd/droptarget.d.ts +16 -0
  72. package/dist/esm/dnd/droptarget.js +134 -14
  73. package/dist/esm/dnd/ghost.d.ts +4 -1
  74. package/dist/esm/dnd/ghost.js +3 -2
  75. package/dist/esm/dnd/groupDragHandler.js +3 -1
  76. package/dist/esm/dockview/components/panel/content.js +10 -13
  77. package/dist/esm/dockview/components/popupService.d.ts +13 -0
  78. package/dist/esm/dockview/components/popupService.js +53 -0
  79. package/dist/esm/dockview/components/tab/tab.js +15 -7
  80. package/dist/esm/dockview/components/titlebar/tabOverflowControl.d.ts +8 -0
  81. package/dist/esm/dockview/components/titlebar/tabOverflowControl.js +16 -0
  82. package/dist/esm/dockview/components/titlebar/tabs.d.ts +45 -0
  83. package/dist/esm/dockview/components/titlebar/tabs.js +183 -0
  84. package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts +8 -9
  85. package/dist/esm/dockview/components/titlebar/tabsContainer.js +133 -162
  86. package/dist/esm/dockview/components/titlebar/voidContainer.js +2 -9
  87. package/dist/esm/dockview/dockviewComponent.d.ts +10 -3
  88. package/dist/esm/dockview/dockviewComponent.js +69 -24
  89. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +4 -0
  90. package/dist/esm/dockview/dockviewGroupPanelModel.js +27 -0
  91. package/dist/esm/dockview/dockviewPanelModel.d.ts +5 -3
  92. package/dist/esm/dockview/dockviewPanelModel.js +14 -4
  93. package/dist/esm/dockview/framework.d.ts +4 -1
  94. package/dist/esm/dockview/options.d.ts +8 -5
  95. package/dist/esm/dockview/options.js +3 -1
  96. package/dist/esm/dockview/theme.d.ts +31 -0
  97. package/dist/esm/dockview/theme.js +39 -0
  98. package/dist/esm/dockview/types.d.ts +5 -1
  99. package/dist/esm/dom.d.ts +1 -0
  100. package/dist/esm/dom.js +13 -0
  101. package/dist/esm/gridview/baseComponentGridview.d.ts +3 -0
  102. package/dist/esm/index.d.ts +1 -0
  103. package/dist/esm/index.js +1 -0
  104. package/dist/esm/paneview/paneviewComponent.js +1 -0
  105. package/dist/esm/scrollbar.d.ts +12 -0
  106. package/dist/esm/scrollbar.js +80 -0
  107. package/dist/esm/splitview/splitview.js +1 -0
  108. package/dist/esm/splitview/splitviewComponent.js +1 -0
  109. package/dist/styles/dockview.css +444 -76
  110. package/package.json +1 -1
@@ -25,53 +25,28 @@ var __values = (this && this.__values) || function(o) {
25
25
  };
26
26
  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
27
27
  };
28
- var __read = (this && this.__read) || function (o, n) {
29
- var m = typeof Symbol === "function" && o[Symbol.iterator];
30
- if (!m) return o;
31
- var i = m.call(o), r, ar = [], e;
32
- try {
33
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
34
- }
35
- catch (error) { e = { error: error }; }
36
- finally {
37
- try {
38
- if (r && !r.done && (m = i["return"])) m.call(i);
39
- }
40
- finally { if (e) throw e.error; }
41
- }
42
- return ar;
43
- };
44
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
45
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
46
- if (ar || !(i in from)) {
47
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
48
- ar[i] = from[i];
49
- }
50
- }
51
- return to.concat(ar || Array.prototype.slice.call(from));
52
- };
53
28
  Object.defineProperty(exports, "__esModule", { value: true });
54
29
  exports.TabsContainer = void 0;
55
30
  var lifecycle_1 = require("../../../lifecycle");
56
31
  var events_1 = require("../../../events");
57
- var tab_1 = require("../tab/tab");
58
32
  var voidContainer_1 = require("./voidContainer");
59
33
  var dom_1 = require("../../../dom");
60
34
  var dockviewGroupPanelModel_1 = require("../../dockviewGroupPanelModel");
61
35
  var dataTransfer_1 = require("../../../dnd/dataTransfer");
36
+ var tabs_1 = require("./tabs");
37
+ var tabOverflowControl_1 = require("./tabOverflowControl");
62
38
  var TabsContainer = /** @class */ (function (_super) {
63
39
  __extends(TabsContainer, _super);
64
40
  function TabsContainer(accessor, group) {
65
41
  var _this = _super.call(this) || this;
66
42
  _this.accessor = accessor;
67
43
  _this.group = group;
68
- _this.tabs = [];
69
- _this.selectedIndex = -1;
70
44
  _this._hidden = false;
45
+ _this.dropdownPart = null;
46
+ _this._overflowTabs = [];
47
+ _this._dropdownDisposable = new lifecycle_1.MutableDisposable();
71
48
  _this._onDrop = new events_1.Emitter();
72
49
  _this.onDrop = _this._onDrop.event;
73
- _this._onTabDragStart = new events_1.Emitter();
74
- _this.onTabDragStart = _this._onTabDragStart.event;
75
50
  _this._onGroupDragStart = new events_1.Emitter();
76
51
  _this.onGroupDragStart = _this._onGroupDragStart.event;
77
52
  _this._onWillShowOverlay = new events_1.Emitter();
@@ -85,15 +60,21 @@ var TabsContainer = /** @class */ (function (_super) {
85
60
  _this.leftActionsContainer.className = 'dv-left-actions-container';
86
61
  _this.preActionsContainer = document.createElement('div');
87
62
  _this.preActionsContainer.className = 'dv-pre-actions-container';
88
- _this.tabContainer = document.createElement('div');
89
- _this.tabContainer.className = 'dv-tabs-container';
63
+ _this.tabs = new tabs_1.Tabs(group, accessor, {
64
+ showTabsOverflowControl: !accessor.options.disableTabsOverflowList,
65
+ });
90
66
  _this.voidContainer = new voidContainer_1.VoidContainer(_this.accessor, _this.group);
91
67
  _this._element.appendChild(_this.preActionsContainer);
92
- _this._element.appendChild(_this.tabContainer);
68
+ _this._element.appendChild(_this.tabs.element);
93
69
  _this._element.appendChild(_this.leftActionsContainer);
94
70
  _this._element.appendChild(_this.voidContainer.element);
95
71
  _this._element.appendChild(_this.rightActionsContainer);
96
- _this.addDisposables(_this._onWillShowOverlay, _this._onDrop, _this._onTabDragStart, _this._onGroupDragStart, _this.voidContainer, _this.voidContainer.onDragStart(function (event) {
72
+ _this.addDisposables(accessor.onDidOptionsChange(function () {
73
+ _this.tabs.showTabsOverflowControl =
74
+ !accessor.options.disableTabsOverflowList;
75
+ }), _this.tabs.onOverflowTabsChange(function (event) {
76
+ _this.toggleDropdown(event);
77
+ }), _this.tabs, _this._onWillShowOverlay, _this._onDrop, _this._onGroupDragStart, _this.voidContainer, _this.voidContainer.onDragStart(function (event) {
97
78
  _this._onGroupDragStart.fire({
98
79
  nativeEvent: event,
99
80
  group: _this.group,
@@ -101,7 +82,7 @@ var TabsContainer = /** @class */ (function (_super) {
101
82
  }), _this.voidContainer.onDrop(function (event) {
102
83
  _this._onDrop.fire({
103
84
  event: event.nativeEvent,
104
- index: _this.tabs.length,
85
+ index: _this.tabs.size,
105
86
  });
106
87
  }), _this.voidContainer.onWillShowOverlay(function (event) {
107
88
  _this._onWillShowOverlay.fire(new dockviewGroupPanelModel_1.WillShowOverlayLocationEvent(event, {
@@ -112,6 +93,9 @@ var TabsContainer = /** @class */ (function (_super) {
112
93
  getData: dataTransfer_1.getPanelData,
113
94
  }));
114
95
  }), (0, events_1.addDisposableListener)(_this.voidContainer.element, 'pointerdown', function (event) {
96
+ if (event.defaultPrevented) {
97
+ return;
98
+ }
115
99
  var isFloatingGroupsEnabled = !_this.accessor.options.disableFloatingGroups;
116
100
  if (isFloatingGroupsEnabled &&
117
101
  event.shiftKey &&
@@ -125,27 +109,26 @@ var TabsContainer = /** @class */ (function (_super) {
125
109
  inDragMode: true,
126
110
  });
127
111
  }
128
- }), (0, events_1.addDisposableListener)(_this.tabContainer, 'pointerdown', function (event) {
129
- if (event.defaultPrevented) {
130
- return;
131
- }
132
- var isLeftClick = event.button === 0;
133
- if (isLeftClick) {
134
- _this.accessor.doSetGroupActive(_this.group);
135
- }
136
112
  }));
137
113
  return _this;
138
114
  }
115
+ Object.defineProperty(TabsContainer.prototype, "onTabDragStart", {
116
+ get: function () {
117
+ return this.tabs.onTabDragStart;
118
+ },
119
+ enumerable: false,
120
+ configurable: true
121
+ });
139
122
  Object.defineProperty(TabsContainer.prototype, "panels", {
140
123
  get: function () {
141
- return this.tabs.map(function (_) { return _.value.panel.id; });
124
+ return this.tabs.panels;
142
125
  },
143
126
  enumerable: false,
144
127
  configurable: true
145
128
  });
146
129
  Object.defineProperty(TabsContainer.prototype, "size", {
147
130
  get: function () {
148
- return this.tabs.length;
131
+ return this.tabs.size;
149
132
  },
150
133
  enumerable: false,
151
134
  configurable: true
@@ -161,6 +144,13 @@ var TabsContainer = /** @class */ (function (_super) {
161
144
  enumerable: false,
162
145
  configurable: true
163
146
  });
147
+ Object.defineProperty(TabsContainer.prototype, "element", {
148
+ get: function () {
149
+ return this._element;
150
+ },
151
+ enumerable: false,
152
+ configurable: true
153
+ });
164
154
  TabsContainer.prototype.show = function () {
165
155
  if (!this.hidden) {
166
156
  this.element.style.display = '';
@@ -208,134 +198,100 @@ var TabsContainer = /** @class */ (function (_super) {
208
198
  this.preActions = element;
209
199
  }
210
200
  };
211
- Object.defineProperty(TabsContainer.prototype, "element", {
212
- get: function () {
213
- return this._element;
214
- },
215
- enumerable: false,
216
- configurable: true
217
- });
218
201
  TabsContainer.prototype.isActive = function (tab) {
219
- return (this.selectedIndex > -1 &&
220
- this.tabs[this.selectedIndex].value === tab);
202
+ return this.tabs.isActive(tab);
221
203
  };
222
204
  TabsContainer.prototype.indexOf = function (id) {
223
- return this.tabs.findIndex(function (tab) { return tab.value.panel.id === id; });
205
+ return this.tabs.indexOf(id);
224
206
  };
225
207
  TabsContainer.prototype.setActive = function (_isGroupActive) {
226
208
  // noop
227
209
  };
228
210
  TabsContainer.prototype.delete = function (id) {
229
- var index = this.tabs.findIndex(function (tab) { return tab.value.panel.id === id; });
230
- var tabToRemove = this.tabs.splice(index, 1)[0];
231
- if (!tabToRemove) {
232
- throw new Error("dockview: Tab not found");
233
- }
234
- var value = tabToRemove.value, disposable = tabToRemove.disposable;
235
- disposable.dispose();
236
- value.dispose();
237
- value.element.remove();
211
+ this.tabs.delete(id);
238
212
  this.updateClassnames();
239
213
  };
240
214
  TabsContainer.prototype.setActivePanel = function (panel) {
241
- this.tabs.forEach(function (tab) {
242
- var isActivePanel = panel.id === tab.value.panel.id;
243
- tab.value.setActive(isActivePanel);
244
- });
215
+ this.tabs.setActivePanel(panel);
245
216
  };
246
217
  TabsContainer.prototype.openPanel = function (panel, index) {
218
+ if (index === void 0) { index = this.tabs.size; }
219
+ this.tabs.openPanel(panel, index);
220
+ this.updateClassnames();
221
+ };
222
+ TabsContainer.prototype.closePanel = function (panel) {
223
+ this.delete(panel.id);
224
+ };
225
+ TabsContainer.prototype.updateClassnames = function () {
226
+ (0, dom_1.toggleClass)(this._element, 'dv-single-tab', this.size === 1);
227
+ };
228
+ TabsContainer.prototype.toggleDropdown = function (options) {
247
229
  var _this = this;
248
- if (index === void 0) { index = this.tabs.length; }
249
- if (this.tabs.find(function (tab) { return tab.value.panel.id === panel.id; })) {
230
+ var tabs = options.reset ? [] : options.tabs;
231
+ this._overflowTabs = tabs;
232
+ if (this._overflowTabs.length > 0 && this.dropdownPart) {
233
+ this.dropdownPart.update({ tabs: tabs.length });
250
234
  return;
251
235
  }
252
- var tab = new tab_1.Tab(panel, this.accessor, this.group);
253
- tab.setContent(panel.view.tab);
254
- var disposable = new lifecycle_1.CompositeDisposable(tab.onDragStart(function (event) {
255
- _this._onTabDragStart.fire({ nativeEvent: event, panel: panel });
256
- }), tab.onPointerDown(function (event) {
257
- if (event.defaultPrevented) {
258
- return;
259
- }
260
- var isFloatingGroupsEnabled = !_this.accessor.options.disableFloatingGroups;
261
- var isFloatingWithOnePanel = _this.group.api.location.type === 'floating' &&
262
- _this.size === 1;
263
- if (isFloatingGroupsEnabled &&
264
- !isFloatingWithOnePanel &&
265
- event.shiftKey) {
266
- event.preventDefault();
267
- var panel_1 = _this.accessor.getGroupPanel(tab.panel.id);
268
- var _a = tab.element.getBoundingClientRect(), top_2 = _a.top, left = _a.left;
269
- var _b = _this.accessor.element.getBoundingClientRect(), rootTop = _b.top, rootLeft = _b.left;
270
- _this.accessor.addFloatingGroup(panel_1, {
271
- x: left - rootLeft,
272
- y: top_2 - rootTop,
273
- inDragMode: true,
236
+ if (this._overflowTabs.length === 0) {
237
+ this._dropdownDisposable.dispose();
238
+ return;
239
+ }
240
+ var root = document.createElement('div');
241
+ root.className = 'dv-tabs-overflow-dropdown-root';
242
+ var part = (0, tabOverflowControl_1.createDropdownElementHandle)();
243
+ part.update({ tabs: tabs.length });
244
+ this.dropdownPart = part;
245
+ root.appendChild(part.element);
246
+ this.rightActionsContainer.prepend(root);
247
+ this._dropdownDisposable.value = new lifecycle_1.CompositeDisposable(lifecycle_1.Disposable.from(function () {
248
+ var _a, _b;
249
+ root.remove();
250
+ (_b = (_a = _this.dropdownPart) === null || _a === void 0 ? void 0 : _a.dispose) === null || _b === void 0 ? void 0 : _b.call(_a);
251
+ _this.dropdownPart = null;
252
+ }), (0, events_1.addDisposableListener)(root, 'pointerdown', function (event) {
253
+ event.preventDefault();
254
+ }, { capture: true }), (0, events_1.addDisposableListener)(root, 'click', function (event) {
255
+ var e_1, _a;
256
+ var el = document.createElement('div');
257
+ el.style.overflow = 'auto';
258
+ el.className = 'dv-tabs-overflow-container';
259
+ var _loop_1 = function (tab) {
260
+ var panelObject = _this.group.panels.find(function (panel) { return panel === tab.panel; });
261
+ var tabComponent = panelObject.view.createTabRenderer('headerOverflow');
262
+ var child = tabComponent.element;
263
+ var wrapper = document.createElement('div');
264
+ (0, dom_1.toggleClass)(wrapper, 'dv-tab', true);
265
+ (0, dom_1.toggleClass)(wrapper, 'dv-active-tab', panelObject.api.isActive);
266
+ (0, dom_1.toggleClass)(wrapper, 'dv-inactive-tab', !panelObject.api.isActive);
267
+ wrapper.addEventListener('mousedown', function () {
268
+ _this.accessor.popupService.close();
269
+ tab.element.scrollIntoView();
270
+ tab.panel.api.setActive();
274
271
  });
275
- return;
272
+ wrapper.appendChild(child);
273
+ el.appendChild(wrapper);
274
+ };
275
+ try {
276
+ for (var _b = __values(_this.tabs.tabs.filter(function (tab) {
277
+ return _this._overflowTabs.includes(tab.panel.id);
278
+ })), _c = _b.next(); !_c.done; _c = _b.next()) {
279
+ var tab = _c.value;
280
+ _loop_1(tab);
281
+ }
276
282
  }
277
- switch (event.button) {
278
- case 0: // left click or touch
279
- if (_this.group.activePanel !== panel) {
280
- _this.group.model.openPanel(panel);
281
- }
282
- break;
283
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
284
+ finally {
285
+ try {
286
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
287
+ }
288
+ finally { if (e_1) throw e_1.error; }
283
289
  }
284
- }), tab.onDrop(function (event) {
285
- _this._onDrop.fire({
286
- event: event.nativeEvent,
287
- index: _this.tabs.findIndex(function (x) { return x.value === tab; }),
290
+ _this.accessor.popupService.openPopover(el, {
291
+ x: event.clientX,
292
+ y: event.clientY,
288
293
  });
289
- }), tab.onWillShowOverlay(function (event) {
290
- _this._onWillShowOverlay.fire(new dockviewGroupPanelModel_1.WillShowOverlayLocationEvent(event, {
291
- kind: 'tab',
292
- panel: _this.group.activePanel,
293
- api: _this.accessor.api,
294
- group: _this.group,
295
- getData: dataTransfer_1.getPanelData,
296
- }));
297
294
  }));
298
- var value = { value: tab, disposable: disposable };
299
- this.addTab(value, index);
300
- };
301
- TabsContainer.prototype.closePanel = function (panel) {
302
- this.delete(panel.id);
303
- };
304
- TabsContainer.prototype.dispose = function () {
305
- var e_1, _a;
306
- _super.prototype.dispose.call(this);
307
- try {
308
- for (var _b = __values(this.tabs), _c = _b.next(); !_c.done; _c = _b.next()) {
309
- var _d = _c.value, value = _d.value, disposable = _d.disposable;
310
- disposable.dispose();
311
- value.dispose();
312
- }
313
- }
314
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
315
- finally {
316
- try {
317
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
318
- }
319
- finally { if (e_1) throw e_1.error; }
320
- }
321
- this.tabs = [];
322
- };
323
- TabsContainer.prototype.addTab = function (tab, index) {
324
- if (index === void 0) { index = this.tabs.length; }
325
- if (index < 0 || index > this.tabs.length) {
326
- throw new Error('invalid location');
327
- }
328
- this.tabContainer.insertBefore(tab.value.element, this.tabContainer.children[index]);
329
- this.tabs = __spreadArray(__spreadArray(__spreadArray([], __read(this.tabs.slice(0, index)), false), [
330
- tab
331
- ], false), __read(this.tabs.slice(index)), false);
332
- if (this.selectedIndex < 0) {
333
- this.selectedIndex = index;
334
- }
335
- this.updateClassnames();
336
- };
337
- TabsContainer.prototype.updateClassnames = function () {
338
- (0, dom_1.toggleClass)(this._element, 'dv-single-tab', this.size === 1);
339
295
  };
340
296
  return TabsContainer;
341
297
  }(lifecycle_1.CompositeDisposable));
@@ -16,7 +16,6 @@ var __extends = (this && this.__extends) || (function () {
16
16
  })();
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.VoidContainer = void 0;
19
- var array_1 = require("../../../array");
20
19
  var dataTransfer_1 = require("../../../dnd/dataTransfer");
21
20
  var droptarget_1 = require("../../../dnd/droptarget");
22
21
  var groupDragHandler_1 = require("../../../dnd/groupDragHandler");
@@ -42,19 +41,13 @@ var VoidContainer = /** @class */ (function (_super) {
42
41
  _this.dropTraget = new droptarget_1.Droptarget(_this._element, {
43
42
  acceptedTargetZones: ['center'],
44
43
  canDisplayOverlay: function (event, position) {
45
- var _a;
46
44
  var data = (0, dataTransfer_1.getPanelData)();
47
45
  if (data && _this.accessor.id === data.viewId) {
48
- if (data.panelId === null &&
49
- data.groupId === _this.group.id) {
50
- // don't allow group move to drop on self
51
- return false;
52
- }
53
- // don't show the overlay if the tab being dragged is the last panel of this group
54
- return ((_a = (0, array_1.last)(_this.group.panels)) === null || _a === void 0 ? void 0 : _a.id) !== data.panelId;
46
+ return true;
55
47
  }
56
48
  return group.model.canDisplayOverlay(event, position, 'header_space');
57
49
  },
50
+ getOverrideTarget: function () { var _a; return (_a = group.model.dropTargetContainer) === null || _a === void 0 ? void 0 : _a.model; },
58
51
  });
59
52
  _this.onWillShowOverlay = _this.dropTraget.onWillShowOverlay;
60
53
  _this.addDisposables(handler, handler.onDragStart(function (event) {
@@ -14,6 +14,8 @@ import { DockviewFloatingGroupPanel } from './dockviewFloatingGroupPanel';
14
14
  import { GroupDragEvent, TabDragEvent } from './components/titlebar/tabsContainer';
15
15
  import { AnchoredBox, AnchorPosition, Box } from '../types';
16
16
  import { DockviewPanelRenderer, OverlayRenderContainer } from '../overlay/overlayRenderContainer';
17
+ import { PopupService } from './components/popupService';
18
+ import { DropTargetAnchorContainer } from '../dnd/dropTargetAnchorContainer';
17
19
  export interface DockviewPopoutGroupOptions {
18
20
  /**
19
21
  * The position of the popout group
@@ -110,7 +112,6 @@ export interface IDockviewComponent extends IBaseGrid<DockviewGroupPanel> {
110
112
  readonly totalPanels: number;
111
113
  readonly panels: IDockviewPanel[];
112
114
  readonly orientation: Orientation;
113
- readonly gap: number;
114
115
  readonly onDidDrop: Event<DockviewDidDropEvent>;
115
116
  readonly onWillDrop: Event<DockviewWillDropEvent>;
116
117
  readonly onWillShowOverlay: Event<WillShowOverlayLocationEvent>;
@@ -163,8 +164,11 @@ export declare class DockviewComponent extends BaseGrid<DockviewGroupPanel> impl
163
164
  private readonly _deserializer;
164
165
  private readonly _api;
165
166
  private _options;
166
- private watermark;
167
+ private _watermark;
168
+ private readonly _themeClassnames;
167
169
  readonly overlayRenderContainer: OverlayRenderContainer;
170
+ readonly popupService: PopupService;
171
+ readonly rootDropTargetContainer: DropTargetAnchorContainer;
168
172
  private readonly _onWillDragPanel;
169
173
  readonly onWillDragPanel: Event<TabDragEvent>;
170
174
  private readonly _onWillDragGroup;
@@ -196,6 +200,8 @@ export declare class DockviewComponent extends BaseGrid<DockviewGroupPanel> impl
196
200
  readonly onDidRemoveGroup: Event<DockviewGroupPanel>;
197
201
  protected readonly _onDidAddGroup: Emitter<DockviewGroupPanel>;
198
202
  readonly onDidAddGroup: Event<DockviewGroupPanel>;
203
+ private readonly _onDidOptionsChange;
204
+ readonly onDidOptionsChange: Event<void>;
199
205
  private readonly _onDidActiveGroupChange;
200
206
  readonly onDidActiveGroupChange: Event<DockviewGroupPanel | undefined>;
201
207
  get orientation(): Orientation;
@@ -205,7 +211,6 @@ export declare class DockviewComponent extends BaseGrid<DockviewGroupPanel> impl
205
211
  get activePanel(): IDockviewPanel | undefined;
206
212
  get renderer(): DockviewPanelRenderer;
207
213
  get api(): DockviewApi;
208
- get gap(): number;
209
214
  get floatingGroups(): DockviewFloatingGroupPanel[];
210
215
  constructor(container: HTMLElement, options: DockviewComponentOptions);
211
216
  setVisible(panel: DockviewGroupPanel, visible: boolean): void;
@@ -262,5 +267,7 @@ export declare class DockviewComponent extends BaseGrid<DockviewGroupPanel> impl
262
267
  private createGroupAtLocation;
263
268
  private findGroup;
264
269
  private orientationAtLocation;
270
+ private updateDropTargetModel;
271
+ private updateTheme;
265
272
  }
266
273
  export {};
@@ -87,6 +87,9 @@ var constants_1 = require("../constants");
87
87
  var overlayRenderContainer_1 = require("../overlay/overlayRenderContainer");
88
88
  var popoutWindow_1 = require("../popoutWindow");
89
89
  var strictEventsSequencing_1 = require("./strictEventsSequencing");
90
+ var popupService_1 = require("./components/popupService");
91
+ var dropTargetAnchorContainer_1 = require("../dnd/dropTargetAnchorContainer");
92
+ var theme_1 = require("./theme");
90
93
  var DEFAULT_ROOT_OVERLAY_MODEL = {
91
94
  activationSize: { type: 'pixels', value: 10 },
92
95
  size: { type: 'pixels', value: 20 },
@@ -108,7 +111,7 @@ function moveGroupWithoutDestroying(options) {
108
111
  var DockviewComponent = /** @class */ (function (_super) {
109
112
  __extends(DockviewComponent, _super);
110
113
  function DockviewComponent(container, options) {
111
- var _a;
114
+ var _a, _b, _c;
112
115
  var _this = _super.call(this, container, {
113
116
  proportionalLayout: true,
114
117
  orientation: splitview_1.Orientation.HORIZONTAL,
@@ -117,12 +120,12 @@ var DockviewComponent = /** @class */ (function (_super) {
117
120
  : undefined,
118
121
  disableAutoResizing: options.disableAutoResizing,
119
122
  locked: options.locked,
120
- margin: options.gap,
123
+ margin: (_b = (_a = options.theme) === null || _a === void 0 ? void 0 : _a.gap) !== null && _b !== void 0 ? _b : 0,
121
124
  className: options.className,
122
125
  }) || this;
123
126
  _this.nextGroupId = (0, math_1.sequentialNumberGenerator)();
124
127
  _this._deserializer = new deserializer_1.DefaultDockviewDeserialzier(_this);
125
- _this.watermark = null;
128
+ _this._watermark = null;
126
129
  _this._onWillDragPanel = new events_1.Emitter();
127
130
  _this.onWillDragPanel = _this._onWillDragPanel.event;
128
131
  _this._onWillDragGroup = new events_1.Emitter();
@@ -153,16 +156,22 @@ var DockviewComponent = /** @class */ (function (_super) {
153
156
  _this.onDidRemoveGroup = _this._onDidRemoveGroup.event;
154
157
  _this._onDidAddGroup = new events_1.Emitter();
155
158
  _this.onDidAddGroup = _this._onDidAddGroup.event;
159
+ _this._onDidOptionsChange = new events_1.Emitter();
160
+ _this.onDidOptionsChange = _this._onDidOptionsChange.event;
156
161
  _this._onDidActiveGroupChange = new events_1.Emitter();
157
162
  _this.onDidActiveGroupChange = _this._onDidActiveGroupChange.event;
158
163
  _this._moving = false;
164
+ _this.popupService = new popupService_1.PopupService(_this.element);
165
+ _this.updateDropTargetModel(options);
166
+ _this._themeClassnames = new dom_1.Classnames(_this.element);
167
+ _this.rootDropTargetContainer = new dropTargetAnchorContainer_1.DropTargetAnchorContainer(_this.element, { disabled: true });
159
168
  _this.overlayRenderContainer = new overlayRenderContainer_1.OverlayRenderContainer(_this.gridview.element, _this);
160
169
  (0, dom_1.toggleClass)(_this.gridview.element, 'dv-dockview', true);
161
170
  (0, dom_1.toggleClass)(_this.element, 'dv-debug', !!options.debug);
162
171
  if (options.debug) {
163
172
  _this.addDisposables(new strictEventsSequencing_1.StrictEventsSequencing(_this));
164
173
  }
165
- _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._onDidMaximizedGroupChange, _this.onDidViewVisibilityChangeMicroTaskQueue(function () {
174
+ _this.addDisposables(_this.rootDropTargetContainer, _this.overlayRenderContainer, _this._onWillDragPanel, _this._onWillDragGroup, _this._onWillShowOverlay, _this._onDidActivePanelChange, _this._onDidAddPanel, _this._onDidRemovePanel, _this._onDidLayoutFromJSON, _this._onDidDrop, _this._onWillDrop, _this._onDidMovePanel, _this._onDidAddGroup, _this._onDidRemoveGroup, _this._onDidActiveGroupChange, _this._onUnhandledDragOverEvent, _this._onDidMaximizedGroupChange, _this._onDidOptionsChange, _this.onDidViewVisibilityChangeMicroTaskQueue(function () {
166
175
  _this.updateWatermark();
167
176
  }), _this.onDidAdd(function (event) {
168
177
  if (!_this._moving) {
@@ -217,7 +226,9 @@ var DockviewComponent = /** @class */ (function (_super) {
217
226
  }
218
227
  }));
219
228
  _this._options = options;
229
+ _this.updateTheme();
220
230
  _this._rootDropTarget = new droptarget_1.Droptarget(_this.element, {
231
+ className: 'dv-drop-target-edge',
221
232
  canDisplayOverlay: function (event, position) {
222
233
  var data = (0, dataTransfer_1.getPanelData)();
223
234
  if (data) {
@@ -244,7 +255,8 @@ var DockviewComponent = /** @class */ (function (_super) {
244
255
  return firedEvent.isAccepted;
245
256
  },
246
257
  acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
247
- overlayModel: (_a = _this.options.rootOverlayModel) !== null && _a !== void 0 ? _a : DEFAULT_ROOT_OVERLAY_MODEL,
258
+ overlayModel: (_c = _this.options.rootOverlayModel) !== null && _c !== void 0 ? _c : DEFAULT_ROOT_OVERLAY_MODEL,
259
+ getOverrideTarget: function () { var _a; return (_a = _this.rootDropTargetContainer) === null || _a === void 0 ? void 0 : _a.model; },
248
260
  });
249
261
  _this.addDisposables(_this._rootDropTarget, _this._rootDropTarget.onWillShowOverlay(function (event) {
250
262
  if (_this.gridview.length > 0 && event.position === 'center') {
@@ -355,13 +367,6 @@ var DockviewComponent = /** @class */ (function (_super) {
355
367
  enumerable: false,
356
368
  configurable: true
357
369
  });
358
- Object.defineProperty(DockviewComponent.prototype, "gap", {
359
- get: function () {
360
- return this.gridview.margin;
361
- },
362
- enumerable: false,
363
- configurable: true
364
- });
365
370
  Object.defineProperty(DockviewComponent.prototype, "floatingGroups", {
366
371
  get: function () {
367
372
  return this._floatingGroups;
@@ -496,6 +501,10 @@ var DockviewComponent = /** @class */ (function (_super) {
496
501
  popoutContainer.style.overflow = 'hidden';
497
502
  popoutContainer.appendChild(gready);
498
503
  popoutContainer.appendChild(group.element);
504
+ var anchor = document.createElement('div');
505
+ var dropTargetContainer = new dropTargetAnchorContainer_1.DropTargetAnchorContainer(anchor, { disabled: _this.rootDropTargetContainer.disabled });
506
+ popoutContainer.appendChild(anchor);
507
+ group.model.dropTargetContainer = dropTargetContainer;
499
508
  group.model.location = {
500
509
  type: 'popout',
501
510
  getWindow: function () { return _window.window; },
@@ -564,6 +573,8 @@ var DockviewComponent = /** @class */ (function (_super) {
564
573
  else if (_this.getPanel(group.id)) {
565
574
  group.model.renderContainer =
566
575
  _this.overlayRenderContainer;
576
+ group.model.dropTargetContainer =
577
+ _this.rootDropTargetContainer;
567
578
  returnedGroup = group;
568
579
  var alreadyRemoved = !_this._popoutGroups.find(function (p) { return p.popoutGroup === group; });
569
580
  if (alreadyRemoved) {
@@ -794,12 +805,12 @@ var DockviewComponent = /** @class */ (function (_super) {
794
805
  };
795
806
  DockviewComponent.prototype.updateOptions = function (options) {
796
807
  var e_3, _a;
797
- var _b, _c, _d, _e;
808
+ var _b, _c;
798
809
  _super.prototype.updateOptions.call(this, options);
799
810
  if ('floatingGroupBounds' in options) {
800
811
  try {
801
- for (var _f = __values(this._floatingGroups), _g = _f.next(); !_g.done; _g = _f.next()) {
802
- var group = _g.value;
812
+ for (var _d = __values(this._floatingGroups), _e = _d.next(); !_e.done; _e = _d.next()) {
813
+ var group = _e.value;
803
814
  switch (options.floatingGroupBounds) {
804
815
  case 'boundedWithinViewport':
805
816
  group.overlay.minimumInViewportHeight = undefined;
@@ -823,18 +834,16 @@ var DockviewComponent = /** @class */ (function (_super) {
823
834
  catch (e_3_1) { e_3 = { error: e_3_1 }; }
824
835
  finally {
825
836
  try {
826
- if (_g && !_g.done && (_a = _f.return)) _a.call(_f);
837
+ if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
827
838
  }
828
839
  finally { if (e_3) throw e_3.error; }
829
840
  }
830
841
  }
831
- if ('rootOverlayModel' in options) {
832
- this._rootDropTarget.setOverlayModel((_d = options.rootOverlayModel) !== null && _d !== void 0 ? _d : DEFAULT_ROOT_OVERLAY_MODEL);
833
- }
834
- if ('gap' in options) {
835
- this.gridview.margin = (_e = options.gap) !== null && _e !== void 0 ? _e : 0;
836
- }
842
+ this.updateDropTargetModel(options);
837
843
  this._options = __assign(__assign({}, this.options), options);
844
+ if ('theme' in options) {
845
+ this.updateTheme();
846
+ }
838
847
  this.layout(this.gridview.width, this.gridview.height, true);
839
848
  };
840
849
  DockviewComponent.prototype.layout = function (width, height, forceResize) {
@@ -1371,22 +1380,22 @@ var DockviewComponent = /** @class */ (function (_super) {
1371
1380
  DockviewComponent.prototype.updateWatermark = function () {
1372
1381
  var _a, _b;
1373
1382
  if (this.groups.filter(function (x) { return x.api.location.type === 'grid' && x.api.isVisible; }).length === 0) {
1374
- if (!this.watermark) {
1375
- this.watermark = this.createWatermarkComponent();
1376
- this.watermark.init({
1383
+ if (!this._watermark) {
1384
+ this._watermark = this.createWatermarkComponent();
1385
+ this._watermark.init({
1377
1386
  containerApi: new component_api_1.DockviewApi(this),
1378
1387
  });
1379
1388
  var watermarkContainer = document.createElement('div');
1380
1389
  watermarkContainer.className = 'dv-watermark-container';
1381
1390
  (0, dom_1.addTestId)(watermarkContainer, 'watermark-component');
1382
- watermarkContainer.appendChild(this.watermark.element);
1391
+ watermarkContainer.appendChild(this._watermark.element);
1383
1392
  this.gridview.element.appendChild(watermarkContainer);
1384
1393
  }
1385
1394
  }
1386
- else if (this.watermark) {
1387
- this.watermark.element.parentElement.remove();
1388
- (_b = (_a = this.watermark).dispose) === null || _b === void 0 ? void 0 : _b.call(_a);
1389
- this.watermark = null;
1395
+ else if (this._watermark) {
1396
+ this._watermark.element.parentElement.remove();
1397
+ (_b = (_a = this._watermark).dispose) === null || _b === void 0 ? void 0 : _b.call(_a);
1398
+ this._watermark = null;
1390
1399
  }
1391
1400
  };
1392
1401
  DockviewComponent.prototype.addGroup = function (options) {
@@ -1917,6 +1926,38 @@ var DockviewComponent = /** @class */ (function (_super) {
1917
1926
  ? rootOrientation
1918
1927
  : (0, gridview_1.orthogonal)(rootOrientation);
1919
1928
  };
1929
+ DockviewComponent.prototype.updateDropTargetModel = function (options) {
1930
+ if ('dndEdges' in options) {
1931
+ this._rootDropTarget.disabled =
1932
+ typeof options.dndEdges === 'boolean' &&
1933
+ options.dndEdges === false;
1934
+ if (typeof options.dndEdges === 'object' &&
1935
+ options.dndEdges !== null) {
1936
+ this._rootDropTarget.setOverlayModel(options.dndEdges);
1937
+ }
1938
+ else {
1939
+ this._rootDropTarget.setOverlayModel(DEFAULT_ROOT_OVERLAY_MODEL);
1940
+ }
1941
+ }
1942
+ if ('rootOverlayModel' in options) {
1943
+ this.updateDropTargetModel({ dndEdges: options.dndEdges });
1944
+ }
1945
+ };
1946
+ DockviewComponent.prototype.updateTheme = function () {
1947
+ var _a, _b;
1948
+ var theme = (_a = this._options.theme) !== null && _a !== void 0 ? _a : theme_1.themeAbyss;
1949
+ this._themeClassnames.setClassNames(theme.className);
1950
+ this.gridview.margin = (_b = theme.gap) !== null && _b !== void 0 ? _b : 0;
1951
+ switch (theme.dndOverlayMounting) {
1952
+ case 'absolute':
1953
+ this.rootDropTargetContainer.disabled = false;
1954
+ break;
1955
+ case 'relative':
1956
+ default:
1957
+ this.rootDropTargetContainer.disabled = true;
1958
+ break;
1959
+ }
1960
+ };
1920
1961
  return DockviewComponent;
1921
1962
  }(baseComponentGridview_1.BaseGrid));
1922
1963
  exports.DockviewComponent = DockviewComponent;