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
|
@@ -70,6 +70,10 @@ var DockviewDidDropEvent = /** @class */ (function (_super) {
|
|
|
70
70
|
return _this;
|
|
71
71
|
}
|
|
72
72
|
Object.defineProperty(DockviewDidDropEvent.prototype, "nativeEvent", {
|
|
73
|
+
/**
|
|
74
|
+
* `PointerEvent` for touch drags has no `dataTransfer`; use
|
|
75
|
+
* `getData()` for the dockview payload regardless of input method.
|
|
76
|
+
*/
|
|
73
77
|
get: function () {
|
|
74
78
|
return this.options.nativeEvent;
|
|
75
79
|
},
|
|
@@ -261,6 +265,8 @@ var DockviewGroupPanelModel = /** @class */ (function (_super) {
|
|
|
261
265
|
// noop
|
|
262
266
|
}), _this.contentContainer.dropTarget.onDrop(function (event) {
|
|
263
267
|
_this.handleDropEvent('content', event.nativeEvent, event.position);
|
|
268
|
+
}), _this.contentContainer.pointerDropTarget.onDrop(function (event) {
|
|
269
|
+
_this.handleDropEvent('content', event.nativeEvent, event.position);
|
|
264
270
|
}), _this.tabsContainer.onWillShowOverlay(function (event) {
|
|
265
271
|
_this._onWillShowOverlay.fire(event);
|
|
266
272
|
}), _this.contentContainer.dropTarget.onWillShowOverlay(function (event) {
|
|
@@ -271,6 +277,14 @@ var DockviewGroupPanelModel = /** @class */ (function (_super) {
|
|
|
271
277
|
group: _this.groupPanel,
|
|
272
278
|
getData: dataTransfer_1.getPanelData,
|
|
273
279
|
}));
|
|
280
|
+
}), _this.contentContainer.pointerDropTarget.onWillShowOverlay(function (event) {
|
|
281
|
+
_this._onWillShowOverlay.fire(new events_2.DockviewWillShowOverlayLocationEvent(event, {
|
|
282
|
+
kind: 'content',
|
|
283
|
+
panel: _this.activePanel,
|
|
284
|
+
api: _this._api,
|
|
285
|
+
group: _this.groupPanel,
|
|
286
|
+
getData: dataTransfer_1.getPanelData,
|
|
287
|
+
}));
|
|
274
288
|
}), _this._onMove, _this._onDidChange, _this._onDidDrop, _this._onWillDrop, _this._onDidAddPanel, _this._onDidRemovePanel, _this._onDidActivePanelChange, _this._onUnhandledDragOverEvent, _this._onDidPanelTitleChange, _this._onDidPanelParametersChange, _this._onDidCreateTabGroup, _this._onDidDestroyTabGroup, _this._onDidAddPanelToTabGroup, _this._onDidRemovePanelFromTabGroup, _this._onDidTabGroupChange, _this._onDidTabGroupCollapsedChange, _this._onDidCreateTabGroup.event(function () {
|
|
275
289
|
_this._scheduleTabGroupUpdate();
|
|
276
290
|
}), _this._onDidDestroyTabGroup.event(function () {
|
|
@@ -402,33 +416,33 @@ var DockviewGroupPanelModel = /** @class */ (function (_super) {
|
|
|
402
416
|
return this._location;
|
|
403
417
|
},
|
|
404
418
|
set: function (value) {
|
|
419
|
+
var _this = this;
|
|
405
420
|
this._location = value;
|
|
406
421
|
(0, dom_1.toggleClass)(this.container, 'dv-groupview-floating', false);
|
|
407
422
|
(0, dom_1.toggleClass)(this.container, 'dv-groupview-popout', false);
|
|
408
423
|
(0, dom_1.toggleClass)(this.container, 'dv-groupview-edge', false);
|
|
424
|
+
// Mouse and touch drop targets must agree on accepted zones.
|
|
425
|
+
var applyZones = function (zones) {
|
|
426
|
+
_this.contentContainer.dropTarget.setTargetZones(zones);
|
|
427
|
+
_this.contentContainer.pointerDropTarget.setTargetZones(zones);
|
|
428
|
+
};
|
|
409
429
|
switch (value.type) {
|
|
410
430
|
case 'grid':
|
|
411
|
-
|
|
412
|
-
'top',
|
|
413
|
-
'bottom',
|
|
414
|
-
'left',
|
|
415
|
-
'right',
|
|
416
|
-
'center',
|
|
417
|
-
]);
|
|
431
|
+
applyZones(['top', 'bottom', 'left', 'right', 'center']);
|
|
418
432
|
break;
|
|
419
433
|
case 'floating':
|
|
420
|
-
|
|
421
|
-
|
|
434
|
+
applyZones(['center']);
|
|
435
|
+
applyZones(value
|
|
422
436
|
? ['center']
|
|
423
437
|
: ['top', 'bottom', 'left', 'right', 'center']);
|
|
424
438
|
(0, dom_1.toggleClass)(this.container, 'dv-groupview-floating', true);
|
|
425
439
|
break;
|
|
426
440
|
case 'popout':
|
|
427
|
-
|
|
441
|
+
applyZones(['center']);
|
|
428
442
|
(0, dom_1.toggleClass)(this.container, 'dv-groupview-popout', true);
|
|
429
443
|
break;
|
|
430
444
|
case 'edge':
|
|
431
|
-
|
|
445
|
+
applyZones(['center']);
|
|
432
446
|
(0, dom_1.toggleClass)(this.container, 'dv-groupview-edge', true);
|
|
433
447
|
break;
|
|
434
448
|
}
|
|
@@ -25,7 +25,8 @@ export declare class DockviewWillShowOverlayLocationEvent implements IDockviewEv
|
|
|
25
25
|
private readonly event;
|
|
26
26
|
readonly options: DockviewWillShowOverlayLocationEventOptions;
|
|
27
27
|
get kind(): DockviewGroupDropLocation;
|
|
28
|
-
|
|
28
|
+
/** Narrow with `instanceof DragEvent` before reading `dataTransfer`. */
|
|
29
|
+
get nativeEvent(): DragEvent | PointerEvent;
|
|
29
30
|
get position(): Position;
|
|
30
31
|
get defaultPrevented(): boolean;
|
|
31
32
|
get panel(): IDockviewPanel | undefined;
|
|
@@ -14,6 +14,7 @@ var DockviewWillShowOverlayLocationEvent = /** @class */ (function () {
|
|
|
14
14
|
configurable: true
|
|
15
15
|
});
|
|
16
16
|
Object.defineProperty(DockviewWillShowOverlayLocationEvent.prototype, "nativeEvent", {
|
|
17
|
+
/** Narrow with `instanceof DragEvent` before reading `dataTransfer`. */
|
|
17
18
|
get: function () {
|
|
18
19
|
return this.event.nativeEvent;
|
|
19
20
|
},
|
|
@@ -77,6 +77,7 @@ export interface ViewFactoryData {
|
|
|
77
77
|
}
|
|
78
78
|
export type DockviewHeaderPosition = 'top' | 'bottom' | 'left' | 'right';
|
|
79
79
|
export type DockviewHeaderDirection = 'horizontal' | 'vertical';
|
|
80
|
+
export type DockviewDndStrategy = 'auto' | 'pointer' | 'html5';
|
|
80
81
|
export interface DockviewOptions {
|
|
81
82
|
/**
|
|
82
83
|
* Disable the auto-resizing which is controlled through a `ResizeObserver`.
|
|
@@ -101,6 +102,19 @@ export interface DockviewOptions {
|
|
|
101
102
|
* */
|
|
102
103
|
rootOverlayModel?: DroptargetOverlayModel;
|
|
103
104
|
disableDnd?: boolean;
|
|
105
|
+
/**
|
|
106
|
+
* Selects which drag-and-drop implementation is active.
|
|
107
|
+
*
|
|
108
|
+
* - `'auto'` (default): HTML5 drag-and-drop drives mouse drags; pointer
|
|
109
|
+
* events drive touch and pen drags. Matches the historical behaviour.
|
|
110
|
+
* - `'pointer'`: pointer events drive every input type. Useful in
|
|
111
|
+
* environments where HTML5 drag-and-drop is unreliable (some Linux
|
|
112
|
+
* browsers, certain Safari versions, embedded webviews). Cross-window
|
|
113
|
+
* HTML5 drag and the HTML5 native drag image are not available in this
|
|
114
|
+
* mode.
|
|
115
|
+
* - `'html5'`: HTML5 drag-and-drop only — disables touch / pen drag.
|
|
116
|
+
*/
|
|
117
|
+
dndStrategy?: DockviewDndStrategy;
|
|
104
118
|
locked?: boolean;
|
|
105
119
|
className?: string;
|
|
106
120
|
/**
|
|
@@ -177,19 +191,20 @@ export interface DockviewOptions {
|
|
|
177
191
|
}
|
|
178
192
|
export type TabAnimation = 'smooth' | 'default';
|
|
179
193
|
export interface DockviewDndOverlayEvent extends IAcceptableEvent {
|
|
180
|
-
|
|
194
|
+
/** Narrow with `instanceof DragEvent` before reading `dataTransfer`. */
|
|
195
|
+
nativeEvent: DragEvent | PointerEvent;
|
|
181
196
|
target: DockviewGroupDropLocation;
|
|
182
197
|
position: Position;
|
|
183
198
|
group?: DockviewGroupPanel;
|
|
184
199
|
getData: () => PanelTransfer | undefined;
|
|
185
200
|
}
|
|
186
201
|
export declare class DockviewUnhandledDragOverEvent extends AcceptableEvent implements DockviewDndOverlayEvent {
|
|
187
|
-
readonly nativeEvent: DragEvent;
|
|
202
|
+
readonly nativeEvent: DragEvent | PointerEvent;
|
|
188
203
|
readonly target: DockviewGroupDropLocation;
|
|
189
204
|
readonly position: Position;
|
|
190
205
|
readonly getData: () => PanelTransfer | undefined;
|
|
191
206
|
readonly group?: DockviewGroupPanel | undefined;
|
|
192
|
-
constructor(nativeEvent: DragEvent, target: DockviewGroupDropLocation, position: Position, getData: () => PanelTransfer | undefined, group?: DockviewGroupPanel | undefined);
|
|
207
|
+
constructor(nativeEvent: DragEvent | PointerEvent, target: DockviewGroupDropLocation, position: Position, getData: () => PanelTransfer | undefined, group?: DockviewGroupPanel | undefined);
|
|
193
208
|
}
|
|
194
209
|
export declare const PROPERTY_KEYS_DOCKVIEW: (keyof DockviewOptions)[];
|
|
195
210
|
export interface CreateComponentOptions {
|
package/dist/cjs/dom.js
CHANGED
|
@@ -313,7 +313,7 @@ function addTestId(element, id) {
|
|
|
313
313
|
* Should be more efficient than element.querySelectorAll("*") since there
|
|
314
314
|
* is no need to store every element in-memory using this approach
|
|
315
315
|
*/
|
|
316
|
-
function allTagsNamesInclusiveOfShadowDoms(tagNames) {
|
|
316
|
+
function allTagsNamesInclusiveOfShadowDoms(tagNames, rootNode) {
|
|
317
317
|
var iframes = [];
|
|
318
318
|
function findIframesInNode(node) {
|
|
319
319
|
var e_5, _a;
|
|
@@ -339,13 +339,17 @@ function allTagsNamesInclusiveOfShadowDoms(tagNames) {
|
|
|
339
339
|
}
|
|
340
340
|
}
|
|
341
341
|
}
|
|
342
|
-
|
|
342
|
+
// Document → walk from its root element. Element → walk from itself.
|
|
343
|
+
var startEl = rootNode instanceof Document
|
|
344
|
+
? rootNode.documentElement
|
|
345
|
+
: rootNode;
|
|
346
|
+
findIframesInNode(startEl);
|
|
343
347
|
return iframes;
|
|
344
348
|
}
|
|
345
349
|
function disableIframePointEvents(rootNode) {
|
|
346
350
|
var e_6, _a;
|
|
347
351
|
if (rootNode === void 0) { rootNode = document; }
|
|
348
|
-
var iframes = allTagsNamesInclusiveOfShadowDoms(['IFRAME', 'WEBVIEW']);
|
|
352
|
+
var iframes = allTagsNamesInclusiveOfShadowDoms(['IFRAME', 'WEBVIEW'], rootNode);
|
|
349
353
|
var original = new WeakMap(); // don't hold onto HTMLElement references longer than required
|
|
350
354
|
try {
|
|
351
355
|
for (var iframes_1 = __values(iframes), iframes_1_1 = iframes_1.next(); !iframes_1_1.done; iframes_1_1 = iframes_1.next()) {
|
|
@@ -8,6 +8,11 @@ export declare class Overlay extends CompositeDisposable {
|
|
|
8
8
|
readonly onDidChange: Event<void>;
|
|
9
9
|
private readonly _onDidChangeEnd;
|
|
10
10
|
readonly onDidChangeEnd: Event<void>;
|
|
11
|
+
private readonly _onDidStartMoving;
|
|
12
|
+
/** Fires once per drag, the first time the float actually moves. */
|
|
13
|
+
readonly onDidStartMoving: Event<void>;
|
|
14
|
+
private readonly _dragMove;
|
|
15
|
+
private _dragCancelled;
|
|
11
16
|
private static readonly MINIMUM_HEIGHT;
|
|
12
17
|
private static readonly MINIMUM_WIDTH;
|
|
13
18
|
private verticalAlignment;
|
|
@@ -27,6 +32,13 @@ export declare class Overlay extends CompositeDisposable {
|
|
|
27
32
|
bringToFront(): void;
|
|
28
33
|
setBounds(bounds?: Partial<AnchoredBox>): void;
|
|
29
34
|
toJSON(): AnchoredBox;
|
|
35
|
+
/**
|
|
36
|
+
* Abort an in-flight move-the-float drag. Used by the void container
|
|
37
|
+
* when a redock long-press fires after the move started, so the ghost
|
|
38
|
+
* gesture wins without the float continuing to follow the finger.
|
|
39
|
+
* Does not emit `onDidChangeEnd` because no change is being committed.
|
|
40
|
+
*/
|
|
41
|
+
cancelPendingDrag(): void;
|
|
30
42
|
setupDrag(dragTarget: HTMLElement, options?: {
|
|
31
43
|
inDragMode: boolean;
|
|
32
44
|
}): void;
|
|
@@ -90,7 +90,12 @@ var Overlay = /** @class */ (function (_super) {
|
|
|
90
90
|
_this.onDidChange = _this._onDidChange.event;
|
|
91
91
|
_this._onDidChangeEnd = new events_1.Emitter();
|
|
92
92
|
_this.onDidChangeEnd = _this._onDidChangeEnd.event;
|
|
93
|
-
_this.
|
|
93
|
+
_this._onDidStartMoving = new events_1.Emitter();
|
|
94
|
+
/** Fires once per drag, the first time the float actually moves. */
|
|
95
|
+
_this.onDidStartMoving = _this._onDidStartMoving.event;
|
|
96
|
+
_this._dragMove = new lifecycle_1.MutableDisposable();
|
|
97
|
+
_this._dragCancelled = false;
|
|
98
|
+
_this.addDisposables(_this._onDidChange, _this._onDidChangeEnd, _this._onDidStartMoving, _this._dragMove);
|
|
94
99
|
_this._element.className = 'dv-resize-container';
|
|
95
100
|
_this._isVisible = true;
|
|
96
101
|
_this.setupResize('top');
|
|
@@ -229,18 +234,62 @@ var Overlay = /** @class */ (function (_super) {
|
|
|
229
234
|
result.height = element.height;
|
|
230
235
|
return result;
|
|
231
236
|
};
|
|
237
|
+
/**
|
|
238
|
+
* Abort an in-flight move-the-float drag. Used by the void container
|
|
239
|
+
* when a redock long-press fires after the move started, so the ghost
|
|
240
|
+
* gesture wins without the float continuing to follow the finger.
|
|
241
|
+
* Does not emit `onDidChangeEnd` because no change is being committed.
|
|
242
|
+
*/
|
|
243
|
+
Overlay.prototype.cancelPendingDrag = function () {
|
|
244
|
+
if (!this._dragMove.value) {
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
this._dragCancelled = true;
|
|
248
|
+
(0, dom_1.toggleClass)(this._element, 'dv-resize-container-dragging', false);
|
|
249
|
+
this._dragMove.value = lifecycle_1.Disposable.NONE;
|
|
250
|
+
};
|
|
232
251
|
Overlay.prototype.setupDrag = function (dragTarget, options) {
|
|
233
252
|
var _this = this;
|
|
234
253
|
if (options === void 0) { options = { inDragMode: false }; }
|
|
235
|
-
var
|
|
236
|
-
var track = function () {
|
|
254
|
+
var track = function (captureTarget, pointerId) {
|
|
237
255
|
var offset = null;
|
|
256
|
+
var hasMoved = false;
|
|
257
|
+
_this._dragCancelled = false;
|
|
238
258
|
var iframes = (0, dom_1.disableIframePointEvents)();
|
|
239
|
-
|
|
259
|
+
if (captureTarget &&
|
|
260
|
+
typeof pointerId === 'number' &&
|
|
261
|
+
typeof captureTarget.setPointerCapture === 'function') {
|
|
262
|
+
try {
|
|
263
|
+
captureTarget.setPointerCapture(pointerId);
|
|
264
|
+
}
|
|
265
|
+
catch (_a) {
|
|
266
|
+
// ignore – non-fatal if the browser refuses capture
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
var end = function () {
|
|
270
|
+
(0, dom_1.toggleClass)(_this._element, 'dv-resize-container-dragging', false);
|
|
271
|
+
_this._dragMove.value = lifecycle_1.Disposable.NONE;
|
|
272
|
+
_this._onDidChangeEnd.fire();
|
|
273
|
+
};
|
|
274
|
+
_this._dragMove.value = new lifecycle_1.CompositeDisposable({
|
|
240
275
|
dispose: function () {
|
|
241
276
|
iframes.release();
|
|
277
|
+
if (captureTarget &&
|
|
278
|
+
typeof pointerId === 'number' &&
|
|
279
|
+
typeof captureTarget.releasePointerCapture ===
|
|
280
|
+
'function') {
|
|
281
|
+
try {
|
|
282
|
+
captureTarget.releasePointerCapture(pointerId);
|
|
283
|
+
}
|
|
284
|
+
catch (_a) {
|
|
285
|
+
// ignore – pointer may already be released
|
|
286
|
+
}
|
|
287
|
+
}
|
|
242
288
|
},
|
|
243
289
|
}, (0, events_1.addDisposableListener)(window, 'pointermove', function (e) {
|
|
290
|
+
if (_this._dragCancelled) {
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
244
293
|
var containerRect = _this.options.container.getBoundingClientRect();
|
|
245
294
|
var x = e.clientX - containerRect.left;
|
|
246
295
|
var y = e.clientY - containerRect.top;
|
|
@@ -277,13 +326,13 @@ var Overlay = /** @class */ (function (_super) {
|
|
|
277
326
|
bounds.right = right;
|
|
278
327
|
}
|
|
279
328
|
_this.setBounds(bounds);
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
}));
|
|
329
|
+
if (!hasMoved) {
|
|
330
|
+
hasMoved = true;
|
|
331
|
+
_this._onDidStartMoving.fire();
|
|
332
|
+
}
|
|
333
|
+
}), (0, events_1.addDisposableListener)(window, 'pointerup', end), (0, events_1.addDisposableListener)(window, 'pointercancel', end));
|
|
285
334
|
};
|
|
286
|
-
this.addDisposables(
|
|
335
|
+
this.addDisposables((0, events_1.addDisposableListener)(dragTarget, 'pointerdown', function (event) {
|
|
287
336
|
if (event.defaultPrevented) {
|
|
288
337
|
event.preventDefault();
|
|
289
338
|
return;
|
|
@@ -293,7 +342,7 @@ var Overlay = /** @class */ (function (_super) {
|
|
|
293
342
|
if ((0, dom_1.quasiDefaultPrevented)(event)) {
|
|
294
343
|
return;
|
|
295
344
|
}
|
|
296
|
-
track();
|
|
345
|
+
track(dragTarget, event.pointerId);
|
|
297
346
|
}), (0, events_1.addDisposableListener)(this.options.content, 'pointerdown', function (event) {
|
|
298
347
|
if (event.defaultPrevented) {
|
|
299
348
|
return;
|
|
@@ -304,7 +353,7 @@ var Overlay = /** @class */ (function (_super) {
|
|
|
304
353
|
return;
|
|
305
354
|
}
|
|
306
355
|
if (event.shiftKey) {
|
|
307
|
-
track();
|
|
356
|
+
track(_this.options.content, event.pointerId);
|
|
308
357
|
}
|
|
309
358
|
}), (0, events_1.addDisposableListener)(this.options.content, 'pointerdown', function () {
|
|
310
359
|
arialLevelTracker.push(_this._element);
|
|
@@ -323,6 +372,19 @@ var Overlay = /** @class */ (function (_super) {
|
|
|
323
372
|
e.preventDefault();
|
|
324
373
|
var startPosition = null;
|
|
325
374
|
var iframes = (0, dom_1.disableIframePointEvents)();
|
|
375
|
+
var pointerId = e.pointerId;
|
|
376
|
+
if (typeof resizeHandleElement.setPointerCapture === 'function') {
|
|
377
|
+
try {
|
|
378
|
+
resizeHandleElement.setPointerCapture(pointerId);
|
|
379
|
+
}
|
|
380
|
+
catch (_a) {
|
|
381
|
+
// ignore – non-fatal if the browser refuses capture
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
var end = function () {
|
|
385
|
+
move.dispose();
|
|
386
|
+
_this._onDidChangeEnd.fire();
|
|
387
|
+
};
|
|
326
388
|
move.value = new lifecycle_1.CompositeDisposable((0, events_1.addDisposableListener)(window, 'pointermove', function (e) {
|
|
327
389
|
var containerRect = _this.options.container.getBoundingClientRect();
|
|
328
390
|
var overlayRect = _this._element.getBoundingClientRect();
|
|
@@ -457,11 +519,17 @@ var Overlay = /** @class */ (function (_super) {
|
|
|
457
519
|
}), {
|
|
458
520
|
dispose: function () {
|
|
459
521
|
iframes.release();
|
|
522
|
+
if (typeof resizeHandleElement.releasePointerCapture ===
|
|
523
|
+
'function') {
|
|
524
|
+
try {
|
|
525
|
+
resizeHandleElement.releasePointerCapture(pointerId);
|
|
526
|
+
}
|
|
527
|
+
catch (_a) {
|
|
528
|
+
// ignore – pointer may already be released
|
|
529
|
+
}
|
|
530
|
+
}
|
|
460
531
|
},
|
|
461
|
-
}, (0, events_1.addDisposableListener)(window, 'pointerup',
|
|
462
|
-
move.dispose();
|
|
463
|
-
_this._onDidChangeEnd.fire();
|
|
464
|
-
}));
|
|
532
|
+
}, (0, events_1.addDisposableListener)(window, 'pointerup', end), (0, events_1.addDisposableListener)(window, 'pointercancel', end));
|
|
465
533
|
}));
|
|
466
534
|
};
|
|
467
535
|
Overlay.prototype.getMinimumWidth = function (width) {
|
|
@@ -12,8 +12,10 @@ export interface PaneviewDidDropEvent extends DroptargetEvent {
|
|
|
12
12
|
api: PaneviewApi;
|
|
13
13
|
}
|
|
14
14
|
export declare abstract class DraggablePaneviewPanel extends PaneviewPanel {
|
|
15
|
-
private
|
|
15
|
+
private html5DragSource;
|
|
16
|
+
private pointerDragSource;
|
|
16
17
|
private target;
|
|
18
|
+
private pointerTarget;
|
|
17
19
|
private readonly _onDidDrop;
|
|
18
20
|
readonly onDidDrop: Event<PaneviewDidDropEvent>;
|
|
19
21
|
private readonly _onUnhandledDragOverEvent;
|
|
@@ -28,9 +28,8 @@ var __assign = (this && this.__assign) || function () {
|
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
29
|
exports.DraggablePaneviewPanel = void 0;
|
|
30
30
|
var component_api_1 = require("../api/component.api");
|
|
31
|
-
var
|
|
31
|
+
var backend_1 = require("../dnd/backend");
|
|
32
32
|
var dataTransfer_1 = require("../dnd/dataTransfer");
|
|
33
|
-
var droptarget_1 = require("../dnd/droptarget");
|
|
34
33
|
var events_1 = require("../events");
|
|
35
34
|
var options_1 = require("./options");
|
|
36
35
|
var paneviewPanel_1 = require("./paneviewPanel");
|
|
@@ -67,40 +66,42 @@ var DraggablePaneviewPanel = /** @class */ (function (_super) {
|
|
|
67
66
|
var id = this.id;
|
|
68
67
|
var accessorId = this.accessor.id;
|
|
69
68
|
this.header.draggable = true;
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
function PaneDragHandler() {
|
|
73
|
-
return _super !== null && _super.apply(this, arguments) || this;
|
|
74
|
-
}
|
|
75
|
-
PaneDragHandler.prototype.getData = function () {
|
|
69
|
+
var sharedDragOptions = {
|
|
70
|
+
getData: function () {
|
|
76
71
|
dataTransfer_1.LocalSelectionTransfer.getInstance().setData([new dataTransfer_1.PaneTransfer(accessorId, id)], dataTransfer_1.PaneTransfer.prototype);
|
|
77
72
|
return {
|
|
78
73
|
dispose: function () {
|
|
79
74
|
dataTransfer_1.LocalSelectionTransfer.getInstance().clearData(dataTransfer_1.PaneTransfer.prototype);
|
|
80
75
|
},
|
|
81
76
|
};
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
this.
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
this.html5DragSource = backend_1.html5Backend.createDragSource(this.header, sharedDragOptions);
|
|
80
|
+
this.pointerDragSource = backend_1.pointerBackend.createDragSource(this.header, sharedDragOptions);
|
|
81
|
+
var canDisplayOverlay = function (event, position) {
|
|
82
|
+
var data = (0, dataTransfer_1.getPaneData)();
|
|
83
|
+
if (data) {
|
|
84
|
+
if (data.paneId !== _this.id &&
|
|
85
|
+
data.viewId === _this.accessor.id) {
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
var firedEvent = new options_1.PaneviewUnhandledDragOverEvent(event, position, dataTransfer_1.getPaneData, _this);
|
|
90
|
+
_this._onUnhandledDragOverEvent.fire(firedEvent);
|
|
91
|
+
return firedEvent.isAccepted;
|
|
92
|
+
};
|
|
93
|
+
var dropTargetOptions = {
|
|
86
94
|
acceptedTargetZones: ['top', 'bottom'],
|
|
87
95
|
overlayModel: {
|
|
88
96
|
activationSize: { type: 'percentage', value: 50 },
|
|
89
97
|
},
|
|
90
|
-
canDisplayOverlay:
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
var firedEvent = new options_1.PaneviewUnhandledDragOverEvent(event, position, dataTransfer_1.getPaneData, _this);
|
|
99
|
-
_this._onUnhandledDragOverEvent.fire(firedEvent);
|
|
100
|
-
return firedEvent.isAccepted;
|
|
101
|
-
},
|
|
102
|
-
});
|
|
103
|
-
this.addDisposables(this._onDidDrop, this.handler, this.target, this.target.onDrop(function (event) {
|
|
98
|
+
canDisplayOverlay: canDisplayOverlay,
|
|
99
|
+
};
|
|
100
|
+
this.target = backend_1.html5Backend.createDropTarget(this.element, dropTargetOptions);
|
|
101
|
+
this.pointerTarget = backend_1.pointerBackend.createDropTarget(this.element, dropTargetOptions);
|
|
102
|
+
this.addDisposables(this._onDidDrop, this.html5DragSource, this.pointerDragSource, this.target, this.pointerTarget, this.target.onDrop(function (event) {
|
|
103
|
+
_this.onDrop(event);
|
|
104
|
+
}), this.pointerTarget.onDrop(function (event) {
|
|
104
105
|
_this.onDrop(event);
|
|
105
106
|
}));
|
|
106
107
|
};
|
|
@@ -15,15 +15,16 @@ export interface PaneviewFrameworkOptions {
|
|
|
15
15
|
export type PaneviewComponentOptions = PaneviewOptions & PaneviewFrameworkOptions;
|
|
16
16
|
export declare const PROPERTY_KEYS_PANEVIEW: (keyof PaneviewOptions)[];
|
|
17
17
|
export interface PaneviewDndOverlayEvent extends IAcceptableEvent {
|
|
18
|
-
|
|
18
|
+
/** Narrow with `instanceof DragEvent` before reading `dataTransfer`. */
|
|
19
|
+
nativeEvent: DragEvent | PointerEvent;
|
|
19
20
|
position: Position;
|
|
20
21
|
panel: IPaneviewPanel;
|
|
21
22
|
getData: () => PaneTransfer | undefined;
|
|
22
23
|
}
|
|
23
24
|
export declare class PaneviewUnhandledDragOverEvent extends AcceptableEvent implements PaneviewDndOverlayEvent {
|
|
24
|
-
readonly nativeEvent: DragEvent;
|
|
25
|
+
readonly nativeEvent: DragEvent | PointerEvent;
|
|
25
26
|
readonly position: Position;
|
|
26
27
|
readonly getData: () => PaneTransfer | undefined;
|
|
27
28
|
readonly panel: IPaneviewPanel;
|
|
28
|
-
constructor(nativeEvent: DragEvent, position: Position, getData: () => PaneTransfer | undefined, panel: IPaneviewPanel);
|
|
29
|
+
constructor(nativeEvent: DragEvent | PointerEvent, position: Position, getData: () => PaneTransfer | undefined, panel: IPaneviewPanel);
|
|
29
30
|
}
|