dockview-core 4.0.0 → 4.1.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 +3 -1
- package/dist/cjs/api/component.api.js +14 -0
- package/dist/cjs/dockview/components/popupService.js +1 -1
- package/dist/cjs/dockview/dockviewComponent.d.ts +16 -0
- package/dist/cjs/dockview/dockviewComponent.js +27 -10
- package/dist/cjs/dom.d.ts +6 -4
- package/dist/cjs/dom.js +90 -49
- package/dist/cjs/events.d.ts +1 -1
- package/dist/cjs/events.js +1 -10
- package/dist/cjs/overlay/overlay.js +4 -4
- package/dist/cjs/paneview/draggablePaneviewPanel.d.ts +13 -2
- package/dist/cjs/paneview/draggablePaneviewPanel.js +14 -4
- package/dist/cjs/paneview/paneviewComponent.d.ts +5 -0
- package/dist/cjs/paneview/paneviewComponent.js +25 -3
- package/dist/cjs/paneview/paneviewPanel.d.ts +13 -4
- package/dist/cjs/paneview/paneviewPanel.js +9 -13
- package/dist/cjs/popoutWindow.js +2 -2
- package/dist/cjs/splitview/splitviewComponent.js +3 -0
- package/dist/dockview-core.amd.js +155 -63
- 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 +154 -62
- package/dist/dockview-core.amd.noStyle.js.map +1 -1
- package/dist/dockview-core.cjs.js +155 -63
- package/dist/dockview-core.cjs.js.map +1 -1
- package/dist/dockview-core.esm.js +155 -63
- 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 +155 -63
- 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 +154 -62
- package/dist/dockview-core.noStyle.js.map +1 -1
- package/dist/esm/api/component.api.d.ts +3 -1
- package/dist/esm/api/component.api.js +6 -0
- package/dist/esm/dockview/components/popupService.js +2 -2
- package/dist/esm/dockview/dockviewComponent.d.ts +16 -0
- package/dist/esm/dockview/dockviewComponent.js +29 -12
- package/dist/esm/dom.d.ts +6 -4
- package/dist/esm/dom.js +65 -16
- package/dist/esm/events.d.ts +1 -1
- package/dist/esm/events.js +0 -8
- package/dist/esm/overlay/overlay.js +5 -5
- package/dist/esm/paneview/draggablePaneviewPanel.d.ts +13 -2
- package/dist/esm/paneview/draggablePaneviewPanel.js +14 -4
- package/dist/esm/paneview/paneviewComponent.d.ts +5 -0
- package/dist/esm/paneview/paneviewComponent.js +25 -3
- package/dist/esm/paneview/paneviewPanel.d.ts +13 -4
- package/dist/esm/paneview/paneviewPanel.js +9 -13
- package/dist/esm/popoutWindow.js +3 -3
- package/dist/esm/splitview/splitviewComponent.js +3 -0
- package/dist/styles/dockview.css +3 -7
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DockviewMaximizedGroupChanged, FloatingGroupOptions, IDockviewComponent, MovePanelEvent, SerializedDockview } from '../dockview/dockviewComponent';
|
|
1
|
+
import { DockviewMaximizedGroupChanged, FloatingGroupOptions, IDockviewComponent, MovePanelEvent, PopoutGroupChangePositionEvent, PopoutGroupChangeSizeEvent, SerializedDockview } from '../dockview/dockviewComponent';
|
|
2
2
|
import { AddGroupOptions, AddPanelOptions, DockviewComponentOptions, DockviewDndOverlayEvent, MovementOptions } from '../dockview/options';
|
|
3
3
|
import { Parameters } from '../panel/types';
|
|
4
4
|
import { Direction } from '../gridview/baseComponentGridview';
|
|
@@ -417,6 +417,8 @@ export declare class DockviewApi implements CommonApi<SerializedDockview> {
|
|
|
417
417
|
*/
|
|
418
418
|
get onWillDragPanel(): Event<TabDragEvent>;
|
|
419
419
|
get onUnhandledDragOverEvent(): Event<DockviewDndOverlayEvent>;
|
|
420
|
+
get onDidPopoutGroupSizeChange(): Event<PopoutGroupChangeSizeEvent>;
|
|
421
|
+
get onDidPopoutGroupPositionChange(): Event<PopoutGroupChangePositionEvent>;
|
|
420
422
|
/**
|
|
421
423
|
* All panel objects.
|
|
422
424
|
*/
|
|
@@ -568,6 +568,12 @@ export class DockviewApi {
|
|
|
568
568
|
get onUnhandledDragOverEvent() {
|
|
569
569
|
return this.component.onUnhandledDragOverEvent;
|
|
570
570
|
}
|
|
571
|
+
get onDidPopoutGroupSizeChange() {
|
|
572
|
+
return this.component.onDidPopoutGroupSizeChange;
|
|
573
|
+
}
|
|
574
|
+
get onDidPopoutGroupPositionChange() {
|
|
575
|
+
return this.component.onDidPopoutGroupPositionChange;
|
|
576
|
+
}
|
|
571
577
|
/**
|
|
572
578
|
* All panel objects.
|
|
573
579
|
*/
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { addDisposableListener } from '../../events';
|
|
2
2
|
import { CompositeDisposable, Disposable, MutableDisposable, } from '../../lifecycle';
|
|
3
3
|
export class PopupService extends CompositeDisposable {
|
|
4
4
|
constructor(root) {
|
|
@@ -27,7 +27,7 @@ export class PopupService extends CompositeDisposable {
|
|
|
27
27
|
wrapper.style.left = `${position.x - offsetX}px`;
|
|
28
28
|
this._element.appendChild(wrapper);
|
|
29
29
|
this._active = wrapper;
|
|
30
|
-
this._activeDisposable.value = new CompositeDisposable(
|
|
30
|
+
this._activeDisposable.value = new CompositeDisposable(addDisposableListener(window, 'pointerdown', (event) => {
|
|
31
31
|
var _a;
|
|
32
32
|
const target = event.target;
|
|
33
33
|
if (!(target instanceof HTMLElement)) {
|
|
@@ -107,6 +107,16 @@ export interface DockviewMaximizedGroupChanged {
|
|
|
107
107
|
group: DockviewGroupPanel;
|
|
108
108
|
isMaximized: boolean;
|
|
109
109
|
}
|
|
110
|
+
export interface PopoutGroupChangeSizeEvent {
|
|
111
|
+
width: number;
|
|
112
|
+
height: number;
|
|
113
|
+
group: DockviewGroupPanel;
|
|
114
|
+
}
|
|
115
|
+
export interface PopoutGroupChangePositionEvent {
|
|
116
|
+
screenX: number;
|
|
117
|
+
screenY: number;
|
|
118
|
+
group: DockviewGroupPanel;
|
|
119
|
+
}
|
|
110
120
|
export interface IDockviewComponent extends IBaseGrid<DockviewGroupPanel> {
|
|
111
121
|
readonly activePanel: IDockviewPanel | undefined;
|
|
112
122
|
readonly totalPanels: number;
|
|
@@ -127,6 +137,8 @@ export interface IDockviewComponent extends IBaseGrid<DockviewGroupPanel> {
|
|
|
127
137
|
readonly onUnhandledDragOverEvent: Event<DockviewDndOverlayEvent>;
|
|
128
138
|
readonly onDidMovePanel: Event<MovePanelEvent>;
|
|
129
139
|
readonly onDidMaximizedGroupChange: Event<DockviewMaximizedGroupChanged>;
|
|
140
|
+
readonly onDidPopoutGroupSizeChange: Event<PopoutGroupChangeSizeEvent>;
|
|
141
|
+
readonly onDidPopoutGroupPositionChange: Event<PopoutGroupChangePositionEvent>;
|
|
130
142
|
readonly options: DockviewComponentOptions;
|
|
131
143
|
updateOptions(options: DockviewOptions): void;
|
|
132
144
|
moveGroupOrPanel(options: MoveGroupOrPanelOptions): void;
|
|
@@ -185,6 +197,10 @@ export declare class DockviewComponent extends BaseGrid<DockviewGroupPanel> impl
|
|
|
185
197
|
readonly onDidRemovePanel: Event<IDockviewPanel>;
|
|
186
198
|
private readonly _onDidAddPanel;
|
|
187
199
|
readonly onDidAddPanel: Event<IDockviewPanel>;
|
|
200
|
+
private readonly _onDidPopoutGroupSizeChange;
|
|
201
|
+
readonly onDidPopoutGroupSizeChange: Event<PopoutGroupChangeSizeEvent>;
|
|
202
|
+
private readonly _onDidPopoutGroupPositionChange;
|
|
203
|
+
readonly onDidPopoutGroupPositionChange: Event<PopoutGroupChangePositionEvent>;
|
|
188
204
|
private readonly _onDidLayoutFromJSON;
|
|
189
205
|
readonly onDidLayoutFromJSON: Event<void>;
|
|
190
206
|
private readonly _onDidActivePanelChange;
|
|
@@ -3,7 +3,7 @@ import { directionToPosition, Droptarget, } from '../dnd/droptarget';
|
|
|
3
3
|
import { tail, sequenceEquals, remove } from '../array';
|
|
4
4
|
import { DockviewPanel } from './dockviewPanel';
|
|
5
5
|
import { CompositeDisposable, Disposable } from '../lifecycle';
|
|
6
|
-
import { Event, Emitter,
|
|
6
|
+
import { Event, Emitter, addDisposableListener } from '../events';
|
|
7
7
|
import { Watermark } from './components/watermark/watermark';
|
|
8
8
|
import { sequentialNumberGenerator } from '../math';
|
|
9
9
|
import { DefaultDockviewDeserialzier } from './deserializer';
|
|
@@ -16,7 +16,7 @@ import { DockviewGroupPanel } from './dockviewGroupPanel';
|
|
|
16
16
|
import { DockviewPanelModel } from './dockviewPanelModel';
|
|
17
17
|
import { getPanelData } from '../dnd/dataTransfer';
|
|
18
18
|
import { Overlay } from '../overlay/overlay';
|
|
19
|
-
import { addTestId, Classnames, getDockviewTheme, toggleClass, watchElementResize, } from '../dom';
|
|
19
|
+
import { addTestId, Classnames, getDockviewTheme, onDidWindowResizeEnd, onDidWindowMoveEnd, toggleClass, watchElementResize, } from '../dom';
|
|
20
20
|
import { DockviewFloatingGroupPanel } from './dockviewFloatingGroupPanel';
|
|
21
21
|
import { DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE, DEFAULT_FLOATING_GROUP_POSITION, } from '../constants';
|
|
22
22
|
import { OverlayRenderContainer, } from '../overlay/overlayRenderContainer';
|
|
@@ -105,6 +105,10 @@ export class DockviewComponent extends BaseGrid {
|
|
|
105
105
|
this.onDidRemovePanel = this._onDidRemovePanel.event;
|
|
106
106
|
this._onDidAddPanel = new Emitter();
|
|
107
107
|
this.onDidAddPanel = this._onDidAddPanel.event;
|
|
108
|
+
this._onDidPopoutGroupSizeChange = new Emitter();
|
|
109
|
+
this.onDidPopoutGroupSizeChange = this._onDidPopoutGroupSizeChange.event;
|
|
110
|
+
this._onDidPopoutGroupPositionChange = new Emitter();
|
|
111
|
+
this.onDidPopoutGroupPositionChange = this._onDidPopoutGroupPositionChange.event;
|
|
108
112
|
this._onDidLayoutFromJSON = new Emitter();
|
|
109
113
|
this.onDidLayoutFromJSON = this._onDidLayoutFromJSON.event;
|
|
110
114
|
this._onDidActivePanelChange = new Emitter();
|
|
@@ -134,7 +138,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
134
138
|
if (options.debug) {
|
|
135
139
|
this.addDisposables(new StrictEventsSequencing(this));
|
|
136
140
|
}
|
|
137
|
-
this.addDisposables(this.rootDropTargetContainer, this.overlayRenderContainer, this._onWillDragPanel, this._onWillDragGroup, this._onWillShowOverlay, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, this._onWillDrop, this._onDidMovePanel, this._onDidAddGroup, this._onDidRemoveGroup, this._onDidActiveGroupChange, this._onUnhandledDragOverEvent, this._onDidMaximizedGroupChange, this._onDidOptionsChange, this.onDidViewVisibilityChangeMicroTaskQueue(() => {
|
|
141
|
+
this.addDisposables(this.rootDropTargetContainer, this.overlayRenderContainer, this._onWillDragPanel, this._onWillDragGroup, this._onWillShowOverlay, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, this._onWillDrop, this._onDidMovePanel, this._onDidAddGroup, this._onDidRemoveGroup, this._onDidActiveGroupChange, this._onUnhandledDragOverEvent, this._onDidMaximizedGroupChange, this._onDidOptionsChange, this._onDidPopoutGroupSizeChange, this._onDidPopoutGroupPositionChange, this.onDidViewVisibilityChangeMicroTaskQueue(() => {
|
|
138
142
|
this.updateWatermark();
|
|
139
143
|
}), this.onDidAdd((event) => {
|
|
140
144
|
if (!this._moving) {
|
|
@@ -155,7 +159,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
155
159
|
});
|
|
156
160
|
}), Event.any(this.onDidAdd, this.onDidRemove)(() => {
|
|
157
161
|
this.updateWatermark();
|
|
158
|
-
}), Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidAddGroup, this.onDidRemove, this.onDidMovePanel, this.onDidActivePanelChange)(() => {
|
|
162
|
+
}), Event.any(this.onDidAddPanel, this.onDidRemovePanel, this.onDidAddGroup, this.onDidRemove, this.onDidMovePanel, this.onDidActivePanelChange, this.onDidPopoutGroupPositionChange, this.onDidPopoutGroupSizeChange)(() => {
|
|
159
163
|
this._bufferOnDidLayoutChange.fire();
|
|
160
164
|
}), Disposable.from(() => {
|
|
161
165
|
// iterate over a copy of the array since .dispose() mutates the original array
|
|
@@ -416,13 +420,26 @@ export class DockviewComponent extends BaseGrid {
|
|
|
416
420
|
},
|
|
417
421
|
},
|
|
418
422
|
};
|
|
419
|
-
|
|
423
|
+
const _onDidWindowPositionChange = onDidWindowMoveEnd(_window.window);
|
|
424
|
+
popoutWindowDisposable.addDisposables(_onDidWindowPositionChange, onDidWindowResizeEnd(_window.window, () => {
|
|
425
|
+
this._onDidPopoutGroupSizeChange.fire({
|
|
426
|
+
width: _window.window.innerWidth,
|
|
427
|
+
height: _window.window.innerHeight,
|
|
428
|
+
group,
|
|
429
|
+
});
|
|
430
|
+
}), _onDidWindowPositionChange.event(() => {
|
|
431
|
+
this._onDidPopoutGroupPositionChange.fire({
|
|
432
|
+
screenX: _window.window.screenX,
|
|
433
|
+
screenY: _window.window.screenX,
|
|
434
|
+
group,
|
|
435
|
+
});
|
|
436
|
+
}),
|
|
420
437
|
/**
|
|
421
438
|
* ResizeObserver seems slow here, I do not know why but we don't need it
|
|
422
439
|
* since we can reply on the window resize event as we will occupy the full
|
|
423
440
|
* window dimensions
|
|
424
441
|
*/
|
|
425
|
-
|
|
442
|
+
addDisposableListener(_window.window, 'resize', () => {
|
|
426
443
|
group.layout(_window.window.innerWidth, _window.window.innerHeight);
|
|
427
444
|
}), overlayRenderContainer, Disposable.from(() => {
|
|
428
445
|
if (this.isDisposed) {
|
|
@@ -636,7 +653,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
636
653
|
}
|
|
637
654
|
this.updateWatermark();
|
|
638
655
|
}
|
|
639
|
-
orthogonalize(position) {
|
|
656
|
+
orthogonalize(position, options) {
|
|
640
657
|
switch (position) {
|
|
641
658
|
case 'top':
|
|
642
659
|
case 'bottom':
|
|
@@ -661,10 +678,10 @@ export class DockviewComponent extends BaseGrid {
|
|
|
661
678
|
case 'top':
|
|
662
679
|
case 'left':
|
|
663
680
|
case 'center':
|
|
664
|
-
return this.createGroupAtLocation([0]); // insert into first position
|
|
681
|
+
return this.createGroupAtLocation([0], undefined, options); // insert into first position
|
|
665
682
|
case 'bottom':
|
|
666
683
|
case 'right':
|
|
667
|
-
return this.createGroupAtLocation([this.gridview.length]); // insert into last position
|
|
684
|
+
return this.createGroupAtLocation([this.gridview.length], undefined, options); // insert into last position
|
|
668
685
|
default:
|
|
669
686
|
throw new Error(`unsupported position ${position}`);
|
|
670
687
|
}
|
|
@@ -1160,7 +1177,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
1160
1177
|
}
|
|
1161
1178
|
}
|
|
1162
1179
|
else {
|
|
1163
|
-
const group = this.orthogonalize(directionToPosition(options.direction));
|
|
1180
|
+
const group = this.orthogonalize(directionToPosition(options.direction), options);
|
|
1164
1181
|
if (!options.skipSetActive) {
|
|
1165
1182
|
this.doSetGroupAndPanelActive(group);
|
|
1166
1183
|
}
|
|
@@ -1602,8 +1619,8 @@ export class DockviewComponent extends BaseGrid {
|
|
|
1602
1619
|
});
|
|
1603
1620
|
return panel;
|
|
1604
1621
|
}
|
|
1605
|
-
createGroupAtLocation(location, size) {
|
|
1606
|
-
const group = this.createGroup();
|
|
1622
|
+
createGroupAtLocation(location, size, options) {
|
|
1623
|
+
const group = this.createGroup(options);
|
|
1607
1624
|
this.doAddGroup(group, location, size);
|
|
1608
1625
|
return group;
|
|
1609
1626
|
}
|
package/dist/esm/dom.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Event as DockviewEvent } from './events';
|
|
1
|
+
import { Event as DockviewEvent, Emitter } from './events';
|
|
2
2
|
import { IDisposable, CompositeDisposable } from './lifecycle';
|
|
3
3
|
export interface OverflowEvent {
|
|
4
4
|
hasScrollX: boolean;
|
|
@@ -15,13 +15,13 @@ export declare const removeClasses: (element: HTMLElement, ...classes: string[])
|
|
|
15
15
|
export declare const addClasses: (element: HTMLElement, ...classes: string[]) => void;
|
|
16
16
|
export declare const toggleClass: (element: HTMLElement, className: string, isToggled: boolean) => void;
|
|
17
17
|
export declare function isAncestor(testChild: Node | null, testAncestor: Node | null): boolean;
|
|
18
|
-
export declare function getElementsByTagName(tag: string): HTMLElement[];
|
|
18
|
+
export declare function getElementsByTagName(tag: string, document: ParentNode): HTMLElement[];
|
|
19
19
|
export interface IFocusTracker extends IDisposable {
|
|
20
20
|
readonly onDidFocus: DockviewEvent<void>;
|
|
21
21
|
readonly onDidBlur: DockviewEvent<void>;
|
|
22
22
|
refreshState?(): void;
|
|
23
23
|
}
|
|
24
|
-
export declare function trackFocus(element: HTMLElement
|
|
24
|
+
export declare function trackFocus(element: HTMLElement): IFocusTracker;
|
|
25
25
|
export declare function quasiPreventDefault(event: Event): void;
|
|
26
26
|
export declare function quasiDefaultPrevented(event: Event): boolean;
|
|
27
27
|
export declare function addStyles(document: Document, styleSheetList: StyleSheetList): void;
|
|
@@ -37,7 +37,7 @@ export declare function getDomNodePagePosition(domNode: Element): {
|
|
|
37
37
|
*/
|
|
38
38
|
export declare function isInDocument(element: Element): boolean;
|
|
39
39
|
export declare function addTestId(element: HTMLElement, id: string): void;
|
|
40
|
-
export declare function disableIframePointEvents(): {
|
|
40
|
+
export declare function disableIframePointEvents(rootNode?: ParentNode): {
|
|
41
41
|
release: () => void;
|
|
42
42
|
};
|
|
43
43
|
export declare function getDockviewTheme(element: HTMLElement): string | undefined;
|
|
@@ -48,3 +48,5 @@ export declare class Classnames {
|
|
|
48
48
|
setClassNames(classNames: string): void;
|
|
49
49
|
}
|
|
50
50
|
export declare function isChildEntirelyVisibleWithinParent(child: HTMLElement, parent: HTMLElement): boolean;
|
|
51
|
+
export declare function onDidWindowMoveEnd(window: Window): Emitter<void>;
|
|
52
|
+
export declare function onDidWindowResizeEnd(element: Window, cb: () => void): CompositeDisposable;
|
package/dist/esm/dom.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Emitter, addDisposableListener,
|
|
1
|
+
import { Emitter, addDisposableListener, } from './events';
|
|
2
2
|
import { CompositeDisposable } from './lifecycle';
|
|
3
3
|
export class OverflowObserver extends CompositeDisposable {
|
|
4
4
|
constructor(el) {
|
|
@@ -66,8 +66,8 @@ export function isAncestor(testChild, testAncestor) {
|
|
|
66
66
|
}
|
|
67
67
|
return false;
|
|
68
68
|
}
|
|
69
|
-
export function getElementsByTagName(tag) {
|
|
70
|
-
return Array.prototype.slice.call(document.
|
|
69
|
+
export function getElementsByTagName(tag, document) {
|
|
70
|
+
return Array.prototype.slice.call(document.querySelectorAll(tag), 0);
|
|
71
71
|
}
|
|
72
72
|
export function trackFocus(element) {
|
|
73
73
|
return new FocusTracker(element);
|
|
@@ -115,14 +115,8 @@ class FocusTracker extends CompositeDisposable {
|
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
};
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
this.addDisposables(addDisposableListener(element, 'blur', onBlur, true));
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
this.addDisposables(addDisposableWindowListener(element, 'focus', onFocus, true));
|
|
124
|
-
this.addDisposables(addDisposableWindowListener(element, 'blur', onBlur, true));
|
|
125
|
-
}
|
|
118
|
+
this.addDisposables(addDisposableListener(element, 'focus', onFocus, true));
|
|
119
|
+
this.addDisposables(addDisposableListener(element, 'blur', onBlur, true));
|
|
126
120
|
}
|
|
127
121
|
refreshState() {
|
|
128
122
|
this._refreshStateHandler();
|
|
@@ -196,11 +190,30 @@ export function isInDocument(element) {
|
|
|
196
190
|
export function addTestId(element, id) {
|
|
197
191
|
element.setAttribute('data-testid', id);
|
|
198
192
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
193
|
+
/**
|
|
194
|
+
* Should be more efficient than element.querySelectorAll("*") since there
|
|
195
|
+
* is no need to store every element in-memory using this approach
|
|
196
|
+
*/
|
|
197
|
+
function allTagsNamesInclusiveOfShadowDoms(tagNames) {
|
|
198
|
+
const iframes = [];
|
|
199
|
+
function findIframesInNode(node) {
|
|
200
|
+
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
201
|
+
if (tagNames.includes(node.tagName)) {
|
|
202
|
+
iframes.push(node);
|
|
203
|
+
}
|
|
204
|
+
if (node.shadowRoot) {
|
|
205
|
+
findIframesInNode(node.shadowRoot);
|
|
206
|
+
}
|
|
207
|
+
for (const child of node.children) {
|
|
208
|
+
findIframesInNode(child);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
findIframesInNode(document.documentElement);
|
|
213
|
+
return iframes;
|
|
214
|
+
}
|
|
215
|
+
export function disableIframePointEvents(rootNode = document) {
|
|
216
|
+
const iframes = allTagsNamesInclusiveOfShadowDoms(['IFRAME', 'WEBVIEW']);
|
|
204
217
|
const original = new WeakMap(); // don't hold onto HTMLElement references longer than required
|
|
205
218
|
for (const iframe of iframes) {
|
|
206
219
|
original.set(iframe, iframe.style.pointerEvents);
|
|
@@ -252,6 +265,7 @@ export class Classnames {
|
|
|
252
265
|
}
|
|
253
266
|
}
|
|
254
267
|
}
|
|
268
|
+
const DEBOUCE_DELAY = 100;
|
|
255
269
|
export function isChildEntirelyVisibleWithinParent(child, parent) {
|
|
256
270
|
//
|
|
257
271
|
const childPosition = getDomNodePagePosition(child);
|
|
@@ -265,3 +279,38 @@ export function isChildEntirelyVisibleWithinParent(child, parent) {
|
|
|
265
279
|
}
|
|
266
280
|
return true;
|
|
267
281
|
}
|
|
282
|
+
export function onDidWindowMoveEnd(window) {
|
|
283
|
+
const emitter = new Emitter();
|
|
284
|
+
let previousScreenX = window.screenX;
|
|
285
|
+
let previousScreenY = window.screenY;
|
|
286
|
+
let timeout;
|
|
287
|
+
const checkMovement = () => {
|
|
288
|
+
if (window.closed) {
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
const currentScreenX = window.screenX;
|
|
292
|
+
const currentScreenY = window.screenY;
|
|
293
|
+
if (currentScreenX !== previousScreenX ||
|
|
294
|
+
currentScreenY !== previousScreenY) {
|
|
295
|
+
clearTimeout(timeout);
|
|
296
|
+
timeout = setTimeout(() => {
|
|
297
|
+
emitter.fire();
|
|
298
|
+
}, DEBOUCE_DELAY);
|
|
299
|
+
previousScreenX = currentScreenX;
|
|
300
|
+
previousScreenY = currentScreenY;
|
|
301
|
+
}
|
|
302
|
+
requestAnimationFrame(checkMovement);
|
|
303
|
+
};
|
|
304
|
+
checkMovement();
|
|
305
|
+
return emitter;
|
|
306
|
+
}
|
|
307
|
+
export function onDidWindowResizeEnd(element, cb) {
|
|
308
|
+
let resizeTimeout;
|
|
309
|
+
const disposable = new CompositeDisposable(addDisposableListener(element, 'resize', () => {
|
|
310
|
+
clearTimeout(resizeTimeout);
|
|
311
|
+
resizeTimeout = setTimeout(() => {
|
|
312
|
+
cb();
|
|
313
|
+
}, DEBOUCE_DELAY);
|
|
314
|
+
}));
|
|
315
|
+
return disposable;
|
|
316
|
+
}
|
package/dist/esm/events.d.ts
CHANGED
|
@@ -54,7 +54,7 @@ export declare class Emitter<T> implements IDisposable {
|
|
|
54
54
|
fire(e: T): void;
|
|
55
55
|
dispose(): void;
|
|
56
56
|
}
|
|
57
|
-
export declare function
|
|
57
|
+
export declare function addDisposableListener<K extends keyof WindowEventMap>(element: Window, type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): IDisposable;
|
|
58
58
|
export declare function addDisposableListener<K extends keyof HTMLElementEventMap>(element: HTMLElement, type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): IDisposable;
|
|
59
59
|
/**
|
|
60
60
|
*
|
package/dist/esm/events.js
CHANGED
|
@@ -145,14 +145,6 @@ export class Emitter {
|
|
|
145
145
|
}
|
|
146
146
|
Emitter.ENABLE_TRACKING = false;
|
|
147
147
|
Emitter.MEMORY_LEAK_WATCHER = new LeakageMonitor();
|
|
148
|
-
export function addDisposableWindowListener(element, type, listener, options) {
|
|
149
|
-
element.addEventListener(type, listener, options);
|
|
150
|
-
return {
|
|
151
|
-
dispose: () => {
|
|
152
|
-
element.removeEventListener(type, listener, options);
|
|
153
|
-
},
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
148
|
export function addDisposableListener(element, type, listener, options) {
|
|
157
149
|
element.addEventListener(type, listener, options);
|
|
158
150
|
return {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { disableIframePointEvents, quasiDefaultPrevented, toggleClass, } from '../dom';
|
|
2
|
-
import { Emitter, addDisposableListener,
|
|
2
|
+
import { Emitter, addDisposableListener, } from '../events';
|
|
3
3
|
import { CompositeDisposable, MutableDisposable } from '../lifecycle';
|
|
4
4
|
import { clamp } from '../math';
|
|
5
5
|
class AriaLevelTracker {
|
|
@@ -164,7 +164,7 @@ export class Overlay extends CompositeDisposable {
|
|
|
164
164
|
dispose: () => {
|
|
165
165
|
iframes.release();
|
|
166
166
|
},
|
|
167
|
-
},
|
|
167
|
+
}, addDisposableListener(window, 'pointermove', (e) => {
|
|
168
168
|
const containerRect = this.options.container.getBoundingClientRect();
|
|
169
169
|
const x = e.clientX - containerRect.left;
|
|
170
170
|
const y = e.clientY - containerRect.top;
|
|
@@ -201,7 +201,7 @@ export class Overlay extends CompositeDisposable {
|
|
|
201
201
|
bounds.right = right;
|
|
202
202
|
}
|
|
203
203
|
this.setBounds(bounds);
|
|
204
|
-
}),
|
|
204
|
+
}), addDisposableListener(window, 'pointerup', () => {
|
|
205
205
|
toggleClass(this._element, 'dv-resize-container-dragging', false);
|
|
206
206
|
move.dispose();
|
|
207
207
|
this._onDidChangeEnd.fire();
|
|
@@ -246,7 +246,7 @@ export class Overlay extends CompositeDisposable {
|
|
|
246
246
|
e.preventDefault();
|
|
247
247
|
let startPosition = null;
|
|
248
248
|
const iframes = disableIframePointEvents();
|
|
249
|
-
move.value = new CompositeDisposable(
|
|
249
|
+
move.value = new CompositeDisposable(addDisposableListener(window, 'pointermove', (e) => {
|
|
250
250
|
const containerRect = this.options.container.getBoundingClientRect();
|
|
251
251
|
const overlayRect = this._element.getBoundingClientRect();
|
|
252
252
|
const y = e.clientY - containerRect.top;
|
|
@@ -370,7 +370,7 @@ export class Overlay extends CompositeDisposable {
|
|
|
370
370
|
dispose: () => {
|
|
371
371
|
iframes.release();
|
|
372
372
|
},
|
|
373
|
-
},
|
|
373
|
+
}, addDisposableListener(window, 'pointerup', () => {
|
|
374
374
|
move.dispose();
|
|
375
375
|
this._onDidChangeEnd.fire();
|
|
376
376
|
}));
|
|
@@ -12,14 +12,25 @@ export interface PaneviewDidDropEvent extends DroptargetEvent {
|
|
|
12
12
|
api: PaneviewApi;
|
|
13
13
|
}
|
|
14
14
|
export declare abstract class DraggablePaneviewPanel extends PaneviewPanel {
|
|
15
|
-
private readonly accessor;
|
|
16
15
|
private handler;
|
|
17
16
|
private target;
|
|
18
17
|
private readonly _onDidDrop;
|
|
19
18
|
readonly onDidDrop: Event<PaneviewDidDropEvent>;
|
|
20
19
|
private readonly _onUnhandledDragOverEvent;
|
|
21
20
|
readonly onUnhandledDragOverEvent: Event<PaneviewDndOverlayEvent>;
|
|
22
|
-
|
|
21
|
+
readonly accessor: IPaneviewComponent;
|
|
22
|
+
constructor(options: {
|
|
23
|
+
accessor: IPaneviewComponent;
|
|
24
|
+
id: string;
|
|
25
|
+
component: string;
|
|
26
|
+
headerComponent: string | undefined;
|
|
27
|
+
orientation: Orientation;
|
|
28
|
+
isExpanded: boolean;
|
|
29
|
+
disableDnd: boolean;
|
|
30
|
+
headerSize: number;
|
|
31
|
+
minimumBodySize: number;
|
|
32
|
+
maximumBodySize: number;
|
|
33
|
+
});
|
|
23
34
|
private initDragFeatures;
|
|
24
35
|
private onDrop;
|
|
25
36
|
}
|
|
@@ -6,15 +6,25 @@ import { Emitter } from '../events';
|
|
|
6
6
|
import { PaneviewUnhandledDragOverEvent, } from './options';
|
|
7
7
|
import { PaneviewPanel, } from './paneviewPanel';
|
|
8
8
|
export class DraggablePaneviewPanel extends PaneviewPanel {
|
|
9
|
-
constructor(
|
|
10
|
-
super(
|
|
11
|
-
|
|
9
|
+
constructor(options) {
|
|
10
|
+
super({
|
|
11
|
+
id: options.id,
|
|
12
|
+
component: options.component,
|
|
13
|
+
headerComponent: options.headerComponent,
|
|
14
|
+
orientation: options.orientation,
|
|
15
|
+
isExpanded: options.isExpanded,
|
|
16
|
+
isHeaderVisible: true,
|
|
17
|
+
headerSize: options.headerSize,
|
|
18
|
+
minimumBodySize: options.minimumBodySize,
|
|
19
|
+
maximumBodySize: options.maximumBodySize,
|
|
20
|
+
});
|
|
12
21
|
this._onDidDrop = new Emitter();
|
|
13
22
|
this.onDidDrop = this._onDidDrop.event;
|
|
14
23
|
this._onUnhandledDragOverEvent = new Emitter();
|
|
15
24
|
this.onUnhandledDragOverEvent = this._onUnhandledDragOverEvent.event;
|
|
25
|
+
this.accessor = options.accessor;
|
|
16
26
|
this.addDisposables(this._onDidDrop, this._onUnhandledDragOverEvent);
|
|
17
|
-
if (!disableDnd) {
|
|
27
|
+
if (!options.disableDnd) {
|
|
18
28
|
this.initDragFeatures();
|
|
19
29
|
}
|
|
20
30
|
}
|
|
@@ -12,6 +12,7 @@ export interface SerializedPaneviewPanel {
|
|
|
12
12
|
priority?: LayoutPriority;
|
|
13
13
|
minimumSize?: number;
|
|
14
14
|
maximumSize?: number;
|
|
15
|
+
headerSize?: number;
|
|
15
16
|
data: {
|
|
16
17
|
id: string;
|
|
17
18
|
component: string;
|
|
@@ -40,6 +41,9 @@ export declare class PaneFramework extends DraggablePaneviewPanel {
|
|
|
40
41
|
isExpanded: boolean;
|
|
41
42
|
disableDnd: boolean;
|
|
42
43
|
accessor: IPaneviewComponent;
|
|
44
|
+
headerSize: number;
|
|
45
|
+
minimumBodySize: number;
|
|
46
|
+
maximumBodySize: number;
|
|
43
47
|
});
|
|
44
48
|
getBodyComponent(): IPanePart;
|
|
45
49
|
getHeaderComponent(): IPanePart;
|
|
@@ -51,6 +55,7 @@ export interface AddPaneviewComponentOptions<T extends object = Parameters> {
|
|
|
51
55
|
params?: T;
|
|
52
56
|
minimumBodySize?: number;
|
|
53
57
|
maximumBodySize?: number;
|
|
58
|
+
headerSize?: number;
|
|
54
59
|
isExpanded?: boolean;
|
|
55
60
|
title: string;
|
|
56
61
|
index?: number;
|
|
@@ -9,9 +9,23 @@ import { sequentialNumberGenerator } from '../math';
|
|
|
9
9
|
import { Resizable } from '../resizable';
|
|
10
10
|
import { Classnames } from '../dom';
|
|
11
11
|
const nextLayoutId = sequentialNumberGenerator();
|
|
12
|
+
const HEADER_SIZE = 22;
|
|
13
|
+
const MINIMUM_BODY_SIZE = 0;
|
|
14
|
+
const MAXIMUM_BODY_SIZE = Number.MAX_SAFE_INTEGER;
|
|
12
15
|
export class PaneFramework extends DraggablePaneviewPanel {
|
|
13
16
|
constructor(options) {
|
|
14
|
-
super(
|
|
17
|
+
super({
|
|
18
|
+
accessor: options.accessor,
|
|
19
|
+
id: options.id,
|
|
20
|
+
component: options.component,
|
|
21
|
+
headerComponent: options.headerComponent,
|
|
22
|
+
orientation: options.orientation,
|
|
23
|
+
isExpanded: options.isExpanded,
|
|
24
|
+
disableDnd: options.disableDnd,
|
|
25
|
+
headerSize: options.headerSize,
|
|
26
|
+
minimumBodySize: options.minimumBodySize,
|
|
27
|
+
maximumBodySize: options.maximumBodySize,
|
|
28
|
+
});
|
|
15
29
|
this.options = options;
|
|
16
30
|
}
|
|
17
31
|
getBodyComponent() {
|
|
@@ -106,7 +120,7 @@ export class PaneviewComponent extends Resizable {
|
|
|
106
120
|
this._options = Object.assign(Object.assign({}, this.options), options);
|
|
107
121
|
}
|
|
108
122
|
addPanel(options) {
|
|
109
|
-
var _a;
|
|
123
|
+
var _a, _b;
|
|
110
124
|
const body = this.options.createComponent({
|
|
111
125
|
id: options.id,
|
|
112
126
|
name: options.component,
|
|
@@ -131,12 +145,15 @@ export class PaneviewComponent extends Resizable {
|
|
|
131
145
|
isExpanded: !!options.isExpanded,
|
|
132
146
|
disableDnd: !!this.options.disableDnd,
|
|
133
147
|
accessor: this,
|
|
148
|
+
headerSize: (_a = options.headerSize) !== null && _a !== void 0 ? _a : HEADER_SIZE,
|
|
149
|
+
minimumBodySize: MINIMUM_BODY_SIZE,
|
|
150
|
+
maximumBodySize: MAXIMUM_BODY_SIZE,
|
|
134
151
|
});
|
|
135
152
|
this.doAddPanel(view);
|
|
136
153
|
const size = typeof options.size === 'number' ? options.size : Sizing.Distribute;
|
|
137
154
|
const index = typeof options.index === 'number' ? options.index : undefined;
|
|
138
155
|
view.init({
|
|
139
|
-
params: (
|
|
156
|
+
params: (_b = options.params) !== null && _b !== void 0 ? _b : {},
|
|
140
157
|
minimumBodySize: options.minimumBodySize,
|
|
141
158
|
maximumBodySize: options.maximumBodySize,
|
|
142
159
|
isExpanded: options.isExpanded,
|
|
@@ -181,6 +198,7 @@ export class PaneviewComponent extends Resizable {
|
|
|
181
198
|
data: view.toJSON(),
|
|
182
199
|
minimumSize: minimum(view.minimumBodySize),
|
|
183
200
|
maximumSize: maximum(view.maximumBodySize),
|
|
201
|
+
headerSize: view.headerSize,
|
|
184
202
|
expanded: view.isExpanded(),
|
|
185
203
|
};
|
|
186
204
|
});
|
|
@@ -201,6 +219,7 @@ export class PaneviewComponent extends Resizable {
|
|
|
201
219
|
descriptor: {
|
|
202
220
|
size,
|
|
203
221
|
views: views.map((view) => {
|
|
222
|
+
var _a, _b, _c;
|
|
204
223
|
const data = view.data;
|
|
205
224
|
const body = this.options.createComponent({
|
|
206
225
|
id: data.id,
|
|
@@ -227,6 +246,9 @@ export class PaneviewComponent extends Resizable {
|
|
|
227
246
|
isExpanded: !!view.expanded,
|
|
228
247
|
disableDnd: !!this.options.disableDnd,
|
|
229
248
|
accessor: this,
|
|
249
|
+
headerSize: (_a = view.headerSize) !== null && _a !== void 0 ? _a : HEADER_SIZE,
|
|
250
|
+
minimumBodySize: (_b = view.minimumSize) !== null && _b !== void 0 ? _b : MINIMUM_BODY_SIZE,
|
|
251
|
+
maximumBodySize: (_c = view.maximumSize) !== null && _c !== void 0 ? _c : MAXIMUM_BODY_SIZE,
|
|
230
252
|
});
|
|
231
253
|
this.doAddPanel(panel);
|
|
232
254
|
queue.push(() => {
|
|
@@ -39,7 +39,6 @@ export interface IPaneviewPanel extends BasePanelViewExported<PaneviewPanelApiIm
|
|
|
39
39
|
headerVisible: boolean;
|
|
40
40
|
}
|
|
41
41
|
export declare abstract class PaneviewPanel extends BasePanelView<PaneviewPanelApiImpl> implements IPaneview, IPaneviewPanel {
|
|
42
|
-
private readonly headerComponent;
|
|
43
42
|
private readonly _onDidChangeExpansionState;
|
|
44
43
|
onDidChangeExpansionState: Event<boolean>;
|
|
45
44
|
private readonly _onDidChange;
|
|
@@ -47,7 +46,6 @@ export declare abstract class PaneviewPanel extends BasePanelView<PaneviewPanelA
|
|
|
47
46
|
size?: number;
|
|
48
47
|
orthogonalSize?: number;
|
|
49
48
|
}>;
|
|
50
|
-
private readonly headerSize;
|
|
51
49
|
private _orthogonalSize;
|
|
52
50
|
private _size;
|
|
53
51
|
private _minimumBodySize;
|
|
@@ -57,10 +55,11 @@ export declare abstract class PaneviewPanel extends BasePanelView<PaneviewPanelA
|
|
|
57
55
|
protected body?: HTMLElement;
|
|
58
56
|
private bodyPart?;
|
|
59
57
|
private headerPart?;
|
|
60
|
-
private expandedSize;
|
|
61
58
|
private animationTimer;
|
|
62
59
|
private _orientation;
|
|
63
60
|
private _headerVisible;
|
|
61
|
+
readonly headerSize: number;
|
|
62
|
+
readonly headerComponent: string | undefined;
|
|
64
63
|
set orientation(value: Orientation);
|
|
65
64
|
get orientation(): Orientation;
|
|
66
65
|
get minimumSize(): number;
|
|
@@ -74,7 +73,17 @@ export declare abstract class PaneviewPanel extends BasePanelView<PaneviewPanelA
|
|
|
74
73
|
set maximumBodySize(value: number);
|
|
75
74
|
get headerVisible(): boolean;
|
|
76
75
|
set headerVisible(value: boolean);
|
|
77
|
-
constructor(
|
|
76
|
+
constructor(options: {
|
|
77
|
+
id: string;
|
|
78
|
+
component: string;
|
|
79
|
+
headerComponent: string | undefined;
|
|
80
|
+
orientation: Orientation;
|
|
81
|
+
isExpanded: boolean;
|
|
82
|
+
isHeaderVisible: boolean;
|
|
83
|
+
headerSize: number;
|
|
84
|
+
minimumBodySize: number;
|
|
85
|
+
maximumBodySize: number;
|
|
86
|
+
});
|
|
78
87
|
setVisible(isVisible: boolean): void;
|
|
79
88
|
setActive(isActive: boolean): void;
|
|
80
89
|
isExpanded(): boolean;
|