dockview-core 4.2.1 → 4.2.4

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 (35) hide show
  1. package/dist/cjs/dockview/components/popupService.d.ts +1 -0
  2. package/dist/cjs/dockview/components/popupService.js +6 -1
  3. package/dist/cjs/dockview/components/titlebar/tabsContainer.js +5 -1
  4. package/dist/cjs/dockview/dockviewComponent.js +19 -17
  5. package/dist/cjs/dom.d.ts +4 -0
  6. package/dist/cjs/dom.js +42 -1
  7. package/dist/dockview-core.amd.js +68 -20
  8. package/dist/dockview-core.amd.js.map +1 -1
  9. package/dist/dockview-core.amd.min.js +2 -2
  10. package/dist/dockview-core.amd.min.js.map +1 -1
  11. package/dist/dockview-core.amd.min.noStyle.js +2 -2
  12. package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
  13. package/dist/dockview-core.amd.noStyle.js +68 -20
  14. package/dist/dockview-core.amd.noStyle.js.map +1 -1
  15. package/dist/dockview-core.cjs.js +68 -20
  16. package/dist/dockview-core.cjs.js.map +1 -1
  17. package/dist/dockview-core.esm.js +68 -20
  18. package/dist/dockview-core.esm.js.map +1 -1
  19. package/dist/dockview-core.esm.min.js +2 -2
  20. package/dist/dockview-core.esm.min.js.map +1 -1
  21. package/dist/dockview-core.js +68 -20
  22. package/dist/dockview-core.js.map +1 -1
  23. package/dist/dockview-core.min.js +2 -2
  24. package/dist/dockview-core.min.js.map +1 -1
  25. package/dist/dockview-core.min.noStyle.js +2 -2
  26. package/dist/dockview-core.min.noStyle.js.map +1 -1
  27. package/dist/dockview-core.noStyle.js +68 -20
  28. package/dist/dockview-core.noStyle.js.map +1 -1
  29. package/dist/esm/dockview/components/popupService.d.ts +1 -0
  30. package/dist/esm/dockview/components/popupService.js +6 -1
  31. package/dist/esm/dockview/components/titlebar/tabsContainer.js +6 -2
  32. package/dist/esm/dockview/dockviewComponent.js +19 -17
  33. package/dist/esm/dom.d.ts +4 -0
  34. package/dist/esm/dom.js +38 -0
  35. package/package.json +1 -1
@@ -8,6 +8,7 @@ export declare class PopupService extends CompositeDisposable {
8
8
  openPopover(element: HTMLElement, position: {
9
9
  x: number;
10
10
  y: number;
11
+ zIndex?: string;
11
12
  }): void;
12
13
  close(): void;
13
14
  }
@@ -1,3 +1,4 @@
1
+ import { shiftAbsoluteElementIntoView } from '../../dom';
1
2
  import { addDisposableListener } from '../../events';
2
3
  import { CompositeDisposable, Disposable, MutableDisposable, } from '../../lifecycle';
3
4
  export class PopupService extends CompositeDisposable {
@@ -15,10 +16,11 @@ export class PopupService extends CompositeDisposable {
15
16
  }), this._activeDisposable);
16
17
  }
17
18
  openPopover(element, position) {
19
+ var _a;
18
20
  this.close();
19
21
  const wrapper = document.createElement('div');
20
22
  wrapper.style.position = 'absolute';
21
- wrapper.style.zIndex = '99';
23
+ wrapper.style.zIndex = (_a = position.zIndex) !== null && _a !== void 0 ? _a : 'var(--dv-overlay-z-index)';
22
24
  wrapper.appendChild(element);
23
25
  const anchorBox = this._element.getBoundingClientRect();
24
26
  const offsetX = anchorBox.left;
@@ -42,6 +44,9 @@ export class PopupService extends CompositeDisposable {
42
44
  }
43
45
  this.close();
44
46
  }));
47
+ requestAnimationFrame(() => {
48
+ shiftAbsoluteElementIntoView(wrapper, this.root);
49
+ });
45
50
  }
46
51
  close() {
47
52
  if (this._active) {
@@ -1,7 +1,7 @@
1
1
  import { CompositeDisposable, Disposable, MutableDisposable, } from '../../../lifecycle';
2
2
  import { addDisposableListener, Emitter } from '../../../events';
3
3
  import { VoidContainer } from './voidContainer';
4
- import { toggleClass } from '../../../dom';
4
+ import { findRelativeZIndexParent, toggleClass } from '../../../dom';
5
5
  import { WillShowOverlayLocationEvent } from '../../dockviewGroupPanelModel';
6
6
  import { getPanelData } from '../../../dnd/dataTransfer';
7
7
  import { Tabs } from './tabs';
@@ -210,7 +210,7 @@ export class TabsContainer extends CompositeDisposable {
210
210
  toggleClass(wrapper, 'dv-tab', true);
211
211
  toggleClass(wrapper, 'dv-active-tab', panelObject.api.isActive);
212
212
  toggleClass(wrapper, 'dv-inactive-tab', !panelObject.api.isActive);
213
- wrapper.addEventListener('mousedown', () => {
213
+ wrapper.addEventListener('pointerdown', () => {
214
214
  this.accessor.popupService.close();
215
215
  tab.element.scrollIntoView();
216
216
  tab.panel.api.setActive();
@@ -218,9 +218,13 @@ export class TabsContainer extends CompositeDisposable {
218
218
  wrapper.appendChild(child);
219
219
  el.appendChild(wrapper);
220
220
  }
221
+ const relativeParent = findRelativeZIndexParent(root);
221
222
  this.accessor.popupService.openPopover(el, {
222
223
  x: event.clientX,
223
224
  y: event.clientY,
225
+ zIndex: (relativeParent === null || relativeParent === void 0 ? void 0 : relativeParent.style.zIndex)
226
+ ? `calc(${relativeParent.style.zIndex} * 2)`
227
+ : undefined,
224
228
  });
225
229
  }));
226
230
  }
@@ -1476,24 +1476,26 @@ export class DockviewComponent extends BaseGrid {
1476
1476
  selectedPopoutGroup.disposable.dispose();
1477
1477
  }
1478
1478
  }
1479
- const referenceLocation = getGridLocation(to.element);
1480
- const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
1481
- let size;
1482
- switch (this.gridview.orientation) {
1483
- case Orientation.VERTICAL:
1484
- size =
1485
- referenceLocation.length % 2 == 0
1486
- ? from.api.width
1487
- : from.api.height;
1488
- break;
1489
- case Orientation.HORIZONTAL:
1490
- size =
1491
- referenceLocation.length % 2 == 0
1492
- ? from.api.height
1493
- : from.api.width;
1494
- break;
1479
+ if (from.api.location.type !== 'popout') {
1480
+ const referenceLocation = getGridLocation(to.element);
1481
+ const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, target);
1482
+ let size;
1483
+ switch (this.gridview.orientation) {
1484
+ case Orientation.VERTICAL:
1485
+ size =
1486
+ referenceLocation.length % 2 == 0
1487
+ ? from.api.width
1488
+ : from.api.height;
1489
+ break;
1490
+ case Orientation.HORIZONTAL:
1491
+ size =
1492
+ referenceLocation.length % 2 == 0
1493
+ ? from.api.height
1494
+ : from.api.width;
1495
+ break;
1496
+ }
1497
+ this.gridview.addView(from, size, dropLocation);
1495
1498
  }
1496
- this.gridview.addView(from, size, dropLocation);
1497
1499
  }
1498
1500
  from.panels.forEach((panel) => {
1499
1501
  this._onDidMovePanel.fire({ panel, from });
package/dist/esm/dom.d.ts CHANGED
@@ -50,3 +50,7 @@ export declare class Classnames {
50
50
  export declare function isChildEntirelyVisibleWithinParent(child: HTMLElement, parent: HTMLElement): boolean;
51
51
  export declare function onDidWindowMoveEnd(window: Window): Emitter<void>;
52
52
  export declare function onDidWindowResizeEnd(element: Window, cb: () => void): CompositeDisposable;
53
+ export declare function shiftAbsoluteElementIntoView(element: HTMLElement, root: HTMLElement, options?: {
54
+ buffer: number;
55
+ }): void;
56
+ export declare function findRelativeZIndexParent(el: HTMLElement): HTMLElement | null;
package/dist/esm/dom.js CHANGED
@@ -314,3 +314,41 @@ export function onDidWindowResizeEnd(element, cb) {
314
314
  }));
315
315
  return disposable;
316
316
  }
317
+ export function shiftAbsoluteElementIntoView(element, root, options = { buffer: 10 }) {
318
+ const buffer = options.buffer;
319
+ const rect = element.getBoundingClientRect();
320
+ const rootRect = element.getBoundingClientRect();
321
+ const viewportWidth = root.clientWidth;
322
+ const viewportHeight = root.clientHeight;
323
+ let translateX = 0;
324
+ let translateY = 0;
325
+ const left = rect.left - rootRect.left;
326
+ const top = rect.top - rootRect.top;
327
+ const bottom = rect.bottom - rootRect.bottom;
328
+ const right = rect.right - rootRect.right;
329
+ // Check horizontal overflow
330
+ if (left < buffer) {
331
+ translateX = buffer - left;
332
+ }
333
+ else if (right > viewportWidth - buffer) {
334
+ translateX = viewportWidth - right - buffer;
335
+ }
336
+ // Check vertical overflow
337
+ if (top < buffer) {
338
+ translateY = buffer - top;
339
+ }
340
+ else if (bottom > viewportHeight - buffer) {
341
+ translateY = viewportHeight - bottom - buffer;
342
+ }
343
+ // Apply the translation if needed
344
+ if (translateX !== 0 || translateY !== 0) {
345
+ element.style.transform = `translate(${translateX}px, ${translateY}px)`;
346
+ }
347
+ }
348
+ export function findRelativeZIndexParent(el) {
349
+ let tmp = el;
350
+ while (tmp && (tmp.style.zIndex === 'auto' || tmp.style.zIndex === '')) {
351
+ tmp = tmp.parentElement;
352
+ }
353
+ return tmp;
354
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dockview-core",
3
- "version": "4.2.1",
3
+ "version": "4.2.4",
4
4
  "description": "Zero dependency layout manager supporting tabs, grids and splitviews",
5
5
  "keywords": [
6
6
  "splitview",