dockview-core 6.3.0 → 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/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
|
@@ -14,36 +14,26 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
14
14
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
15
|
};
|
|
16
16
|
})();
|
|
17
|
+
var __assign = (this && this.__assign) || function () {
|
|
18
|
+
__assign = Object.assign || function(t) {
|
|
19
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
20
|
+
s = arguments[i];
|
|
21
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
22
|
+
t[p] = s[p];
|
|
23
|
+
}
|
|
24
|
+
return t;
|
|
25
|
+
};
|
|
26
|
+
return __assign.apply(this, arguments);
|
|
27
|
+
};
|
|
17
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
29
|
exports.Tab = void 0;
|
|
19
30
|
var events_1 = require("../../../events");
|
|
20
31
|
var lifecycle_1 = require("../../../lifecycle");
|
|
21
32
|
var dataTransfer_1 = require("../../../dnd/dataTransfer");
|
|
22
33
|
var dom_1 = require("../../../dom");
|
|
23
|
-
var
|
|
24
|
-
var
|
|
25
|
-
var
|
|
26
|
-
var TabDragHandler = /** @class */ (function (_super) {
|
|
27
|
-
__extends(TabDragHandler, _super);
|
|
28
|
-
function TabDragHandler(element, accessor, group, panel, disabled) {
|
|
29
|
-
var _this = _super.call(this, element, disabled) || this;
|
|
30
|
-
_this.accessor = accessor;
|
|
31
|
-
_this.group = group;
|
|
32
|
-
_this.panel = panel;
|
|
33
|
-
_this.panelTransfer = dataTransfer_1.LocalSelectionTransfer.getInstance();
|
|
34
|
-
return _this;
|
|
35
|
-
}
|
|
36
|
-
TabDragHandler.prototype.getData = function (event) {
|
|
37
|
-
var _this = this;
|
|
38
|
-
this.panelTransfer.setData([new dataTransfer_1.PanelTransfer(this.accessor.id, this.group.id, this.panel.id)], dataTransfer_1.PanelTransfer.prototype);
|
|
39
|
-
return {
|
|
40
|
-
dispose: function () {
|
|
41
|
-
_this.panelTransfer.clearData(dataTransfer_1.PanelTransfer.prototype);
|
|
42
|
-
},
|
|
43
|
-
};
|
|
44
|
-
};
|
|
45
|
-
return TabDragHandler;
|
|
46
|
-
}(abstractDragHandler_1.DragHandler));
|
|
34
|
+
var backend_1 = require("../../../dnd/backend");
|
|
35
|
+
var longPress_1 = require("../../../dnd/pointer/longPress");
|
|
36
|
+
var dndCapabilities_1 = require("../../dndCapabilities");
|
|
47
37
|
var Tab = /** @class */ (function (_super) {
|
|
48
38
|
__extends(Tab, _super);
|
|
49
39
|
function Tab(panel, accessor, group) {
|
|
@@ -52,6 +42,7 @@ var Tab = /** @class */ (function (_super) {
|
|
|
52
42
|
_this.accessor = accessor;
|
|
53
43
|
_this.group = group;
|
|
54
44
|
_this.content = undefined;
|
|
45
|
+
_this.panelTransfer = dataTransfer_1.LocalSelectionTransfer.getInstance();
|
|
55
46
|
_this._direction = 'horizontal';
|
|
56
47
|
_this._onPointDown = new events_1.Emitter();
|
|
57
48
|
_this.onPointerDown = _this._onPointDown.event;
|
|
@@ -63,114 +54,108 @@ var Tab = /** @class */ (function (_super) {
|
|
|
63
54
|
_this.onDragStart = _this._onDragStart.event;
|
|
64
55
|
_this._onDragEnd = new events_1.Emitter();
|
|
65
56
|
_this.onDragEnd = _this._onDragEnd.event;
|
|
57
|
+
var caps = (0, dndCapabilities_1.resolveDndCapabilities)(_this.accessor.options);
|
|
66
58
|
_this._element = document.createElement('div');
|
|
67
59
|
_this._element.className = 'dv-tab';
|
|
68
60
|
_this._element.tabIndex = 0;
|
|
69
|
-
_this._element.draggable =
|
|
61
|
+
_this._element.draggable = caps.html5;
|
|
70
62
|
(0, dom_1.toggleClass)(_this.element, 'dv-inactive-tab', true);
|
|
71
|
-
|
|
72
|
-
|
|
63
|
+
var canDisplayOverlay = function (event, position) {
|
|
64
|
+
var _a;
|
|
65
|
+
if (_this.group.locked) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
var data = (0, dataTransfer_1.getPanelData)();
|
|
69
|
+
if (data && _this.accessor.id === data.viewId) {
|
|
70
|
+
// Smooth-reorder takes over the in-flight visual when active,
|
|
71
|
+
// so individual tab overlays are suppressed for internal drags.
|
|
72
|
+
if (((_a = _this.accessor.options.theme) === null || _a === void 0 ? void 0 : _a.tabAnimation) === 'smooth') {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
return _this.group.model.canDisplayOverlay(event, position, 'tab');
|
|
78
|
+
};
|
|
79
|
+
_this.dropTarget = backend_1.html5Backend.createDropTarget(_this._element, {
|
|
80
|
+
acceptedTargetZones: ['left', 'right'],
|
|
81
|
+
overlayModel: _this._buildOverlayModel(),
|
|
82
|
+
canDisplayOverlay: canDisplayOverlay,
|
|
83
|
+
getOverrideTarget: function () { var _a; return (_a = group.model.dropTargetContainer) === null || _a === void 0 ? void 0 : _a.model; },
|
|
84
|
+
});
|
|
85
|
+
_this.pointerDropTarget = backend_1.pointerBackend.createDropTarget(_this._element, {
|
|
73
86
|
acceptedTargetZones: ['left', 'right'],
|
|
74
87
|
overlayModel: _this._buildOverlayModel(),
|
|
75
|
-
canDisplayOverlay:
|
|
88
|
+
canDisplayOverlay: canDisplayOverlay,
|
|
89
|
+
getOverrideTarget: function () { var _a; return (_a = group.model.dropTargetContainer) === null || _a === void 0 ? void 0 : _a.model; },
|
|
90
|
+
});
|
|
91
|
+
var sharedDragOptions = {
|
|
92
|
+
getData: function () {
|
|
93
|
+
_this.panelTransfer.setData([
|
|
94
|
+
new dataTransfer_1.PanelTransfer(_this.accessor.id, _this.group.id, _this.panel.id),
|
|
95
|
+
], dataTransfer_1.PanelTransfer.prototype);
|
|
96
|
+
return {
|
|
97
|
+
dispose: function () {
|
|
98
|
+
_this.panelTransfer.clearData(dataTransfer_1.PanelTransfer.prototype);
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
},
|
|
102
|
+
// 30/-10 matches the HTML5 setDragImage offset that has been
|
|
103
|
+
// shipped for years; pointer backend wraps in PointerGhost,
|
|
104
|
+
// HTML5 backend feeds into setDragImage.
|
|
105
|
+
createGhost: function () { return ({
|
|
106
|
+
element: _this._buildGhostElement(),
|
|
107
|
+
offsetX: 30,
|
|
108
|
+
offsetY: -10,
|
|
109
|
+
}); },
|
|
110
|
+
onDragStart: function (event) {
|
|
76
111
|
var _a;
|
|
77
|
-
|
|
78
|
-
|
|
112
|
+
_this._onDragStart.fire(event);
|
|
113
|
+
if (!(event instanceof PointerEvent) &&
|
|
114
|
+
((_a = _this.accessor.options.theme) === null || _a === void 0 ? void 0 : _a.tabAnimation) === 'smooth') {
|
|
115
|
+
// Delay collapse to next frame so the browser
|
|
116
|
+
// captures the full drag image first.
|
|
117
|
+
requestAnimationFrame(function () {
|
|
118
|
+
(0, dom_1.toggleClass)(_this.element, 'dv-tab--dragging', true);
|
|
119
|
+
});
|
|
79
120
|
}
|
|
80
|
-
var data = (0, dataTransfer_1.getPanelData)();
|
|
81
|
-
if (data && _this.accessor.id === data.viewId) {
|
|
82
|
-
if (((_a = _this.accessor.options.theme) === null || _a === void 0 ? void 0 : _a.tabAnimation) === 'smooth') {
|
|
83
|
-
// When smooth reorder is enabled, the Tabs
|
|
84
|
-
// container handles all intra-accessor drops
|
|
85
|
-
// (both same-group and cross-group) via
|
|
86
|
-
// animation. Suppress the per-tab overlay so
|
|
87
|
-
// the tab is dropped *beside* rather than *on*.
|
|
88
|
-
return false;
|
|
89
|
-
}
|
|
90
|
-
return true;
|
|
91
|
-
}
|
|
92
|
-
return _this.group.model.canDisplayOverlay(event, position, 'tab');
|
|
93
121
|
},
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
122
|
+
onDragEnd: function (event) {
|
|
123
|
+
_this._onDragEnd.fire(event);
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
_this.html5DragSource = backend_1.html5Backend.createDragSource(_this._element, __assign(__assign({}, sharedDragOptions), { disabled: !caps.html5 }));
|
|
127
|
+
_this.pointerDragSource = backend_1.pointerBackend.createDragSource(_this._element, __assign(__assign({}, sharedDragOptions), { disabled: !caps.pointer, touchOnly: !caps.pointerHandlesMouse, isCancelled: function () {
|
|
128
|
+
return !(0, dndCapabilities_1.resolveDndCapabilities)(_this.accessor.options).pointer;
|
|
129
|
+
} }));
|
|
130
|
+
// Both droptargets feed the same downstream stream; consumers don't
|
|
131
|
+
// need to know which path produced the overlay.
|
|
132
|
+
_this.onWillShowOverlay = events_1.Event.any(_this.dropTarget.onWillShowOverlay, _this.pointerDropTarget.onWillShowOverlay);
|
|
97
133
|
_this.addDisposables(_this._onPointDown, _this._onTabClick, _this._onDropped, _this._onDragStart, _this._onDragEnd, _this.accessor.onDidOptionsChange(function () {
|
|
98
|
-
_this.
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
var isVertical_1 = _this._direction === 'vertical';
|
|
105
|
-
/**
|
|
106
|
-
* Properties to skip when copying computed styles for a
|
|
107
|
-
* vertical tab ghost. `writing-mode` is excluded so we
|
|
108
|
-
* can force `horizontal-tb`. Size and margin logical
|
|
109
|
-
* properties are excluded because their physical meaning
|
|
110
|
-
* flips when writing-mode changes, which would produce
|
|
111
|
-
* incorrect dimensions.
|
|
112
|
-
*/
|
|
113
|
-
var verticalSkip_1 = new Set([
|
|
114
|
-
'writing-mode',
|
|
115
|
-
'inline-size',
|
|
116
|
-
'block-size',
|
|
117
|
-
'min-inline-size',
|
|
118
|
-
'min-block-size',
|
|
119
|
-
'max-inline-size',
|
|
120
|
-
'max-block-size',
|
|
121
|
-
'margin-inline',
|
|
122
|
-
'margin-inline-start',
|
|
123
|
-
'margin-inline-end',
|
|
124
|
-
'margin-block',
|
|
125
|
-
'margin-block-start',
|
|
126
|
-
'margin-block-end',
|
|
127
|
-
'padding-inline',
|
|
128
|
-
'padding-inline-start',
|
|
129
|
-
'padding-inline-end',
|
|
130
|
-
'padding-block',
|
|
131
|
-
'padding-block-start',
|
|
132
|
-
'padding-block-end',
|
|
133
|
-
]);
|
|
134
|
-
Array.from(style_1).forEach(function (key) {
|
|
135
|
-
if (isVertical_1 && verticalSkip_1.has(key)) {
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
newNode_1.style.setProperty(key, style_1.getPropertyValue(key), style_1.getPropertyPriority(key));
|
|
139
|
-
});
|
|
140
|
-
if (isVertical_1) {
|
|
141
|
-
// Force horizontal text flow and swap the physical
|
|
142
|
-
// dimensions so the ghost appears as a horizontal tab.
|
|
143
|
-
newNode_1.style.setProperty('writing-mode', 'horizontal-tb');
|
|
144
|
-
newNode_1.style.setProperty('width', style_1.height);
|
|
145
|
-
newNode_1.style.setProperty('height', style_1.width);
|
|
146
|
-
}
|
|
147
|
-
newNode_1.style.position = 'absolute';
|
|
148
|
-
newNode_1.classList.add('dv-tab-ghost-drag');
|
|
149
|
-
(0, ghost_1.addGhostImage)(event.dataTransfer, newNode_1, {
|
|
150
|
-
y: -10,
|
|
151
|
-
x: 30,
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
_this._onDragStart.fire(event);
|
|
155
|
-
if (((_a = _this.accessor.options.theme) === null || _a === void 0 ? void 0 : _a.tabAnimation) === 'smooth') {
|
|
156
|
-
// Delay collapse to next frame so the browser
|
|
157
|
-
// captures the full drag image first
|
|
158
|
-
requestAnimationFrame(function () {
|
|
159
|
-
(0, dom_1.toggleClass)(_this.element, 'dv-tab--dragging', true);
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
}), (0, events_1.addDisposableListener)(_this._element, 'dragend', function (event) {
|
|
134
|
+
var model = _this._buildOverlayModel();
|
|
135
|
+
_this.dropTarget.setOverlayModel(model);
|
|
136
|
+
_this.pointerDropTarget.setOverlayModel(model);
|
|
137
|
+
}), (0, events_1.addDisposableListener)(_this._element, 'dragend', function () {
|
|
138
|
+
// The shared onDragEnd handler already fires _onDragEnd via
|
|
139
|
+
// the HTML5 backend; just strip the dragging class here.
|
|
163
140
|
(0, dom_1.toggleClass)(_this.element, 'dv-tab--dragging', false);
|
|
164
|
-
|
|
165
|
-
}), _this.dragHandler, (0, events_1.addDisposableListener)(_this._element, 'pointerdown', function (event) {
|
|
141
|
+
}), _this.html5DragSource, (0, events_1.addDisposableListener)(_this._element, 'pointerdown', function (event) {
|
|
166
142
|
_this._onPointDown.fire(event);
|
|
167
143
|
}), (0, events_1.addDisposableListener)(_this._element, 'click', function (event) {
|
|
168
144
|
_this._onTabClick.fire(event);
|
|
169
145
|
}), (0, events_1.addDisposableListener)(_this._element, 'contextmenu', function (event) {
|
|
170
146
|
_this.accessor.contextMenuController.show(_this.panel, _this.group, event);
|
|
147
|
+
}), new longPress_1.LongPressDetector(_this._element, {
|
|
148
|
+
onLongPress: function (event) {
|
|
149
|
+
// Don't let a subsequent finger move arm a drag on top
|
|
150
|
+
// of the just-opened menu.
|
|
151
|
+
_this.pointerDragSource.cancelPending();
|
|
152
|
+
_this.accessor.contextMenuController.show(_this.panel, _this.group, event);
|
|
153
|
+
},
|
|
171
154
|
}), _this.dropTarget.onDrop(function (event) {
|
|
172
155
|
_this._onDropped.fire(event);
|
|
173
|
-
}), _this.
|
|
156
|
+
}), _this.pointerDropTarget.onDrop(function (event) {
|
|
157
|
+
_this._onDropped.fire(event);
|
|
158
|
+
}), _this.dropTarget, _this.pointerDropTarget, _this.pointerDragSource);
|
|
174
159
|
return _this;
|
|
175
160
|
}
|
|
176
161
|
Object.defineProperty(Tab.prototype, "element", {
|
|
@@ -208,11 +193,60 @@ var Tab = /** @class */ (function (_super) {
|
|
|
208
193
|
};
|
|
209
194
|
Tab.prototype.setDirection = function (direction) {
|
|
210
195
|
this._direction = direction;
|
|
211
|
-
|
|
196
|
+
var zones = direction === 'vertical' ? ['top', 'bottom'] : ['left', 'right'];
|
|
197
|
+
this.dropTarget.setTargetZones(zones);
|
|
198
|
+
this.pointerDropTarget.setTargetZones(zones);
|
|
212
199
|
};
|
|
213
200
|
Tab.prototype.updateDragAndDropState = function () {
|
|
214
|
-
|
|
215
|
-
this.
|
|
201
|
+
var caps = (0, dndCapabilities_1.resolveDndCapabilities)(this.accessor.options);
|
|
202
|
+
this._element.draggable = caps.html5;
|
|
203
|
+
this.html5DragSource.setDisabled(!caps.html5);
|
|
204
|
+
this.pointerDragSource.setDisabled(!caps.pointer);
|
|
205
|
+
this.pointerDragSource.setTouchOnly(!caps.pointerHandlesMouse);
|
|
206
|
+
};
|
|
207
|
+
/**
|
|
208
|
+
* Vertical tabs are flipped to horizontal so the ghost stays readable
|
|
209
|
+
* during the drag rather than appearing sideways-rotated.
|
|
210
|
+
*/
|
|
211
|
+
Tab.prototype._buildGhostElement = function () {
|
|
212
|
+
var style = getComputedStyle(this.element);
|
|
213
|
+
var newNode = this.element.cloneNode(true);
|
|
214
|
+
var isVertical = this._direction === 'vertical';
|
|
215
|
+
var verticalSkip = new Set([
|
|
216
|
+
'writing-mode',
|
|
217
|
+
'inline-size',
|
|
218
|
+
'block-size',
|
|
219
|
+
'min-inline-size',
|
|
220
|
+
'min-block-size',
|
|
221
|
+
'max-inline-size',
|
|
222
|
+
'max-block-size',
|
|
223
|
+
'margin-inline',
|
|
224
|
+
'margin-inline-start',
|
|
225
|
+
'margin-inline-end',
|
|
226
|
+
'margin-block',
|
|
227
|
+
'margin-block-start',
|
|
228
|
+
'margin-block-end',
|
|
229
|
+
'padding-inline',
|
|
230
|
+
'padding-inline-start',
|
|
231
|
+
'padding-inline-end',
|
|
232
|
+
'padding-block',
|
|
233
|
+
'padding-block-start',
|
|
234
|
+
'padding-block-end',
|
|
235
|
+
]);
|
|
236
|
+
Array.from(style).forEach(function (key) {
|
|
237
|
+
if (isVertical && verticalSkip.has(key)) {
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
newNode.style.setProperty(key, style.getPropertyValue(key), style.getPropertyPriority(key));
|
|
241
|
+
});
|
|
242
|
+
if (isVertical) {
|
|
243
|
+
newNode.style.setProperty('writing-mode', 'horizontal-tb');
|
|
244
|
+
newNode.style.setProperty('width', style.height);
|
|
245
|
+
newNode.style.setProperty('height', style.width);
|
|
246
|
+
}
|
|
247
|
+
newNode.style.position = 'absolute';
|
|
248
|
+
newNode.classList.add('dv-tab-ghost-drag');
|
|
249
|
+
return newNode;
|
|
216
250
|
};
|
|
217
251
|
return Tab;
|
|
218
252
|
}(lifecycle_1.CompositeDisposable));
|
|
@@ -4,6 +4,14 @@ import { ITabGroup } from '../../tabGroup';
|
|
|
4
4
|
import { TabGroupColorPalette } from '../../tabGroupAccent';
|
|
5
5
|
import { ITabGroupChipRenderer } from '../../framework';
|
|
6
6
|
import { DockviewApi } from '../../../api/component.api';
|
|
7
|
+
/**
|
|
8
|
+
* Visual chip for a tab group. Owns the DOM element, label, click /
|
|
9
|
+
* context-menu interactions, and exposes a long-press gesture as a
|
|
10
|
+
* second `onContextMenu` source. Drag-and-drop wiring lives in
|
|
11
|
+
* `TabGroupManager` — the manager constructs the drag sources on this
|
|
12
|
+
* chip's element so it can include tabs-list context (custom group
|
|
13
|
+
* drag image, tab-group transfer payload).
|
|
14
|
+
*/
|
|
7
15
|
export declare class TabGroupChip extends CompositeDisposable implements ITabGroupChipRenderer {
|
|
8
16
|
private readonly _palette?;
|
|
9
17
|
private readonly _element;
|
|
@@ -12,9 +20,8 @@ export declare class TabGroupChip extends CompositeDisposable implements ITabGro
|
|
|
12
20
|
private readonly _onClick;
|
|
13
21
|
readonly onClick: Event<MouseEvent>;
|
|
14
22
|
private readonly _onContextMenu;
|
|
23
|
+
/** Fires on right-click and on touch long-press. */
|
|
15
24
|
readonly onContextMenu: Event<MouseEvent>;
|
|
16
|
-
private readonly _onDragStart;
|
|
17
|
-
readonly onDragStart: Event<DragEvent>;
|
|
18
25
|
get element(): HTMLElement;
|
|
19
26
|
constructor(_palette?: TabGroupColorPalette | undefined);
|
|
20
27
|
init(params: {
|
|
@@ -20,6 +20,15 @@ var events_1 = require("../../../events");
|
|
|
20
20
|
var lifecycle_1 = require("../../../lifecycle");
|
|
21
21
|
var dom_1 = require("../../../dom");
|
|
22
22
|
var tabGroupAccent_1 = require("../../tabGroupAccent");
|
|
23
|
+
var longPress_1 = require("../../../dnd/pointer/longPress");
|
|
24
|
+
/**
|
|
25
|
+
* Visual chip for a tab group. Owns the DOM element, label, click /
|
|
26
|
+
* context-menu interactions, and exposes a long-press gesture as a
|
|
27
|
+
* second `onContextMenu` source. Drag-and-drop wiring lives in
|
|
28
|
+
* `TabGroupManager` — the manager constructs the drag sources on this
|
|
29
|
+
* chip's element so it can include tabs-list context (custom group
|
|
30
|
+
* drag image, tab-group transfer payload).
|
|
31
|
+
*/
|
|
23
32
|
var TabGroupChip = /** @class */ (function (_super) {
|
|
24
33
|
__extends(TabGroupChip, _super);
|
|
25
34
|
function TabGroupChip(_palette) {
|
|
@@ -28,22 +37,22 @@ var TabGroupChip = /** @class */ (function (_super) {
|
|
|
28
37
|
_this._onClick = new events_1.Emitter();
|
|
29
38
|
_this.onClick = _this._onClick.event;
|
|
30
39
|
_this._onContextMenu = new events_1.Emitter();
|
|
40
|
+
/** Fires on right-click and on touch long-press. */
|
|
31
41
|
_this.onContextMenu = _this._onContextMenu.event;
|
|
32
|
-
_this._onDragStart = new events_1.Emitter();
|
|
33
|
-
_this.onDragStart = _this._onDragStart.event;
|
|
34
42
|
_this._element = document.createElement('div');
|
|
35
43
|
_this._element.className = 'dv-tab-group-chip';
|
|
36
44
|
_this._element.tabIndex = 0;
|
|
37
|
-
_this._element.draggable = true;
|
|
38
45
|
_this._label = document.createElement('span');
|
|
39
46
|
_this._label.className = 'dv-tab-group-chip-label';
|
|
40
47
|
_this._element.appendChild(_this._label);
|
|
41
|
-
_this.addDisposables(_this._onClick, _this._onContextMenu,
|
|
48
|
+
_this.addDisposables(_this._onClick, _this._onContextMenu, new longPress_1.LongPressDetector(_this._element, {
|
|
49
|
+
onLongPress: function (event) {
|
|
50
|
+
_this._onContextMenu.fire(event);
|
|
51
|
+
},
|
|
52
|
+
}), (0, events_1.addDisposableListener)(_this._element, 'click', function (event) {
|
|
42
53
|
_this._onClick.fire(event);
|
|
43
54
|
}), (0, events_1.addDisposableListener)(_this._element, 'contextmenu', function (event) {
|
|
44
55
|
_this._onContextMenu.fire(event);
|
|
45
|
-
}), (0, events_1.addDisposableListener)(_this._element, 'dragstart', function (event) {
|
|
46
|
-
_this._onDragStart.fire(event);
|
|
47
56
|
}));
|
|
48
57
|
return _this;
|
|
49
58
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { IDragSource } from '../../../dnd/backend';
|
|
1
2
|
import { IDisposable, IValueDisposable } from '../../../lifecycle';
|
|
2
3
|
import { DockviewComponent } from '../../dockviewComponent';
|
|
3
4
|
import { DockviewGroupPanel } from '../../dockviewGroupPanel';
|
|
@@ -5,6 +6,7 @@ import { DockviewHeaderDirection } from '../../options';
|
|
|
5
6
|
import { Tab } from '../tab/tab';
|
|
6
7
|
import { ITabGroup } from '../../tabGroup';
|
|
7
8
|
import { ITabGroupChipRenderer } from '../../framework';
|
|
9
|
+
import { Droptarget, DroptargetEvent } from '../../../dnd/droptarget';
|
|
8
10
|
export interface TabGroupManagerContext {
|
|
9
11
|
readonly group: DockviewGroupPanel;
|
|
10
12
|
readonly accessor: DockviewComponent;
|
|
@@ -15,7 +17,21 @@ export interface TabGroupManagerContext {
|
|
|
15
17
|
}
|
|
16
18
|
export interface TabGroupManagerCallbacks {
|
|
17
19
|
onChipContextMenu(tabGroup: ITabGroup, event: MouseEvent): void;
|
|
18
|
-
onChipDragStart(tabGroup: ITabGroup, chip: ITabGroupChipRenderer, event: DragEvent): void;
|
|
20
|
+
onChipDragStart(tabGroup: ITabGroup, chip: ITabGroupChipRenderer, event: DragEvent | PointerEvent): void;
|
|
21
|
+
/**
|
|
22
|
+
* HTML5 chip dragend only. Pointer dragend is handled centrally via
|
|
23
|
+
* `PointerDragController.onDragEnd` in `tabs.ts`.
|
|
24
|
+
*/
|
|
25
|
+
onChipDragEnd?(tabGroup: ITabGroup, chip: ITabGroupChipRenderer, event: DragEvent | PointerEvent): void;
|
|
26
|
+
onChipDrop(tabGroup: ITabGroup, event: DroptargetEvent): void;
|
|
27
|
+
}
|
|
28
|
+
interface ChipRendererEntry {
|
|
29
|
+
chip: ITabGroupChipRenderer;
|
|
30
|
+
/** Created by the manager so it can be toggled live on strategy changes. */
|
|
31
|
+
html5DragSource: IDragSource;
|
|
32
|
+
pointerDragSource: IDragSource;
|
|
33
|
+
disposable: IDisposable;
|
|
34
|
+
dropTarget: Droptarget;
|
|
19
35
|
}
|
|
20
36
|
export declare class TabGroupManager {
|
|
21
37
|
private readonly _ctx;
|
|
@@ -24,10 +40,7 @@ export declare class TabGroupManager {
|
|
|
24
40
|
private _indicator;
|
|
25
41
|
private _skipNextCollapseAnimation;
|
|
26
42
|
private readonly _pendingTransitionCleanups;
|
|
27
|
-
get chipRenderers(): ReadonlyMap<string,
|
|
28
|
-
chip: ITabGroupChipRenderer;
|
|
29
|
-
disposable: IDisposable;
|
|
30
|
-
}>;
|
|
43
|
+
get chipRenderers(): ReadonlyMap<string, ChipRendererEntry>;
|
|
31
44
|
get groupUnderlines(): ReadonlyMap<string, HTMLElement>;
|
|
32
45
|
get skipNextCollapseAnimation(): boolean;
|
|
33
46
|
set skipNextCollapseAnimation(value: boolean);
|
|
@@ -44,14 +57,29 @@ export declare class TabGroupManager {
|
|
|
44
57
|
*/
|
|
45
58
|
refreshAccents(): void;
|
|
46
59
|
positionAllChips(): void;
|
|
60
|
+
updateDirection(): void;
|
|
47
61
|
snapshotChipWidths(): Map<string, number>;
|
|
48
62
|
positionUnderlines(): void;
|
|
49
63
|
trackUnderlines(): void;
|
|
50
64
|
setGroupDragImage(event: DragEvent, tabGroup: ITabGroup, chipEl: HTMLElement): void;
|
|
51
65
|
cleanupTransition(panelId: string): void;
|
|
66
|
+
updateDragAndDropState(): void;
|
|
67
|
+
/**
|
|
68
|
+
* Synchronously dispose the chip drag sources for an in-flight chip
|
|
69
|
+
* drag. Called from `_commitGroupMove` so the transfer payload +
|
|
70
|
+
* iframe shield are released BEFORE the cross-group move detaches
|
|
71
|
+
* the chip (chip dispose is scheduled on a microtask via
|
|
72
|
+
* `_scheduleTabGroupUpdate`, which is too late for callers that read
|
|
73
|
+
* `getPanelData()` synchronously after the move). Idempotent — the
|
|
74
|
+
* subsequent `update()` will also dispose the sources.
|
|
75
|
+
*/
|
|
76
|
+
disposeChipDrag(tabGroupId: string): void;
|
|
77
|
+
/** Cloned chip rect used as the pointer follow-finger ghost. */
|
|
78
|
+
private _buildChipGhostElement;
|
|
52
79
|
disposeAll(): void;
|
|
53
80
|
private _ensureIndicator;
|
|
54
81
|
private _ensureChipForGroup;
|
|
55
82
|
private _positionChipForGroup;
|
|
56
83
|
private _updateTabGroupClasses;
|
|
57
84
|
}
|
|
85
|
+
export {};
|