dockview-core 4.12.0 → 4.13.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.
Files changed (57) hide show
  1. package/dist/cjs/api/component.api.d.ts +2 -2
  2. package/dist/cjs/api/dockviewGroupPanelApi.d.ts +3 -1
  3. package/dist/cjs/api/dockviewGroupPanelApi.js +24 -1
  4. package/dist/cjs/dockview/components/titlebar/tabs.d.ts +2 -2
  5. package/dist/cjs/dockview/components/titlebar/tabs.js +1 -1
  6. package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts +3 -3
  7. package/dist/cjs/dockview/components/titlebar/tabsContainer.js +1 -1
  8. package/dist/cjs/dockview/dockviewComponent.d.ts +3 -3
  9. package/dist/cjs/dockview/dockviewComponent.js +8 -1
  10. package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +2 -2
  11. package/dist/cjs/dockview/dockviewGroupPanelModel.js +1 -1
  12. package/dist/cjs/dockview/events.d.ts +4 -4
  13. package/dist/cjs/dockview/events.js +14 -14
  14. package/dist/cjs/index.d.ts +2 -1
  15. package/dist/cjs/index.js +7 -2
  16. package/dist/cjs/overlay/overlay.js +25 -14
  17. package/dist/cjs/splitview/splitview.js +2 -0
  18. package/dist/dockview-core.amd.js +54 -21
  19. package/dist/dockview-core.amd.js.map +1 -1
  20. package/dist/dockview-core.amd.min.js +2 -2
  21. package/dist/dockview-core.amd.min.js.map +1 -1
  22. package/dist/dockview-core.amd.min.noStyle.js +2 -2
  23. package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
  24. package/dist/dockview-core.amd.noStyle.js +54 -21
  25. package/dist/dockview-core.amd.noStyle.js.map +1 -1
  26. package/dist/dockview-core.cjs.js +54 -21
  27. package/dist/dockview-core.cjs.js.map +1 -1
  28. package/dist/dockview-core.esm.js +54 -22
  29. package/dist/dockview-core.esm.js.map +1 -1
  30. package/dist/dockview-core.esm.min.js +2 -2
  31. package/dist/dockview-core.esm.min.js.map +1 -1
  32. package/dist/dockview-core.js +54 -21
  33. package/dist/dockview-core.js.map +1 -1
  34. package/dist/dockview-core.min.js +2 -2
  35. package/dist/dockview-core.min.js.map +1 -1
  36. package/dist/dockview-core.min.noStyle.js +2 -2
  37. package/dist/dockview-core.min.noStyle.js.map +1 -1
  38. package/dist/dockview-core.noStyle.js +54 -21
  39. package/dist/dockview-core.noStyle.js.map +1 -1
  40. package/dist/esm/api/component.api.d.ts +2 -2
  41. package/dist/esm/api/dockviewGroupPanelApi.d.ts +3 -1
  42. package/dist/esm/api/dockviewGroupPanelApi.js +13 -1
  43. package/dist/esm/dockview/components/titlebar/tabs.d.ts +2 -2
  44. package/dist/esm/dockview/components/titlebar/tabs.js +2 -2
  45. package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts +3 -3
  46. package/dist/esm/dockview/components/titlebar/tabsContainer.js +2 -2
  47. package/dist/esm/dockview/dockviewComponent.d.ts +3 -3
  48. package/dist/esm/dockview/dockviewComponent.js +9 -2
  49. package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +2 -2
  50. package/dist/esm/dockview/dockviewGroupPanelModel.js +2 -2
  51. package/dist/esm/dockview/events.d.ts +4 -4
  52. package/dist/esm/dockview/events.js +1 -1
  53. package/dist/esm/index.d.ts +2 -1
  54. package/dist/esm/index.js +2 -1
  55. package/dist/esm/overlay/overlay.js +26 -15
  56. package/dist/esm/splitview/splitview.js +2 -0
  57. package/package.json +1 -1
@@ -16,7 +16,7 @@ import { PaneviewDidDropEvent } from '../paneview/draggablePaneviewPanel';
16
16
  import { GroupDragEvent, TabDragEvent } from '../dockview/components/titlebar/tabsContainer';
17
17
  import { Box } from '../types';
18
18
  import { DockviewDidDropEvent, DockviewWillDropEvent } from '../dockview/dockviewGroupPanelModel';
19
- import { WillShowOverlayLocationEvent } from '../dockview/events';
19
+ import { DockviewWillShowOverlayLocationEvent } from '../dockview/events';
20
20
  import { PaneviewComponentOptions, PaneviewDndOverlayEvent } from '../paneview/options';
21
21
  import { SplitviewComponentOptions } from '../splitview/options';
22
22
  import { GridviewComponentOptions } from '../gridview/options';
@@ -403,7 +403,7 @@ export declare class DockviewApi implements CommonApi<SerializedDockview> {
403
403
  * Calling `event.preventDefault()` will prevent the overlay being shown and prevent
404
404
  * the any subsequent drop event.
405
405
  */
406
- get onWillShowOverlay(): Event<WillShowOverlayLocationEvent>;
406
+ get onWillShowOverlay(): Event<DockviewWillShowOverlayLocationEvent>;
407
407
  /**
408
408
  * Invoked before a group is dragged.
409
409
  *
@@ -3,7 +3,7 @@ import { DockviewComponent } from '../dockview/dockviewComponent';
3
3
  import { DockviewGroupPanel } from '../dockview/dockviewGroupPanel';
4
4
  import { DockviewGroupChangeEvent, DockviewGroupLocation } from '../dockview/dockviewGroupPanelModel';
5
5
  import { Emitter, Event } from '../events';
6
- import { GridviewPanelApi, GridviewPanelApiImpl } from './gridviewPanelApi';
6
+ import { GridviewPanelApi, GridviewPanelApiImpl, SizeEvent } from './gridviewPanelApi';
7
7
  export interface DockviewGroupMoveParams {
8
8
  group?: DockviewGroupPanel;
9
9
  position?: Position;
@@ -36,12 +36,14 @@ export interface DockviewGroupPanelFloatingChangeEvent {
36
36
  export declare class DockviewGroupPanelApiImpl extends GridviewPanelApiImpl {
37
37
  private readonly accessor;
38
38
  private _group;
39
+ private _pendingSize;
39
40
  readonly _onDidLocationChange: Emitter<DockviewGroupPanelFloatingChangeEvent>;
40
41
  readonly onDidLocationChange: Event<DockviewGroupPanelFloatingChangeEvent>;
41
42
  readonly _onDidActivePanelChange: Emitter<DockviewGroupChangeEvent>;
42
43
  readonly onDidActivePanelChange: Event<DockviewGroupChangeEvent>;
43
44
  get location(): DockviewGroupLocation;
44
45
  constructor(id: string, accessor: DockviewComponent);
46
+ setSize(event: SizeEvent): void;
45
47
  close(): void;
46
48
  getWindow(): Window;
47
49
  moveTo(options: DockviewGroupMoveParams): void;
@@ -16,7 +16,19 @@ export class DockviewGroupPanelApiImpl extends GridviewPanelApiImpl {
16
16
  this.onDidLocationChange = this._onDidLocationChange.event;
17
17
  this._onDidActivePanelChange = new Emitter();
18
18
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
19
- this.addDisposables(this._onDidLocationChange, this._onDidActivePanelChange);
19
+ this.addDisposables(this._onDidLocationChange, this._onDidActivePanelChange, this._onDidVisibilityChange.event((event) => {
20
+ // When becoming visible, apply any pending size change
21
+ if (event.isVisible && this._pendingSize) {
22
+ super.setSize(this._pendingSize);
23
+ this._pendingSize = undefined;
24
+ }
25
+ }));
26
+ }
27
+ setSize(event) {
28
+ // Always store the requested size
29
+ this._pendingSize = Object.assign({}, event);
30
+ // Apply the size change immediately
31
+ super.setSize(event);
20
32
  }
21
33
  close() {
22
34
  if (!this._group) {
@@ -2,7 +2,7 @@ import { Event } from '../../../events';
2
2
  import { CompositeDisposable } from '../../../lifecycle';
3
3
  import { DockviewComponent } from '../../dockviewComponent';
4
4
  import { DockviewGroupPanel } from '../../dockviewGroupPanel';
5
- import { WillShowOverlayLocationEvent } from '../../events';
5
+ import { DockviewWillShowOverlayLocationEvent } from '../../events';
6
6
  import { IDockviewPanel } from '../../dockviewPanel';
7
7
  import { Tab } from '../tab/tab';
8
8
  import { TabDragEvent, TabDropIndexEvent } from './tabsContainer';
@@ -20,7 +20,7 @@ export declare class Tabs extends CompositeDisposable {
20
20
  private readonly _onDrop;
21
21
  readonly onDrop: Event<TabDropIndexEvent>;
22
22
  private readonly _onWillShowOverlay;
23
- readonly onWillShowOverlay: Event<WillShowOverlayLocationEvent>;
23
+ readonly onWillShowOverlay: Event<DockviewWillShowOverlayLocationEvent>;
24
24
  private readonly _onOverflowTabsChange;
25
25
  readonly onOverflowTabsChange: Event<{
26
26
  tabs: string[];
@@ -3,7 +3,7 @@ import { isChildEntirelyVisibleWithinParent, OverflowObserver, } from '../../../
3
3
  import { addDisposableListener, Emitter } from '../../../events';
4
4
  import { CompositeDisposable, Disposable, MutableDisposable, } from '../../../lifecycle';
5
5
  import { Scrollbar } from '../../../scrollbar';
6
- import { WillShowOverlayLocationEvent } from '../../events';
6
+ import { DockviewWillShowOverlayLocationEvent } from '../../events';
7
7
  import { Tab } from '../tab/tab';
8
8
  export class Tabs extends CompositeDisposable {
9
9
  get showTabsOverflowControl() {
@@ -145,7 +145,7 @@ export class Tabs extends CompositeDisposable {
145
145
  index: this._tabs.findIndex((x) => x.value === tab),
146
146
  });
147
147
  }), tab.onWillShowOverlay((event) => {
148
- this._onWillShowOverlay.fire(new WillShowOverlayLocationEvent(event, {
148
+ this._onWillShowOverlay.fire(new DockviewWillShowOverlayLocationEvent(event, {
149
149
  kind: 'tab',
150
150
  panel: this.group.activePanel,
151
151
  api: this.accessor.api,
@@ -4,7 +4,7 @@ import { Tab } from '../tab/tab';
4
4
  import { DockviewGroupPanel } from '../../dockviewGroupPanel';
5
5
  import { IDockviewPanel } from '../../dockviewPanel';
6
6
  import { DockviewComponent } from '../../dockviewComponent';
7
- import { WillShowOverlayLocationEvent } from '../../events';
7
+ import { DockviewWillShowOverlayLocationEvent } from '../../events';
8
8
  export interface TabDropIndexEvent {
9
9
  readonly event: DragEvent;
10
10
  readonly index: number;
@@ -24,7 +24,7 @@ export interface ITabsContainer extends IDisposable {
24
24
  readonly onDrop: Event<TabDropIndexEvent>;
25
25
  readonly onTabDragStart: Event<TabDragEvent>;
26
26
  readonly onGroupDragStart: Event<GroupDragEvent>;
27
- readonly onWillShowOverlay: Event<WillShowOverlayLocationEvent>;
27
+ readonly onWillShowOverlay: Event<DockviewWillShowOverlayLocationEvent>;
28
28
  hidden: boolean;
29
29
  delete(id: string): void;
30
30
  indexOf(id: string): number;
@@ -62,7 +62,7 @@ export declare class TabsContainer extends CompositeDisposable implements ITabsC
62
62
  private readonly _onGroupDragStart;
63
63
  readonly onGroupDragStart: Event<GroupDragEvent>;
64
64
  private readonly _onWillShowOverlay;
65
- readonly onWillShowOverlay: Event<WillShowOverlayLocationEvent>;
65
+ readonly onWillShowOverlay: Event<DockviewWillShowOverlayLocationEvent>;
66
66
  get panels(): string[];
67
67
  get size(): number;
68
68
  get hidden(): boolean;
@@ -2,7 +2,7 @@ import { CompositeDisposable, Disposable, MutableDisposable, } from '../../../li
2
2
  import { addDisposableListener, Emitter } from '../../../events';
3
3
  import { VoidContainer } from './voidContainer';
4
4
  import { findRelativeZIndexParent, toggleClass } from '../../../dom';
5
- import { WillShowOverlayLocationEvent } from '../../events';
5
+ import { DockviewWillShowOverlayLocationEvent } from '../../events';
6
6
  import { getPanelData } from '../../../dnd/dataTransfer';
7
7
  import { Tabs } from './tabs';
8
8
  import { createDropdownElementHandle, } from './tabOverflowControl';
@@ -74,7 +74,7 @@ export class TabsContainer extends CompositeDisposable {
74
74
  index: this.tabs.size,
75
75
  });
76
76
  }), this.voidContainer.onWillShowOverlay((event) => {
77
- this._onWillShowOverlay.fire(new WillShowOverlayLocationEvent(event, {
77
+ this._onWillShowOverlay.fire(new DockviewWillShowOverlayLocationEvent(event, {
78
78
  kind: 'header_space',
79
79
  panel: this.group.activePanel,
80
80
  api: this.accessor.api,
@@ -8,7 +8,7 @@ import { BaseGrid, IBaseGrid } from '../gridview/baseComponentGridview';
8
8
  import { DockviewApi } from '../api/component.api';
9
9
  import { Orientation } from '../splitview/splitview';
10
10
  import { GroupOptions, GroupPanelViewState, DockviewDidDropEvent, DockviewWillDropEvent } from './dockviewGroupPanelModel';
11
- import { WillShowOverlayLocationEvent } from './events';
11
+ import { DockviewWillShowOverlayLocationEvent } from './events';
12
12
  import { DockviewGroupPanel } from './dockviewGroupPanel';
13
13
  import { Parameters } from '../panel/types';
14
14
  import { DockviewFloatingGroupPanel } from './dockviewFloatingGroupPanel';
@@ -129,7 +129,7 @@ export interface IDockviewComponent extends IBaseGrid<DockviewGroupPanel> {
129
129
  readonly orientation: Orientation;
130
130
  readonly onDidDrop: Event<DockviewDidDropEvent>;
131
131
  readonly onWillDrop: Event<DockviewWillDropEvent>;
132
- readonly onWillShowOverlay: Event<WillShowOverlayLocationEvent>;
132
+ readonly onWillShowOverlay: Event<DockviewWillShowOverlayLocationEvent>;
133
133
  readonly onDidRemovePanel: Event<IDockviewPanel>;
134
134
  readonly onDidAddPanel: Event<IDockviewPanel>;
135
135
  readonly onDidLayoutFromJSON: Event<void>;
@@ -199,7 +199,7 @@ export declare class DockviewComponent extends BaseGrid<DockviewGroupPanel> impl
199
199
  private readonly _onWillDrop;
200
200
  readonly onWillDrop: Event<DockviewWillDropEvent>;
201
201
  private readonly _onWillShowOverlay;
202
- readonly onWillShowOverlay: Event<WillShowOverlayLocationEvent>;
202
+ readonly onWillShowOverlay: Event<DockviewWillShowOverlayLocationEvent>;
203
203
  private readonly _onUnhandledDragOverEvent;
204
204
  readonly onUnhandledDragOverEvent: Event<DockviewDndOverlayEvent>;
205
205
  private readonly _onDidRemovePanel;
@@ -12,7 +12,7 @@ import { BaseGrid, toTarget, } from '../gridview/baseComponentGridview';
12
12
  import { DockviewApi } from '../api/component.api';
13
13
  import { Orientation } from '../splitview/splitview';
14
14
  import { DockviewDidDropEvent, DockviewWillDropEvent, } from './dockviewGroupPanelModel';
15
- import { WillShowOverlayLocationEvent } from './events';
15
+ import { DockviewWillShowOverlayLocationEvent } from './events';
16
16
  import { DockviewGroupPanel } from './dockviewGroupPanel';
17
17
  import { DockviewPanelModel } from './dockviewPanelModel';
18
18
  import { getPanelData } from '../dnd/dataTransfer';
@@ -221,7 +221,7 @@ export class DockviewComponent extends BaseGrid {
221
221
  // option only available when no panels in primary grid
222
222
  return;
223
223
  }
224
- this._onWillShowOverlay.fire(new WillShowOverlayLocationEvent(event, {
224
+ this._onWillShowOverlay.fire(new DockviewWillShowOverlayLocationEvent(event, {
225
225
  kind: 'edge',
226
226
  panel: undefined,
227
227
  api: this._api,
@@ -1460,6 +1460,13 @@ export class DockviewComponent extends BaseGrid {
1460
1460
  panel: removedPanel,
1461
1461
  from: sourceGroup,
1462
1462
  });
1463
+ /**
1464
+ * Update overlay positions after DOM layout completes to prevent 0×0 dimensions.
1465
+ * With defaultRenderer="always" this results in panel content not showing after move operations.
1466
+ */
1467
+ requestAnimationFrame(() => {
1468
+ this.overlayRenderContainer.updateAllPositions();
1469
+ });
1463
1470
  }
1464
1471
  else {
1465
1472
  /**
@@ -3,7 +3,7 @@ import { PanelTransfer } from '../dnd/dataTransfer';
3
3
  import { Position } from '../dnd/droptarget';
4
4
  import { DockviewComponent } from './dockviewComponent';
5
5
  import { DockviewEvent, Event } from '../events';
6
- import { DockviewGroupDropLocation, WillShowOverlayLocationEvent } from './events';
6
+ import { DockviewGroupDropLocation, DockviewWillShowOverlayLocationEvent } from './events';
7
7
  import { IViewSize } from '../gridview/gridview';
8
8
  import { CompositeDisposable } from '../lifecycle';
9
9
  import { IPanel, PanelInitParameters, PanelUpdateEvent, Parameters } from '../panel/types';
@@ -155,7 +155,7 @@ export declare class DockviewGroupPanelModel extends CompositeDisposable impleme
155
155
  private readonly _onWillDrop;
156
156
  readonly onWillDrop: Event<DockviewWillDropEvent>;
157
157
  private readonly _onWillShowOverlay;
158
- readonly onWillShowOverlay: Event<WillShowOverlayLocationEvent>;
158
+ readonly onWillShowOverlay: Event<DockviewWillShowOverlayLocationEvent>;
159
159
  private readonly _onTabDragStart;
160
160
  readonly onTabDragStart: Event<TabDragEvent>;
161
161
  private readonly _onGroupDragStart;
@@ -2,7 +2,7 @@ import { DockviewApi } from '../api/component.api';
2
2
  import { getPanelData } from '../dnd/dataTransfer';
3
3
  import { isAncestor, toggleClass } from '../dom';
4
4
  import { addDisposableListener, DockviewEvent, Emitter, } from '../events';
5
- import { WillShowOverlayLocationEvent } from './events';
5
+ import { DockviewWillShowOverlayLocationEvent } from './events';
6
6
  import { CompositeDisposable } from '../lifecycle';
7
7
  import { ContentContainer, } from './components/panel/content';
8
8
  import { TabsContainer, } from './components/titlebar/tabsContainer';
@@ -177,7 +177,7 @@ export class DockviewGroupPanelModel extends CompositeDisposable {
177
177
  }), this.tabsContainer.onWillShowOverlay((event) => {
178
178
  this._onWillShowOverlay.fire(event);
179
179
  }), this.contentContainer.dropTarget.onWillShowOverlay((event) => {
180
- this._onWillShowOverlay.fire(new WillShowOverlayLocationEvent(event, {
180
+ this._onWillShowOverlay.fire(new DockviewWillShowOverlayLocationEvent(event, {
181
181
  kind: 'content',
182
182
  panel: this.activePanel,
183
183
  api: this._api,
@@ -5,16 +5,16 @@ import { IDockviewPanel } from './dockviewPanel';
5
5
  import { DockviewGroupPanel } from './dockviewGroupPanel';
6
6
  import { IDockviewEvent } from '../events';
7
7
  export type DockviewGroupDropLocation = 'tab' | 'header_space' | 'content' | 'edge';
8
- export interface WillShowOverlayLocationEventOptions {
8
+ export interface DockviewWillShowOverlayLocationEventOptions {
9
9
  readonly kind: DockviewGroupDropLocation;
10
10
  readonly panel: IDockviewPanel | undefined;
11
11
  readonly api: DockviewApi;
12
12
  readonly group: DockviewGroupPanel | undefined;
13
13
  getData: () => PanelTransfer | undefined;
14
14
  }
15
- export declare class WillShowOverlayLocationEvent implements IDockviewEvent {
15
+ export declare class DockviewWillShowOverlayLocationEvent implements IDockviewEvent {
16
16
  private readonly event;
17
- readonly options: WillShowOverlayLocationEventOptions;
17
+ readonly options: DockviewWillShowOverlayLocationEventOptions;
18
18
  get kind(): DockviewGroupDropLocation;
19
19
  get nativeEvent(): DragEvent;
20
20
  get position(): Position;
@@ -24,5 +24,5 @@ export declare class WillShowOverlayLocationEvent implements IDockviewEvent {
24
24
  get group(): DockviewGroupPanel | undefined;
25
25
  preventDefault(): void;
26
26
  getData(): PanelTransfer | undefined;
27
- constructor(event: WillShowOverlayEvent, options: WillShowOverlayLocationEventOptions);
27
+ constructor(event: WillShowOverlayEvent, options: DockviewWillShowOverlayLocationEventOptions);
28
28
  }
@@ -1,4 +1,4 @@
1
- export class WillShowOverlayLocationEvent {
1
+ export class DockviewWillShowOverlayLocationEvent {
2
2
  get kind() {
3
3
  return this.options.kind;
4
4
  }
@@ -16,7 +16,8 @@ export * from './gridview/baseComponentGridview';
16
16
  export { DraggablePaneviewPanel, PaneviewDidDropEvent as PaneviewDropEvent, } from './paneview/draggablePaneviewPanel';
17
17
  export * from './dockview/components/panel/content';
18
18
  export * from './dockview/components/tab/tab';
19
- export * from './dockview/dockviewGroupPanelModel';
19
+ export { DockviewGroupPanelModel, DockviewDidDropEvent, DockviewWillDropEvent, DockviewGroupChangeEvent, } from './dockview/dockviewGroupPanelModel';
20
+ export { DockviewWillShowOverlayLocationEvent } from './dockview/events';
20
21
  export { TabDragEvent, GroupDragEvent, } from './dockview/components/titlebar/tabsContainer';
21
22
  export * from './dockview/types';
22
23
  export * from './dockview/dockviewGroupPanel';
package/dist/esm/index.js CHANGED
@@ -16,7 +16,8 @@ export * from './gridview/baseComponentGridview';
16
16
  export { DraggablePaneviewPanel, } from './paneview/draggablePaneviewPanel';
17
17
  export * from './dockview/components/panel/content';
18
18
  export * from './dockview/components/tab/tab';
19
- export * from './dockview/dockviewGroupPanelModel';
19
+ export { DockviewGroupPanelModel, DockviewDidDropEvent, DockviewWillDropEvent, } from './dockview/dockviewGroupPanelModel';
20
+ export { DockviewWillShowOverlayLocationEvent } from './dockview/events';
20
21
  export * from './dockview/types';
21
22
  export * from './dockview/dockviewGroupPanel';
22
23
  export * from './dockview/options';
@@ -1,5 +1,5 @@
1
1
  import { disableIframePointEvents, quasiDefaultPrevented, toggleClass, } from '../dom';
2
- import { Emitter, addDisposableListener, } from '../events';
2
+ import { Emitter, addDisposableListener } from '../events';
3
3
  import { CompositeDisposable, MutableDisposable } from '../lifecycle';
4
4
  import { clamp } from '../math';
5
5
  class AriaLevelTracker {
@@ -267,13 +267,16 @@ export class Overlay extends CompositeDisposable {
267
267
  let right = undefined;
268
268
  let width = undefined;
269
269
  const moveTop = () => {
270
- top = clamp(y, -Number.MAX_VALUE, startPosition.originalY +
270
+ // When dragging top handle, constrain top position to prevent oversizing
271
+ const maxTop = startPosition.originalY +
271
272
  startPosition.originalHeight >
272
273
  containerRect.height
273
- ? this.getMinimumHeight(containerRect.height)
274
+ ? Math.max(0, containerRect.height -
275
+ Overlay.MINIMUM_HEIGHT)
274
276
  : Math.max(0, startPosition.originalY +
275
277
  startPosition.originalHeight -
276
- Overlay.MINIMUM_HEIGHT));
278
+ Overlay.MINIMUM_HEIGHT);
279
+ top = clamp(y, 0, maxTop);
277
280
  height =
278
281
  startPosition.originalY +
279
282
  startPosition.originalHeight -
@@ -284,22 +287,27 @@ export class Overlay extends CompositeDisposable {
284
287
  top =
285
288
  startPosition.originalY -
286
289
  startPosition.originalHeight;
287
- height = clamp(y - top, top < 0 &&
288
- typeof this.options
289
- .minimumInViewportHeight === 'number'
290
+ // When dragging bottom handle, constrain height to container height
291
+ const minHeight = top < 0 &&
292
+ typeof this.options.minimumInViewportHeight ===
293
+ 'number'
290
294
  ? -top +
291
295
  this.options.minimumInViewportHeight
292
- : Overlay.MINIMUM_HEIGHT, Number.MAX_VALUE);
296
+ : Overlay.MINIMUM_HEIGHT;
297
+ const maxHeight = containerRect.height - Math.max(0, top);
298
+ height = clamp(y - top, minHeight, maxHeight);
293
299
  bottom = containerRect.height - top - height;
294
300
  };
295
301
  const moveLeft = () => {
296
- left = clamp(x, -Number.MAX_VALUE, startPosition.originalX +
302
+ const maxLeft = startPosition.originalX +
297
303
  startPosition.originalWidth >
298
304
  containerRect.width
299
- ? this.getMinimumWidth(containerRect.width)
305
+ ? Math.max(0, containerRect.width -
306
+ Overlay.MINIMUM_WIDTH) // Prevent extending beyong right edge
300
307
  : Math.max(0, startPosition.originalX +
301
308
  startPosition.originalWidth -
302
- Overlay.MINIMUM_WIDTH));
309
+ Overlay.MINIMUM_WIDTH);
310
+ left = clamp(x, 0, maxLeft); // min is 0 (Not -Infinity) to prevent dragging beyond left edge
303
311
  width =
304
312
  startPosition.originalX +
305
313
  startPosition.originalWidth -
@@ -310,12 +318,15 @@ export class Overlay extends CompositeDisposable {
310
318
  left =
311
319
  startPosition.originalX -
312
320
  startPosition.originalWidth;
313
- width = clamp(x - left, left < 0 &&
314
- typeof this.options
315
- .minimumInViewportWidth === 'number'
321
+ // When dragging right handle, constrain width to container width
322
+ const minWidth = left < 0 &&
323
+ typeof this.options.minimumInViewportWidth ===
324
+ 'number'
316
325
  ? -left +
317
326
  this.options.minimumInViewportWidth
318
- : Overlay.MINIMUM_WIDTH, Number.MAX_VALUE);
327
+ : Overlay.MINIMUM_WIDTH;
328
+ const maxWidth = containerRect.width - Math.max(0, left);
329
+ width = clamp(x - left, minWidth, maxWidth);
319
330
  right = containerRect.width - left - width;
320
331
  };
321
332
  switch (direction) {
@@ -427,11 +427,13 @@ export class Splitview {
427
427
  document.removeEventListener('pointermove', onPointerMove);
428
428
  document.removeEventListener('pointerup', end);
429
429
  document.removeEventListener('pointercancel', end);
430
+ document.removeEventListener('contextmenu', end);
430
431
  this._onDidSashEnd.fire(undefined);
431
432
  };
432
433
  document.addEventListener('pointermove', onPointerMove);
433
434
  document.addEventListener('pointerup', end);
434
435
  document.addEventListener('pointercancel', end);
436
+ document.addEventListener('contextmenu', end);
435
437
  };
436
438
  sash.addEventListener('pointerdown', onPointerStart);
437
439
  const sashItem = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dockview-core",
3
- "version": "4.12.0",
3
+ "version": "4.13.0",
4
4
  "description": "Zero dependency layout manager supporting tabs, grids and splitviews",
5
5
  "keywords": [
6
6
  "splitview",