dockview-core 5.2.0 → 6.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.
- package/README.md +3 -1
- package/dist/cjs/api/component.api.d.ts +93 -1
- package/dist/cjs/api/component.api.js +146 -0
- package/dist/cjs/api/dockviewGroupPanelApi.d.ts +26 -0
- package/dist/cjs/api/dockviewGroupPanelApi.js +21 -1
- package/dist/cjs/api/entryPoints.js +4 -5
- package/dist/cjs/array.js +7 -8
- package/dist/cjs/dnd/dataTransfer.d.ts +2 -1
- package/dist/cjs/dnd/dataTransfer.js +5 -4
- package/dist/cjs/dnd/droptarget.d.ts +12 -0
- package/dist/cjs/dnd/droptarget.js +38 -10
- package/dist/cjs/dnd/ghost.js +1 -2
- package/dist/cjs/dockview/components/panel/content.js +5 -1
- package/dist/cjs/dockview/components/popupService.d.ts +9 -2
- package/dist/cjs/dockview/components/popupService.js +24 -9
- package/dist/cjs/dockview/components/tab/tab.d.ts +6 -1
- package/dist/cjs/dockview/components/tab/tab.js +81 -9
- package/dist/cjs/dockview/components/titlebar/tabGroupChip.d.ts +30 -0
- package/dist/cjs/dockview/components/titlebar/tabGroupChip.js +95 -0
- package/dist/cjs/dockview/components/titlebar/tabGroupIndicator.d.ts +71 -0
- package/dist/cjs/dockview/components/titlebar/tabGroupIndicator.js +471 -0
- package/dist/cjs/dockview/components/titlebar/tabGroups.d.ts +57 -0
- package/dist/cjs/dockview/components/titlebar/tabGroups.js +612 -0
- package/dist/cjs/dockview/components/titlebar/tabOverflowControl.js +1 -2
- package/dist/cjs/dockview/components/titlebar/tabs.d.ts +59 -0
- package/dist/cjs/dockview/components/titlebar/tabs.js +1227 -144
- package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts +6 -0
- package/dist/cjs/dockview/components/titlebar/tabsContainer.js +132 -14
- package/dist/cjs/dockview/contextMenu.d.ts +10 -0
- package/dist/cjs/dockview/contextMenu.js +298 -0
- package/dist/cjs/dockview/dockviewComponent.d.ts +60 -3
- package/dist/cjs/dockview/dockviewComponent.js +712 -126
- package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +83 -0
- package/dist/cjs/dockview/dockviewGroupPanelModel.js +619 -27
- package/dist/cjs/dockview/dockviewShell.d.ts +128 -0
- package/dist/cjs/dockview/dockviewShell.js +681 -0
- package/dist/cjs/dockview/events.d.ts +9 -0
- package/dist/cjs/dockview/framework.d.ts +14 -0
- package/dist/cjs/dockview/options.d.ts +92 -10
- package/dist/cjs/dockview/options.js +10 -7
- package/dist/cjs/dockview/tabGroup.d.ts +99 -0
- package/dist/cjs/dockview/tabGroup.js +219 -0
- package/dist/cjs/dockview/tabGroupAccent.d.ts +65 -0
- package/dist/cjs/dockview/tabGroupAccent.js +128 -0
- package/dist/cjs/dockview/theme.d.ts +56 -1
- package/dist/cjs/dockview/theme.js +103 -6
- package/dist/cjs/dockview/types.d.ts +2 -0
- package/dist/cjs/dom.js +19 -19
- package/dist/cjs/events.js +2 -2
- package/dist/cjs/gridview/baseComponentGridview.d.ts +1 -0
- package/dist/cjs/gridview/baseComponentGridview.js +6 -3
- package/dist/cjs/gridview/gridview.js +7 -7
- package/dist/cjs/index.d.ts +8 -5
- package/dist/cjs/index.js +6 -1
- package/dist/cjs/popoutWindow.js +3 -3
- package/dist/cjs/splitview/splitviewPanel.d.ts +1 -1
- package/dist/dockview-core.js +6942 -2777
- package/dist/dockview-core.min.js +2 -2
- package/dist/dockview-core.min.js.map +1 -1
- package/dist/dockview-core.min.noStyle.js +2 -2
- package/dist/dockview-core.min.noStyle.js.map +1 -1
- package/dist/dockview-core.noStyle.js +6940 -2775
- package/dist/esm/api/component.api.d.ts +93 -1
- package/dist/esm/api/component.api.js +118 -0
- package/dist/esm/api/dockviewGroupPanelApi.d.ts +26 -0
- package/dist/esm/api/dockviewGroupPanelApi.js +21 -1
- package/dist/esm/dnd/dataTransfer.d.ts +2 -1
- package/dist/esm/dnd/dataTransfer.js +2 -1
- package/dist/esm/dnd/droptarget.d.ts +12 -0
- package/dist/esm/dnd/droptarget.js +33 -5
- package/dist/esm/dockview/components/panel/content.js +5 -1
- package/dist/esm/dockview/components/popupService.d.ts +9 -2
- package/dist/esm/dockview/components/popupService.js +23 -9
- package/dist/esm/dockview/components/tab/tab.d.ts +6 -1
- package/dist/esm/dockview/components/tab/tab.js +83 -9
- package/dist/esm/dockview/components/titlebar/tabGroupChip.d.ts +30 -0
- package/dist/esm/dockview/components/titlebar/tabGroupChip.js +68 -0
- package/dist/esm/dockview/components/titlebar/tabGroupIndicator.d.ts +71 -0
- package/dist/esm/dockview/components/titlebar/tabGroupIndicator.js +354 -0
- package/dist/esm/dockview/components/titlebar/tabGroups.d.ts +57 -0
- package/dist/esm/dockview/components/titlebar/tabGroups.js +406 -0
- package/dist/esm/dockview/components/titlebar/tabs.d.ts +59 -0
- package/dist/esm/dockview/components/titlebar/tabs.js +1011 -99
- package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts +6 -0
- package/dist/esm/dockview/components/titlebar/tabsContainer.js +105 -7
- package/dist/esm/dockview/contextMenu.d.ts +10 -0
- package/dist/esm/dockview/contextMenu.js +213 -0
- package/dist/esm/dockview/dockviewComponent.d.ts +60 -3
- package/dist/esm/dockview/dockviewComponent.js +460 -35
- package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +83 -0
- package/dist/esm/dockview/dockviewGroupPanelModel.js +460 -4
- package/dist/esm/dockview/dockviewShell.d.ts +128 -0
- package/dist/esm/dockview/dockviewShell.js +621 -0
- package/dist/esm/dockview/events.d.ts +9 -0
- package/dist/esm/dockview/framework.d.ts +14 -0
- package/dist/esm/dockview/options.d.ts +92 -10
- package/dist/esm/dockview/options.js +5 -2
- package/dist/esm/dockview/tabGroup.d.ts +99 -0
- package/dist/esm/dockview/tabGroup.js +144 -0
- package/dist/esm/dockview/tabGroupAccent.d.ts +65 -0
- package/dist/esm/dockview/tabGroupAccent.js +116 -0
- package/dist/esm/dockview/theme.d.ts +56 -1
- package/dist/esm/dockview/theme.js +102 -5
- package/dist/esm/dockview/types.d.ts +2 -0
- package/dist/esm/dom.js +1 -1
- package/dist/esm/gridview/baseComponentGridview.d.ts +1 -0
- package/dist/esm/gridview/baseComponentGridview.js +4 -1
- package/dist/esm/index.d.ts +8 -5
- package/dist/esm/index.js +2 -1
- package/dist/esm/popoutWindow.js +1 -1
- package/dist/esm/splitview/splitviewPanel.d.ts +1 -1
- package/dist/package/main.cjs.js +6936 -2801
- package/dist/package/main.cjs.min.js +2 -2
- package/dist/package/main.esm.min.mjs +2 -2
- package/dist/package/main.esm.mjs +6922 -2800
- package/dist/styles/dockview.css +1945 -196
- package/package.json +5 -1
|
@@ -0,0 +1,612 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __values = (this && this.__values) || function(o) {
|
|
3
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
4
|
+
if (m) return m.call(o);
|
|
5
|
+
if (o && typeof o.length === "number") return {
|
|
6
|
+
next: function () {
|
|
7
|
+
if (o && i >= o.length) o = void 0;
|
|
8
|
+
return { value: o && o[i++], done: !o };
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
12
|
+
};
|
|
13
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
14
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
15
|
+
if (!m) return o;
|
|
16
|
+
var i = m.call(o), r, ar = [], e;
|
|
17
|
+
try {
|
|
18
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
19
|
+
}
|
|
20
|
+
catch (error) { e = { error: error }; }
|
|
21
|
+
finally {
|
|
22
|
+
try {
|
|
23
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
24
|
+
}
|
|
25
|
+
finally { if (e) throw e.error; }
|
|
26
|
+
}
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
30
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
31
|
+
if (ar || !(i in from)) {
|
|
32
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
33
|
+
ar[i] = from[i];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.TabGroupManager = void 0;
|
|
40
|
+
var dom_1 = require("../../../dom");
|
|
41
|
+
var events_1 = require("../../../events");
|
|
42
|
+
var lifecycle_1 = require("../../../lifecycle");
|
|
43
|
+
var tabGroupAccent_1 = require("../../tabGroupAccent");
|
|
44
|
+
var tabGroupChip_1 = require("./tabGroupChip");
|
|
45
|
+
var tabGroupIndicator_1 = require("./tabGroupIndicator");
|
|
46
|
+
var EMPTY_MAP = new Map();
|
|
47
|
+
var TabGroupManager = /** @class */ (function () {
|
|
48
|
+
function TabGroupManager(_ctx, _callbacks) {
|
|
49
|
+
this._ctx = _ctx;
|
|
50
|
+
this._callbacks = _callbacks;
|
|
51
|
+
this._chipRenderers = new Map();
|
|
52
|
+
this._indicator = null;
|
|
53
|
+
this._skipNextCollapseAnimation = false;
|
|
54
|
+
this._pendingTransitionCleanups = new Map();
|
|
55
|
+
}
|
|
56
|
+
Object.defineProperty(TabGroupManager.prototype, "chipRenderers", {
|
|
57
|
+
get: function () {
|
|
58
|
+
return this._chipRenderers;
|
|
59
|
+
},
|
|
60
|
+
enumerable: false,
|
|
61
|
+
configurable: true
|
|
62
|
+
});
|
|
63
|
+
Object.defineProperty(TabGroupManager.prototype, "groupUnderlines", {
|
|
64
|
+
get: function () {
|
|
65
|
+
var _a, _b;
|
|
66
|
+
return (_b = (_a = this._indicator) === null || _a === void 0 ? void 0 : _a.underlines) !== null && _b !== void 0 ? _b : EMPTY_MAP;
|
|
67
|
+
},
|
|
68
|
+
enumerable: false,
|
|
69
|
+
configurable: true
|
|
70
|
+
});
|
|
71
|
+
Object.defineProperty(TabGroupManager.prototype, "skipNextCollapseAnimation", {
|
|
72
|
+
get: function () {
|
|
73
|
+
return this._skipNextCollapseAnimation;
|
|
74
|
+
},
|
|
75
|
+
set: function (value) {
|
|
76
|
+
this._skipNextCollapseAnimation = value;
|
|
77
|
+
},
|
|
78
|
+
enumerable: false,
|
|
79
|
+
configurable: true
|
|
80
|
+
});
|
|
81
|
+
/**
|
|
82
|
+
* Synchronize chip elements and CSS classes for all tab groups
|
|
83
|
+
* in the parent group model. Call after any tab group mutation.
|
|
84
|
+
*/
|
|
85
|
+
TabGroupManager.prototype.update = function () {
|
|
86
|
+
var e_1, _a, e_2, _b;
|
|
87
|
+
var model = this._ctx.group.model;
|
|
88
|
+
var tabGroups = model.getTabGroups();
|
|
89
|
+
// Track which group IDs are still active
|
|
90
|
+
var activeGroupIds = new Set();
|
|
91
|
+
try {
|
|
92
|
+
for (var tabGroups_1 = __values(tabGroups), tabGroups_1_1 = tabGroups_1.next(); !tabGroups_1_1.done; tabGroups_1_1 = tabGroups_1.next()) {
|
|
93
|
+
var tabGroup = tabGroups_1_1.value;
|
|
94
|
+
activeGroupIds.add(tabGroup.id);
|
|
95
|
+
this._ensureChipForGroup(tabGroup);
|
|
96
|
+
this._positionChipForGroup(tabGroup);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
100
|
+
finally {
|
|
101
|
+
try {
|
|
102
|
+
if (tabGroups_1_1 && !tabGroups_1_1.done && (_a = tabGroups_1.return)) _a.call(tabGroups_1);
|
|
103
|
+
}
|
|
104
|
+
finally { if (e_1) throw e_1.error; }
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
// Remove chips for dissolved/destroyed groups
|
|
108
|
+
for (var _c = __values(this._chipRenderers), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
109
|
+
var _e = __read(_d.value, 2), groupId = _e[0], entry = _e[1];
|
|
110
|
+
if (!activeGroupIds.has(groupId)) {
|
|
111
|
+
entry.chip.element.remove();
|
|
112
|
+
entry.chip.dispose();
|
|
113
|
+
entry.disposable.dispose();
|
|
114
|
+
this._chipRenderers.delete(groupId);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
119
|
+
finally {
|
|
120
|
+
try {
|
|
121
|
+
if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
|
|
122
|
+
}
|
|
123
|
+
finally { if (e_2) throw e_2.error; }
|
|
124
|
+
}
|
|
125
|
+
// Update CSS classes on all tabs
|
|
126
|
+
this._updateTabGroupClasses();
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* Re-read the active palette and re-apply colors to chips, tabs and
|
|
130
|
+
* the indicator. Called when `tabGroupColors` / `tabGroupAccent`
|
|
131
|
+
* options change at runtime.
|
|
132
|
+
*/
|
|
133
|
+
TabGroupManager.prototype.refreshAccents = function () {
|
|
134
|
+
var e_3, _a;
|
|
135
|
+
var _b, _c;
|
|
136
|
+
try {
|
|
137
|
+
for (var _d = __values(this._ctx.group.model.getTabGroups()), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
138
|
+
var tabGroup = _e.value;
|
|
139
|
+
var entry = this._chipRenderers.get(tabGroup.id);
|
|
140
|
+
(_c = entry === null || entry === void 0 ? void 0 : (_b = entry.chip).update) === null || _c === void 0 ? void 0 : _c.call(_b, { tabGroup: tabGroup });
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
144
|
+
finally {
|
|
145
|
+
try {
|
|
146
|
+
if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
|
|
147
|
+
}
|
|
148
|
+
finally { if (e_3) throw e_3.error; }
|
|
149
|
+
}
|
|
150
|
+
this._updateTabGroupClasses();
|
|
151
|
+
};
|
|
152
|
+
TabGroupManager.prototype.positionAllChips = function () {
|
|
153
|
+
var e_4, _a;
|
|
154
|
+
if (this._chipRenderers.size === 0) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
try {
|
|
158
|
+
for (var _b = __values(this._ctx.group.model.getTabGroups()), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
159
|
+
var tabGroup = _c.value;
|
|
160
|
+
this._positionChipForGroup(tabGroup);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
164
|
+
finally {
|
|
165
|
+
try {
|
|
166
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
167
|
+
}
|
|
168
|
+
finally { if (e_4) throw e_4.error; }
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
TabGroupManager.prototype.snapshotChipWidths = function () {
|
|
172
|
+
var e_5, _a;
|
|
173
|
+
var widths = new Map();
|
|
174
|
+
try {
|
|
175
|
+
for (var _b = __values(this._chipRenderers), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
176
|
+
var _d = __read(_c.value, 2), groupId = _d[0], entry = _d[1];
|
|
177
|
+
widths.set(groupId, entry.chip.element.getBoundingClientRect().width);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
181
|
+
finally {
|
|
182
|
+
try {
|
|
183
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
184
|
+
}
|
|
185
|
+
finally { if (e_5) throw e_5.error; }
|
|
186
|
+
}
|
|
187
|
+
return widths;
|
|
188
|
+
};
|
|
189
|
+
TabGroupManager.prototype.positionUnderlines = function () {
|
|
190
|
+
var _a;
|
|
191
|
+
(_a = this._indicator) === null || _a === void 0 ? void 0 : _a.positionUnderlines();
|
|
192
|
+
};
|
|
193
|
+
TabGroupManager.prototype.trackUnderlines = function () {
|
|
194
|
+
var _a;
|
|
195
|
+
(_a = this._indicator) === null || _a === void 0 ? void 0 : _a.trackUnderlines();
|
|
196
|
+
};
|
|
197
|
+
TabGroupManager.prototype.setGroupDragImage = function (event, tabGroup, chipEl) {
|
|
198
|
+
if (!event.dataTransfer) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
var isVertical = this._ctx.getDirection() === 'vertical';
|
|
202
|
+
// Clone the entire tabs list so cloned nodes inherit all
|
|
203
|
+
// theme styles, CSS variables and class-based rules.
|
|
204
|
+
var clone = this._ctx.tabsList.cloneNode(true);
|
|
205
|
+
if (isVertical) {
|
|
206
|
+
// Force horizontal orientation for the drag ghost by
|
|
207
|
+
// removing vertical CSS classes and overriding writing-mode.
|
|
208
|
+
clone.classList.remove('dv-tabs-container-vertical', 'dv-vertical');
|
|
209
|
+
clone.classList.add('dv-horizontal');
|
|
210
|
+
clone.style.writingMode = 'horizontal-tb';
|
|
211
|
+
clone.style.height = "".concat(this._ctx.tabsList.offsetWidth, "px");
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
clone.style.height = "".concat(this._ctx.tabsList.offsetHeight, "px");
|
|
215
|
+
}
|
|
216
|
+
clone.style.width = 'auto';
|
|
217
|
+
clone.style.overflow = 'visible';
|
|
218
|
+
clone.style.pointerEvents = 'none';
|
|
219
|
+
// Remove all elements except the chip so the drag ghost
|
|
220
|
+
// shows only the chip regardless of the group's expanded state.
|
|
221
|
+
var children = Array.from(clone.children);
|
|
222
|
+
var realChildren = Array.from(this._ctx.tabsList.children);
|
|
223
|
+
for (var i = children.length - 1; i >= 0; i--) {
|
|
224
|
+
var real = realChildren[i];
|
|
225
|
+
if (real === chipEl) {
|
|
226
|
+
continue; // keep the chip only
|
|
227
|
+
}
|
|
228
|
+
children[i].remove();
|
|
229
|
+
}
|
|
230
|
+
// Wrap the clone in a minimal ancestor chain so that CSS
|
|
231
|
+
// selectors like `.dv-groupview.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab`
|
|
232
|
+
// match the cloned tabs and apply correct color/background.
|
|
233
|
+
var wrapper = document.createElement('div');
|
|
234
|
+
wrapper.className = 'dv-groupview dv-active-group';
|
|
235
|
+
wrapper.style.position = 'fixed';
|
|
236
|
+
wrapper.style.top = '-10000px';
|
|
237
|
+
wrapper.style.left = '0px';
|
|
238
|
+
wrapper.style.height = 'auto';
|
|
239
|
+
wrapper.style.width = 'auto';
|
|
240
|
+
wrapper.style.pointerEvents = 'none';
|
|
241
|
+
var actionsWrapper = document.createElement('div');
|
|
242
|
+
actionsWrapper.className = 'dv-tabs-and-actions-container';
|
|
243
|
+
actionsWrapper.style.height = 'auto';
|
|
244
|
+
actionsWrapper.style.width = 'auto';
|
|
245
|
+
wrapper.appendChild(actionsWrapper);
|
|
246
|
+
actionsWrapper.appendChild(clone);
|
|
247
|
+
// Append inside the dockview root so CSS variables are inherited
|
|
248
|
+
this._ctx.accessor.element.appendChild(wrapper);
|
|
249
|
+
// Compute cursor offset relative to the wrapper element.
|
|
250
|
+
// The cloned chip is the first .dv-tab-group-chip in the clone.
|
|
251
|
+
var clonedChip = clone.querySelector('.dv-tab-group-chip');
|
|
252
|
+
var chipRect = chipEl.getBoundingClientRect();
|
|
253
|
+
var cursorInChipX = event.clientX - chipRect.left;
|
|
254
|
+
var cursorInChipY = event.clientY - chipRect.top;
|
|
255
|
+
if (clonedChip) {
|
|
256
|
+
var clonedChipRect = clonedChip.getBoundingClientRect();
|
|
257
|
+
var wrapperRect = wrapper.getBoundingClientRect();
|
|
258
|
+
var offsetX = clonedChipRect.left - wrapperRect.left + cursorInChipX;
|
|
259
|
+
var offsetY = clonedChipRect.top - wrapperRect.top + cursorInChipY;
|
|
260
|
+
event.dataTransfer.setDragImage(wrapper, offsetX, offsetY);
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
event.dataTransfer.setDragImage(wrapper, cursorInChipX, cursorInChipY);
|
|
264
|
+
}
|
|
265
|
+
// Clean up after the browser captures the image
|
|
266
|
+
requestAnimationFrame(function () {
|
|
267
|
+
wrapper.remove();
|
|
268
|
+
});
|
|
269
|
+
};
|
|
270
|
+
TabGroupManager.prototype.cleanupTransition = function (panelId) {
|
|
271
|
+
var _a;
|
|
272
|
+
(_a = this._pendingTransitionCleanups.get(panelId)) === null || _a === void 0 ? void 0 : _a();
|
|
273
|
+
this._pendingTransitionCleanups.delete(panelId);
|
|
274
|
+
};
|
|
275
|
+
TabGroupManager.prototype.disposeAll = function () {
|
|
276
|
+
var e_6, _a, e_7, _b;
|
|
277
|
+
var _c;
|
|
278
|
+
(_c = this._indicator) === null || _c === void 0 ? void 0 : _c.dispose();
|
|
279
|
+
this._indicator = null;
|
|
280
|
+
try {
|
|
281
|
+
for (var _d = __values(this._pendingTransitionCleanups), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
282
|
+
var _f = __read(_e.value, 2), cleanup = _f[1];
|
|
283
|
+
cleanup();
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
287
|
+
finally {
|
|
288
|
+
try {
|
|
289
|
+
if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
|
|
290
|
+
}
|
|
291
|
+
finally { if (e_6) throw e_6.error; }
|
|
292
|
+
}
|
|
293
|
+
this._pendingTransitionCleanups.clear();
|
|
294
|
+
try {
|
|
295
|
+
for (var _g = __values(this._chipRenderers), _h = _g.next(); !_h.done; _h = _g.next()) {
|
|
296
|
+
var _j = __read(_h.value, 2), entry = _j[1];
|
|
297
|
+
entry.chip.element.remove();
|
|
298
|
+
entry.chip.dispose();
|
|
299
|
+
entry.disposable.dispose();
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
303
|
+
finally {
|
|
304
|
+
try {
|
|
305
|
+
if (_h && !_h.done && (_b = _g.return)) _b.call(_g);
|
|
306
|
+
}
|
|
307
|
+
finally { if (e_7) throw e_7.error; }
|
|
308
|
+
}
|
|
309
|
+
this._chipRenderers.clear();
|
|
310
|
+
};
|
|
311
|
+
TabGroupManager.prototype._ensureIndicator = function () {
|
|
312
|
+
var _this = this;
|
|
313
|
+
var _a, _b;
|
|
314
|
+
var mode = (_b = (_a = this._ctx.accessor.options.theme) === null || _a === void 0 ? void 0 : _a.tabGroupIndicator) !== null && _b !== void 0 ? _b : 'wrap';
|
|
315
|
+
var Ctor = mode === 'none' ? tabGroupIndicator_1.NoneTabGroupIndicator : tabGroupIndicator_1.WrapTabGroupIndicator;
|
|
316
|
+
// Re-create if the indicator type changed (e.g. theme switch)
|
|
317
|
+
if (this._indicator && !(this._indicator instanceof Ctor)) {
|
|
318
|
+
this._indicator.dispose();
|
|
319
|
+
this._indicator = null;
|
|
320
|
+
}
|
|
321
|
+
if (!this._indicator) {
|
|
322
|
+
this._indicator = new Ctor({
|
|
323
|
+
tabsList: this._ctx.tabsList,
|
|
324
|
+
getTabGroups: function () { return _this._ctx.group.model.getTabGroups(); },
|
|
325
|
+
getActivePanelId: function () { var _a; return (_a = _this._ctx.group.activePanel) === null || _a === void 0 ? void 0 : _a.id; },
|
|
326
|
+
getTabMap: function () { return _this._ctx.getTabMap(); },
|
|
327
|
+
getChipElement: function (id) { var _a; return (_a = _this._chipRenderers.get(id)) === null || _a === void 0 ? void 0 : _a.chip.element; },
|
|
328
|
+
getDirection: function () { return _this._ctx.getDirection(); },
|
|
329
|
+
getColorPalette: function () { return _this._ctx.accessor.tabGroupColorPalette; },
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
};
|
|
333
|
+
TabGroupManager.prototype._ensureChipForGroup = function (tabGroup) {
|
|
334
|
+
var _this = this;
|
|
335
|
+
if (this._chipRenderers.has(tabGroup.id)) {
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
338
|
+
var createChip = this._ctx.accessor.options.createTabGroupChipComponent;
|
|
339
|
+
var chip = createChip
|
|
340
|
+
? createChip(tabGroup)
|
|
341
|
+
: new tabGroupChip_1.TabGroupChip(this._ctx.accessor.tabGroupColorPalette);
|
|
342
|
+
chip.init({ tabGroup: tabGroup, api: this._ctx.accessor.api });
|
|
343
|
+
var disposables = [
|
|
344
|
+
tabGroup.onDidChange(function () {
|
|
345
|
+
var _a;
|
|
346
|
+
(_a = chip.update) === null || _a === void 0 ? void 0 : _a.call(chip, { tabGroup: tabGroup });
|
|
347
|
+
_this._updateTabGroupClasses();
|
|
348
|
+
}),
|
|
349
|
+
tabGroup.onDidPanelChange(function () {
|
|
350
|
+
_this._positionChipForGroup(tabGroup);
|
|
351
|
+
_this._updateTabGroupClasses();
|
|
352
|
+
}),
|
|
353
|
+
tabGroup.onDidCollapseChange(function () {
|
|
354
|
+
_this._updateTabGroupClasses();
|
|
355
|
+
}),
|
|
356
|
+
];
|
|
357
|
+
// Wire chip context menu and drag for all chip renderers
|
|
358
|
+
if (chip instanceof tabGroupChip_1.TabGroupChip) {
|
|
359
|
+
disposables.push(chip.onContextMenu(function (event) {
|
|
360
|
+
_this._callbacks.onChipContextMenu(tabGroup, event);
|
|
361
|
+
}), chip.onDragStart(function (event) {
|
|
362
|
+
_this._callbacks.onChipDragStart(tabGroup, chip, event);
|
|
363
|
+
}));
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
disposables.push((0, events_1.addDisposableListener)(chip.element, 'contextmenu', function (event) {
|
|
367
|
+
_this._callbacks.onChipContextMenu(tabGroup, event);
|
|
368
|
+
}), (0, events_1.addDisposableListener)(chip.element, 'dragstart', function (event) {
|
|
369
|
+
_this._callbacks.onChipDragStart(tabGroup, chip, event);
|
|
370
|
+
}));
|
|
371
|
+
}
|
|
372
|
+
var disposable = new (lifecycle_1.CompositeDisposable.bind.apply(lifecycle_1.CompositeDisposable, __spreadArray([void 0], __read(disposables), false)))();
|
|
373
|
+
this._chipRenderers.set(tabGroup.id, { chip: chip, disposable: disposable });
|
|
374
|
+
// Group is born collapsed (cross-group drop, layout restore, etc.):
|
|
375
|
+
// its tabs are about to be added without the collapsed class. Skip
|
|
376
|
+
// the animation in the upcoming _updateTabGroupClasses call so they
|
|
377
|
+
// apply the class instantly instead of transitioning from expanded.
|
|
378
|
+
if (tabGroup.collapsed) {
|
|
379
|
+
this._skipNextCollapseAnimation = true;
|
|
380
|
+
}
|
|
381
|
+
};
|
|
382
|
+
TabGroupManager.prototype._positionChipForGroup = function (tabGroup) {
|
|
383
|
+
var entry = this._chipRenderers.get(tabGroup.id);
|
|
384
|
+
if (!entry) {
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
387
|
+
var chipEl = entry.chip.element;
|
|
388
|
+
var panelIds = tabGroup.panelIds;
|
|
389
|
+
if (panelIds.length === 0) {
|
|
390
|
+
chipEl.remove();
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
// Find the first tab element of this group
|
|
394
|
+
var firstPanelId = panelIds[0];
|
|
395
|
+
var firstTabEntry = this._ctx.getTabMap().get(firstPanelId);
|
|
396
|
+
if (!firstTabEntry) {
|
|
397
|
+
chipEl.remove();
|
|
398
|
+
return;
|
|
399
|
+
}
|
|
400
|
+
// Insert chip before the first tab of the group
|
|
401
|
+
var firstTabEl = firstTabEntry.value.element;
|
|
402
|
+
if (chipEl.nextSibling !== firstTabEl) {
|
|
403
|
+
this._ctx.tabsList.insertBefore(chipEl, firstTabEl);
|
|
404
|
+
}
|
|
405
|
+
};
|
|
406
|
+
TabGroupManager.prototype._updateTabGroupClasses = function () {
|
|
407
|
+
var e_8, _a, e_9, _b, e_10, _c, e_11, _d, e_12, _e, e_13, _f, e_14, _g;
|
|
408
|
+
var _this = this;
|
|
409
|
+
var _h;
|
|
410
|
+
var model = this._ctx.group.model;
|
|
411
|
+
var tabGroups = model.getTabGroups();
|
|
412
|
+
var tabs = this._ctx.getTabs();
|
|
413
|
+
var tabMap = this._ctx.getTabMap();
|
|
414
|
+
var hasAnimation = false;
|
|
415
|
+
// Build a lookup: panelId → tabGroup
|
|
416
|
+
var panelGroupMap = new Map();
|
|
417
|
+
try {
|
|
418
|
+
for (var tabGroups_2 = __values(tabGroups), tabGroups_2_1 = tabGroups_2.next(); !tabGroups_2_1.done; tabGroups_2_1 = tabGroups_2.next()) {
|
|
419
|
+
var tg = tabGroups_2_1.value;
|
|
420
|
+
try {
|
|
421
|
+
for (var _j = (e_9 = void 0, __values(tg.panelIds)), _k = _j.next(); !_k.done; _k = _j.next()) {
|
|
422
|
+
var pid = _k.value;
|
|
423
|
+
panelGroupMap.set(pid, tg);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
catch (e_9_1) { e_9 = { error: e_9_1 }; }
|
|
427
|
+
finally {
|
|
428
|
+
try {
|
|
429
|
+
if (_k && !_k.done && (_b = _j.return)) _b.call(_j);
|
|
430
|
+
}
|
|
431
|
+
finally { if (e_9) throw e_9.error; }
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
436
|
+
finally {
|
|
437
|
+
try {
|
|
438
|
+
if (tabGroups_2_1 && !tabGroups_2_1.done && (_a = tabGroups_2.return)) _a.call(tabGroups_2);
|
|
439
|
+
}
|
|
440
|
+
finally { if (e_8) throw e_8.error; }
|
|
441
|
+
}
|
|
442
|
+
var _loop_1 = function (tabEntry) {
|
|
443
|
+
var tab = tabEntry.value;
|
|
444
|
+
var panelId = tab.panel.id;
|
|
445
|
+
var tg = panelGroupMap.get(panelId);
|
|
446
|
+
var isGrouped = !!tg;
|
|
447
|
+
(0, dom_1.toggleClass)(tab.element, 'dv-tab--grouped', isGrouped);
|
|
448
|
+
if (tg) {
|
|
449
|
+
var ids = tg.panelIds;
|
|
450
|
+
var isFirst = ids[0] === panelId;
|
|
451
|
+
var isLast = ids[ids.length - 1] === panelId;
|
|
452
|
+
(0, dom_1.toggleClass)(tab.element, 'dv-tab--group-first', isFirst);
|
|
453
|
+
(0, dom_1.toggleClass)(tab.element, 'dv-tab--group-last', isLast);
|
|
454
|
+
// Expose the resolved group color as a CSS custom property
|
|
455
|
+
// so pure-CSS themes can use it for borders, backgrounds, etc.
|
|
456
|
+
(0, tabGroupAccent_1.applyTabGroupAccent)(tab.element, tg.color, this_1._ctx.accessor.tabGroupColorPalette);
|
|
457
|
+
// Collapse / expand with animation
|
|
458
|
+
var isCollapsed = tab.element.classList.contains('dv-tab--group-collapsed');
|
|
459
|
+
if (!tg.collapsed && isCollapsed) {
|
|
460
|
+
// Collapsed → expanding: animate back
|
|
461
|
+
hasAnimation = true;
|
|
462
|
+
tab.element.classList.remove('dv-tab--group-collapsed');
|
|
463
|
+
tab.element.classList.add('dv-tab--group-expanding');
|
|
464
|
+
// Clean up any previous transitionend listener
|
|
465
|
+
// from a rapid collapse/expand cycle
|
|
466
|
+
(_h = this_1._pendingTransitionCleanups.get(panelId)) === null || _h === void 0 ? void 0 : _h();
|
|
467
|
+
var onEnd_1 = function () {
|
|
468
|
+
tab.element.classList.remove('dv-tab--group-expanding');
|
|
469
|
+
tab.element.style.removeProperty('width');
|
|
470
|
+
tab.element.removeEventListener('transitionend', onEnd_1);
|
|
471
|
+
clearTimeout(fallbackTimer_1);
|
|
472
|
+
_this._pendingTransitionCleanups.delete(panelId);
|
|
473
|
+
};
|
|
474
|
+
// Fallback in case transitionend never fires
|
|
475
|
+
// (e.g. element removed from DOM mid-transition)
|
|
476
|
+
var fallbackTimer_1 = setTimeout(onEnd_1, 300);
|
|
477
|
+
this_1._pendingTransitionCleanups.set(panelId, onEnd_1);
|
|
478
|
+
tab.element.addEventListener('transitionend', onEnd_1);
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
else {
|
|
482
|
+
(0, dom_1.toggleClass)(tab.element, 'dv-tab--group-first', false);
|
|
483
|
+
(0, dom_1.toggleClass)(tab.element, 'dv-tab--group-last', false);
|
|
484
|
+
tab.element.classList.remove('dv-tab--group-collapsed', 'dv-tab--group-expanding');
|
|
485
|
+
tab.element.style.removeProperty('width');
|
|
486
|
+
tab.element.style.removeProperty('--dv-tab-group-color');
|
|
487
|
+
}
|
|
488
|
+
};
|
|
489
|
+
var this_1 = this;
|
|
490
|
+
try {
|
|
491
|
+
for (var tabs_1 = __values(tabs), tabs_1_1 = tabs_1.next(); !tabs_1_1.done; tabs_1_1 = tabs_1.next()) {
|
|
492
|
+
var tabEntry = tabs_1_1.value;
|
|
493
|
+
_loop_1(tabEntry);
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
catch (e_10_1) { e_10 = { error: e_10_1 }; }
|
|
497
|
+
finally {
|
|
498
|
+
try {
|
|
499
|
+
if (tabs_1_1 && !tabs_1_1.done && (_c = tabs_1.return)) _c.call(tabs_1);
|
|
500
|
+
}
|
|
501
|
+
finally { if (e_10) throw e_10.error; }
|
|
502
|
+
}
|
|
503
|
+
// Track active group IDs for underline/collapse handling
|
|
504
|
+
var activeGroupIds = new Set();
|
|
505
|
+
try {
|
|
506
|
+
// Handle collapse animation per group
|
|
507
|
+
for (var tabGroups_3 = __values(tabGroups), tabGroups_3_1 = tabGroups_3.next(); !tabGroups_3_1.done; tabGroups_3_1 = tabGroups_3.next()) {
|
|
508
|
+
var tg = tabGroups_3_1.value;
|
|
509
|
+
activeGroupIds.add(tg.id);
|
|
510
|
+
// Collapse animation
|
|
511
|
+
var hasNewCollapse = tg.collapsed &&
|
|
512
|
+
tg.panelIds.some(function (pid) {
|
|
513
|
+
var te = tabMap.get(pid);
|
|
514
|
+
return (te &&
|
|
515
|
+
!te.value.element.classList.contains('dv-tab--group-collapsed'));
|
|
516
|
+
});
|
|
517
|
+
if (hasNewCollapse) {
|
|
518
|
+
if (this._skipNextCollapseAnimation) {
|
|
519
|
+
// Apply collapsed state instantly (no animation).
|
|
520
|
+
// Disable transitions so the CSS transition on
|
|
521
|
+
// dv-tab--group-collapsed doesn't fire.
|
|
522
|
+
var affected = [];
|
|
523
|
+
try {
|
|
524
|
+
for (var _l = (e_12 = void 0, __values(tg.panelIds)), _m = _l.next(); !_m.done; _m = _l.next()) {
|
|
525
|
+
var pid = _m.value;
|
|
526
|
+
var te = tabMap.get(pid);
|
|
527
|
+
if (te) {
|
|
528
|
+
te.value.element.style.transition = 'none';
|
|
529
|
+
te.value.element.classList.add('dv-tab--group-collapsed');
|
|
530
|
+
affected.push(te.value.element);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
catch (e_12_1) { e_12 = { error: e_12_1 }; }
|
|
535
|
+
finally {
|
|
536
|
+
try {
|
|
537
|
+
if (_m && !_m.done && (_e = _l.return)) _e.call(_l);
|
|
538
|
+
}
|
|
539
|
+
finally { if (e_12) throw e_12.error; }
|
|
540
|
+
}
|
|
541
|
+
if (affected.length > 0) {
|
|
542
|
+
void affected[0].offsetHeight; // single reflow
|
|
543
|
+
try {
|
|
544
|
+
for (var affected_1 = (e_13 = void 0, __values(affected)), affected_1_1 = affected_1.next(); !affected_1_1.done; affected_1_1 = affected_1.next()) {
|
|
545
|
+
var el = affected_1_1.value;
|
|
546
|
+
el.style.removeProperty('transition');
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
catch (e_13_1) { e_13 = { error: e_13_1 }; }
|
|
550
|
+
finally {
|
|
551
|
+
try {
|
|
552
|
+
if (affected_1_1 && !affected_1_1.done && (_f = affected_1.return)) _f.call(affected_1);
|
|
553
|
+
}
|
|
554
|
+
finally { if (e_13) throw e_13.error; }
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
else {
|
|
559
|
+
hasAnimation = true;
|
|
560
|
+
var isVert = this._ctx.getDirection() === 'vertical';
|
|
561
|
+
try {
|
|
562
|
+
for (var _o = (e_14 = void 0, __values(tg.panelIds)), _p = _o.next(); !_p.done; _p = _o.next()) {
|
|
563
|
+
var pid = _p.value;
|
|
564
|
+
var te = tabMap.get(pid);
|
|
565
|
+
if (te &&
|
|
566
|
+
!te.value.element.classList.contains('dv-tab--group-collapsed')) {
|
|
567
|
+
var rect = te.value.element.getBoundingClientRect();
|
|
568
|
+
if (isVert) {
|
|
569
|
+
te.value.element.style.height = "".concat(rect.height, "px");
|
|
570
|
+
}
|
|
571
|
+
else {
|
|
572
|
+
te.value.element.style.width = "".concat(rect.width, "px");
|
|
573
|
+
}
|
|
574
|
+
void te.value.element.offsetHeight; // force reflow
|
|
575
|
+
te.value.element.classList.add('dv-tab--group-collapsed');
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
catch (e_14_1) { e_14 = { error: e_14_1 }; }
|
|
580
|
+
finally {
|
|
581
|
+
try {
|
|
582
|
+
if (_p && !_p.done && (_g = _o.return)) _g.call(_o);
|
|
583
|
+
}
|
|
584
|
+
finally { if (e_14) throw e_14.error; }
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
catch (e_11_1) { e_11 = { error: e_11_1 }; }
|
|
591
|
+
finally {
|
|
592
|
+
try {
|
|
593
|
+
if (tabGroups_3_1 && !tabGroups_3_1.done && (_d = tabGroups_3.return)) _d.call(tabGroups_3);
|
|
594
|
+
}
|
|
595
|
+
finally { if (e_11) throw e_11.error; }
|
|
596
|
+
}
|
|
597
|
+
this._skipNextCollapseAnimation = false;
|
|
598
|
+
// Sync indicator underlines and position them
|
|
599
|
+
this._ensureIndicator();
|
|
600
|
+
if (this._indicator) {
|
|
601
|
+
this._indicator.syncUnderlineElements(activeGroupIds);
|
|
602
|
+
if (hasAnimation) {
|
|
603
|
+
this._indicator.trackUnderlines();
|
|
604
|
+
}
|
|
605
|
+
else {
|
|
606
|
+
this._indicator.positionUnderlines();
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
};
|
|
610
|
+
return TabGroupManager;
|
|
611
|
+
}());
|
|
612
|
+
exports.TabGroupManager = TabGroupManager;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createDropdownElementHandle =
|
|
3
|
+
exports.createDropdownElementHandle = createDropdownElementHandle;
|
|
4
4
|
var svg_1 = require("../../../svg");
|
|
5
5
|
function createDropdownElementHandle() {
|
|
6
6
|
var el = document.createElement('div');
|
|
@@ -17,4 +17,3 @@ function createDropdownElementHandle() {
|
|
|
17
17
|
},
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
|
-
exports.createDropdownElementHandle = createDropdownElementHandle;
|