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/cjs/index.js CHANGED
@@ -4578,6 +4578,18 @@ var computeDistance = function computeDistance(_ref, _ref2) {
4578
4578
 
4579
4579
  var empty = function empty() {};
4580
4580
 
4581
+ var stopPropagation = function stopPropagation(fn) {
4582
+ return function (arg) {
4583
+ var event = arg.event;
4584
+
4585
+ if (!event.isPropagationStopped()) {
4586
+ return fn(arg);
4587
+ }
4588
+
4589
+ return null;
4590
+ };
4591
+ };
4592
+
4581
4593
  var protect = function protect(fn) {
4582
4594
  return /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
4583
4595
  var _args = arguments;
@@ -4608,6 +4620,35 @@ var protect = function protect(fn) {
4608
4620
  }));
4609
4621
  };
4610
4622
 
4623
+ var PromiseQueue = /*#__PURE__*/function () {
4624
+ function PromiseQueue() {
4625
+ _classCallCheck(this, PromiseQueue);
4626
+
4627
+ _defineProperty(this, "lastPromise", Promise.resolve(true));
4628
+ }
4629
+
4630
+ _createClass(PromiseQueue, [{
4631
+ key: "add",
4632
+ value: function add(operation) {
4633
+ var _this = this;
4634
+
4635
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
4636
+ args[_key - 1] = arguments[_key];
4637
+ }
4638
+
4639
+ return new Promise(function (resolve, reject) {
4640
+ _this.lastPromise = _this.lastPromise.then(function () {
4641
+ return stopPropagation(protect(operation)).apply(void 0, args);
4642
+ }).then(resolve)["catch"](reject);
4643
+ });
4644
+ }
4645
+ }]);
4646
+
4647
+ return PromiseQueue;
4648
+ }();
4649
+
4650
+ var promiseQueue = new PromiseQueue();
4651
+
4611
4652
  var Gesture = function Gesture(_ref6) {
4612
4653
  var children = _ref6.children,
4613
4654
  _ref6$onDrag = _ref6.onDrag,
@@ -4633,50 +4674,16 @@ var Gesture = function Gesture(_ref6) {
4633
4674
  pointers: {},
4634
4675
  mainPointer: undefined
4635
4676
  });
4636
- var queueRef = React__default['default'].useRef([]); // Queue event to avoid async mess
4637
-
4638
- var queue = React__default['default'].useCallback(function (callback, args) {
4639
- queueRef.current.push( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
4640
- return regeneratorRuntime.wrap(function _callee2$(_context2) {
4641
- while (1) {
4642
- switch (_context2.prev = _context2.next) {
4643
- case 0:
4644
- _context2.next = 2;
4645
- return protect(callback)(args);
4646
-
4647
- case 2:
4648
- queueRef.current.shift();
4649
-
4650
- if (!(queueRef.current.length !== 0)) {
4651
- _context2.next = 6;
4652
- break;
4653
- }
4654
-
4655
- _context2.next = 6;
4656
- return protect(queueRef.current[0])();
4657
-
4658
- case 6:
4659
- case "end":
4660
- return _context2.stop();
4661
- }
4662
- }
4663
- }, _callee2);
4664
- })));
4665
-
4666
- if (queueRef.current.length === 1) {
4667
- protect(queueRef.current[0])();
4668
- }
4669
- }, []);
4670
- var onWheel = React__default['default'].useCallback(function (e) {
4671
- var deltaX = e.deltaX,
4672
- deltaY = e.deltaY,
4673
- clientX = e.clientX,
4674
- clientY = e.clientY,
4675
- deltaMode = e.deltaMode,
4676
- ctrlKey = e.ctrlKey,
4677
- altKey = e.altKey,
4678
- metaKey = e.metaKey,
4679
- target = e.target; // On a MacOs trackpad, the pinch gesture sets the ctrlKey to true.
4677
+ var onWheel = React__default['default'].useCallback(function (event) {
4678
+ var deltaX = event.deltaX,
4679
+ deltaY = event.deltaY,
4680
+ clientX = event.clientX,
4681
+ clientY = event.clientY,
4682
+ deltaMode = event.deltaMode,
4683
+ ctrlKey = event.ctrlKey,
4684
+ altKey = event.altKey,
4685
+ metaKey = event.metaKey,
4686
+ target = event.target; // On a MacOs trackpad, the pinch gesture sets the ctrlKey to true.
4680
4687
  // In that situation, we want to use the custom scaling, not the browser default zoom.
4681
4688
  // Hence in this situation we avoid to return immediately.
4682
4689
 
@@ -4689,14 +4696,14 @@ var Gesture = function Gesture(_ref6) {
4689
4696
 
4690
4697
 
4691
4698
  if (isMacOS() && !ctrlKey) {
4692
- queue(onPan, {
4699
+ promiseQueue.add(onPan, {
4693
4700
  deltaX: -2 * deltaX,
4694
4701
  deltaY: -2 * deltaY,
4695
4702
  button: 1,
4696
4703
  ctrlKey: ctrlKey,
4697
4704
  metaKey: metaKey,
4698
4705
  target: target,
4699
- event: e
4706
+ event: event
4700
4707
  });
4701
4708
  } else {
4702
4709
  // Quit if onZoom is not set
@@ -4718,25 +4725,25 @@ var Gesture = function Gesture(_ref6) {
4718
4725
  scale *= 2;
4719
4726
  }
4720
4727
 
4721
- queue(onZoom, {
4728
+ promiseQueue.add(onZoom, {
4722
4729
  scale: scale,
4723
4730
  clientX: clientX,
4724
4731
  clientY: clientY,
4725
- event: e
4732
+ event: event
4726
4733
  });
4727
4734
  }
4728
- }, [onPan, onZoom, queue]);
4729
- var onPointerDown = React__default['default'].useCallback(function (_ref8) {
4730
- var target = _ref8.target,
4731
- button = _ref8.button,
4732
- clientX = _ref8.clientX,
4733
- clientY = _ref8.clientY,
4734
- pointerId = _ref8.pointerId,
4735
- altKey = _ref8.altKey,
4736
- ctrlKey = _ref8.ctrlKey,
4737
- metaKey = _ref8.metaKey,
4738
- isPrimary = _ref8.isPrimary;
4739
- // Add pointer to map
4735
+ }, [onPan, onZoom]);
4736
+ var onPointerDown = React__default['default'].useCallback(function (event) {
4737
+ var target = event.target,
4738
+ button = event.button,
4739
+ clientX = event.clientX,
4740
+ clientY = event.clientY,
4741
+ pointerId = event.pointerId,
4742
+ altKey = event.altKey,
4743
+ ctrlKey = event.ctrlKey,
4744
+ metaKey = event.metaKey,
4745
+ isPrimary = event.isPrimary; // Add pointer to map
4746
+
4740
4747
  stateRef.current.pointers[pointerId] = {
4741
4748
  clientX: clientX,
4742
4749
  clientY: clientY
@@ -4795,27 +4802,28 @@ var Gesture = function Gesture(_ref6) {
4795
4802
  currentButton: button,
4796
4803
  target: target,
4797
4804
  timeStart: Date.now(),
4798
- longTapTimeout: setTimeout( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {
4799
- return regeneratorRuntime.wrap(function _callee3$(_context3) {
4805
+ longTapTimeout: setTimeout( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
4806
+ return regeneratorRuntime.wrap(function _callee2$(_context2) {
4800
4807
  while (1) {
4801
- switch (_context3.prev = _context3.next) {
4808
+ switch (_context2.prev = _context2.next) {
4802
4809
  case 0:
4803
4810
  stateRef.current.noTap = true;
4804
- queue(onLongTap, {
4811
+ promiseQueue.add(onLongTap, {
4805
4812
  clientX: clientX,
4806
4813
  clientY: clientY,
4807
4814
  altKey: altKey,
4808
4815
  ctrlKey: ctrlKey,
4809
4816
  metaKey: metaKey,
4810
- target: target
4817
+ target: target,
4818
+ event: event
4811
4819
  });
4812
4820
 
4813
4821
  case 2:
4814
4822
  case "end":
4815
- return _context3.stop();
4823
+ return _context2.stop();
4816
4824
  }
4817
4825
  }
4818
- }, _callee3);
4826
+ }, _callee2);
4819
4827
  })), 750)
4820
4828
  });
4821
4829
 
@@ -4825,17 +4833,17 @@ var Gesture = function Gesture(_ref6) {
4825
4833
  // eslint-disable-next-line no-console
4826
4834
  console.log("Fail to capture pointer", e);
4827
4835
  }
4828
- }, [onLongTap, queue]);
4829
- var onPointerMove = React__default['default'].useCallback(function (e) {
4836
+ }, [onLongTap]);
4837
+ var onPointerMove = React__default['default'].useCallback(function (event) {
4830
4838
  if (stateRef.current.pressed) {
4831
- var pointerId = e.pointerId,
4832
- eventClientX = e.clientX,
4833
- eventClientY = e.clientY,
4834
- altKey = e.altKey,
4835
- ctrlKey = e.ctrlKey,
4836
- metaKey = e.metaKey,
4837
- buttons = e.buttons,
4838
- pointerType = e.pointerType;
4839
+ var pointerId = event.pointerId,
4840
+ eventClientX = event.clientX,
4841
+ eventClientY = event.clientY,
4842
+ altKey = event.altKey,
4843
+ ctrlKey = event.ctrlKey,
4844
+ metaKey = event.metaKey,
4845
+ buttons = event.buttons,
4846
+ pointerType = event.pointerType;
4839
4847
 
4840
4848
  if (stateRef.current.mainPointer !== pointerId) {
4841
4849
  // Event from other pointer
@@ -4890,7 +4898,7 @@ var Gesture = function Gesture(_ref6) {
4890
4898
  stateRef.current.gestureStart = true; // Clear tap timeout
4891
4899
 
4892
4900
  clearTimeout(stateRef.current.longTapTimeout);
4893
- queue(onDragStart, {
4901
+ promiseQueue.add(onDragStart, {
4894
4902
  deltaX: 0,
4895
4903
  deltaY: 0,
4896
4904
  startX: stateRef.current.startX,
@@ -4904,17 +4912,16 @@ var Gesture = function Gesture(_ref6) {
4904
4912
  ctrlKey: ctrlKey,
4905
4913
  metaKey: metaKey,
4906
4914
  target: stateRef.current.target,
4907
- event: e
4915
+ event: event
4908
4916
  });
4909
- } // Create closure
4910
-
4917
+ }
4911
4918
 
4912
4919
  var deltaX = clientX - stateRef.current.prevX;
4913
4920
  var deltaY = clientY - stateRef.current.prevY;
4914
4921
  var distanceX = clientX - stateRef.current.startX;
4915
4922
  var distanceY = clientY - stateRef.current.startY; // Drag event
4916
4923
 
4917
- queue(onDrag, {
4924
+ promiseQueue.add(onDrag, {
4918
4925
  deltaX: deltaX,
4919
4926
  deltaY: deltaY,
4920
4927
  startX: stateRef.current.startX,
@@ -4928,7 +4935,7 @@ var Gesture = function Gesture(_ref6) {
4928
4935
  ctrlKey: ctrlKey,
4929
4936
  metaKey: metaKey,
4930
4937
  target: stateRef.current.target,
4931
- event: e
4938
+ event: event
4932
4939
  });
4933
4940
  }
4934
4941
 
@@ -4947,7 +4954,7 @@ var Gesture = function Gesture(_ref6) {
4947
4954
 
4948
4955
  var target = stateRef.current.target; // Pan event
4949
4956
 
4950
- queue(onPan, {
4957
+ promiseQueue.add(onPan, {
4951
4958
  deltaX: _deltaX,
4952
4959
  deltaY: _deltaY,
4953
4960
  button: stateRef.current.currentButton,
@@ -4955,18 +4962,18 @@ var Gesture = function Gesture(_ref6) {
4955
4962
  ctrlKey: ctrlKey,
4956
4963
  metaKey: metaKey,
4957
4964
  target: target,
4958
- event: e
4965
+ event: event
4959
4966
  });
4960
4967
 
4961
4968
  if (twoFingers && distance !== stateRef.current.prevDistance && onZoom) {
4962
4969
  var scale = stateRef.current.prevDistance - distance;
4963
4970
 
4964
4971
  if (Math.abs(scale) > 0) {
4965
- queue(onZoom, {
4972
+ promiseQueue.add(onZoom, {
4966
4973
  scale: scale,
4967
4974
  clientX: clientX,
4968
4975
  clientY: clientY,
4969
- event: e
4976
+ event: event
4970
4977
  });
4971
4978
  stateRef.current.prevDistance = distance;
4972
4979
  }
@@ -4976,15 +4983,15 @@ var Gesture = function Gesture(_ref6) {
4976
4983
  stateRef.current.prevX = clientX;
4977
4984
  stateRef.current.prevY = clientY;
4978
4985
  }
4979
- }, [mainAction, onDrag, onDragStart, onPan, onZoom, queue]);
4980
- var onPointerUp = React__default['default'].useCallback(function (e) {
4981
- var clientX = e.clientX,
4982
- clientY = e.clientY,
4983
- altKey = e.altKey,
4984
- ctrlKey = e.ctrlKey,
4985
- metaKey = e.metaKey,
4986
- target = e.target,
4987
- pointerId = e.pointerId;
4986
+ }, [mainAction, onDrag, onDragStart, onPan, onZoom]);
4987
+ var onPointerUp = React__default['default'].useCallback(function (event) {
4988
+ var clientX = event.clientX,
4989
+ clientY = event.clientY,
4990
+ altKey = event.altKey,
4991
+ ctrlKey = event.ctrlKey,
4992
+ metaKey = event.metaKey,
4993
+ target = event.target,
4994
+ pointerId = event.pointerId;
4988
4995
 
4989
4996
  if (!stateRef.current.pointers[pointerId]) {
4990
4997
  // Pointer already gone previously with another event
@@ -5023,7 +5030,7 @@ var Gesture = function Gesture(_ref6) {
5023
5030
  if (stateRef.current.moving) {
5024
5031
  // If we were moving, send drag end event
5025
5032
  stateRef.current.moving = false;
5026
- queue(onDragEnd, {
5033
+ promiseQueue.add(onDragEnd, {
5027
5034
  deltaX: clientX - stateRef.current.prevX,
5028
5035
  deltaY: clientY - stateRef.current.prevY,
5029
5036
  startX: stateRef.current.startX,
@@ -5036,7 +5043,7 @@ var Gesture = function Gesture(_ref6) {
5036
5043
  altKey: altKey,
5037
5044
  ctrlKey: ctrlKey,
5038
5045
  metaKey: metaKey,
5039
- event: e
5046
+ event: event
5040
5047
  });
5041
5048
  wrapperRef.current.style.cursor = "auto";
5042
5049
  } else {
@@ -5046,20 +5053,35 @@ var Gesture = function Gesture(_ref6) {
5046
5053
  stateRef.current.noTap = false;
5047
5054
  } // Send tap event only if time less than 300ms
5048
5055
  else if (stateRef.current.timeStart - now < 300) {
5049
- queue(onTap, {
5056
+ promiseQueue.add(onTap, {
5050
5057
  clientX: clientX,
5051
5058
  clientY: clientY,
5052
5059
  altKey: altKey,
5053
5060
  ctrlKey: ctrlKey,
5054
5061
  metaKey: metaKey,
5055
- target: target
5062
+ target: target,
5063
+ event: event
5056
5064
  });
5057
5065
  }
5058
5066
  }
5059
- }, [onDragEnd, onTap, queue]);
5067
+ }, [onDragEnd, onTap]);
5060
5068
  var onDoubleTapHandler = React__default['default'].useCallback(function (event) {
5061
- queue(onDoubleTap, event);
5062
- }, [onDoubleTap, queue]);
5069
+ var clientX = event.clientX,
5070
+ clientY = event.clientY,
5071
+ altKey = event.altKey,
5072
+ ctrlKey = event.ctrlKey,
5073
+ metaKey = event.metaKey,
5074
+ target = event.target;
5075
+ promiseQueue.add(onDoubleTap, {
5076
+ clientX: clientX,
5077
+ clientY: clientY,
5078
+ altKey: altKey,
5079
+ ctrlKey: ctrlKey,
5080
+ metaKey: metaKey,
5081
+ target: target,
5082
+ event: event
5083
+ });
5084
+ }, [onDoubleTap]);
5063
5085
  return /*#__PURE__*/React__default['default'].createElement("div", {
5064
5086
  onWheel: onWheel,
5065
5087
  onPointerDown: onPointerDown,
@@ -6158,7 +6180,6 @@ var Selector = function Selector(_ref) {
6158
6180
 
6159
6181
  var ActionPane = function ActionPane(_ref) {
6160
6182
  var children = _ref.children;
6161
- _ref.moveFirst;
6162
6183
 
6163
6184
  var _useItemActions = useItemActions(),
6164
6185
  moveItems = _useItemActions.moveItems,
@@ -6237,23 +6258,24 @@ var ActionPane = function ActionPane(_ref) {
6237
6258
  var snapshot = _ref4.snapshot;
6238
6259
  return /*#__PURE__*/function () {
6239
6260
  var _ref6 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(_ref5) {
6240
- var deltaX, deltaY, _yield$snapshot$getPr, scale, moveX, moveY;
6261
+ var deltaX, deltaY, originalEvent, _yield$snapshot$getPr, scale, moveX, moveY;
6241
6262
 
6242
6263
  return regeneratorRuntime.wrap(function _callee2$(_context2) {
6243
6264
  while (1) {
6244
6265
  switch (_context2.prev = _context2.next) {
6245
6266
  case 0:
6246
- deltaX = _ref5.deltaX, deltaY = _ref5.deltaY;
6267
+ deltaX = _ref5.deltaX, deltaY = _ref5.deltaY, originalEvent = _ref5.event;
6247
6268
 
6248
6269
  if (!actionRef.current.moving) {
6249
- _context2.next = 10;
6270
+ _context2.next = 11;
6250
6271
  break;
6251
6272
  }
6252
6273
 
6253
- _context2.next = 4;
6274
+ originalEvent.stopPropagation();
6275
+ _context2.next = 5;
6254
6276
  return snapshot.getPromise(BoardTransformAtom);
6255
6277
 
6256
- case 4:
6278
+ case 5:
6257
6279
  _yield$snapshot$getPr = _context2.sent;
6258
6280
  scale = _yield$snapshot$getPr.scale;
6259
6281
  moveX = actionRef.current.remainX + deltaX / scale;
@@ -6268,7 +6290,7 @@ var ActionPane = function ActionPane(_ref) {
6268
6290
  }) : prev;
6269
6291
  });
6270
6292
 
6271
- case 10:
6293
+ case 11:
6272
6294
  case "end":
6273
6295
  return _context2.stop();
6274
6296
  }
@@ -7080,22 +7102,12 @@ var PanZoom = function PanZoom(_ref) {
7080
7102
  }, [setBoardState, zoomToCenter]);
7081
7103
  var onPan = React__default['default'].useCallback( /*#__PURE__*/function () {
7082
7104
  var _ref6 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(_ref5) {
7083
- var deltaX, deltaY, target, insideItem;
7105
+ var deltaX, deltaY;
7084
7106
  return regeneratorRuntime.wrap(function _callee2$(_context2) {
7085
7107
  while (1) {
7086
7108
  switch (_context2.prev = _context2.next) {
7087
7109
  case 0:
7088
- deltaX = _ref5.deltaX, deltaY = _ref5.deltaY, target = _ref5.target;
7089
- insideItem = insideClass(target, "item") && !insideClass(target, "locked");
7090
-
7091
- if (!(insideItem && moveFirst)) {
7092
- _context2.next = 4;
7093
- break;
7094
- }
7095
-
7096
- return _context2.abrupt("return");
7097
-
7098
- case 4:
7110
+ deltaX = _ref5.deltaX, deltaY = _ref5.deltaY;
7099
7111
  setDim(function (prev) {
7100
7112
  return _objectSpread2(_objectSpread2({}, prev), {}, {
7101
7113
  translateX: prev.translateX + deltaX,
@@ -7117,7 +7129,7 @@ var PanZoom = function PanZoom(_ref) {
7117
7129
  }) : prev;
7118
7130
  });
7119
7131
 
7120
- case 8:
7132
+ case 5:
7121
7133
  case "end":
7122
7134
  return _context2.stop();
7123
7135
  }
@@ -7128,7 +7140,7 @@ var PanZoom = function PanZoom(_ref) {
7128
7140
  return function (_x) {
7129
7141
  return _ref6.apply(this, arguments);
7130
7142
  };
7131
- }(), [moveFirst, setBoardState, setDim]);
7143
+ }(), [setBoardState, setDim]);
7132
7144
  var onKeyDown = recoil.useRecoilCallback(function (_ref7) {
7133
7145
  var snapshot = _ref7.snapshot;
7134
7146
  return /*#__PURE__*/function () {