react-sync-board 0.7.0 → 0.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.
package/dist/esm/index.js CHANGED
@@ -4550,6 +4550,18 @@ var computeDistance = function computeDistance(_ref, _ref2) {
4550
4550
 
4551
4551
  var empty = function empty() {};
4552
4552
 
4553
+ var stopPropagation = function stopPropagation(fn) {
4554
+ return function (arg) {
4555
+ var event = arg.event;
4556
+
4557
+ if (!event.isPropagationStopped()) {
4558
+ return fn(arg);
4559
+ }
4560
+
4561
+ return null;
4562
+ };
4563
+ };
4564
+
4553
4565
  var protect = function protect(fn) {
4554
4566
  return /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
4555
4567
  var _args = arguments;
@@ -4580,6 +4592,35 @@ var protect = function protect(fn) {
4580
4592
  }));
4581
4593
  };
4582
4594
 
4595
+ var PromiseQueue = /*#__PURE__*/function () {
4596
+ function PromiseQueue() {
4597
+ _classCallCheck(this, PromiseQueue);
4598
+
4599
+ _defineProperty(this, "lastPromise", Promise.resolve(true));
4600
+ }
4601
+
4602
+ _createClass(PromiseQueue, [{
4603
+ key: "add",
4604
+ value: function add(operation) {
4605
+ var _this = this;
4606
+
4607
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
4608
+ args[_key - 1] = arguments[_key];
4609
+ }
4610
+
4611
+ return new Promise(function (resolve, reject) {
4612
+ _this.lastPromise = _this.lastPromise.then(function () {
4613
+ return stopPropagation(protect(operation)).apply(void 0, args);
4614
+ }).then(resolve)["catch"](reject);
4615
+ });
4616
+ }
4617
+ }]);
4618
+
4619
+ return PromiseQueue;
4620
+ }();
4621
+
4622
+ var promiseQueue = new PromiseQueue();
4623
+
4583
4624
  var Gesture = function Gesture(_ref6) {
4584
4625
  var children = _ref6.children,
4585
4626
  _ref6$onDrag = _ref6.onDrag,
@@ -4605,50 +4646,16 @@ var Gesture = function Gesture(_ref6) {
4605
4646
  pointers: {},
4606
4647
  mainPointer: undefined
4607
4648
  });
4608
- var queueRef = React__default.useRef([]); // Queue event to avoid async mess
4609
-
4610
- var queue = React__default.useCallback(function (callback, args) {
4611
- queueRef.current.push( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
4612
- return regeneratorRuntime.wrap(function _callee2$(_context2) {
4613
- while (1) {
4614
- switch (_context2.prev = _context2.next) {
4615
- case 0:
4616
- _context2.next = 2;
4617
- return protect(callback)(args);
4618
-
4619
- case 2:
4620
- queueRef.current.shift();
4621
-
4622
- if (!(queueRef.current.length !== 0)) {
4623
- _context2.next = 6;
4624
- break;
4625
- }
4626
-
4627
- _context2.next = 6;
4628
- return protect(queueRef.current[0])();
4629
-
4630
- case 6:
4631
- case "end":
4632
- return _context2.stop();
4633
- }
4634
- }
4635
- }, _callee2);
4636
- })));
4637
-
4638
- if (queueRef.current.length === 1) {
4639
- protect(queueRef.current[0])();
4640
- }
4641
- }, []);
4642
- var onWheel = React__default.useCallback(function (e) {
4643
- var deltaX = e.deltaX,
4644
- deltaY = e.deltaY,
4645
- clientX = e.clientX,
4646
- clientY = e.clientY,
4647
- deltaMode = e.deltaMode,
4648
- ctrlKey = e.ctrlKey,
4649
- altKey = e.altKey,
4650
- metaKey = e.metaKey,
4651
- target = e.target; // On a MacOs trackpad, the pinch gesture sets the ctrlKey to true.
4649
+ var onWheel = React__default.useCallback(function (event) {
4650
+ var deltaX = event.deltaX,
4651
+ deltaY = event.deltaY,
4652
+ clientX = event.clientX,
4653
+ clientY = event.clientY,
4654
+ deltaMode = event.deltaMode,
4655
+ ctrlKey = event.ctrlKey,
4656
+ altKey = event.altKey,
4657
+ metaKey = event.metaKey,
4658
+ target = event.target; // On a MacOs trackpad, the pinch gesture sets the ctrlKey to true.
4652
4659
  // In that situation, we want to use the custom scaling, not the browser default zoom.
4653
4660
  // Hence in this situation we avoid to return immediately.
4654
4661
 
@@ -4661,14 +4668,14 @@ var Gesture = function Gesture(_ref6) {
4661
4668
 
4662
4669
 
4663
4670
  if (isMacOS() && !ctrlKey) {
4664
- queue(onPan, {
4671
+ promiseQueue.add(onPan, {
4665
4672
  deltaX: -2 * deltaX,
4666
4673
  deltaY: -2 * deltaY,
4667
4674
  button: 1,
4668
4675
  ctrlKey: ctrlKey,
4669
4676
  metaKey: metaKey,
4670
4677
  target: target,
4671
- event: e
4678
+ event: event
4672
4679
  });
4673
4680
  } else {
4674
4681
  // Quit if onZoom is not set
@@ -4690,25 +4697,25 @@ var Gesture = function Gesture(_ref6) {
4690
4697
  scale *= 2;
4691
4698
  }
4692
4699
 
4693
- queue(onZoom, {
4700
+ promiseQueue.add(onZoom, {
4694
4701
  scale: scale,
4695
4702
  clientX: clientX,
4696
4703
  clientY: clientY,
4697
- event: e
4704
+ event: event
4698
4705
  });
4699
4706
  }
4700
- }, [onPan, onZoom, queue]);
4701
- var onPointerDown = React__default.useCallback(function (_ref8) {
4702
- var target = _ref8.target,
4703
- button = _ref8.button,
4704
- clientX = _ref8.clientX,
4705
- clientY = _ref8.clientY,
4706
- pointerId = _ref8.pointerId,
4707
- altKey = _ref8.altKey,
4708
- ctrlKey = _ref8.ctrlKey,
4709
- metaKey = _ref8.metaKey,
4710
- isPrimary = _ref8.isPrimary;
4711
- // Add pointer to map
4707
+ }, [onPan, onZoom]);
4708
+ var onPointerDown = React__default.useCallback(function (event) {
4709
+ var target = event.target,
4710
+ button = event.button,
4711
+ clientX = event.clientX,
4712
+ clientY = event.clientY,
4713
+ pointerId = event.pointerId,
4714
+ altKey = event.altKey,
4715
+ ctrlKey = event.ctrlKey,
4716
+ metaKey = event.metaKey,
4717
+ isPrimary = event.isPrimary; // Add pointer to map
4718
+
4712
4719
  stateRef.current.pointers[pointerId] = {
4713
4720
  clientX: clientX,
4714
4721
  clientY: clientY
@@ -4767,27 +4774,28 @@ var Gesture = function Gesture(_ref6) {
4767
4774
  currentButton: button,
4768
4775
  target: target,
4769
4776
  timeStart: Date.now(),
4770
- longTapTimeout: setTimeout( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {
4771
- return regeneratorRuntime.wrap(function _callee3$(_context3) {
4777
+ longTapTimeout: setTimeout( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
4778
+ return regeneratorRuntime.wrap(function _callee2$(_context2) {
4772
4779
  while (1) {
4773
- switch (_context3.prev = _context3.next) {
4780
+ switch (_context2.prev = _context2.next) {
4774
4781
  case 0:
4775
4782
  stateRef.current.noTap = true;
4776
- queue(onLongTap, {
4783
+ promiseQueue.add(onLongTap, {
4777
4784
  clientX: clientX,
4778
4785
  clientY: clientY,
4779
4786
  altKey: altKey,
4780
4787
  ctrlKey: ctrlKey,
4781
4788
  metaKey: metaKey,
4782
- target: target
4789
+ target: target,
4790
+ event: event
4783
4791
  });
4784
4792
 
4785
4793
  case 2:
4786
4794
  case "end":
4787
- return _context3.stop();
4795
+ return _context2.stop();
4788
4796
  }
4789
4797
  }
4790
- }, _callee3);
4798
+ }, _callee2);
4791
4799
  })), 750)
4792
4800
  });
4793
4801
 
@@ -4797,17 +4805,17 @@ var Gesture = function Gesture(_ref6) {
4797
4805
  // eslint-disable-next-line no-console
4798
4806
  console.log("Fail to capture pointer", e);
4799
4807
  }
4800
- }, [onLongTap, queue]);
4801
- var onPointerMove = React__default.useCallback(function (e) {
4808
+ }, [onLongTap]);
4809
+ var onPointerMove = React__default.useCallback(function (event) {
4802
4810
  if (stateRef.current.pressed) {
4803
- var pointerId = e.pointerId,
4804
- eventClientX = e.clientX,
4805
- eventClientY = e.clientY,
4806
- altKey = e.altKey,
4807
- ctrlKey = e.ctrlKey,
4808
- metaKey = e.metaKey,
4809
- buttons = e.buttons,
4810
- pointerType = e.pointerType;
4811
+ var pointerId = event.pointerId,
4812
+ eventClientX = event.clientX,
4813
+ eventClientY = event.clientY,
4814
+ altKey = event.altKey,
4815
+ ctrlKey = event.ctrlKey,
4816
+ metaKey = event.metaKey,
4817
+ buttons = event.buttons,
4818
+ pointerType = event.pointerType;
4811
4819
 
4812
4820
  if (stateRef.current.mainPointer !== pointerId) {
4813
4821
  // Event from other pointer
@@ -4862,7 +4870,7 @@ var Gesture = function Gesture(_ref6) {
4862
4870
  stateRef.current.gestureStart = true; // Clear tap timeout
4863
4871
 
4864
4872
  clearTimeout(stateRef.current.longTapTimeout);
4865
- queue(onDragStart, {
4873
+ promiseQueue.add(onDragStart, {
4866
4874
  deltaX: 0,
4867
4875
  deltaY: 0,
4868
4876
  startX: stateRef.current.startX,
@@ -4876,17 +4884,16 @@ var Gesture = function Gesture(_ref6) {
4876
4884
  ctrlKey: ctrlKey,
4877
4885
  metaKey: metaKey,
4878
4886
  target: stateRef.current.target,
4879
- event: e
4887
+ event: event
4880
4888
  });
4881
- } // Create closure
4882
-
4889
+ }
4883
4890
 
4884
4891
  var deltaX = clientX - stateRef.current.prevX;
4885
4892
  var deltaY = clientY - stateRef.current.prevY;
4886
4893
  var distanceX = clientX - stateRef.current.startX;
4887
4894
  var distanceY = clientY - stateRef.current.startY; // Drag event
4888
4895
 
4889
- queue(onDrag, {
4896
+ promiseQueue.add(onDrag, {
4890
4897
  deltaX: deltaX,
4891
4898
  deltaY: deltaY,
4892
4899
  startX: stateRef.current.startX,
@@ -4900,7 +4907,7 @@ var Gesture = function Gesture(_ref6) {
4900
4907
  ctrlKey: ctrlKey,
4901
4908
  metaKey: metaKey,
4902
4909
  target: stateRef.current.target,
4903
- event: e
4910
+ event: event
4904
4911
  });
4905
4912
  }
4906
4913
 
@@ -4919,7 +4926,7 @@ var Gesture = function Gesture(_ref6) {
4919
4926
 
4920
4927
  var target = stateRef.current.target; // Pan event
4921
4928
 
4922
- queue(onPan, {
4929
+ promiseQueue.add(onPan, {
4923
4930
  deltaX: _deltaX,
4924
4931
  deltaY: _deltaY,
4925
4932
  button: stateRef.current.currentButton,
@@ -4927,18 +4934,18 @@ var Gesture = function Gesture(_ref6) {
4927
4934
  ctrlKey: ctrlKey,
4928
4935
  metaKey: metaKey,
4929
4936
  target: target,
4930
- event: e
4937
+ event: event
4931
4938
  });
4932
4939
 
4933
4940
  if (twoFingers && distance !== stateRef.current.prevDistance && onZoom) {
4934
4941
  var scale = stateRef.current.prevDistance - distance;
4935
4942
 
4936
4943
  if (Math.abs(scale) > 0) {
4937
- queue(onZoom, {
4944
+ promiseQueue.add(onZoom, {
4938
4945
  scale: scale,
4939
4946
  clientX: clientX,
4940
4947
  clientY: clientY,
4941
- event: e
4948
+ event: event
4942
4949
  });
4943
4950
  stateRef.current.prevDistance = distance;
4944
4951
  }
@@ -4948,15 +4955,15 @@ var Gesture = function Gesture(_ref6) {
4948
4955
  stateRef.current.prevX = clientX;
4949
4956
  stateRef.current.prevY = clientY;
4950
4957
  }
4951
- }, [mainAction, onDrag, onDragStart, onPan, onZoom, queue]);
4952
- var onPointerUp = React__default.useCallback(function (e) {
4953
- var clientX = e.clientX,
4954
- clientY = e.clientY,
4955
- altKey = e.altKey,
4956
- ctrlKey = e.ctrlKey,
4957
- metaKey = e.metaKey,
4958
- target = e.target,
4959
- pointerId = e.pointerId;
4958
+ }, [mainAction, onDrag, onDragStart, onPan, onZoom]);
4959
+ var onPointerUp = React__default.useCallback(function (event) {
4960
+ var clientX = event.clientX,
4961
+ clientY = event.clientY,
4962
+ altKey = event.altKey,
4963
+ ctrlKey = event.ctrlKey,
4964
+ metaKey = event.metaKey,
4965
+ target = event.target,
4966
+ pointerId = event.pointerId;
4960
4967
 
4961
4968
  if (!stateRef.current.pointers[pointerId]) {
4962
4969
  // Pointer already gone previously with another event
@@ -4995,7 +5002,7 @@ var Gesture = function Gesture(_ref6) {
4995
5002
  if (stateRef.current.moving) {
4996
5003
  // If we were moving, send drag end event
4997
5004
  stateRef.current.moving = false;
4998
- queue(onDragEnd, {
5005
+ promiseQueue.add(onDragEnd, {
4999
5006
  deltaX: clientX - stateRef.current.prevX,
5000
5007
  deltaY: clientY - stateRef.current.prevY,
5001
5008
  startX: stateRef.current.startX,
@@ -5008,7 +5015,7 @@ var Gesture = function Gesture(_ref6) {
5008
5015
  altKey: altKey,
5009
5016
  ctrlKey: ctrlKey,
5010
5017
  metaKey: metaKey,
5011
- event: e
5018
+ event: event
5012
5019
  });
5013
5020
  wrapperRef.current.style.cursor = "auto";
5014
5021
  } else {
@@ -5018,20 +5025,35 @@ var Gesture = function Gesture(_ref6) {
5018
5025
  stateRef.current.noTap = false;
5019
5026
  } // Send tap event only if time less than 300ms
5020
5027
  else if (stateRef.current.timeStart - now < 300) {
5021
- queue(onTap, {
5028
+ promiseQueue.add(onTap, {
5022
5029
  clientX: clientX,
5023
5030
  clientY: clientY,
5024
5031
  altKey: altKey,
5025
5032
  ctrlKey: ctrlKey,
5026
5033
  metaKey: metaKey,
5027
- target: target
5034
+ target: target,
5035
+ event: event
5028
5036
  });
5029
5037
  }
5030
5038
  }
5031
- }, [onDragEnd, onTap, queue]);
5039
+ }, [onDragEnd, onTap]);
5032
5040
  var onDoubleTapHandler = React__default.useCallback(function (event) {
5033
- queue(onDoubleTap, event);
5034
- }, [onDoubleTap, queue]);
5041
+ var clientX = event.clientX,
5042
+ clientY = event.clientY,
5043
+ altKey = event.altKey,
5044
+ ctrlKey = event.ctrlKey,
5045
+ metaKey = event.metaKey,
5046
+ target = event.target;
5047
+ promiseQueue.add(onDoubleTap, {
5048
+ clientX: clientX,
5049
+ clientY: clientY,
5050
+ altKey: altKey,
5051
+ ctrlKey: ctrlKey,
5052
+ metaKey: metaKey,
5053
+ target: target,
5054
+ event: event
5055
+ });
5056
+ }, [onDoubleTap]);
5035
5057
  return /*#__PURE__*/React__default.createElement("div", {
5036
5058
  onWheel: onWheel,
5037
5059
  onPointerDown: onPointerDown,
@@ -6130,7 +6152,6 @@ var Selector = function Selector(_ref) {
6130
6152
 
6131
6153
  var ActionPane = function ActionPane(_ref) {
6132
6154
  var children = _ref.children;
6133
- _ref.moveFirst;
6134
6155
 
6135
6156
  var _useItemActions = useItemActions(),
6136
6157
  moveItems = _useItemActions.moveItems,
@@ -6209,23 +6230,24 @@ var ActionPane = function ActionPane(_ref) {
6209
6230
  var snapshot = _ref4.snapshot;
6210
6231
  return /*#__PURE__*/function () {
6211
6232
  var _ref6 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(_ref5) {
6212
- var deltaX, deltaY, _yield$snapshot$getPr, scale, moveX, moveY;
6233
+ var deltaX, deltaY, originalEvent, _yield$snapshot$getPr, scale, moveX, moveY;
6213
6234
 
6214
6235
  return regeneratorRuntime.wrap(function _callee2$(_context2) {
6215
6236
  while (1) {
6216
6237
  switch (_context2.prev = _context2.next) {
6217
6238
  case 0:
6218
- deltaX = _ref5.deltaX, deltaY = _ref5.deltaY;
6239
+ deltaX = _ref5.deltaX, deltaY = _ref5.deltaY, originalEvent = _ref5.event;
6219
6240
 
6220
6241
  if (!actionRef.current.moving) {
6221
- _context2.next = 10;
6242
+ _context2.next = 11;
6222
6243
  break;
6223
6244
  }
6224
6245
 
6225
- _context2.next = 4;
6246
+ originalEvent.stopPropagation();
6247
+ _context2.next = 5;
6226
6248
  return snapshot.getPromise(BoardTransformAtom);
6227
6249
 
6228
- case 4:
6250
+ case 5:
6229
6251
  _yield$snapshot$getPr = _context2.sent;
6230
6252
  scale = _yield$snapshot$getPr.scale;
6231
6253
  moveX = actionRef.current.remainX + deltaX / scale;
@@ -6240,7 +6262,7 @@ var ActionPane = function ActionPane(_ref) {
6240
6262
  }) : prev;
6241
6263
  });
6242
6264
 
6243
- case 10:
6265
+ case 11:
6244
6266
  case "end":
6245
6267
  return _context2.stop();
6246
6268
  }
@@ -7052,22 +7074,12 @@ var PanZoom = function PanZoom(_ref) {
7052
7074
  }, [setBoardState, zoomToCenter]);
7053
7075
  var onPan = React__default.useCallback( /*#__PURE__*/function () {
7054
7076
  var _ref6 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(_ref5) {
7055
- var deltaX, deltaY, target, insideItem;
7077
+ var deltaX, deltaY;
7056
7078
  return regeneratorRuntime.wrap(function _callee2$(_context2) {
7057
7079
  while (1) {
7058
7080
  switch (_context2.prev = _context2.next) {
7059
7081
  case 0:
7060
- deltaX = _ref5.deltaX, deltaY = _ref5.deltaY, target = _ref5.target;
7061
- insideItem = insideClass(target, "item") && !insideClass(target, "locked");
7062
-
7063
- if (!(insideItem && moveFirst)) {
7064
- _context2.next = 4;
7065
- break;
7066
- }
7067
-
7068
- return _context2.abrupt("return");
7069
-
7070
- case 4:
7082
+ deltaX = _ref5.deltaX, deltaY = _ref5.deltaY;
7071
7083
  setDim(function (prev) {
7072
7084
  return _objectSpread2(_objectSpread2({}, prev), {}, {
7073
7085
  translateX: prev.translateX + deltaX,
@@ -7089,7 +7101,7 @@ var PanZoom = function PanZoom(_ref) {
7089
7101
  }) : prev;
7090
7102
  });
7091
7103
 
7092
- case 8:
7104
+ case 5:
7093
7105
  case "end":
7094
7106
  return _context2.stop();
7095
7107
  }
@@ -7100,7 +7112,7 @@ var PanZoom = function PanZoom(_ref) {
7100
7112
  return function (_x) {
7101
7113
  return _ref6.apply(this, arguments);
7102
7114
  };
7103
- }(), [moveFirst, setBoardState, setDim]);
7115
+ }(), [setBoardState, setDim]);
7104
7116
  var onKeyDown = useRecoilCallback(function (_ref7) {
7105
7117
  var snapshot = _ref7.snapshot;
7106
7118
  return /*#__PURE__*/function () {