dockview-react 3.0.2 → 3.1.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.
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * dockview-react
3
- * @version 3.0.2
3
+ * @version 3.1.1
4
4
  * @link https://github.com/mathuo/dockview
5
5
  * @license MIT
6
6
  */
@@ -4742,8 +4742,8 @@ define(['exports', 'react', 'react-dom'], (function (exports, React, ReactDOM) {
4742
4742
  this.accessor = accessor;
4743
4743
  this.group = group;
4744
4744
  this.content = undefined;
4745
- this._onChanged = new Emitter();
4746
- this.onChanged = this._onChanged.event;
4745
+ this._onPointDown = new Emitter();
4746
+ this.onPointerDown = this._onPointDown.event;
4747
4747
  this._onDropped = new Emitter();
4748
4748
  this.onDrop = this._onDropped.event;
4749
4749
  this._onDragStart = new Emitter();
@@ -4773,13 +4773,10 @@ define(['exports', 'react', 'react-dom'], (function (exports, React, ReactDOM) {
4773
4773
  },
4774
4774
  });
4775
4775
  this.onWillShowOverlay = this.dropTarget.onWillShowOverlay;
4776
- this.addDisposables(this._onChanged, this._onDropped, this._onDragStart, dragHandler.onDragStart((event) => {
4776
+ this.addDisposables(this._onPointDown, this._onDropped, this._onDragStart, dragHandler.onDragStart((event) => {
4777
4777
  this._onDragStart.fire(event);
4778
4778
  }), dragHandler, addDisposableListener(this._element, 'pointerdown', (event) => {
4779
- if (event.defaultPrevented) {
4780
- return;
4781
- }
4782
- this._onChanged.fire(event);
4779
+ this._onPointDown.fire(event);
4783
4780
  }), this.dropTarget.onDrop((event) => {
4784
4781
  this._onDropped.fire(event);
4785
4782
  }), this.dropTarget);
@@ -5057,6 +5054,9 @@ define(['exports', 'react', 'react-dom'], (function (exports, React, ReactDOM) {
5057
5054
  delete(id) {
5058
5055
  const index = this.tabs.findIndex((tab) => tab.value.panel.id === id);
5059
5056
  const tabToRemove = this.tabs.splice(index, 1)[0];
5057
+ if (!tabToRemove) {
5058
+ throw new Error(`dockview: Tab not found`);
5059
+ }
5060
5060
  const { value, disposable } = tabToRemove;
5061
5061
  disposable.dispose();
5062
5062
  value.dispose();
@@ -5077,7 +5077,10 @@ define(['exports', 'react', 'react-dom'], (function (exports, React, ReactDOM) {
5077
5077
  tab.setContent(panel.view.tab);
5078
5078
  const disposable = new CompositeDisposable(tab.onDragStart((event) => {
5079
5079
  this._onTabDragStart.fire({ nativeEvent: event, panel });
5080
- }), tab.onChanged((event) => {
5080
+ }), tab.onPointerDown((event) => {
5081
+ if (event.defaultPrevented) {
5082
+ return;
5083
+ }
5081
5084
  const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
5082
5085
  const isFloatingWithOnePanel = this.group.api.location.type === 'floating' &&
5083
5086
  this.size === 1;
@@ -5095,12 +5098,12 @@ define(['exports', 'react', 'react-dom'], (function (exports, React, ReactDOM) {
5095
5098
  });
5096
5099
  return;
5097
5100
  }
5098
- const isLeftClick = event.button === 0;
5099
- if (!isLeftClick || event.defaultPrevented) {
5100
- return;
5101
- }
5102
- if (this.group.activePanel !== panel) {
5103
- this.group.model.openPanel(panel);
5101
+ switch (event.button) {
5102
+ case 0: // left click or touch
5103
+ if (this.group.activePanel !== panel) {
5104
+ this.group.model.openPanel(panel);
5105
+ }
5106
+ break;
5104
5107
  }
5105
5108
  }), tab.onDrop((event) => {
5106
5109
  this._onDrop.fire({
@@ -6050,12 +6053,11 @@ define(['exports', 'react', 'react-dom'], (function (exports, React, ReactDOM) {
6050
6053
  constructor(id, accessor) {
6051
6054
  super(id, '__dockviewgroup__');
6052
6055
  this.accessor = accessor;
6053
- this._mutableDisposable = new MutableDisposable();
6054
6056
  this._onDidLocationChange = new Emitter();
6055
6057
  this.onDidLocationChange = this._onDidLocationChange.event;
6056
6058
  this._onDidActivePanelChange = new Emitter();
6057
6059
  this.onDidActivePanelChange = this._onDidActivePanelChange.event;
6058
- this.addDisposables(this._onDidLocationChange, this._onDidActivePanelChange, this._mutableDisposable);
6060
+ this.addDisposables(this._onDidLocationChange, this._onDidActivePanelChange);
6059
6061
  }
6060
6062
  close() {
6061
6063
  if (!this._group) {
@@ -6113,20 +6115,7 @@ define(['exports', 'react', 'react-dom'], (function (exports, React, ReactDOM) {
6113
6115
  }
6114
6116
  }
6115
6117
  initialize(group) {
6116
- /**
6117
- * TODO: Annoying initialization order caveat, find a better way to initialize and avoid needing null checks
6118
- *
6119
- * Due to the order on initialization we know that the model isn't defined until later in the same stack-frame of setup.
6120
- * By queuing a microtask we can ensure the setup is completed within the same stack-frame, but after everything else has
6121
- * finished ensuring the `model` is defined.
6122
- */
6123
6118
  this._group = group;
6124
- queueMicrotask(() => {
6125
- this._mutableDisposable.value =
6126
- this._group.model.onDidActivePanelChange((event) => {
6127
- this._onDidActivePanelChange.fire(event);
6128
- });
6129
- });
6130
6119
  }
6131
6120
  }
6132
6121
 
@@ -6196,6 +6185,9 @@ define(['exports', 'react', 'react-dom'], (function (exports, React, ReactDOM) {
6196
6185
  }, new DockviewGroupPanelApiImpl(id, accessor));
6197
6186
  this.api.initialize(this); // cannot use 'this' after after 'super' call
6198
6187
  this._model = new DockviewGroupPanelModel(this.element, accessor, id, options, this);
6188
+ this.addDisposables(this.model.onDidActivePanelChange((event) => {
6189
+ this.api._onDidActivePanelChange.fire(event);
6190
+ }));
6199
6191
  }
6200
6192
  focus() {
6201
6193
  if (!this.api.isActive) {
@@ -6543,9 +6535,6 @@ define(['exports', 'react', 'react-dom'], (function (exports, React, ReactDOM) {
6543
6535
  this.action.appendChild(createCloseButton());
6544
6536
  this._element.appendChild(this._content);
6545
6537
  this._element.appendChild(this.action);
6546
- this.addDisposables(addDisposableListener(this.action, 'pointerdown', (ev) => {
6547
- ev.preventDefault();
6548
- }));
6549
6538
  this.render();
6550
6539
  }
6551
6540
  init(params) {
@@ -7827,6 +7816,9 @@ define(['exports', 'react', 'react-dom'], (function (exports, React, ReactDOM) {
7827
7816
  addDisposableWindowListener(_window.window, 'resize', () => {
7828
7817
  group.layout(_window.window.innerWidth, _window.window.innerHeight);
7829
7818
  }), overlayRenderContainer, exports.DockviewDisposable.from(() => {
7819
+ if (this.isDisposed) {
7820
+ return; // cleanup may run after instance is disposed
7821
+ }
7830
7822
  if (isGroupAddedToDom &&
7831
7823
  this.getPanel(referenceGroup.id)) {
7832
7824
  this.movingLock(() => moveGroupWithoutDestroying({
@@ -10526,8 +10518,9 @@ define(['exports', 'react', 'react-dom'], (function (exports, React, ReactDOM) {
10526
10518
  return title;
10527
10519
  }
10528
10520
  const DockviewDefaultTab = (_a) => {
10529
- var { api, containerApi: _containerApi, params: _params, hideClose, closeActionOverride } = _a, rest = __rest(_a, ["api", "containerApi", "params", "hideClose", "closeActionOverride"]);
10521
+ var { api, containerApi: _containerApi, params: _params, hideClose, closeActionOverride, onPointerDown, onPointerUp, onPointerLeave } = _a, rest = __rest(_a, ["api", "containerApi", "params", "hideClose", "closeActionOverride", "onPointerDown", "onPointerUp", "onPointerLeave"]);
10530
10522
  const title = useTitle(api);
10523
+ const isMiddleMouseButton = React.useRef(false);
10531
10524
  const onClose = React.useCallback((event) => {
10532
10525
  event.preventDefault();
10533
10526
  if (closeActionOverride) {
@@ -10537,21 +10530,27 @@ define(['exports', 'react', 'react-dom'], (function (exports, React, ReactDOM) {
10537
10530
  api.close();
10538
10531
  }
10539
10532
  }, [api, closeActionOverride]);
10540
- const onPointerDown = React.useCallback((e) => {
10541
- e.preventDefault();
10533
+ const onBtnPointerDown = React.useCallback((event) => {
10534
+ event.preventDefault();
10542
10535
  }, []);
10543
- const onClick = React.useCallback((event) => {
10544
- if (event.defaultPrevented) {
10545
- return;
10546
- }
10547
- api.setActive();
10548
- if (rest.onClick) {
10549
- rest.onClick(event);
10550
- }
10551
- }, [api, rest.onClick]);
10552
- return (React.createElement("div", Object.assign({ "data-testid": "dockview-dv-default-tab" }, rest, { onClick: onClick, className: "dv-default-tab" }),
10536
+ const _onPointerDown = React.useCallback((event) => {
10537
+ isMiddleMouseButton.current = event.button === 1;
10538
+ onPointerDown === null || onPointerDown === void 0 ? void 0 : onPointerDown(event);
10539
+ }, [onPointerDown]);
10540
+ const _onPointerUp = React.useCallback((event) => {
10541
+ if (isMiddleMouseButton && event.button === 1 && !hideClose) {
10542
+ isMiddleMouseButton.current = false;
10543
+ onClose(event);
10544
+ }
10545
+ onPointerUp === null || onPointerUp === void 0 ? void 0 : onPointerUp(event);
10546
+ }, [onPointerUp, onClose, hideClose]);
10547
+ const _onPointerLeave = React.useCallback((event) => {
10548
+ isMiddleMouseButton.current = false;
10549
+ onPointerLeave === null || onPointerLeave === void 0 ? void 0 : onPointerLeave(event);
10550
+ }, [onPointerLeave]);
10551
+ return (React.createElement("div", Object.assign({ "data-testid": "dockview-dv-default-tab" }, rest, { onPointerDown: _onPointerDown, onPointerUp: _onPointerUp, onPointerLeave: _onPointerLeave, className: "dv-default-tab" }),
10553
10552
  React.createElement("span", { className: "dv-default-tab-content" }, title),
10554
- !hideClose && (React.createElement("div", { className: "dv-default-tab-action", onPointerDown: onPointerDown, onClick: onClose },
10553
+ !hideClose && (React.createElement("div", { className: "dv-default-tab-action", onPointerDown: onBtnPointerDown, onClick: onClose },
10555
10554
  React.createElement(CloseButton, null)))));
10556
10555
  };
10557
10556