dockview-core 6.3.0 → 6.5.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 +1 -0
- package/dist/cjs/dnd/backend.d.ts +70 -0
- package/dist/cjs/dnd/backend.js +171 -0
- package/dist/cjs/dnd/dropOverlay.d.ts +20 -0
- package/dist/cjs/dnd/dropOverlay.js +197 -0
- package/dist/cjs/dnd/droptarget.d.ts +20 -6
- package/dist/cjs/dnd/droptarget.js +14 -208
- package/dist/cjs/dnd/pointer/index.d.ts +11 -0
- package/dist/cjs/dnd/pointer/index.js +13 -0
- package/dist/cjs/dnd/pointer/longPress.d.ts +32 -0
- package/dist/cjs/dnd/pointer/longPress.js +151 -0
- package/dist/cjs/dnd/pointer/pointerDragController.d.ts +60 -0
- package/dist/cjs/dnd/pointer/pointerDragController.js +241 -0
- package/dist/cjs/dnd/pointer/pointerDragSource.d.ts +61 -0
- package/dist/cjs/dnd/pointer/pointerDragSource.js +195 -0
- package/dist/cjs/dnd/pointer/pointerDropTarget.d.ts +39 -0
- package/dist/cjs/dnd/pointer/pointerDropTarget.js +198 -0
- package/dist/cjs/dnd/pointer/pointerGhost.d.ts +30 -0
- package/dist/cjs/dnd/pointer/pointerGhost.js +44 -0
- package/dist/cjs/dnd/pointer/types.d.ts +16 -0
- package/dist/cjs/dnd/pointer/types.js +2 -0
- package/dist/cjs/dockview/components/panel/content.d.ts +3 -1
- package/dist/cjs/dockview/components/panel/content.js +33 -16
- package/dist/cjs/dockview/components/popupService.js +34 -0
- package/dist/cjs/dockview/components/tab/tab.d.ts +11 -3
- package/dist/cjs/dockview/components/tab/tab.js +151 -117
- package/dist/cjs/dockview/components/titlebar/tabGroupChip.d.ts +9 -2
- package/dist/cjs/dockview/components/titlebar/tabGroupChip.js +15 -6
- package/dist/cjs/dockview/components/titlebar/tabGroups.d.ts +33 -5
- package/dist/cjs/dockview/components/titlebar/tabGroups.js +231 -40
- package/dist/cjs/dockview/components/titlebar/tabs.d.ts +38 -1
- package/dist/cjs/dockview/components/titlebar/tabs.js +372 -251
- package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts +5 -3
- package/dist/cjs/dockview/components/titlebar/voidContainer.d.ts +6 -2
- package/dist/cjs/dockview/components/titlebar/voidContainer.js +189 -27
- package/dist/cjs/dockview/contextMenu.js +19 -4
- package/dist/cjs/dockview/dndCapabilities.d.ts +19 -0
- package/dist/cjs/dockview/dndCapabilities.js +39 -0
- package/dist/cjs/dockview/dockviewComponent.d.ts +1 -0
- package/dist/cjs/dockview/dockviewComponent.js +54 -33
- package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +9 -5
- package/dist/cjs/dockview/dockviewGroupPanelModel.js +25 -11
- package/dist/cjs/dockview/events.d.ts +2 -1
- package/dist/cjs/dockview/events.js +1 -0
- package/dist/cjs/dockview/options.d.ts +18 -3
- package/dist/cjs/dockview/options.js +1 -0
- package/dist/cjs/dom.js +7 -3
- package/dist/cjs/overlay/overlay.d.ts +12 -0
- package/dist/cjs/overlay/overlay.js +84 -16
- package/dist/cjs/paneview/draggablePaneviewPanel.d.ts +3 -1
- package/dist/cjs/paneview/draggablePaneviewPanel.js +27 -26
- package/dist/cjs/paneview/options.d.ts +4 -3
- package/dist/dockview-core.js +2199 -834
- 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 +2202 -837
- package/dist/esm/dnd/backend.d.ts +70 -0
- package/dist/esm/dnd/backend.js +148 -0
- package/dist/esm/dnd/dropOverlay.d.ts +20 -0
- package/dist/esm/dnd/dropOverlay.js +192 -0
- package/dist/esm/dnd/droptarget.d.ts +20 -6
- package/dist/esm/dnd/droptarget.js +16 -210
- package/dist/esm/dnd/pointer/index.d.ts +11 -0
- package/dist/esm/dnd/pointer/index.js +5 -0
- package/dist/esm/dnd/pointer/longPress.d.ts +32 -0
- package/dist/esm/dnd/pointer/longPress.js +127 -0
- package/dist/esm/dnd/pointer/pointerDragController.d.ts +60 -0
- package/dist/esm/dnd/pointer/pointerDragController.js +191 -0
- package/dist/esm/dnd/pointer/pointerDragSource.d.ts +61 -0
- package/dist/esm/dnd/pointer/pointerDragSource.js +171 -0
- package/dist/esm/dnd/pointer/pointerDropTarget.d.ts +39 -0
- package/dist/esm/dnd/pointer/pointerDropTarget.js +168 -0
- package/dist/esm/dnd/pointer/pointerGhost.d.ts +30 -0
- package/dist/esm/dnd/pointer/pointerGhost.js +39 -0
- package/dist/esm/dnd/pointer/types.d.ts +16 -0
- package/dist/esm/dnd/pointer/types.js +1 -0
- package/dist/esm/dockview/components/panel/content.d.ts +3 -1
- package/dist/esm/dockview/components/panel/content.js +33 -16
- package/dist/esm/dockview/components/popupService.js +34 -0
- package/dist/esm/dockview/components/tab/tab.d.ts +11 -3
- package/dist/esm/dockview/components/tab/tab.js +139 -114
- package/dist/esm/dockview/components/titlebar/tabGroupChip.d.ts +9 -2
- package/dist/esm/dockview/components/titlebar/tabGroupChip.js +15 -6
- package/dist/esm/dockview/components/titlebar/tabGroups.d.ts +33 -5
- package/dist/esm/dockview/components/titlebar/tabGroups.js +177 -12
- package/dist/esm/dockview/components/titlebar/tabs.d.ts +38 -1
- package/dist/esm/dockview/components/titlebar/tabs.js +348 -227
- package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts +5 -3
- package/dist/esm/dockview/components/titlebar/voidContainer.d.ts +6 -2
- package/dist/esm/dockview/components/titlebar/voidContainer.js +179 -31
- package/dist/esm/dockview/contextMenu.js +19 -4
- package/dist/esm/dockview/dndCapabilities.d.ts +19 -0
- package/dist/esm/dockview/dndCapabilities.js +36 -0
- package/dist/esm/dockview/dockviewComponent.d.ts +1 -0
- package/dist/esm/dockview/dockviewComponent.js +55 -34
- package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +9 -5
- package/dist/esm/dockview/dockviewGroupPanelModel.js +24 -11
- package/dist/esm/dockview/events.d.ts +2 -1
- package/dist/esm/dockview/events.js +1 -0
- package/dist/esm/dockview/options.d.ts +18 -3
- package/dist/esm/dockview/options.js +1 -0
- package/dist/esm/dom.js +7 -3
- package/dist/esm/overlay/overlay.d.ts +12 -0
- package/dist/esm/overlay/overlay.js +85 -17
- package/dist/esm/paneview/draggablePaneviewPanel.d.ts +3 -1
- package/dist/esm/paneview/draggablePaneviewPanel.js +26 -20
- package/dist/esm/paneview/options.d.ts +4 -3
- package/dist/package/main.cjs.js +2202 -837
- package/dist/package/main.cjs.min.js +2 -2
- package/dist/package/main.esm.min.mjs +2 -2
- package/dist/package/main.esm.mjs +2202 -837
- package/dist/styles/dockview.css +117 -1
- package/package.json +3 -1
- package/dist/cjs/dnd/abstractDragHandler.d.ts +0 -14
- package/dist/cjs/dnd/abstractDragHandler.js +0 -86
- package/dist/cjs/dnd/groupDragHandler.d.ts +0 -12
- package/dist/cjs/dnd/groupDragHandler.js +0 -104
- package/dist/esm/dnd/abstractDragHandler.d.ts +0 -14
- package/dist/esm/dnd/abstractDragHandler.js +0 -63
- package/dist/esm/dnd/groupDragHandler.d.ts +0 -12
- package/dist/esm/dnd/groupDragHandler.js +0 -81
|
@@ -39,9 +39,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
39
39
|
exports.TabGroupManager = void 0;
|
|
40
40
|
var dom_1 = require("../../../dom");
|
|
41
41
|
var events_1 = require("../../../events");
|
|
42
|
+
var dataTransfer_1 = require("../../../dnd/dataTransfer");
|
|
43
|
+
var backend_1 = require("../../../dnd/backend");
|
|
44
|
+
var longPress_1 = require("../../../dnd/pointer/longPress");
|
|
42
45
|
var lifecycle_1 = require("../../../lifecycle");
|
|
46
|
+
var dndCapabilities_1 = require("../../dndCapabilities");
|
|
43
47
|
var tabGroupAccent_1 = require("../../tabGroupAccent");
|
|
44
48
|
var tabGroupChip_1 = require("./tabGroupChip");
|
|
49
|
+
var droptarget_1 = require("../../../dnd/droptarget");
|
|
50
|
+
var dataTransfer_2 = require("../../../dnd/dataTransfer");
|
|
45
51
|
var tabGroupIndicator_1 = require("./tabGroupIndicator");
|
|
46
52
|
var EMPTY_MAP = new Map();
|
|
47
53
|
var TabGroupManager = /** @class */ (function () {
|
|
@@ -168,8 +174,25 @@ var TabGroupManager = /** @class */ (function () {
|
|
|
168
174
|
finally { if (e_4) throw e_4.error; }
|
|
169
175
|
}
|
|
170
176
|
};
|
|
171
|
-
TabGroupManager.prototype.
|
|
177
|
+
TabGroupManager.prototype.updateDirection = function () {
|
|
172
178
|
var e_5, _a;
|
|
179
|
+
var isVertical = this._ctx.getDirection() === 'vertical';
|
|
180
|
+
try {
|
|
181
|
+
for (var _b = __values(this._chipRenderers), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
182
|
+
var _d = __read(_c.value, 2), entry = _d[1];
|
|
183
|
+
entry.dropTarget.setTargetZones(isVertical ? ['top'] : ['left']);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
187
|
+
finally {
|
|
188
|
+
try {
|
|
189
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
190
|
+
}
|
|
191
|
+
finally { if (e_5) throw e_5.error; }
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
TabGroupManager.prototype.snapshotChipWidths = function () {
|
|
195
|
+
var e_6, _a;
|
|
173
196
|
var widths = new Map();
|
|
174
197
|
try {
|
|
175
198
|
for (var _b = __values(this._chipRenderers), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
@@ -177,12 +200,12 @@ var TabGroupManager = /** @class */ (function () {
|
|
|
177
200
|
widths.set(groupId, entry.chip.element.getBoundingClientRect().width);
|
|
178
201
|
}
|
|
179
202
|
}
|
|
180
|
-
catch (
|
|
203
|
+
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
181
204
|
finally {
|
|
182
205
|
try {
|
|
183
206
|
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
184
207
|
}
|
|
185
|
-
finally { if (
|
|
208
|
+
finally { if (e_6) throw e_6.error; }
|
|
186
209
|
}
|
|
187
210
|
return widths;
|
|
188
211
|
};
|
|
@@ -272,8 +295,58 @@ var TabGroupManager = /** @class */ (function () {
|
|
|
272
295
|
(_a = this._pendingTransitionCleanups.get(panelId)) === null || _a === void 0 ? void 0 : _a();
|
|
273
296
|
this._pendingTransitionCleanups.delete(panelId);
|
|
274
297
|
};
|
|
298
|
+
TabGroupManager.prototype.updateDragAndDropState = function () {
|
|
299
|
+
var e_7, _a;
|
|
300
|
+
var caps = (0, dndCapabilities_1.resolveDndCapabilities)(this._ctx.accessor.options);
|
|
301
|
+
try {
|
|
302
|
+
for (var _b = __values(this._chipRenderers.values()), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
303
|
+
var entry = _c.value;
|
|
304
|
+
entry.chip.element.draggable = caps.html5;
|
|
305
|
+
entry.html5DragSource.setDisabled(!caps.html5);
|
|
306
|
+
entry.pointerDragSource.setDisabled(!caps.pointer);
|
|
307
|
+
entry.pointerDragSource.setTouchOnly(!caps.pointerHandlesMouse);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
311
|
+
finally {
|
|
312
|
+
try {
|
|
313
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
314
|
+
}
|
|
315
|
+
finally { if (e_7) throw e_7.error; }
|
|
316
|
+
}
|
|
317
|
+
};
|
|
318
|
+
/**
|
|
319
|
+
* Synchronously dispose the chip drag sources for an in-flight chip
|
|
320
|
+
* drag. Called from `_commitGroupMove` so the transfer payload +
|
|
321
|
+
* iframe shield are released BEFORE the cross-group move detaches
|
|
322
|
+
* the chip (chip dispose is scheduled on a microtask via
|
|
323
|
+
* `_scheduleTabGroupUpdate`, which is too late for callers that read
|
|
324
|
+
* `getPanelData()` synchronously after the move). Idempotent — the
|
|
325
|
+
* subsequent `update()` will also dispose the sources.
|
|
326
|
+
*/
|
|
327
|
+
TabGroupManager.prototype.disposeChipDrag = function (tabGroupId) {
|
|
328
|
+
var _a, _b;
|
|
329
|
+
var entry = this._chipRenderers.get(tabGroupId);
|
|
330
|
+
if (!entry) {
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
// Optional-chained because tests may inject minimal entries
|
|
334
|
+
// that skip the manager's normal `_ensureChipForGroup` flow.
|
|
335
|
+
(_a = entry.html5DragSource) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
336
|
+
(_b = entry.pointerDragSource) === null || _b === void 0 ? void 0 : _b.dispose();
|
|
337
|
+
};
|
|
338
|
+
/** Cloned chip rect used as the pointer follow-finger ghost. */
|
|
339
|
+
TabGroupManager.prototype._buildChipGhostElement = function (chipEl) {
|
|
340
|
+
var style = getComputedStyle(chipEl);
|
|
341
|
+
var clone = chipEl.cloneNode(true);
|
|
342
|
+
Array.from(style).forEach(function (key) {
|
|
343
|
+
clone.style.setProperty(key, style.getPropertyValue(key), style.getPropertyPriority(key));
|
|
344
|
+
});
|
|
345
|
+
clone.style.position = 'absolute';
|
|
346
|
+
return clone;
|
|
347
|
+
};
|
|
275
348
|
TabGroupManager.prototype.disposeAll = function () {
|
|
276
|
-
var
|
|
349
|
+
var e_8, _a, e_9, _b;
|
|
277
350
|
var _c;
|
|
278
351
|
(_c = this._indicator) === null || _c === void 0 ? void 0 : _c.dispose();
|
|
279
352
|
this._indicator = null;
|
|
@@ -283,12 +356,12 @@ var TabGroupManager = /** @class */ (function () {
|
|
|
283
356
|
cleanup();
|
|
284
357
|
}
|
|
285
358
|
}
|
|
286
|
-
catch (
|
|
359
|
+
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
287
360
|
finally {
|
|
288
361
|
try {
|
|
289
362
|
if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
|
|
290
363
|
}
|
|
291
|
-
finally { if (
|
|
364
|
+
finally { if (e_8) throw e_8.error; }
|
|
292
365
|
}
|
|
293
366
|
this._pendingTransitionCleanups.clear();
|
|
294
367
|
try {
|
|
@@ -299,12 +372,12 @@ var TabGroupManager = /** @class */ (function () {
|
|
|
299
372
|
entry.disposable.dispose();
|
|
300
373
|
}
|
|
301
374
|
}
|
|
302
|
-
catch (
|
|
375
|
+
catch (e_9_1) { e_9 = { error: e_9_1 }; }
|
|
303
376
|
finally {
|
|
304
377
|
try {
|
|
305
378
|
if (_h && !_h.done && (_b = _g.return)) _b.call(_g);
|
|
306
379
|
}
|
|
307
|
-
finally { if (
|
|
380
|
+
finally { if (e_9) throw e_9.error; }
|
|
308
381
|
}
|
|
309
382
|
this._chipRenderers.clear();
|
|
310
383
|
};
|
|
@@ -340,6 +413,78 @@ var TabGroupManager = /** @class */ (function () {
|
|
|
340
413
|
? createChip(tabGroup)
|
|
341
414
|
: new tabGroupChip_1.TabGroupChip(this._ctx.accessor.tabGroupColorPalette);
|
|
342
415
|
chip.init({ tabGroup: tabGroup, api: this._ctx.accessor.api });
|
|
416
|
+
var caps = (0, dndCapabilities_1.resolveDndCapabilities)(this._ctx.accessor.options);
|
|
417
|
+
chip.element.draggable = caps.html5;
|
|
418
|
+
var panelTransfer = dataTransfer_1.LocalSelectionTransfer.getInstance();
|
|
419
|
+
// Shared `getData` for both backends. Sets a group-level
|
|
420
|
+
// PanelTransfer (panelId=null, tabGroupId identifies the group).
|
|
421
|
+
// The returned disposer clears it on drag end.
|
|
422
|
+
var getData = function () {
|
|
423
|
+
panelTransfer.setData([
|
|
424
|
+
new dataTransfer_1.PanelTransfer(_this._ctx.accessor.id, _this._ctx.group.id, null, tabGroup.id),
|
|
425
|
+
], dataTransfer_1.PanelTransfer.prototype);
|
|
426
|
+
return {
|
|
427
|
+
dispose: function () {
|
|
428
|
+
panelTransfer.clearData(dataTransfer_1.PanelTransfer.prototype);
|
|
429
|
+
},
|
|
430
|
+
};
|
|
431
|
+
};
|
|
432
|
+
// The chip's HTML5 drag image is the cloned tabs list (chip only),
|
|
433
|
+
// mounted inside the dockview root for CSS-variable inheritance and
|
|
434
|
+
// positioned against the chip's in-place rect. Layout-dependent
|
|
435
|
+
// offset means we set the drag image directly in `onDragStart`
|
|
436
|
+
// (inside the dragstart handler) rather than via the generic
|
|
437
|
+
// `createGhost` factory, which only knows about ghost specs that
|
|
438
|
+
// can be appended to `document.body`.
|
|
439
|
+
var html5DragSource = backend_1.html5Backend.createDragSource(chip.element, {
|
|
440
|
+
getData: getData,
|
|
441
|
+
disabled: !caps.html5,
|
|
442
|
+
isCancelled: function () {
|
|
443
|
+
return !(0, dndCapabilities_1.resolveDndCapabilities)(_this._ctx.accessor.options).html5;
|
|
444
|
+
},
|
|
445
|
+
onDragStart: function (event) {
|
|
446
|
+
// Type guard via `dataTransfer` — `instanceof DragEvent`
|
|
447
|
+
// would throw in jsdom which doesn't ship a DragEvent
|
|
448
|
+
// constructor.
|
|
449
|
+
if ('dataTransfer' in event && event.dataTransfer) {
|
|
450
|
+
_this.setGroupDragImage(event, tabGroup, chip.element);
|
|
451
|
+
}
|
|
452
|
+
_this._callbacks.onChipDragStart(tabGroup, chip, event);
|
|
453
|
+
},
|
|
454
|
+
onDragEnd: function (event) {
|
|
455
|
+
var _a, _b;
|
|
456
|
+
(_b = (_a = _this._callbacks).onChipDragEnd) === null || _b === void 0 ? void 0 : _b.call(_a, tabGroup, chip, event);
|
|
457
|
+
},
|
|
458
|
+
});
|
|
459
|
+
// Synchronous panelTransfer cleanup directly on the chip element.
|
|
460
|
+
// `Html5DragSource`'s dragend defers data disposal via `setTimeout(0)`
|
|
461
|
+
// so drop handlers can read the payload — but a chip drag that
|
|
462
|
+
// ends via `moveGroupOrPanel` (no actual drop event) needs the
|
|
463
|
+
// singleton cleared immediately, otherwise a synchronous
|
|
464
|
+
// `getPanelData()` after the move still sees the stale chip
|
|
465
|
+
// payload. Attached directly (not via `addDisposableListener`) so
|
|
466
|
+
// the listener survives chip disposal in the detach-then-dragend
|
|
467
|
+
// cross-group path; `once: true` auto-removes after the single
|
|
468
|
+
// dragend that we care about. (#1254)
|
|
469
|
+
chip.element.addEventListener('dragend', function () {
|
|
470
|
+
panelTransfer.clearData(dataTransfer_1.PanelTransfer.prototype);
|
|
471
|
+
}, { once: true });
|
|
472
|
+
var pointerDragSource = backend_1.pointerBackend.createDragSource(chip.element, {
|
|
473
|
+
getData: getData,
|
|
474
|
+
disabled: !caps.pointer,
|
|
475
|
+
touchOnly: !caps.pointerHandlesMouse,
|
|
476
|
+
isCancelled: function () {
|
|
477
|
+
return !(0, dndCapabilities_1.resolveDndCapabilities)(_this._ctx.accessor.options).pointer;
|
|
478
|
+
},
|
|
479
|
+
createGhost: function () { return ({
|
|
480
|
+
element: _this._buildChipGhostElement(chip.element),
|
|
481
|
+
offsetX: 8,
|
|
482
|
+
offsetY: 8,
|
|
483
|
+
}); },
|
|
484
|
+
onDragStart: function (event) {
|
|
485
|
+
_this._callbacks.onChipDragStart(tabGroup, chip, event);
|
|
486
|
+
},
|
|
487
|
+
});
|
|
343
488
|
var disposables = [
|
|
344
489
|
tabGroup.onDidChange(function () {
|
|
345
490
|
var _a;
|
|
@@ -353,24 +498,70 @@ var TabGroupManager = /** @class */ (function () {
|
|
|
353
498
|
tabGroup.onDidCollapseChange(function () {
|
|
354
499
|
_this._updateTabGroupClasses();
|
|
355
500
|
}),
|
|
501
|
+
html5DragSource,
|
|
502
|
+
pointerDragSource,
|
|
356
503
|
];
|
|
357
|
-
//
|
|
504
|
+
// Context menu: built-in TabGroupChip already aggregates right-click
|
|
505
|
+
// + touch long-press into `onContextMenu`. Custom chip renderers
|
|
506
|
+
// don't, so attach a long-press detector and contextmenu listener
|
|
507
|
+
// directly on their element.
|
|
508
|
+
var onContextMenu = function (event) {
|
|
509
|
+
// A long-press on a chip should preempt the in-flight pointer
|
|
510
|
+
// drag and open the menu instead.
|
|
511
|
+
pointerDragSource.cancelPending();
|
|
512
|
+
_this._callbacks.onChipContextMenu(tabGroup, event);
|
|
513
|
+
};
|
|
358
514
|
if (chip instanceof tabGroupChip_1.TabGroupChip) {
|
|
359
|
-
disposables.push(chip.onContextMenu(
|
|
360
|
-
_this._callbacks.onChipContextMenu(tabGroup, event);
|
|
361
|
-
}), chip.onDragStart(function (event) {
|
|
362
|
-
_this._callbacks.onChipDragStart(tabGroup, chip, event);
|
|
363
|
-
}));
|
|
515
|
+
disposables.push(chip.onContextMenu(onContextMenu));
|
|
364
516
|
}
|
|
365
517
|
else {
|
|
366
|
-
disposables.push(
|
|
367
|
-
|
|
368
|
-
}), (0, events_1.addDisposableListener)(chip.element, '
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
518
|
+
disposables.push(new longPress_1.LongPressDetector(chip.element, {
|
|
519
|
+
onLongPress: onContextMenu,
|
|
520
|
+
}), (0, events_1.addDisposableListener)(chip.element, 'contextmenu', onContextMenu));
|
|
521
|
+
}
|
|
522
|
+
// The chip sits before its group's first tab in the DOM, so it
|
|
523
|
+
// covers the "drop before the group" position. Without a drop
|
|
524
|
+
// target here, dropping a tab over the chip is a dead zone —
|
|
525
|
+
// particularly visible when the group is first in the tabs list
|
|
526
|
+
// and there's no preceding tab whose right zone covers position 0.
|
|
527
|
+
// The smooth animation path already shifts the chip's margin to
|
|
528
|
+
// open a gap, so suppress the overlay in that mode.
|
|
529
|
+
var isVertical = this._ctx.getDirection() === 'vertical';
|
|
530
|
+
var dropTarget = new droptarget_1.Droptarget(chip.element, {
|
|
531
|
+
acceptedTargetZones: isVertical ? ['top'] : ['left'],
|
|
532
|
+
overlayModel: {
|
|
533
|
+
activationSize: { value: 100, type: 'percentage' },
|
|
534
|
+
},
|
|
535
|
+
canDisplayOverlay: function (event, position) {
|
|
536
|
+
var _a;
|
|
537
|
+
if (_this._ctx.group.locked) {
|
|
538
|
+
return false;
|
|
539
|
+
}
|
|
540
|
+
if (_this._ctx.accessor.options.disableDnd) {
|
|
541
|
+
return false;
|
|
542
|
+
}
|
|
543
|
+
var data = (0, dataTransfer_2.getPanelData)();
|
|
544
|
+
if (data && _this._ctx.accessor.id === data.viewId) {
|
|
545
|
+
if (((_a = _this._ctx.accessor.options.theme) === null || _a === void 0 ? void 0 : _a.tabAnimation) ===
|
|
546
|
+
'smooth') {
|
|
547
|
+
return false;
|
|
548
|
+
}
|
|
549
|
+
return true;
|
|
550
|
+
}
|
|
551
|
+
return _this._ctx.group.model.canDisplayOverlay(event, position, 'tab');
|
|
552
|
+
},
|
|
553
|
+
});
|
|
554
|
+
disposables.push(dropTarget, dropTarget.onDrop(function (event) {
|
|
555
|
+
_this._callbacks.onChipDrop(tabGroup, event);
|
|
556
|
+
}));
|
|
372
557
|
var disposable = new (lifecycle_1.CompositeDisposable.bind.apply(lifecycle_1.CompositeDisposable, __spreadArray([void 0], __read(disposables), false)))();
|
|
373
|
-
this._chipRenderers.set(tabGroup.id, {
|
|
558
|
+
this._chipRenderers.set(tabGroup.id, {
|
|
559
|
+
chip: chip,
|
|
560
|
+
html5DragSource: html5DragSource,
|
|
561
|
+
pointerDragSource: pointerDragSource,
|
|
562
|
+
disposable: disposable,
|
|
563
|
+
dropTarget: dropTarget,
|
|
564
|
+
});
|
|
374
565
|
// Group is born collapsed (cross-group drop, layout restore, etc.):
|
|
375
566
|
// its tabs are about to be added without the collapsed class. Skip
|
|
376
567
|
// the animation in the upcoming _updateTabGroupClasses call so they
|
|
@@ -404,7 +595,7 @@ var TabGroupManager = /** @class */ (function () {
|
|
|
404
595
|
}
|
|
405
596
|
};
|
|
406
597
|
TabGroupManager.prototype._updateTabGroupClasses = function () {
|
|
407
|
-
var
|
|
598
|
+
var e_10, _a, e_11, _b, e_12, _c, e_13, _d, e_14, _e, e_15, _f, e_16, _g;
|
|
408
599
|
var _this = this;
|
|
409
600
|
var _h;
|
|
410
601
|
var model = this._ctx.group.model;
|
|
@@ -418,26 +609,26 @@ var TabGroupManager = /** @class */ (function () {
|
|
|
418
609
|
for (var tabGroups_2 = __values(tabGroups), tabGroups_2_1 = tabGroups_2.next(); !tabGroups_2_1.done; tabGroups_2_1 = tabGroups_2.next()) {
|
|
419
610
|
var tg = tabGroups_2_1.value;
|
|
420
611
|
try {
|
|
421
|
-
for (var _j = (
|
|
612
|
+
for (var _j = (e_11 = void 0, __values(tg.panelIds)), _k = _j.next(); !_k.done; _k = _j.next()) {
|
|
422
613
|
var pid = _k.value;
|
|
423
614
|
panelGroupMap.set(pid, tg);
|
|
424
615
|
}
|
|
425
616
|
}
|
|
426
|
-
catch (
|
|
617
|
+
catch (e_11_1) { e_11 = { error: e_11_1 }; }
|
|
427
618
|
finally {
|
|
428
619
|
try {
|
|
429
620
|
if (_k && !_k.done && (_b = _j.return)) _b.call(_j);
|
|
430
621
|
}
|
|
431
|
-
finally { if (
|
|
622
|
+
finally { if (e_11) throw e_11.error; }
|
|
432
623
|
}
|
|
433
624
|
}
|
|
434
625
|
}
|
|
435
|
-
catch (
|
|
626
|
+
catch (e_10_1) { e_10 = { error: e_10_1 }; }
|
|
436
627
|
finally {
|
|
437
628
|
try {
|
|
438
629
|
if (tabGroups_2_1 && !tabGroups_2_1.done && (_a = tabGroups_2.return)) _a.call(tabGroups_2);
|
|
439
630
|
}
|
|
440
|
-
finally { if (
|
|
631
|
+
finally { if (e_10) throw e_10.error; }
|
|
441
632
|
}
|
|
442
633
|
var _loop_1 = function (tabEntry) {
|
|
443
634
|
var tab = tabEntry.value;
|
|
@@ -493,12 +684,12 @@ var TabGroupManager = /** @class */ (function () {
|
|
|
493
684
|
_loop_1(tabEntry);
|
|
494
685
|
}
|
|
495
686
|
}
|
|
496
|
-
catch (
|
|
687
|
+
catch (e_12_1) { e_12 = { error: e_12_1 }; }
|
|
497
688
|
finally {
|
|
498
689
|
try {
|
|
499
690
|
if (tabs_1_1 && !tabs_1_1.done && (_c = tabs_1.return)) _c.call(tabs_1);
|
|
500
691
|
}
|
|
501
|
-
finally { if (
|
|
692
|
+
finally { if (e_12) throw e_12.error; }
|
|
502
693
|
}
|
|
503
694
|
// Track active group IDs for underline/collapse handling
|
|
504
695
|
var activeGroupIds = new Set();
|
|
@@ -521,7 +712,7 @@ var TabGroupManager = /** @class */ (function () {
|
|
|
521
712
|
// dv-tab--group-collapsed doesn't fire.
|
|
522
713
|
var affected = [];
|
|
523
714
|
try {
|
|
524
|
-
for (var _l = (
|
|
715
|
+
for (var _l = (e_14 = void 0, __values(tg.panelIds)), _m = _l.next(); !_m.done; _m = _l.next()) {
|
|
525
716
|
var pid = _m.value;
|
|
526
717
|
var te = tabMap.get(pid);
|
|
527
718
|
if (te) {
|
|
@@ -531,27 +722,27 @@ var TabGroupManager = /** @class */ (function () {
|
|
|
531
722
|
}
|
|
532
723
|
}
|
|
533
724
|
}
|
|
534
|
-
catch (
|
|
725
|
+
catch (e_14_1) { e_14 = { error: e_14_1 }; }
|
|
535
726
|
finally {
|
|
536
727
|
try {
|
|
537
728
|
if (_m && !_m.done && (_e = _l.return)) _e.call(_l);
|
|
538
729
|
}
|
|
539
|
-
finally { if (
|
|
730
|
+
finally { if (e_14) throw e_14.error; }
|
|
540
731
|
}
|
|
541
732
|
if (affected.length > 0) {
|
|
542
733
|
void affected[0].offsetHeight; // single reflow
|
|
543
734
|
try {
|
|
544
|
-
for (var affected_1 = (
|
|
735
|
+
for (var affected_1 = (e_15 = void 0, __values(affected)), affected_1_1 = affected_1.next(); !affected_1_1.done; affected_1_1 = affected_1.next()) {
|
|
545
736
|
var el = affected_1_1.value;
|
|
546
737
|
el.style.removeProperty('transition');
|
|
547
738
|
}
|
|
548
739
|
}
|
|
549
|
-
catch (
|
|
740
|
+
catch (e_15_1) { e_15 = { error: e_15_1 }; }
|
|
550
741
|
finally {
|
|
551
742
|
try {
|
|
552
743
|
if (affected_1_1 && !affected_1_1.done && (_f = affected_1.return)) _f.call(affected_1);
|
|
553
744
|
}
|
|
554
|
-
finally { if (
|
|
745
|
+
finally { if (e_15) throw e_15.error; }
|
|
555
746
|
}
|
|
556
747
|
}
|
|
557
748
|
}
|
|
@@ -559,7 +750,7 @@ var TabGroupManager = /** @class */ (function () {
|
|
|
559
750
|
hasAnimation = true;
|
|
560
751
|
var isVert = this._ctx.getDirection() === 'vertical';
|
|
561
752
|
try {
|
|
562
|
-
for (var _o = (
|
|
753
|
+
for (var _o = (e_16 = void 0, __values(tg.panelIds)), _p = _o.next(); !_p.done; _p = _o.next()) {
|
|
563
754
|
var pid = _p.value;
|
|
564
755
|
var te = tabMap.get(pid);
|
|
565
756
|
if (te &&
|
|
@@ -576,23 +767,23 @@ var TabGroupManager = /** @class */ (function () {
|
|
|
576
767
|
}
|
|
577
768
|
}
|
|
578
769
|
}
|
|
579
|
-
catch (
|
|
770
|
+
catch (e_16_1) { e_16 = { error: e_16_1 }; }
|
|
580
771
|
finally {
|
|
581
772
|
try {
|
|
582
773
|
if (_p && !_p.done && (_g = _o.return)) _g.call(_o);
|
|
583
774
|
}
|
|
584
|
-
finally { if (
|
|
775
|
+
finally { if (e_16) throw e_16.error; }
|
|
585
776
|
}
|
|
586
777
|
}
|
|
587
778
|
}
|
|
588
779
|
}
|
|
589
780
|
}
|
|
590
|
-
catch (
|
|
781
|
+
catch (e_13_1) { e_13 = { error: e_13_1 }; }
|
|
591
782
|
finally {
|
|
592
783
|
try {
|
|
593
784
|
if (tabGroups_3_1 && !tabGroups_3_1.done && (_d = tabGroups_3.return)) _d.call(tabGroups_3);
|
|
594
785
|
}
|
|
595
|
-
finally { if (
|
|
786
|
+
finally { if (e_13) throw e_13.error; }
|
|
596
787
|
}
|
|
597
788
|
this._skipNextCollapseAnimation = false;
|
|
598
789
|
// Sync indicator underlines and position them
|
|
@@ -26,7 +26,7 @@ export declare class Tabs extends CompositeDisposable {
|
|
|
26
26
|
private _voidContainer;
|
|
27
27
|
private _voidContainerListeners;
|
|
28
28
|
private _extendedDropZone;
|
|
29
|
-
private
|
|
29
|
+
private _pointerInsideTabsList;
|
|
30
30
|
private readonly _tabGroupManager;
|
|
31
31
|
private readonly _onTabDragStart;
|
|
32
32
|
readonly onTabDragStart: Event<TabDragEvent>;
|
|
@@ -72,7 +72,22 @@ export declare class Tabs extends CompositeDisposable {
|
|
|
72
72
|
*/
|
|
73
73
|
updateTabGroups(): void;
|
|
74
74
|
refreshTabGroupAccent(): void;
|
|
75
|
+
/**
|
|
76
|
+
* Tabs-list-specific side effects of a chip drag start. The chip's
|
|
77
|
+
* drag sources (constructed by `TabGroupManager`) own the transfer
|
|
78
|
+
* payload, iframe shielding, dataTransfer setup, and the HTML5 drag
|
|
79
|
+
* image. This method just sets up the smooth-reorder anim state and
|
|
80
|
+
* collapses the source-group tabs in the tabs list.
|
|
81
|
+
*/
|
|
75
82
|
private _handleChipDragStart;
|
|
83
|
+
/**
|
|
84
|
+
* A drop on a tab group chip means "insert before this group". Resolve to
|
|
85
|
+
* the index of the group's first tab, adjusting for same-group removal
|
|
86
|
+
* (when the source tab is currently to the left of the target slot, its
|
|
87
|
+
* removal shifts the insertion index down by one). Always clears
|
|
88
|
+
* `targetTabGroupId` so the dropped tab lands outside the group.
|
|
89
|
+
*/
|
|
90
|
+
private _handleChipDrop;
|
|
76
91
|
/**
|
|
77
92
|
* Sets the broader container that is part of the same logical drop surface
|
|
78
93
|
* as this tab list (e.g. the full header element). When a dragleave from
|
|
@@ -94,6 +109,28 @@ export declare class Tabs extends CompositeDisposable {
|
|
|
94
109
|
clearExternalAnimState(): void;
|
|
95
110
|
private snapshotTabPositions;
|
|
96
111
|
private getAverageTabWidth;
|
|
112
|
+
/**
|
|
113
|
+
* Pointer-event entry point. The HTML5 path enters via the per-element
|
|
114
|
+
* `dragover` listener; this one hit-tests the global pointer-drag
|
|
115
|
+
* position against the tabs list and routes through the same shared
|
|
116
|
+
* `_processDragOver` / `_processDragLeave` helpers.
|
|
117
|
+
*/
|
|
118
|
+
private _handlePointerDragMove;
|
|
119
|
+
/**
|
|
120
|
+
* Shared body of the dragover entry point. Refreshes stale anim state
|
|
121
|
+
* for a changed drag identity, initializes anim state for incoming
|
|
122
|
+
* cross-group drags, and dispatches to the gap-following math in
|
|
123
|
+
* `handleDragOver`. Returns true when this tabs list has taken
|
|
124
|
+
* ownership of the drag — HTML5 callers use this to gate
|
|
125
|
+
* `event.preventDefault()`.
|
|
126
|
+
*/
|
|
127
|
+
private _processDragOver;
|
|
128
|
+
/**
|
|
129
|
+
* Shared body of the dragleave entry point. Preserves anim state when
|
|
130
|
+
* the drag moves between tabs-list children, into the extended drop
|
|
131
|
+
* zone, or into the void container; tears it down otherwise.
|
|
132
|
+
*/
|
|
133
|
+
private _processDragLeave;
|
|
97
134
|
private handleDragOver;
|
|
98
135
|
/**
|
|
99
136
|
* Batch-remove a CSS class from multiple elements instantly,
|