react-sync-board 0.6.2 → 0.7.0

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
@@ -4624,7 +4624,9 @@ var Gesture = function Gesture(_ref6) {
4624
4624
  onLongTap = _ref6$onLongTap === void 0 ? empty : _ref6$onLongTap,
4625
4625
  _ref6$onDoubleTap = _ref6.onDoubleTap,
4626
4626
  onDoubleTap = _ref6$onDoubleTap === void 0 ? empty : _ref6$onDoubleTap,
4627
- onZoom = _ref6.onZoom;
4627
+ onZoom = _ref6.onZoom,
4628
+ _ref6$mainAction = _ref6.mainAction,
4629
+ mainAction = _ref6$mainAction === void 0 ? "drag" : _ref6$mainAction;
4628
4630
  var wrapperRef = React__default['default'].useRef(null);
4629
4631
  var stateRef = React__default['default'].useRef({
4630
4632
  moving: false,
@@ -4832,6 +4834,7 @@ var Gesture = function Gesture(_ref6) {
4832
4834
  altKey = e.altKey,
4833
4835
  ctrlKey = e.ctrlKey,
4834
4836
  metaKey = e.metaKey,
4837
+ buttons = e.buttons,
4835
4838
  pointerType = e.pointerType;
4836
4839
 
4837
4840
  if (stateRef.current.mainPointer !== pointerId) {
@@ -4865,13 +4868,20 @@ var Gesture = function Gesture(_ref6) {
4865
4868
  clientY = eventClientY;
4866
4869
  } // We drag if
4867
4870
  // On non touch device
4868
- // - Button is 0
4869
- // - Alt key is no pressed
4871
+ // - Only button is pressed (1)
4872
+ // - any special key is no pressed
4870
4873
  // or on touch devices
4871
4874
  // - We use only one finger
4872
4875
 
4873
4876
 
4874
- var shouldDrag = pointerType !== "touch" ? stateRef.current.currentButton === 0 && !altKey : !twoFingers;
4877
+ var altAction = altKey || ctrlKey || metaKey || buttons !== 1;
4878
+
4879
+ if (mainAction !== "drag") {
4880
+ altAction = !altAction;
4881
+ }
4882
+
4883
+ var shouldDrag = pointerType !== "touch" ? !altAction : !twoFingers;
4884
+ var shouldPan = pointerType !== "touch" ? altAction : twoFingers;
4875
4885
 
4876
4886
  if (shouldDrag) {
4877
4887
  // Send drag start on first move
@@ -4920,7 +4930,9 @@ var Gesture = function Gesture(_ref6) {
4920
4930
  target: stateRef.current.target,
4921
4931
  event: e
4922
4932
  });
4923
- } else {
4933
+ }
4934
+
4935
+ if (shouldPan) {
4924
4936
  if (!stateRef.current.gestureStart) {
4925
4937
  wrapperRef.current.style.cursor = "move";
4926
4938
  stateRef.current.gestureStart = true; // Clear tap timeout on first move
@@ -4964,7 +4976,7 @@ var Gesture = function Gesture(_ref6) {
4964
4976
  stateRef.current.prevX = clientX;
4965
4977
  stateRef.current.prevY = clientY;
4966
4978
  }
4967
- }, [onDrag, onDragStart, onPan, onZoom, queue]);
4979
+ }, [mainAction, onDrag, onDragStart, onPan, onZoom, queue]);
4968
4980
  var onPointerUp = React__default['default'].useCallback(function (e) {
4969
4981
  var clientX = e.clientX,
4970
4982
  clientY = e.clientY,
@@ -5939,24 +5951,20 @@ var Selector = function Selector(_ref) {
5939
5951
  }));
5940
5952
  }, [setSelected]);
5941
5953
  useThrottledEffect(updateSelected, [selector, updateSelected], 200);
5942
-
5943
- var onDragStart = /*#__PURE__*/function () {
5954
+ var onDragStart = React__default['default'].useCallback( /*#__PURE__*/function () {
5944
5955
  var _ref4 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(event) {
5945
- var button, altKey, ctrlKey, metaKey, foundElement, metaKeyPressed, goodButton;
5956
+ var foundElement;
5946
5957
  return regeneratorRuntime.wrap(function _callee2$(_context2) {
5947
5958
  while (1) {
5948
5959
  switch (_context2.prev = _context2.next) {
5949
5960
  case 0:
5950
- button = event.button, altKey = event.altKey, ctrlKey = event.ctrlKey, metaKey = event.metaKey;
5951
- _context2.next = 3;
5961
+ _context2.next = 2;
5952
5962
  return findElementUnderPointer(event);
5953
5963
 
5954
- case 3:
5964
+ case 2:
5955
5965
  foundElement = _context2.sent;
5956
- metaKeyPressed = altKey || ctrlKey || metaKey;
5957
- goodButton = moveFirst ? button === 1 || button === 0 && metaKeyPressed : button === 0 && !metaKeyPressed;
5958
5966
 
5959
- if (goodButton && (!foundElement || moveFirst)) {
5967
+ if (!foundElement) {
5960
5968
  stateRef.current.moving = true;
5961
5969
  setBoardState(function (prev) {
5962
5970
  return _objectSpread2(_objectSpread2({}, prev), {}, {
@@ -5966,7 +5974,7 @@ var Selector = function Selector(_ref) {
5966
5974
  wrapperRef.current.style.cursor = "crosshair";
5967
5975
  }
5968
5976
 
5969
- case 7:
5977
+ case 4:
5970
5978
  case "end":
5971
5979
  return _context2.stop();
5972
5980
  }
@@ -5974,11 +5982,10 @@ var Selector = function Selector(_ref) {
5974
5982
  }, _callee2);
5975
5983
  }));
5976
5984
 
5977
- return function onDragStart(_x) {
5985
+ return function (_x) {
5978
5986
  return _ref4.apply(this, arguments);
5979
5987
  };
5980
- }();
5981
-
5988
+ }(), [findElementUnderPointer, setBoardState]);
5982
5989
  var onDrag = recoil.useRecoilCallback(function (_ref5) {
5983
5990
  var snapshot = _ref5.snapshot;
5984
5991
  return /*#__PURE__*/function () {
@@ -6041,8 +6048,7 @@ var Selector = function Selector(_ref) {
6041
6048
  };
6042
6049
  }();
6043
6050
  }, []);
6044
-
6045
- var onDragEnd = function onDragEnd() {
6051
+ var onDragEnd = React__default['default'].useCallback(function () {
6046
6052
  if (stateRef.current.moving) {
6047
6053
  setBoardState(function (prev) {
6048
6054
  return _objectSpread2(_objectSpread2({}, prev), {}, {
@@ -6055,8 +6061,7 @@ var Selector = function Selector(_ref) {
6055
6061
  });
6056
6062
  wrapperRef.current.style.cursor = "auto";
6057
6063
  }
6058
- };
6059
-
6064
+ }, [setBoardState]);
6060
6065
  var onLongTap = React__default['default'].useCallback(function (_ref8) {
6061
6066
  var target = _ref8.target;
6062
6067
  var foundElement = insideClass(target, "item");
@@ -6137,7 +6142,8 @@ var Selector = function Selector(_ref) {
6137
6142
  onDrag: onDrag,
6138
6143
  onDragEnd: onDragEnd,
6139
6144
  onTap: onTap,
6140
- onLongTap: onLongTap
6145
+ onLongTap: onLongTap,
6146
+ mainAction: moveFirst ? "pan" : "drag"
6141
6147
  }, /*#__PURE__*/React__default['default'].createElement("div", {
6142
6148
  ref: wrapperRef
6143
6149
  }, selector.moving && /*#__PURE__*/React__default['default'].createElement("div", {
@@ -6152,6 +6158,7 @@ var Selector = function Selector(_ref) {
6152
6158
 
6153
6159
  var ActionPane = function ActionPane(_ref) {
6154
6160
  var children = _ref.children;
6161
+ _ref.moveFirst;
6155
6162
 
6156
6163
  var _useItemActions = useItemActions(),
6157
6164
  moveItems = _useItemActions.moveItems,
@@ -6986,8 +6993,6 @@ var usePositionNavigator = function usePositionNavigator() {
6986
6993
  return null;
6987
6994
  };
6988
6995
 
6989
- var SCALE_TOLERANCE = 0.8;
6990
-
6991
6996
  var PanZoom = function PanZoom(_ref) {
6992
6997
  var children = _ref.children,
6993
6998
  _ref$moveFirst = _ref.moveFirst,
@@ -6997,7 +7002,8 @@ var PanZoom = function PanZoom(_ref) {
6997
7002
 
6998
7003
  var _useDim = useDim(),
6999
7004
  setDim = _useDim.setDim,
7000
- zoomTo = _useDim.zoomTo;
7005
+ zoomToCenter = _useDim.zoomToCenter,
7006
+ zoomToExtent = _useDim.zoomToExtent;
7001
7007
 
7002
7008
  var _useRecoilValue = recoil.useRecoilValue(ConfigurationAtom),
7003
7009
  itemExtentGlobal = _useRecoilValue.itemExtent;
@@ -7013,10 +7019,14 @@ var PanZoom = function PanZoom(_ref) {
7013
7019
  var getMouseInfo = useMousePosition(wrappedRef); // Hooks to save/restore position
7014
7020
 
7015
7021
  usePositionNavigator();
7022
+ /**
7023
+ * Center board on startup
7024
+ */
7025
+
7016
7026
  var centerBoard = recoil.useRecoilCallback(function (_ref2) {
7017
7027
  var snapshot = _ref2.snapshot;
7018
7028
  return /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
7019
- var _yield$snapshot$getPr, _yield$snapshot$getPr2, left, top, width, height, boardWrapperRect, scaleX, scaleY, newScale, scaleWithTolerance, centerX, centerY;
7029
+ var _yield$snapshot$getPr, itemExtent;
7020
7030
 
7021
7031
  return regeneratorRuntime.wrap(function _callee$(_context) {
7022
7032
  while (1) {
@@ -7027,34 +7037,17 @@ var PanZoom = function PanZoom(_ref) {
7027
7037
 
7028
7038
  case 2:
7029
7039
  _yield$snapshot$getPr = _context.sent;
7030
- _yield$snapshot$getPr2 = _yield$snapshot$getPr.itemExtent;
7031
- left = _yield$snapshot$getPr2.left;
7032
- top = _yield$snapshot$getPr2.top;
7033
- width = _yield$snapshot$getPr2.width;
7034
- height = _yield$snapshot$getPr2.height;
7035
- boardWrapperRect = _yield$snapshot$getPr.boardWrapperRect;
7036
- scaleX = boardWrapperRect.width / width;
7037
- scaleY = boardWrapperRect.height / height;
7038
- newScale = Math.min(scaleX, scaleY);
7039
- scaleWithTolerance = newScale * SCALE_TOLERANCE;
7040
- centerX = boardWrapperRect.width / 2 - (left + width / 2) * scaleWithTolerance;
7041
- centerY = boardWrapperRect.height / 2 - (top + height / 2) * scaleWithTolerance;
7042
- setDim(function (prev) {
7043
- return _objectSpread2(_objectSpread2({}, prev), {}, {
7044
- translateX: centerX,
7045
- translateY: centerY,
7046
- scale: scaleWithTolerance
7047
- });
7048
- });
7040
+ itemExtent = _yield$snapshot$getPr.itemExtent;
7041
+ zoomToExtent(itemExtent);
7049
7042
 
7050
- case 16:
7043
+ case 5:
7051
7044
  case "end":
7052
7045
  return _context.stop();
7053
7046
  }
7054
7047
  }
7055
7048
  }, _callee);
7056
7049
  }));
7057
- }, [setDim]);
7050
+ }, [zoomToExtent]);
7058
7051
  React__default['default'].useEffect(function () {
7059
7052
  if (!centered && itemExtentGlobal.left) {
7060
7053
  // Center board on first valid extent
@@ -7066,7 +7059,7 @@ var PanZoom = function PanZoom(_ref) {
7066
7059
  var clientX = _ref4.clientX,
7067
7060
  clientY = _ref4.clientY,
7068
7061
  scale = _ref4.scale;
7069
- zoomTo(1 - scale / 500, {
7062
+ zoomToCenter(1 - scale / 500, {
7070
7063
  x: clientX,
7071
7064
  y: clientY
7072
7065
  }); // Update the board zooming state
@@ -7084,15 +7077,25 @@ var PanZoom = function PanZoom(_ref) {
7084
7077
  zooming: true
7085
7078
  }) : prev;
7086
7079
  });
7087
- }, [setBoardState, zoomTo]);
7080
+ }, [setBoardState, zoomToCenter]);
7088
7081
  var onPan = React__default['default'].useCallback( /*#__PURE__*/function () {
7089
7082
  var _ref6 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(_ref5) {
7090
- var deltaX, deltaY;
7083
+ var deltaX, deltaY, target, insideItem;
7091
7084
  return regeneratorRuntime.wrap(function _callee2$(_context2) {
7092
7085
  while (1) {
7093
7086
  switch (_context2.prev = _context2.next) {
7094
7087
  case 0:
7095
- deltaX = _ref5.deltaX, deltaY = _ref5.deltaY;
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:
7096
7099
  setDim(function (prev) {
7097
7100
  return _objectSpread2(_objectSpread2({}, prev), {}, {
7098
7101
  translateX: prev.translateX + deltaX,
@@ -7114,7 +7117,7 @@ var PanZoom = function PanZoom(_ref) {
7114
7117
  }) : prev;
7115
7118
  });
7116
7119
 
7117
- case 5:
7120
+ case 8:
7118
7121
  case "end":
7119
7122
  return _context2.stop();
7120
7123
  }
@@ -7125,15 +7128,7 @@ var PanZoom = function PanZoom(_ref) {
7125
7128
  return function (_x) {
7126
7129
  return _ref6.apply(this, arguments);
7127
7130
  };
7128
- }(), [setBoardState, setDim]);
7129
- var onDrag = React__default['default'].useCallback(function (state) {
7130
- var target = state.target;
7131
- var outsideItem = !insideClass(target, "item") || insideClass(target, "locked");
7132
-
7133
- if (moveFirst && outsideItem) {
7134
- onPan(state);
7135
- }
7136
- }, [moveFirst, onPan]);
7131
+ }(), [moveFirst, setBoardState, setDim]);
7137
7132
  var onKeyDown = recoil.useRecoilCallback(function (_ref7) {
7138
7133
  var snapshot = _ref7.snapshot;
7139
7134
  return /*#__PURE__*/function () {
@@ -7218,14 +7213,14 @@ var PanZoom = function PanZoom(_ref) {
7218
7213
  translateX: prev.translateX + moveX
7219
7214
  });
7220
7215
  });
7221
- zoomTo(zoom);
7216
+ zoomToCenter(zoom);
7222
7217
  e.preventDefault();
7223
7218
 
7224
7219
  case 31:
7225
7220
  // Temporary zoom
7226
7221
  if (e.key === " " && !e.repeat) {
7227
7222
  if (getMouseInfo().hover) {
7228
- zoomTo(3, getMouseInfo());
7223
+ zoomToCenter(3, getMouseInfo());
7229
7224
  }
7230
7225
  }
7231
7226
 
@@ -7241,15 +7236,15 @@ var PanZoom = function PanZoom(_ref) {
7241
7236
  return _ref8.apply(this, arguments);
7242
7237
  };
7243
7238
  }();
7244
- }, [setDim, zoomTo, getMouseInfo]);
7239
+ }, [setDim, zoomToCenter, getMouseInfo]);
7245
7240
  var onKeyUp = React__default['default'].useCallback(function (e) {
7246
7241
  // Ignore text in Input or Textarea
7247
7242
  if (["INPUT", "TEXTAREA"].includes(e.target.tagName)) return; // Zoom out on release
7248
7243
 
7249
7244
  if (e.key === " " && getMouseInfo().hover) {
7250
- zoomTo(1 / 3, getMouseInfo());
7245
+ zoomToCenter(1 / 3, getMouseInfo());
7251
7246
  }
7252
- }, [getMouseInfo, zoomTo]);
7247
+ }, [getMouseInfo, zoomToCenter]);
7253
7248
  React__default['default'].useEffect(function () {
7254
7249
  document.addEventListener("keydown", onKeyDown);
7255
7250
  document.addEventListener("keyup", onKeyUp);
@@ -7261,7 +7256,7 @@ var PanZoom = function PanZoom(_ref) {
7261
7256
  return /*#__PURE__*/React__default['default'].createElement(Gesture, {
7262
7257
  onPan: onPan,
7263
7258
  onZoom: onZoom,
7264
- onDrag: onDrag
7259
+ mainAction: moveFirst ? "pan" : "drag"
7265
7260
  }, /*#__PURE__*/React__default['default'].createElement("div", {
7266
7261
  style: {
7267
7262
  display: "inline-block",
@@ -7429,7 +7424,9 @@ var Board = function Board(_ref) {
7429
7424
  moveFirst: moveFirst
7430
7425
  }, /*#__PURE__*/React__default['default'].createElement(Selector, {
7431
7426
  moveFirst: moveFirst
7432
- }, /*#__PURE__*/React__default['default'].createElement(ActionPane, null, /*#__PURE__*/React__default['default'].createElement(CursorPane, null, /*#__PURE__*/React__default['default'].createElement("div", {
7427
+ }, /*#__PURE__*/React__default['default'].createElement(ActionPane, {
7428
+ moveFirst: moveFirst
7429
+ }, /*#__PURE__*/React__default['default'].createElement(CursorPane, null, /*#__PURE__*/React__default['default'].createElement("div", {
7433
7430
  onContextMenu: function onContextMenu(e) {
7434
7431
  e.preventDefault();
7435
7432
  },
@@ -7440,6 +7437,7 @@ var Board = function Board(_ref) {
7440
7437
 
7441
7438
  var TOLERANCE = 100;
7442
7439
  var MIN_SIZE = 1000;
7440
+ var SCALE_TOLERANCE = 0.8;
7443
7441
 
7444
7442
  var translateBoundaries = function translateBoundaries(_ref) {
7445
7443
  var x = _ref.x,
@@ -7557,7 +7555,7 @@ var useDim = function useDim() {
7557
7555
  };
7558
7556
  }();
7559
7557
  }, [setDim]);
7560
- var zoomTo = recoil.useRecoilCallback(function (_ref5) {
7558
+ var zoomToCenter = recoil.useRecoilCallback(function (_ref5) {
7561
7559
  var snapshot = _ref5.snapshot;
7562
7560
  return /*#__PURE__*/function () {
7563
7561
  var _ref6 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(factor, zoomCenter) {
@@ -7636,24 +7634,68 @@ var useDim = function useDim() {
7636
7634
  };
7637
7635
  }();
7638
7636
  }, [setDim]);
7639
- var updateScaleBoundaries = recoil.useRecoilCallback(function (_ref7) {
7637
+ var zoomToExtent = recoil.useRecoilCallback(function (_ref7) {
7640
7638
  var snapshot = _ref7.snapshot;
7641
- return /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {
7642
- var _yield$snapshot$getPr3, _yield$snapshot$getPr4, width, height, boardWrapperRect, scaleX, scaleY, newScale;
7639
+ return /*#__PURE__*/function () {
7640
+ var _ref9 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(_ref8) {
7641
+ var left, top, width, height, _yield$snapshot$getPr3, boardWrapperRect, scaleX, scaleY, newScale, scaleWithTolerance, centerX, centerY;
7643
7642
 
7644
- return regeneratorRuntime.wrap(function _callee3$(_context3) {
7643
+ return regeneratorRuntime.wrap(function _callee3$(_context3) {
7644
+ while (1) {
7645
+ switch (_context3.prev = _context3.next) {
7646
+ case 0:
7647
+ left = _ref8.left, top = _ref8.top, width = _ref8.width, height = _ref8.height;
7648
+ _context3.next = 3;
7649
+ return snapshot.getPromise(ConfigurationAtom);
7650
+
7651
+ case 3:
7652
+ _yield$snapshot$getPr3 = _context3.sent;
7653
+ boardWrapperRect = _yield$snapshot$getPr3.boardWrapperRect;
7654
+ scaleX = boardWrapperRect.width / width;
7655
+ scaleY = boardWrapperRect.height / height;
7656
+ newScale = Math.min(scaleX, scaleY);
7657
+ scaleWithTolerance = newScale * SCALE_TOLERANCE;
7658
+ centerX = boardWrapperRect.width / 2 - (left + width / 2) * scaleWithTolerance;
7659
+ centerY = boardWrapperRect.height / 2 - (top + height / 2) * scaleWithTolerance;
7660
+ setDim(function (prev) {
7661
+ return _objectSpread2(_objectSpread2({}, prev), {}, {
7662
+ translateX: centerX,
7663
+ translateY: centerY,
7664
+ scale: scaleWithTolerance
7665
+ });
7666
+ });
7667
+
7668
+ case 12:
7669
+ case "end":
7670
+ return _context3.stop();
7671
+ }
7672
+ }
7673
+ }, _callee3);
7674
+ }));
7675
+
7676
+ return function (_x4) {
7677
+ return _ref9.apply(this, arguments);
7678
+ };
7679
+ }();
7680
+ }, [setDim]);
7681
+ var updateScaleBoundaries = recoil.useRecoilCallback(function (_ref10) {
7682
+ var snapshot = _ref10.snapshot;
7683
+ return /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4() {
7684
+ var _yield$snapshot$getPr4, _yield$snapshot$getPr5, width, height, boardWrapperRect, scaleX, scaleY, newScale;
7685
+
7686
+ return regeneratorRuntime.wrap(function _callee4$(_context4) {
7645
7687
  while (1) {
7646
- switch (_context3.prev = _context3.next) {
7688
+ switch (_context4.prev = _context4.next) {
7647
7689
  case 0:
7648
- _context3.next = 2;
7690
+ _context4.next = 2;
7649
7691
  return snapshot.getPromise(ConfigurationAtom);
7650
7692
 
7651
7693
  case 2:
7652
- _yield$snapshot$getPr3 = _context3.sent;
7653
- _yield$snapshot$getPr4 = _yield$snapshot$getPr3.itemExtent;
7654
- width = _yield$snapshot$getPr4.width;
7655
- height = _yield$snapshot$getPr4.height;
7656
- boardWrapperRect = _yield$snapshot$getPr3.boardWrapperRect;
7694
+ _yield$snapshot$getPr4 = _context4.sent;
7695
+ _yield$snapshot$getPr5 = _yield$snapshot$getPr4.itemExtent;
7696
+ width = _yield$snapshot$getPr5.width;
7697
+ height = _yield$snapshot$getPr5.height;
7698
+ boardWrapperRect = _yield$snapshot$getPr4.boardWrapperRect;
7657
7699
  scaleX = boardWrapperRect.width / width;
7658
7700
  scaleY = boardWrapperRect.height / height;
7659
7701
  newScale = Math.min(scaleX, scaleY);
@@ -7661,86 +7703,86 @@ var useDim = function useDim() {
7661
7703
 
7662
7704
  case 11:
7663
7705
  case "end":
7664
- return _context3.stop();
7706
+ return _context4.stop();
7665
7707
  }
7666
7708
  }
7667
- }, _callee3);
7709
+ }, _callee4);
7668
7710
  }));
7669
7711
  }, []);
7670
- var getCenterCoordinates = recoil.useRecoilCallback(function (_ref9) {
7671
- var snapshot = _ref9.snapshot;
7672
- return /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4() {
7673
- var _yield$snapshot$getPr5, boardWrapperRect, boardSize, _yield$snapshot$getPr6, translateX, translateY, scale;
7712
+ var getCenterCoordinates = recoil.useRecoilCallback(function (_ref12) {
7713
+ var snapshot = _ref12.snapshot;
7714
+ return /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee5() {
7715
+ var _yield$snapshot$getPr6, boardWrapperRect, boardSize, _yield$snapshot$getPr7, translateX, translateY, scale;
7674
7716
 
7675
- return regeneratorRuntime.wrap(function _callee4$(_context4) {
7717
+ return regeneratorRuntime.wrap(function _callee5$(_context5) {
7676
7718
  while (1) {
7677
- switch (_context4.prev = _context4.next) {
7719
+ switch (_context5.prev = _context5.next) {
7678
7720
  case 0:
7679
- _context4.next = 2;
7721
+ _context5.next = 2;
7680
7722
  return snapshot.getPromise(ConfigurationAtom);
7681
7723
 
7682
7724
  case 2:
7683
- _yield$snapshot$getPr5 = _context4.sent;
7684
- boardWrapperRect = _yield$snapshot$getPr5.boardWrapperRect;
7685
- boardSize = _yield$snapshot$getPr5.boardSize;
7686
- _context4.next = 7;
7725
+ _yield$snapshot$getPr6 = _context5.sent;
7726
+ boardWrapperRect = _yield$snapshot$getPr6.boardWrapperRect;
7727
+ boardSize = _yield$snapshot$getPr6.boardSize;
7728
+ _context5.next = 7;
7687
7729
  return snapshot.getPromise(BoardTransformAtom);
7688
7730
 
7689
7731
  case 7:
7690
- _yield$snapshot$getPr6 = _context4.sent;
7691
- translateX = _yield$snapshot$getPr6.translateX;
7692
- translateY = _yield$snapshot$getPr6.translateY;
7693
- scale = _yield$snapshot$getPr6.scale;
7694
- return _context4.abrupt("return", {
7732
+ _yield$snapshot$getPr7 = _context5.sent;
7733
+ translateX = _yield$snapshot$getPr7.translateX;
7734
+ translateY = _yield$snapshot$getPr7.translateY;
7735
+ scale = _yield$snapshot$getPr7.scale;
7736
+ return _context5.abrupt("return", {
7695
7737
  x: (boardWrapperRect.width / 2 - translateX) / scale - boardSize / 2,
7696
7738
  y: (boardWrapperRect.height / 2 - translateY) / scale - boardSize / 2
7697
7739
  });
7698
7740
 
7699
7741
  case 12:
7700
7742
  case "end":
7701
- return _context4.stop();
7743
+ return _context5.stop();
7702
7744
  }
7703
7745
  }
7704
- }, _callee4);
7746
+ }, _callee5);
7705
7747
  }));
7706
7748
  }, []);
7707
- var updateItemExtent = recoil.useRecoilCallback(function (_ref11) {
7708
- var snapshot = _ref11.snapshot,
7709
- set = _ref11.set;
7710
- return /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee5() {
7711
- var itemIds, _yield$snapshot$getPr7, boardWrapperRect, boardWrapper, boardSize, _yield$snapshot$getPr8, scale, translateX, translateY, _ref13, left, top, width, height, relativeExtent, delta, _delta;
7749
+ var updateItemExtent = recoil.useRecoilCallback(function (_ref14) {
7750
+ var snapshot = _ref14.snapshot,
7751
+ set = _ref14.set;
7752
+ return /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee6() {
7753
+ var itemIds, _yield$snapshot$getPr8, boardWrapperRect, boardWrapper, boardSize, _yield$snapshot$getPr9, scale, translateX, translateY, _ref16, left, top, width, height, relativeExtent, delta, _delta;
7712
7754
 
7713
- return regeneratorRuntime.wrap(function _callee5$(_context5) {
7755
+ return regeneratorRuntime.wrap(function _callee6$(_context6) {
7714
7756
  while (1) {
7715
- switch (_context5.prev = _context5.next) {
7757
+ switch (_context6.prev = _context6.next) {
7716
7758
  case 0:
7717
- _context5.next = 2;
7759
+ _context6.next = 2;
7718
7760
  return snapshot.getPromise(ItemListAtom);
7719
7761
 
7720
7762
  case 2:
7721
- itemIds = _context5.sent;
7722
- _context5.next = 5;
7763
+ itemIds = _context6.sent;
7764
+ _context6.next = 5;
7723
7765
  return snapshot.getPromise(ConfigurationAtom);
7724
7766
 
7725
7767
  case 5:
7726
- _yield$snapshot$getPr7 = _context5.sent;
7727
- boardWrapperRect = _yield$snapshot$getPr7.boardWrapperRect;
7728
- boardWrapper = _yield$snapshot$getPr7.boardWrapper;
7729
- boardSize = _yield$snapshot$getPr7.boardSize;
7730
- _context5.next = 11;
7768
+ _yield$snapshot$getPr8 = _context6.sent;
7769
+ boardWrapperRect = _yield$snapshot$getPr8.boardWrapperRect;
7770
+ boardWrapper = _yield$snapshot$getPr8.boardWrapper;
7771
+ boardSize = _yield$snapshot$getPr8.boardSize;
7772
+ _context6.next = 11;
7731
7773
  return snapshot.getPromise(BoardTransformAtom);
7732
7774
 
7733
7775
  case 11:
7734
- _yield$snapshot$getPr8 = _context5.sent;
7735
- scale = _yield$snapshot$getPr8.scale;
7736
- translateX = _yield$snapshot$getPr8.translateX;
7737
- translateY = _yield$snapshot$getPr8.translateY;
7738
- _ref13 = getItemBoundingBox(itemIds, boardWrapper) || {
7776
+ _yield$snapshot$getPr9 = _context6.sent;
7777
+ scale = _yield$snapshot$getPr9.scale;
7778
+ translateX = _yield$snapshot$getPr9.translateX;
7779
+ translateY = _yield$snapshot$getPr9.translateY;
7780
+ _ref16 = getItemBoundingBox(itemIds, boardWrapper) || {
7739
7781
  left: boardSize / 2 * scale + boardWrapperRect.left + translateX,
7740
7782
  top: boardSize / 2 * scale + boardWrapperRect.top + translateY,
7741
7783
  width: 0,
7742
7784
  height: 0
7743
- }, left = _ref13.left, top = _ref13.top, width = _ref13.width, height = _ref13.height;
7785
+ }, left = _ref16.left, top = _ref16.top, width = _ref16.width, height = _ref16.height;
7744
7786
  relativeExtent = {
7745
7787
  left: (left - boardWrapperRect.left - translateX) / scale,
7746
7788
  top: (top - boardWrapperRect.top - translateY) / scale,
@@ -7772,10 +7814,10 @@ var useDim = function useDim() {
7772
7814
 
7773
7815
  case 22:
7774
7816
  case "end":
7775
- return _context5.stop();
7817
+ return _context6.stop();
7776
7818
  }
7777
7819
  }
7778
- }, _callee5);
7820
+ }, _callee6);
7779
7821
  }));
7780
7822
  }, []);
7781
7823
  var debouncedUpdateItemExtent = useDebouncedCallback(updateItemExtent, [], 300);
@@ -7787,7 +7829,9 @@ var useDim = function useDim() {
7787
7829
  return {
7788
7830
  setDim: setDimSafe,
7789
7831
  getDim: getDim,
7790
- zoomTo: zoomTo,
7832
+ zoomTo: zoomToCenter,
7833
+ zoomToCenter: zoomToCenter,
7834
+ zoomToExtent: zoomToExtent,
7791
7835
  getCenter: getCenterCoordinates,
7792
7836
  updateItemExtent: debouncedUpdateItemExtent
7793
7837
  };