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/esm/index.js CHANGED
@@ -4596,7 +4596,9 @@ var Gesture = function Gesture(_ref6) {
4596
4596
  onLongTap = _ref6$onLongTap === void 0 ? empty : _ref6$onLongTap,
4597
4597
  _ref6$onDoubleTap = _ref6.onDoubleTap,
4598
4598
  onDoubleTap = _ref6$onDoubleTap === void 0 ? empty : _ref6$onDoubleTap,
4599
- onZoom = _ref6.onZoom;
4599
+ onZoom = _ref6.onZoom,
4600
+ _ref6$mainAction = _ref6.mainAction,
4601
+ mainAction = _ref6$mainAction === void 0 ? "drag" : _ref6$mainAction;
4600
4602
  var wrapperRef = React__default.useRef(null);
4601
4603
  var stateRef = React__default.useRef({
4602
4604
  moving: false,
@@ -4804,6 +4806,7 @@ var Gesture = function Gesture(_ref6) {
4804
4806
  altKey = e.altKey,
4805
4807
  ctrlKey = e.ctrlKey,
4806
4808
  metaKey = e.metaKey,
4809
+ buttons = e.buttons,
4807
4810
  pointerType = e.pointerType;
4808
4811
 
4809
4812
  if (stateRef.current.mainPointer !== pointerId) {
@@ -4837,13 +4840,20 @@ var Gesture = function Gesture(_ref6) {
4837
4840
  clientY = eventClientY;
4838
4841
  } // We drag if
4839
4842
  // On non touch device
4840
- // - Button is 0
4841
- // - Alt key is no pressed
4843
+ // - Only button is pressed (1)
4844
+ // - any special key is no pressed
4842
4845
  // or on touch devices
4843
4846
  // - We use only one finger
4844
4847
 
4845
4848
 
4846
- var shouldDrag = pointerType !== "touch" ? stateRef.current.currentButton === 0 && !altKey : !twoFingers;
4849
+ var altAction = altKey || ctrlKey || metaKey || buttons !== 1;
4850
+
4851
+ if (mainAction !== "drag") {
4852
+ altAction = !altAction;
4853
+ }
4854
+
4855
+ var shouldDrag = pointerType !== "touch" ? !altAction : !twoFingers;
4856
+ var shouldPan = pointerType !== "touch" ? altAction : twoFingers;
4847
4857
 
4848
4858
  if (shouldDrag) {
4849
4859
  // Send drag start on first move
@@ -4892,7 +4902,9 @@ var Gesture = function Gesture(_ref6) {
4892
4902
  target: stateRef.current.target,
4893
4903
  event: e
4894
4904
  });
4895
- } else {
4905
+ }
4906
+
4907
+ if (shouldPan) {
4896
4908
  if (!stateRef.current.gestureStart) {
4897
4909
  wrapperRef.current.style.cursor = "move";
4898
4910
  stateRef.current.gestureStart = true; // Clear tap timeout on first move
@@ -4936,7 +4948,7 @@ var Gesture = function Gesture(_ref6) {
4936
4948
  stateRef.current.prevX = clientX;
4937
4949
  stateRef.current.prevY = clientY;
4938
4950
  }
4939
- }, [onDrag, onDragStart, onPan, onZoom, queue]);
4951
+ }, [mainAction, onDrag, onDragStart, onPan, onZoom, queue]);
4940
4952
  var onPointerUp = React__default.useCallback(function (e) {
4941
4953
  var clientX = e.clientX,
4942
4954
  clientY = e.clientY,
@@ -5911,24 +5923,20 @@ var Selector = function Selector(_ref) {
5911
5923
  }));
5912
5924
  }, [setSelected]);
5913
5925
  useThrottledEffect(updateSelected, [selector, updateSelected], 200);
5914
-
5915
- var onDragStart = /*#__PURE__*/function () {
5926
+ var onDragStart = React__default.useCallback( /*#__PURE__*/function () {
5916
5927
  var _ref4 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(event) {
5917
- var button, altKey, ctrlKey, metaKey, foundElement, metaKeyPressed, goodButton;
5928
+ var foundElement;
5918
5929
  return regeneratorRuntime.wrap(function _callee2$(_context2) {
5919
5930
  while (1) {
5920
5931
  switch (_context2.prev = _context2.next) {
5921
5932
  case 0:
5922
- button = event.button, altKey = event.altKey, ctrlKey = event.ctrlKey, metaKey = event.metaKey;
5923
- _context2.next = 3;
5933
+ _context2.next = 2;
5924
5934
  return findElementUnderPointer(event);
5925
5935
 
5926
- case 3:
5936
+ case 2:
5927
5937
  foundElement = _context2.sent;
5928
- metaKeyPressed = altKey || ctrlKey || metaKey;
5929
- goodButton = moveFirst ? button === 1 || button === 0 && metaKeyPressed : button === 0 && !metaKeyPressed;
5930
5938
 
5931
- if (goodButton && (!foundElement || moveFirst)) {
5939
+ if (!foundElement) {
5932
5940
  stateRef.current.moving = true;
5933
5941
  setBoardState(function (prev) {
5934
5942
  return _objectSpread2(_objectSpread2({}, prev), {}, {
@@ -5938,7 +5946,7 @@ var Selector = function Selector(_ref) {
5938
5946
  wrapperRef.current.style.cursor = "crosshair";
5939
5947
  }
5940
5948
 
5941
- case 7:
5949
+ case 4:
5942
5950
  case "end":
5943
5951
  return _context2.stop();
5944
5952
  }
@@ -5946,11 +5954,10 @@ var Selector = function Selector(_ref) {
5946
5954
  }, _callee2);
5947
5955
  }));
5948
5956
 
5949
- return function onDragStart(_x) {
5957
+ return function (_x) {
5950
5958
  return _ref4.apply(this, arguments);
5951
5959
  };
5952
- }();
5953
-
5960
+ }(), [findElementUnderPointer, setBoardState]);
5954
5961
  var onDrag = useRecoilCallback(function (_ref5) {
5955
5962
  var snapshot = _ref5.snapshot;
5956
5963
  return /*#__PURE__*/function () {
@@ -6013,8 +6020,7 @@ var Selector = function Selector(_ref) {
6013
6020
  };
6014
6021
  }();
6015
6022
  }, []);
6016
-
6017
- var onDragEnd = function onDragEnd() {
6023
+ var onDragEnd = React__default.useCallback(function () {
6018
6024
  if (stateRef.current.moving) {
6019
6025
  setBoardState(function (prev) {
6020
6026
  return _objectSpread2(_objectSpread2({}, prev), {}, {
@@ -6027,8 +6033,7 @@ var Selector = function Selector(_ref) {
6027
6033
  });
6028
6034
  wrapperRef.current.style.cursor = "auto";
6029
6035
  }
6030
- };
6031
-
6036
+ }, [setBoardState]);
6032
6037
  var onLongTap = React__default.useCallback(function (_ref8) {
6033
6038
  var target = _ref8.target;
6034
6039
  var foundElement = insideClass(target, "item");
@@ -6109,7 +6114,8 @@ var Selector = function Selector(_ref) {
6109
6114
  onDrag: onDrag,
6110
6115
  onDragEnd: onDragEnd,
6111
6116
  onTap: onTap,
6112
- onLongTap: onLongTap
6117
+ onLongTap: onLongTap,
6118
+ mainAction: moveFirst ? "pan" : "drag"
6113
6119
  }, /*#__PURE__*/React__default.createElement("div", {
6114
6120
  ref: wrapperRef
6115
6121
  }, selector.moving && /*#__PURE__*/React__default.createElement("div", {
@@ -6124,6 +6130,7 @@ var Selector = function Selector(_ref) {
6124
6130
 
6125
6131
  var ActionPane = function ActionPane(_ref) {
6126
6132
  var children = _ref.children;
6133
+ _ref.moveFirst;
6127
6134
 
6128
6135
  var _useItemActions = useItemActions(),
6129
6136
  moveItems = _useItemActions.moveItems,
@@ -6958,8 +6965,6 @@ var usePositionNavigator = function usePositionNavigator() {
6958
6965
  return null;
6959
6966
  };
6960
6967
 
6961
- var SCALE_TOLERANCE = 0.8;
6962
-
6963
6968
  var PanZoom = function PanZoom(_ref) {
6964
6969
  var children = _ref.children,
6965
6970
  _ref$moveFirst = _ref.moveFirst,
@@ -6969,7 +6974,8 @@ var PanZoom = function PanZoom(_ref) {
6969
6974
 
6970
6975
  var _useDim = useDim(),
6971
6976
  setDim = _useDim.setDim,
6972
- zoomTo = _useDim.zoomTo;
6977
+ zoomToCenter = _useDim.zoomToCenter,
6978
+ zoomToExtent = _useDim.zoomToExtent;
6973
6979
 
6974
6980
  var _useRecoilValue = useRecoilValue(ConfigurationAtom),
6975
6981
  itemExtentGlobal = _useRecoilValue.itemExtent;
@@ -6985,10 +6991,14 @@ var PanZoom = function PanZoom(_ref) {
6985
6991
  var getMouseInfo = useMousePosition(wrappedRef); // Hooks to save/restore position
6986
6992
 
6987
6993
  usePositionNavigator();
6994
+ /**
6995
+ * Center board on startup
6996
+ */
6997
+
6988
6998
  var centerBoard = useRecoilCallback(function (_ref2) {
6989
6999
  var snapshot = _ref2.snapshot;
6990
7000
  return /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
6991
- var _yield$snapshot$getPr, _yield$snapshot$getPr2, left, top, width, height, boardWrapperRect, scaleX, scaleY, newScale, scaleWithTolerance, centerX, centerY;
7001
+ var _yield$snapshot$getPr, itemExtent;
6992
7002
 
6993
7003
  return regeneratorRuntime.wrap(function _callee$(_context) {
6994
7004
  while (1) {
@@ -6999,34 +7009,17 @@ var PanZoom = function PanZoom(_ref) {
6999
7009
 
7000
7010
  case 2:
7001
7011
  _yield$snapshot$getPr = _context.sent;
7002
- _yield$snapshot$getPr2 = _yield$snapshot$getPr.itemExtent;
7003
- left = _yield$snapshot$getPr2.left;
7004
- top = _yield$snapshot$getPr2.top;
7005
- width = _yield$snapshot$getPr2.width;
7006
- height = _yield$snapshot$getPr2.height;
7007
- boardWrapperRect = _yield$snapshot$getPr.boardWrapperRect;
7008
- scaleX = boardWrapperRect.width / width;
7009
- scaleY = boardWrapperRect.height / height;
7010
- newScale = Math.min(scaleX, scaleY);
7011
- scaleWithTolerance = newScale * SCALE_TOLERANCE;
7012
- centerX = boardWrapperRect.width / 2 - (left + width / 2) * scaleWithTolerance;
7013
- centerY = boardWrapperRect.height / 2 - (top + height / 2) * scaleWithTolerance;
7014
- setDim(function (prev) {
7015
- return _objectSpread2(_objectSpread2({}, prev), {}, {
7016
- translateX: centerX,
7017
- translateY: centerY,
7018
- scale: scaleWithTolerance
7019
- });
7020
- });
7012
+ itemExtent = _yield$snapshot$getPr.itemExtent;
7013
+ zoomToExtent(itemExtent);
7021
7014
 
7022
- case 16:
7015
+ case 5:
7023
7016
  case "end":
7024
7017
  return _context.stop();
7025
7018
  }
7026
7019
  }
7027
7020
  }, _callee);
7028
7021
  }));
7029
- }, [setDim]);
7022
+ }, [zoomToExtent]);
7030
7023
  React__default.useEffect(function () {
7031
7024
  if (!centered && itemExtentGlobal.left) {
7032
7025
  // Center board on first valid extent
@@ -7038,7 +7031,7 @@ var PanZoom = function PanZoom(_ref) {
7038
7031
  var clientX = _ref4.clientX,
7039
7032
  clientY = _ref4.clientY,
7040
7033
  scale = _ref4.scale;
7041
- zoomTo(1 - scale / 500, {
7034
+ zoomToCenter(1 - scale / 500, {
7042
7035
  x: clientX,
7043
7036
  y: clientY
7044
7037
  }); // Update the board zooming state
@@ -7056,15 +7049,25 @@ var PanZoom = function PanZoom(_ref) {
7056
7049
  zooming: true
7057
7050
  }) : prev;
7058
7051
  });
7059
- }, [setBoardState, zoomTo]);
7052
+ }, [setBoardState, zoomToCenter]);
7060
7053
  var onPan = React__default.useCallback( /*#__PURE__*/function () {
7061
7054
  var _ref6 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(_ref5) {
7062
- var deltaX, deltaY;
7055
+ var deltaX, deltaY, target, insideItem;
7063
7056
  return regeneratorRuntime.wrap(function _callee2$(_context2) {
7064
7057
  while (1) {
7065
7058
  switch (_context2.prev = _context2.next) {
7066
7059
  case 0:
7067
- deltaX = _ref5.deltaX, deltaY = _ref5.deltaY;
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:
7068
7071
  setDim(function (prev) {
7069
7072
  return _objectSpread2(_objectSpread2({}, prev), {}, {
7070
7073
  translateX: prev.translateX + deltaX,
@@ -7086,7 +7089,7 @@ var PanZoom = function PanZoom(_ref) {
7086
7089
  }) : prev;
7087
7090
  });
7088
7091
 
7089
- case 5:
7092
+ case 8:
7090
7093
  case "end":
7091
7094
  return _context2.stop();
7092
7095
  }
@@ -7097,15 +7100,7 @@ var PanZoom = function PanZoom(_ref) {
7097
7100
  return function (_x) {
7098
7101
  return _ref6.apply(this, arguments);
7099
7102
  };
7100
- }(), [setBoardState, setDim]);
7101
- var onDrag = React__default.useCallback(function (state) {
7102
- var target = state.target;
7103
- var outsideItem = !insideClass(target, "item") || insideClass(target, "locked");
7104
-
7105
- if (moveFirst && outsideItem) {
7106
- onPan(state);
7107
- }
7108
- }, [moveFirst, onPan]);
7103
+ }(), [moveFirst, setBoardState, setDim]);
7109
7104
  var onKeyDown = useRecoilCallback(function (_ref7) {
7110
7105
  var snapshot = _ref7.snapshot;
7111
7106
  return /*#__PURE__*/function () {
@@ -7190,14 +7185,14 @@ var PanZoom = function PanZoom(_ref) {
7190
7185
  translateX: prev.translateX + moveX
7191
7186
  });
7192
7187
  });
7193
- zoomTo(zoom);
7188
+ zoomToCenter(zoom);
7194
7189
  e.preventDefault();
7195
7190
 
7196
7191
  case 31:
7197
7192
  // Temporary zoom
7198
7193
  if (e.key === " " && !e.repeat) {
7199
7194
  if (getMouseInfo().hover) {
7200
- zoomTo(3, getMouseInfo());
7195
+ zoomToCenter(3, getMouseInfo());
7201
7196
  }
7202
7197
  }
7203
7198
 
@@ -7213,15 +7208,15 @@ var PanZoom = function PanZoom(_ref) {
7213
7208
  return _ref8.apply(this, arguments);
7214
7209
  };
7215
7210
  }();
7216
- }, [setDim, zoomTo, getMouseInfo]);
7211
+ }, [setDim, zoomToCenter, getMouseInfo]);
7217
7212
  var onKeyUp = React__default.useCallback(function (e) {
7218
7213
  // Ignore text in Input or Textarea
7219
7214
  if (["INPUT", "TEXTAREA"].includes(e.target.tagName)) return; // Zoom out on release
7220
7215
 
7221
7216
  if (e.key === " " && getMouseInfo().hover) {
7222
- zoomTo(1 / 3, getMouseInfo());
7217
+ zoomToCenter(1 / 3, getMouseInfo());
7223
7218
  }
7224
- }, [getMouseInfo, zoomTo]);
7219
+ }, [getMouseInfo, zoomToCenter]);
7225
7220
  React__default.useEffect(function () {
7226
7221
  document.addEventListener("keydown", onKeyDown);
7227
7222
  document.addEventListener("keyup", onKeyUp);
@@ -7233,7 +7228,7 @@ var PanZoom = function PanZoom(_ref) {
7233
7228
  return /*#__PURE__*/React__default.createElement(Gesture, {
7234
7229
  onPan: onPan,
7235
7230
  onZoom: onZoom,
7236
- onDrag: onDrag
7231
+ mainAction: moveFirst ? "pan" : "drag"
7237
7232
  }, /*#__PURE__*/React__default.createElement("div", {
7238
7233
  style: {
7239
7234
  display: "inline-block",
@@ -7401,7 +7396,9 @@ var Board = function Board(_ref) {
7401
7396
  moveFirst: moveFirst
7402
7397
  }, /*#__PURE__*/React__default.createElement(Selector, {
7403
7398
  moveFirst: moveFirst
7404
- }, /*#__PURE__*/React__default.createElement(ActionPane, null, /*#__PURE__*/React__default.createElement(CursorPane, null, /*#__PURE__*/React__default.createElement("div", {
7399
+ }, /*#__PURE__*/React__default.createElement(ActionPane, {
7400
+ moveFirst: moveFirst
7401
+ }, /*#__PURE__*/React__default.createElement(CursorPane, null, /*#__PURE__*/React__default.createElement("div", {
7405
7402
  onContextMenu: function onContextMenu(e) {
7406
7403
  e.preventDefault();
7407
7404
  },
@@ -7412,6 +7409,7 @@ var Board = function Board(_ref) {
7412
7409
 
7413
7410
  var TOLERANCE = 100;
7414
7411
  var MIN_SIZE = 1000;
7412
+ var SCALE_TOLERANCE = 0.8;
7415
7413
 
7416
7414
  var translateBoundaries = function translateBoundaries(_ref) {
7417
7415
  var x = _ref.x,
@@ -7529,7 +7527,7 @@ var useDim = function useDim() {
7529
7527
  };
7530
7528
  }();
7531
7529
  }, [setDim]);
7532
- var zoomTo = useRecoilCallback(function (_ref5) {
7530
+ var zoomToCenter = useRecoilCallback(function (_ref5) {
7533
7531
  var snapshot = _ref5.snapshot;
7534
7532
  return /*#__PURE__*/function () {
7535
7533
  var _ref6 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(factor, zoomCenter) {
@@ -7608,24 +7606,68 @@ var useDim = function useDim() {
7608
7606
  };
7609
7607
  }();
7610
7608
  }, [setDim]);
7611
- var updateScaleBoundaries = useRecoilCallback(function (_ref7) {
7609
+ var zoomToExtent = useRecoilCallback(function (_ref7) {
7612
7610
  var snapshot = _ref7.snapshot;
7613
- return /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {
7614
- var _yield$snapshot$getPr3, _yield$snapshot$getPr4, width, height, boardWrapperRect, scaleX, scaleY, newScale;
7611
+ return /*#__PURE__*/function () {
7612
+ var _ref9 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(_ref8) {
7613
+ var left, top, width, height, _yield$snapshot$getPr3, boardWrapperRect, scaleX, scaleY, newScale, scaleWithTolerance, centerX, centerY;
7615
7614
 
7616
- return regeneratorRuntime.wrap(function _callee3$(_context3) {
7615
+ return regeneratorRuntime.wrap(function _callee3$(_context3) {
7616
+ while (1) {
7617
+ switch (_context3.prev = _context3.next) {
7618
+ case 0:
7619
+ left = _ref8.left, top = _ref8.top, width = _ref8.width, height = _ref8.height;
7620
+ _context3.next = 3;
7621
+ return snapshot.getPromise(ConfigurationAtom);
7622
+
7623
+ case 3:
7624
+ _yield$snapshot$getPr3 = _context3.sent;
7625
+ boardWrapperRect = _yield$snapshot$getPr3.boardWrapperRect;
7626
+ scaleX = boardWrapperRect.width / width;
7627
+ scaleY = boardWrapperRect.height / height;
7628
+ newScale = Math.min(scaleX, scaleY);
7629
+ scaleWithTolerance = newScale * SCALE_TOLERANCE;
7630
+ centerX = boardWrapperRect.width / 2 - (left + width / 2) * scaleWithTolerance;
7631
+ centerY = boardWrapperRect.height / 2 - (top + height / 2) * scaleWithTolerance;
7632
+ setDim(function (prev) {
7633
+ return _objectSpread2(_objectSpread2({}, prev), {}, {
7634
+ translateX: centerX,
7635
+ translateY: centerY,
7636
+ scale: scaleWithTolerance
7637
+ });
7638
+ });
7639
+
7640
+ case 12:
7641
+ case "end":
7642
+ return _context3.stop();
7643
+ }
7644
+ }
7645
+ }, _callee3);
7646
+ }));
7647
+
7648
+ return function (_x4) {
7649
+ return _ref9.apply(this, arguments);
7650
+ };
7651
+ }();
7652
+ }, [setDim]);
7653
+ var updateScaleBoundaries = useRecoilCallback(function (_ref10) {
7654
+ var snapshot = _ref10.snapshot;
7655
+ return /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4() {
7656
+ var _yield$snapshot$getPr4, _yield$snapshot$getPr5, width, height, boardWrapperRect, scaleX, scaleY, newScale;
7657
+
7658
+ return regeneratorRuntime.wrap(function _callee4$(_context4) {
7617
7659
  while (1) {
7618
- switch (_context3.prev = _context3.next) {
7660
+ switch (_context4.prev = _context4.next) {
7619
7661
  case 0:
7620
- _context3.next = 2;
7662
+ _context4.next = 2;
7621
7663
  return snapshot.getPromise(ConfigurationAtom);
7622
7664
 
7623
7665
  case 2:
7624
- _yield$snapshot$getPr3 = _context3.sent;
7625
- _yield$snapshot$getPr4 = _yield$snapshot$getPr3.itemExtent;
7626
- width = _yield$snapshot$getPr4.width;
7627
- height = _yield$snapshot$getPr4.height;
7628
- boardWrapperRect = _yield$snapshot$getPr3.boardWrapperRect;
7666
+ _yield$snapshot$getPr4 = _context4.sent;
7667
+ _yield$snapshot$getPr5 = _yield$snapshot$getPr4.itemExtent;
7668
+ width = _yield$snapshot$getPr5.width;
7669
+ height = _yield$snapshot$getPr5.height;
7670
+ boardWrapperRect = _yield$snapshot$getPr4.boardWrapperRect;
7629
7671
  scaleX = boardWrapperRect.width / width;
7630
7672
  scaleY = boardWrapperRect.height / height;
7631
7673
  newScale = Math.min(scaleX, scaleY);
@@ -7633,86 +7675,86 @@ var useDim = function useDim() {
7633
7675
 
7634
7676
  case 11:
7635
7677
  case "end":
7636
- return _context3.stop();
7678
+ return _context4.stop();
7637
7679
  }
7638
7680
  }
7639
- }, _callee3);
7681
+ }, _callee4);
7640
7682
  }));
7641
7683
  }, []);
7642
- var getCenterCoordinates = useRecoilCallback(function (_ref9) {
7643
- var snapshot = _ref9.snapshot;
7644
- return /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4() {
7645
- var _yield$snapshot$getPr5, boardWrapperRect, boardSize, _yield$snapshot$getPr6, translateX, translateY, scale;
7684
+ var getCenterCoordinates = useRecoilCallback(function (_ref12) {
7685
+ var snapshot = _ref12.snapshot;
7686
+ return /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee5() {
7687
+ var _yield$snapshot$getPr6, boardWrapperRect, boardSize, _yield$snapshot$getPr7, translateX, translateY, scale;
7646
7688
 
7647
- return regeneratorRuntime.wrap(function _callee4$(_context4) {
7689
+ return regeneratorRuntime.wrap(function _callee5$(_context5) {
7648
7690
  while (1) {
7649
- switch (_context4.prev = _context4.next) {
7691
+ switch (_context5.prev = _context5.next) {
7650
7692
  case 0:
7651
- _context4.next = 2;
7693
+ _context5.next = 2;
7652
7694
  return snapshot.getPromise(ConfigurationAtom);
7653
7695
 
7654
7696
  case 2:
7655
- _yield$snapshot$getPr5 = _context4.sent;
7656
- boardWrapperRect = _yield$snapshot$getPr5.boardWrapperRect;
7657
- boardSize = _yield$snapshot$getPr5.boardSize;
7658
- _context4.next = 7;
7697
+ _yield$snapshot$getPr6 = _context5.sent;
7698
+ boardWrapperRect = _yield$snapshot$getPr6.boardWrapperRect;
7699
+ boardSize = _yield$snapshot$getPr6.boardSize;
7700
+ _context5.next = 7;
7659
7701
  return snapshot.getPromise(BoardTransformAtom);
7660
7702
 
7661
7703
  case 7:
7662
- _yield$snapshot$getPr6 = _context4.sent;
7663
- translateX = _yield$snapshot$getPr6.translateX;
7664
- translateY = _yield$snapshot$getPr6.translateY;
7665
- scale = _yield$snapshot$getPr6.scale;
7666
- return _context4.abrupt("return", {
7704
+ _yield$snapshot$getPr7 = _context5.sent;
7705
+ translateX = _yield$snapshot$getPr7.translateX;
7706
+ translateY = _yield$snapshot$getPr7.translateY;
7707
+ scale = _yield$snapshot$getPr7.scale;
7708
+ return _context5.abrupt("return", {
7667
7709
  x: (boardWrapperRect.width / 2 - translateX) / scale - boardSize / 2,
7668
7710
  y: (boardWrapperRect.height / 2 - translateY) / scale - boardSize / 2
7669
7711
  });
7670
7712
 
7671
7713
  case 12:
7672
7714
  case "end":
7673
- return _context4.stop();
7715
+ return _context5.stop();
7674
7716
  }
7675
7717
  }
7676
- }, _callee4);
7718
+ }, _callee5);
7677
7719
  }));
7678
7720
  }, []);
7679
- var updateItemExtent = useRecoilCallback(function (_ref11) {
7680
- var snapshot = _ref11.snapshot,
7681
- set = _ref11.set;
7682
- return /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee5() {
7683
- var itemIds, _yield$snapshot$getPr7, boardWrapperRect, boardWrapper, boardSize, _yield$snapshot$getPr8, scale, translateX, translateY, _ref13, left, top, width, height, relativeExtent, delta, _delta;
7721
+ var updateItemExtent = useRecoilCallback(function (_ref14) {
7722
+ var snapshot = _ref14.snapshot,
7723
+ set = _ref14.set;
7724
+ return /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee6() {
7725
+ var itemIds, _yield$snapshot$getPr8, boardWrapperRect, boardWrapper, boardSize, _yield$snapshot$getPr9, scale, translateX, translateY, _ref16, left, top, width, height, relativeExtent, delta, _delta;
7684
7726
 
7685
- return regeneratorRuntime.wrap(function _callee5$(_context5) {
7727
+ return regeneratorRuntime.wrap(function _callee6$(_context6) {
7686
7728
  while (1) {
7687
- switch (_context5.prev = _context5.next) {
7729
+ switch (_context6.prev = _context6.next) {
7688
7730
  case 0:
7689
- _context5.next = 2;
7731
+ _context6.next = 2;
7690
7732
  return snapshot.getPromise(ItemListAtom);
7691
7733
 
7692
7734
  case 2:
7693
- itemIds = _context5.sent;
7694
- _context5.next = 5;
7735
+ itemIds = _context6.sent;
7736
+ _context6.next = 5;
7695
7737
  return snapshot.getPromise(ConfigurationAtom);
7696
7738
 
7697
7739
  case 5:
7698
- _yield$snapshot$getPr7 = _context5.sent;
7699
- boardWrapperRect = _yield$snapshot$getPr7.boardWrapperRect;
7700
- boardWrapper = _yield$snapshot$getPr7.boardWrapper;
7701
- boardSize = _yield$snapshot$getPr7.boardSize;
7702
- _context5.next = 11;
7740
+ _yield$snapshot$getPr8 = _context6.sent;
7741
+ boardWrapperRect = _yield$snapshot$getPr8.boardWrapperRect;
7742
+ boardWrapper = _yield$snapshot$getPr8.boardWrapper;
7743
+ boardSize = _yield$snapshot$getPr8.boardSize;
7744
+ _context6.next = 11;
7703
7745
  return snapshot.getPromise(BoardTransformAtom);
7704
7746
 
7705
7747
  case 11:
7706
- _yield$snapshot$getPr8 = _context5.sent;
7707
- scale = _yield$snapshot$getPr8.scale;
7708
- translateX = _yield$snapshot$getPr8.translateX;
7709
- translateY = _yield$snapshot$getPr8.translateY;
7710
- _ref13 = getItemBoundingBox(itemIds, boardWrapper) || {
7748
+ _yield$snapshot$getPr9 = _context6.sent;
7749
+ scale = _yield$snapshot$getPr9.scale;
7750
+ translateX = _yield$snapshot$getPr9.translateX;
7751
+ translateY = _yield$snapshot$getPr9.translateY;
7752
+ _ref16 = getItemBoundingBox(itemIds, boardWrapper) || {
7711
7753
  left: boardSize / 2 * scale + boardWrapperRect.left + translateX,
7712
7754
  top: boardSize / 2 * scale + boardWrapperRect.top + translateY,
7713
7755
  width: 0,
7714
7756
  height: 0
7715
- }, left = _ref13.left, top = _ref13.top, width = _ref13.width, height = _ref13.height;
7757
+ }, left = _ref16.left, top = _ref16.top, width = _ref16.width, height = _ref16.height;
7716
7758
  relativeExtent = {
7717
7759
  left: (left - boardWrapperRect.left - translateX) / scale,
7718
7760
  top: (top - boardWrapperRect.top - translateY) / scale,
@@ -7744,10 +7786,10 @@ var useDim = function useDim() {
7744
7786
 
7745
7787
  case 22:
7746
7788
  case "end":
7747
- return _context5.stop();
7789
+ return _context6.stop();
7748
7790
  }
7749
7791
  }
7750
- }, _callee5);
7792
+ }, _callee6);
7751
7793
  }));
7752
7794
  }, []);
7753
7795
  var debouncedUpdateItemExtent = useDebouncedCallback(updateItemExtent, [], 300);
@@ -7759,7 +7801,9 @@ var useDim = function useDim() {
7759
7801
  return {
7760
7802
  setDim: setDimSafe,
7761
7803
  getDim: getDim,
7762
- zoomTo: zoomTo,
7804
+ zoomTo: zoomToCenter,
7805
+ zoomToCenter: zoomToCenter,
7806
+ zoomToExtent: zoomToExtent,
7763
7807
  getCenter: getCenterCoordinates,
7764
7808
  updateItemExtent: debouncedUpdateItemExtent
7765
7809
  };