dockview-core 6.6.0 → 7.0.2
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 +8 -1
- package/dist/cjs/api/component.api.d.ts +42 -21
- package/dist/cjs/api/component.api.js +111 -20
- package/dist/cjs/api/dockviewGroupPanelApi.d.ts +23 -8
- package/dist/cjs/api/dockviewGroupPanelApi.js +23 -0
- package/dist/cjs/api/dockviewPanelApi.d.ts +4 -3
- package/dist/cjs/api/dockviewPanelApi.js +8 -0
- package/dist/cjs/dnd/droptarget.d.ts +8 -0
- package/dist/cjs/dnd/droptarget.js +28 -0
- package/dist/cjs/dockview/accessibilityMessages.d.ts +32 -0
- package/dist/cjs/dockview/accessibilityMessages.js +51 -0
- package/dist/cjs/dockview/allModules.d.ts +8 -0
- package/dist/cjs/dockview/allModules.js +25 -0
- package/dist/cjs/dockview/components/panel/content.d.ts +2 -0
- package/dist/cjs/dockview/components/panel/content.js +35 -4
- package/dist/cjs/dockview/components/tab/tab.js +33 -5
- package/dist/cjs/dockview/components/titlebar/floatingTitleBar.d.ts +35 -0
- package/dist/cjs/dockview/components/titlebar/floatingTitleBar.js +95 -0
- package/dist/cjs/dockview/components/titlebar/groupDragSource.d.ts +52 -0
- package/dist/cjs/dockview/components/titlebar/groupDragSource.js +218 -0
- package/dist/cjs/dockview/components/titlebar/tabGroupIndicator.d.ts +2 -1
- package/dist/cjs/dockview/components/titlebar/tabGroupIndicator.js +31 -24
- package/dist/cjs/dockview/components/titlebar/tabGroups.js +1 -0
- package/dist/cjs/dockview/components/titlebar/tabs.d.ts +12 -0
- package/dist/cjs/dockview/components/titlebar/tabs.js +105 -2
- package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts +4 -0
- package/dist/cjs/dockview/components/titlebar/tabsContainer.js +13 -3
- package/dist/cjs/dockview/components/titlebar/voidContainer.d.ts +1 -4
- package/dist/cjs/dockview/components/titlebar/voidContainer.js +31 -155
- package/dist/cjs/dockview/dockviewComponent.d.ts +299 -44
- package/dist/cjs/dockview/dockviewComponent.js +1787 -993
- package/dist/cjs/dockview/dockviewFloatingGroupPanel.d.ts +33 -2
- package/dist/cjs/dockview/dockviewFloatingGroupPanel.js +39 -3
- package/dist/cjs/dockview/dockviewGroupPanel.d.ts +0 -1
- package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +36 -14
- package/dist/cjs/dockview/dockviewGroupPanelModel.js +133 -101
- package/dist/cjs/dockview/dockviewPanel.d.ts +2 -2
- package/dist/cjs/dockview/edgeGroupService.d.ts +38 -0
- package/dist/cjs/dockview/edgeGroupService.js +128 -0
- package/dist/cjs/dockview/floatingGroupService.d.ts +37 -0
- package/dist/cjs/dockview/floatingGroupService.js +231 -0
- package/dist/cjs/dockview/headerActionsService.d.ts +32 -0
- package/dist/cjs/dockview/headerActionsService.js +149 -0
- package/dist/cjs/dockview/liveRegionService.d.ts +53 -0
- package/dist/cjs/dockview/liveRegionService.js +185 -0
- package/dist/cjs/dockview/moduleContracts.d.ts +119 -0
- package/dist/cjs/dockview/moduleContracts.js +2 -0
- package/dist/cjs/dockview/modules.d.ts +110 -0
- package/dist/cjs/dockview/modules.js +304 -0
- package/dist/cjs/dockview/options.d.ts +159 -6
- package/dist/cjs/dockview/options.js +8 -1
- package/dist/cjs/dockview/popoutWindowService.d.ts +95 -0
- package/dist/cjs/dockview/popoutWindowService.js +261 -0
- package/dist/cjs/dockview/rootDropTargetService.d.ts +35 -0
- package/dist/cjs/dockview/rootDropTargetService.js +87 -0
- package/dist/cjs/dockview/watermarkService.d.ts +30 -0
- package/dist/cjs/dockview/watermarkService.js +61 -0
- package/dist/cjs/gridview/baseComponentGridview.d.ts +1 -1
- package/dist/cjs/gridview/baseComponentGridview.js +3 -2
- package/dist/cjs/gridview/gridviewComponent.d.ts +3 -3
- package/dist/cjs/gridview/gridviewPanel.d.ts +1 -1
- package/dist/cjs/index.d.ts +11 -4
- package/dist/cjs/index.js +14 -1
- package/dist/cjs/overlay/overlay.d.ts +43 -1
- package/dist/cjs/overlay/overlay.js +57 -8
- package/dist/cjs/paneview/draggablePaneviewPanel.d.ts +2 -2
- package/dist/cjs/paneview/draggablePaneviewPanel.js +4 -4
- package/dist/cjs/paneview/paneviewComponent.d.ts +3 -3
- package/dist/cjs/paneview/paneviewComponent.js +5 -5
- package/dist/dockview-core.js +3199 -1251
- 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 +3198 -1250
- package/dist/esm/api/component.api.d.ts +42 -21
- package/dist/esm/api/component.api.js +63 -18
- package/dist/esm/api/dockviewGroupPanelApi.d.ts +23 -8
- package/dist/esm/api/dockviewGroupPanelApi.js +19 -0
- package/dist/esm/api/dockviewPanelApi.d.ts +4 -3
- package/dist/esm/api/dockviewPanelApi.js +7 -0
- package/dist/esm/dnd/droptarget.d.ts +8 -0
- package/dist/esm/dnd/droptarget.js +28 -0
- package/dist/esm/dockview/accessibilityMessages.d.ts +32 -0
- package/dist/esm/dockview/accessibilityMessages.js +30 -0
- package/dist/esm/dockview/allModules.d.ts +8 -0
- package/dist/esm/dockview/allModules.js +22 -0
- package/dist/esm/dockview/components/panel/content.d.ts +2 -0
- package/dist/esm/dockview/components/panel/content.js +36 -5
- package/dist/esm/dockview/components/tab/tab.js +33 -5
- package/dist/esm/dockview/components/titlebar/floatingTitleBar.d.ts +35 -0
- package/dist/esm/dockview/components/titlebar/floatingTitleBar.js +65 -0
- package/dist/esm/dockview/components/titlebar/groupDragSource.d.ts +52 -0
- package/dist/esm/dockview/components/titlebar/groupDragSource.js +178 -0
- package/dist/esm/dockview/components/titlebar/tabGroupIndicator.d.ts +2 -1
- package/dist/esm/dockview/components/titlebar/tabGroupIndicator.js +31 -24
- package/dist/esm/dockview/components/titlebar/tabGroups.js +1 -0
- package/dist/esm/dockview/components/titlebar/tabs.d.ts +12 -0
- package/dist/esm/dockview/components/titlebar/tabs.js +102 -2
- package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts +4 -0
- package/dist/esm/dockview/components/titlebar/tabsContainer.js +8 -2
- package/dist/esm/dockview/components/titlebar/voidContainer.d.ts +1 -4
- package/dist/esm/dockview/components/titlebar/voidContainer.js +33 -145
- package/dist/esm/dockview/dockviewComponent.d.ts +299 -44
- package/dist/esm/dockview/dockviewComponent.js +1421 -717
- package/dist/esm/dockview/dockviewFloatingGroupPanel.d.ts +33 -2
- package/dist/esm/dockview/dockviewFloatingGroupPanel.js +35 -3
- package/dist/esm/dockview/dockviewGroupPanel.d.ts +0 -1
- package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +36 -14
- package/dist/esm/dockview/dockviewGroupPanelModel.js +109 -93
- package/dist/esm/dockview/dockviewPanel.d.ts +2 -2
- package/dist/esm/dockview/edgeGroupService.d.ts +38 -0
- package/dist/esm/dockview/edgeGroupService.js +63 -0
- package/dist/esm/dockview/floatingGroupService.d.ts +37 -0
- package/dist/esm/dockview/floatingGroupService.js +150 -0
- package/dist/esm/dockview/headerActionsService.d.ts +32 -0
- package/dist/esm/dockview/headerActionsService.js +86 -0
- package/dist/esm/dockview/liveRegionService.d.ts +53 -0
- package/dist/esm/dockview/liveRegionService.js +159 -0
- package/dist/esm/dockview/moduleContracts.d.ts +119 -0
- package/dist/esm/dockview/moduleContracts.js +1 -0
- package/dist/esm/dockview/modules.d.ts +110 -0
- package/dist/esm/dockview/modules.js +170 -0
- package/dist/esm/dockview/options.d.ts +159 -6
- package/dist/esm/dockview/options.js +8 -1
- package/dist/esm/dockview/popoutWindowService.d.ts +95 -0
- package/dist/esm/dockview/popoutWindowService.js +175 -0
- package/dist/esm/dockview/rootDropTargetService.d.ts +35 -0
- package/dist/esm/dockview/rootDropTargetService.js +82 -0
- package/dist/esm/dockview/watermarkService.d.ts +30 -0
- package/dist/esm/dockview/watermarkService.js +56 -0
- package/dist/esm/gridview/baseComponentGridview.d.ts +1 -1
- package/dist/esm/gridview/baseComponentGridview.js +2 -2
- package/dist/esm/gridview/gridviewComponent.d.ts +3 -3
- package/dist/esm/gridview/gridviewPanel.d.ts +1 -1
- package/dist/esm/index.d.ts +11 -4
- package/dist/esm/index.js +4 -0
- package/dist/esm/overlay/overlay.d.ts +43 -1
- package/dist/esm/overlay/overlay.js +53 -8
- package/dist/esm/paneview/draggablePaneviewPanel.d.ts +2 -2
- package/dist/esm/paneview/draggablePaneviewPanel.js +4 -4
- package/dist/esm/paneview/paneviewComponent.d.ts +3 -3
- package/dist/esm/paneview/paneviewComponent.js +5 -5
- package/dist/package/main.cjs.js +3234 -1286
- package/dist/package/main.cjs.min.js +2 -2
- package/dist/package/main.esm.min.mjs +2 -2
- package/dist/package/main.esm.mjs +3189 -1252
- package/dist/styles/dockview.css +275 -13
- package/package.json +10 -1
- package/dist/cjs/dockview/contextMenu.d.ts +0 -10
- package/dist/cjs/dockview/contextMenu.js +0 -313
- package/dist/esm/dockview/contextMenu.d.ts +0 -10
- package/dist/esm/dockview/contextMenu.js +0 -228
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { IDisposable } from '../lifecycle';
|
|
2
|
+
import { Event } from '../events';
|
|
3
|
+
import { PopupService } from './components/popupService';
|
|
4
|
+
import { PopoutWindow } from '../popoutWindow';
|
|
5
|
+
import { DockviewGroupPanel } from './dockviewGroupPanel';
|
|
6
|
+
import { SerializedPopoutGroup } from './dockviewComponent';
|
|
7
|
+
import { Gridview } from '../gridview/gridview';
|
|
8
|
+
import { OverlayRenderContainer } from '../overlay/overlayRenderContainer';
|
|
9
|
+
import { DropTargetAnchorContainer } from '../dnd/dropTargetAnchorContainer';
|
|
10
|
+
export interface PopoutGroupEntry {
|
|
11
|
+
window: PopoutWindow;
|
|
12
|
+
popoutGroup: DockviewGroupPanel;
|
|
13
|
+
referenceGroup?: string;
|
|
14
|
+
/**
|
|
15
|
+
* The popout window hosts its own gridview so it can hold a nested
|
|
16
|
+
* splitview layout of groups. `popoutGroup` is the window's anchor group.
|
|
17
|
+
*/
|
|
18
|
+
gridview: Gridview;
|
|
19
|
+
/**
|
|
20
|
+
* Render / drop-target containers and window accessor for this popout, so
|
|
21
|
+
* groups relocated into the window can be wired to its own document.
|
|
22
|
+
*/
|
|
23
|
+
overlayRenderContainer: OverlayRenderContainer;
|
|
24
|
+
dropTargetContainer: DropTargetAnchorContainer;
|
|
25
|
+
getWindow: () => Window;
|
|
26
|
+
popoutUrl?: string;
|
|
27
|
+
disposable: {
|
|
28
|
+
dispose: () => DockviewGroupPanel | undefined;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Narrow callback surface the PopoutWindowService needs from its host.
|
|
33
|
+
*/
|
|
34
|
+
export interface IPopoutWindowHost {
|
|
35
|
+
readonly isDisposed: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface IPopoutWindowService extends IDisposable {
|
|
38
|
+
readonly entries: readonly PopoutGroupEntry[];
|
|
39
|
+
readonly onDidRemove: Event<PopoutGroupEntry>;
|
|
40
|
+
add(entry: PopoutGroupEntry): void;
|
|
41
|
+
remove(entry: PopoutGroupEntry): void;
|
|
42
|
+
findByGroup(group: DockviewGroupPanel): PopoutGroupEntry | undefined;
|
|
43
|
+
findReferenceGroupId(group: DockviewGroupPanel): string | undefined;
|
|
44
|
+
observeGridviewSize(popoutWindow: PopoutWindow, gridview: Gridview, overlayRenderContainer: OverlayRenderContainer): IDisposable | undefined;
|
|
45
|
+
getPopupService(groupId: string): PopupService | undefined;
|
|
46
|
+
setPopupService(groupId: string, service: PopupService): void;
|
|
47
|
+
deletePopupService(groupId: string): void;
|
|
48
|
+
readonly restorationPromise: Promise<void>;
|
|
49
|
+
scheduleRestoration(delayMs: number, work: () => void, onCancel?: () => void): Promise<void>;
|
|
50
|
+
finishRestoration(promises: Promise<void>[]): void;
|
|
51
|
+
cancelPendingRestorations(): void;
|
|
52
|
+
serialize(): SerializedPopoutGroup[];
|
|
53
|
+
disposeAll(): void;
|
|
54
|
+
}
|
|
55
|
+
export declare class PopoutWindowService implements IPopoutWindowService {
|
|
56
|
+
private readonly _host;
|
|
57
|
+
private readonly _entries;
|
|
58
|
+
private readonly _popupServices;
|
|
59
|
+
private readonly _restorationCleanups;
|
|
60
|
+
private _restorationPromise;
|
|
61
|
+
private readonly _onDidRemove;
|
|
62
|
+
readonly onDidRemove: Event<PopoutGroupEntry>;
|
|
63
|
+
constructor(host: IPopoutWindowHost);
|
|
64
|
+
get entries(): readonly PopoutGroupEntry[];
|
|
65
|
+
get restorationPromise(): Promise<void>;
|
|
66
|
+
add(entry: PopoutGroupEntry): void;
|
|
67
|
+
remove(entry: PopoutGroupEntry): void;
|
|
68
|
+
findByGroup(group: DockviewGroupPanel): PopoutGroupEntry | undefined;
|
|
69
|
+
findReferenceGroupId(group: DockviewGroupPanel): string | undefined;
|
|
70
|
+
/**
|
|
71
|
+
* The popout window's innerWidth/innerHeight are often 0/stale until it has
|
|
72
|
+
* painted, and the nested gridview lays its children out to the size passed
|
|
73
|
+
* to layout() (a plain group fills via CSS instead). To stop content
|
|
74
|
+
* rendering into a zero box until a manual resize — and to avoid the race a
|
|
75
|
+
* fixed number of animation frames had — observe the gridview element with
|
|
76
|
+
* a ResizeObserver created in the POPOUT window's OWN realm. A parent-realm
|
|
77
|
+
* observer fires unreliably across the window boundary; a same-realm one
|
|
78
|
+
* fires reliably, including the initial observation once the window is
|
|
79
|
+
* sized.
|
|
80
|
+
*
|
|
81
|
+
* @returns a disposable that disconnects the observer, or `undefined` when
|
|
82
|
+
* the popout realm has no ResizeObserver (e.g. jsdom).
|
|
83
|
+
*/
|
|
84
|
+
observeGridviewSize(popoutWindow: PopoutWindow, gridview: Gridview, overlayRenderContainer: OverlayRenderContainer): IDisposable | undefined;
|
|
85
|
+
getPopupService(groupId: string): PopupService | undefined;
|
|
86
|
+
setPopupService(groupId: string, service: PopupService): void;
|
|
87
|
+
deletePopupService(groupId: string): void;
|
|
88
|
+
scheduleRestoration(delayMs: number, work: () => void, onCancel?: () => void): Promise<void>;
|
|
89
|
+
finishRestoration(promises: Promise<void>[]): void;
|
|
90
|
+
cancelPendingRestorations(): void;
|
|
91
|
+
serialize(): SerializedPopoutGroup[];
|
|
92
|
+
disposeAll(): void;
|
|
93
|
+
dispose(): void;
|
|
94
|
+
}
|
|
95
|
+
export declare const PopoutWindowModule: import("./modules").DockviewModule<IPopoutWindowHost>;
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { Emitter } from '../events';
|
|
2
|
+
import { remove } from '../array';
|
|
3
|
+
import { defineModule } from './modules';
|
|
4
|
+
export class PopoutWindowService {
|
|
5
|
+
constructor(host) {
|
|
6
|
+
this._entries = [];
|
|
7
|
+
this._popupServices = new Map();
|
|
8
|
+
this._restorationCleanups = new Set();
|
|
9
|
+
this._restorationPromise = Promise.resolve();
|
|
10
|
+
this._onDidRemove = new Emitter();
|
|
11
|
+
this.onDidRemove = this._onDidRemove.event;
|
|
12
|
+
this._host = host;
|
|
13
|
+
}
|
|
14
|
+
get entries() {
|
|
15
|
+
return this._entries;
|
|
16
|
+
}
|
|
17
|
+
get restorationPromise() {
|
|
18
|
+
return this._restorationPromise;
|
|
19
|
+
}
|
|
20
|
+
add(entry) {
|
|
21
|
+
this._entries.push(entry);
|
|
22
|
+
}
|
|
23
|
+
remove(entry) {
|
|
24
|
+
// Fire only on a genuine removal, and not while the host component is
|
|
25
|
+
// tearing down (consumers don't want popout-removed events during
|
|
26
|
+
// dispose).
|
|
27
|
+
if (remove(this._entries, entry) && !this._host.isDisposed) {
|
|
28
|
+
this._onDidRemove.fire(entry);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
findByGroup(group) {
|
|
32
|
+
// A popout window may host several groups in a nested gridview, so
|
|
33
|
+
// match by membership (DOM containment) rather than only the anchor.
|
|
34
|
+
return this._entries.find((entry) => entry.popoutGroup === group ||
|
|
35
|
+
entry.gridview.element.contains(group.element));
|
|
36
|
+
}
|
|
37
|
+
findReferenceGroupId(group) {
|
|
38
|
+
var _a;
|
|
39
|
+
return (_a = this._entries.find((entry) => entry.popoutGroup === group)) === null || _a === void 0 ? void 0 : _a.referenceGroup;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The popout window's innerWidth/innerHeight are often 0/stale until it has
|
|
43
|
+
* painted, and the nested gridview lays its children out to the size passed
|
|
44
|
+
* to layout() (a plain group fills via CSS instead). To stop content
|
|
45
|
+
* rendering into a zero box until a manual resize — and to avoid the race a
|
|
46
|
+
* fixed number of animation frames had — observe the gridview element with
|
|
47
|
+
* a ResizeObserver created in the POPOUT window's OWN realm. A parent-realm
|
|
48
|
+
* observer fires unreliably across the window boundary; a same-realm one
|
|
49
|
+
* fires reliably, including the initial observation once the window is
|
|
50
|
+
* sized.
|
|
51
|
+
*
|
|
52
|
+
* @returns a disposable that disconnects the observer, or `undefined` when
|
|
53
|
+
* the popout realm has no ResizeObserver (e.g. jsdom).
|
|
54
|
+
*/
|
|
55
|
+
observeGridviewSize(popoutWindow, gridview, overlayRenderContainer) {
|
|
56
|
+
var _a;
|
|
57
|
+
const PopoutResizeObserver = (_a = popoutWindow.window) === null || _a === void 0 ? void 0 : _a.ResizeObserver;
|
|
58
|
+
if (!PopoutResizeObserver) {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
let lastWidth = -1;
|
|
62
|
+
let lastHeight = -1;
|
|
63
|
+
const relayout = () => {
|
|
64
|
+
const win = popoutWindow.window;
|
|
65
|
+
if (this._host.isDisposed || !win || win.closed) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const width = Math.round(gridview.element.clientWidth);
|
|
69
|
+
const height = Math.round(gridview.element.clientHeight);
|
|
70
|
+
if (width === lastWidth && height === lastHeight) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
lastWidth = width;
|
|
74
|
+
lastHeight = height;
|
|
75
|
+
if (width > 0 && height > 0) {
|
|
76
|
+
gridview.layout(width, height);
|
|
77
|
+
}
|
|
78
|
+
overlayRenderContainer.updateAllPositions();
|
|
79
|
+
};
|
|
80
|
+
const observer = new PopoutResizeObserver(() => {
|
|
81
|
+
var _a;
|
|
82
|
+
// Defer out of the observer callback into the popout's own frame to
|
|
83
|
+
// size against the settled layout and to avoid resize-loop warnings.
|
|
84
|
+
const raf = (_a = popoutWindow.window) === null || _a === void 0 ? void 0 : _a.requestAnimationFrame;
|
|
85
|
+
if (raf) {
|
|
86
|
+
raf.call(popoutWindow.window, relayout);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
relayout();
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
observer.observe(gridview.element);
|
|
93
|
+
return { dispose: () => observer.disconnect() };
|
|
94
|
+
}
|
|
95
|
+
getPopupService(groupId) {
|
|
96
|
+
return this._popupServices.get(groupId);
|
|
97
|
+
}
|
|
98
|
+
setPopupService(groupId, service) {
|
|
99
|
+
this._popupServices.set(groupId, service);
|
|
100
|
+
}
|
|
101
|
+
deletePopupService(groupId) {
|
|
102
|
+
this._popupServices.delete(groupId);
|
|
103
|
+
}
|
|
104
|
+
scheduleRestoration(delayMs, work, onCancel) {
|
|
105
|
+
return new Promise((resolve) => {
|
|
106
|
+
const cleanup = () => {
|
|
107
|
+
this._restorationCleanups.delete(cleanup);
|
|
108
|
+
clearTimeout(handle);
|
|
109
|
+
onCancel === null || onCancel === void 0 ? void 0 : onCancel();
|
|
110
|
+
resolve();
|
|
111
|
+
};
|
|
112
|
+
const handle = setTimeout(() => {
|
|
113
|
+
this._restorationCleanups.delete(cleanup);
|
|
114
|
+
// Guard against the component being disposed before this
|
|
115
|
+
// timer fires. Under React StrictMode the component is
|
|
116
|
+
// mounted -> disposed -> remounted, and without this guard
|
|
117
|
+
// the first instance's queued restoration would open a
|
|
118
|
+
// second popout window. See issue #851.
|
|
119
|
+
if (this._host.isDisposed) {
|
|
120
|
+
resolve();
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
work();
|
|
124
|
+
resolve();
|
|
125
|
+
}, delayMs);
|
|
126
|
+
this._restorationCleanups.add(cleanup);
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
finishRestoration(promises) {
|
|
130
|
+
this._restorationPromise = Promise.all(promises).then(() => void 0);
|
|
131
|
+
}
|
|
132
|
+
cancelPendingRestorations() {
|
|
133
|
+
for (const cleanup of [...this._restorationCleanups]) {
|
|
134
|
+
cleanup();
|
|
135
|
+
}
|
|
136
|
+
this._restorationCleanups.clear();
|
|
137
|
+
}
|
|
138
|
+
serialize() {
|
|
139
|
+
return this._entries.map((entry) => {
|
|
140
|
+
const grid = entry.gridview.serialize();
|
|
141
|
+
const root = grid.root;
|
|
142
|
+
const url = entry.popoutGroup.api.location.type === 'popout'
|
|
143
|
+
? entry.popoutGroup.api.location.popoutUrl
|
|
144
|
+
: undefined;
|
|
145
|
+
const base = {
|
|
146
|
+
gridReferenceGroup: entry.referenceGroup,
|
|
147
|
+
position: entry.window.dimensions(),
|
|
148
|
+
url,
|
|
149
|
+
};
|
|
150
|
+
// Single-group window keeps the legacy `data` shape so layouts
|
|
151
|
+
// round-trip byte-stably and older readers keep working.
|
|
152
|
+
if (root.type === 'branch' &&
|
|
153
|
+
root.data.length === 1 &&
|
|
154
|
+
root.data[0].type === 'leaf') {
|
|
155
|
+
return Object.assign(Object.assign({}, base), { data: root.data[0].data });
|
|
156
|
+
}
|
|
157
|
+
return Object.assign(Object.assign({}, base), { grid });
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
disposeAll() {
|
|
161
|
+
for (const entry of [...this._entries]) {
|
|
162
|
+
entry.disposable.dispose();
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
dispose() {
|
|
166
|
+
this.cancelPendingRestorations();
|
|
167
|
+
this.disposeAll();
|
|
168
|
+
this._onDidRemove.dispose();
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
export const PopoutWindowModule = defineModule({
|
|
172
|
+
name: 'PopoutWindow',
|
|
173
|
+
serviceKey: 'popoutWindowService',
|
|
174
|
+
create: (host) => new PopoutWindowService(host),
|
|
175
|
+
});
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { IDisposable } from '../lifecycle';
|
|
2
|
+
import { Event } from '../events';
|
|
3
|
+
import { DroptargetEvent, DropTargetTargetModel, Position, WillShowOverlayEvent } from '../dnd/droptarget';
|
|
4
|
+
import { DockviewComponentOptions } from './options';
|
|
5
|
+
export interface IRootDropTargetHost {
|
|
6
|
+
readonly id: string;
|
|
7
|
+
readonly element: HTMLElement;
|
|
8
|
+
readonly options: DockviewComponentOptions;
|
|
9
|
+
isGridEmpty(): boolean;
|
|
10
|
+
rootDropTargetOverrideTarget(): DropTargetTargetModel | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* Build, fire, and return the verdict for an unhandled-drag-over event.
|
|
13
|
+
* Implemented on the component side so the service stays free of
|
|
14
|
+
* circular imports with the event class declared in dockviewComponent.
|
|
15
|
+
*/
|
|
16
|
+
dispatchUnhandledDragOver(nativeEvent: DragEvent | PointerEvent, position: Position): boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface IRootDropTargetService extends IDisposable {
|
|
19
|
+
/** Merged stream from both DnD backends. */
|
|
20
|
+
readonly onWillShowOverlay: Event<WillShowOverlayEvent>;
|
|
21
|
+
/** Merged stream from both DnD backends. */
|
|
22
|
+
readonly onDrop: Event<DroptargetEvent>;
|
|
23
|
+
/** Apply changed options (dndEdges). */
|
|
24
|
+
setOptions(options: Partial<DockviewComponentOptions>): void;
|
|
25
|
+
}
|
|
26
|
+
export declare class RootDropTargetService implements IRootDropTargetService {
|
|
27
|
+
private readonly _html5Target;
|
|
28
|
+
private readonly _pointerTarget;
|
|
29
|
+
readonly onWillShowOverlay: Event<WillShowOverlayEvent>;
|
|
30
|
+
readonly onDrop: Event<DroptargetEvent>;
|
|
31
|
+
constructor(host: IRootDropTargetHost);
|
|
32
|
+
setOptions(options: Partial<DockviewComponentOptions>): void;
|
|
33
|
+
dispose(): void;
|
|
34
|
+
}
|
|
35
|
+
export declare const RootDropTargetModule: import("./modules").DockviewModule<IRootDropTargetHost>;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { Event } from '../events';
|
|
2
|
+
import { html5Backend, pointerBackend } from '../dnd/backend';
|
|
3
|
+
import { getPanelData } from '../dnd/dataTransfer';
|
|
4
|
+
import { defineModule } from './modules';
|
|
5
|
+
const DEFAULT_ROOT_OVERLAY_MODEL = {
|
|
6
|
+
activationSize: { type: 'pixels', value: 10 },
|
|
7
|
+
size: { type: 'pixels', value: 20 },
|
|
8
|
+
};
|
|
9
|
+
export class RootDropTargetService {
|
|
10
|
+
constructor(host) {
|
|
11
|
+
const canDisplayOverlay = (event, position) => {
|
|
12
|
+
const data = getPanelData();
|
|
13
|
+
if (data) {
|
|
14
|
+
if (data.viewId !== host.id) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
if (position === 'center') {
|
|
18
|
+
// center drop target only allowed if no panels in primary
|
|
19
|
+
// grid; floating panels are allowed
|
|
20
|
+
return host.isGridEmpty();
|
|
21
|
+
}
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
if (position === 'center' && !host.isGridEmpty()) {
|
|
25
|
+
// for external events only show the four-corner drag overlays,
|
|
26
|
+
// disable center so external drag events can fall through to
|
|
27
|
+
// the group and panel drop target handlers
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
return host.dispatchUnhandledDragOver(event, position);
|
|
31
|
+
};
|
|
32
|
+
const overlayModel = typeof host.options.dndEdges === 'object' &&
|
|
33
|
+
host.options.dndEdges !== null
|
|
34
|
+
? host.options.dndEdges
|
|
35
|
+
: DEFAULT_ROOT_OVERLAY_MODEL;
|
|
36
|
+
this._html5Target = html5Backend.createDropTarget(host.element, {
|
|
37
|
+
className: 'dv-drop-target-edge',
|
|
38
|
+
canDisplayOverlay,
|
|
39
|
+
acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
|
|
40
|
+
overlayModel,
|
|
41
|
+
getOverrideTarget: () => host.rootDropTargetOverrideTarget(),
|
|
42
|
+
});
|
|
43
|
+
this._pointerTarget = pointerBackend.createDropTarget(host.element, {
|
|
44
|
+
className: 'dv-drop-target-edge',
|
|
45
|
+
canDisplayOverlay,
|
|
46
|
+
acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
|
|
47
|
+
overlayModel,
|
|
48
|
+
getOverrideTarget: () => host.rootDropTargetOverrideTarget(),
|
|
49
|
+
});
|
|
50
|
+
this.onWillShowOverlay = Event.any(this._html5Target.onWillShowOverlay, this._pointerTarget.onWillShowOverlay);
|
|
51
|
+
this.onDrop = Event.any(this._html5Target.onDrop, this._pointerTarget.onDrop);
|
|
52
|
+
// Apply initial-state options now that the targets exist; setOptions
|
|
53
|
+
// handles dndEdges (disable + overlay model) and late changes.
|
|
54
|
+
this.setOptions(host.options);
|
|
55
|
+
}
|
|
56
|
+
setOptions(options) {
|
|
57
|
+
if ('dndEdges' in options) {
|
|
58
|
+
const disabled = typeof options.dndEdges === 'boolean' &&
|
|
59
|
+
options.dndEdges === false;
|
|
60
|
+
this._html5Target.disabled = disabled;
|
|
61
|
+
this._pointerTarget.disabled = disabled;
|
|
62
|
+
if (typeof options.dndEdges === 'object' &&
|
|
63
|
+
options.dndEdges !== null) {
|
|
64
|
+
this._html5Target.setOverlayModel(options.dndEdges);
|
|
65
|
+
this._pointerTarget.setOverlayModel(options.dndEdges);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
this._html5Target.setOverlayModel(DEFAULT_ROOT_OVERLAY_MODEL);
|
|
69
|
+
this._pointerTarget.setOverlayModel(DEFAULT_ROOT_OVERLAY_MODEL);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
dispose() {
|
|
74
|
+
this._html5Target.dispose();
|
|
75
|
+
this._pointerTarget.dispose();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export const RootDropTargetModule = defineModule({
|
|
79
|
+
name: 'RootDropTarget',
|
|
80
|
+
serviceKey: 'rootDropTargetService',
|
|
81
|
+
create: (host) => new RootDropTargetService(host),
|
|
82
|
+
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { IDisposable } from '../lifecycle';
|
|
2
|
+
import { Event } from '../events';
|
|
3
|
+
import { IWatermarkRenderer } from './types';
|
|
4
|
+
import { DockviewApi } from '../api/component.api';
|
|
5
|
+
import { DockviewGroupPanel } from './dockviewGroupPanel';
|
|
6
|
+
export interface IWatermarkHost {
|
|
7
|
+
readonly api: DockviewApi;
|
|
8
|
+
readonly mountElement: HTMLElement;
|
|
9
|
+
createWatermarkComponent(): IWatermarkRenderer;
|
|
10
|
+
hasVisibleGridGroup(): boolean;
|
|
11
|
+
readonly onDidAdd: Event<DockviewGroupPanel>;
|
|
12
|
+
readonly onDidRemove: Event<DockviewGroupPanel>;
|
|
13
|
+
readonly onDidViewVisibilityChangeMicroTaskQueue: Event<unknown>;
|
|
14
|
+
}
|
|
15
|
+
export interface IWatermarkService extends IDisposable {
|
|
16
|
+
/** Mount or unmount the watermark based on current grid state. */
|
|
17
|
+
update(): void;
|
|
18
|
+
/** Tear down the current watermark and re-evaluate. Used when the watermark factory option changes. */
|
|
19
|
+
refresh(): void;
|
|
20
|
+
}
|
|
21
|
+
export declare class WatermarkService implements IWatermarkService {
|
|
22
|
+
private readonly _host;
|
|
23
|
+
private _watermark;
|
|
24
|
+
constructor(host: IWatermarkHost);
|
|
25
|
+
update(): void;
|
|
26
|
+
refresh(): void;
|
|
27
|
+
private _unmount;
|
|
28
|
+
dispose(): void;
|
|
29
|
+
}
|
|
30
|
+
export declare const WatermarkModule: import("./modules").DockviewModule<IWatermarkHost>;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { CompositeDisposable } from '../lifecycle';
|
|
2
|
+
import { addTestId } from '../dom';
|
|
3
|
+
import { Event } from '../events';
|
|
4
|
+
import { defineModule } from './modules';
|
|
5
|
+
export class WatermarkService {
|
|
6
|
+
constructor(host) {
|
|
7
|
+
this._watermark = null;
|
|
8
|
+
this._host = host;
|
|
9
|
+
}
|
|
10
|
+
update() {
|
|
11
|
+
if (this._host.hasVisibleGridGroup()) {
|
|
12
|
+
this._unmount();
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
if (this._watermark) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
this._watermark = this._host.createWatermarkComponent();
|
|
19
|
+
this._watermark.init({ containerApi: this._host.api });
|
|
20
|
+
const container = document.createElement('div');
|
|
21
|
+
container.className = 'dv-watermark-container';
|
|
22
|
+
addTestId(container, 'watermark-component');
|
|
23
|
+
container.appendChild(this._watermark.element);
|
|
24
|
+
this._host.mountElement.appendChild(container);
|
|
25
|
+
}
|
|
26
|
+
refresh() {
|
|
27
|
+
this._unmount();
|
|
28
|
+
this.update();
|
|
29
|
+
}
|
|
30
|
+
_unmount() {
|
|
31
|
+
var _a, _b;
|
|
32
|
+
if (!this._watermark) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
this._watermark.element.parentElement.remove();
|
|
36
|
+
(_b = (_a = this._watermark).dispose) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
37
|
+
this._watermark = null;
|
|
38
|
+
}
|
|
39
|
+
dispose() {
|
|
40
|
+
this._unmount();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export const WatermarkModule = defineModule({
|
|
44
|
+
name: 'Watermark',
|
|
45
|
+
serviceKey: 'watermarkService',
|
|
46
|
+
create: (host) => new WatermarkService(host),
|
|
47
|
+
init: (host, service) => {
|
|
48
|
+
// Initial evaluation reflects the watermark state at construction time.
|
|
49
|
+
service.update();
|
|
50
|
+
return new CompositeDisposable(Event.any(host.onDidAdd, host.onDidRemove)(() => {
|
|
51
|
+
service.update();
|
|
52
|
+
}), host.onDidViewVisibilityChangeMicroTaskQueue(() => {
|
|
53
|
+
service.update();
|
|
54
|
+
}));
|
|
55
|
+
},
|
|
56
|
+
});
|
|
@@ -95,7 +95,7 @@ export declare abstract class BaseGrid<T extends IGridPanelView> extends Resizab
|
|
|
95
95
|
isMaximizedGroup(panel: T): boolean;
|
|
96
96
|
exitMaximizedGroup(): void;
|
|
97
97
|
hasMaximizedGroup(): boolean;
|
|
98
|
-
protected doAddGroup(group: T, location?: number[], size?: number): void;
|
|
98
|
+
protected doAddGroup(group: T, location?: number[], size?: number, gridview?: Gridview): void;
|
|
99
99
|
protected doRemoveGroup(group: T, options?: {
|
|
100
100
|
skipActive?: boolean;
|
|
101
101
|
skipDispose?: boolean;
|
|
@@ -145,8 +145,8 @@ export class BaseGrid extends Resizable {
|
|
|
145
145
|
hasMaximizedGroup() {
|
|
146
146
|
return this.gridview.hasMaximizedView();
|
|
147
147
|
}
|
|
148
|
-
doAddGroup(group, location = [0], size) {
|
|
149
|
-
|
|
148
|
+
doAddGroup(group, location = [0], size, gridview = this.gridview) {
|
|
149
|
+
gridview.addView(group, size !== null && size !== void 0 ? size : Sizing.Distribute, location);
|
|
150
150
|
this._onDidAdd.fire(group);
|
|
151
151
|
}
|
|
152
152
|
doRemoveGroup(group, options) {
|
|
@@ -11,7 +11,7 @@ export interface SerializedGridviewComponent {
|
|
|
11
11
|
grid: SerializedGridview<GridPanelViewState>;
|
|
12
12
|
activePanel?: string;
|
|
13
13
|
}
|
|
14
|
-
export interface
|
|
14
|
+
export interface AddGridviewComponentOptions<T extends object = Parameters> extends BaseComponentOptions<T> {
|
|
15
15
|
minimumWidth?: number;
|
|
16
16
|
maximumWidth?: number;
|
|
17
17
|
minimumHeight?: number;
|
|
@@ -29,7 +29,7 @@ export interface IGridviewComponent extends IBaseGrid<GridviewPanel> {
|
|
|
29
29
|
readonly orientation: Orientation;
|
|
30
30
|
readonly onDidLayoutFromJSON: Event<void>;
|
|
31
31
|
updateOptions(options: Partial<GridviewComponentOptions>): void;
|
|
32
|
-
addPanel<T extends object = Parameters>(options:
|
|
32
|
+
addPanel<T extends object = Parameters>(options: AddGridviewComponentOptions<T>): IGridviewPanel;
|
|
33
33
|
removePanel(panel: IGridviewPanel, sizing?: Sizing): void;
|
|
34
34
|
focus(): void;
|
|
35
35
|
fromJSON(serializedGridview: SerializedGridviewComponent): void;
|
|
@@ -80,7 +80,7 @@ export declare class GridviewComponent extends BaseGrid<GridviewPanel> implement
|
|
|
80
80
|
reference: string;
|
|
81
81
|
size?: number;
|
|
82
82
|
}): void;
|
|
83
|
-
addPanel<T extends object = Parameters>(options:
|
|
83
|
+
addPanel<T extends object = Parameters>(options: AddGridviewComponentOptions<T>): IGridviewPanel;
|
|
84
84
|
private registerPanel;
|
|
85
85
|
moveGroup(referenceGroup: IGridPanelComponentView, groupId: string, target: Position): void;
|
|
86
86
|
removeGroup(group: GridviewPanel): void;
|
|
@@ -6,7 +6,7 @@ import { LayoutPriority } from '../splitview/splitview';
|
|
|
6
6
|
import { Event } from '../events';
|
|
7
7
|
import { IViewSize } from './gridview';
|
|
8
8
|
import { BaseGrid, IGridPanelView } from './baseComponentGridview';
|
|
9
|
-
export interface
|
|
9
|
+
export interface Constraints {
|
|
10
10
|
minimumWidth?: number;
|
|
11
11
|
maximumWidth?: number;
|
|
12
12
|
minimumHeight?: number;
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -13,11 +13,11 @@ export * from './paneview/paneview';
|
|
|
13
13
|
export * from './gridview/gridview';
|
|
14
14
|
export { GridviewComponentOptions, GridviewOptions, GridviewFrameworkOptions, PROPERTY_KEYS_GRIDVIEW, } from './gridview/options';
|
|
15
15
|
export * from './gridview/baseComponentGridview';
|
|
16
|
-
export { DraggablePaneviewPanel, PaneviewDidDropEvent
|
|
16
|
+
export { DraggablePaneviewPanel, PaneviewDidDropEvent, } from './paneview/draggablePaneviewPanel';
|
|
17
17
|
export * from './dockview/components/panel/content';
|
|
18
18
|
export * from './dockview/components/tab/tab';
|
|
19
|
-
export { DockviewGroupPanelModel, DockviewDidDropEvent, DockviewWillDropEvent, DockviewGroupChangeEvent, DockviewGroupLocation, } from './dockview/dockviewGroupPanelModel';
|
|
20
|
-
export { DockviewWillShowOverlayLocationEvent, DockviewTabGroupChangeEvent, DockviewTabGroupCollapsedChangeEvent, DockviewTabGroupPanelChangeEvent, } from './dockview/events';
|
|
19
|
+
export { DockviewGroupPanelModel, DockviewDidDropEvent, DockviewWillDropEvent, DockviewGroupChangeEvent, DockviewGroupActivePanelChangeEvent, DockviewGroupLocation, } from './dockview/dockviewGroupPanelModel';
|
|
20
|
+
export { DockviewWillShowOverlayLocationEvent, DockviewTabGroupChangeEvent, DockviewTabGroupCollapsedChangeEvent, DockviewTabGroupPanelChangeEvent, DockviewGroupDropLocation, } from './dockview/events';
|
|
21
21
|
export { TabDragEvent, GroupDragEvent, } from './dockview/components/titlebar/tabsContainer';
|
|
22
22
|
export * from './dockview/types';
|
|
23
23
|
export * from './dockview/dockviewGroupPanel';
|
|
@@ -39,6 +39,7 @@ export * from './gridview/gridviewPanel';
|
|
|
39
39
|
export { SplitviewPanel, ISplitviewPanel } from './splitview/splitviewPanel';
|
|
40
40
|
export * from './paneview/paneviewPanel';
|
|
41
41
|
export * from './dockview/types';
|
|
42
|
+
export { Box, AnchorPosition, AnchoredBox } from './types';
|
|
42
43
|
export { DockviewPanelRenderer } from './overlay/overlayRenderContainer';
|
|
43
44
|
export { Position, positionToDirection, directionToPosition, MeasuredValue, DroptargetOverlayModel, } from './dnd/droptarget';
|
|
44
45
|
export { FocusEvent, PanelDimensionChangeEvent, VisibilityEvent, ActiveEvent, PanelApi, } from './api/panelApi';
|
|
@@ -46,6 +47,12 @@ export { SizeEvent, GridviewPanelApi, GridConstraintChangeEvent, } from './api/g
|
|
|
46
47
|
export { TitleEvent, RendererChangedEvent, DockviewPanelApi, DockviewPanelMoveParams, } from './api/dockviewPanelApi';
|
|
47
48
|
export { PanelSizeEvent, PanelConstraintChangeEvent, SplitviewPanelApi, } from './api/splitviewPanelApi';
|
|
48
49
|
export { ExpansionEvent, PaneviewPanelApi } from './api/paneviewPanelApi';
|
|
49
|
-
export { DockviewGroupPanelApi,
|
|
50
|
+
export { DockviewGroupPanelApi, DockviewGroupPanelLocationChangeEvent, DockviewGroupPanelCollapsedChangeEvent, DockviewGroupMoveParams, } from './api/dockviewGroupPanelApi';
|
|
50
51
|
export { CommonApi, SplitviewApi, PaneviewApi, GridviewApi, DockviewApi, DockviewGetTabGroupsOptions, } from './api/component.api';
|
|
51
52
|
export { createDockview, createGridview, createPaneview, createSplitview, } from './api/entryPoints';
|
|
53
|
+
export { registerModules, getRegisteredModules, clearRegisteredModules, markDockviewPackageLoaded, isDockviewPackageLoaded, defineModule, DockviewModule, ServiceCollection, } from './dockview/modules';
|
|
54
|
+
export { IAccessibilityHost, IAccessibilityService, IAdvancedDnDHost, IAdvancedDnDService, IContextMenuHost, IContextMenuService, IKeyboardDockingService, ITabGroupChipsHost, ITabGroupChipsService, } from './dockview/moduleContracts';
|
|
55
|
+
export { resolveMessages } from './dockview/accessibilityMessages';
|
|
56
|
+
export { findRelativeZIndexParent } from './dom';
|
|
57
|
+
export { IDragGhostSpec } from './dnd/backend';
|
|
58
|
+
export { LiveRegionModule } from './dockview/liveRegionService';
|
package/dist/esm/index.js
CHANGED
|
@@ -38,3 +38,7 @@ export * from './dockview/types';
|
|
|
38
38
|
export { positionToDirection, directionToPosition, } from './dnd/droptarget';
|
|
39
39
|
export { SplitviewApi, PaneviewApi, GridviewApi, DockviewApi, } from './api/component.api';
|
|
40
40
|
export { createDockview, createGridview, createPaneview, createSplitview, } from './api/entryPoints';
|
|
41
|
+
export { registerModules, getRegisteredModules, clearRegisteredModules, markDockviewPackageLoaded, isDockviewPackageLoaded, defineModule, } from './dockview/modules';
|
|
42
|
+
export { resolveMessages } from './dockview/accessibilityMessages';
|
|
43
|
+
export { findRelativeZIndexParent } from './dom';
|
|
44
|
+
export { LiveRegionModule } from './dockview/liveRegionService';
|
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
import { Event } from '../events';
|
|
2
2
|
import { CompositeDisposable } from '../lifecycle';
|
|
3
|
-
import { AnchoredBox } from '../types';
|
|
3
|
+
import { AnchoredBox, Box } from '../types';
|
|
4
|
+
/**
|
|
5
|
+
* Context handed to {@link OverlayOptions.transformDragPosition} each
|
|
6
|
+
* pointer-move frame while a floating overlay is being dragged.
|
|
7
|
+
*/
|
|
8
|
+
export interface OverlayDragContext {
|
|
9
|
+
/** Proposed top-left + size this frame, in container pixels (pre-clamp). */
|
|
10
|
+
readonly proposed: Box;
|
|
11
|
+
/** Size of the container the overlay is dragged within. */
|
|
12
|
+
readonly container: {
|
|
13
|
+
width: number;
|
|
14
|
+
height: number;
|
|
15
|
+
};
|
|
16
|
+
/** Bounds of the sibling overlays, snapshotted at drag start. */
|
|
17
|
+
readonly others: readonly Box[];
|
|
18
|
+
}
|
|
4
19
|
export declare class Overlay extends CompositeDisposable {
|
|
5
20
|
private readonly options;
|
|
6
21
|
private readonly _element;
|
|
@@ -22,11 +37,38 @@ export declare class Overlay extends CompositeDisposable {
|
|
|
22
37
|
set minimumInViewportHeight(value: number | undefined);
|
|
23
38
|
get element(): HTMLElement;
|
|
24
39
|
get isVisible(): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Height of the optional drag-handle header, or 0 when none is present.
|
|
42
|
+
* Used to translate between the overlay's outer box and the content area
|
|
43
|
+
* available to the group beneath the header.
|
|
44
|
+
*/
|
|
45
|
+
get headerHeight(): number;
|
|
25
46
|
constructor(options: AnchoredBox & {
|
|
26
47
|
container: HTMLElement;
|
|
27
48
|
content: HTMLElement;
|
|
49
|
+
/**
|
|
50
|
+
* Optional dedicated drag handle rendered above the content (a
|
|
51
|
+
* floating window title bar). When provided the resize container
|
|
52
|
+
* lays its children out as a flex column so the content shrinks
|
|
53
|
+
* to fit beneath the handle.
|
|
54
|
+
*/
|
|
55
|
+
header?: HTMLElement;
|
|
28
56
|
minimumInViewportWidth?: number;
|
|
29
57
|
minimumInViewportHeight?: number;
|
|
58
|
+
/**
|
|
59
|
+
* Adjust the proposed top-left each drag frame (before the
|
|
60
|
+
* container clamp). Return an adjusted position or nothing to leave
|
|
61
|
+
* it unchanged. Used to implement snapping / custom bounds.
|
|
62
|
+
*/
|
|
63
|
+
transformDragPosition?: (context: OverlayDragContext) => {
|
|
64
|
+
top: number;
|
|
65
|
+
left: number;
|
|
66
|
+
} | void;
|
|
67
|
+
/**
|
|
68
|
+
* Snapshot the sibling overlays' boxes at drag start, supplied to
|
|
69
|
+
* `transformDragPosition` as `context.others`.
|
|
70
|
+
*/
|
|
71
|
+
getSiblingBoxes?: () => readonly Box[];
|
|
30
72
|
});
|
|
31
73
|
setVisible(isVisible: boolean): void;
|
|
32
74
|
bringToFront(): void;
|