dockview-core 1.15.3 → 1.16.1
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 +32 -6
- package/dist/cjs/api/component.api.js +42 -6
- package/dist/cjs/api/dockviewPanelApi.d.ts +1 -1
- package/dist/cjs/api/entryPoints.d.ts +9 -0
- package/dist/cjs/api/entryPoints.js +28 -0
- package/dist/cjs/dnd/abstractDragHandler.js +2 -65
- package/dist/cjs/dockview/components/titlebar/voidContainer.js +1 -1
- package/dist/cjs/dockview/dockviewComponent.d.ts +4 -2
- package/dist/cjs/dockview/dockviewComponent.js +60 -17
- package/dist/cjs/dockview/dockviewFloatingGroupPanel.d.ts +1 -1
- package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +1 -1
- package/dist/cjs/dockview/dockviewGroupPanelModel.js +1 -1
- package/dist/cjs/dockview/dockviewPanel.d.ts +1 -1
- package/dist/cjs/dockview/dockviewPanel.js +1 -1
- package/dist/cjs/dockview/options.d.ts +2 -2
- package/dist/cjs/dockview/options.js +1 -0
- package/dist/cjs/dockview/types.d.ts +1 -1
- package/dist/cjs/dom.d.ts +3 -0
- package/dist/cjs/dom.js +66 -1
- package/dist/cjs/gridview/baseComponentGridview.d.ts +5 -2
- package/dist/cjs/gridview/baseComponentGridview.js +54 -3
- package/dist/cjs/gridview/gridviewComponent.d.ts +3 -4
- package/dist/cjs/gridview/gridviewComponent.js +4 -2
- package/dist/cjs/gridview/options.d.ts +1 -1
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.js +6 -1
- package/dist/cjs/{dnd → overlay}/overlay.d.ts +3 -0
- package/dist/cjs/{dnd → overlay}/overlay.js +41 -82
- package/dist/cjs/{overlayRenderContainer.d.ts → overlay/overlayRenderContainer.d.ts} +7 -5
- package/dist/cjs/{overlayRenderContainer.js → overlay/overlayRenderContainer.js} +41 -6
- package/dist/cjs/paneview/options.d.ts +1 -1
- package/dist/cjs/paneview/paneviewComponent.d.ts +2 -1
- package/dist/cjs/paneview/paneviewComponent.js +68 -19
- package/dist/cjs/splitview/options.d.ts +1 -1
- package/dist/cjs/splitview/splitview.js +64 -71
- package/dist/cjs/splitview/splitviewComponent.d.ts +5 -5
- package/dist/cjs/splitview/splitviewComponent.js +70 -21
- package/dist/dockview-core.amd.js +301 -98
- 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 +300 -97
- package/dist/dockview-core.amd.noStyle.js.map +1 -1
- package/dist/dockview-core.cjs.js +301 -98
- package/dist/dockview-core.cjs.js.map +1 -1
- package/dist/dockview-core.esm.js +298 -99
- 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 +301 -98
- 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 +300 -97
- package/dist/dockview-core.noStyle.js.map +1 -1
- package/dist/esm/api/component.api.d.ts +32 -6
- package/dist/esm/api/component.api.js +42 -6
- package/dist/esm/api/dockviewPanelApi.d.ts +1 -1
- package/dist/esm/api/entryPoints.d.ts +9 -0
- package/dist/esm/api/entryPoints.js +21 -0
- package/dist/esm/dnd/abstractDragHandler.js +3 -11
- package/dist/esm/dockview/components/panel/content.js +1 -1
- package/dist/esm/dockview/components/titlebar/voidContainer.js +1 -1
- package/dist/esm/dockview/dockviewComponent.d.ts +4 -2
- package/dist/esm/dockview/dockviewComponent.js +48 -13
- package/dist/esm/dockview/dockviewFloatingGroupPanel.d.ts +1 -1
- package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +1 -1
- package/dist/esm/dockview/dockviewGroupPanelModel.js +1 -1
- package/dist/esm/dockview/dockviewPanel.d.ts +1 -1
- package/dist/esm/dockview/dockviewPanel.js +1 -1
- package/dist/esm/dockview/options.d.ts +2 -2
- package/dist/esm/dockview/options.js +1 -0
- package/dist/esm/dockview/types.d.ts +1 -1
- package/dist/esm/dom.d.ts +3 -0
- package/dist/esm/dom.js +20 -0
- package/dist/esm/gridview/baseComponentGridview.d.ts +5 -2
- package/dist/esm/gridview/baseComponentGridview.js +19 -0
- package/dist/esm/gridview/gridviewComponent.d.ts +3 -4
- package/dist/esm/gridview/gridviewComponent.js +4 -2
- package/dist/esm/gridview/options.d.ts +1 -1
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/{dnd → overlay}/overlay.d.ts +3 -0
- package/dist/esm/{dnd → overlay}/overlay.js +36 -32
- package/dist/esm/{overlayRenderContainer.d.ts → overlay/overlayRenderContainer.d.ts} +7 -5
- package/dist/esm/{overlayRenderContainer.js → overlay/overlayRenderContainer.js} +39 -6
- package/dist/esm/paneview/options.d.ts +1 -1
- package/dist/esm/paneview/paneviewComponent.d.ts +2 -1
- package/dist/esm/paneview/paneviewComponent.js +19 -2
- package/dist/esm/splitview/options.d.ts +1 -1
- package/dist/esm/splitview/splitview.js +37 -27
- package/dist/esm/splitview/splitviewComponent.d.ts +5 -5
- package/dist/esm/splitview/splitviewComponent.js +19 -2
- package/dist/styles/dockview.css +78 -82
- package/package.json +1 -1
|
@@ -25,11 +25,10 @@ export interface AddComponentOptions<T extends object = Parameters> extends Base
|
|
|
25
25
|
export interface IGridPanelComponentView extends IGridPanelView {
|
|
26
26
|
init: (params: GridviewInitParameters) => void;
|
|
27
27
|
}
|
|
28
|
-
export type GridviewComponentUpdateOptions = Pick<GridviewComponentOptions, 'orientation' | 'components' | 'frameworkComponents'>;
|
|
29
28
|
export interface IGridviewComponent extends IBaseGrid<GridviewPanel> {
|
|
30
29
|
readonly orientation: Orientation;
|
|
31
30
|
readonly onDidLayoutFromJSON: Event<void>;
|
|
32
|
-
updateOptions(options: Partial<
|
|
31
|
+
updateOptions(options: Partial<GridviewComponentOptions>): void;
|
|
33
32
|
addPanel<T extends object = Parameters>(options: AddComponentOptions<T>): IGridviewPanel;
|
|
34
33
|
removePanel(panel: IGridviewPanel, sizing?: Sizing): void;
|
|
35
34
|
focus(): void;
|
|
@@ -62,8 +61,8 @@ export declare class GridviewComponent extends BaseGrid<GridviewPanel> implement
|
|
|
62
61
|
get options(): GridviewComponentOptions;
|
|
63
62
|
get deserializer(): IPanelDeserializer | undefined;
|
|
64
63
|
set deserializer(value: IPanelDeserializer | undefined);
|
|
65
|
-
constructor(options: GridviewComponentOptions);
|
|
66
|
-
updateOptions(options: Partial<
|
|
64
|
+
constructor(parentElement: HTMLElement, options: GridviewComponentOptions);
|
|
65
|
+
updateOptions(options: Partial<GridviewComponentOptions>): void;
|
|
67
66
|
removePanel(panel: GridviewPanel): void;
|
|
68
67
|
/**
|
|
69
68
|
* Serialize the current state of the layout
|
|
@@ -20,13 +20,14 @@ export class GridviewComponent extends BaseGrid {
|
|
|
20
20
|
set deserializer(value) {
|
|
21
21
|
this._deserializer = value;
|
|
22
22
|
}
|
|
23
|
-
constructor(options) {
|
|
23
|
+
constructor(parentElement, options) {
|
|
24
24
|
super({
|
|
25
|
-
parentElement:
|
|
25
|
+
parentElement: parentElement,
|
|
26
26
|
proportionalLayout: options.proportionalLayout,
|
|
27
27
|
orientation: options.orientation,
|
|
28
28
|
styles: options.styles,
|
|
29
29
|
disableAutoResizing: options.disableAutoResizing,
|
|
30
|
+
className: options.className,
|
|
30
31
|
});
|
|
31
32
|
this._onDidLayoutfromJSON = new Emitter();
|
|
32
33
|
this.onDidLayoutFromJSON = this._onDidLayoutfromJSON.event;
|
|
@@ -52,6 +53,7 @@ export class GridviewComponent extends BaseGrid {
|
|
|
52
53
|
}
|
|
53
54
|
}
|
|
54
55
|
updateOptions(options) {
|
|
56
|
+
super.updateOptions(options);
|
|
55
57
|
const hasOrientationChanged = typeof options.orientation === 'string' &&
|
|
56
58
|
this.gridview.orientation !== options.orientation;
|
|
57
59
|
this._options = Object.assign(Object.assign({}, this.options), options);
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -35,7 +35,7 @@ export * from './gridview/gridviewPanel';
|
|
|
35
35
|
export * from './splitview/splitviewPanel';
|
|
36
36
|
export * from './paneview/paneviewPanel';
|
|
37
37
|
export * from './dockview/types';
|
|
38
|
-
export { DockviewPanelRenderer } from './overlayRenderContainer';
|
|
38
|
+
export { DockviewPanelRenderer } from './overlay/overlayRenderContainer';
|
|
39
39
|
export { Position, positionToDirection, directionToPosition, MeasuredValue, DroptargetOverlayModel, } from './dnd/droptarget';
|
|
40
40
|
export { FocusEvent, PanelDimensionChangeEvent, VisibilityEvent, ActiveEvent, PanelApi, } from './api/panelApi';
|
|
41
41
|
export { SizeEvent, GridviewPanelApi, GridConstraintChangeEvent, } from './api/gridviewPanelApi';
|
|
@@ -44,3 +44,4 @@ export { PanelSizeEvent, PanelConstraintChangeEvent, SplitviewPanelApi, } from '
|
|
|
44
44
|
export { ExpansionEvent, PaneviewPanelApi } from './api/paneviewPanelApi';
|
|
45
45
|
export { DockviewGroupPanelApi, DockviewGroupPanelFloatingChangeEvent, } from './api/dockviewGroupPanelApi';
|
|
46
46
|
export { CommonApi, SplitviewApi, PaneviewApi, GridviewApi, DockviewApi, } from './api/component.api';
|
|
47
|
+
export { createDockview, createGridview, createPaneview, createSplitview, } from './api/entryPoints';
|
package/dist/esm/index.js
CHANGED
|
@@ -32,3 +32,4 @@ export * from './paneview/paneviewPanel';
|
|
|
32
32
|
export * from './dockview/types';
|
|
33
33
|
export { positionToDirection, directionToPosition, } from './dnd/droptarget';
|
|
34
34
|
export { SplitviewApi, PaneviewApi, GridviewApi, DockviewApi, } from './api/component.api';
|
|
35
|
+
export { createDockview, createGridview, createPaneview, createSplitview, } from './api/entryPoints';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Event } from '../events';
|
|
2
2
|
import { CompositeDisposable } from '../lifecycle';
|
|
3
3
|
import { AnchoredBox } from '../types';
|
|
4
|
+
export declare const DEFAULT_OVERLAY_Z_INDEX = 999;
|
|
4
5
|
export declare class Overlay extends CompositeDisposable {
|
|
5
6
|
private readonly options;
|
|
6
7
|
private _element;
|
|
@@ -14,12 +15,14 @@ export declare class Overlay extends CompositeDisposable {
|
|
|
14
15
|
private horiziontalAlignment;
|
|
15
16
|
set minimumInViewportWidth(value: number | undefined);
|
|
16
17
|
set minimumInViewportHeight(value: number | undefined);
|
|
18
|
+
get element(): HTMLElement;
|
|
17
19
|
constructor(options: AnchoredBox & {
|
|
18
20
|
container: HTMLElement;
|
|
19
21
|
content: HTMLElement;
|
|
20
22
|
minimumInViewportWidth?: number;
|
|
21
23
|
minimumInViewportHeight?: number;
|
|
22
24
|
});
|
|
25
|
+
bringToFront(): void;
|
|
23
26
|
setBounds(bounds?: Partial<AnchoredBox>): void;
|
|
24
27
|
toJSON(): AnchoredBox;
|
|
25
28
|
setupDrag(dragTarget: HTMLElement, options?: {
|
|
@@ -1,18 +1,31 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { disableIframePointEvents, quasiDefaultPrevented, toggleClass, } from '../dom';
|
|
2
2
|
import { Emitter, addDisposableListener, addDisposableWindowListener, } from '../events';
|
|
3
3
|
import { CompositeDisposable, MutableDisposable } from '../lifecycle';
|
|
4
4
|
import { clamp } from '../math';
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
export const DEFAULT_OVERLAY_Z_INDEX = 999;
|
|
6
|
+
class AriaLevelTracker {
|
|
7
|
+
constructor() {
|
|
8
|
+
this._orderedList = [];
|
|
9
|
+
}
|
|
10
|
+
push(element) {
|
|
11
|
+
this._orderedList = [
|
|
12
|
+
...this._orderedList.filter((item) => item !== element),
|
|
13
|
+
element,
|
|
14
|
+
];
|
|
15
|
+
this.update();
|
|
16
|
+
}
|
|
17
|
+
destroy(element) {
|
|
18
|
+
this._orderedList = this._orderedList.filter((item) => item !== element);
|
|
19
|
+
this.update();
|
|
20
|
+
}
|
|
21
|
+
update() {
|
|
22
|
+
for (let i = 0; i < this._orderedList.length; i++) {
|
|
23
|
+
this._orderedList[i].setAttribute('aria-level', `${i}`);
|
|
24
|
+
this._orderedList[i].style.zIndex = `${DEFAULT_OVERLAY_Z_INDEX + i * 2}`;
|
|
10
25
|
}
|
|
11
|
-
toggleClass(element, 'dv-bring-to-front', true);
|
|
12
|
-
previous = element;
|
|
13
26
|
}
|
|
14
|
-
|
|
15
|
-
|
|
27
|
+
}
|
|
28
|
+
const arialLevelTracker = new AriaLevelTracker();
|
|
16
29
|
export class Overlay extends CompositeDisposable {
|
|
17
30
|
set minimumInViewportWidth(value) {
|
|
18
31
|
this.options.minimumInViewportWidth = value;
|
|
@@ -20,6 +33,9 @@ export class Overlay extends CompositeDisposable {
|
|
|
20
33
|
set minimumInViewportHeight(value) {
|
|
21
34
|
this.options.minimumInViewportHeight = value;
|
|
22
35
|
}
|
|
36
|
+
get element() {
|
|
37
|
+
return this._element;
|
|
38
|
+
}
|
|
23
39
|
constructor(options) {
|
|
24
40
|
super();
|
|
25
41
|
this.options = options;
|
|
@@ -42,6 +58,10 @@ export class Overlay extends CompositeDisposable {
|
|
|
42
58
|
this.options.container.appendChild(this._element);
|
|
43
59
|
// if input bad resize within acceptable boundaries
|
|
44
60
|
this.setBounds(Object.assign(Object.assign(Object.assign(Object.assign({ height: this.options.height, width: this.options.width }, ('top' in this.options && { top: this.options.top })), ('bottom' in this.options && { bottom: this.options.bottom })), ('left' in this.options && { left: this.options.left })), ('right' in this.options && { right: this.options.right })));
|
|
61
|
+
arialLevelTracker.push(this._element);
|
|
62
|
+
}
|
|
63
|
+
bringToFront() {
|
|
64
|
+
arialLevelTracker.push(this._element);
|
|
45
65
|
}
|
|
46
66
|
setBounds(bounds = {}) {
|
|
47
67
|
if (typeof bounds.height === 'number') {
|
|
@@ -129,18 +149,10 @@ export class Overlay extends CompositeDisposable {
|
|
|
129
149
|
const move = new MutableDisposable();
|
|
130
150
|
const track = () => {
|
|
131
151
|
let offset = null;
|
|
132
|
-
const iframes =
|
|
133
|
-
...getElementsByTagName('iframe'),
|
|
134
|
-
...getElementsByTagName('webview'),
|
|
135
|
-
];
|
|
136
|
-
for (const iframe of iframes) {
|
|
137
|
-
iframe.style.pointerEvents = 'none';
|
|
138
|
-
}
|
|
152
|
+
const iframes = disableIframePointEvents();
|
|
139
153
|
move.value = new CompositeDisposable({
|
|
140
154
|
dispose: () => {
|
|
141
|
-
|
|
142
|
-
iframe.style.pointerEvents = 'auto';
|
|
143
|
-
}
|
|
155
|
+
iframes.release();
|
|
144
156
|
},
|
|
145
157
|
}, addDisposableWindowListener(window, 'mousemove', (e) => {
|
|
146
158
|
const containerRect = this.options.container.getBoundingClientRect();
|
|
@@ -209,9 +221,8 @@ export class Overlay extends CompositeDisposable {
|
|
|
209
221
|
track();
|
|
210
222
|
}
|
|
211
223
|
}), addDisposableListener(this.options.content, 'mousedown', () => {
|
|
212
|
-
|
|
224
|
+
arialLevelTracker.push(this._element);
|
|
213
225
|
}, true));
|
|
214
|
-
bringElementToFront(this._element);
|
|
215
226
|
if (options.inDragMode) {
|
|
216
227
|
track();
|
|
217
228
|
}
|
|
@@ -224,13 +235,7 @@ export class Overlay extends CompositeDisposable {
|
|
|
224
235
|
this.addDisposables(move, addDisposableListener(resizeHandleElement, 'mousedown', (e) => {
|
|
225
236
|
e.preventDefault();
|
|
226
237
|
let startPosition = null;
|
|
227
|
-
const iframes =
|
|
228
|
-
...getElementsByTagName('iframe'),
|
|
229
|
-
...getElementsByTagName('webview'),
|
|
230
|
-
];
|
|
231
|
-
for (const iframe of iframes) {
|
|
232
|
-
iframe.style.pointerEvents = 'none';
|
|
233
|
-
}
|
|
238
|
+
const iframes = disableIframePointEvents();
|
|
234
239
|
move.value = new CompositeDisposable(addDisposableWindowListener(window, 'mousemove', (e) => {
|
|
235
240
|
const containerRect = this.options.container.getBoundingClientRect();
|
|
236
241
|
const overlayRect = this._element.getBoundingClientRect();
|
|
@@ -353,9 +358,7 @@ export class Overlay extends CompositeDisposable {
|
|
|
353
358
|
this.setBounds(bounds);
|
|
354
359
|
}), {
|
|
355
360
|
dispose: () => {
|
|
356
|
-
|
|
357
|
-
iframe.style.pointerEvents = 'auto';
|
|
358
|
-
}
|
|
361
|
+
iframes.release();
|
|
359
362
|
},
|
|
360
363
|
}, addDisposableWindowListener(window, 'mouseup', () => {
|
|
361
364
|
move.dispose();
|
|
@@ -376,6 +379,7 @@ export class Overlay extends CompositeDisposable {
|
|
|
376
379
|
return 0;
|
|
377
380
|
}
|
|
378
381
|
dispose() {
|
|
382
|
+
arialLevelTracker.destroy(this._element);
|
|
379
383
|
this._element.remove();
|
|
380
384
|
super.dispose();
|
|
381
385
|
}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
import { Droptarget } from '
|
|
2
|
-
import { CompositeDisposable } from '
|
|
3
|
-
import { IDockviewPanel } from '
|
|
1
|
+
import { Droptarget } from '../dnd/droptarget';
|
|
2
|
+
import { CompositeDisposable } from '../lifecycle';
|
|
3
|
+
import { IDockviewPanel } from '../dockview/dockviewPanel';
|
|
4
|
+
import { DockviewComponent } from '../dockview/dockviewComponent';
|
|
4
5
|
export type DockviewPanelRenderer = 'onlyWhenVisible' | 'always';
|
|
5
6
|
export interface IRenderable {
|
|
6
7
|
readonly element: HTMLElement;
|
|
7
8
|
readonly dropTarget: Droptarget;
|
|
8
9
|
}
|
|
9
10
|
export declare class OverlayRenderContainer extends CompositeDisposable {
|
|
10
|
-
|
|
11
|
+
readonly element: HTMLElement;
|
|
12
|
+
readonly accessor: DockviewComponent;
|
|
11
13
|
private readonly map;
|
|
12
14
|
private _disposed;
|
|
13
|
-
constructor(element: HTMLElement);
|
|
15
|
+
constructor(element: HTMLElement, accessor: DockviewComponent);
|
|
14
16
|
detatch(panel: IDockviewPanel): boolean;
|
|
15
17
|
attach(options: {
|
|
16
18
|
panel: IDockviewPanel;
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import { DragAndDropObserver } from '
|
|
2
|
-
import { getDomNodePagePosition, toggleClass } from '
|
|
3
|
-
import { CompositeDisposable, Disposable } from '
|
|
1
|
+
import { DragAndDropObserver } from '../dnd/dnd';
|
|
2
|
+
import { getDomNodePagePosition, toggleClass } from '../dom';
|
|
3
|
+
import { CompositeDisposable, Disposable, MutableDisposable, } from '../lifecycle';
|
|
4
|
+
import { DEFAULT_OVERLAY_Z_INDEX } from './overlay';
|
|
4
5
|
function createFocusableElement() {
|
|
5
6
|
const element = document.createElement('div');
|
|
6
7
|
element.tabIndex = -1;
|
|
7
8
|
return element;
|
|
8
9
|
}
|
|
9
10
|
export class OverlayRenderContainer extends CompositeDisposable {
|
|
10
|
-
constructor(element) {
|
|
11
|
+
constructor(element, accessor) {
|
|
11
12
|
super();
|
|
12
13
|
this.element = element;
|
|
14
|
+
this.accessor = accessor;
|
|
13
15
|
this.map = {};
|
|
14
16
|
this._disposed = false;
|
|
15
17
|
this.addDisposables(Disposable.from(() => {
|
|
@@ -65,7 +67,35 @@ export class OverlayRenderContainer extends CompositeDisposable {
|
|
|
65
67
|
}
|
|
66
68
|
focusContainer.style.display = panel.api.isVisible ? '' : 'none';
|
|
67
69
|
};
|
|
68
|
-
const
|
|
70
|
+
const observerDisposable = new MutableDisposable();
|
|
71
|
+
const correctLayerPosition = () => {
|
|
72
|
+
if (panel.api.location.type === 'floating') {
|
|
73
|
+
queueMicrotask(() => {
|
|
74
|
+
const floatingGroup = this.accessor.floatingGroups.find((group) => group.group === panel.api.group);
|
|
75
|
+
if (!floatingGroup) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const element = floatingGroup.overlay.element;
|
|
79
|
+
const update = () => {
|
|
80
|
+
const level = Number(element.getAttribute('aria-level'));
|
|
81
|
+
focusContainer.style.zIndex = `${DEFAULT_OVERLAY_Z_INDEX + level * 2 + 1}`;
|
|
82
|
+
};
|
|
83
|
+
const observer = new MutationObserver(() => {
|
|
84
|
+
update();
|
|
85
|
+
});
|
|
86
|
+
observerDisposable.value = Disposable.from(() => observer.disconnect());
|
|
87
|
+
observer.observe(element, {
|
|
88
|
+
attributeFilter: ['aria-level'],
|
|
89
|
+
attributes: true,
|
|
90
|
+
});
|
|
91
|
+
update();
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
focusContainer.style.zIndex = ''; // reset the z-index, perhaps CSS will take over here
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
const disposable = new CompositeDisposable(observerDisposable,
|
|
69
99
|
/**
|
|
70
100
|
* since container is positioned absoutely we must explicitly forward
|
|
71
101
|
* the dnd events for the expect behaviours to continue to occur in terms of dnd
|
|
@@ -89,7 +119,7 @@ export class OverlayRenderContainer extends CompositeDisposable {
|
|
|
89
119
|
onDragOver: (e) => {
|
|
90
120
|
referenceContainer.dropTarget.dnd.onDragOver(e);
|
|
91
121
|
},
|
|
92
|
-
}), panel.api.onDidVisibilityChange((
|
|
122
|
+
}), panel.api.onDidVisibilityChange(() => {
|
|
93
123
|
/**
|
|
94
124
|
* Control the visibility of the content, however even when not visible (display: none)
|
|
95
125
|
* the content is still maintained within the DOM hence DOM specific attributes
|
|
@@ -101,6 +131,8 @@ export class OverlayRenderContainer extends CompositeDisposable {
|
|
|
101
131
|
return;
|
|
102
132
|
}
|
|
103
133
|
resize();
|
|
134
|
+
}), panel.api.onDidLocationChange(() => {
|
|
135
|
+
correctLayerPosition();
|
|
104
136
|
}));
|
|
105
137
|
this.map[panel.api.id].destroy = Disposable.from(() => {
|
|
106
138
|
var _a;
|
|
@@ -109,6 +141,7 @@ export class OverlayRenderContainer extends CompositeDisposable {
|
|
|
109
141
|
}
|
|
110
142
|
(_a = focusContainer.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(focusContainer);
|
|
111
143
|
});
|
|
144
|
+
correctLayerPosition();
|
|
112
145
|
queueMicrotask(() => {
|
|
113
146
|
if (this.isDisposed) {
|
|
114
147
|
return;
|
|
@@ -103,6 +103,7 @@ export declare class PaneviewComponent extends Resizable implements IPaneviewCom
|
|
|
103
103
|
readonly onDidAddView: Event<PaneviewPanel>;
|
|
104
104
|
private readonly _onDidRemoveView;
|
|
105
105
|
readonly onDidRemoveView: Event<PaneviewPanel>;
|
|
106
|
+
private classNames;
|
|
106
107
|
get id(): string;
|
|
107
108
|
get panels(): PaneviewPanel[];
|
|
108
109
|
set paneview(value: Paneview);
|
|
@@ -112,7 +113,7 @@ export declare class PaneviewComponent extends Resizable implements IPaneviewCom
|
|
|
112
113
|
get height(): number;
|
|
113
114
|
get width(): number;
|
|
114
115
|
get options(): PaneviewComponentOptions;
|
|
115
|
-
constructor(options: PaneviewComponentOptions);
|
|
116
|
+
constructor(parentElement: HTMLElement, options: PaneviewComponentOptions);
|
|
116
117
|
setVisible(panel: PaneviewPanel, visible: boolean): void;
|
|
117
118
|
focus(): void;
|
|
118
119
|
updateOptions(options: Partial<PaneviewComponentOptions>): void;
|
|
@@ -8,6 +8,7 @@ import { DraggablePaneviewPanel, } from './draggablePaneviewPanel';
|
|
|
8
8
|
import { DefaultHeader } from './defaultPaneviewHeader';
|
|
9
9
|
import { sequentialNumberGenerator } from '../math';
|
|
10
10
|
import { Resizable } from '../resizable';
|
|
11
|
+
import { toggleClass } from '../dom';
|
|
11
12
|
const nextLayoutId = sequentialNumberGenerator();
|
|
12
13
|
export class PaneFramework extends DraggablePaneviewPanel {
|
|
13
14
|
constructor(options) {
|
|
@@ -56,8 +57,9 @@ export class PaneviewComponent extends Resizable {
|
|
|
56
57
|
get options() {
|
|
57
58
|
return this._options;
|
|
58
59
|
}
|
|
59
|
-
constructor(options) {
|
|
60
|
-
|
|
60
|
+
constructor(parentElement, options) {
|
|
61
|
+
var _a, _b;
|
|
62
|
+
super(parentElement, options.disableAutoResizing);
|
|
61
63
|
this._id = nextLayoutId.next();
|
|
62
64
|
this._disposable = new MutableDisposable();
|
|
63
65
|
this._viewDisposables = new Map();
|
|
@@ -71,7 +73,12 @@ export class PaneviewComponent extends Resizable {
|
|
|
71
73
|
this.onDidAddView = this._onDidAddView.event;
|
|
72
74
|
this._onDidRemoveView = new Emitter();
|
|
73
75
|
this.onDidRemoveView = this._onDidRemoveView.event;
|
|
76
|
+
this.classNames = [];
|
|
74
77
|
this.addDisposables(this._onDidLayoutChange, this._onDidLayoutfromJSON, this._onDidDrop, this._onDidAddView, this._onDidRemoveView);
|
|
78
|
+
this.classNames = (_b = (_a = options.className) === null || _a === void 0 ? void 0 : _a.split(' ')) !== null && _b !== void 0 ? _b : [];
|
|
79
|
+
for (const className of this.classNames) {
|
|
80
|
+
toggleClass(this.element, className, true);
|
|
81
|
+
}
|
|
75
82
|
this._options = options;
|
|
76
83
|
if (!options.components) {
|
|
77
84
|
options.components = {};
|
|
@@ -93,6 +100,16 @@ export class PaneviewComponent extends Resizable {
|
|
|
93
100
|
//noop
|
|
94
101
|
}
|
|
95
102
|
updateOptions(options) {
|
|
103
|
+
var _a, _b;
|
|
104
|
+
if ('className' in options) {
|
|
105
|
+
for (const className of this.classNames) {
|
|
106
|
+
toggleClass(this.element, className, false);
|
|
107
|
+
}
|
|
108
|
+
this.classNames = (_b = (_a = options.className) === null || _a === void 0 ? void 0 : _a.split(' ')) !== null && _b !== void 0 ? _b : [];
|
|
109
|
+
for (const className of this.classNames) {
|
|
110
|
+
toggleClass(this.element, className, true);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
96
113
|
this._options = Object.assign(Object.assign({}, this.options), options);
|
|
97
114
|
}
|
|
98
115
|
addPanel(options) {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Accreditation: This file is largly based upon the MIT licenced VSCode sourcecode found at:
|
|
3
3
|
* https://github.com/microsoft/vscode/tree/main/src/vs/base/browser/ui/splitview
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
import { removeClasses, addClasses, toggleClass,
|
|
5
|
+
import { removeClasses, addClasses, toggleClass, disableIframePointEvents, } from '../dom';
|
|
6
6
|
import { Emitter } from '../events';
|
|
7
7
|
import { pushToStart, pushToEnd, firstIndex } from '../array';
|
|
8
8
|
import { range, clamp } from '../math';
|
|
@@ -359,13 +359,7 @@ export class Splitview {
|
|
|
359
359
|
for (const item of this.viewItems) {
|
|
360
360
|
item.enabled = false;
|
|
361
361
|
}
|
|
362
|
-
const iframes =
|
|
363
|
-
...getElementsByTagName('iframe'),
|
|
364
|
-
...getElementsByTagName('webview'),
|
|
365
|
-
];
|
|
366
|
-
for (const iframe of iframes) {
|
|
367
|
-
iframe.style.pointerEvents = 'none';
|
|
368
|
-
}
|
|
362
|
+
const iframes = disableIframePointEvents();
|
|
369
363
|
const start = this._orientation === Orientation.HORIZONTAL
|
|
370
364
|
? event.clientX
|
|
371
365
|
: event.clientY;
|
|
@@ -427,9 +421,7 @@ export class Splitview {
|
|
|
427
421
|
for (const item of this.viewItems) {
|
|
428
422
|
item.enabled = true;
|
|
429
423
|
}
|
|
430
|
-
|
|
431
|
-
iframe.style.pointerEvents = 'auto';
|
|
432
|
-
}
|
|
424
|
+
iframes.release();
|
|
433
425
|
this.saveProportions();
|
|
434
426
|
document.removeEventListener('pointermove', onPointerMove);
|
|
435
427
|
document.removeEventListener('pointerup', end);
|
|
@@ -596,29 +588,47 @@ export class Splitview {
|
|
|
596
588
|
if (this.viewItems.length === 0) {
|
|
597
589
|
return;
|
|
598
590
|
}
|
|
599
|
-
const
|
|
600
|
-
const
|
|
591
|
+
const visibleViewItems = this.viewItems.filter((i) => i.visible);
|
|
592
|
+
const sashCount = Math.max(0, visibleViewItems.length - 1);
|
|
593
|
+
const marginReducedSize = (this.margin * sashCount) / Math.max(1, visibleViewItems.length);
|
|
601
594
|
let totalLeftOffset = 0;
|
|
602
595
|
const viewLeftOffsets = [];
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
this.sashes[i].container.style.left = `${offset}px`;
|
|
609
|
-
this.sashes[i].container.style.top = `0px`;
|
|
596
|
+
const sashWidth = 4; // hardcoded in css
|
|
597
|
+
const runningVisiblePanelCount = this.viewItems.reduce((arr, viewItem, i) => {
|
|
598
|
+
const flag = viewItem.visible ? 1 : 0;
|
|
599
|
+
if (i === 0) {
|
|
600
|
+
arr.push(flag);
|
|
610
601
|
}
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
this.sashes[i].container.style.top = `${offset}px`;
|
|
602
|
+
else {
|
|
603
|
+
arr.push(arr[i - 1] + flag);
|
|
614
604
|
}
|
|
615
|
-
|
|
605
|
+
return arr;
|
|
606
|
+
}, []);
|
|
607
|
+
// calculate both view and cash positions
|
|
616
608
|
this.viewItems.forEach((view, i) => {
|
|
617
|
-
|
|
618
|
-
|
|
609
|
+
totalLeftOffset += this.viewItems[i].size;
|
|
610
|
+
viewLeftOffsets.push(totalLeftOffset);
|
|
611
|
+
const size = view.visible ? view.size - marginReducedSize : 0;
|
|
612
|
+
const visiblePanelsBeforeThisView = Math.max(0, runningVisiblePanelCount[i] - 1);
|
|
613
|
+
const offset = i === 0 || visiblePanelsBeforeThisView === 0
|
|
619
614
|
? 0
|
|
620
615
|
: viewLeftOffsets[i - 1] +
|
|
621
|
-
(
|
|
616
|
+
(visiblePanelsBeforeThisView / sashCount) * marginReducedSize;
|
|
617
|
+
if (i < this.viewItems.length - 1) {
|
|
618
|
+
// calculate sash position
|
|
619
|
+
const newSize = view.visible
|
|
620
|
+
? offset + size - sashWidth / 2 + this.margin / 2
|
|
621
|
+
: offset;
|
|
622
|
+
if (this._orientation === Orientation.HORIZONTAL) {
|
|
623
|
+
this.sashes[i].container.style.left = `${newSize}px`;
|
|
624
|
+
this.sashes[i].container.style.top = `0px`;
|
|
625
|
+
}
|
|
626
|
+
if (this._orientation === Orientation.VERTICAL) {
|
|
627
|
+
this.sashes[i].container.style.left = `0px`;
|
|
628
|
+
this.sashes[i].container.style.top = `${newSize}px`;
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
// calculate view position
|
|
622
632
|
if (this._orientation === Orientation.HORIZONTAL) {
|
|
623
633
|
view.container.style.width = `${size}px`;
|
|
624
634
|
view.container.style.left = `${offset}px`;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { IDisposable } from '../lifecycle';
|
|
2
|
-
import { IView, LayoutPriority, Orientation, Sizing, Splitview } from './splitview';
|
|
2
|
+
import { IView, LayoutPriority, Orientation, Sizing, Splitview, SplitViewOptions } from './splitview';
|
|
3
3
|
import { SplitviewComponentOptions } from './options';
|
|
4
4
|
import { BaseComponentOptions, Parameters } from '../panel/types';
|
|
5
5
|
import { Event } from '../events';
|
|
@@ -31,7 +31,6 @@ export interface AddSplitviewComponentOptions<T extends Parameters = Parameters>
|
|
|
31
31
|
minimumSize?: number;
|
|
32
32
|
maximumSize?: number;
|
|
33
33
|
}
|
|
34
|
-
export type SplitviewComponentUpdateOptions = Pick<SplitviewComponentOptions, 'orientation' | 'components' | 'frameworkComponents'>;
|
|
35
34
|
export interface ISplitviewComponent extends IDisposable {
|
|
36
35
|
readonly minimumSize: number;
|
|
37
36
|
readonly maximumSize: number;
|
|
@@ -43,7 +42,7 @@ export interface ISplitviewComponent extends IDisposable {
|
|
|
43
42
|
readonly onDidRemoveView: Event<IView>;
|
|
44
43
|
readonly onDidLayoutFromJSON: Event<void>;
|
|
45
44
|
readonly panels: SplitviewPanel[];
|
|
46
|
-
updateOptions(options: Partial<
|
|
45
|
+
updateOptions(options: Partial<SplitViewOptions>): void;
|
|
47
46
|
addPanel<T extends object = Parameters>(options: AddSplitviewComponentOptions<T>): ISplitviewPanel;
|
|
48
47
|
layout(width: number, height: number): void;
|
|
49
48
|
onDidLayoutChange: Event<void>;
|
|
@@ -73,6 +72,7 @@ export declare class SplitviewComponent extends Resizable implements ISplitviewC
|
|
|
73
72
|
readonly onDidRemoveView: Event<IView>;
|
|
74
73
|
private readonly _onDidLayoutChange;
|
|
75
74
|
readonly onDidLayoutChange: Event<void>;
|
|
75
|
+
private classNames;
|
|
76
76
|
get panels(): SplitviewPanel[];
|
|
77
77
|
get options(): SplitviewComponentOptions;
|
|
78
78
|
get length(): number;
|
|
@@ -83,8 +83,8 @@ export declare class SplitviewComponent extends Resizable implements ISplitviewC
|
|
|
83
83
|
get maximumSize(): number;
|
|
84
84
|
get height(): number;
|
|
85
85
|
get width(): number;
|
|
86
|
-
constructor(options: SplitviewComponentOptions);
|
|
87
|
-
updateOptions(options: Partial<
|
|
86
|
+
constructor(parentElement: HTMLElement, options: SplitviewComponentOptions);
|
|
87
|
+
updateOptions(options: Partial<SplitviewComponentOptions>): void;
|
|
88
88
|
focus(): void;
|
|
89
89
|
movePanel(from: number, to: number): void;
|
|
90
90
|
setVisible(panel: SplitviewPanel, visible: boolean): void;
|
|
@@ -3,6 +3,7 @@ import { Orientation, Sizing, Splitview, } from './splitview';
|
|
|
3
3
|
import { Emitter } from '../events';
|
|
4
4
|
import { createComponent } from '../panel/componentFactory';
|
|
5
5
|
import { Resizable } from '../resizable';
|
|
6
|
+
import { toggleClass } from '../dom';
|
|
6
7
|
/**
|
|
7
8
|
* A high-level implementation of splitview that works using 'panels'
|
|
8
9
|
*/
|
|
@@ -44,8 +45,9 @@ export class SplitviewComponent extends Resizable {
|
|
|
44
45
|
? this.splitview.size
|
|
45
46
|
: this.splitview.orthogonalSize;
|
|
46
47
|
}
|
|
47
|
-
constructor(options) {
|
|
48
|
-
|
|
48
|
+
constructor(parentElement, options) {
|
|
49
|
+
var _a, _b;
|
|
50
|
+
super(parentElement, options.disableAutoResizing);
|
|
49
51
|
this._splitviewChangeDisposable = new MutableDisposable();
|
|
50
52
|
this._panels = new Map();
|
|
51
53
|
this._onDidLayoutfromJSON = new Emitter();
|
|
@@ -56,6 +58,11 @@ export class SplitviewComponent extends Resizable {
|
|
|
56
58
|
this.onDidRemoveView = this._onDidRemoveView.event;
|
|
57
59
|
this._onDidLayoutChange = new Emitter();
|
|
58
60
|
this.onDidLayoutChange = this._onDidLayoutChange.event;
|
|
61
|
+
this.classNames = [];
|
|
62
|
+
this.classNames = (_b = (_a = options.className) === null || _a === void 0 ? void 0 : _a.split(' ')) !== null && _b !== void 0 ? _b : [];
|
|
63
|
+
for (const className of this.classNames) {
|
|
64
|
+
toggleClass(this.element, className, true);
|
|
65
|
+
}
|
|
59
66
|
this._options = options;
|
|
60
67
|
if (!options.components) {
|
|
61
68
|
options.components = {};
|
|
@@ -67,6 +74,16 @@ export class SplitviewComponent extends Resizable {
|
|
|
67
74
|
this.addDisposables(this._onDidAddView, this._onDidLayoutfromJSON, this._onDidRemoveView, this._onDidLayoutChange);
|
|
68
75
|
}
|
|
69
76
|
updateOptions(options) {
|
|
77
|
+
var _a, _b;
|
|
78
|
+
if ('className' in options) {
|
|
79
|
+
for (const className of this.classNames) {
|
|
80
|
+
toggleClass(this.element, className, false);
|
|
81
|
+
}
|
|
82
|
+
this.classNames = (_b = (_a = options.className) === null || _a === void 0 ? void 0 : _a.split(' ')) !== null && _b !== void 0 ? _b : [];
|
|
83
|
+
for (const className of this.classNames) {
|
|
84
|
+
toggleClass(this.element, className, true);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
70
87
|
const hasOrientationChanged = typeof options.orientation === 'string' &&
|
|
71
88
|
this.options.orientation !== options.orientation;
|
|
72
89
|
this._options = Object.assign(Object.assign({}, this.options), options);
|