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
|
@@ -0,0 +1,198 @@
|
|
|
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.PointerDropTarget = void 0;
|
|
19
|
+
var events_1 = require("../../events");
|
|
20
|
+
var lifecycle_1 = require("../../lifecycle");
|
|
21
|
+
var dropOverlay_1 = require("../dropOverlay");
|
|
22
|
+
var droptarget_1 = require("../droptarget");
|
|
23
|
+
var pointerDragController_1 = require("./pointerDragController");
|
|
24
|
+
var DEFAULT_ACTIVATION_SIZE = {
|
|
25
|
+
value: 20,
|
|
26
|
+
type: 'percentage',
|
|
27
|
+
};
|
|
28
|
+
/** Pointer-driven counterpart to `Droptarget` with identical visual output. */
|
|
29
|
+
var PointerDropTarget = /** @class */ (function (_super) {
|
|
30
|
+
__extends(PointerDropTarget, _super);
|
|
31
|
+
function PointerDropTarget(element, options) {
|
|
32
|
+
var _this = _super.call(this) || this;
|
|
33
|
+
_this.element = element;
|
|
34
|
+
_this.options = options;
|
|
35
|
+
_this._onDrop = new events_1.Emitter();
|
|
36
|
+
_this.onDrop = _this._onDrop.event;
|
|
37
|
+
_this._onWillShowOverlay = new events_1.Emitter();
|
|
38
|
+
_this.onWillShowOverlay = _this._onWillShowOverlay.event;
|
|
39
|
+
_this._disabled = false;
|
|
40
|
+
_this._acceptedTargetZonesSet = new Set(options.acceptedTargetZones);
|
|
41
|
+
var handle = {
|
|
42
|
+
element: _this.element,
|
|
43
|
+
handleDragOver: function (e) { return _this._onDragOver(e); },
|
|
44
|
+
handleDragLeave: function () { return _this._onDragLeave(); },
|
|
45
|
+
handleDrop: function (e) { return _this._onDropEvent(e); },
|
|
46
|
+
};
|
|
47
|
+
_this.addDisposables(_this._onDrop, _this._onWillShowOverlay, pointerDragController_1.PointerDragController.getInstance().registerTarget(handle));
|
|
48
|
+
return _this;
|
|
49
|
+
}
|
|
50
|
+
Object.defineProperty(PointerDropTarget.prototype, "disabled", {
|
|
51
|
+
get: function () {
|
|
52
|
+
return this._disabled;
|
|
53
|
+
},
|
|
54
|
+
set: function (value) {
|
|
55
|
+
this._disabled = value;
|
|
56
|
+
if (value) {
|
|
57
|
+
this._removeOverlay();
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
enumerable: false,
|
|
61
|
+
configurable: true
|
|
62
|
+
});
|
|
63
|
+
Object.defineProperty(PointerDropTarget.prototype, "state", {
|
|
64
|
+
get: function () {
|
|
65
|
+
return this._state;
|
|
66
|
+
},
|
|
67
|
+
enumerable: false,
|
|
68
|
+
configurable: true
|
|
69
|
+
});
|
|
70
|
+
PointerDropTarget.prototype.setTargetZones = function (zones) {
|
|
71
|
+
this._acceptedTargetZonesSet = new Set(zones);
|
|
72
|
+
};
|
|
73
|
+
PointerDropTarget.prototype.setOverlayModel = function (model) {
|
|
74
|
+
this.options.overlayModel = model;
|
|
75
|
+
};
|
|
76
|
+
PointerDropTarget.prototype.dispose = function () {
|
|
77
|
+
this._removeOverlay();
|
|
78
|
+
_super.prototype.dispose.call(this);
|
|
79
|
+
};
|
|
80
|
+
PointerDropTarget.prototype._onDragOver = function (event) {
|
|
81
|
+
var _a, _b, _c, _d, _e;
|
|
82
|
+
if (this._disabled) {
|
|
83
|
+
this._removeOverlay();
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
var overrideTarget = (_b = (_a = this.options).getOverrideTarget) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
87
|
+
if (this._acceptedTargetZonesSet.size === 0) {
|
|
88
|
+
if (overrideTarget) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
this._removeOverlay();
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
var outlineEl = (_e = (_d = (_c = this.options).getOverlayOutline) === null || _d === void 0 ? void 0 : _d.call(_c)) !== null && _e !== void 0 ? _e : this.element;
|
|
95
|
+
var width = outlineEl.offsetWidth;
|
|
96
|
+
var height = outlineEl.offsetHeight;
|
|
97
|
+
if (width === 0 || height === 0) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
var rect = outlineEl.getBoundingClientRect();
|
|
101
|
+
var x = event.clientX - rect.left;
|
|
102
|
+
var y = event.clientY - rect.top;
|
|
103
|
+
var quadrant = this._calculateQuadrant(x, y, width, height);
|
|
104
|
+
if (quadrant === null) {
|
|
105
|
+
this._removeOverlay();
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (!this.options.canDisplayOverlay(event.pointerEvent, quadrant)) {
|
|
109
|
+
if (overrideTarget) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
this._removeOverlay();
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
var willShow = new droptarget_1.WillShowOverlayEvent({
|
|
116
|
+
nativeEvent: event.pointerEvent,
|
|
117
|
+
position: quadrant,
|
|
118
|
+
});
|
|
119
|
+
this._onWillShowOverlay.fire(willShow);
|
|
120
|
+
if (willShow.defaultPrevented) {
|
|
121
|
+
this._removeOverlay();
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (overrideTarget) {
|
|
125
|
+
(0, dropOverlay_1.renderAnchoredOverlay)({
|
|
126
|
+
outlineElement: outlineEl,
|
|
127
|
+
targetModel: overrideTarget,
|
|
128
|
+
quadrant: quadrant,
|
|
129
|
+
width: width,
|
|
130
|
+
height: height,
|
|
131
|
+
overlayModel: this.options.overlayModel,
|
|
132
|
+
className: this.options.className,
|
|
133
|
+
});
|
|
134
|
+
this._state = quadrant;
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
if (!this._targetElement) {
|
|
138
|
+
var els = (0, dropOverlay_1.createOverlayElements)();
|
|
139
|
+
this._targetElement = els.dropzone;
|
|
140
|
+
this._overlayElement = els.selection;
|
|
141
|
+
this._state = 'center';
|
|
142
|
+
this.element.classList.add('dv-drop-target');
|
|
143
|
+
this.element.append(this._targetElement);
|
|
144
|
+
}
|
|
145
|
+
if (this._overlayElement) {
|
|
146
|
+
(0, dropOverlay_1.renderInPlaceOverlay)(this._overlayElement, quadrant, width, height, this.options.overlayModel);
|
|
147
|
+
}
|
|
148
|
+
this._state = quadrant;
|
|
149
|
+
};
|
|
150
|
+
PointerDropTarget.prototype._onDragLeave = function () {
|
|
151
|
+
var _a, _b;
|
|
152
|
+
var overrideTarget = (_b = (_a = this.options).getOverrideTarget) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
153
|
+
// Anchor target owns its own lifecycle; just clear our latched
|
|
154
|
+
// state so a subsequent pointerup doesn't fire a stale drop.
|
|
155
|
+
if (overrideTarget) {
|
|
156
|
+
this._state = undefined;
|
|
157
|
+
overrideTarget.clear();
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
this._removeOverlay();
|
|
161
|
+
};
|
|
162
|
+
PointerDropTarget.prototype._onDropEvent = function (event) {
|
|
163
|
+
var _a, _b;
|
|
164
|
+
var state = this._state;
|
|
165
|
+
var overrideTarget = (_b = (_a = this.options).getOverrideTarget) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
166
|
+
this._removeOverlay();
|
|
167
|
+
overrideTarget === null || overrideTarget === void 0 ? void 0 : overrideTarget.clear();
|
|
168
|
+
if (state) {
|
|
169
|
+
this._onDrop.fire({
|
|
170
|
+
position: state,
|
|
171
|
+
nativeEvent: event.pointerEvent,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
PointerDropTarget.prototype._calculateQuadrant = function (x, y, width, height) {
|
|
176
|
+
var _a, _b;
|
|
177
|
+
var activation = (_b = (_a = this.options.overlayModel) === null || _a === void 0 ? void 0 : _a.activationSize) !== null && _b !== void 0 ? _b : DEFAULT_ACTIVATION_SIZE;
|
|
178
|
+
if (activation.type === 'percentage') {
|
|
179
|
+
return (0, droptarget_1.calculateQuadrantAsPercentage)(this._acceptedTargetZonesSet, x, y, width, height, activation.value);
|
|
180
|
+
}
|
|
181
|
+
return (0, droptarget_1.calculateQuadrantAsPixels)(this._acceptedTargetZonesSet, x, y, width, height, activation.value);
|
|
182
|
+
};
|
|
183
|
+
PointerDropTarget.prototype._removeOverlay = function () {
|
|
184
|
+
var _a;
|
|
185
|
+
if (this._targetElement) {
|
|
186
|
+
this._state = undefined;
|
|
187
|
+
(_a = this._targetElement.parentElement) === null || _a === void 0 ? void 0 : _a.classList.remove('dv-drop-target');
|
|
188
|
+
this._targetElement.remove();
|
|
189
|
+
this._targetElement = undefined;
|
|
190
|
+
this._overlayElement = undefined;
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
this._state = undefined;
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
return PointerDropTarget;
|
|
197
|
+
}(lifecycle_1.CompositeDisposable));
|
|
198
|
+
exports.PointerDropTarget = PointerDropTarget;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { IDisposable } from '../../lifecycle';
|
|
2
|
+
export interface PointerGhostOptions {
|
|
3
|
+
element: HTMLElement;
|
|
4
|
+
initialX: number;
|
|
5
|
+
initialY: number;
|
|
6
|
+
/** Pointer position within the ghost; default top-left. */
|
|
7
|
+
offsetX?: number;
|
|
8
|
+
offsetY?: number;
|
|
9
|
+
/** Default 0.8. */
|
|
10
|
+
opacity?: number;
|
|
11
|
+
/**
|
|
12
|
+
* Source element whose `ownerDocument.body` hosts the ghost — pass for
|
|
13
|
+
* popout-window drags so the ghost renders in the popout's document.
|
|
14
|
+
*/
|
|
15
|
+
owner?: Element;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Floating clone that follows the pointer; appended to the owning
|
|
19
|
+
* document's body with `pointer-events: none` so it doesn't intercept
|
|
20
|
+
* hit-testing.
|
|
21
|
+
*/
|
|
22
|
+
export declare class PointerGhost implements IDisposable {
|
|
23
|
+
private readonly element;
|
|
24
|
+
private readonly offsetX;
|
|
25
|
+
private readonly offsetY;
|
|
26
|
+
private _disposed;
|
|
27
|
+
constructor(opts: PointerGhostOptions);
|
|
28
|
+
update(clientX: number, clientY: number): void;
|
|
29
|
+
dispose(): void;
|
|
30
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PointerGhost = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Floating clone that follows the pointer; appended to the owning
|
|
6
|
+
* document's body with `pointer-events: none` so it doesn't intercept
|
|
7
|
+
* hit-testing.
|
|
8
|
+
*/
|
|
9
|
+
var PointerGhost = /** @class */ (function () {
|
|
10
|
+
function PointerGhost(opts) {
|
|
11
|
+
var _a, _b, _c, _d, _e;
|
|
12
|
+
this._disposed = false;
|
|
13
|
+
this.element = opts.element;
|
|
14
|
+
this.offsetX = (_a = opts.offsetX) !== null && _a !== void 0 ? _a : 0;
|
|
15
|
+
this.offsetY = (_b = opts.offsetY) !== null && _b !== void 0 ? _b : 0;
|
|
16
|
+
// Animate via transform (see update); position:fixed for scroll-independence.
|
|
17
|
+
this.element.style.position = 'fixed';
|
|
18
|
+
this.element.style.left = '0px';
|
|
19
|
+
this.element.style.top = '0px';
|
|
20
|
+
this.element.style.pointerEvents = 'none';
|
|
21
|
+
this.element.style.zIndex = '99999';
|
|
22
|
+
this.element.style.opacity = String((_c = opts.opacity) !== null && _c !== void 0 ? _c : 0.8);
|
|
23
|
+
this.element.style.willChange = 'transform';
|
|
24
|
+
this.element.style.transform = "translate3d(".concat(opts.initialX - this.offsetX, "px, ").concat(opts.initialY - this.offsetY, "px, 0)");
|
|
25
|
+
var ownerDocument = (_e = (_d = opts.owner) === null || _d === void 0 ? void 0 : _d.ownerDocument) !== null && _e !== void 0 ? _e : document;
|
|
26
|
+
ownerDocument.body.appendChild(this.element);
|
|
27
|
+
}
|
|
28
|
+
PointerGhost.prototype.update = function (clientX, clientY) {
|
|
29
|
+
if (this._disposed) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
// translate3d composites on the GPU — no layout per pointermove.
|
|
33
|
+
this.element.style.transform = "translate3d(".concat(clientX - this.offsetX, "px, ").concat(clientY - this.offsetY, "px, 0)");
|
|
34
|
+
};
|
|
35
|
+
PointerGhost.prototype.dispose = function () {
|
|
36
|
+
if (this._disposed) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
this._disposed = true;
|
|
40
|
+
this.element.remove();
|
|
41
|
+
};
|
|
42
|
+
return PointerGhost;
|
|
43
|
+
}());
|
|
44
|
+
exports.PointerGhost = PointerGhost;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Position } from '../droptarget';
|
|
2
|
+
export interface PointerDragEvent {
|
|
3
|
+
readonly clientX: number;
|
|
4
|
+
readonly clientY: number;
|
|
5
|
+
readonly pointerEvent: PointerEvent;
|
|
6
|
+
}
|
|
7
|
+
export interface PointerDroptargetEvent {
|
|
8
|
+
readonly position: Position;
|
|
9
|
+
readonly nativeEvent: PointerEvent;
|
|
10
|
+
}
|
|
11
|
+
export interface IPointerDropTargetHandle {
|
|
12
|
+
readonly element: HTMLElement;
|
|
13
|
+
handleDragOver(event: PointerDragEvent): void;
|
|
14
|
+
handleDragLeave(): void;
|
|
15
|
+
handleDrop(event: PointerDragEvent): void;
|
|
16
|
+
}
|
|
@@ -2,10 +2,11 @@ import { CompositeDisposable, IDisposable } from '../../../lifecycle';
|
|
|
2
2
|
import { Event } from '../../../events';
|
|
3
3
|
import { IDockviewPanel } from '../../dockviewPanel';
|
|
4
4
|
import { DockviewComponent } from '../../dockviewComponent';
|
|
5
|
-
import { Droptarget } from '../../../dnd/droptarget';
|
|
5
|
+
import { Droptarget, IDropTarget } from '../../../dnd/droptarget';
|
|
6
6
|
import { DockviewGroupPanelModel } from '../../dockviewGroupPanelModel';
|
|
7
7
|
export interface IContentContainer extends IDisposable {
|
|
8
8
|
readonly dropTarget: Droptarget;
|
|
9
|
+
readonly pointerDropTarget: IDropTarget;
|
|
9
10
|
onDidFocus: Event<void>;
|
|
10
11
|
onDidBlur: Event<void>;
|
|
11
12
|
element: HTMLElement;
|
|
@@ -32,6 +33,7 @@ export declare class ContentContainer extends CompositeDisposable implements ICo
|
|
|
32
33
|
readonly onDidBlur: Event<void>;
|
|
33
34
|
get element(): HTMLElement;
|
|
34
35
|
readonly dropTarget: Droptarget;
|
|
36
|
+
readonly pointerDropTarget: IDropTarget;
|
|
35
37
|
constructor(accessor: DockviewComponent, group: DockviewGroupPanelModel);
|
|
36
38
|
show(): void;
|
|
37
39
|
hide(): void;
|
|
@@ -20,6 +20,7 @@ var lifecycle_1 = require("../../../lifecycle");
|
|
|
20
20
|
var events_1 = require("../../../events");
|
|
21
21
|
var dom_1 = require("../../../dom");
|
|
22
22
|
var droptarget_1 = require("../../../dnd/droptarget");
|
|
23
|
+
var backend_1 = require("../../../dnd/backend");
|
|
23
24
|
var dataTransfer_1 = require("../../../dnd/dataTransfer");
|
|
24
25
|
var ContentContainer = /** @class */ (function (_super) {
|
|
25
26
|
__extends(ContentContainer, _super);
|
|
@@ -37,6 +38,25 @@ var ContentContainer = /** @class */ (function (_super) {
|
|
|
37
38
|
_this._element.tabIndex = -1;
|
|
38
39
|
_this.addDisposables(_this._onDidFocus, _this._onDidBlur);
|
|
39
40
|
var target = group.dropTargetContainer;
|
|
41
|
+
var canDisplayOverlay = function (event, position) {
|
|
42
|
+
if (_this.group.locked === 'no-drop-target' ||
|
|
43
|
+
(_this.group.locked && position === 'center')) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
var data = (0, dataTransfer_1.getPanelData)();
|
|
47
|
+
if (!data &&
|
|
48
|
+
event.shiftKey &&
|
|
49
|
+
_this.group.location.type !== 'floating') {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
if (data && data.viewId === _this.accessor.id) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
return _this.group.canDisplayOverlay(event, position, 'content');
|
|
56
|
+
};
|
|
57
|
+
// `dropTarget` stays the concrete `Droptarget` (not via the backend
|
|
58
|
+
// factory) because overlayRenderContainer forwards HTML5 drag events
|
|
59
|
+
// through `dropTarget.dnd` — that field is not part of `IDropTarget`.
|
|
40
60
|
_this.dropTarget = new droptarget_1.Droptarget(_this.element, {
|
|
41
61
|
getOverlayOutline: function () {
|
|
42
62
|
var _a;
|
|
@@ -46,25 +66,22 @@ var ContentContainer = /** @class */ (function (_super) {
|
|
|
46
66
|
},
|
|
47
67
|
className: 'dv-drop-target-content',
|
|
48
68
|
acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
|
|
49
|
-
canDisplayOverlay:
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
if (data && data.viewId === _this.accessor.id) {
|
|
61
|
-
return true;
|
|
62
|
-
}
|
|
63
|
-
return _this.group.canDisplayOverlay(event, position, 'content');
|
|
69
|
+
canDisplayOverlay: canDisplayOverlay,
|
|
70
|
+
getOverrideTarget: target ? function () { return target.model; } : undefined,
|
|
71
|
+
});
|
|
72
|
+
_this.pointerDropTarget = backend_1.pointerBackend.createDropTarget(_this.element, {
|
|
73
|
+
acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
|
|
74
|
+
canDisplayOverlay: canDisplayOverlay,
|
|
75
|
+
getOverlayOutline: function () {
|
|
76
|
+
var _a;
|
|
77
|
+
return ((_a = accessor.options.theme) === null || _a === void 0 ? void 0 : _a.dndPanelOverlay) === 'group'
|
|
78
|
+
? _this.element.parentElement
|
|
79
|
+
: null;
|
|
64
80
|
},
|
|
81
|
+
className: 'dv-drop-target-content',
|
|
65
82
|
getOverrideTarget: target ? function () { return target.model; } : undefined,
|
|
66
83
|
});
|
|
67
|
-
_this.addDisposables(_this.dropTarget);
|
|
84
|
+
_this.addDisposables(_this.dropTarget, _this.pointerDropTarget);
|
|
68
85
|
return _this;
|
|
69
86
|
}
|
|
70
87
|
Object.defineProperty(ContentContainer.prototype, "element", {
|
|
@@ -19,6 +19,14 @@ exports.PopupService = void 0;
|
|
|
19
19
|
var dom_1 = require("../../dom");
|
|
20
20
|
var events_1 = require("../../events");
|
|
21
21
|
var lifecycle_1 = require("../../lifecycle");
|
|
22
|
+
function isCoarsePrimaryInput(win) {
|
|
23
|
+
if (!win.matchMedia) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
var coarse = win.matchMedia('(pointer: coarse)').matches;
|
|
27
|
+
var fine = win.matchMedia('(pointer: fine)').matches;
|
|
28
|
+
return coarse && !fine;
|
|
29
|
+
}
|
|
22
30
|
var PopupService = /** @class */ (function (_super) {
|
|
23
31
|
__extends(PopupService, _super);
|
|
24
32
|
function PopupService(root, win) {
|
|
@@ -61,8 +69,22 @@ var PopupService = /** @class */ (function (_super) {
|
|
|
61
69
|
wrapper.style.left = "".concat(position.x - offsetX, "px");
|
|
62
70
|
this._element.appendChild(wrapper);
|
|
63
71
|
this._active = wrapper;
|
|
72
|
+
// Outside-pointerdown dismissal is suppressed for a short grace
|
|
73
|
+
// window after opening. Touch long-press callers (chip / tab context
|
|
74
|
+
// menus) open the popover while the user's finger is still pressing
|
|
75
|
+
// the source element — Android Chrome can dispatch a follow-up
|
|
76
|
+
// synthetic pointerdown tied to the gesture, and the release-then-
|
|
77
|
+
// retap motion can land just outside the wrapper. Either would
|
|
78
|
+
// dismiss the popover before the user can see or interact with it.
|
|
79
|
+
// The grace window is short enough that intentional outside taps
|
|
80
|
+
// still feel responsive.
|
|
81
|
+
var openedAt = Date.now();
|
|
82
|
+
var POINTERDOWN_GRACE_MS = 200;
|
|
64
83
|
this._activeDisposable.value = new lifecycle_1.CompositeDisposable((0, events_1.addDisposableListener)(this._window, 'pointerdown', function (event) {
|
|
65
84
|
var _a;
|
|
85
|
+
if (Date.now() - openedAt < POINTERDOWN_GRACE_MS) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
66
88
|
var target = event.target;
|
|
67
89
|
if (!(target instanceof HTMLElement)) {
|
|
68
90
|
return;
|
|
@@ -80,6 +102,18 @@ var PopupService = /** @class */ (function (_super) {
|
|
|
80
102
|
_this.close();
|
|
81
103
|
}
|
|
82
104
|
}), (0, events_1.addDisposableListener)(this._window, 'resize', function () {
|
|
105
|
+
// On touch-primary devices, common interactions resize the
|
|
106
|
+
// window: on-screen keyboard pop, orientation change, browser
|
|
107
|
+
// address-bar collapse. None of these mean "the user wants
|
|
108
|
+
// the popover dismissed". Specifically, focusing the chip
|
|
109
|
+
// context menu's rename input pops the keyboard, which would
|
|
110
|
+
// otherwise close the menu the moment the user goes to edit
|
|
111
|
+
// it. Desktop / hybrid input keeps the existing behaviour —
|
|
112
|
+
// there a resize genuinely means the user has resized the
|
|
113
|
+
// window and the popover position is now stale.
|
|
114
|
+
if (isCoarsePrimaryInput(_this._window)) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
83
117
|
_this.close();
|
|
84
118
|
}));
|
|
85
119
|
this._window.requestAnimationFrame(function () {
|
|
@@ -12,8 +12,11 @@ export declare class Tab extends CompositeDisposable {
|
|
|
12
12
|
private readonly group;
|
|
13
13
|
private readonly _element;
|
|
14
14
|
private readonly dropTarget;
|
|
15
|
+
private readonly pointerDropTarget;
|
|
15
16
|
private content;
|
|
16
|
-
private readonly
|
|
17
|
+
private readonly html5DragSource;
|
|
18
|
+
private readonly pointerDragSource;
|
|
19
|
+
private readonly panelTransfer;
|
|
17
20
|
private _direction;
|
|
18
21
|
private readonly _onPointDown;
|
|
19
22
|
readonly onPointerDown: Event<MouseEvent>;
|
|
@@ -22,9 +25,9 @@ export declare class Tab extends CompositeDisposable {
|
|
|
22
25
|
private readonly _onDropped;
|
|
23
26
|
readonly onDrop: Event<DroptargetEvent>;
|
|
24
27
|
private readonly _onDragStart;
|
|
25
|
-
readonly onDragStart: Event<DragEvent>;
|
|
28
|
+
readonly onDragStart: Event<PointerEvent | DragEvent>;
|
|
26
29
|
private readonly _onDragEnd;
|
|
27
|
-
readonly onDragEnd: Event<DragEvent>;
|
|
30
|
+
readonly onDragEnd: Event<PointerEvent | DragEvent>;
|
|
28
31
|
readonly onWillShowOverlay: Event<WillShowOverlayEvent>;
|
|
29
32
|
get element(): HTMLElement;
|
|
30
33
|
constructor(panel: IDockviewPanel, accessor: DockviewComponent, group: DockviewGroupPanel);
|
|
@@ -33,4 +36,9 @@ export declare class Tab extends CompositeDisposable {
|
|
|
33
36
|
private _buildOverlayModel;
|
|
34
37
|
setDirection(direction: DockviewHeaderDirection): void;
|
|
35
38
|
updateDragAndDropState(): void;
|
|
39
|
+
/**
|
|
40
|
+
* Vertical tabs are flipped to horizontal so the ghost stays readable
|
|
41
|
+
* during the drag rather than appearing sideways-rotated.
|
|
42
|
+
*/
|
|
43
|
+
private _buildGhostElement;
|
|
36
44
|
}
|