dockview-core 3.1.1 → 4.0.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/dist/cjs/api/component.api.d.ts +0 -2
- package/dist/cjs/api/component.api.js +0 -10
- package/dist/cjs/dnd/abstractDragHandler.js +4 -2
- package/dist/cjs/dnd/dropTargetAnchorContainer.d.ts +16 -0
- package/dist/cjs/dnd/dropTargetAnchorContainer.js +105 -0
- package/dist/cjs/dnd/droptarget.d.ts +16 -0
- package/dist/cjs/dnd/droptarget.js +138 -14
- package/dist/cjs/dnd/ghost.d.ts +4 -1
- package/dist/cjs/dnd/ghost.js +3 -2
- package/dist/cjs/dnd/groupDragHandler.js +3 -1
- package/dist/cjs/dockview/components/panel/content.js +10 -13
- package/dist/cjs/dockview/components/popupService.d.ts +13 -0
- package/dist/cjs/dockview/components/popupService.js +76 -0
- package/dist/cjs/dockview/components/tab/tab.js +17 -7
- package/dist/cjs/dockview/components/titlebar/tabOverflowControl.d.ts +8 -0
- package/dist/cjs/dockview/components/titlebar/tabOverflowControl.js +20 -0
- package/dist/cjs/dockview/components/titlebar/tabs.d.ts +45 -0
- package/dist/cjs/dockview/components/titlebar/tabs.js +288 -0
- package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts +8 -9
- package/dist/cjs/dockview/components/titlebar/tabsContainer.js +108 -152
- package/dist/cjs/dockview/components/titlebar/voidContainer.js +2 -9
- package/dist/cjs/dockview/dockviewComponent.d.ts +10 -3
- package/dist/cjs/dockview/dockviewComponent.js +71 -30
- package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +4 -0
- package/dist/cjs/dockview/dockviewGroupPanelModel.js +31 -0
- package/dist/cjs/dockview/dockviewPanelModel.d.ts +5 -3
- package/dist/cjs/dockview/dockviewPanelModel.js +25 -4
- package/dist/cjs/dockview/framework.d.ts +4 -1
- package/dist/cjs/dockview/options.d.ts +8 -5
- package/dist/cjs/dockview/options.js +3 -1
- package/dist/cjs/dockview/theme.d.ts +31 -0
- package/dist/cjs/dockview/theme.js +42 -0
- package/dist/cjs/dockview/types.d.ts +5 -1
- package/dist/cjs/dom.d.ts +1 -0
- package/dist/cjs/dom.js +15 -1
- package/dist/cjs/gridview/baseComponentGridview.d.ts +3 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/paneview/paneviewComponent.js +1 -0
- package/dist/cjs/scrollbar.d.ts +12 -0
- package/dist/cjs/scrollbar.js +106 -0
- package/dist/cjs/splitview/splitview.js +1 -0
- package/dist/cjs/splitview/splitviewComponent.js +1 -0
- package/dist/dockview-core.amd.js +930 -293
- package/dist/dockview-core.amd.js.map +1 -1
- package/dist/dockview-core.amd.min.js +2 -2
- package/dist/dockview-core.amd.min.js.map +1 -1
- package/dist/dockview-core.amd.min.noStyle.js +2 -2
- package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
- package/dist/dockview-core.amd.noStyle.js +929 -292
- package/dist/dockview-core.amd.noStyle.js.map +1 -1
- package/dist/dockview-core.cjs.js +930 -293
- package/dist/dockview-core.cjs.js.map +1 -1
- package/dist/dockview-core.esm.js +923 -294
- package/dist/dockview-core.esm.js.map +1 -1
- package/dist/dockview-core.esm.min.js +2 -2
- package/dist/dockview-core.esm.min.js.map +1 -1
- package/dist/dockview-core.js +930 -293
- package/dist/dockview-core.js.map +1 -1
- 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 +929 -292
- package/dist/dockview-core.noStyle.js.map +1 -1
- package/dist/esm/api/component.api.d.ts +0 -2
- package/dist/esm/api/component.api.js +0 -6
- package/dist/esm/dnd/abstractDragHandler.js +4 -2
- package/dist/esm/dnd/dropTargetAnchorContainer.d.ts +16 -0
- package/dist/esm/dnd/dropTargetAnchorContainer.js +74 -0
- package/dist/esm/dnd/droptarget.d.ts +16 -0
- package/dist/esm/dnd/droptarget.js +134 -14
- package/dist/esm/dnd/ghost.d.ts +4 -1
- package/dist/esm/dnd/ghost.js +3 -2
- package/dist/esm/dnd/groupDragHandler.js +3 -1
- package/dist/esm/dockview/components/panel/content.js +10 -13
- package/dist/esm/dockview/components/popupService.d.ts +13 -0
- package/dist/esm/dockview/components/popupService.js +53 -0
- package/dist/esm/dockview/components/tab/tab.js +15 -7
- package/dist/esm/dockview/components/titlebar/tabOverflowControl.d.ts +8 -0
- package/dist/esm/dockview/components/titlebar/tabOverflowControl.js +16 -0
- package/dist/esm/dockview/components/titlebar/tabs.d.ts +45 -0
- package/dist/esm/dockview/components/titlebar/tabs.js +183 -0
- package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts +8 -9
- package/dist/esm/dockview/components/titlebar/tabsContainer.js +133 -162
- package/dist/esm/dockview/components/titlebar/voidContainer.js +2 -9
- package/dist/esm/dockview/dockviewComponent.d.ts +10 -3
- package/dist/esm/dockview/dockviewComponent.js +69 -24
- package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +4 -0
- package/dist/esm/dockview/dockviewGroupPanelModel.js +27 -0
- package/dist/esm/dockview/dockviewPanelModel.d.ts +5 -3
- package/dist/esm/dockview/dockviewPanelModel.js +14 -4
- package/dist/esm/dockview/framework.d.ts +4 -1
- package/dist/esm/dockview/options.d.ts +8 -5
- package/dist/esm/dockview/options.js +3 -1
- package/dist/esm/dockview/theme.d.ts +31 -0
- package/dist/esm/dockview/theme.js +39 -0
- package/dist/esm/dockview/types.d.ts +5 -1
- package/dist/esm/dom.d.ts +1 -0
- package/dist/esm/dom.js +13 -0
- package/dist/esm/gridview/baseComponentGridview.d.ts +3 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/paneview/paneviewComponent.js +1 -0
- package/dist/esm/scrollbar.d.ts +12 -0
- package/dist/esm/scrollbar.js +80 -0
- package/dist/esm/splitview/splitview.js +1 -0
- package/dist/esm/splitview/splitviewComponent.js +1 -0
- package/dist/styles/dockview.css +444 -76
- package/package.json +1 -1
|
@@ -352,7 +352,6 @@ export declare class DockviewApi implements CommonApi<SerializedDockview> {
|
|
|
352
352
|
* Total number of panels.
|
|
353
353
|
*/
|
|
354
354
|
get totalPanels(): number;
|
|
355
|
-
get gap(): number;
|
|
356
355
|
/**
|
|
357
356
|
* Invoked when the active group changes. May be undefined if no group is active.
|
|
358
357
|
*/
|
|
@@ -514,7 +513,6 @@ export declare class DockviewApi implements CommonApi<SerializedDockview> {
|
|
|
514
513
|
window: Window;
|
|
515
514
|
}) => void;
|
|
516
515
|
}): Promise<boolean>;
|
|
517
|
-
setGap(gap: number | undefined): void;
|
|
518
516
|
updateOptions(options: Partial<DockviewComponentOptions>): void;
|
|
519
517
|
/**
|
|
520
518
|
* Release resources and teardown component. Do not call when using framework versions of dockview.
|
|
@@ -473,9 +473,6 @@ export class DockviewApi {
|
|
|
473
473
|
get totalPanels() {
|
|
474
474
|
return this.component.totalPanels;
|
|
475
475
|
}
|
|
476
|
-
get gap() {
|
|
477
|
-
return this.component.gap;
|
|
478
|
-
}
|
|
479
476
|
/**
|
|
480
477
|
* Invoked when the active group changes. May be undefined if no group is active.
|
|
481
478
|
*/
|
|
@@ -706,9 +703,6 @@ export class DockviewApi {
|
|
|
706
703
|
addPopoutGroup(item, options) {
|
|
707
704
|
return this.component.addPopoutGroup(item, options);
|
|
708
705
|
}
|
|
709
|
-
setGap(gap) {
|
|
710
|
-
this.component.updateOptions({ gap });
|
|
711
|
-
}
|
|
712
706
|
updateOptions(options) {
|
|
713
707
|
this.component.updateOptions(options);
|
|
714
708
|
}
|
|
@@ -42,14 +42,16 @@ export class DragHandler extends CompositeDisposable {
|
|
|
42
42
|
* For example: in react-dnd if dataTransfer.types is not set then the dragStart event will be cancelled
|
|
43
43
|
* through .preventDefault(). Since this is applied globally to all drag events this would break dockviews
|
|
44
44
|
* dnd logic. You can see the code at
|
|
45
|
-
|
|
45
|
+
P * https://github.com/react-dnd/react-dnd/blob/main/packages/backend-html5/src/HTML5BackendImpl.ts#L542
|
|
46
46
|
*/
|
|
47
47
|
event.dataTransfer.setData('text/plain', '');
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
}), addDisposableListener(this.el, 'dragend', () => {
|
|
51
51
|
this.pointerEventsDisposable.dispose();
|
|
52
|
-
|
|
52
|
+
setTimeout(() => {
|
|
53
|
+
this.dataDisposable.dispose(); // allow the data to be read by other handlers before disposing
|
|
54
|
+
}, 0);
|
|
53
55
|
}));
|
|
54
56
|
}
|
|
55
57
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { CompositeDisposable } from '../lifecycle';
|
|
2
|
+
import { DropTargetTargetModel } from './droptarget';
|
|
3
|
+
export declare class DropTargetAnchorContainer extends CompositeDisposable {
|
|
4
|
+
readonly element: HTMLElement;
|
|
5
|
+
private _model;
|
|
6
|
+
private _outline;
|
|
7
|
+
private _disabled;
|
|
8
|
+
get disabled(): boolean;
|
|
9
|
+
set disabled(value: boolean);
|
|
10
|
+
get model(): DropTargetTargetModel | undefined;
|
|
11
|
+
constructor(element: HTMLElement, options: {
|
|
12
|
+
disabled: boolean;
|
|
13
|
+
});
|
|
14
|
+
private createContainer;
|
|
15
|
+
private createAnchor;
|
|
16
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { CompositeDisposable, Disposable } from '../lifecycle';
|
|
2
|
+
export class DropTargetAnchorContainer extends CompositeDisposable {
|
|
3
|
+
get disabled() {
|
|
4
|
+
return this._disabled;
|
|
5
|
+
}
|
|
6
|
+
set disabled(value) {
|
|
7
|
+
var _a;
|
|
8
|
+
if (this.disabled === value) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
this._disabled = value;
|
|
12
|
+
if (value) {
|
|
13
|
+
(_a = this.model) === null || _a === void 0 ? void 0 : _a.clear();
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
get model() {
|
|
17
|
+
if (this.disabled) {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
clear: () => {
|
|
22
|
+
var _a;
|
|
23
|
+
if (this._model) {
|
|
24
|
+
(_a = this._model.root.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(this._model.root);
|
|
25
|
+
}
|
|
26
|
+
this._model = undefined;
|
|
27
|
+
},
|
|
28
|
+
exists: () => {
|
|
29
|
+
return !!this._model;
|
|
30
|
+
},
|
|
31
|
+
getElements: (event, outline) => {
|
|
32
|
+
const changed = this._outline !== outline;
|
|
33
|
+
this._outline = outline;
|
|
34
|
+
if (this._model) {
|
|
35
|
+
this._model.changed = changed;
|
|
36
|
+
return this._model;
|
|
37
|
+
}
|
|
38
|
+
const container = this.createContainer();
|
|
39
|
+
const anchor = this.createAnchor();
|
|
40
|
+
this._model = { root: container, overlay: anchor, changed };
|
|
41
|
+
container.appendChild(anchor);
|
|
42
|
+
this.element.appendChild(container);
|
|
43
|
+
if ((event === null || event === void 0 ? void 0 : event.target) instanceof HTMLElement) {
|
|
44
|
+
const targetBox = event.target.getBoundingClientRect();
|
|
45
|
+
const box = this.element.getBoundingClientRect();
|
|
46
|
+
anchor.style.left = `${targetBox.left - box.left}px`;
|
|
47
|
+
anchor.style.top = `${targetBox.top - box.top}px`;
|
|
48
|
+
}
|
|
49
|
+
return this._model;
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
constructor(element, options) {
|
|
54
|
+
super();
|
|
55
|
+
this.element = element;
|
|
56
|
+
this._disabled = false;
|
|
57
|
+
this._disabled = options.disabled;
|
|
58
|
+
this.addDisposables(Disposable.from(() => {
|
|
59
|
+
var _a;
|
|
60
|
+
(_a = this.model) === null || _a === void 0 ? void 0 : _a.clear();
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
createContainer() {
|
|
64
|
+
const el = document.createElement('div');
|
|
65
|
+
el.className = 'dv-drop-target-container';
|
|
66
|
+
return el;
|
|
67
|
+
}
|
|
68
|
+
createAnchor() {
|
|
69
|
+
const el = document.createElement('div');
|
|
70
|
+
el.className = 'dv-drop-target-anchor';
|
|
71
|
+
el.style.visibility = 'hidden';
|
|
72
|
+
return el;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -27,10 +27,22 @@ export type DroptargetOverlayModel = {
|
|
|
27
27
|
size?: MeasuredValue;
|
|
28
28
|
activationSize?: MeasuredValue;
|
|
29
29
|
};
|
|
30
|
+
export interface DropTargetTargetModel {
|
|
31
|
+
getElements(event?: DragEvent, outline?: HTMLElement): {
|
|
32
|
+
root: HTMLElement;
|
|
33
|
+
overlay: HTMLElement;
|
|
34
|
+
changed: boolean;
|
|
35
|
+
};
|
|
36
|
+
exists(): boolean;
|
|
37
|
+
clear(): void;
|
|
38
|
+
}
|
|
30
39
|
export interface DroptargetOptions {
|
|
31
40
|
canDisplayOverlay: CanDisplayOverlay;
|
|
32
41
|
acceptedTargetZones: Position[];
|
|
33
42
|
overlayModel?: DroptargetOverlayModel;
|
|
43
|
+
getOverrideTarget?: () => DropTargetTargetModel | undefined;
|
|
44
|
+
className?: string;
|
|
45
|
+
getOverlayOutline?: () => HTMLElement | null;
|
|
34
46
|
}
|
|
35
47
|
export declare class Droptarget extends CompositeDisposable {
|
|
36
48
|
private readonly element;
|
|
@@ -45,6 +57,10 @@ export declare class Droptarget extends CompositeDisposable {
|
|
|
45
57
|
readonly onWillShowOverlay: Event<WillShowOverlayEvent>;
|
|
46
58
|
readonly dnd: DragAndDropObserver;
|
|
47
59
|
private static USED_EVENT_ID;
|
|
60
|
+
private static ACTUAL_TARGET;
|
|
61
|
+
private _disabled;
|
|
62
|
+
get disabled(): boolean;
|
|
63
|
+
set disabled(value: boolean);
|
|
48
64
|
get state(): Position | undefined;
|
|
49
65
|
constructor(element: HTMLElement, options: DroptargetOptions);
|
|
50
66
|
setTargetZones(acceptedTargetZones: Position[]): void;
|
|
@@ -58,6 +58,12 @@ const DEFAULT_SIZE = {
|
|
|
58
58
|
const SMALL_WIDTH_BOUNDARY = 100;
|
|
59
59
|
const SMALL_HEIGHT_BOUNDARY = 100;
|
|
60
60
|
export class Droptarget extends CompositeDisposable {
|
|
61
|
+
get disabled() {
|
|
62
|
+
return this._disabled;
|
|
63
|
+
}
|
|
64
|
+
set disabled(value) {
|
|
65
|
+
this._disabled = value;
|
|
66
|
+
}
|
|
61
67
|
get state() {
|
|
62
68
|
return this._state;
|
|
63
69
|
}
|
|
@@ -69,23 +75,34 @@ export class Droptarget extends CompositeDisposable {
|
|
|
69
75
|
this.onDrop = this._onDrop.event;
|
|
70
76
|
this._onWillShowOverlay = new Emitter();
|
|
71
77
|
this.onWillShowOverlay = this._onWillShowOverlay.event;
|
|
78
|
+
this._disabled = false;
|
|
72
79
|
// use a set to take advantage of #<set>.has
|
|
73
80
|
this._acceptedTargetZonesSet = new Set(this.options.acceptedTargetZones);
|
|
74
81
|
this.dnd = new DragAndDropObserver(this.element, {
|
|
75
|
-
onDragEnter: () =>
|
|
82
|
+
onDragEnter: () => {
|
|
83
|
+
var _a, _b, _c;
|
|
84
|
+
(_c = (_b = (_a = this.options).getOverrideTarget) === null || _b === void 0 ? void 0 : _b.call(_a)) === null || _c === void 0 ? void 0 : _c.getElements();
|
|
85
|
+
},
|
|
76
86
|
onDragOver: (e) => {
|
|
87
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
88
|
+
Droptarget.ACTUAL_TARGET = this;
|
|
89
|
+
const overrideTraget = (_b = (_a = this.options).getOverrideTarget) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
77
90
|
if (this._acceptedTargetZonesSet.size === 0) {
|
|
91
|
+
if (overrideTraget) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
78
94
|
this.removeDropTarget();
|
|
79
95
|
return;
|
|
80
96
|
}
|
|
81
|
-
const
|
|
82
|
-
const
|
|
97
|
+
const target = (_e = (_d = (_c = this.options).getOverlayOutline) === null || _d === void 0 ? void 0 : _d.call(_c)) !== null && _e !== void 0 ? _e : this.element;
|
|
98
|
+
const width = target.offsetWidth;
|
|
99
|
+
const height = target.offsetHeight;
|
|
83
100
|
if (width === 0 || height === 0) {
|
|
84
101
|
return; // avoid div!0
|
|
85
102
|
}
|
|
86
103
|
const rect = e.currentTarget.getBoundingClientRect();
|
|
87
|
-
const x = e.clientX - rect.left;
|
|
88
|
-
const y = e.clientY - rect.top;
|
|
104
|
+
const x = ((_f = e.clientX) !== null && _f !== void 0 ? _f : 0) - rect.left;
|
|
105
|
+
const y = ((_g = e.clientY) !== null && _g !== void 0 ? _g : 0) - rect.top;
|
|
89
106
|
const quadrant = this.calculateQuadrant(this._acceptedTargetZonesSet, x, y, width, height);
|
|
90
107
|
/**
|
|
91
108
|
* If the event has already been used by another DropTarget instance
|
|
@@ -98,6 +115,9 @@ export class Droptarget extends CompositeDisposable {
|
|
|
98
115
|
return;
|
|
99
116
|
}
|
|
100
117
|
if (!this.options.canDisplayOverlay(e, quadrant)) {
|
|
118
|
+
if (overrideTraget) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
101
121
|
this.removeDropTarget();
|
|
102
122
|
return;
|
|
103
123
|
}
|
|
@@ -115,29 +135,59 @@ export class Droptarget extends CompositeDisposable {
|
|
|
115
135
|
return;
|
|
116
136
|
}
|
|
117
137
|
this.markAsUsed(e);
|
|
118
|
-
if (
|
|
138
|
+
if (overrideTraget) {
|
|
139
|
+
//
|
|
140
|
+
}
|
|
141
|
+
else if (!this.targetElement) {
|
|
119
142
|
this.targetElement = document.createElement('div');
|
|
120
143
|
this.targetElement.className = 'dv-drop-target-dropzone';
|
|
121
144
|
this.overlayElement = document.createElement('div');
|
|
122
145
|
this.overlayElement.className = 'dv-drop-target-selection';
|
|
123
146
|
this._state = 'center';
|
|
124
147
|
this.targetElement.appendChild(this.overlayElement);
|
|
125
|
-
|
|
126
|
-
|
|
148
|
+
target.classList.add('dv-drop-target');
|
|
149
|
+
target.append(this.targetElement);
|
|
150
|
+
// this.overlayElement.style.opacity = '0';
|
|
151
|
+
// requestAnimationFrame(() => {
|
|
152
|
+
// if (this.overlayElement) {
|
|
153
|
+
// this.overlayElement.style.opacity = '';
|
|
154
|
+
// }
|
|
155
|
+
// });
|
|
127
156
|
}
|
|
128
157
|
this.toggleClasses(quadrant, width, height);
|
|
129
158
|
this._state = quadrant;
|
|
130
159
|
},
|
|
131
160
|
onDragLeave: () => {
|
|
161
|
+
var _a, _b;
|
|
162
|
+
const target = (_b = (_a = this.options).getOverrideTarget) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
163
|
+
if (target) {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
132
166
|
this.removeDropTarget();
|
|
133
167
|
},
|
|
134
|
-
onDragEnd: () => {
|
|
168
|
+
onDragEnd: (e) => {
|
|
169
|
+
var _a, _b;
|
|
170
|
+
const target = (_b = (_a = this.options).getOverrideTarget) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
171
|
+
if (target && Droptarget.ACTUAL_TARGET === this) {
|
|
172
|
+
if (this._state) {
|
|
173
|
+
// only stop the propagation of the event if we are dealing with it
|
|
174
|
+
// which is only when the target has state
|
|
175
|
+
e.stopPropagation();
|
|
176
|
+
this._onDrop.fire({
|
|
177
|
+
position: this._state,
|
|
178
|
+
nativeEvent: e,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
135
182
|
this.removeDropTarget();
|
|
183
|
+
target === null || target === void 0 ? void 0 : target.clear();
|
|
136
184
|
},
|
|
137
185
|
onDrop: (e) => {
|
|
186
|
+
var _a, _b, _c;
|
|
138
187
|
e.preventDefault();
|
|
139
188
|
const state = this._state;
|
|
140
189
|
this.removeDropTarget();
|
|
190
|
+
(_c = (_b = (_a = this.options).getOverrideTarget) === null || _b === void 0 ? void 0 : _b.call(_a)) === null || _c === void 0 ? void 0 : _c.clear();
|
|
141
191
|
if (state) {
|
|
142
192
|
// only stop the propagation of the event if we are dealing with it
|
|
143
193
|
// which is only when the target has state
|
|
@@ -172,8 +222,9 @@ export class Droptarget extends CompositeDisposable {
|
|
|
172
222
|
return typeof value === 'boolean' && value;
|
|
173
223
|
}
|
|
174
224
|
toggleClasses(quadrant, width, height) {
|
|
175
|
-
var _a, _b;
|
|
176
|
-
|
|
225
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
226
|
+
const target = (_b = (_a = this.options).getOverrideTarget) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
227
|
+
if (!target && !this.overlayElement) {
|
|
177
228
|
return;
|
|
178
229
|
}
|
|
179
230
|
const isSmallX = width < SMALL_WIDTH_BOUNDARY;
|
|
@@ -187,7 +238,7 @@ export class Droptarget extends CompositeDisposable {
|
|
|
187
238
|
const topClass = !isSmallY && isTop;
|
|
188
239
|
const bottomClass = !isSmallY && isBottom;
|
|
189
240
|
let size = 1;
|
|
190
|
-
const sizeOptions = (
|
|
241
|
+
const sizeOptions = (_d = (_c = this.options.overlayModel) === null || _c === void 0 ? void 0 : _c.size) !== null && _d !== void 0 ? _d : DEFAULT_SIZE;
|
|
191
242
|
if (sizeOptions.type === 'percentage') {
|
|
192
243
|
size = clamp(sizeOptions.value, 0, 100) / 100;
|
|
193
244
|
}
|
|
@@ -199,6 +250,74 @@ export class Droptarget extends CompositeDisposable {
|
|
|
199
250
|
size = clamp(0, sizeOptions.value, height) / height;
|
|
200
251
|
}
|
|
201
252
|
}
|
|
253
|
+
if (target) {
|
|
254
|
+
const outlineEl = (_g = (_f = (_e = this.options).getOverlayOutline) === null || _f === void 0 ? void 0 : _f.call(_e)) !== null && _g !== void 0 ? _g : this.element;
|
|
255
|
+
const elBox = outlineEl.getBoundingClientRect();
|
|
256
|
+
const ta = target.getElements(undefined, outlineEl);
|
|
257
|
+
const el = ta.root;
|
|
258
|
+
const overlay = ta.overlay;
|
|
259
|
+
const bigbox = el.getBoundingClientRect();
|
|
260
|
+
const rootTop = elBox.top - bigbox.top;
|
|
261
|
+
const rootLeft = elBox.left - bigbox.left;
|
|
262
|
+
const box = {
|
|
263
|
+
top: rootTop,
|
|
264
|
+
left: rootLeft,
|
|
265
|
+
width: width,
|
|
266
|
+
height: height,
|
|
267
|
+
};
|
|
268
|
+
if (rightClass) {
|
|
269
|
+
box.left = rootLeft + width * (1 - size);
|
|
270
|
+
box.width = width * size;
|
|
271
|
+
}
|
|
272
|
+
else if (leftClass) {
|
|
273
|
+
box.width = width * size;
|
|
274
|
+
}
|
|
275
|
+
else if (topClass) {
|
|
276
|
+
box.height = height * size;
|
|
277
|
+
}
|
|
278
|
+
else if (bottomClass) {
|
|
279
|
+
box.top = rootTop + height * (1 - size);
|
|
280
|
+
box.height = height * size;
|
|
281
|
+
}
|
|
282
|
+
if (isSmallX && isLeft) {
|
|
283
|
+
box.width = 4;
|
|
284
|
+
}
|
|
285
|
+
if (isSmallX && isRight) {
|
|
286
|
+
box.left = rootLeft + width - 4;
|
|
287
|
+
box.width = 4;
|
|
288
|
+
}
|
|
289
|
+
const topPx = `${Math.round(box.top)}px`;
|
|
290
|
+
const leftPx = `${Math.round(box.left)}px`;
|
|
291
|
+
const widthPx = `${Math.round(box.width)}px`;
|
|
292
|
+
const heightPx = `${Math.round(box.height)}px`;
|
|
293
|
+
if (overlay.style.top === topPx &&
|
|
294
|
+
overlay.style.left === leftPx &&
|
|
295
|
+
overlay.style.width === widthPx &&
|
|
296
|
+
overlay.style.height === heightPx) {
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
overlay.style.top = topPx;
|
|
300
|
+
overlay.style.left = leftPx;
|
|
301
|
+
overlay.style.width = widthPx;
|
|
302
|
+
overlay.style.height = heightPx;
|
|
303
|
+
overlay.style.visibility = 'visible';
|
|
304
|
+
overlay.className = `dv-drop-target-anchor${this.options.className ? ` ${this.options.className}` : ''}`;
|
|
305
|
+
toggleClass(overlay, 'dv-drop-target-left', isLeft);
|
|
306
|
+
toggleClass(overlay, 'dv-drop-target-right', isRight);
|
|
307
|
+
toggleClass(overlay, 'dv-drop-target-top', isTop);
|
|
308
|
+
toggleClass(overlay, 'dv-drop-target-bottom', isBottom);
|
|
309
|
+
toggleClass(overlay, 'dv-drop-target-center', quadrant === 'center');
|
|
310
|
+
if (ta.changed) {
|
|
311
|
+
toggleClass(overlay, 'dv-drop-target-anchor-container-changed', true);
|
|
312
|
+
setTimeout(() => {
|
|
313
|
+
toggleClass(overlay, 'dv-drop-target-anchor-container-changed', false);
|
|
314
|
+
}, 10);
|
|
315
|
+
}
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
if (!this.overlayElement) {
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
202
321
|
const box = { top: '0px', left: '0px', width: '100%', height: '100%' };
|
|
203
322
|
/**
|
|
204
323
|
* You can also achieve the overlay placement using the transform CSS property
|
|
@@ -255,12 +374,13 @@ export class Droptarget extends CompositeDisposable {
|
|
|
255
374
|
return calculateQuadrantAsPixels(overlayType, x, y, width, height, activationSizeOptions.value);
|
|
256
375
|
}
|
|
257
376
|
removeDropTarget() {
|
|
377
|
+
var _a;
|
|
258
378
|
if (this.targetElement) {
|
|
259
379
|
this._state = undefined;
|
|
260
|
-
|
|
380
|
+
(_a = this.targetElement.parentElement) === null || _a === void 0 ? void 0 : _a.classList.remove('dv-drop-target');
|
|
381
|
+
this.targetElement.remove();
|
|
261
382
|
this.targetElement = undefined;
|
|
262
383
|
this.overlayElement = undefined;
|
|
263
|
-
this.element.classList.remove('dv-drop-target');
|
|
264
384
|
}
|
|
265
385
|
}
|
|
266
386
|
}
|
package/dist/esm/dnd/ghost.d.ts
CHANGED
package/dist/esm/dnd/ghost.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { addClasses, removeClasses } from '../dom';
|
|
2
|
-
export function addGhostImage(dataTransfer, ghostElement) {
|
|
2
|
+
export function addGhostImage(dataTransfer, ghostElement, options) {
|
|
3
|
+
var _a, _b;
|
|
3
4
|
// class dockview provides to force ghost image to be drawn on a different layer and prevent weird rendering issues
|
|
4
5
|
addClasses(ghostElement, 'dv-dragged');
|
|
5
6
|
document.body.appendChild(ghostElement);
|
|
6
|
-
dataTransfer.setDragImage(ghostElement, 0, 0);
|
|
7
|
+
dataTransfer.setDragImage(ghostElement, (_a = options === null || options === void 0 ? void 0 : options.x) !== null && _a !== void 0 ? _a : 0, (_b = options === null || options === void 0 ? void 0 : options.y) !== null && _b !== void 0 ? _b : 0);
|
|
7
8
|
setTimeout(() => {
|
|
8
9
|
removeClasses(ghostElement, 'dv-dragged');
|
|
9
10
|
ghostElement.remove();
|
|
@@ -42,8 +42,10 @@ export class GroupDragHandler extends DragHandler {
|
|
|
42
42
|
ghostElement.style.lineHeight = '20px';
|
|
43
43
|
ghostElement.style.borderRadius = '12px';
|
|
44
44
|
ghostElement.style.position = 'absolute';
|
|
45
|
+
ghostElement.style.pointerEvents = 'none';
|
|
46
|
+
ghostElement.style.top = '-9999px';
|
|
45
47
|
ghostElement.textContent = `Multiple Panels (${this.group.size})`;
|
|
46
|
-
addGhostImage(dataTransfer, ghostElement);
|
|
48
|
+
addGhostImage(dataTransfer, ghostElement, { y: -10, x: 30 });
|
|
47
49
|
}
|
|
48
50
|
return {
|
|
49
51
|
dispose: () => {
|
|
@@ -20,7 +20,15 @@ export class ContentContainer extends CompositeDisposable {
|
|
|
20
20
|
this._element.className = 'dv-content-container';
|
|
21
21
|
this._element.tabIndex = -1;
|
|
22
22
|
this.addDisposables(this._onDidFocus, this._onDidBlur);
|
|
23
|
+
const target = group.dropTargetContainer;
|
|
23
24
|
this.dropTarget = new Droptarget(this.element, {
|
|
25
|
+
getOverlayOutline: () => {
|
|
26
|
+
var _a;
|
|
27
|
+
return ((_a = accessor.options.theme) === null || _a === void 0 ? void 0 : _a.dndPanelOverlay) === 'group'
|
|
28
|
+
? this.element.parentElement
|
|
29
|
+
: null;
|
|
30
|
+
},
|
|
31
|
+
className: 'dv-drop-target-content',
|
|
24
32
|
acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
|
|
25
33
|
canDisplayOverlay: (event, position) => {
|
|
26
34
|
if (this.group.locked === 'no-drop-target' ||
|
|
@@ -34,22 +42,11 @@ export class ContentContainer extends CompositeDisposable {
|
|
|
34
42
|
return false;
|
|
35
43
|
}
|
|
36
44
|
if (data && data.viewId === this.accessor.id) {
|
|
37
|
-
|
|
38
|
-
if (position === 'center') {
|
|
39
|
-
// don't allow to drop on self for center position
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
if (data.panelId === null) {
|
|
43
|
-
// don't allow group move to drop anywhere on self
|
|
44
|
-
return false;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
const groupHasOnePanelAndIsActiveDragElement = this.group.panels.length === 1 &&
|
|
48
|
-
data.groupId === this.group.id;
|
|
49
|
-
return !groupHasOnePanelAndIsActiveDragElement;
|
|
45
|
+
return true;
|
|
50
46
|
}
|
|
51
47
|
return this.group.canDisplayOverlay(event, position, 'content');
|
|
52
48
|
},
|
|
49
|
+
getOverrideTarget: target ? () => target.model : undefined,
|
|
53
50
|
});
|
|
54
51
|
this.addDisposables(this.dropTarget);
|
|
55
52
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { CompositeDisposable } from '../../lifecycle';
|
|
2
|
+
export declare class PopupService extends CompositeDisposable {
|
|
3
|
+
private readonly root;
|
|
4
|
+
private readonly _element;
|
|
5
|
+
private _active;
|
|
6
|
+
private readonly _activeDisposable;
|
|
7
|
+
constructor(root: HTMLElement);
|
|
8
|
+
openPopover(element: HTMLElement, position: {
|
|
9
|
+
x: number;
|
|
10
|
+
y: number;
|
|
11
|
+
}): void;
|
|
12
|
+
close(): void;
|
|
13
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { addDisposableWindowListener } from '../../events';
|
|
2
|
+
import { CompositeDisposable, Disposable, MutableDisposable, } from '../../lifecycle';
|
|
3
|
+
export class PopupService extends CompositeDisposable {
|
|
4
|
+
constructor(root) {
|
|
5
|
+
super();
|
|
6
|
+
this.root = root;
|
|
7
|
+
this._active = null;
|
|
8
|
+
this._activeDisposable = new MutableDisposable();
|
|
9
|
+
this._element = document.createElement('div');
|
|
10
|
+
this._element.className = 'dv-popover-anchor';
|
|
11
|
+
this._element.style.position = 'relative';
|
|
12
|
+
this.root.prepend(this._element);
|
|
13
|
+
this.addDisposables(Disposable.from(() => {
|
|
14
|
+
this.close();
|
|
15
|
+
}), this._activeDisposable);
|
|
16
|
+
}
|
|
17
|
+
openPopover(element, position) {
|
|
18
|
+
this.close();
|
|
19
|
+
const wrapper = document.createElement('div');
|
|
20
|
+
wrapper.style.position = 'absolute';
|
|
21
|
+
wrapper.style.zIndex = '99';
|
|
22
|
+
wrapper.appendChild(element);
|
|
23
|
+
const anchorBox = this._element.getBoundingClientRect();
|
|
24
|
+
const offsetX = anchorBox.left;
|
|
25
|
+
const offsetY = anchorBox.top;
|
|
26
|
+
wrapper.style.top = `${position.y - offsetY}px`;
|
|
27
|
+
wrapper.style.left = `${position.x - offsetX}px`;
|
|
28
|
+
this._element.appendChild(wrapper);
|
|
29
|
+
this._active = wrapper;
|
|
30
|
+
this._activeDisposable.value = new CompositeDisposable(addDisposableWindowListener(window, 'pointerdown', (event) => {
|
|
31
|
+
var _a;
|
|
32
|
+
const target = event.target;
|
|
33
|
+
if (!(target instanceof HTMLElement)) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
let el = target;
|
|
37
|
+
while (el && el !== wrapper) {
|
|
38
|
+
el = (_a = el === null || el === void 0 ? void 0 : el.parentElement) !== null && _a !== void 0 ? _a : null;
|
|
39
|
+
}
|
|
40
|
+
if (el) {
|
|
41
|
+
return; // clicked within popover
|
|
42
|
+
}
|
|
43
|
+
this.close();
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
close() {
|
|
47
|
+
if (this._active) {
|
|
48
|
+
this._active.remove();
|
|
49
|
+
this._activeDisposable.dispose();
|
|
50
|
+
this._active = null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -4,6 +4,7 @@ import { getPanelData, LocalSelectionTransfer, PanelTransfer, } from '../../../d
|
|
|
4
4
|
import { toggleClass } from '../../../dom';
|
|
5
5
|
import { Droptarget, } from '../../../dnd/droptarget';
|
|
6
6
|
import { DragHandler } from '../../../dnd/abstractDragHandler';
|
|
7
|
+
import { addGhostImage } from '../../../dnd/ghost';
|
|
7
8
|
class TabDragHandler extends DragHandler {
|
|
8
9
|
constructor(element, accessor, group, panel) {
|
|
9
10
|
super(element);
|
|
@@ -44,25 +45,32 @@ export class Tab extends CompositeDisposable {
|
|
|
44
45
|
toggleClass(this.element, 'dv-inactive-tab', true);
|
|
45
46
|
const dragHandler = new TabDragHandler(this._element, this.accessor, this.group, this.panel);
|
|
46
47
|
this.dropTarget = new Droptarget(this._element, {
|
|
47
|
-
acceptedTargetZones: ['
|
|
48
|
+
acceptedTargetZones: ['left', 'right'],
|
|
49
|
+
overlayModel: { activationSize: { value: 50, type: 'percentage' } },
|
|
48
50
|
canDisplayOverlay: (event, position) => {
|
|
49
51
|
if (this.group.locked) {
|
|
50
52
|
return false;
|
|
51
53
|
}
|
|
52
54
|
const data = getPanelData();
|
|
53
55
|
if (data && this.accessor.id === data.viewId) {
|
|
54
|
-
|
|
55
|
-
data.groupId === this.group.id) {
|
|
56
|
-
// don't allow group move to drop on self
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
return this.panel.id !== data.panelId;
|
|
56
|
+
return true;
|
|
60
57
|
}
|
|
61
58
|
return this.group.model.canDisplayOverlay(event, position, 'tab');
|
|
62
59
|
},
|
|
60
|
+
getOverrideTarget: () => { var _a; return (_a = group.model.dropTargetContainer) === null || _a === void 0 ? void 0 : _a.model; },
|
|
63
61
|
});
|
|
64
62
|
this.onWillShowOverlay = this.dropTarget.onWillShowOverlay;
|
|
65
63
|
this.addDisposables(this._onPointDown, this._onDropped, this._onDragStart, dragHandler.onDragStart((event) => {
|
|
64
|
+
if (event.dataTransfer) {
|
|
65
|
+
const style = getComputedStyle(this.element);
|
|
66
|
+
const newNode = this.element.cloneNode(true);
|
|
67
|
+
Array.from(style).forEach((key) => newNode.style.setProperty(key, style.getPropertyValue(key), style.getPropertyPriority(key)));
|
|
68
|
+
newNode.style.position = 'absolute';
|
|
69
|
+
addGhostImage(event.dataTransfer, newNode, {
|
|
70
|
+
y: -10,
|
|
71
|
+
x: 30,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
66
74
|
this._onDragStart.fire(event);
|
|
67
75
|
}), dragHandler, addDisposableListener(this._element, 'pointerdown', (event) => {
|
|
68
76
|
this._onPointDown.fire(event);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createChevronRightButton } from '../../../svg';
|
|
2
|
+
export function createDropdownElementHandle() {
|
|
3
|
+
const el = document.createElement('div');
|
|
4
|
+
el.className = 'dv-tabs-overflow-dropdown-default';
|
|
5
|
+
const text = document.createElement('span');
|
|
6
|
+
text.textContent = ``;
|
|
7
|
+
const icon = createChevronRightButton();
|
|
8
|
+
el.appendChild(icon);
|
|
9
|
+
el.appendChild(text);
|
|
10
|
+
return {
|
|
11
|
+
element: el,
|
|
12
|
+
update: (params) => {
|
|
13
|
+
text.textContent = `${params.tabs}`;
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
}
|