dockview-core 6.2.2 → 6.4.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/api/dockviewGroupPanelApi.d.ts +10 -1
- package/dist/cjs/api/dockviewGroupPanelApi.js +16 -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/tabGroupIndicator.js +2 -2
- 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 +381 -253
- 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 +190 -22
- 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 +2 -0
- package/dist/cjs/dockview/dockviewComponent.js +241 -158
- package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +10 -5
- package/dist/cjs/dockview/dockviewGroupPanelModel.js +34 -11
- package/dist/cjs/dockview/dockviewPanel.js +5 -0
- package/dist/cjs/dockview/dockviewPanelModel.d.ts +2 -0
- package/dist/cjs/dockview/dockviewPanelModel.js +8 -0
- package/dist/cjs/dockview/events.d.ts +2 -1
- package/dist/cjs/dockview/events.js +1 -0
- package/dist/cjs/dockview/framework.d.ts +8 -0
- package/dist/cjs/dockview/options.d.ts +31 -5
- package/dist/cjs/dockview/options.js +3 -0
- package/dist/cjs/dom.d.ts +5 -1
- package/dist/cjs/dom.js +21 -5
- package/dist/cjs/index.d.ts +1 -1
- 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/cjs/popoutWindow.d.ts +2 -0
- package/dist/cjs/popoutWindow.js +3 -1
- package/dist/dockview-core.js +2431 -937
- 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 +2430 -936
- package/dist/esm/api/dockviewGroupPanelApi.d.ts +10 -1
- package/dist/esm/api/dockviewGroupPanelApi.js +12 -0
- 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/tabGroupIndicator.js +2 -2
- 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 +360 -229
- 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 +180 -26
- 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 +2 -0
- package/dist/esm/dockview/dockviewComponent.js +104 -41
- package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +10 -5
- package/dist/esm/dockview/dockviewGroupPanelModel.js +33 -11
- package/dist/esm/dockview/dockviewPanel.js +5 -0
- package/dist/esm/dockview/dockviewPanelModel.d.ts +2 -0
- package/dist/esm/dockview/dockviewPanelModel.js +8 -0
- package/dist/esm/dockview/events.d.ts +2 -1
- package/dist/esm/dockview/events.js +1 -0
- package/dist/esm/dockview/framework.d.ts +8 -0
- package/dist/esm/dockview/options.d.ts +31 -5
- package/dist/esm/dockview/options.js +3 -0
- package/dist/esm/dom.d.ts +5 -1
- package/dist/esm/dom.js +20 -5
- package/dist/esm/index.d.ts +1 -1
- 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/esm/popoutWindow.d.ts +2 -0
- package/dist/esm/popoutWindow.js +3 -1
- package/dist/package/main.cjs.js +2430 -936
- package/dist/package/main.cjs.min.js +2 -2
- package/dist/package/main.esm.min.mjs +2 -2
- package/dist/package/main.esm.mjs +2430 -936
- 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 -82
- 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 -59
|
@@ -20,53 +20,10 @@ exports.directionToPosition = directionToPosition;
|
|
|
20
20
|
exports.positionToDirection = positionToDirection;
|
|
21
21
|
exports.calculateQuadrantAsPercentage = calculateQuadrantAsPercentage;
|
|
22
22
|
exports.calculateQuadrantAsPixels = calculateQuadrantAsPixels;
|
|
23
|
-
var dom_1 = require("../dom");
|
|
24
23
|
var events_1 = require("../events");
|
|
25
24
|
var lifecycle_1 = require("../lifecycle");
|
|
26
25
|
var dnd_1 = require("./dnd");
|
|
27
|
-
var
|
|
28
|
-
function setGPUOptimizedBounds(element, bounds) {
|
|
29
|
-
var top = bounds.top, left = bounds.left, width = bounds.width, height = bounds.height;
|
|
30
|
-
var topPx = "".concat(Math.round(top), "px");
|
|
31
|
-
var leftPx = "".concat(Math.round(left), "px");
|
|
32
|
-
var widthPx = "".concat(Math.round(width), "px");
|
|
33
|
-
var heightPx = "".concat(Math.round(height), "px");
|
|
34
|
-
// Use traditional positioning but maintain GPU layer
|
|
35
|
-
element.style.top = topPx;
|
|
36
|
-
element.style.left = leftPx;
|
|
37
|
-
element.style.width = widthPx;
|
|
38
|
-
element.style.height = heightPx;
|
|
39
|
-
element.style.visibility = 'visible';
|
|
40
|
-
// Ensure GPU layer is maintained
|
|
41
|
-
if (!element.style.transform || element.style.transform === '') {
|
|
42
|
-
element.style.transform = 'translate3d(0, 0, 0)';
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
function setGPUOptimizedBoundsFromStrings(element, bounds) {
|
|
46
|
-
var top = bounds.top, left = bounds.left, width = bounds.width, height = bounds.height;
|
|
47
|
-
// Use traditional positioning but maintain GPU layer
|
|
48
|
-
element.style.top = top;
|
|
49
|
-
element.style.left = left;
|
|
50
|
-
element.style.width = width;
|
|
51
|
-
element.style.height = height;
|
|
52
|
-
element.style.visibility = 'visible';
|
|
53
|
-
// Ensure GPU layer is maintained
|
|
54
|
-
if (!element.style.transform || element.style.transform === '') {
|
|
55
|
-
element.style.transform = 'translate3d(0, 0, 0)';
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
function checkBoundsChanged(element, bounds) {
|
|
59
|
-
var top = bounds.top, left = bounds.left, width = bounds.width, height = bounds.height;
|
|
60
|
-
var topPx = "".concat(Math.round(top), "px");
|
|
61
|
-
var leftPx = "".concat(Math.round(left), "px");
|
|
62
|
-
var widthPx = "".concat(Math.round(width), "px");
|
|
63
|
-
var heightPx = "".concat(Math.round(height), "px");
|
|
64
|
-
// Check if position or size changed (back to traditional method)
|
|
65
|
-
return (element.style.top !== topPx ||
|
|
66
|
-
element.style.left !== leftPx ||
|
|
67
|
-
element.style.width !== widthPx ||
|
|
68
|
-
element.style.height !== heightPx);
|
|
69
|
-
}
|
|
26
|
+
var dropOverlay_1 = require("./dropOverlay");
|
|
70
27
|
var WillShowOverlayEvent = /** @class */ (function (_super) {
|
|
71
28
|
__extends(WillShowOverlayEvent, _super);
|
|
72
29
|
function WillShowOverlayEvent(options) {
|
|
@@ -127,12 +84,6 @@ var DEFAULT_ACTIVATION_SIZE = {
|
|
|
127
84
|
value: 20,
|
|
128
85
|
type: 'percentage',
|
|
129
86
|
};
|
|
130
|
-
var DEFAULT_SIZE = {
|
|
131
|
-
value: 50,
|
|
132
|
-
type: 'percentage',
|
|
133
|
-
};
|
|
134
|
-
var SMALL_WIDTH_BOUNDARY = 100;
|
|
135
|
-
var SMALL_HEIGHT_BOUNDARY = 100;
|
|
136
87
|
var Droptarget = /** @class */ (function (_super) {
|
|
137
88
|
__extends(Droptarget, _super);
|
|
138
89
|
function Droptarget(element, options) {
|
|
@@ -207,20 +158,12 @@ var Droptarget = /** @class */ (function (_super) {
|
|
|
207
158
|
//
|
|
208
159
|
}
|
|
209
160
|
else if (!_this.targetElement) {
|
|
210
|
-
|
|
211
|
-
_this.targetElement
|
|
212
|
-
_this.overlayElement =
|
|
213
|
-
_this.overlayElement.className = 'dv-drop-target-selection';
|
|
161
|
+
var els = (0, dropOverlay_1.createOverlayElements)();
|
|
162
|
+
_this.targetElement = els.dropzone;
|
|
163
|
+
_this.overlayElement = els.selection;
|
|
214
164
|
_this._state = 'center';
|
|
215
|
-
_this.targetElement.appendChild(_this.overlayElement);
|
|
216
165
|
target.classList.add('dv-drop-target');
|
|
217
166
|
target.append(_this.targetElement);
|
|
218
|
-
// this.overlayElement.style.opacity = '0';
|
|
219
|
-
// requestAnimationFrame(() => {
|
|
220
|
-
// if (this.overlayElement) {
|
|
221
|
-
// this.overlayElement.style.opacity = '';
|
|
222
|
-
// }
|
|
223
|
-
// });
|
|
224
167
|
}
|
|
225
168
|
_this.toggleClasses(quadrant, width, height);
|
|
226
169
|
_this._state = quadrant;
|
|
@@ -308,162 +251,25 @@ var Droptarget = /** @class */ (function (_super) {
|
|
|
308
251
|
return typeof value === 'boolean' && value;
|
|
309
252
|
};
|
|
310
253
|
Droptarget.prototype.toggleClasses = function (quadrant, width, height) {
|
|
311
|
-
var _a, _b, _c, _d, _e
|
|
254
|
+
var _a, _b, _c, _d, _e;
|
|
312
255
|
var target = (_b = (_a = this.options).getOverrideTarget) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
313
|
-
if (!target && !this.overlayElement) {
|
|
314
|
-
return;
|
|
315
|
-
}
|
|
316
|
-
var smallWidthBoundary = (_d = (_c = this.options.overlayModel) === null || _c === void 0 ? void 0 : _c.smallWidthBoundary) !== null && _d !== void 0 ? _d : SMALL_WIDTH_BOUNDARY;
|
|
317
|
-
var smallHeightBoundary = (_f = (_e = this.options.overlayModel) === null || _e === void 0 ? void 0 : _e.smallHeightBoundary) !== null && _f !== void 0 ? _f : SMALL_HEIGHT_BOUNDARY;
|
|
318
|
-
var isSmallX = width < smallWidthBoundary;
|
|
319
|
-
var isSmallY = height < smallHeightBoundary;
|
|
320
|
-
var isLeft = quadrant === 'left';
|
|
321
|
-
var isRight = quadrant === 'right';
|
|
322
|
-
var isTop = quadrant === 'top';
|
|
323
|
-
var isBottom = quadrant === 'bottom';
|
|
324
|
-
var rightClass = !isSmallX && isRight;
|
|
325
|
-
var leftClass = !isSmallX && isLeft;
|
|
326
|
-
var topClass = !isSmallY && isTop;
|
|
327
|
-
var bottomClass = !isSmallY && isBottom;
|
|
328
|
-
var size = 1;
|
|
329
|
-
var sizeOptions = (_h = (_g = this.options.overlayModel) === null || _g === void 0 ? void 0 : _g.size) !== null && _h !== void 0 ? _h : DEFAULT_SIZE;
|
|
330
|
-
if (sizeOptions.type === 'percentage') {
|
|
331
|
-
size = (0, math_1.clamp)(sizeOptions.value, 0, 100) / 100;
|
|
332
|
-
}
|
|
333
|
-
else {
|
|
334
|
-
if (rightClass || leftClass) {
|
|
335
|
-
size = (0, math_1.clamp)(0, sizeOptions.value, width) / width;
|
|
336
|
-
}
|
|
337
|
-
if (topClass || bottomClass) {
|
|
338
|
-
size = (0, math_1.clamp)(0, sizeOptions.value, height) / height;
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
256
|
if (target) {
|
|
342
|
-
var outlineEl = (
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
var bigbox = el.getBoundingClientRect();
|
|
348
|
-
var rootTop = elBox.top - bigbox.top;
|
|
349
|
-
var rootLeft = elBox.left - bigbox.left;
|
|
350
|
-
var box_1 = {
|
|
351
|
-
top: rootTop,
|
|
352
|
-
left: rootLeft,
|
|
257
|
+
var outlineEl = (_e = (_d = (_c = this.options).getOverlayOutline) === null || _d === void 0 ? void 0 : _d.call(_c)) !== null && _e !== void 0 ? _e : this.element;
|
|
258
|
+
(0, dropOverlay_1.renderAnchoredOverlay)({
|
|
259
|
+
outlineElement: outlineEl,
|
|
260
|
+
targetModel: target,
|
|
261
|
+
quadrant: quadrant,
|
|
353
262
|
width: width,
|
|
354
263
|
height: height,
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
box_1.width = width * size;
|
|
359
|
-
}
|
|
360
|
-
else if (leftClass) {
|
|
361
|
-
box_1.width = width * size;
|
|
362
|
-
}
|
|
363
|
-
else if (topClass) {
|
|
364
|
-
box_1.height = height * size;
|
|
365
|
-
}
|
|
366
|
-
else if (bottomClass) {
|
|
367
|
-
box_1.top = rootTop + height * (1 - size);
|
|
368
|
-
box_1.height = height * size;
|
|
369
|
-
}
|
|
370
|
-
if (isSmallX && isLeft) {
|
|
371
|
-
box_1.width = 4;
|
|
372
|
-
}
|
|
373
|
-
if (isSmallX && isRight) {
|
|
374
|
-
box_1.left = rootLeft + width - 4;
|
|
375
|
-
box_1.width = 4;
|
|
376
|
-
}
|
|
377
|
-
if (isSmallY && isTop) {
|
|
378
|
-
box_1.height = 4;
|
|
379
|
-
}
|
|
380
|
-
if (isSmallY && isBottom) {
|
|
381
|
-
box_1.top = rootTop + height - 4;
|
|
382
|
-
box_1.height = 4;
|
|
383
|
-
}
|
|
384
|
-
// Use GPU-optimized bounds checking and setting
|
|
385
|
-
if (!checkBoundsChanged(overlay_1, box_1)) {
|
|
386
|
-
return;
|
|
387
|
-
}
|
|
388
|
-
setGPUOptimizedBounds(overlay_1, box_1);
|
|
389
|
-
overlay_1.className = "dv-drop-target-anchor".concat(this.options.className ? " ".concat(this.options.className) : '');
|
|
390
|
-
(0, dom_1.toggleClass)(overlay_1, 'dv-drop-target-left', isLeft);
|
|
391
|
-
(0, dom_1.toggleClass)(overlay_1, 'dv-drop-target-right', isRight);
|
|
392
|
-
(0, dom_1.toggleClass)(overlay_1, 'dv-drop-target-top', isTop);
|
|
393
|
-
(0, dom_1.toggleClass)(overlay_1, 'dv-drop-target-bottom', isBottom);
|
|
394
|
-
(0, dom_1.toggleClass)(overlay_1, 'dv-drop-target-anchor-line', (isSmallX && (isLeft || isRight)) ||
|
|
395
|
-
(isSmallY && (isTop || isBottom)));
|
|
396
|
-
(0, dom_1.toggleClass)(overlay_1, 'dv-drop-target-center', quadrant === 'center');
|
|
397
|
-
if (ta.changed) {
|
|
398
|
-
(0, dom_1.toggleClass)(overlay_1, 'dv-drop-target-anchor-container-changed', true);
|
|
399
|
-
setTimeout(function () {
|
|
400
|
-
(0, dom_1.toggleClass)(overlay_1, 'dv-drop-target-anchor-container-changed', false);
|
|
401
|
-
}, 10);
|
|
402
|
-
}
|
|
264
|
+
overlayModel: this.options.overlayModel,
|
|
265
|
+
className: this.options.className,
|
|
266
|
+
});
|
|
403
267
|
return;
|
|
404
268
|
}
|
|
405
269
|
if (!this.overlayElement) {
|
|
406
270
|
return;
|
|
407
271
|
}
|
|
408
|
-
|
|
409
|
-
/**
|
|
410
|
-
* You can also achieve the overlay placement using the transform CSS property
|
|
411
|
-
* to translate and scale the element however this has the undesired effect of
|
|
412
|
-
* 'skewing' the element. Comment left here for anybody that ever revisits this.
|
|
413
|
-
*
|
|
414
|
-
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/transform
|
|
415
|
-
*
|
|
416
|
-
* right
|
|
417
|
-
* translateX(${100 * (1 - size) / 2}%) scaleX(${scale})
|
|
418
|
-
*
|
|
419
|
-
* left
|
|
420
|
-
* translateX(-${100 * (1 - size) / 2}%) scaleX(${scale})
|
|
421
|
-
*
|
|
422
|
-
* top
|
|
423
|
-
* translateY(-${100 * (1 - size) / 2}%) scaleY(${scale})
|
|
424
|
-
*
|
|
425
|
-
* bottom
|
|
426
|
-
* translateY(${100 * (1 - size) / 2}%) scaleY(${scale})
|
|
427
|
-
*/
|
|
428
|
-
if (rightClass) {
|
|
429
|
-
box.left = "".concat(100 * (1 - size), "%");
|
|
430
|
-
box.width = "".concat(100 * size, "%");
|
|
431
|
-
}
|
|
432
|
-
else if (leftClass) {
|
|
433
|
-
box.width = "".concat(100 * size, "%");
|
|
434
|
-
}
|
|
435
|
-
else if (topClass) {
|
|
436
|
-
box.height = "".concat(100 * size, "%");
|
|
437
|
-
}
|
|
438
|
-
else if (bottomClass) {
|
|
439
|
-
box.top = "".concat(100 * (1 - size), "%");
|
|
440
|
-
box.height = "".concat(100 * size, "%");
|
|
441
|
-
}
|
|
442
|
-
if (isSmallX && isLeft) {
|
|
443
|
-
box.width = '4px';
|
|
444
|
-
}
|
|
445
|
-
if (isSmallX && isRight) {
|
|
446
|
-
box.left = "".concat(width - 4, "px");
|
|
447
|
-
box.width = '4px';
|
|
448
|
-
}
|
|
449
|
-
if (isSmallY && isTop) {
|
|
450
|
-
box.height = '4px';
|
|
451
|
-
}
|
|
452
|
-
if (isSmallY && isBottom) {
|
|
453
|
-
box.top = "".concat(height - 4, "px");
|
|
454
|
-
box.height = '4px';
|
|
455
|
-
}
|
|
456
|
-
setGPUOptimizedBoundsFromStrings(this.overlayElement, box);
|
|
457
|
-
var isLine = (isSmallX && (isLeft || isRight)) ||
|
|
458
|
-
(isSmallY && (isTop || isBottom));
|
|
459
|
-
(0, dom_1.toggleClass)(this.overlayElement, 'dv-drop-target-small-vertical', isSmallY);
|
|
460
|
-
(0, dom_1.toggleClass)(this.overlayElement, 'dv-drop-target-small-horizontal', isSmallX);
|
|
461
|
-
(0, dom_1.toggleClass)(this.overlayElement, 'dv-drop-target-selection-line', isLine);
|
|
462
|
-
(0, dom_1.toggleClass)(this.overlayElement, 'dv-drop-target-left', isLeft);
|
|
463
|
-
(0, dom_1.toggleClass)(this.overlayElement, 'dv-drop-target-right', isRight);
|
|
464
|
-
(0, dom_1.toggleClass)(this.overlayElement, 'dv-drop-target-top', isTop);
|
|
465
|
-
(0, dom_1.toggleClass)(this.overlayElement, 'dv-drop-target-bottom', isBottom);
|
|
466
|
-
(0, dom_1.toggleClass)(this.overlayElement, 'dv-drop-target-center', quadrant === 'center');
|
|
272
|
+
(0, dropOverlay_1.renderInPlaceOverlay)(this.overlayElement, quadrant, width, height, this.options.overlayModel);
|
|
467
273
|
};
|
|
468
274
|
Droptarget.prototype.calculateQuadrant = function (overlayType, x, y, width, height) {
|
|
469
275
|
var _a, _b;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { PointerDragController } from './pointerDragController';
|
|
2
|
+
export type { ActiveDrag } from './pointerDragController';
|
|
3
|
+
export { PointerDragSource } from './pointerDragSource';
|
|
4
|
+
export type { PointerDragSourceOptions } from './pointerDragSource';
|
|
5
|
+
export { PointerDropTarget } from './pointerDropTarget';
|
|
6
|
+
export type { PointerDropTargetOptions } from './pointerDropTarget';
|
|
7
|
+
export type { PointerDragEvent, PointerDroptargetEvent, IPointerDropTargetHandle, } from './types';
|
|
8
|
+
export { LongPressDetector } from './longPress';
|
|
9
|
+
export type { LongPressOptions } from './longPress';
|
|
10
|
+
export { PointerGhost } from './pointerGhost';
|
|
11
|
+
export type { PointerGhostOptions } from './pointerGhost';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PointerGhost = exports.LongPressDetector = exports.PointerDropTarget = exports.PointerDragSource = exports.PointerDragController = void 0;
|
|
4
|
+
var pointerDragController_1 = require("./pointerDragController");
|
|
5
|
+
Object.defineProperty(exports, "PointerDragController", { enumerable: true, get: function () { return pointerDragController_1.PointerDragController; } });
|
|
6
|
+
var pointerDragSource_1 = require("./pointerDragSource");
|
|
7
|
+
Object.defineProperty(exports, "PointerDragSource", { enumerable: true, get: function () { return pointerDragSource_1.PointerDragSource; } });
|
|
8
|
+
var pointerDropTarget_1 = require("./pointerDropTarget");
|
|
9
|
+
Object.defineProperty(exports, "PointerDropTarget", { enumerable: true, get: function () { return pointerDropTarget_1.PointerDropTarget; } });
|
|
10
|
+
var longPress_1 = require("./longPress");
|
|
11
|
+
Object.defineProperty(exports, "LongPressDetector", { enumerable: true, get: function () { return longPress_1.LongPressDetector; } });
|
|
12
|
+
var pointerGhost_1 = require("./pointerGhost");
|
|
13
|
+
Object.defineProperty(exports, "PointerGhost", { enumerable: true, get: function () { return pointerGhost_1.PointerGhost; } });
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { CompositeDisposable } from '../../lifecycle';
|
|
2
|
+
export interface LongPressOptions {
|
|
3
|
+
/** Default 500ms. */
|
|
4
|
+
delay?: number;
|
|
5
|
+
/** Default 8px. */
|
|
6
|
+
tolerance?: number;
|
|
7
|
+
/** Default true: mouse users have right-click and don't need this. */
|
|
8
|
+
touchOnly?: boolean;
|
|
9
|
+
/** Receives the `pointerdown` event so consumers can read `clientX/Y`. */
|
|
10
|
+
onLongPress: (event: PointerEvent) => void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Passive — does not consume the pointer; movement past `tolerance`
|
|
14
|
+
* cancels silently so a sibling `PointerDragSource` can take over.
|
|
15
|
+
*/
|
|
16
|
+
export declare class LongPressDetector extends CompositeDisposable {
|
|
17
|
+
private readonly element;
|
|
18
|
+
private readonly options;
|
|
19
|
+
private _pointerId;
|
|
20
|
+
private _startX;
|
|
21
|
+
private _startY;
|
|
22
|
+
private _timer;
|
|
23
|
+
private _moveListener;
|
|
24
|
+
private _upListener;
|
|
25
|
+
private _cancelListener;
|
|
26
|
+
constructor(element: HTMLElement, options: LongPressOptions);
|
|
27
|
+
private _onPointerDown;
|
|
28
|
+
private _installContextMenuGuard;
|
|
29
|
+
private _installClickGuard;
|
|
30
|
+
private _cancelPending;
|
|
31
|
+
dispose(): void;
|
|
32
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.LongPressDetector = void 0;
|
|
19
|
+
var events_1 = require("../../events");
|
|
20
|
+
var lifecycle_1 = require("../../lifecycle");
|
|
21
|
+
var DEFAULT_DELAY = 500;
|
|
22
|
+
var DEFAULT_TOLERANCE = 8;
|
|
23
|
+
/**
|
|
24
|
+
* Passive — does not consume the pointer; movement past `tolerance`
|
|
25
|
+
* cancels silently so a sibling `PointerDragSource` can take over.
|
|
26
|
+
*/
|
|
27
|
+
var LongPressDetector = /** @class */ (function (_super) {
|
|
28
|
+
__extends(LongPressDetector, _super);
|
|
29
|
+
function LongPressDetector(element, options) {
|
|
30
|
+
var _this = _super.call(this) || this;
|
|
31
|
+
_this.element = element;
|
|
32
|
+
_this.options = options;
|
|
33
|
+
_this._startX = 0;
|
|
34
|
+
_this._startY = 0;
|
|
35
|
+
_this.addDisposables((0, events_1.addDisposableListener)(_this.element, 'pointerdown', function (e) {
|
|
36
|
+
_this._onPointerDown(e);
|
|
37
|
+
}));
|
|
38
|
+
return _this;
|
|
39
|
+
}
|
|
40
|
+
LongPressDetector.prototype._onPointerDown = function (event) {
|
|
41
|
+
var _this = this;
|
|
42
|
+
var _a, _b, _c, _d, _e;
|
|
43
|
+
var touchOnly = (_a = this.options.touchOnly) !== null && _a !== void 0 ? _a : true;
|
|
44
|
+
if (touchOnly &&
|
|
45
|
+
event.pointerType !== 'touch' &&
|
|
46
|
+
event.pointerType !== 'pen') {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
// Defensive — supersede any in-flight press.
|
|
50
|
+
this._cancelPending();
|
|
51
|
+
this._pointerId = event.pointerId;
|
|
52
|
+
this._startX = event.clientX;
|
|
53
|
+
this._startY = event.clientY;
|
|
54
|
+
var delay = (_b = this.options.delay) !== null && _b !== void 0 ? _b : DEFAULT_DELAY;
|
|
55
|
+
var tolerance = (_c = this.options.tolerance) !== null && _c !== void 0 ? _c : DEFAULT_TOLERANCE;
|
|
56
|
+
// Source's owning window — popout drags fire on their own window.
|
|
57
|
+
var targetWindow = (_e = (_d = this.element.ownerDocument) === null || _d === void 0 ? void 0 : _d.defaultView) !== null && _e !== void 0 ? _e : window;
|
|
58
|
+
this._timer = setTimeout(function () {
|
|
59
|
+
_this._timer = undefined;
|
|
60
|
+
_this._cancelPending();
|
|
61
|
+
// Touch browsers synthesize a compatibility `contextmenu` event
|
|
62
|
+
// for long-press. preventDefault on the original pointerdown is
|
|
63
|
+
// too late (already dispatched), so install a one-shot
|
|
64
|
+
// capture-phase guard for the next contextmenu. Without this,
|
|
65
|
+
// consumers that don't preventDefault inside their onLongPress
|
|
66
|
+
// (or that early-return before doing so) leak the browser's
|
|
67
|
+
// native menu on top of theirs.
|
|
68
|
+
_this._installContextMenuGuard(targetWindow);
|
|
69
|
+
// Same idea for `click`: when the user releases their finger
|
|
70
|
+
// after the long-press, touch browsers dispatch a `click` to
|
|
71
|
+
// the element the touch ended on (the source). Consumers
|
|
72
|
+
// typically wire click to a primary action (e.g. tab activate,
|
|
73
|
+
// tab-group chip collapse-toggle). Without this guard, the
|
|
74
|
+
// long-press immediately fires both the context menu AND the
|
|
75
|
+
// primary action — and the action's side effects (e.g. a chip
|
|
76
|
+
// collapse animation) read as a screen wobble while the menu
|
|
77
|
+
// is supposed to be open. Scoped to the source element so
|
|
78
|
+
// clicks on menu items elsewhere remain effective.
|
|
79
|
+
_this._installClickGuard(targetWindow);
|
|
80
|
+
_this.options.onLongPress(event);
|
|
81
|
+
}, delay);
|
|
82
|
+
this._moveListener = (0, events_1.addDisposableListener)(targetWindow, 'pointermove', function (moveEvent) {
|
|
83
|
+
if (moveEvent.pointerId !== _this._pointerId) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
var dx = moveEvent.clientX - _this._startX;
|
|
87
|
+
var dy = moveEvent.clientY - _this._startY;
|
|
88
|
+
if (Math.hypot(dx, dy) > tolerance) {
|
|
89
|
+
_this._cancelPending();
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
this._upListener = (0, events_1.addDisposableListener)(targetWindow, 'pointerup', function (upEvent) {
|
|
93
|
+
if (upEvent.pointerId !== _this._pointerId) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
_this._cancelPending();
|
|
97
|
+
});
|
|
98
|
+
this._cancelListener = (0, events_1.addDisposableListener)(targetWindow, 'pointercancel', function (cancelEvent) {
|
|
99
|
+
if (cancelEvent.pointerId !== _this._pointerId) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
_this._cancelPending();
|
|
103
|
+
});
|
|
104
|
+
};
|
|
105
|
+
LongPressDetector.prototype._installContextMenuGuard = function (targetWindow) {
|
|
106
|
+
var guard;
|
|
107
|
+
var timeout = setTimeout(function () { return guard === null || guard === void 0 ? void 0 : guard.dispose(); }, 500);
|
|
108
|
+
guard = (0, events_1.addDisposableListener)(targetWindow, 'contextmenu', function (event) {
|
|
109
|
+
event.preventDefault();
|
|
110
|
+
clearTimeout(timeout);
|
|
111
|
+
guard === null || guard === void 0 ? void 0 : guard.dispose();
|
|
112
|
+
}, { capture: true });
|
|
113
|
+
};
|
|
114
|
+
LongPressDetector.prototype._installClickGuard = function (targetWindow) {
|
|
115
|
+
var _this = this;
|
|
116
|
+
var guard;
|
|
117
|
+
var timeout = setTimeout(function () { return guard === null || guard === void 0 ? void 0 : guard.dispose(); }, 500);
|
|
118
|
+
guard = (0, events_1.addDisposableListener)(targetWindow, 'click', function (event) {
|
|
119
|
+
// Only suppress clicks targeted at the long-pressed element
|
|
120
|
+
// or its descendants. A user tap on a context menu item (or
|
|
121
|
+
// anywhere else) still gets through unchanged.
|
|
122
|
+
var target = event.target;
|
|
123
|
+
if (target && _this.element.contains(target)) {
|
|
124
|
+
event.preventDefault();
|
|
125
|
+
event.stopPropagation();
|
|
126
|
+
}
|
|
127
|
+
clearTimeout(timeout);
|
|
128
|
+
guard === null || guard === void 0 ? void 0 : guard.dispose();
|
|
129
|
+
}, { capture: true });
|
|
130
|
+
};
|
|
131
|
+
LongPressDetector.prototype._cancelPending = function () {
|
|
132
|
+
var _a, _b, _c;
|
|
133
|
+
if (this._timer !== undefined) {
|
|
134
|
+
clearTimeout(this._timer);
|
|
135
|
+
this._timer = undefined;
|
|
136
|
+
}
|
|
137
|
+
this._pointerId = undefined;
|
|
138
|
+
(_a = this._moveListener) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
139
|
+
(_b = this._upListener) === null || _b === void 0 ? void 0 : _b.dispose();
|
|
140
|
+
(_c = this._cancelListener) === null || _c === void 0 ? void 0 : _c.dispose();
|
|
141
|
+
this._moveListener = undefined;
|
|
142
|
+
this._upListener = undefined;
|
|
143
|
+
this._cancelListener = undefined;
|
|
144
|
+
};
|
|
145
|
+
LongPressDetector.prototype.dispose = function () {
|
|
146
|
+
this._cancelPending();
|
|
147
|
+
_super.prototype.dispose.call(this);
|
|
148
|
+
};
|
|
149
|
+
return LongPressDetector;
|
|
150
|
+
}(lifecycle_1.CompositeDisposable));
|
|
151
|
+
exports.LongPressDetector = LongPressDetector;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Event } from '../../events';
|
|
2
|
+
import { CompositeDisposable, IDisposable } from '../../lifecycle';
|
|
3
|
+
import { PointerGhost } from './pointerGhost';
|
|
4
|
+
import { IPointerDropTargetHandle, PointerDragEvent } from './types';
|
|
5
|
+
export interface ActiveDrag {
|
|
6
|
+
readonly pointerId: number;
|
|
7
|
+
readonly startX: number;
|
|
8
|
+
readonly startY: number;
|
|
9
|
+
readonly source: HTMLElement;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Singleton — only one pointer-driven drag active at a time.
|
|
13
|
+
*
|
|
14
|
+
* State is shared across every Dockview instance on the page. Targets
|
|
15
|
+
* from instance B receive hit-tests from drags originating in instance A;
|
|
16
|
+
* that's intentional for cross-instance drops since `LocalSelectionTransfer`
|
|
17
|
+
* is also process-wide. The corollary is that every Tabs subscriber to
|
|
18
|
+
* `onDragMove` fires for every pointer drag globally — each subscriber
|
|
19
|
+
* hit-tests against its own DOM, so this is O(N) per pointermove where N
|
|
20
|
+
* is the number of registered listeners across all instances.
|
|
21
|
+
*/
|
|
22
|
+
export declare class PointerDragController extends CompositeDisposable {
|
|
23
|
+
private static _instance;
|
|
24
|
+
static getInstance(): PointerDragController;
|
|
25
|
+
private readonly _targets;
|
|
26
|
+
/** Kept in sync with `_targets` so hit-testing is allocation-free. */
|
|
27
|
+
private readonly _targetByElement;
|
|
28
|
+
private _active;
|
|
29
|
+
private _currentTarget;
|
|
30
|
+
private _dataDisposable;
|
|
31
|
+
private _ghost;
|
|
32
|
+
private _moveListener;
|
|
33
|
+
private _upListener;
|
|
34
|
+
private _cancelListener;
|
|
35
|
+
private _iframeShield;
|
|
36
|
+
private _onDragMoveCallback?;
|
|
37
|
+
private _onDragEndCallback?;
|
|
38
|
+
private readonly _onDragStart;
|
|
39
|
+
readonly onDragStart: Event<PointerDragEvent>;
|
|
40
|
+
private readonly _onDragMove;
|
|
41
|
+
readonly onDragMove: Event<PointerDragEvent>;
|
|
42
|
+
private readonly _onDragEnd;
|
|
43
|
+
readonly onDragEnd: Event<PointerDragEvent>;
|
|
44
|
+
private constructor();
|
|
45
|
+
get active(): ActiveDrag | undefined;
|
|
46
|
+
registerTarget(target: IPointerDropTargetHandle): IDisposable;
|
|
47
|
+
beginDrag(args: {
|
|
48
|
+
pointerEvent: PointerEvent;
|
|
49
|
+
source: HTMLElement;
|
|
50
|
+
getData: () => IDisposable;
|
|
51
|
+
ghost?: PointerGhost;
|
|
52
|
+
onDragMove?: (e: PointerDragEvent) => void;
|
|
53
|
+
onDragEnd?: (e: PointerDragEvent, dropped: boolean) => void;
|
|
54
|
+
}): void;
|
|
55
|
+
cancel(): void;
|
|
56
|
+
private _findTargetUnder;
|
|
57
|
+
private _handleMove;
|
|
58
|
+
private _handleEnd;
|
|
59
|
+
private _teardown;
|
|
60
|
+
}
|