dockview-core 4.6.2 → 4.7.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.
Files changed (58) hide show
  1. package/dist/cjs/constants.d.ts +1 -0
  2. package/dist/cjs/constants.js +2 -1
  3. package/dist/cjs/dnd/abstractDragHandler.d.ts +3 -1
  4. package/dist/cjs/dnd/abstractDragHandler.js +6 -2
  5. package/dist/cjs/dnd/droptarget.js +46 -17
  6. package/dist/cjs/dnd/groupDragHandler.d.ts +1 -1
  7. package/dist/cjs/dnd/groupDragHandler.js +2 -2
  8. package/dist/cjs/dockview/components/tab/tab.d.ts +1 -0
  9. package/dist/cjs/dockview/components/tab/tab.js +6 -5
  10. package/dist/cjs/dockview/components/titlebar/voidContainer.d.ts +1 -0
  11. package/dist/cjs/dockview/components/titlebar/voidContainer.js +3 -2
  12. package/dist/cjs/dockview/dockviewComponent.d.ts +6 -0
  13. package/dist/cjs/dockview/dockviewComponent.js +115 -86
  14. package/dist/cjs/gridview/gridview.d.ts +1 -0
  15. package/dist/cjs/gridview/gridview.js +37 -0
  16. package/dist/cjs/overlay/overlayRenderContainer.d.ts +3 -0
  17. package/dist/cjs/overlay/overlayRenderContainer.js +82 -8
  18. package/dist/dockview-core.amd.js +235 -67
  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 +234 -66
  25. package/dist/dockview-core.amd.noStyle.js.map +1 -1
  26. package/dist/dockview-core.cjs.js +235 -67
  27. package/dist/dockview-core.cjs.js.map +1 -1
  28. package/dist/dockview-core.esm.js +235 -67
  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 +235 -67
  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 +234 -66
  39. package/dist/dockview-core.noStyle.js.map +1 -1
  40. package/dist/esm/constants.d.ts +1 -0
  41. package/dist/esm/constants.js +1 -0
  42. package/dist/esm/dnd/abstractDragHandler.d.ts +3 -1
  43. package/dist/esm/dnd/abstractDragHandler.js +6 -2
  44. package/dist/esm/dnd/droptarget.js +46 -17
  45. package/dist/esm/dnd/groupDragHandler.d.ts +1 -1
  46. package/dist/esm/dnd/groupDragHandler.js +2 -2
  47. package/dist/esm/dockview/components/tab/tab.d.ts +1 -0
  48. package/dist/esm/dockview/components/tab/tab.js +6 -5
  49. package/dist/esm/dockview/components/titlebar/voidContainer.d.ts +1 -0
  50. package/dist/esm/dockview/components/titlebar/voidContainer.js +3 -2
  51. package/dist/esm/dockview/dockviewComponent.d.ts +6 -0
  52. package/dist/esm/dockview/dockviewComponent.js +65 -30
  53. package/dist/esm/gridview/gridview.d.ts +1 -0
  54. package/dist/esm/gridview/gridview.js +36 -0
  55. package/dist/esm/overlay/overlayRenderContainer.d.ts +3 -0
  56. package/dist/esm/overlay/overlayRenderContainer.js +69 -8
  57. package/dist/styles/dockview.css +37 -5
  58. package/package.json +1 -1
@@ -5,3 +5,4 @@ export declare const DEFAULT_FLOATING_GROUP_POSITION: {
5
5
  width: number;
6
6
  height: number;
7
7
  };
8
+ export declare const DESERIALIZATION_POPOUT_DELAY_MS = 100;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFAULT_FLOATING_GROUP_POSITION = exports.DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE = void 0;
3
+ exports.DESERIALIZATION_POPOUT_DELAY_MS = exports.DEFAULT_FLOATING_GROUP_POSITION = exports.DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE = void 0;
4
4
  exports.DEFAULT_FLOATING_GROUP_OVERFLOW_SIZE = 100;
5
5
  exports.DEFAULT_FLOATING_GROUP_POSITION = { left: 100, top: 100, width: 300, height: 300 };
6
+ exports.DESERIALIZATION_POPOUT_DELAY_MS = 100;
@@ -1,11 +1,13 @@
1
1
  import { CompositeDisposable, IDisposable } from '../lifecycle';
2
2
  export declare abstract class DragHandler extends CompositeDisposable {
3
3
  protected readonly el: HTMLElement;
4
+ private disabled?;
4
5
  private readonly dataDisposable;
5
6
  private readonly pointerEventsDisposable;
6
7
  private readonly _onDragStart;
7
8
  readonly onDragStart: import("../events").Event<DragEvent>;
8
- constructor(el: HTMLElement);
9
+ constructor(el: HTMLElement, disabled?: boolean | undefined);
10
+ setDisabled(disabled: boolean): void;
9
11
  abstract getData(event: DragEvent): IDisposable;
10
12
  protected isCancelled(_event: DragEvent): boolean;
11
13
  private configure;
@@ -21,9 +21,10 @@ var events_1 = require("../events");
21
21
  var lifecycle_1 = require("../lifecycle");
22
22
  var DragHandler = /** @class */ (function (_super) {
23
23
  __extends(DragHandler, _super);
24
- function DragHandler(el) {
24
+ function DragHandler(el, disabled) {
25
25
  var _this = _super.call(this) || this;
26
26
  _this.el = el;
27
+ _this.disabled = disabled;
27
28
  _this.dataDisposable = new lifecycle_1.MutableDisposable();
28
29
  _this.pointerEventsDisposable = new lifecycle_1.MutableDisposable();
29
30
  _this._onDragStart = new events_1.Emitter();
@@ -32,13 +33,16 @@ var DragHandler = /** @class */ (function (_super) {
32
33
  _this.configure();
33
34
  return _this;
34
35
  }
36
+ DragHandler.prototype.setDisabled = function (disabled) {
37
+ this.disabled = disabled;
38
+ };
35
39
  DragHandler.prototype.isCancelled = function (_event) {
36
40
  return false;
37
41
  };
38
42
  DragHandler.prototype.configure = function () {
39
43
  var _this = this;
40
44
  this.addDisposables(this._onDragStart, (0, events_1.addDisposableListener)(this.el, 'dragstart', function (event) {
41
- if (event.defaultPrevented || _this.isCancelled(event)) {
45
+ if (event.defaultPrevented || _this.isCancelled(event) || _this.disabled) {
42
46
  event.preventDefault();
43
47
  return;
44
48
  }
@@ -21,6 +21,48 @@ var events_1 = require("../events");
21
21
  var lifecycle_1 = require("../lifecycle");
22
22
  var dnd_1 = require("./dnd");
23
23
  var math_1 = require("../math");
24
+ function setGPUOptimizedBounds(element, bounds) {
25
+ var top = bounds.top, left = bounds.left, width = bounds.width, height = bounds.height;
26
+ var topPx = "".concat(Math.round(top), "px");
27
+ var leftPx = "".concat(Math.round(left), "px");
28
+ var widthPx = "".concat(Math.round(width), "px");
29
+ var heightPx = "".concat(Math.round(height), "px");
30
+ // Use traditional positioning but maintain GPU layer
31
+ element.style.top = topPx;
32
+ element.style.left = leftPx;
33
+ element.style.width = widthPx;
34
+ element.style.height = heightPx;
35
+ element.style.visibility = 'visible';
36
+ // Ensure GPU layer is maintained
37
+ if (!element.style.transform || element.style.transform === '') {
38
+ element.style.transform = 'translate3d(0, 0, 0)';
39
+ }
40
+ }
41
+ function setGPUOptimizedBoundsFromStrings(element, bounds) {
42
+ var top = bounds.top, left = bounds.left, width = bounds.width, height = bounds.height;
43
+ // Use traditional positioning but maintain GPU layer
44
+ element.style.top = top;
45
+ element.style.left = left;
46
+ element.style.width = width;
47
+ element.style.height = height;
48
+ element.style.visibility = 'visible';
49
+ // Ensure GPU layer is maintained
50
+ if (!element.style.transform || element.style.transform === '') {
51
+ element.style.transform = 'translate3d(0, 0, 0)';
52
+ }
53
+ }
54
+ function checkBoundsChanged(element, bounds) {
55
+ var top = bounds.top, left = bounds.left, width = bounds.width, height = bounds.height;
56
+ var topPx = "".concat(Math.round(top), "px");
57
+ var leftPx = "".concat(Math.round(left), "px");
58
+ var widthPx = "".concat(Math.round(width), "px");
59
+ var heightPx = "".concat(Math.round(height), "px");
60
+ // Check if position or size changed (back to traditional method)
61
+ return element.style.top !== topPx ||
62
+ element.style.left !== leftPx ||
63
+ element.style.width !== widthPx ||
64
+ element.style.height !== heightPx;
65
+ }
24
66
  var WillShowOverlayEvent = /** @class */ (function (_super) {
25
67
  __extends(WillShowOverlayEvent, _super);
26
68
  function WillShowOverlayEvent(options) {
@@ -328,21 +370,11 @@ var Droptarget = /** @class */ (function (_super) {
328
370
  box_1.left = rootLeft + width - 4;
329
371
  box_1.width = 4;
330
372
  }
331
- var topPx = "".concat(Math.round(box_1.top), "px");
332
- var leftPx = "".concat(Math.round(box_1.left), "px");
333
- var widthPx = "".concat(Math.round(box_1.width), "px");
334
- var heightPx = "".concat(Math.round(box_1.height), "px");
335
- if (overlay_1.style.top === topPx &&
336
- overlay_1.style.left === leftPx &&
337
- overlay_1.style.width === widthPx &&
338
- overlay_1.style.height === heightPx) {
373
+ // Use GPU-optimized bounds checking and setting
374
+ if (!checkBoundsChanged(overlay_1, box_1)) {
339
375
  return;
340
376
  }
341
- overlay_1.style.top = topPx;
342
- overlay_1.style.left = leftPx;
343
- overlay_1.style.width = widthPx;
344
- overlay_1.style.height = heightPx;
345
- overlay_1.style.visibility = 'visible';
377
+ setGPUOptimizedBounds(overlay_1, box_1);
346
378
  overlay_1.className = "dv-drop-target-anchor".concat(this.options.className ? " ".concat(this.options.className) : '');
347
379
  (0, dom_1.toggleClass)(overlay_1, 'dv-drop-target-left', isLeft);
348
380
  (0, dom_1.toggleClass)(overlay_1, 'dv-drop-target-right', isRight);
@@ -394,10 +426,7 @@ var Droptarget = /** @class */ (function (_super) {
394
426
  box.top = "".concat(100 * (1 - size), "%");
395
427
  box.height = "".concat(100 * size, "%");
396
428
  }
397
- this.overlayElement.style.top = box.top;
398
- this.overlayElement.style.left = box.left;
399
- this.overlayElement.style.width = box.width;
400
- this.overlayElement.style.height = box.height;
429
+ setGPUOptimizedBoundsFromStrings(this.overlayElement, box);
401
430
  (0, dom_1.toggleClass)(this.overlayElement, 'dv-drop-target-small-vertical', isSmallY);
402
431
  (0, dom_1.toggleClass)(this.overlayElement, 'dv-drop-target-small-horizontal', isSmallX);
403
432
  (0, dom_1.toggleClass)(this.overlayElement, 'dv-drop-target-left', isLeft);
@@ -6,7 +6,7 @@ export declare class GroupDragHandler extends DragHandler {
6
6
  private readonly accessor;
7
7
  private readonly group;
8
8
  private readonly panelTransfer;
9
- constructor(element: HTMLElement, accessor: DockviewComponent, group: DockviewGroupPanel);
9
+ constructor(element: HTMLElement, accessor: DockviewComponent, group: DockviewGroupPanel, disabled?: boolean);
10
10
  isCancelled(_event: DragEvent): boolean;
11
11
  getData(dragEvent: DragEvent): IDisposable;
12
12
  }
@@ -23,8 +23,8 @@ var dataTransfer_1 = require("./dataTransfer");
23
23
  var ghost_1 = require("./ghost");
24
24
  var GroupDragHandler = /** @class */ (function (_super) {
25
25
  __extends(GroupDragHandler, _super);
26
- function GroupDragHandler(element, accessor, group) {
27
- var _this = _super.call(this, element) || this;
26
+ function GroupDragHandler(element, accessor, group, disabled) {
27
+ var _this = _super.call(this, element, disabled) || this;
28
28
  _this.accessor = accessor;
29
29
  _this.group = group;
30
30
  _this.panelTransfer = dataTransfer_1.LocalSelectionTransfer.getInstance();
@@ -12,6 +12,7 @@ export declare class Tab extends CompositeDisposable {
12
12
  private readonly _element;
13
13
  private readonly dropTarget;
14
14
  private content;
15
+ private readonly dragHandler;
15
16
  private readonly _onPointDown;
16
17
  readonly onPointerDown: Event<MouseEvent>;
17
18
  private readonly _onDropped;
@@ -25,8 +25,8 @@ var abstractDragHandler_1 = require("../../../dnd/abstractDragHandler");
25
25
  var ghost_1 = require("../../../dnd/ghost");
26
26
  var TabDragHandler = /** @class */ (function (_super) {
27
27
  __extends(TabDragHandler, _super);
28
- function TabDragHandler(element, accessor, group, panel) {
29
- var _this = _super.call(this, element) || this;
28
+ function TabDragHandler(element, accessor, group, panel, disabled) {
29
+ var _this = _super.call(this, element, disabled) || this;
30
30
  _this.accessor = accessor;
31
31
  _this.group = group;
32
32
  _this.panel = panel;
@@ -63,7 +63,7 @@ var Tab = /** @class */ (function (_super) {
63
63
  _this._element.tabIndex = 0;
64
64
  _this._element.draggable = !_this.accessor.options.disableDnd;
65
65
  (0, dom_1.toggleClass)(_this.element, 'dv-inactive-tab', true);
66
- var dragHandler = new TabDragHandler(_this._element, _this.accessor, _this.group, _this.panel);
66
+ _this.dragHandler = new TabDragHandler(_this._element, _this.accessor, _this.group, _this.panel, !!_this.accessor.options.disableDnd);
67
67
  _this.dropTarget = new droptarget_1.Droptarget(_this._element, {
68
68
  acceptedTargetZones: ['left', 'right'],
69
69
  overlayModel: { activationSize: { value: 50, type: 'percentage' } },
@@ -80,7 +80,7 @@ var Tab = /** @class */ (function (_super) {
80
80
  getOverrideTarget: function () { var _a; return (_a = group.model.dropTargetContainer) === null || _a === void 0 ? void 0 : _a.model; },
81
81
  });
82
82
  _this.onWillShowOverlay = _this.dropTarget.onWillShowOverlay;
83
- _this.addDisposables(_this._onPointDown, _this._onDropped, _this._onDragStart, dragHandler.onDragStart(function (event) {
83
+ _this.addDisposables(_this._onPointDown, _this._onDropped, _this._onDragStart, _this.dragHandler.onDragStart(function (event) {
84
84
  if (event.dataTransfer) {
85
85
  var style_1 = getComputedStyle(_this.element);
86
86
  var newNode_1 = _this.element.cloneNode(true);
@@ -94,7 +94,7 @@ var Tab = /** @class */ (function (_super) {
94
94
  });
95
95
  }
96
96
  _this._onDragStart.fire(event);
97
- }), dragHandler, (0, events_1.addDisposableListener)(_this._element, 'pointerdown', function (event) {
97
+ }), _this.dragHandler, (0, events_1.addDisposableListener)(_this._element, 'pointerdown', function (event) {
98
98
  _this._onPointDown.fire(event);
99
99
  }), _this.dropTarget.onDrop(function (event) {
100
100
  _this._onDropped.fire(event);
@@ -121,6 +121,7 @@ var Tab = /** @class */ (function (_super) {
121
121
  };
122
122
  Tab.prototype.updateDragAndDropState = function () {
123
123
  this._element.draggable = !this.accessor.options.disableDnd;
124
+ this.dragHandler.setDisabled(!!this.accessor.options.disableDnd);
124
125
  };
125
126
  Tab.prototype.dispose = function () {
126
127
  _super.prototype.dispose.call(this);
@@ -8,6 +8,7 @@ export declare class VoidContainer extends CompositeDisposable {
8
8
  private readonly group;
9
9
  private readonly _element;
10
10
  private readonly dropTarget;
11
+ private readonly handler;
11
12
  private readonly _onDrop;
12
13
  readonly onDrop: Event<DroptargetEvent>;
13
14
  private readonly _onDragStart;
@@ -39,7 +39,7 @@ var VoidContainer = /** @class */ (function (_super) {
39
39
  _this.addDisposables(_this._onDrop, _this._onDragStart, (0, events_1.addDisposableListener)(_this._element, 'pointerdown', function () {
40
40
  _this.accessor.doSetGroupActive(_this.group);
41
41
  }));
42
- var handler = new groupDragHandler_1.GroupDragHandler(_this._element, accessor, group);
42
+ _this.handler = new groupDragHandler_1.GroupDragHandler(_this._element, accessor, group, !!_this.accessor.options.disableDnd);
43
43
  _this.dropTarget = new droptarget_1.Droptarget(_this._element, {
44
44
  acceptedTargetZones: ['center'],
45
45
  canDisplayOverlay: function (event, position) {
@@ -52,7 +52,7 @@ var VoidContainer = /** @class */ (function (_super) {
52
52
  getOverrideTarget: function () { var _a; return (_a = group.model.dropTargetContainer) === null || _a === void 0 ? void 0 : _a.model; },
53
53
  });
54
54
  _this.onWillShowOverlay = _this.dropTarget.onWillShowOverlay;
55
- _this.addDisposables(handler, handler.onDragStart(function (event) {
55
+ _this.addDisposables(_this.handler, _this.handler.onDragStart(function (event) {
56
56
  _this._onDragStart.fire(event);
57
57
  }), _this.dropTarget.onDrop(function (event) {
58
58
  _this._onDrop.fire(event);
@@ -69,6 +69,7 @@ var VoidContainer = /** @class */ (function (_super) {
69
69
  VoidContainer.prototype.updateDragAndDropState = function () {
70
70
  this._element.draggable = !this.accessor.options.disableDnd;
71
71
  (0, dom_1.toggleClass)(this._element, 'dv-draggable', !this.accessor.options.disableDnd);
72
+ this.handler.setDisabled(!!this.accessor.options.disableDnd);
72
73
  };
73
74
  return VoidContainer;
74
75
  }(lifecycle_1.CompositeDisposable));
@@ -219,6 +219,7 @@ export declare class DockviewComponent extends BaseGrid<DockviewGroupPanel> impl
219
219
  private readonly _floatingGroups;
220
220
  private readonly _popoutGroups;
221
221
  private readonly _rootDropTarget;
222
+ private _popoutRestorationPromise;
222
223
  private readonly _onDidRemoveGroup;
223
224
  readonly onDidRemoveGroup: Event<DockviewGroupPanel>;
224
225
  protected readonly _onDidAddGroup: Emitter<DockviewGroupPanel>;
@@ -235,6 +236,11 @@ export declare class DockviewComponent extends BaseGrid<DockviewGroupPanel> impl
235
236
  get renderer(): DockviewPanelRenderer;
236
237
  get api(): DockviewApi;
237
238
  get floatingGroups(): DockviewFloatingGroupPanel[];
239
+ /**
240
+ * Promise that resolves when all popout groups from the last fromJSON call are restored.
241
+ * Useful for tests that need to wait for delayed popout creation.
242
+ */
243
+ get popoutRestorationPromise(): Promise<void>;
238
244
  constructor(container: HTMLElement, options: DockviewComponentOptions);
239
245
  setVisible(panel: DockviewGroupPanel, visible: boolean): void;
240
246
  addPopoutGroup(itemToPopout: DockviewPanel | DockviewGroupPanel, options?: DockviewPopoutGroupOptions): Promise<boolean>;