diff --git a/lib/commonjs/ReactNativeZoomableView.js b/lib/commonjs/ReactNativeZoomableView.js
index 6937908..000ace8 100644
--- a/lib/commonjs/ReactNativeZoomableView.js
+++ b/lib/commonjs/ReactNativeZoomableView.js
@@ -4,44 +4,35 @@ Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.ReactNativeZoomableView = void 0;
-
var _lodash = require("lodash");
-
var _react = _interopRequireWildcard(require("react"));
-
var _reactNative = require("react-native");
-
var _animations = require("./animations");
-
var _components = require("./components");
-
var _StaticPin = require("./components/StaticPin");
-
var _debugHelper = require("./debugHelper");
-
var _helper = require("./helper");
-
var _coordinateConversion = require("./helper/coordinateConversion");
-
+var _useLatestCallback = require("./hooks/useLatestCallback");
var _jsxRuntime = require("react/jsx-runtime");
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
-
-const initialState = {
- originalWidth: 0,
- originalHeight: 0,
- originalPageX: 0,
- originalPageY: 0,
- originalX: 0,
- originalY: 0,
- pinSize: {
+const ReactNativeZoomableView = (props, ref) => {
+ const [originalWidth, setOriginalWidth] = (0, _react.useState)(0);
+ const [originalHeight, setOriginalHeight] = (0, _react.useState)(0);
+ const [originalPageX, setOriginalPageX] = (0, _react.useState)(0);
+ const [originalPageY, setOriginalPageY] = (0, _react.useState)(0);
+ const [originalX, setOriginalX] = (0, _react.useState)(0);
+ const [originalY, setOriginalY] = (0, _react.useState)(0);
+ const [pinSize, setPinSize] = (0, _react.useState)({
width: 0,
height: 0
- }
-};
-
-class ReactNativeZoomableView extends _react.Component {
- static defaultProps = {
+ });
+ const [debugPoints, setDebugPoints] = (0, _react.useState)([]);
+ const [stateTouches, setStateTouches] = (0, _react.useState)([]);
+ const zoomSubjectWrapperRef = (0, _react.useRef)(null);
+ const gestureHandlers = (0, _react.useRef)();
+ const doubleTapFirstTapReleaseTimestamp = (0, _react.useRef)();
+ props = (0, _lodash.defaults)({}, props, {
zoomEnabled: true,
panEnabled: true,
initialZoom: 1,
@@ -54,7 +45,7 @@ class ReactNativeZoomableView extends _react.Component {
movementSensibility: 1,
doubleTapDelay: 300,
zoomStep: 0.5,
- onLongPress: null,
+ onLongPress: undefined,
longPressDuration: 700,
contentWidth: undefined,
contentHeight: undefined,
@@ -64,47 +55,35 @@ class ReactNativeZoomableView extends _react.Component {
onStaticPinPositionChange: undefined,
onStaticPinPositionMove: undefined,
disablePanOnInitialZoom: false
- };
- panAnim = new _reactNative.Animated.ValueXY({
+ });
+ const panAnim = (0, _react.useRef)(new _reactNative.Animated.ValueXY({
x: 0,
y: 0
- });
- zoomAnim = new _reactNative.Animated.Value(1);
- offsetX = 0;
- offsetY = 0;
- zoomLevel = 1;
- lastGestureCenterPosition = null;
- lastGestureTouchDistance = null;
- _gestureStarted = false;
-
- set gestureStarted(v) {
- this._gestureStarted = v;
- }
+ }));
+ const zoomAnim = (0, _react.useRef)(new _reactNative.Animated.Value(1));
+ const offsetX = (0, _react.useRef)(0);
+ const offsetY = (0, _react.useRef)(0);
+ const zoomLevel = (0, _react.useRef)(1);
+ const lastGestureCenterPosition = (0, _react.useRef)(null);
+ const lastGestureTouchDistance = (0, _react.useRef)(150);
+ const gestureType = (0, _react.useRef)();
+ const gestureStarted = (0, _react.useRef)(false);
- get gestureStarted() {
- return this._gestureStarted;
- }
/**
* Last press time (used to evaluate whether user double tapped)
- * @type {number}
*/
-
-
- longPressTimeout = null;
- touches = [];
-
- constructor(props) {
- super(props); // This needs to be done before anything else to initialize the state.
- // Otherwise, the logic below may reference the state when it's undefined,
- // causing runtime errors.
-
- this.state = { ...initialState
- };
- this.gestureHandlers = _reactNative.PanResponder.create({
- onStartShouldSetPanResponder: this._handleStartShouldSetPanResponder,
- onPanResponderGrant: this._handlePanResponderGrant,
- onPanResponderMove: this._handlePanResponderMove,
- onPanResponderRelease: this._handlePanResponderEnd,
+ const longPressTimeout = (0, _react.useRef)();
+ const onTransformInvocationInitialized = (0, _react.useRef)();
+ const singleTapTimeoutId = (0, _react.useRef)();
+ const touches = (0, _react.useRef)([]);
+ const doubleTapFirstTap = (0, _react.useRef)();
+ const measureZoomSubjectInterval = (0, _react.useRef)();
+ (0, _react.useLayoutEffect)(() => {
+ gestureHandlers.current = _reactNative.PanResponder.create({
+ onStartShouldSetPanResponder: _handleStartShouldSetPanResponder,
+ onPanResponderGrant: _handlePanResponderGrant,
+ onPanResponderMove: _handlePanResponderMove,
+ onPanResponderRelease: _handlePanResponderEnd,
onPanResponderTerminate: (evt, gestureState) => {
// We should also call _handlePanResponderEnd
// to properly perform cleanups when the gesture is terminated
@@ -112,155 +91,147 @@ class ReactNativeZoomableView extends _react.Component {
// This also fixes a weird issue where
// on real device, sometimes onPanResponderRelease is not called when you lift 2 fingers up,
// but onPanResponderTerminate is called instead for no apparent reason.
- this._handlePanResponderEnd(evt, gestureState);
-
- this.props.onPanResponderTerminate?.(evt, gestureState, this._getZoomableViewEventObject());
+ _handlePanResponderEnd(evt, gestureState);
+ props.onPanResponderTerminate?.(evt, gestureState, _getZoomableViewEventObject());
},
- onPanResponderTerminationRequest: (evt, gestureState) => !!this.props.onPanResponderTerminationRequest?.(evt, gestureState, this._getZoomableViewEventObject()),
+ onPanResponderTerminationRequest: (evt, gestureState) => !!props.onPanResponderTerminationRequest?.(evt, gestureState, _getZoomableViewEventObject()),
// Defaults to true to prevent parent components, such as React Navigation's tab view, from taking over as responder.
- onShouldBlockNativeResponder: (evt, gestureState) => this.props.onShouldBlockNativeResponder?.(evt, gestureState, this._getZoomableViewEventObject()) ?? true,
- onStartShouldSetPanResponderCapture: (evt, gestureState) => !!this.props.onStartShouldSetPanResponderCapture?.(evt, gestureState),
- onMoveShouldSetPanResponderCapture: (evt, gestureState) => !!this.props.onMoveShouldSetPanResponderCapture?.(evt, gestureState)
+ onShouldBlockNativeResponder: (evt, gestureState) => props.onShouldBlockNativeResponder?.(evt, gestureState, _getZoomableViewEventObject()) ?? true,
+ onStartShouldSetPanResponderCapture: (evt, gestureState) => !!props.onStartShouldSetPanResponderCapture?.(evt, gestureState),
+ onMoveShouldSetPanResponderCapture: (evt, gestureState) => !!props.onMoveShouldSetPanResponderCapture?.(evt, gestureState)
});
- this.zoomSubjectWrapperRef = /*#__PURE__*/(0, _react.createRef)();
- if (this.props.zoomAnimatedValue) this.zoomAnim = this.props.zoomAnimatedValue;
- if (this.props.panAnimatedValueXY) this.panAnim = this.props.panAnimatedValueXY;
- if (this.props.initialZoom) this.zoomLevel = this.props.initialZoom;
- if (this.props.initialOffsetX != null) this.offsetX = this.props.initialOffsetX;
- if (this.props.initialOffsetY != null) this.offsetY = this.props.initialOffsetY;
- this.panAnim.setValue({
- x: this.offsetX,
- y: this.offsetY
+ if (props.zoomAnimatedValue) zoomAnim.current = props.zoomAnimatedValue;
+ if (props.panAnimatedValueXY) panAnim.current = props.panAnimatedValueXY;
+ if (props.initialZoom) zoomLevel.current = props.initialZoom;
+ if (props.initialOffsetX != null) offsetX.current = props.initialOffsetX;
+ if (props.initialOffsetY != null) offsetY.current = props.initialOffsetY;
+ panAnim.current.setValue({
+ x: offsetX.current,
+ y: offsetY.current
});
- this.zoomAnim.setValue(this.zoomLevel);
- this.panAnim.addListener(({
+ zoomAnim.current.setValue(zoomLevel.current);
+ panAnim.current.addListener(({
x,
y
}) => {
- this.offsetX = x;
- this.offsetY = y;
+ offsetX.current = x;
+ offsetY.current = y;
});
- this.zoomAnim.addListener(({
+ zoomAnim.current.addListener(({
value
}) => {
- this.zoomLevel = value;
+ zoomLevel.current = value;
});
- this.lastGestureTouchDistance = 150;
- this.gestureType = null;
- }
-
- componentDidUpdate(prevProps, prevState) {
- const {
- zoomEnabled,
- initialZoom
- } = this.props;
-
- if (prevProps.zoomEnabled && !zoomEnabled && initialZoom) {
- this.zoomLevel = initialZoom;
- this.zoomAnim.setValue(this.zoomLevel);
+ }, []);
+ const {
+ zoomEnabled
+ } = props;
+ const initialZoom = (0, _react.useRef)(props.initialZoom);
+ initialZoom.current = props.initialZoom;
+ (0, _react.useLayoutEffect)(() => {
+ if (!zoomEnabled && initialZoom.current) {
+ zoomLevel.current = initialZoom.current;
+ zoomAnim.current.setValue(zoomLevel.current);
}
-
- if (!this.onTransformInvocationInitialized && this._invokeOnTransform().successful) {
- this.panAnim.addListener(() => this._invokeOnTransform());
- this.zoomAnim.addListener(() => this._invokeOnTransform());
- this.onTransformInvocationInitialized = true;
+ }, [zoomEnabled]);
+ (0, _react.useLayoutEffect)(() => {
+ if (!onTransformInvocationInitialized.current && _invokeOnTransform().successful) {
+ panAnim.current.addListener(() => _invokeOnTransform());
+ zoomAnim.current.addListener(() => _invokeOnTransform());
+ onTransformInvocationInitialized.current = true;
}
-
- const currState = this.state;
- const originalMeasurementsChanged = currState.originalHeight !== prevState.originalHeight || currState.originalWidth !== prevState.originalWidth || currState.originalPageX !== prevState.originalPageX || currState.originalPageY !== prevState.originalPageY || currState.originalX !== prevState.originalX || currState.originalY !== prevState.originalY;
- const staticPinPositionChanged = prevProps.staticPinPosition?.x !== this.props.staticPinPosition?.x || prevProps.staticPinPosition?.y !== this.props.staticPinPosition?.y; // We use a custom `onLayout` event, so the clients can stay in-sync
+ },
+ // FIXME: deps has implicit coupling with internal _invokeOnTransform logic
+ [originalWidth, originalHeight]);
+ const onLayout = (0, _react.useRef)(props.onLayout);
+ onLayout.current = props.onLayout;
+
+ // Handle original measurements changed
+ (0, _react.useLayoutEffect)(() => {
+ // We use a custom `onLayout` event, so the clients can stay in-sync
// with when the internal measurements are actually saved to the state,
// thus helping them apply transformations at more accurate timings
-
- if (originalMeasurementsChanged) {
- const layout = {
- width: currState.originalWidth,
- height: currState.originalHeight,
- x: currState.originalX,
- y: currState.originalY
- };
- this.props.onLayout?.({
- nativeEvent: {
- layout
- }
- });
- }
-
- if (this.onTransformInvocationInitialized && (originalMeasurementsChanged || staticPinPositionChanged)) {
- this._invokeOnTransform();
- }
- }
-
- componentDidMount() {
- this.measureZoomSubject(); // We've already run `grabZoomSubjectOriginalMeasurements` at various events
+ const layout = {
+ width: originalWidth,
+ height: originalHeight,
+ x: originalX,
+ y: originalY
+ };
+ onLayout.current?.({
+ nativeEvent: {
+ layout
+ }
+ });
+ if (onTransformInvocationInitialized.current) _invokeOnTransform();
+ }, [originalHeight, originalWidth, originalPageX, originalPageY, originalX, originalY]);
+
+ // Handle staticPinPosition changed
+ (0, _react.useLayoutEffect)(() => {
+ if (onTransformInvocationInitialized.current) _invokeOnTransform();
+ }, [props.staticPinPosition?.x, props.staticPinPosition?.y]);
+ (0, _react.useEffect)(() => {
+ measureZoomSubject();
+ // We've already run `grabZoomSubjectOriginalMeasurements` at various events
// to make sure the measurements are promptly updated.
// However, there might be cases we haven't accounted for, especially when
// native processes are involved. To account for those cases,
// we'll use an interval here to ensure we're always up-to-date.
// The `setState` in `grabZoomSubjectOriginalMeasurements` won't trigger a rerender
// if the values given haven't changed, so we're not running performance risk here.
+ measureZoomSubjectInterval.current = setInterval(measureZoomSubject, 1e3);
+ return () => {
+ measureZoomSubjectInterval.current && clearInterval(measureZoomSubjectInterval.current);
+ };
+ }, []);
+ const onStaticPinPositionChange = (0, _useLatestCallback.useLatestCallback)(props.onStaticPinPositionChange || (() => undefined));
+ const debouncedOnStaticPinPositionChange = (0, _react.useMemo)(() => (0, _lodash.debounce)(onStaticPinPositionChange, 100), []);
- this.measureZoomSubjectInterval = setInterval(this.measureZoomSubject, 1e3);
- }
-
- componentWillUnmount() {
- this.measureZoomSubjectInterval && clearInterval(this.measureZoomSubjectInterval);
- }
-
- debouncedOnStaticPinPositionChange = (0, _lodash.debounce)(position => this.props.onStaticPinPositionChange?.(position), 100);
/**
* try to invoke onTransform
* @private
*/
-
- _invokeOnTransform() {
- const zoomableViewEvent = this._getZoomableViewEventObject();
-
- const position = this._staticPinPosition();
-
+ const _invokeOnTransform = (0, _useLatestCallback.useLatestCallback)(() => {
+ const zoomableViewEvent = _getZoomableViewEventObject();
+ const position = _staticPinPosition();
if (!zoomableViewEvent.originalWidth || !zoomableViewEvent.originalHeight) return {
successful: false
};
- this.props.onTransform?.(zoomableViewEvent);
-
+ props.onTransform?.(zoomableViewEvent);
if (position) {
- this.props.onStaticPinPositionMove?.(position);
- this.debouncedOnStaticPinPositionChange(position);
+ props.onStaticPinPositionMove?.(position);
+ debouncedOnStaticPinPositionChange(position);
}
-
return {
successful: true
};
- }
+ });
+
/**
* Returns additional information about components current state for external event hooks
*
* @returns {{}}
* @private
*/
-
-
- _getZoomableViewEventObject(overwriteObj = {}) {
+ const _getZoomableViewEventObject = (0, _useLatestCallback.useLatestCallback)((overwriteObj = {}) => {
return {
- zoomLevel: this.zoomLevel,
- offsetX: this.offsetX,
- offsetY: this.offsetY,
- originalHeight: this.state.originalHeight,
- originalWidth: this.state.originalWidth,
- originalPageX: this.state.originalPageX,
- originalPageY: this.state.originalPageY,
+ zoomLevel: zoomLevel.current,
+ offsetX: offsetX.current,
+ offsetY: offsetY.current,
+ originalHeight,
+ originalWidth,
+ originalPageX,
+ originalPageY,
...overwriteObj
};
- }
+ });
+
/**
* Get the original box dimensions and save them for later use.
* (They will be used to calculate boxBorders)
*
* @private
*/
-
-
- measureZoomSubject = () => {
+ const measureZoomSubject = (0, _useLatestCallback.useLatestCallback)(() => {
// make sure we measure after animations are complete
requestAnimationFrame(() => {
// this setTimeout is here to fix a weird issue on iOS where the measurements are all `0`
@@ -272,29 +243,22 @@ class ReactNativeZoomableView extends _react.Component {
// in which case these measurements will not represent the true "original" measurements.
// We just need to make sure the zoomSubjectWrapper perfectly aligns with the zoomSubject
// (no border, space, or anything between them)
- this.zoomSubjectWrapperRef.current?.measure((x, y, width, height, pageX, pageY) => {
+ zoomSubjectWrapperRef.current?.measure((x, y, width, height, pageX, pageY) => {
// When the component is off-screen, these become all 0s, so we don't set them
// to avoid messing up calculations, especially ones that are done right after
// the component transitions from hidden to visible.
- if (!pageX && !pageY && !width && !height) return; // If these values are all the same, don't re-set them in state
- // this way we don't re-render
-
- if (this.state.originalX === x && this.state.originalY === y && this.state.originalWidth === width && this.state.originalHeight === height && this.state.originalPageX === pageX && this.state.originalPageY === pageY) {
- return;
- }
-
- this.setState({
- originalX: x,
- originalY: y,
- originalWidth: width,
- originalHeight: height,
- originalPageX: pageX,
- originalPageY: pageY
- });
+ if (!pageX && !pageY && !width && !height) return;
+ setOriginalX(x);
+ setOriginalY(y);
+ setOriginalWidth(width);
+ setOriginalHeight(height);
+ setOriginalPageX(pageX);
+ setOriginalPageY(pageY);
});
});
});
- };
+ });
+
/**
* Handles the start of touch events and checks for taps
*
@@ -304,18 +268,18 @@ class ReactNativeZoomableView extends _react.Component {
*
* @private
*/
+ const _handleStartShouldSetPanResponder = (0, _useLatestCallback.useLatestCallback)((e, gestureState) => {
+ if (props.onStartShouldSetPanResponder) {
+ props.onStartShouldSetPanResponder(e, gestureState, _getZoomableViewEventObject(), false);
+ }
- _handleStartShouldSetPanResponder = (e, gestureState) => {
- if (this.props.onStartShouldSetPanResponder) {
- this.props.onStartShouldSetPanResponder(e, gestureState, this._getZoomableViewEventObject(), false);
- } // Always set pan responder on start
+ // Always set pan responder on start
// of gesture so we can handle tap.
// "Pan threshold validation" will be handled
// in `onPanResponderMove` instead of in `onMoveShouldSetPanResponder`
-
-
return true;
- };
+ });
+
/**
* Calculates pinch distance
*
@@ -323,21 +287,20 @@ class ReactNativeZoomableView extends _react.Component {
* @param gestureState
* @private
*/
-
- _handlePanResponderGrant = (e, gestureState) => {
- if (this.props.onLongPress) {
+ const _handlePanResponderGrant = (0, _useLatestCallback.useLatestCallback)((e, gestureState) => {
+ if (props.onLongPress) {
e.persist();
- this.longPressTimeout = setTimeout(() => {
- this.props.onLongPress?.(e, gestureState, this._getZoomableViewEventObject());
- this.longPressTimeout = null;
- }, this.props.longPressDuration);
+ longPressTimeout.current = setTimeout(() => {
+ props.onLongPress?.(e, gestureState, _getZoomableViewEventObject());
+ longPressTimeout.current = undefined;
+ }, props.longPressDuration);
}
+ props.onPanResponderGrant?.(e, gestureState, _getZoomableViewEventObject());
+ panAnim.current.stopAnimation();
+ zoomAnim.current.stopAnimation();
+ gestureStarted.current = true;
+ });
- this.props.onPanResponderGrant?.(e, gestureState, this._getZoomableViewEventObject());
- this.panAnim.stopAnimation();
- this.zoomAnim.stopAnimation();
- this.gestureStarted = true;
- };
/**
* Handles the end of touch events
*
@@ -346,37 +309,29 @@ class ReactNativeZoomableView extends _react.Component {
*
* @private
*/
-
- _handlePanResponderEnd = (e, gestureState) => {
- if (!this.gestureType) {
- this._resolveAndHandleTap(e);
+ const _handlePanResponderEnd = (0, _useLatestCallback.useLatestCallback)((e, gestureState) => {
+ if (!gestureType.current) {
+ _resolveAndHandleTap(e);
}
-
- this.setState({
- debugPoints: []
- });
- this.lastGestureCenterPosition = null;
-
- if (this.longPressTimeout) {
- clearTimeout(this.longPressTimeout);
- this.longPressTimeout = null;
+ setDebugPoints([]);
+ lastGestureCenterPosition.current = null;
+ if (longPressTimeout.current) {
+ clearTimeout(longPressTimeout.current);
+ longPressTimeout.current = undefined;
}
-
- this.props.onPanResponderEnd?.(e, gestureState, this._getZoomableViewEventObject());
-
- if (this.gestureType === 'pinch') {
- this.props.onZoomEnd?.(e, gestureState, this._getZoomableViewEventObject());
- } else if (this.gestureType === 'shift') {
- this.props.onShiftingEnd?.(e, gestureState, this._getZoomableViewEventObject());
+ props.onPanResponderEnd?.(e, gestureState, _getZoomableViewEventObject());
+ if (gestureType.current === 'pinch') {
+ props.onZoomEnd?.(e, gestureState, _getZoomableViewEventObject());
+ } else if (gestureType.current === 'shift') {
+ props.onShiftingEnd?.(e, gestureState, _getZoomableViewEventObject());
}
-
- if (this.props.staticPinPosition) {
- this._updateStaticPin();
+ if (props.staticPinPosition) {
+ _updateStaticPin();
}
+ gestureType.current = undefined;
+ gestureStarted.current = false;
+ });
- this.gestureType = null;
- this.gestureStarted = false;
- };
/**
* Handles the actual movement of our pan responder
*
@@ -385,67 +340,59 @@ class ReactNativeZoomableView extends _react.Component {
*
* @private
*/
-
- _handlePanResponderMove = (e, gestureState) => {
- if (this.props.onPanResponderMove) {
- if (this.props.onPanResponderMove(e, gestureState, this._getZoomableViewEventObject())) {
+ const _handlePanResponderMove = (0, _useLatestCallback.useLatestCallback)((e, gestureState) => {
+ if (props.onPanResponderMove) {
+ if (props.onPanResponderMove(e, gestureState, _getZoomableViewEventObject())) {
return false;
}
- } // Only supports 2 touches and below,
- // any invalid number will cause the gesture to end.
-
+ }
+ // Only supports 2 touches and below,
+ // any invalid number will cause the gesture to end.
if (gestureState.numberActiveTouches <= 2) {
- if (!this.gestureStarted) {
- this._handlePanResponderGrant(e, gestureState);
+ if (!gestureStarted.current) {
+ _handlePanResponderGrant(e, gestureState);
}
} else {
- if (this.gestureStarted) {
- this._handlePanResponderEnd(e, gestureState);
+ if (gestureStarted.current) {
+ _handlePanResponderEnd(e, gestureState);
}
-
return true;
}
-
if (gestureState.numberActiveTouches === 2) {
- if (this.longPressTimeout) {
- clearTimeout(this.longPressTimeout);
- this.longPressTimeout = null;
- } // change some measurement states when switching gesture to ensure a smooth transition
-
-
- if (this.gestureType !== 'pinch') {
- this.lastGestureCenterPosition = (0, _helper.calcGestureCenterPoint)(e, gestureState);
- this.lastGestureTouchDistance = (0, _helper.calcGestureTouchDistance)(e, gestureState);
+ if (longPressTimeout.current) {
+ clearTimeout(longPressTimeout.current);
+ longPressTimeout.current = undefined;
}
- this.gestureType = 'pinch';
-
- this._handlePinching(e, gestureState);
+ // change some measurement states when switching gesture to ensure a smooth transition
+ if (gestureType.current !== 'pinch') {
+ lastGestureCenterPosition.current = (0, _helper.calcGestureCenterPoint)(e, gestureState);
+ lastGestureTouchDistance.current = (0, _helper.calcGestureTouchDistance)(e, gestureState);
+ }
+ gestureType.current = 'pinch';
+ _handlePinching(e, gestureState);
} else if (gestureState.numberActiveTouches === 1) {
- if (this.longPressTimeout && (Math.abs(gestureState.dx) > 5 || Math.abs(gestureState.dy) > 5)) {
- clearTimeout(this.longPressTimeout);
- this.longPressTimeout = null;
- } // change some measurement states when switching gesture to ensure a smooth transition
-
-
- if (this.gestureType !== 'shift') {
- this.lastGestureCenterPosition = (0, _helper.calcGestureCenterPoint)(e, gestureState);
+ if (longPressTimeout.current && (Math.abs(gestureState.dx) > 5 || Math.abs(gestureState.dy) > 5)) {
+ clearTimeout(longPressTimeout.current);
+ longPressTimeout.current = undefined;
+ }
+ // change some measurement states when switching gesture to ensure a smooth transition
+ if (gestureType.current !== 'shift') {
+ lastGestureCenterPosition.current = (0, _helper.calcGestureCenterPoint)(e, gestureState);
}
-
const {
dx,
dy
} = gestureState;
const isShiftGesture = Math.abs(dx) > 2 || Math.abs(dy) > 2;
-
if (isShiftGesture) {
- this.gestureType = 'shift';
-
- this._handleShifting(gestureState);
+ gestureType.current = 'shift';
+ _handleShifting(gestureState);
}
}
- };
+ });
+
/**
* Handles the pinch movement and zooming
*
@@ -454,115 +401,98 @@ class ReactNativeZoomableView extends _react.Component {
*
* @private
*/
-
- _handlePinching(e, gestureState) {
- if (!this.props.zoomEnabled) return;
+ const _handlePinching = (0, _useLatestCallback.useLatestCallback)((e, gestureState) => {
+ if (!props.zoomEnabled) return;
const {
maxZoom,
minZoom,
pinchToZoomInSensitivity,
pinchToZoomOutSensitivity
- } = this.props;
+ } = props;
const distance = (0, _helper.calcGestureTouchDistance)(e, gestureState);
-
- if (this.props.onZoomBefore && this.props.onZoomBefore(e, gestureState, this._getZoomableViewEventObject())) {
+ if (props.onZoomBefore && props.onZoomBefore(e, gestureState, _getZoomableViewEventObject())) {
return;
}
-
if (!distance) return;
- if (!this.lastGestureTouchDistance) return; // define the new zoom level and take zoom level sensitivity into consideration
+ if (!lastGestureTouchDistance.current) return;
- const zoomGrowthFromLastGestureState = distance / this.lastGestureTouchDistance;
- this.lastGestureTouchDistance = distance;
+ // define the new zoom level and take zoom level sensitivity into consideration
+ const zoomGrowthFromLastGestureState = distance / lastGestureTouchDistance.current;
+ lastGestureTouchDistance.current = distance;
const pinchToZoomSensitivity = zoomGrowthFromLastGestureState < 1 ? pinchToZoomOutSensitivity : pinchToZoomInSensitivity;
if (pinchToZoomSensitivity == null) return;
- const deltaGrowth = zoomGrowthFromLastGestureState - 1; // 0 - no resistance
+ const deltaGrowth = zoomGrowthFromLastGestureState - 1;
+ // 0 - no resistance
// 10 - 90% resistance
-
const deltaGrowthAdjustedBySensitivity = deltaGrowth * (1 - pinchToZoomSensitivity * 9 / 100);
- let newZoomLevel = this.zoomLevel * (1 + deltaGrowthAdjustedBySensitivity); // make sure max and min zoom levels are respected
+ let newZoomLevel = zoomLevel.current * (1 + deltaGrowthAdjustedBySensitivity);
+ // make sure max and min zoom levels are respected
if (maxZoom != null && newZoomLevel > maxZoom) {
newZoomLevel = maxZoom;
}
-
if (minZoom != null && newZoomLevel < minZoom) {
newZoomLevel = minZoom;
}
-
const gestureCenterPoint = (0, _helper.calcGestureCenterPoint)(e, gestureState);
if (!gestureCenterPoint) return;
let zoomCenter = {
- x: gestureCenterPoint.x - this.state.originalPageX,
- y: gestureCenterPoint.y - this.state.originalPageY
+ x: gestureCenterPoint.x - originalPageX,
+ y: gestureCenterPoint.y - originalPageY
};
-
- if (this.props.staticPinPosition) {
+ if (props.staticPinPosition) {
// When we use a static pin position, the zoom centre is the same as that position,
// otherwise the pin moves around way too much while zooming.
zoomCenter = {
- x: this.props.staticPinPosition.x,
- y: this.props.staticPinPosition.y
+ x: props.staticPinPosition.x,
+ y: props.staticPinPosition.y
};
- } // Uncomment to debug
-
+ }
- this.props.debug && this._setPinchDebugPoints(e, zoomCenter);
- const {
- originalHeight,
- originalWidth
- } = this.state;
- const oldOffsetX = this.offsetX;
- const oldOffsetY = this.offsetY;
- const oldScale = this.zoomLevel;
+ // Uncomment to debug
+ props.debug && _setPinchDebugPoints(e, zoomCenter);
+ const oldOffsetX = offsetX.current;
+ const oldOffsetY = offsetY.current;
+ const oldScale = zoomLevel.current;
const newScale = newZoomLevel;
if (!originalHeight || !originalWidth) return;
- let offsetY = (0, _helper.calcNewScaledOffsetForZoomCentering)(oldOffsetY, originalHeight, oldScale, newScale, zoomCenter.y);
- let offsetX = (0, _helper.calcNewScaledOffsetForZoomCentering)(oldOffsetX, originalWidth, oldScale, newScale, zoomCenter.x);
-
- const offsetShift = this._calcOffsetShiftSinceLastGestureState(gestureCenterPoint);
-
+ let newOffsetY = (0, _helper.calcNewScaledOffsetForZoomCentering)(oldOffsetY, originalHeight, oldScale, newScale, zoomCenter.y);
+ let newOffsetX = (0, _helper.calcNewScaledOffsetForZoomCentering)(oldOffsetX, originalWidth, oldScale, newScale, zoomCenter.x);
+ const offsetShift = _calcOffsetShiftSinceLastGestureState(gestureCenterPoint);
if (offsetShift) {
- offsetX += offsetShift.x;
- offsetY += offsetShift.y;
+ newOffsetX += offsetShift.x;
+ newOffsetY += offsetShift.y;
}
-
- this.offsetX = offsetX;
- this.offsetY = offsetY;
- this.zoomLevel = newScale;
- this.panAnim.setValue({
- x: this.offsetX,
- y: this.offsetY
+ offsetX.current = newOffsetX;
+ offsetY.current = newOffsetY;
+ zoomLevel.current = newScale;
+ panAnim.current.setValue({
+ x: offsetX.current,
+ y: offsetY.current
});
- this.zoomAnim.setValue(this.zoomLevel);
- this.props.onZoomAfter?.(e, gestureState, this._getZoomableViewEventObject());
- }
+ zoomAnim.current.setValue(zoomLevel.current);
+ props.onZoomAfter?.(e, gestureState, _getZoomableViewEventObject());
+ });
+
/**
* Used to debug pinch events
* @param gestureResponderEvent
* @param zoomCenter
* @param points
*/
-
-
- _setPinchDebugPoints(gestureResponderEvent, zoomCenter, ...points) {
+ const _setPinchDebugPoints = (0, _useLatestCallback.useLatestCallback)((gestureResponderEvent, zoomCenter, ...points) => {
const {
touches
} = gestureResponderEvent.nativeEvent;
- const {
- originalPageY,
- originalPageX
- } = this.state;
- this.setState({
- debugPoints: [{
- x: touches[0].pageX - originalPageX,
- y: touches[0].pageY - originalPageY
- }, {
- x: touches[1].pageX - originalPageX,
- y: touches[1].pageY - originalPageY
- }, zoomCenter, ...points]
- });
- }
+ setDebugPoints([{
+ x: touches[0].pageX - originalPageX,
+ y: touches[0].pageY - originalPageY
+ }, {
+ x: touches[1].pageX - originalPageX,
+ y: touches[1].pageY - originalPageY
+ }, zoomCenter, ...points]);
+ });
+
/**
* Calculates the amount the offset should shift since the last position during panning
*
@@ -570,28 +500,25 @@ class ReactNativeZoomableView extends _react.Component {
*
* @private
*/
-
-
- _calcOffsetShiftSinceLastGestureState(gestureCenterPoint) {
+ const _calcOffsetShiftSinceLastGestureState = (0, _useLatestCallback.useLatestCallback)(gestureCenterPoint => {
const {
movementSensibility
- } = this.props;
+ } = props;
let shift = null;
-
- if (this.lastGestureCenterPosition && movementSensibility) {
- const dx = gestureCenterPoint.x - this.lastGestureCenterPosition.x;
- const dy = gestureCenterPoint.y - this.lastGestureCenterPosition.y;
- const shiftX = dx / this.zoomLevel / movementSensibility;
- const shiftY = dy / this.zoomLevel / movementSensibility;
+ if (lastGestureCenterPosition.current && movementSensibility) {
+ const dx = gestureCenterPoint.x - lastGestureCenterPosition.current.x;
+ const dy = gestureCenterPoint.y - lastGestureCenterPosition.current.y;
+ const shiftX = dx / zoomLevel.current / movementSensibility;
+ const shiftY = dy / zoomLevel.current / movementSensibility;
shift = {
x: shiftX,
y: shiftY
};
}
-
- this.lastGestureCenterPosition = gestureCenterPoint;
+ lastGestureCenterPosition.current = gestureCenterPoint;
return shift;
- }
+ });
+
/**
* Handles movement by tap and move
*
@@ -599,36 +526,29 @@ class ReactNativeZoomableView extends _react.Component {
*
* @private
*/
-
-
- _handleShifting(gestureState) {
+ const _handleShifting = (0, _useLatestCallback.useLatestCallback)(gestureState => {
// Skips shifting if panEnabled is false or disablePanOnInitialZoom is true and we're on the initial zoom level
- if (!this.props.panEnabled || this.props.disablePanOnInitialZoom && this.zoomLevel === this.props.initialZoom) {
+ if (!props.panEnabled || props.disablePanOnInitialZoom && zoomLevel.current === props.initialZoom) {
return;
}
-
- const shift = this._calcOffsetShiftSinceLastGestureState({
+ const shift = _calcOffsetShiftSinceLastGestureState({
x: gestureState.moveX,
y: gestureState.moveY
});
-
if (!shift) return;
- const offsetX = this.offsetX + shift.x;
- const offsetY = this.offsetY + shift.y;
-
- if (this.props.debug && this.state.originalPageX && this.state.originalPageY) {
- const x = gestureState.moveX - this.state.originalPageX;
- const y = gestureState.moveY - this.state.originalPageY;
- this.setState({
- debugPoints: [{
- x,
- y
- }]
- });
+ const newOffsetX = offsetX.current + shift.x;
+ const newOffsetY = offsetY.current + shift.y;
+ if (props.debug && originalPageX && originalPageY) {
+ const x = gestureState.moveX - originalPageX;
+ const y = gestureState.moveY - originalPageY;
+ setDebugPoints([{
+ x,
+ y
+ }]);
}
+ _setNewOffsetPosition(newOffsetX, newOffsetY);
+ });
- this._setNewOffsetPosition(offsetX, offsetY);
- }
/**
* Set the state to offset moved
*
@@ -636,27 +556,24 @@ class ReactNativeZoomableView extends _react.Component {
* @param {number} newOffsetY
* @returns
*/
-
-
- _setNewOffsetPosition(newOffsetX, newOffsetY) {
+ const _setNewOffsetPosition = (0, _useLatestCallback.useLatestCallback)((newOffsetX, newOffsetY) => {
const {
onShiftingBefore,
onShiftingAfter
- } = this.props;
-
- if (onShiftingBefore?.(null, null, this._getZoomableViewEventObject())) {
+ } = props;
+ if (onShiftingBefore?.(null, null, _getZoomableViewEventObject())) {
return;
}
-
- this.offsetX = newOffsetX;
- this.offsetY = newOffsetY;
- this.panAnim.setValue({
- x: this.offsetX,
- y: this.offsetY
+ offsetX.current = newOffsetX;
+ offsetY.current = newOffsetY;
+ panAnim.current.setValue({
+ x: offsetX.current,
+ y: offsetY.current
});
- this.zoomAnim.setValue(this.zoomLevel);
- onShiftingAfter?.(null, null, this._getZoomableViewEventObject());
- }
+ zoomAnim.current.setValue(zoomLevel.current);
+ onShiftingAfter?.(null, null, _getZoomableViewEventObject());
+ });
+
/**
* Check whether the press event is double tap
* or single tap and handle the event accordingly
@@ -665,132 +582,118 @@ class ReactNativeZoomableView extends _react.Component {
*
* @private
*/
-
-
- _resolveAndHandleTap = e => {
+ const _resolveAndHandleTap = (0, _useLatestCallback.useLatestCallback)(e => {
const now = Date.now();
-
- if (this.doubleTapFirstTapReleaseTimestamp && this.props.doubleTapDelay && now - this.doubleTapFirstTapReleaseTimestamp < this.props.doubleTapDelay) {
- this.doubleTapFirstTap && this._addTouch({ ...this.doubleTapFirstTap,
+ if (doubleTapFirstTapReleaseTimestamp.current && props.doubleTapDelay && now - doubleTapFirstTapReleaseTimestamp.current < props.doubleTapDelay) {
+ doubleTapFirstTap.current && _addTouch({
+ ...doubleTapFirstTap.current,
id: now.toString(),
isSecondTap: true
});
- this.singleTapTimeoutId && clearTimeout(this.singleTapTimeoutId);
- delete this.doubleTapFirstTapReleaseTimestamp;
- delete this.singleTapTimeoutId;
- delete this.doubleTapFirstTap;
-
- this._handleDoubleTap(e);
+ singleTapTimeoutId.current && clearTimeout(singleTapTimeoutId.current);
+ delete doubleTapFirstTapReleaseTimestamp.current;
+ delete singleTapTimeoutId.current;
+ delete doubleTapFirstTap.current;
+ _handleDoubleTap(e);
} else {
- this.doubleTapFirstTapReleaseTimestamp = now;
- this.doubleTapFirstTap = {
+ doubleTapFirstTapReleaseTimestamp.current = now;
+ doubleTapFirstTap.current = {
id: now.toString(),
- x: e.nativeEvent.pageX - this.state.originalPageX,
- y: e.nativeEvent.pageY - this.state.originalPageY
+ x: e.nativeEvent.pageX - originalPageX,
+ y: e.nativeEvent.pageY - originalPageY
};
+ _addTouch(doubleTapFirstTap.current);
- this._addTouch(this.doubleTapFirstTap); // persist event so e.nativeEvent is preserved after a timeout delay
-
-
+ // persist event so e.nativeEvent is preserved after a timeout delay
e.persist();
- this.singleTapTimeoutId = setTimeout(() => {
- delete this.doubleTapFirstTapReleaseTimestamp;
- delete this.singleTapTimeoutId; // Pan to the tapped location
-
- if (this.props.staticPinPosition && this.doubleTapFirstTap) {
- const tapX = this.props.staticPinPosition.x - this.doubleTapFirstTap.x;
- const tapY = this.props.staticPinPosition.y - this.doubleTapFirstTap.y;
-
- _reactNative.Animated.timing(this.panAnim, {
+ singleTapTimeoutId.current = setTimeout(() => {
+ delete doubleTapFirstTapReleaseTimestamp.current;
+ delete singleTapTimeoutId.current;
+
+ // Pan to the tapped location
+ if (props.staticPinPosition && doubleTapFirstTap.current) {
+ const tapX = props.staticPinPosition.x - doubleTapFirstTap.current.x;
+ const tapY = props.staticPinPosition.y - doubleTapFirstTap.current.y;
+ _reactNative.Animated.timing(panAnim.current, {
toValue: {
- x: this.offsetX + tapX / this.zoomLevel,
- y: this.offsetY + tapY / this.zoomLevel
+ x: offsetX.current + tapX / zoomLevel.current,
+ y: offsetY.current + tapY / zoomLevel.current
},
useNativeDriver: true,
duration: 200
}).start(() => {
- this._updateStaticPin();
+ _updateStaticPin();
});
}
-
- this.props.onSingleTap?.(e, this._getZoomableViewEventObject());
- }, this.props.doubleTapDelay);
+ props.onSingleTap?.(e, _getZoomableViewEventObject());
+ }, props.doubleTapDelay);
}
- };
- moveStaticPinTo = (position, duration) => {
- const {
- originalWidth,
- originalHeight
- } = this.state;
+ });
+ const publicMoveStaticPinTo = (0, _useLatestCallback.useLatestCallback)((position, duration) => {
const {
staticPinPosition,
contentWidth,
contentHeight
- } = this.props;
+ } = props;
if (!staticPinPosition) return;
if (!originalWidth || !originalHeight) return;
- if (!contentWidth || !contentHeight) return; // Offset for the static pin
+ if (!contentWidth || !contentHeight) return;
+ // Offset for the static pin
const pinX = staticPinPosition.x - originalWidth / 2;
const pinY = staticPinPosition.y - originalHeight / 2;
- this.offsetX = contentWidth / 2 - position.x + pinX / this.zoomLevel;
- this.offsetY = contentHeight / 2 - position.y + pinY / this.zoomLevel;
-
+ offsetX.current = contentWidth / 2 - position.x + pinX / zoomLevel.current;
+ offsetY.current = contentHeight / 2 - position.y + pinY / zoomLevel.current;
if (duration) {
- _reactNative.Animated.timing(this.panAnim, {
+ _reactNative.Animated.timing(panAnim.current, {
toValue: {
- x: this.offsetX,
- y: this.offsetY
+ x: offsetX.current,
+ y: offsetY.current
},
useNativeDriver: true,
duration
}).start();
} else {
- this.panAnim.setValue({
- x: this.offsetX,
- y: this.offsetY
+ panAnim.current.setValue({
+ x: offsetX.current,
+ y: offsetY.current
});
}
- };
- _staticPinPosition = () => {
- if (!this.props.staticPinPosition) return;
- if (!this.props.contentWidth || !this.props.contentHeight) return;
+ });
+ const _staticPinPosition = (0, _useLatestCallback.useLatestCallback)(() => {
+ if (!props.staticPinPosition) return;
+ if (!props.contentWidth || !props.contentHeight) return;
return (0, _coordinateConversion.viewportPositionToImagePosition)({
viewportPosition: {
- x: this.props.staticPinPosition.x,
- y: this.props.staticPinPosition.y
+ x: props.staticPinPosition.x,
+ y: props.staticPinPosition.y
},
imageSize: {
- height: this.props.contentHeight,
- width: this.props.contentWidth
+ height: props.contentHeight,
+ width: props.contentWidth
},
- zoomableEvent: { ...this._getZoomableViewEventObject(),
- offsetX: this.offsetX,
- offsetY: this.offsetY,
- zoomLevel: this.zoomLevel
+ zoomableEvent: {
+ ..._getZoomableViewEventObject(),
+ offsetX: offsetX.current,
+ offsetY: offsetY.current,
+ zoomLevel: zoomLevel.current
}
});
- };
- _updateStaticPin = () => {
- const position = this._staticPinPosition();
-
+ });
+ const _updateStaticPin = (0, _useLatestCallback.useLatestCallback)(() => {
+ const position = _staticPinPosition();
if (!position) return;
- this.props.onStaticPinPositionChange?.(position);
- };
-
- _addTouch(touch) {
- this.touches.push(touch);
- this.setState({
- touches: [...this.touches]
- });
- }
+ props.onStaticPinPositionChange?.(position);
+ });
+ const _addTouch = (0, _useLatestCallback.useLatestCallback)(touch => {
+ touches.current.push(touch);
+ setStateTouches([...touches.current]);
+ });
+ const _removeTouch = (0, _useLatestCallback.useLatestCallback)(touch => {
+ touches.current.splice(touches.current.indexOf(touch), 1);
+ setStateTouches([...touches.current]);
+ });
- _removeTouch(touch) {
- this.touches.splice(this.touches.indexOf(touch), 1);
- this.setState({
- touches: [...this.touches]
- });
- }
/**
* Handles the double tap event
*
@@ -798,71 +701,57 @@ class ReactNativeZoomableView extends _react.Component {
*
* @private
*/
-
-
- _handleDoubleTap(e) {
+ const _handleDoubleTap = (0, _useLatestCallback.useLatestCallback)(e => {
const {
onDoubleTapBefore,
onDoubleTapAfter,
doubleTapZoomToCenter
- } = this.props;
- onDoubleTapBefore?.(e, this._getZoomableViewEventObject());
-
- const nextZoomStep = this._getNextZoomStep();
-
+ } = props;
+ onDoubleTapBefore?.(e, _getZoomableViewEventObject());
+ const nextZoomStep = _getNextZoomStep();
if (nextZoomStep == null) return;
- const {
- originalPageX,
- originalPageY
- } = this.state; // define new zoom position coordinates
+ // define new zoom position coordinates
const zoomPositionCoordinates = {
x: e.nativeEvent.pageX - originalPageX,
y: e.nativeEvent.pageY - originalPageY
- }; // if doubleTapZoomToCenter enabled -> always zoom to center instead
+ };
+ // if doubleTapZoomToCenter enabled -> always zoom to center instead
if (doubleTapZoomToCenter) {
zoomPositionCoordinates.x = 0;
zoomPositionCoordinates.y = 0;
}
-
- this.zoomTo(nextZoomStep, zoomPositionCoordinates);
- onDoubleTapAfter?.(e, this._getZoomableViewEventObject({
+ publicZoomTo(nextZoomStep, zoomPositionCoordinates);
+ onDoubleTapAfter?.(e, _getZoomableViewEventObject({
zoomLevel: nextZoomStep
}));
- }
+ });
+
/**
* Returns the next zoom step based on current step and zoomStep property.
* If we are zoomed all the way in -> return to initialzoom
*
* @returns {*}
*/
-
-
- _getNextZoomStep() {
+ const _getNextZoomStep = (0, _useLatestCallback.useLatestCallback)(() => {
const {
zoomStep,
maxZoom,
initialZoom
- } = this.props;
- const {
- zoomLevel
- } = this;
+ } = props;
if (maxZoom == null) return;
-
- if (zoomLevel.toFixed(2) === maxZoom.toFixed(2)) {
+ if (zoomLevel.current.toFixed(2) === maxZoom.toFixed(2)) {
return initialZoom;
}
-
if (zoomStep == null) return;
- const nextZoomStep = zoomLevel * (1 + zoomStep);
-
+ const nextZoomStep = zoomLevel.current * (1 + zoomStep);
if (nextZoomStep > maxZoom) {
return maxZoom;
}
-
return nextZoomStep;
- }
+ });
+
/**
* Zooms to a specific level. A "zoom center" can be provided, which specifies
* the point that will remain in the same position on the screen after the zoom.
@@ -872,42 +761,42 @@ class ReactNativeZoomableView extends _react.Component {
* @param newZoomLevel
* @param zoomCenter - If not supplied, the container's center is the zoom center
*/
+ const publicZoomTo = (0, _useLatestCallback.useLatestCallback)((newZoomLevel, zoomCenter) => {
+ if (!props.zoomEnabled) return false;
+ if (props.maxZoom && newZoomLevel > props.maxZoom) return false;
+ if (props.minZoom && newZoomLevel < props.minZoom) return false;
+ props.onZoomBefore?.(null, null, _getZoomableViewEventObject());
-
- zoomTo(newZoomLevel, zoomCenter) {
- if (!this.props.zoomEnabled) return false;
- if (this.props.maxZoom && newZoomLevel > this.props.maxZoom) return false;
- if (this.props.minZoom && newZoomLevel < this.props.minZoom) return false;
- this.props.onZoomBefore?.(null, null, this._getZoomableViewEventObject()); // == Perform Pan Animation to preserve the zoom center while zooming ==
-
+ // == Perform Pan Animation to preserve the zoom center while zooming ==
let listenerId = '';
-
if (zoomCenter) {
// Calculates panAnim values based on changes in zoomAnim.
- let prevScale = this.zoomLevel; // Since zoomAnim is calculated in native driver,
+ let prevScale = zoomLevel.current;
+ // Since zoomAnim is calculated in native driver,
// it will jitter panAnim once in a while,
// because here panAnim is being calculated in js.
// However the jittering should mostly occur in simulator.
-
- listenerId = this.zoomAnim.addListener(({
+ listenerId = zoomAnim.current.addListener(({
value: newScale
}) => {
- this.panAnim.setValue({
- x: (0, _helper.calcNewScaledOffsetForZoomCentering)(this.offsetX, this.state.originalWidth, prevScale, newScale, zoomCenter.x),
- y: (0, _helper.calcNewScaledOffsetForZoomCentering)(this.offsetY, this.state.originalHeight, prevScale, newScale, zoomCenter.y)
+ panAnim.current.setValue({
+ x: (0, _helper.calcNewScaledOffsetForZoomCentering)(offsetX.current, originalWidth, prevScale, newScale, zoomCenter.x),
+ y: (0, _helper.calcNewScaledOffsetForZoomCentering)(offsetY.current, originalHeight, prevScale, newScale, zoomCenter.y)
});
prevScale = newScale;
});
- } // == Perform Zoom Animation ==
-
+ }
- (0, _animations.getZoomToAnimation)(this.zoomAnim, newZoomLevel).start(() => {
- this.zoomAnim.removeListener(listenerId);
- }); // == Zoom Animation Ends ==
+ // == Perform Zoom Animation ==
+ (0, _animations.getZoomToAnimation)(zoomAnim.current, newZoomLevel).start(() => {
+ zoomAnim.current.removeListener(listenerId);
+ });
+ // == Zoom Animation Ends ==
- this.props.onZoomAfter?.(null, null, this._getZoomableViewEventObject());
+ props.onZoomAfter?.(null, null, _getZoomableViewEventObject());
return true;
- }
+ });
+
/**
* Zooms in or out by a specified change level
* Use a positive number for `zoomLevelChange` to zoom in
@@ -919,13 +808,12 @@ class ReactNativeZoomableView extends _react.Component {
*
* @return {bool}
*/
-
-
- zoomBy(zoomLevelChange) {
+ const publicZoomBy = (0, _useLatestCallback.useLatestCallback)(zoomLevelChange => {
// if no zoom level Change given -> just use zoom step
- zoomLevelChange ||= this.props.zoomStep || 0;
- return this.zoomTo(this.zoomLevel + zoomLevelChange);
- }
+ zoomLevelChange ||= props.zoomStep || 0;
+ return publicZoomTo(zoomLevel.current + zoomLevelChange);
+ });
+
/**
* Moves the zoomed view to a specified position
* Returns a promise when finished
@@ -935,19 +823,13 @@ class ReactNativeZoomableView extends _react.Component {
*
* @return {bool}
*/
-
-
- moveTo(newOffsetX, newOffsetY) {
- const {
- originalWidth,
- originalHeight
- } = this.state;
+ const publicMoveTo = (0, _useLatestCallback.useLatestCallback)((newOffsetX, newOffsetY) => {
if (!originalWidth || !originalHeight) return;
- const offsetX = (newOffsetX - originalWidth / 2) / this.zoomLevel;
- const offsetY = (newOffsetY - originalHeight / 2) / this.zoomLevel;
+ const offsetX = (newOffsetX - originalWidth / 2) / zoomLevel.current;
+ const offsetY = (newOffsetY - originalHeight / 2) / zoomLevel.current;
+ _setNewOffsetPosition(-offsetX, -offsetY);
+ });
- this._setNewOffsetPosition(-offsetX, -offsetY);
- }
/**
* Moves the zoomed view by a certain amount.
*
@@ -958,83 +840,76 @@ class ReactNativeZoomableView extends _react.Component {
*
* @return {bool}
*/
-
-
- moveBy(offsetChangeX, offsetChangeY) {
- const offsetX = (this.offsetX * this.zoomLevel - offsetChangeX) / this.zoomLevel;
- const offsetY = (this.offsetY * this.zoomLevel - offsetChangeY) / this.zoomLevel;
-
- this._setNewOffsetPosition(offsetX, offsetY);
- }
-
- render() {
- const {
- staticPinIcon,
- children,
- visualTouchFeedbackEnabled,
- doubleTapDelay,
- staticPinPosition,
- onStaticPinLongPress,
- onStaticPinPress,
- pinProps
- } = this.props;
- const {
- pinSize,
- touches,
- debugPoints = []
- } = this.state;
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
- style: styles.container,
- ...this.gestureHandlers.panHandlers,
- ref: this.zoomSubjectWrapperRef,
- onLayout: this.measureZoomSubject,
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
- style: [styles.zoomSubject, this.props.style, {
- transform: [// In RN79, we need to split the scale into X and Y to avoid
- // the content getting pixelated when zooming in
- {
- scaleX: this.zoomAnim
- }, {
- scaleY: this.zoomAnim
- }, ...this.panAnim.getTranslateTransform()]
- }],
- children: children
- }), visualTouchFeedbackEnabled && touches?.map(touch => doubleTapDelay && /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.AnimatedTouchFeedback, {
- x: touch.x,
- y: touch.y,
- animationDuration: doubleTapDelay,
- onAnimationDone: () => {
- this._removeTouch(touch);
- }
- }, touch.id)), debugPoints.map(({
- x,
- y
- }, index) => {
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_debugHelper.DebugTouchPoint, {
- x: x,
- y: y
- }, index);
- }), staticPinPosition && /*#__PURE__*/(0, _jsxRuntime.jsx)(_StaticPin.StaticPin, {
- staticPinIcon: staticPinIcon,
- staticPinPosition: staticPinPosition,
- pinSize: pinSize,
- onPress: onStaticPinPress,
- onLongPress: onStaticPinLongPress,
- onParentMove: this._handlePanResponderMove,
- setPinSize: size => {
- this.setState({
- pinSize: size
- });
- },
- pinProps: pinProps
- })]
- });
- }
-
-}
-
+ const publicMoveBy = (0, _useLatestCallback.useLatestCallback)((offsetChangeX, offsetChangeY) => {
+ const newOffsetX = (offsetX.current * zoomLevel.current - offsetChangeX) / zoomLevel.current;
+ const newOffsetY = (offsetY.current * zoomLevel.current - offsetChangeY) / zoomLevel.current;
+ _setNewOffsetPosition(newOffsetX, newOffsetY);
+ });
+ (0, _react.useImperativeHandle)(ref, () => ({
+ zoomTo: publicZoomTo,
+ zoomBy: publicZoomBy,
+ moveTo: publicMoveTo,
+ moveBy: publicMoveBy,
+ moveStaticPinTo: publicMoveStaticPinTo,
+ get gestureStarted() {
+ return gestureStarted.current;
+ }
+ }));
+ const {
+ staticPinIcon,
+ children,
+ visualTouchFeedbackEnabled,
+ doubleTapDelay,
+ staticPinPosition,
+ onStaticPinLongPress,
+ onStaticPinPress,
+ pinProps
+ } = props;
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
+ style: styles.container,
+ ...gestureHandlers.current?.panHandlers,
+ ref: zoomSubjectWrapperRef,
+ onLayout: measureZoomSubject,
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
+ style: [styles.zoomSubject, props.style, {
+ transform: [
+ // In RN79, we need to split the scale into X and Y to avoid
+ // the content getting pixelated when zooming in
+ {
+ scaleX: zoomAnim.current
+ }, {
+ scaleY: zoomAnim.current
+ }, ...panAnim.current.getTranslateTransform()]
+ }],
+ children: children
+ }), visualTouchFeedbackEnabled && stateTouches.map(touch => doubleTapDelay && /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.AnimatedTouchFeedback, {
+ x: touch.x,
+ y: touch.y,
+ animationDuration: doubleTapDelay,
+ onAnimationDone: () => {
+ _removeTouch(touch);
+ }
+ }, touch.id)), debugPoints.map(({
+ x,
+ y
+ }, index) => {
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_debugHelper.DebugTouchPoint, {
+ x: x,
+ y: y
+ }, index);
+ }), staticPinPosition && /*#__PURE__*/(0, _jsxRuntime.jsx)(_StaticPin.StaticPin, {
+ staticPinIcon: staticPinIcon,
+ staticPinPosition: staticPinPosition,
+ pinSize: pinSize,
+ onPress: onStaticPinPress,
+ onLongPress: onStaticPinLongPress,
+ onParentMove: _handlePanResponderMove,
+ setPinSize: setPinSize,
+ pinProps: pinProps
+ })]
+ });
+};
exports.ReactNativeZoomableView = ReactNativeZoomableView;
-
const styles = _reactNative.StyleSheet.create({
container: {
alignItems: 'center',
@@ -1050,6 +925,5 @@ const styles = _reactNative.StyleSheet.create({
width: '100%'
}
});
-
var _default = exports.default = ReactNativeZoomableView;
//# sourceMappingURL=ReactNativeZoomableView.js.map
\ No newline at end of file
diff --git a/lib/commonjs/ReactNativeZoomableView.js.map b/lib/commonjs/ReactNativeZoomableView.js.map
index f9806c1..42a9b99 100644
--- a/lib/commonjs/ReactNativeZoomableView.js.map
+++ b/lib/commonjs/ReactNativeZoomableView.js.map
@@ -1 +1 @@
-{"version":3,"sources":["ReactNativeZoomableView.tsx"],"names":["initialState","originalWidth","originalHeight","originalPageX","originalPageY","originalX","originalY","pinSize","width","height","ReactNativeZoomableView","Component","defaultProps","zoomEnabled","panEnabled","initialZoom","initialOffsetX","initialOffsetY","maxZoom","minZoom","pinchToZoomInSensitivity","pinchToZoomOutSensitivity","movementSensibility","doubleTapDelay","zoomStep","onLongPress","longPressDuration","contentWidth","undefined","contentHeight","visualTouchFeedbackEnabled","staticPinPosition","staticPinIcon","onStaticPinPositionChange","onStaticPinPositionMove","disablePanOnInitialZoom","panAnim","Animated","ValueXY","x","y","zoomAnim","Value","offsetX","offsetY","zoomLevel","lastGestureCenterPosition","lastGestureTouchDistance","_gestureStarted","gestureStarted","v","longPressTimeout","touches","constructor","props","state","gestureHandlers","PanResponder","create","onStartShouldSetPanResponder","_handleStartShouldSetPanResponder","onPanResponderGrant","_handlePanResponderGrant","onPanResponderMove","_handlePanResponderMove","onPanResponderRelease","_handlePanResponderEnd","onPanResponderTerminate","evt","gestureState","_getZoomableViewEventObject","onPanResponderTerminationRequest","onShouldBlockNativeResponder","onStartShouldSetPanResponderCapture","onMoveShouldSetPanResponderCapture","zoomSubjectWrapperRef","zoomAnimatedValue","panAnimatedValueXY","setValue","addListener","value","gestureType","componentDidUpdate","prevProps","prevState","onTransformInvocationInitialized","_invokeOnTransform","successful","currState","originalMeasurementsChanged","staticPinPositionChanged","layout","onLayout","nativeEvent","componentDidMount","measureZoomSubject","measureZoomSubjectInterval","setInterval","componentWillUnmount","clearInterval","debouncedOnStaticPinPositionChange","position","zoomableViewEvent","_staticPinPosition","onTransform","overwriteObj","requestAnimationFrame","setTimeout","current","measure","pageX","pageY","setState","e","persist","stopAnimation","_resolveAndHandleTap","debugPoints","clearTimeout","onPanResponderEnd","onZoomEnd","onShiftingEnd","_updateStaticPin","numberActiveTouches","_handlePinching","Math","abs","dx","dy","isShiftGesture","_handleShifting","distance","onZoomBefore","zoomGrowthFromLastGestureState","pinchToZoomSensitivity","deltaGrowth","deltaGrowthAdjustedBySensitivity","newZoomLevel","gestureCenterPoint","zoomCenter","debug","_setPinchDebugPoints","oldOffsetX","oldOffsetY","oldScale","newScale","offsetShift","_calcOffsetShiftSinceLastGestureState","onZoomAfter","gestureResponderEvent","points","shift","shiftX","shiftY","moveX","moveY","_setNewOffsetPosition","newOffsetX","newOffsetY","onShiftingBefore","onShiftingAfter","now","Date","doubleTapFirstTapReleaseTimestamp","doubleTapFirstTap","_addTouch","id","toString","isSecondTap","singleTapTimeoutId","_handleDoubleTap","tapX","tapY","timing","toValue","useNativeDriver","duration","start","onSingleTap","moveStaticPinTo","pinX","pinY","viewportPosition","imageSize","zoomableEvent","touch","push","_removeTouch","splice","indexOf","onDoubleTapBefore","onDoubleTapAfter","doubleTapZoomToCenter","nextZoomStep","_getNextZoomStep","zoomPositionCoordinates","zoomTo","toFixed","listenerId","prevScale","removeListener","zoomBy","zoomLevelChange","moveTo","moveBy","offsetChangeX","offsetChangeY","render","children","onStaticPinLongPress","onStaticPinPress","pinProps","styles","container","panHandlers","zoomSubject","style","transform","scaleX","scaleY","getTranslateTransform","map","index","size","StyleSheet","alignItems","flex","justifyContent","overflow"],"mappings":"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","sourceRoot":"../../src"}
+{"version":3,"names":["_lodash","require","_react","_interopRequireWildcard","_reactNative","_animations","_components","_StaticPin","_debugHelper","_helper","_coordinateConversion","_useLatestCallback","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ReactNativeZoomableView","props","ref","originalWidth","setOriginalWidth","useState","originalHeight","setOriginalHeight","originalPageX","setOriginalPageX","originalPageY","setOriginalPageY","originalX","setOriginalX","originalY","setOriginalY","pinSize","setPinSize","width","height","debugPoints","setDebugPoints","stateTouches","setStateTouches","zoomSubjectWrapperRef","useRef","gestureHandlers","doubleTapFirstTapReleaseTimestamp","defaults","zoomEnabled","panEnabled","initialZoom","initialOffsetX","initialOffsetY","maxZoom","minZoom","pinchToZoomInSensitivity","pinchToZoomOutSensitivity","movementSensibility","doubleTapDelay","zoomStep","onLongPress","undefined","longPressDuration","contentWidth","contentHeight","visualTouchFeedbackEnabled","staticPinPosition","staticPinIcon","onStaticPinPositionChange","onStaticPinPositionMove","disablePanOnInitialZoom","panAnim","Animated","ValueXY","x","y","zoomAnim","Value","offsetX","offsetY","zoomLevel","lastGestureCenterPosition","lastGestureTouchDistance","gestureType","gestureStarted","longPressTimeout","onTransformInvocationInitialized","singleTapTimeoutId","touches","doubleTapFirstTap","measureZoomSubjectInterval","useLayoutEffect","current","PanResponder","create","onStartShouldSetPanResponder","_handleStartShouldSetPanResponder","onPanResponderGrant","_handlePanResponderGrant","onPanResponderMove","_handlePanResponderMove","onPanResponderRelease","_handlePanResponderEnd","onPanResponderTerminate","evt","gestureState","_getZoomableViewEventObject","onPanResponderTerminationRequest","onShouldBlockNativeResponder","onStartShouldSetPanResponderCapture","onMoveShouldSetPanResponderCapture","zoomAnimatedValue","panAnimatedValueXY","setValue","addListener","value","_invokeOnTransform","successful","onLayout","layout","nativeEvent","useEffect","measureZoomSubject","setInterval","clearInterval","useLatestCallback","debouncedOnStaticPinPositionChange","useMemo","debounce","zoomableViewEvent","position","_staticPinPosition","onTransform","overwriteObj","requestAnimationFrame","setTimeout","measure","pageX","pageY","persist","stopAnimation","_resolveAndHandleTap","clearTimeout","onPanResponderEnd","onZoomEnd","onShiftingEnd","_updateStaticPin","numberActiveTouches","calcGestureCenterPoint","calcGestureTouchDistance","_handlePinching","Math","abs","dx","dy","isShiftGesture","_handleShifting","distance","onZoomBefore","zoomGrowthFromLastGestureState","pinchToZoomSensitivity","deltaGrowth","deltaGrowthAdjustedBySensitivity","newZoomLevel","gestureCenterPoint","zoomCenter","debug","_setPinchDebugPoints","oldOffsetX","oldOffsetY","oldScale","newScale","newOffsetY","calcNewScaledOffsetForZoomCentering","newOffsetX","offsetShift","_calcOffsetShiftSinceLastGestureState","onZoomAfter","gestureResponderEvent","points","shift","shiftX","shiftY","moveX","moveY","_setNewOffsetPosition","onShiftingBefore","onShiftingAfter","now","Date","_addTouch","id","toString","isSecondTap","_handleDoubleTap","tapX","tapY","timing","toValue","useNativeDriver","duration","start","onSingleTap","publicMoveStaticPinTo","pinX","pinY","viewportPositionToImagePosition","viewportPosition","imageSize","zoomableEvent","touch","push","_removeTouch","splice","indexOf","onDoubleTapBefore","onDoubleTapAfter","doubleTapZoomToCenter","nextZoomStep","_getNextZoomStep","zoomPositionCoordinates","publicZoomTo","toFixed","listenerId","prevScale","getZoomToAnimation","removeListener","publicZoomBy","zoomLevelChange","publicMoveTo","publicMoveBy","offsetChangeX","offsetChangeY","useImperativeHandle","zoomTo","zoomBy","moveTo","moveBy","moveStaticPinTo","children","onStaticPinLongPress","onStaticPinPress","pinProps","jsxs","View","style","styles","container","panHandlers","jsx","zoomSubject","transform","scaleX","scaleY","getTranslateTransform","map","AnimatedTouchFeedback","animationDuration","onAnimationDone","index","DebugTouchPoint","StaticPin","onPress","onParentMove","exports","StyleSheet","alignItems","flex","justifyContent","overflow","_default"],"sourceRoot":"../../src","sources":["ReactNativeZoomableView.tsx"],"mappings":"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","ignoreList":[]}
diff --git a/lib/commonjs/animations/index.js b/lib/commonjs/animations/index.js
index 5e465df..473c1d5 100644
--- a/lib/commonjs/animations/index.js
+++ b/lib/commonjs/animations/index.js
@@ -4,9 +4,7 @@ Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getZoomToAnimation = getZoomToAnimation;
-
var _reactNative = require("react-native");
-
function getZoomToAnimation(animValue, toValue) {
return _reactNative.Animated.timing(animValue, {
easing: _reactNative.Easing.out(_reactNative.Easing.ease),
diff --git a/lib/commonjs/animations/index.js.map b/lib/commonjs/animations/index.js.map
index ffea7ac..a048353 100644
--- a/lib/commonjs/animations/index.js.map
+++ b/lib/commonjs/animations/index.js.map
@@ -1 +1 @@
-{"version":3,"sources":["animations/index.ts"],"names":["getZoomToAnimation","animValue","toValue","Animated","timing","easing","Easing","out","ease","useNativeDriver"],"mappings":";;;;;;;AAAA;;AAEO,SAASA,kBAAT,CAA4BC,SAA5B,EAAuDC,OAAvD,EAAwE;AAC7E,SAAOC,sBAASC,MAAT,CAAgBH,SAAhB,EAA2B;AAChCI,IAAAA,MAAM,EAAEC,oBAAOC,GAAP,CAAWD,oBAAOE,IAAlB,CADwB;AAEhCN,IAAAA,OAFgC;AAGhCO,IAAAA,eAAe,EAAE;AAHe,GAA3B,CAAP;AAKD","sourceRoot":"../../../src"}
+{"version":3,"names":["_reactNative","require","getZoomToAnimation","animValue","toValue","Animated","timing","easing","Easing","out","ease","useNativeDriver"],"sourceRoot":"../../../src","sources":["animations/index.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEO,SAASC,kBAAkBA,CAACC,SAAyB,EAAEC,OAAe,EAAE;EAC7E,OAAOC,qBAAQ,CAACC,MAAM,CAACH,SAAS,EAAE;IAChCI,MAAM,EAAEC,mBAAM,CAACC,GAAG,CAACD,mBAAM,CAACE,IAAI,CAAC;IAC/BN,OAAO;IACPO,eAAe,EAAE;EACnB,CAAC,CAAC;AACJ","ignoreList":[]}
diff --git a/lib/commonjs/components/AnimatedTouchFeedback.js b/lib/commonjs/components/AnimatedTouchFeedback.js
index dad651b..02a15b8 100644
--- a/lib/commonjs/components/AnimatedTouchFeedback.js
+++ b/lib/commonjs/components/AnimatedTouchFeedback.js
@@ -4,15 +4,10 @@ Object.defineProperty(exports, "__esModule", {
value: true
});
exports.AnimatedTouchFeedback = void 0;
-
var _react = _interopRequireWildcard(require("react"));
-
var _reactNative = require("react-native");
-
var _jsxRuntime = require("react/jsx-runtime");
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
-
const AnimatedTouchFeedback = ({
x,
y,
@@ -27,7 +22,6 @@ const AnimatedTouchFeedback = ({
appearDisappearAnimRef.current.setValue(0);
const inDuration = animationDuration * 0.8;
const outDuration = animationDuration - inDuration;
-
_reactNative.Animated.sequence([_reactNative.Animated.timing(appearDisappearAnimRef.current, {
delay: animationDelay || 0,
toValue: 1,
@@ -59,9 +53,7 @@ const AnimatedTouchFeedback = ({
}]
});
};
-
exports.AnimatedTouchFeedback = AnimatedTouchFeedback;
-
const styles = _reactNative.StyleSheet.create({
animatedTouchFeedback: {
backgroundColor: 'lightgray',
diff --git a/lib/commonjs/components/AnimatedTouchFeedback.js.map b/lib/commonjs/components/AnimatedTouchFeedback.js.map
index 70deb30..b33e7fb 100644
--- a/lib/commonjs/components/AnimatedTouchFeedback.js.map
+++ b/lib/commonjs/components/AnimatedTouchFeedback.js.map
@@ -1 +1 @@
-{"version":3,"sources":["components/AnimatedTouchFeedback.tsx"],"names":["AnimatedTouchFeedback","x","y","animationDelay","animationDuration","onAnimationDone","appearDisappearAnimRef","Animated","Value","onAnimationDoneRef","current","setValue","inDuration","outDuration","sequence","timing","delay","toValue","duration","easing","Easing","linear","useNativeDriver","out","ease","start","styles","animatedTouchFeedback","opacity","interpolate","inputRange","outputRange","left","top","transform","scale","StyleSheet","create","backgroundColor","borderRadius","height","position","width"],"mappings":";;;;;;;AAAA;;AACA;;;;;;AAEO,MAAMA,qBAAqB,GAAG,CAAC;AACpCC,EAAAA,CADoC;AAEpCC,EAAAA,CAFoC;AAGpCC,EAAAA,cAHoC;AAIpCC,EAAAA,iBAJoC;AAKpCC,EAAAA;AALoC,CAAD,KAY/B;AACJ,QAAMC,sBAAsB,GAAG,mBAAuB,IAAIC,sBAASC,KAAb,CAAmB,CAAnB,CAAvB,CAA/B;AACA,QAAMC,kBAAkB,GAAG,mBAAOJ,eAAP,CAA3B;AACAI,EAAAA,kBAAkB,CAACC,OAAnB,GAA6BL,eAA7B;AAEA,wBAAU,MAAM;AACdC,IAAAA,sBAAsB,CAACI,OAAvB,CAA+BC,QAA/B,CAAwC,CAAxC;AACA,UAAMC,UAAU,GAAGR,iBAAiB,GAAG,GAAvC;AACA,UAAMS,WAAW,GAAGT,iBAAiB,GAAGQ,UAAxC;;AACAL,0BAASO,QAAT,CAAkB,CAChBP,sBAASQ,MAAT,CAAgBT,sBAAsB,CAACI,OAAvC,EAAgD;AAC9CM,MAAAA,KAAK,EAAEb,cAAc,IAAI,CADqB;AAE9Cc,MAAAA,OAAO,EAAE,CAFqC;AAG9CC,MAAAA,QAAQ,EAAEN,UAHoC;AAI9CO,MAAAA,MAAM,EAAEC,oBAAOC,MAJ+B;AAK9CC,MAAAA,eAAe,EAAE;AAL6B,KAAhD,CADgB,EAQhBf,sBAASQ,MAAT,CAAgBT,sBAAsB,CAACI,OAAvC,EAAgD;AAC9CO,MAAAA,OAAO,EAAE,CADqC;AAE9CC,MAAAA,QAAQ,EAAEL,WAFoC;AAG9CM,MAAAA,MAAM,EAAEC,oBAAOG,GAAP,CAAWH,oBAAOI,IAAlB,CAHsC;AAI9CF,MAAAA,eAAe,EAAE;AAJ6B,KAAhD,CARgB,CAAlB,EAcGG,KAdH,CAcS,MAAMhB,kBAAkB,CAACC,OAAnB,IAdf;AAeD,GAnBD,EAmBG,CAACP,cAAD,EAAiBC,iBAAjB,CAnBH;AAqBA,sBACE,qBAAC,qBAAD,CAAU,IAAV;AACE,IAAA,aAAa,EAAC,MADhB;AAEE,IAAA,KAAK,EAAE,CACLsB,MAAM,CAACC,qBADF,EAEL;AACEC,MAAAA,OAAO,EAAEtB,sBAAsB,CAACI,OAAvB,CAA+BmB,WAA/B,CAA2C;AAClDC,QAAAA,UAAU,EAAE,CAAC,CAAD,EAAI,CAAJ,CADsC;AAElDC,QAAAA,WAAW,EAAE,CAAC,CAAD,EAAI,GAAJ;AAFqC,OAA3C,CADX;AAKEC,MAAAA,IAAI,EAAE/B,CAAC,GAAG,EALZ;AAMEgC,MAAAA,GAAG,EAAE/B,CAAC,GAAG,EANX;AAOEgC,MAAAA,SAAS,EAAE,CACT;AACEC,QAAAA,KAAK,EAAE7B,sBAAsB,CAACI,OAAvB,CAA+BmB,WAA/B,CAA2C;AAChDC,UAAAA,UAAU,EAAE,CAAC,CAAD,EAAI,CAAJ,CADoC;AAEhDC,UAAAA,WAAW,EAAE,CAAC,GAAD,EAAM,CAAN;AAFmC,SAA3C;AADT,OADS;AAPb,KAFK;AAFT,IADF;AAwBD,CA9DM;;;;AAgEP,MAAML,MAAM,GAAGU,wBAAWC,MAAX,CAAkB;AAC/BV,EAAAA,qBAAqB,EAAE;AACrBW,IAAAA,eAAe,EAAE,WADI;AAErBC,IAAAA,YAAY,EAAE,EAFO;AAGrBC,IAAAA,MAAM,EAAE,EAHa;AAIrBC,IAAAA,QAAQ,EAAE,UAJW;AAKrBC,IAAAA,KAAK,EAAE;AALc;AADQ,CAAlB,CAAf","sourceRoot":"../../../src"}
+{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","AnimatedTouchFeedback","x","y","animationDelay","animationDuration","onAnimationDone","appearDisappearAnimRef","useRef","Animated","Value","onAnimationDoneRef","current","useEffect","setValue","inDuration","outDuration","sequence","timing","delay","toValue","duration","easing","Easing","linear","useNativeDriver","out","ease","start","jsx","View","pointerEvents","style","styles","animatedTouchFeedback","opacity","interpolate","inputRange","outputRange","left","top","transform","scale","exports","StyleSheet","create","backgroundColor","borderRadius","height","position","width"],"sourceRoot":"../../../src","sources":["components/AnimatedTouchFeedback.tsx"],"mappings":"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","ignoreList":[]}
diff --git a/lib/commonjs/components/StaticPin.js b/lib/commonjs/components/StaticPin.js
index 5a601d2..14318a9 100644
--- a/lib/commonjs/components/StaticPin.js
+++ b/lib/commonjs/components/StaticPin.js
@@ -4,15 +4,10 @@ Object.defineProperty(exports, "__esModule", {
value: true
});
exports.StaticPin = void 0;
-
var _react = _interopRequireDefault(require("react"));
-
var _reactNative = require("react-native");
-
var _jsxRuntime = require("react/jsx-runtime");
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
-
const StaticPin = ({
staticPinPosition,
staticPinIcon,
@@ -24,18 +19,17 @@ const StaticPin = ({
pinProps = {}
}) => {
const tapTime = _react.default.useRef(0);
-
const transform = [{
translateY: -pinSize.height
}, {
translateX: -pinSize.width / 2
}];
const opacity = pinSize.width && pinSize.height ? 1 : 0;
-
const panResponder = _react.default.useRef(_reactNative.PanResponder.create({
onStartShouldSetPanResponder: () => {
- tapTime.current = Date.now(); // We want to handle tap on this so set true
+ tapTime.current = Date.now();
+ // We want to handle tap on this so set true
return true;
},
onPanResponderMove: (evt, gestureState) => {
@@ -46,18 +40,15 @@ const StaticPin = ({
onPanResponderRelease: (evt, gestureState) => {
if (Math.abs(gestureState.dx) > 5 || Math.abs(gestureState.dy) > 5) return;
const dt = Date.now() - tapTime.current;
-
if (onPress && dt < 500) {
onPress(evt);
}
-
if (onLongPress && dt > 500) {
// RN long press is 500ms
onLongPress(evt);
}
}
})).current;
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
style: [{
left: staticPinPosition.x,
@@ -86,9 +77,7 @@ const StaticPin = ({
})
});
};
-
exports.StaticPin = StaticPin;
-
const styles = _reactNative.StyleSheet.create({
pin: {
height: 64,
diff --git a/lib/commonjs/components/StaticPin.js.map b/lib/commonjs/components/StaticPin.js.map
index d0e8764..95f9eda 100644
--- a/lib/commonjs/components/StaticPin.js.map
+++ b/lib/commonjs/components/StaticPin.js.map
@@ -1 +1 @@
-{"version":3,"sources":["components/StaticPin.tsx"],"names":["StaticPin","staticPinPosition","staticPinIcon","pinSize","onParentMove","onPress","onLongPress","setPinSize","pinProps","tapTime","React","useRef","transform","translateY","height","translateX","width","opacity","panResponder","PanResponder","create","onStartShouldSetPanResponder","current","Date","now","onPanResponderMove","evt","gestureState","Math","abs","dx","dy","onPanResponderRelease","dt","left","x","top","y","styles","pinWrapper","nativeEvent","layout","panHandlers","require","pin","StyleSheet","position"],"mappings":"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","sourceRoot":"../../../src"}
+{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_jsxRuntime","e","__esModule","default","StaticPin","staticPinPosition","staticPinIcon","pinSize","onParentMove","onPress","onLongPress","setPinSize","pinProps","tapTime","React","useRef","transform","translateY","height","translateX","width","opacity","panResponder","PanResponder","create","onStartShouldSetPanResponder","current","Date","now","onPanResponderMove","evt","gestureState","Math","abs","dx","dy","onPanResponderRelease","dt","jsx","Animated","View","style","left","x","top","y","styles","pinWrapper","children","onLayout","nativeEvent","layout","panHandlers","Image","source","pin","exports","StyleSheet","position"],"sourceRoot":"../../../src","sources":["components/StaticPin.tsx"],"mappings":"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","ignoreList":[]}
diff --git a/lib/commonjs/components/index.js b/lib/commonjs/components/index.js
index ac2c097..00f88b3 100644
--- a/lib/commonjs/components/index.js
+++ b/lib/commonjs/components/index.js
@@ -9,6 +9,5 @@ Object.defineProperty(exports, "AnimatedTouchFeedback", {
return _AnimatedTouchFeedback.AnimatedTouchFeedback;
}
});
-
var _AnimatedTouchFeedback = require("./AnimatedTouchFeedback");
//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/lib/commonjs/components/index.js.map b/lib/commonjs/components/index.js.map
index ae1e554..2f76807 100644
--- a/lib/commonjs/components/index.js.map
+++ b/lib/commonjs/components/index.js.map
@@ -1 +1 @@
-{"version":3,"sources":["components/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA","sourceRoot":"../../../src"}
+{"version":3,"names":["_AnimatedTouchFeedback","require"],"sourceRoot":"../../../src","sources":["components/index.tsx"],"mappings":";;;;;;;;;;;AAAA,IAAAA,sBAAA,GAAAC,OAAA","ignoreList":[]}
diff --git a/lib/commonjs/debugHelper/index.js b/lib/commonjs/debugHelper/index.js
index 1f79d59..75beac3 100644
--- a/lib/commonjs/debugHelper/index.js
+++ b/lib/commonjs/debugHelper/index.js
@@ -4,15 +4,10 @@ Object.defineProperty(exports, "__esModule", {
value: true
});
exports.DebugTouchPoint = exports.DebugRect = void 0;
-
var _react = _interopRequireDefault(require("react"));
-
var _reactNative = require("react-native");
-
var _jsxRuntime = require("react/jsx-runtime");
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
-
const DebugTouchPoint = ({
diameter = 20,
x = 0,
@@ -32,9 +27,7 @@ const DebugTouchPoint = ({
pointerEvents: "none"
});
};
-
exports.DebugTouchPoint = DebugTouchPoint;
-
const DebugRect = ({
height,
x = 0,
@@ -53,9 +46,7 @@ const DebugRect = ({
pointerEvents: "none"
});
};
-
exports.DebugRect = DebugRect;
-
const styles = _reactNative.StyleSheet.create({
debugPoint: {
opacity: 0.7,
diff --git a/lib/commonjs/debugHelper/index.js.map b/lib/commonjs/debugHelper/index.js.map
index c511a3b..8e47667 100644
--- a/lib/commonjs/debugHelper/index.js.map
+++ b/lib/commonjs/debugHelper/index.js.map
@@ -1 +1 @@
-{"version":3,"sources":["debugHelper/index.tsx"],"names":["DebugTouchPoint","diameter","x","y","color","radius","styles","debugPoint","width","height","borderRadius","backgroundColor","left","top","DebugRect","debugRect","StyleSheet","create","opacity","position"],"mappings":";;;;;;;AAAA;;AACA;;;;;;AAEO,MAAMA,eAAe,GAAG,CAAC;AAC9BC,EAAAA,QAAQ,GAAG,EADmB;AAE9BC,EAAAA,CAAC,GAAG,CAF0B;AAG9BC,EAAAA,CAAC,GAAG,CAH0B;AAI9BC,EAAAA,KAAK,GAAG;AAJsB,CAAD,KAKzB;AACJ,QAAMC,MAAM,GAAGJ,QAAQ,GAAG,CAA1B;AACA,sBACE,qBAAC,iBAAD;AACE,IAAA,KAAK,EAAE,CACLK,MAAM,CAACC,UADF,EAEL;AACEC,MAAAA,KAAK,EAAEP,QADT;AAEEQ,MAAAA,MAAM,EAAER,QAFV;AAGES,MAAAA,YAAY,EAAET,QAHhB;AAIEU,MAAAA,eAAe,EAAEP,KAJnB;AAKEQ,MAAAA,IAAI,EAAEV,CAAC,GAAGG,MALZ;AAMEQ,MAAAA,GAAG,EAAEV,CAAC,GAAGE;AANX,KAFK,CADT;AAYE,IAAA,aAAa,EAAC;AAZhB,IADF;AAgBD,CAvBM;;;;AAwBA,MAAMS,SAAS,GAAG,CAAC;AACxBL,EAAAA,MADwB;AAExBP,EAAAA,CAAC,GAAG,CAFoB;AAGxBC,EAAAA,CAAC,GAAG,CAHoB;AAIxBC,EAAAA,KAAK,GAAG;AAJgB,CAAD,KAUnB;AACJ,QAAMI,KAAK,GAAG,CAAd;AACA,sBACE,qBAAC,iBAAD;AACE,IAAA,KAAK,EAAE,CACLF,MAAM,CAACS,SADF,EAEL;AACEP,MAAAA,KADF;AAEEC,MAAAA,MAFF;AAGEE,MAAAA,eAAe,EAAEP,KAHnB;AAIEQ,MAAAA,IAAI,EAAEV,CAAC,GAAGM,KAAK,GAAG,CAJpB;AAKEK,MAAAA,GAAG,EAAEV;AALP,KAFK,CADT;AAWE,IAAA,aAAa,EAAC;AAXhB,IADF;AAeD,CA3BM;;;;AA6BP,MAAMG,MAAM,GAAGU,wBAAWC,MAAX,CAAkB;AAC/BV,EAAAA,UAAU,EAAE;AACVW,IAAAA,OAAO,EAAE,GADC;AAEVC,IAAAA,QAAQ,EAAE;AAFA,GADmB;AAK/BJ,EAAAA,SAAS,EAAE;AACTG,IAAAA,OAAO,EAAE,GADA;AAETC,IAAAA,QAAQ,EAAE;AAFD;AALoB,CAAlB,CAAf","sourceRoot":"../../../src"}
+{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_jsxRuntime","e","__esModule","default","DebugTouchPoint","diameter","x","y","color","radius","jsx","View","style","styles","debugPoint","width","height","borderRadius","backgroundColor","left","top","pointerEvents","exports","DebugRect","debugRect","StyleSheet","create","opacity","position"],"sourceRoot":"../../../src","sources":["debugHelper/index.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAAgD,IAAAE,WAAA,GAAAF,OAAA;AAAA,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEzC,MAAMG,eAAe,GAAGA,CAAC;EAC9BC,QAAQ,GAAG,EAAE;EACbC,CAAC,GAAG,CAAC;EACLC,CAAC,GAAG,CAAC;EACLC,KAAK,GAAG;AACV,CAAC,KAAK;EACJ,MAAMC,MAAM,GAAGJ,QAAQ,GAAG,CAAC;EAC3B,oBACE,IAAAL,WAAA,CAAAU,GAAA,EAACX,YAAA,CAAAY,IAAI;IACHC,KAAK,EAAE,CACLC,MAAM,CAACC,UAAU,EACjB;MACEC,KAAK,EAAEV,QAAQ;MACfW,MAAM,EAAEX,QAAQ;MAChBY,YAAY,EAAEZ,QAAQ;MACtBa,eAAe,EAAEV,KAAK;MACtBW,IAAI,EAAEb,CAAC,GAAGG,MAAM;MAChBW,GAAG,EAAEb,CAAC,GAAGE;IACX,CAAC,CACD;IACFY,aAAa,EAAC;EAAM,CACrB,CAAC;AAEN,CAAC;AAACC,OAAA,CAAAlB,eAAA,GAAAA,eAAA;AACK,MAAMmB,SAAS,GAAGA,CAAC;EACxBP,MAAM;EACNV,CAAC,GAAG,CAAC;EACLC,CAAC,GAAG,CAAC;EACLC,KAAK,GAAG;AAMV,CAAC,KAAK;EACJ,MAAMO,KAAK,GAAG,CAAC;EACf,oBACE,IAAAf,WAAA,CAAAU,GAAA,EAACX,YAAA,CAAAY,IAAI;IACHC,KAAK,EAAE,CACLC,MAAM,CAACW,SAAS,EAChB;MACET,KAAK;MACLC,MAAM;MACNE,eAAe,EAAEV,KAAK;MACtBW,IAAI,EAAEb,CAAC,GAAGS,KAAK,GAAG,CAAC;MACnBK,GAAG,EAAEb;IACP,CAAC,CACD;IACFc,aAAa,EAAC;EAAM,CACrB,CAAC;AAEN,CAAC;AAACC,OAAA,CAAAC,SAAA,GAAAA,SAAA;AAEF,MAAMV,MAAM,GAAGY,uBAAU,CAACC,MAAM,CAAC;EAC/BZ,UAAU,EAAE;IACVa,OAAO,EAAE,GAAG;IACZC,QAAQ,EAAE;EACZ,CAAC;EACDJ,SAAS,EAAE;IACTG,OAAO,EAAE,GAAG;IACZC,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC","ignoreList":[]}
diff --git a/lib/commonjs/helper/calcNewScaledOffsetForZoomCentering.js b/lib/commonjs/helper/calcNewScaledOffsetForZoomCentering.js
index 1147132..cdf9a30 100644
--- a/lib/commonjs/helper/calcNewScaledOffsetForZoomCentering.js
+++ b/lib/commonjs/helper/calcNewScaledOffsetForZoomCentering.js
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
value: true
});
exports.calcNewScaledOffsetForZoomCentering = calcNewScaledOffsetForZoomCentering;
-
/**
* Calculates the new offset for the zoomSubject to ensure zoom center position is retained after zooming.
* Parameters should correspond to whether we need the offset for the X or Y axis
@@ -57,8 +56,9 @@ exports.calcNewScaledOffsetForZoomCentering = calcNewScaledOffsetForZoomCenterin
*/
function calcNewScaledOffsetForZoomCentering(oldOffsetXOrYScaled, zoomSubjectOriginalWidthOrHeight, oldScale, newScale, zoomCenterXOrY) {
const oldOffSetUnscaled = oldOffsetXOrYScaled * oldScale;
- const growthRate = newScale / oldScale; // these act like namespaces just for the sake of readability
+ const growthRate = newScale / oldScale;
+ // these act like namespaces just for the sake of readability
const zoomSubjectOriginalCenter = {};
const zoomSubjectCurrentCenter = {};
const zoomSubjectNewCenter = {};
diff --git a/lib/commonjs/helper/calcNewScaledOffsetForZoomCentering.js.map b/lib/commonjs/helper/calcNewScaledOffsetForZoomCentering.js.map
index 33ee740..0b6bb9c 100644
--- a/lib/commonjs/helper/calcNewScaledOffsetForZoomCentering.js.map
+++ b/lib/commonjs/helper/calcNewScaledOffsetForZoomCentering.js.map
@@ -1 +1 @@
-{"version":3,"sources":["helper/calcNewScaledOffsetForZoomCentering.ts"],"names":["calcNewScaledOffsetForZoomCentering","oldOffsetXOrYScaled","zoomSubjectOriginalWidthOrHeight","oldScale","newScale","zoomCenterXOrY","oldOffSetUnscaled","growthRate","zoomSubjectOriginalCenter","zoomSubjectCurrentCenter","zoomSubjectNewCenter","xOrY","distanceToZoomCenter","newOffsetUnscaled"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,mCAAT,CACLC,mBADK,EAELC,gCAFK,EAGLC,QAHK,EAILC,QAJK,EAKLC,cALK,EAML;AACA,QAAMC,iBAAiB,GAAGL,mBAAmB,GAAGE,QAAhD;AACA,QAAMI,UAAU,GAAGH,QAAQ,GAAGD,QAA9B,CAFA,CAIA;;AACA,QAAMK,yBAAyB,GAAG,EAAlC;AACA,QAAMC,wBAAwB,GAAG,EAAjC;AACA,QAAMC,oBAAoB,GAAG,EAA7B;AAEAF,EAAAA,yBAAyB,CAACG,IAA1B,GAAiCT,gCAAgC,GAAG,CAApE;AACAO,EAAAA,wBAAwB,CAACE,IAAzB,GACEH,yBAAyB,CAACG,IAA1B,GAAiCL,iBADnC;AAEAG,EAAAA,wBAAwB,CAACG,oBAAzB,GACEH,wBAAwB,CAACE,IAAzB,GAAgCN,cADlC;AAGAK,EAAAA,oBAAoB,CAACE,oBAArB,GACEH,wBAAwB,CAACG,oBAAzB,GAAgDL,UADlD;AAEAG,EAAAA,oBAAoB,CAACC,IAArB,GACED,oBAAoB,CAACE,oBAArB,GAA4CP,cAD9C;AAGA,QAAMQ,iBAAiB,GACrBH,oBAAoB,CAACC,IAArB,GAA4BH,yBAAyB,CAACG,IADxD;AAGA,SAAOE,iBAAiB,GAAGT,QAA3B;AACD","sourceRoot":"../../../src"}
+{"version":3,"names":["calcNewScaledOffsetForZoomCentering","oldOffsetXOrYScaled","zoomSubjectOriginalWidthOrHeight","oldScale","newScale","zoomCenterXOrY","oldOffSetUnscaled","growthRate","zoomSubjectOriginalCenter","zoomSubjectCurrentCenter","zoomSubjectNewCenter","xOrY","distanceToZoomCenter","newOffsetUnscaled"],"sourceRoot":"../../../src","sources":["helper/calcNewScaledOffsetForZoomCentering.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,mCAAmCA,CACjDC,mBAA2B,EAC3BC,gCAAwC,EACxCC,QAAgB,EAChBC,QAAgB,EAChBC,cAAsB,EACtB;EACA,MAAMC,iBAAiB,GAAGL,mBAAmB,GAAGE,QAAQ;EACxD,MAAMI,UAAU,GAAGH,QAAQ,GAAGD,QAAQ;;EAEtC;EACA,MAAMK,yBAAyB,GAAG,CAAC,CAAW;EAC9C,MAAMC,wBAAwB,GAAG,CAAC,CAAW;EAC7C,MAAMC,oBAAoB,GAAG,CAAC,CAAW;EAEzCF,yBAAyB,CAACG,IAAI,GAAGT,gCAAgC,GAAG,CAAC;EACrEO,wBAAwB,CAACE,IAAI,GAC3BH,yBAAyB,CAACG,IAAI,GAAGL,iBAAiB;EACpDG,wBAAwB,CAACG,oBAAoB,GAC3CH,wBAAwB,CAACE,IAAI,GAAGN,cAAc;EAEhDK,oBAAoB,CAACE,oBAAoB,GACvCH,wBAAwB,CAACG,oBAAoB,GAAGL,UAAU;EAC5DG,oBAAoB,CAACC,IAAI,GACvBD,oBAAoB,CAACE,oBAAoB,GAAGP,cAAc;EAE5D,MAAMQ,iBAAiB,GACrBH,oBAAoB,CAACC,IAAI,GAAGH,yBAAyB,CAACG,IAAI;EAE5D,OAAOE,iBAAiB,GAAGT,QAAQ;AACrC","ignoreList":[]}
diff --git a/lib/commonjs/helper/coordinateConversion.js b/lib/commonjs/helper/coordinateConversion.js
index 263895e..c49c209 100644
--- a/lib/commonjs/helper/coordinateConversion.js
+++ b/lib/commonjs/helper/coordinateConversion.js
@@ -16,6 +16,7 @@ const defaultTransformSubjectData = exports.defaultTransformSubjectData = {
originalPageX: 0,
originalPageY: 0
};
+
/**
* Assuming you have an image that's being resized to fit into a container
* using the "contain" resize mode. You can use this function to calculate the
@@ -27,7 +28,6 @@ const defaultTransformSubjectData = exports.defaultTransformSubjectData = {
* @param imgSize
* @param containerSize
*/
-
function applyContainResizeMode(imgSize, containerSize) {
const {
width: imageWidth,
@@ -40,7 +40,6 @@ function applyContainResizeMode(imgSize, containerSize) {
const imageAspect = imageWidth / imageHeight;
const areaAspect = areaWidth / areaHeight;
let newSize;
-
if (imageAspect >= areaAspect) {
// longest edge is horizontal
newSize = {
@@ -54,7 +53,6 @@ function applyContainResizeMode(imgSize, containerSize) {
height: areaHeight
};
}
-
if (isNaN(newSize.height)) newSize.height = areaHeight;
if (isNaN(newSize.width)) newSize.width = areaWidth;
const scale = imageWidth ? newSize.width / imageWidth : newSize.height / imageHeight;
@@ -67,13 +65,12 @@ function applyContainResizeMode(imgSize, containerSize) {
scale
};
}
+
/**
* get the coord of image's origin relative to the transformSubject
* @param resizedImageSize
* @param transformSubject
*/
-
-
function getImageOriginOnTransformSubject(resizedImageSize, transformSubject) {
const {
offsetX,
@@ -87,6 +84,7 @@ function getImageOriginOnTransformSubject(resizedImageSize, transformSubject) {
y: offsetY * zoomLevel + originalHeight / 2 - resizedImageSize.height / 2 * zoomLevel
};
}
+
/**
* Translates the coord system of a point from the viewport's space to the image's space
*
@@ -96,8 +94,6 @@ function getImageOriginOnTransformSubject(resizedImageSize, transformSubject) {
*
* @return {Vec2D} returns null if point is out of the sheet's bound
*/
-
-
function viewportPositionToImagePosition({
viewportPosition,
imageSize,
diff --git a/lib/commonjs/helper/coordinateConversion.js.map b/lib/commonjs/helper/coordinateConversion.js.map
index 7ceba03..88b61d9 100644
--- a/lib/commonjs/helper/coordinateConversion.js.map
+++ b/lib/commonjs/helper/coordinateConversion.js.map
@@ -1 +1 @@
-{"version":3,"sources":["helper/coordinateConversion.ts"],"names":["defaultTransformSubjectData","offsetX","offsetY","zoomLevel","originalWidth","originalHeight","originalPageX","originalPageY","applyContainResizeMode","imgSize","containerSize","width","imageWidth","height","imageHeight","areaWidth","areaHeight","imageAspect","areaAspect","newSize","isNaN","scale","isFinite","size","getImageOriginOnTransformSubject","resizedImageSize","transformSubject","x","y","viewportPositionToImagePosition","viewportPosition","imageSize","zoomableEvent","resizedImgSize","resizedImgScale","sheetOriginOnContainer","pointOnSheet"],"mappings":"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","sourceRoot":"../../../src"}
+{"version":3,"names":["defaultTransformSubjectData","exports","offsetX","offsetY","zoomLevel","originalWidth","originalHeight","originalPageX","originalPageY","applyContainResizeMode","imgSize","containerSize","width","imageWidth","height","imageHeight","areaWidth","areaHeight","imageAspect","areaAspect","newSize","isNaN","scale","isFinite","size","getImageOriginOnTransformSubject","resizedImageSize","transformSubject","x","y","viewportPositionToImagePosition","viewportPosition","imageSize","zoomableEvent","resizedImgSize","resizedImgScale","sheetOriginOnContainer","pointOnSheet"],"sourceRoot":"../../../src","sources":["helper/coordinateConversion.ts"],"mappings":"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","ignoreList":[]}
diff --git a/lib/commonjs/helper/index.js b/lib/commonjs/helper/index.js
index 9f2d746..5d28b87 100644
--- a/lib/commonjs/helper/index.js
+++ b/lib/commonjs/helper/index.js
@@ -11,9 +11,7 @@ Object.defineProperty(exports, "calcNewScaledOffsetForZoomCentering", {
return _calcNewScaledOffsetForZoomCentering.calcNewScaledOffsetForZoomCentering;
}
});
-
var _calcNewScaledOffsetForZoomCentering = require("./calcNewScaledOffsetForZoomCentering");
-
/**
* Calculates the gesture center point relative to the page coordinate system
*
@@ -28,7 +26,6 @@ var _calcNewScaledOffsetForZoomCentering = require("./calcNewScaledOffsetForZoom
function calcGestureCenterPoint(e, gestureState) {
const touches = e.nativeEvent.touches;
if (!touches[0]) return null;
-
if (gestureState.numberActiveTouches === 2) {
if (!touches[1]) return null;
return {
@@ -36,17 +33,14 @@ function calcGestureCenterPoint(e, gestureState) {
y: (touches[0].pageY + touches[1].pageY) / 2
};
}
-
if (gestureState.numberActiveTouches === 1) {
return {
x: touches[0].pageX,
y: touches[0].pageY
};
}
-
return null;
}
-
function calcGestureTouchDistance(e, gestureState) {
const touches = e.nativeEvent.touches;
if (gestureState.numberActiveTouches !== 2 || !touches[0] || !touches[1]) return null;
diff --git a/lib/commonjs/helper/index.js.map b/lib/commonjs/helper/index.js.map
index 428053e..53f40f3 100644
--- a/lib/commonjs/helper/index.js.map
+++ b/lib/commonjs/helper/index.js.map
@@ -1 +1 @@
-{"version":3,"sources":["helper/index.ts"],"names":["calcGestureCenterPoint","e","gestureState","touches","nativeEvent","numberActiveTouches","x","pageX","y","pageY","calcGestureTouchDistance","dx","Math","abs","dy","sqrt"],"mappings":";;;;;;;;;;;;;;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,sBAAT,CACLC,CADK,EAELC,YAFK,EAGS;AACd,QAAMC,OAAO,GAAGF,CAAC,CAACG,WAAF,CAAcD,OAA9B;AACA,MAAI,CAACA,OAAO,CAAC,CAAD,CAAZ,EAAiB,OAAO,IAAP;;AAEjB,MAAID,YAAY,CAACG,mBAAb,KAAqC,CAAzC,EAA4C;AAC1C,QAAI,CAACF,OAAO,CAAC,CAAD,CAAZ,EAAiB,OAAO,IAAP;AACjB,WAAO;AACLG,MAAAA,CAAC,EAAE,CAACH,OAAO,CAAC,CAAD,CAAP,CAAWI,KAAX,GAAmBJ,OAAO,CAAC,CAAD,CAAP,CAAWI,KAA/B,IAAwC,CADtC;AAELC,MAAAA,CAAC,EAAE,CAACL,OAAO,CAAC,CAAD,CAAP,CAAWM,KAAX,GAAmBN,OAAO,CAAC,CAAD,CAAP,CAAWM,KAA/B,IAAwC;AAFtC,KAAP;AAID;;AACD,MAAIP,YAAY,CAACG,mBAAb,KAAqC,CAAzC,EAA4C;AAC1C,WAAO;AACLC,MAAAA,CAAC,EAAEH,OAAO,CAAC,CAAD,CAAP,CAAWI,KADT;AAELC,MAAAA,CAAC,EAAEL,OAAO,CAAC,CAAD,CAAP,CAAWM;AAFT,KAAP;AAID;;AAED,SAAO,IAAP;AACD;;AAEM,SAASC,wBAAT,CACLT,CADK,EAELC,YAFK,EAGU;AACf,QAAMC,OAAO,GAAGF,CAAC,CAACG,WAAF,CAAcD,OAA9B;AACA,MAAID,YAAY,CAACG,mBAAb,KAAqC,CAArC,IAA0C,CAACF,OAAO,CAAC,CAAD,CAAlD,IAAyD,CAACA,OAAO,CAAC,CAAD,CAArE,EACE,OAAO,IAAP;AAEF,QAAMQ,EAAE,GAAGC,IAAI,CAACC,GAAL,CAASV,OAAO,CAAC,CAAD,CAAP,CAAWI,KAAX,GAAmBJ,OAAO,CAAC,CAAD,CAAP,CAAWI,KAAvC,CAAX;AACA,QAAMO,EAAE,GAAGF,IAAI,CAACC,GAAL,CAASV,OAAO,CAAC,CAAD,CAAP,CAAWM,KAAX,GAAmBN,OAAO,CAAC,CAAD,CAAP,CAAWM,KAAvC,CAAX;AACA,SAAOG,IAAI,CAACG,IAAL,CAAUJ,EAAE,GAAGA,EAAL,GAAUG,EAAE,GAAGA,EAAzB,CAAP;AACD","sourceRoot":"../../../src"}
+{"version":3,"names":["_calcNewScaledOffsetForZoomCentering","require","calcGestureCenterPoint","e","gestureState","touches","nativeEvent","numberActiveTouches","x","pageX","y","pageY","calcGestureTouchDistance","dx","Math","abs","dy","sqrt"],"sourceRoot":"../../../src","sources":["helper/index.ts"],"mappings":";;;;;;;;;;;;;AAIA,IAAAA,oCAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,sBAAsBA,CACpCC,CAAwB,EACxBC,YAAsC,EACxB;EACd,MAAMC,OAAO,GAAGF,CAAC,CAACG,WAAW,CAACD,OAAO;EACrC,IAAI,CAACA,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI;EAE5B,IAAID,YAAY,CAACG,mBAAmB,KAAK,CAAC,EAAE;IAC1C,IAAI,CAACF,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI;IAC5B,OAAO;MACLG,CAAC,EAAE,CAACH,OAAO,CAAC,CAAC,CAAC,CAACI,KAAK,GAAGJ,OAAO,CAAC,CAAC,CAAC,CAACI,KAAK,IAAI,CAAC;MAC5CC,CAAC,EAAE,CAACL,OAAO,CAAC,CAAC,CAAC,CAACM,KAAK,GAAGN,OAAO,CAAC,CAAC,CAAC,CAACM,KAAK,IAAI;IAC7C,CAAC;EACH;EACA,IAAIP,YAAY,CAACG,mBAAmB,KAAK,CAAC,EAAE;IAC1C,OAAO;MACLC,CAAC,EAAEH,OAAO,CAAC,CAAC,CAAC,CAACI,KAAK;MACnBC,CAAC,EAAEL,OAAO,CAAC,CAAC,CAAC,CAACM;IAChB,CAAC;EACH;EAEA,OAAO,IAAI;AACb;AAEO,SAASC,wBAAwBA,CACtCT,CAAwB,EACxBC,YAAsC,EACvB;EACf,MAAMC,OAAO,GAAGF,CAAC,CAACG,WAAW,CAACD,OAAO;EACrC,IAAID,YAAY,CAACG,mBAAmB,KAAK,CAAC,IAAI,CAACF,OAAO,CAAC,CAAC,CAAC,IAAI,CAACA,OAAO,CAAC,CAAC,CAAC,EACtE,OAAO,IAAI;EAEb,MAAMQ,EAAE,GAAGC,IAAI,CAACC,GAAG,CAACV,OAAO,CAAC,CAAC,CAAC,CAACI,KAAK,GAAGJ,OAAO,CAAC,CAAC,CAAC,CAACI,KAAK,CAAC;EACxD,MAAMO,EAAE,GAAGF,IAAI,CAACC,GAAG,CAACV,OAAO,CAAC,CAAC,CAAC,CAACM,KAAK,GAAGN,OAAO,CAAC,CAAC,CAAC,CAACM,KAAK,CAAC;EACxD,OAAOG,IAAI,CAACG,IAAI,CAACJ,EAAE,GAAGA,EAAE,GAAGG,EAAE,GAAGA,EAAE,CAAC;AACrC","ignoreList":[]}
diff --git a/lib/commonjs/hooks/useLatestCallback.js b/lib/commonjs/hooks/useLatestCallback.js
index 3a702d3..331666a 100644
--- a/lib/commonjs/hooks/useLatestCallback.js
+++ b/lib/commonjs/hooks/useLatestCallback.js
@@ -4,9 +4,7 @@ Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useLatestCallback = void 0;
-
var _react = require("react");
-
/**
* A hook that returns a stable callback reference that always calls the latest version of the function.
* This avoids the need to include the callback in dependency arrays while ensuring the latest version is called.
@@ -16,6 +14,5 @@ const useLatestCallback = callback => {
ref.current = callback;
return (0, _react.useRef)((...args) => ref.current(...args)).current;
};
-
exports.useLatestCallback = useLatestCallback;
//# sourceMappingURL=useLatestCallback.js.map
\ No newline at end of file
diff --git a/lib/commonjs/hooks/useLatestCallback.js.map b/lib/commonjs/hooks/useLatestCallback.js.map
index 2c534b1..e24a2dc 100644
--- a/lib/commonjs/hooks/useLatestCallback.js.map
+++ b/lib/commonjs/hooks/useLatestCallback.js.map
@@ -1 +1 @@
-{"version":3,"sources":["hooks/useLatestCallback.ts"],"names":["useLatestCallback","callback","ref","current","args"],"mappings":";;;;;;;AAAA;;AAEA;AACA;AACA;AACA;AACO,MAAMA,iBAAiB,GAC5BC,QAD+B,IAE5B;AACH,QAAMC,GAAG,GAAG,mBAAOD,QAAP,CAAZ;AACAC,EAAAA,GAAG,CAACC,OAAJ,GAAcF,QAAd;AAEA,SAAO,mBAAwB,CAAC,GAAGG,IAAJ,KAAaF,GAAG,CAACC,OAAJ,CAAY,GAAGC,IAAf,CAArC,EAA2DD,OAAlE;AACD,CAPM","sourceRoot":"../../../src"}
+{"version":3,"names":["_react","require","useLatestCallback","callback","ref","useRef","current","args","exports"],"sourceRoot":"../../../src","sources":["hooks/useLatestCallback.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACO,MAAMC,iBAAiB,GAC5BC,QAAmC,IAChC;EACH,MAAMC,GAAG,GAAG,IAAAC,aAAM,EAACF,QAAQ,CAAC;EAC5BC,GAAG,CAACE,OAAO,GAAGH,QAAQ;EAEtB,OAAO,IAAAE,aAAM,EAAkB,CAAC,GAAGE,IAAI,KAAKH,GAAG,CAACE,OAAO,CAAC,GAAGC,IAAI,CAAC,CAAC,CAACD,OAAO;AAC3E,CAAC;AAACE,OAAA,CAAAN,iBAAA,GAAAA,iBAAA","ignoreList":[]}
diff --git a/lib/commonjs/index.js b/lib/commonjs/index.js
index 1356a2d..39cbcac 100644
--- a/lib/commonjs/index.js
+++ b/lib/commonjs/index.js
@@ -27,10 +27,7 @@ Object.defineProperty(exports, "viewportPositionToImagePosition", {
return _coordinateConversion.viewportPositionToImagePosition;
}
});
-
var _coordinateConversion = require("./helper/coordinateConversion");
-
var _ReactNativeZoomableView = _interopRequireDefault(require("./ReactNativeZoomableView"));
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/lib/commonjs/index.js.map b/lib/commonjs/index.js.map
index 8b09dc9..631e513 100644
--- a/lib/commonjs/index.js.map
+++ b/lib/commonjs/index.js.map
@@ -1 +1 @@
-{"version":3,"sources":["index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAKA","sourceRoot":"../../src"}
+{"version":3,"names":["_coordinateConversion","require","_ReactNativeZoomableView","_interopRequireDefault","e","__esModule","default"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,qBAAA,GAAAC,OAAA;AAKA,IAAAC,wBAAA,GAAAC,sBAAA,CAAAF,OAAA;AAAgE,SAAAE,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA","ignoreList":[]}
diff --git a/lib/commonjs/typings/index.js b/lib/commonjs/typings/index.js
index fe4e49b..4907bab 100644
--- a/lib/commonjs/typings/index.js
+++ b/lib/commonjs/typings/index.js
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
value: true
});
exports.SwipeDirection = void 0;
-
let SwipeDirection = exports.SwipeDirection = /*#__PURE__*/function (SwipeDirection) {
SwipeDirection["SWIPE_UP"] = "SWIPE_UP";
SwipeDirection["SWIPE_DOWN"] = "SWIPE_DOWN";
diff --git a/lib/commonjs/typings/index.js.map b/lib/commonjs/typings/index.js.map
index 7227b94..1b6eb0d 100644
--- a/lib/commonjs/typings/index.js.map
+++ b/lib/commonjs/typings/index.js.map
@@ -1 +1 @@
-{"version":3,"sources":["typings/index.ts"],"names":["SwipeDirection"],"mappings":";;;;;;;IASYA,c,mDAAAA,c;AAAAA,EAAAA,c;AAAAA,EAAAA,c;AAAAA,EAAAA,c;AAAAA,EAAAA,c;SAAAA,c","sourceRoot":"../../../src"}
+{"version":3,"names":["SwipeDirection","exports"],"sourceRoot":"../../../src","sources":["typings/index.ts"],"mappings":";;;;;;IASYA,cAAc,GAAAC,OAAA,CAAAD,cAAA,0BAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAA,OAAdA,cAAc;AAAA","ignoreList":[]}
diff --git a/lib/module/ReactNativeZoomableView.js b/lib/module/ReactNativeZoomableView.js
index b399085..2f6c9e6 100644
--- a/lib/module/ReactNativeZoomableView.js
+++ b/lib/module/ReactNativeZoomableView.js
@@ -1,7 +1,7 @@
"use strict";
-import { debounce } from 'lodash';
-import React, { Component, createRef } from 'react';
+import { debounce, defaults } from 'lodash';
+import React, { useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from 'react';
import { Animated, PanResponder, StyleSheet, View } from 'react-native';
import { getZoomToAnimation } from './animations';
import { AnimatedTouchFeedback } from './components';
@@ -9,22 +9,25 @@ import { StaticPin } from './components/StaticPin';
import { DebugTouchPoint } from './debugHelper';
import { calcGestureCenterPoint, calcGestureTouchDistance, calcNewScaledOffsetForZoomCentering } from './helper';
import { viewportPositionToImagePosition } from './helper/coordinateConversion';
+import { useLatestCallback } from './hooks/useLatestCallback';
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
-const initialState = {
- originalWidth: 0,
- originalHeight: 0,
- originalPageX: 0,
- originalPageY: 0,
- originalX: 0,
- originalY: 0,
- pinSize: {
+const ReactNativeZoomableView = (props, ref) => {
+ const [originalWidth, setOriginalWidth] = useState(0);
+ const [originalHeight, setOriginalHeight] = useState(0);
+ const [originalPageX, setOriginalPageX] = useState(0);
+ const [originalPageY, setOriginalPageY] = useState(0);
+ const [originalX, setOriginalX] = useState(0);
+ const [originalY, setOriginalY] = useState(0);
+ const [pinSize, setPinSize] = useState({
width: 0,
height: 0
- }
-};
-
-class ReactNativeZoomableView extends Component {
- static defaultProps = {
+ });
+ const [debugPoints, setDebugPoints] = useState([]);
+ const [stateTouches, setStateTouches] = useState([]);
+ const zoomSubjectWrapperRef = useRef(null);
+ const gestureHandlers = useRef();
+ const doubleTapFirstTapReleaseTimestamp = useRef();
+ props = defaults({}, props, {
zoomEnabled: true,
panEnabled: true,
initialZoom: 1,
@@ -37,7 +40,7 @@ class ReactNativeZoomableView extends Component {
movementSensibility: 1,
doubleTapDelay: 300,
zoomStep: 0.5,
- onLongPress: null,
+ onLongPress: undefined,
longPressDuration: 700,
contentWidth: undefined,
contentHeight: undefined,
@@ -47,47 +50,35 @@ class ReactNativeZoomableView extends Component {
onStaticPinPositionChange: undefined,
onStaticPinPositionMove: undefined,
disablePanOnInitialZoom: false
- };
- panAnim = new Animated.ValueXY({
+ });
+ const panAnim = useRef(new Animated.ValueXY({
x: 0,
y: 0
- });
- zoomAnim = new Animated.Value(1);
- offsetX = 0;
- offsetY = 0;
- zoomLevel = 1;
- lastGestureCenterPosition = null;
- lastGestureTouchDistance = null;
- _gestureStarted = false;
-
- set gestureStarted(v) {
- this._gestureStarted = v;
- }
+ }));
+ const zoomAnim = useRef(new Animated.Value(1));
+ const offsetX = useRef(0);
+ const offsetY = useRef(0);
+ const zoomLevel = useRef(1);
+ const lastGestureCenterPosition = useRef(null);
+ const lastGestureTouchDistance = useRef(150);
+ const gestureType = useRef();
+ const gestureStarted = useRef(false);
- get gestureStarted() {
- return this._gestureStarted;
- }
/**
* Last press time (used to evaluate whether user double tapped)
- * @type {number}
*/
-
-
- longPressTimeout = null;
- touches = [];
-
- constructor(props) {
- super(props); // This needs to be done before anything else to initialize the state.
- // Otherwise, the logic below may reference the state when it's undefined,
- // causing runtime errors.
-
- this.state = { ...initialState
- };
- this.gestureHandlers = PanResponder.create({
- onStartShouldSetPanResponder: this._handleStartShouldSetPanResponder,
- onPanResponderGrant: this._handlePanResponderGrant,
- onPanResponderMove: this._handlePanResponderMove,
- onPanResponderRelease: this._handlePanResponderEnd,
+ const longPressTimeout = useRef();
+ const onTransformInvocationInitialized = useRef();
+ const singleTapTimeoutId = useRef();
+ const touches = useRef([]);
+ const doubleTapFirstTap = useRef();
+ const measureZoomSubjectInterval = useRef();
+ useLayoutEffect(() => {
+ gestureHandlers.current = PanResponder.create({
+ onStartShouldSetPanResponder: _handleStartShouldSetPanResponder,
+ onPanResponderGrant: _handlePanResponderGrant,
+ onPanResponderMove: _handlePanResponderMove,
+ onPanResponderRelease: _handlePanResponderEnd,
onPanResponderTerminate: (evt, gestureState) => {
// We should also call _handlePanResponderEnd
// to properly perform cleanups when the gesture is terminated
@@ -95,155 +86,147 @@ class ReactNativeZoomableView extends Component {
// This also fixes a weird issue where
// on real device, sometimes onPanResponderRelease is not called when you lift 2 fingers up,
// but onPanResponderTerminate is called instead for no apparent reason.
- this._handlePanResponderEnd(evt, gestureState);
-
- this.props.onPanResponderTerminate?.(evt, gestureState, this._getZoomableViewEventObject());
+ _handlePanResponderEnd(evt, gestureState);
+ props.onPanResponderTerminate?.(evt, gestureState, _getZoomableViewEventObject());
},
- onPanResponderTerminationRequest: (evt, gestureState) => !!this.props.onPanResponderTerminationRequest?.(evt, gestureState, this._getZoomableViewEventObject()),
+ onPanResponderTerminationRequest: (evt, gestureState) => !!props.onPanResponderTerminationRequest?.(evt, gestureState, _getZoomableViewEventObject()),
// Defaults to true to prevent parent components, such as React Navigation's tab view, from taking over as responder.
- onShouldBlockNativeResponder: (evt, gestureState) => this.props.onShouldBlockNativeResponder?.(evt, gestureState, this._getZoomableViewEventObject()) ?? true,
- onStartShouldSetPanResponderCapture: (evt, gestureState) => !!this.props.onStartShouldSetPanResponderCapture?.(evt, gestureState),
- onMoveShouldSetPanResponderCapture: (evt, gestureState) => !!this.props.onMoveShouldSetPanResponderCapture?.(evt, gestureState)
+ onShouldBlockNativeResponder: (evt, gestureState) => props.onShouldBlockNativeResponder?.(evt, gestureState, _getZoomableViewEventObject()) ?? true,
+ onStartShouldSetPanResponderCapture: (evt, gestureState) => !!props.onStartShouldSetPanResponderCapture?.(evt, gestureState),
+ onMoveShouldSetPanResponderCapture: (evt, gestureState) => !!props.onMoveShouldSetPanResponderCapture?.(evt, gestureState)
});
- this.zoomSubjectWrapperRef = /*#__PURE__*/createRef();
- if (this.props.zoomAnimatedValue) this.zoomAnim = this.props.zoomAnimatedValue;
- if (this.props.panAnimatedValueXY) this.panAnim = this.props.panAnimatedValueXY;
- if (this.props.initialZoom) this.zoomLevel = this.props.initialZoom;
- if (this.props.initialOffsetX != null) this.offsetX = this.props.initialOffsetX;
- if (this.props.initialOffsetY != null) this.offsetY = this.props.initialOffsetY;
- this.panAnim.setValue({
- x: this.offsetX,
- y: this.offsetY
+ if (props.zoomAnimatedValue) zoomAnim.current = props.zoomAnimatedValue;
+ if (props.panAnimatedValueXY) panAnim.current = props.panAnimatedValueXY;
+ if (props.initialZoom) zoomLevel.current = props.initialZoom;
+ if (props.initialOffsetX != null) offsetX.current = props.initialOffsetX;
+ if (props.initialOffsetY != null) offsetY.current = props.initialOffsetY;
+ panAnim.current.setValue({
+ x: offsetX.current,
+ y: offsetY.current
});
- this.zoomAnim.setValue(this.zoomLevel);
- this.panAnim.addListener(({
+ zoomAnim.current.setValue(zoomLevel.current);
+ panAnim.current.addListener(({
x,
y
}) => {
- this.offsetX = x;
- this.offsetY = y;
+ offsetX.current = x;
+ offsetY.current = y;
});
- this.zoomAnim.addListener(({
+ zoomAnim.current.addListener(({
value
}) => {
- this.zoomLevel = value;
+ zoomLevel.current = value;
});
- this.lastGestureTouchDistance = 150;
- this.gestureType = null;
- }
-
- componentDidUpdate(prevProps, prevState) {
- const {
- zoomEnabled,
- initialZoom
- } = this.props;
-
- if (prevProps.zoomEnabled && !zoomEnabled && initialZoom) {
- this.zoomLevel = initialZoom;
- this.zoomAnim.setValue(this.zoomLevel);
+ }, []);
+ const {
+ zoomEnabled
+ } = props;
+ const initialZoom = useRef(props.initialZoom);
+ initialZoom.current = props.initialZoom;
+ useLayoutEffect(() => {
+ if (!zoomEnabled && initialZoom.current) {
+ zoomLevel.current = initialZoom.current;
+ zoomAnim.current.setValue(zoomLevel.current);
}
-
- if (!this.onTransformInvocationInitialized && this._invokeOnTransform().successful) {
- this.panAnim.addListener(() => this._invokeOnTransform());
- this.zoomAnim.addListener(() => this._invokeOnTransform());
- this.onTransformInvocationInitialized = true;
+ }, [zoomEnabled]);
+ useLayoutEffect(() => {
+ if (!onTransformInvocationInitialized.current && _invokeOnTransform().successful) {
+ panAnim.current.addListener(() => _invokeOnTransform());
+ zoomAnim.current.addListener(() => _invokeOnTransform());
+ onTransformInvocationInitialized.current = true;
}
-
- const currState = this.state;
- const originalMeasurementsChanged = currState.originalHeight !== prevState.originalHeight || currState.originalWidth !== prevState.originalWidth || currState.originalPageX !== prevState.originalPageX || currState.originalPageY !== prevState.originalPageY || currState.originalX !== prevState.originalX || currState.originalY !== prevState.originalY;
- const staticPinPositionChanged = prevProps.staticPinPosition?.x !== this.props.staticPinPosition?.x || prevProps.staticPinPosition?.y !== this.props.staticPinPosition?.y; // We use a custom `onLayout` event, so the clients can stay in-sync
+ },
+ // FIXME: deps has implicit coupling with internal _invokeOnTransform logic
+ [originalWidth, originalHeight]);
+ const onLayout = useRef(props.onLayout);
+ onLayout.current = props.onLayout;
+
+ // Handle original measurements changed
+ useLayoutEffect(() => {
+ // We use a custom `onLayout` event, so the clients can stay in-sync
// with when the internal measurements are actually saved to the state,
// thus helping them apply transformations at more accurate timings
-
- if (originalMeasurementsChanged) {
- const layout = {
- width: currState.originalWidth,
- height: currState.originalHeight,
- x: currState.originalX,
- y: currState.originalY
- };
- this.props.onLayout?.({
- nativeEvent: {
- layout
- }
- });
- }
-
- if (this.onTransformInvocationInitialized && (originalMeasurementsChanged || staticPinPositionChanged)) {
- this._invokeOnTransform();
- }
- }
-
- componentDidMount() {
- this.measureZoomSubject(); // We've already run `grabZoomSubjectOriginalMeasurements` at various events
+ const layout = {
+ width: originalWidth,
+ height: originalHeight,
+ x: originalX,
+ y: originalY
+ };
+ onLayout.current?.({
+ nativeEvent: {
+ layout
+ }
+ });
+ if (onTransformInvocationInitialized.current) _invokeOnTransform();
+ }, [originalHeight, originalWidth, originalPageX, originalPageY, originalX, originalY]);
+
+ // Handle staticPinPosition changed
+ useLayoutEffect(() => {
+ if (onTransformInvocationInitialized.current) _invokeOnTransform();
+ }, [props.staticPinPosition?.x, props.staticPinPosition?.y]);
+ useEffect(() => {
+ measureZoomSubject();
+ // We've already run `grabZoomSubjectOriginalMeasurements` at various events
// to make sure the measurements are promptly updated.
// However, there might be cases we haven't accounted for, especially when
// native processes are involved. To account for those cases,
// we'll use an interval here to ensure we're always up-to-date.
// The `setState` in `grabZoomSubjectOriginalMeasurements` won't trigger a rerender
// if the values given haven't changed, so we're not running performance risk here.
+ measureZoomSubjectInterval.current = setInterval(measureZoomSubject, 1e3);
+ return () => {
+ measureZoomSubjectInterval.current && clearInterval(measureZoomSubjectInterval.current);
+ };
+ }, []);
+ const onStaticPinPositionChange = useLatestCallback(props.onStaticPinPositionChange || (() => undefined));
+ const debouncedOnStaticPinPositionChange = useMemo(() => debounce(onStaticPinPositionChange, 100), []);
- this.measureZoomSubjectInterval = setInterval(this.measureZoomSubject, 1e3);
- }
-
- componentWillUnmount() {
- this.measureZoomSubjectInterval && clearInterval(this.measureZoomSubjectInterval);
- }
-
- debouncedOnStaticPinPositionChange = debounce(position => this.props.onStaticPinPositionChange?.(position), 100);
/**
* try to invoke onTransform
* @private
*/
-
- _invokeOnTransform() {
- const zoomableViewEvent = this._getZoomableViewEventObject();
-
- const position = this._staticPinPosition();
-
+ const _invokeOnTransform = useLatestCallback(() => {
+ const zoomableViewEvent = _getZoomableViewEventObject();
+ const position = _staticPinPosition();
if (!zoomableViewEvent.originalWidth || !zoomableViewEvent.originalHeight) return {
successful: false
};
- this.props.onTransform?.(zoomableViewEvent);
-
+ props.onTransform?.(zoomableViewEvent);
if (position) {
- this.props.onStaticPinPositionMove?.(position);
- this.debouncedOnStaticPinPositionChange(position);
+ props.onStaticPinPositionMove?.(position);
+ debouncedOnStaticPinPositionChange(position);
}
-
return {
successful: true
};
- }
+ });
+
/**
* Returns additional information about components current state for external event hooks
*
* @returns {{}}
* @private
*/
-
-
- _getZoomableViewEventObject(overwriteObj = {}) {
+ const _getZoomableViewEventObject = useLatestCallback((overwriteObj = {}) => {
return {
- zoomLevel: this.zoomLevel,
- offsetX: this.offsetX,
- offsetY: this.offsetY,
- originalHeight: this.state.originalHeight,
- originalWidth: this.state.originalWidth,
- originalPageX: this.state.originalPageX,
- originalPageY: this.state.originalPageY,
+ zoomLevel: zoomLevel.current,
+ offsetX: offsetX.current,
+ offsetY: offsetY.current,
+ originalHeight,
+ originalWidth,
+ originalPageX,
+ originalPageY,
...overwriteObj
};
- }
+ });
+
/**
* Get the original box dimensions and save them for later use.
* (They will be used to calculate boxBorders)
*
* @private
*/
-
-
- measureZoomSubject = () => {
+ const measureZoomSubject = useLatestCallback(() => {
// make sure we measure after animations are complete
requestAnimationFrame(() => {
// this setTimeout is here to fix a weird issue on iOS where the measurements are all `0`
@@ -255,29 +238,22 @@ class ReactNativeZoomableView extends Component {
// in which case these measurements will not represent the true "original" measurements.
// We just need to make sure the zoomSubjectWrapper perfectly aligns with the zoomSubject
// (no border, space, or anything between them)
- this.zoomSubjectWrapperRef.current?.measure((x, y, width, height, pageX, pageY) => {
+ zoomSubjectWrapperRef.current?.measure((x, y, width, height, pageX, pageY) => {
// When the component is off-screen, these become all 0s, so we don't set them
// to avoid messing up calculations, especially ones that are done right after
// the component transitions from hidden to visible.
- if (!pageX && !pageY && !width && !height) return; // If these values are all the same, don't re-set them in state
- // this way we don't re-render
-
- if (this.state.originalX === x && this.state.originalY === y && this.state.originalWidth === width && this.state.originalHeight === height && this.state.originalPageX === pageX && this.state.originalPageY === pageY) {
- return;
- }
-
- this.setState({
- originalX: x,
- originalY: y,
- originalWidth: width,
- originalHeight: height,
- originalPageX: pageX,
- originalPageY: pageY
- });
+ if (!pageX && !pageY && !width && !height) return;
+ setOriginalX(x);
+ setOriginalY(y);
+ setOriginalWidth(width);
+ setOriginalHeight(height);
+ setOriginalPageX(pageX);
+ setOriginalPageY(pageY);
});
});
});
- };
+ });
+
/**
* Handles the start of touch events and checks for taps
*
@@ -287,18 +263,18 @@ class ReactNativeZoomableView extends Component {
*
* @private
*/
+ const _handleStartShouldSetPanResponder = useLatestCallback((e, gestureState) => {
+ if (props.onStartShouldSetPanResponder) {
+ props.onStartShouldSetPanResponder(e, gestureState, _getZoomableViewEventObject(), false);
+ }
- _handleStartShouldSetPanResponder = (e, gestureState) => {
- if (this.props.onStartShouldSetPanResponder) {
- this.props.onStartShouldSetPanResponder(e, gestureState, this._getZoomableViewEventObject(), false);
- } // Always set pan responder on start
+ // Always set pan responder on start
// of gesture so we can handle tap.
// "Pan threshold validation" will be handled
// in `onPanResponderMove` instead of in `onMoveShouldSetPanResponder`
-
-
return true;
- };
+ });
+
/**
* Calculates pinch distance
*
@@ -306,21 +282,20 @@ class ReactNativeZoomableView extends Component {
* @param gestureState
* @private
*/
-
- _handlePanResponderGrant = (e, gestureState) => {
- if (this.props.onLongPress) {
+ const _handlePanResponderGrant = useLatestCallback((e, gestureState) => {
+ if (props.onLongPress) {
e.persist();
- this.longPressTimeout = setTimeout(() => {
- this.props.onLongPress?.(e, gestureState, this._getZoomableViewEventObject());
- this.longPressTimeout = null;
- }, this.props.longPressDuration);
+ longPressTimeout.current = setTimeout(() => {
+ props.onLongPress?.(e, gestureState, _getZoomableViewEventObject());
+ longPressTimeout.current = undefined;
+ }, props.longPressDuration);
}
+ props.onPanResponderGrant?.(e, gestureState, _getZoomableViewEventObject());
+ panAnim.current.stopAnimation();
+ zoomAnim.current.stopAnimation();
+ gestureStarted.current = true;
+ });
- this.props.onPanResponderGrant?.(e, gestureState, this._getZoomableViewEventObject());
- this.panAnim.stopAnimation();
- this.zoomAnim.stopAnimation();
- this.gestureStarted = true;
- };
/**
* Handles the end of touch events
*
@@ -329,37 +304,29 @@ class ReactNativeZoomableView extends Component {
*
* @private
*/
-
- _handlePanResponderEnd = (e, gestureState) => {
- if (!this.gestureType) {
- this._resolveAndHandleTap(e);
+ const _handlePanResponderEnd = useLatestCallback((e, gestureState) => {
+ if (!gestureType.current) {
+ _resolveAndHandleTap(e);
}
-
- this.setState({
- debugPoints: []
- });
- this.lastGestureCenterPosition = null;
-
- if (this.longPressTimeout) {
- clearTimeout(this.longPressTimeout);
- this.longPressTimeout = null;
+ setDebugPoints([]);
+ lastGestureCenterPosition.current = null;
+ if (longPressTimeout.current) {
+ clearTimeout(longPressTimeout.current);
+ longPressTimeout.current = undefined;
}
-
- this.props.onPanResponderEnd?.(e, gestureState, this._getZoomableViewEventObject());
-
- if (this.gestureType === 'pinch') {
- this.props.onZoomEnd?.(e, gestureState, this._getZoomableViewEventObject());
- } else if (this.gestureType === 'shift') {
- this.props.onShiftingEnd?.(e, gestureState, this._getZoomableViewEventObject());
+ props.onPanResponderEnd?.(e, gestureState, _getZoomableViewEventObject());
+ if (gestureType.current === 'pinch') {
+ props.onZoomEnd?.(e, gestureState, _getZoomableViewEventObject());
+ } else if (gestureType.current === 'shift') {
+ props.onShiftingEnd?.(e, gestureState, _getZoomableViewEventObject());
}
-
- if (this.props.staticPinPosition) {
- this._updateStaticPin();
+ if (props.staticPinPosition) {
+ _updateStaticPin();
}
+ gestureType.current = undefined;
+ gestureStarted.current = false;
+ });
- this.gestureType = null;
- this.gestureStarted = false;
- };
/**
* Handles the actual movement of our pan responder
*
@@ -368,67 +335,59 @@ class ReactNativeZoomableView extends Component {
*
* @private
*/
-
- _handlePanResponderMove = (e, gestureState) => {
- if (this.props.onPanResponderMove) {
- if (this.props.onPanResponderMove(e, gestureState, this._getZoomableViewEventObject())) {
+ const _handlePanResponderMove = useLatestCallback((e, gestureState) => {
+ if (props.onPanResponderMove) {
+ if (props.onPanResponderMove(e, gestureState, _getZoomableViewEventObject())) {
return false;
}
- } // Only supports 2 touches and below,
- // any invalid number will cause the gesture to end.
-
+ }
+ // Only supports 2 touches and below,
+ // any invalid number will cause the gesture to end.
if (gestureState.numberActiveTouches <= 2) {
- if (!this.gestureStarted) {
- this._handlePanResponderGrant(e, gestureState);
+ if (!gestureStarted.current) {
+ _handlePanResponderGrant(e, gestureState);
}
} else {
- if (this.gestureStarted) {
- this._handlePanResponderEnd(e, gestureState);
+ if (gestureStarted.current) {
+ _handlePanResponderEnd(e, gestureState);
}
-
return true;
}
-
if (gestureState.numberActiveTouches === 2) {
- if (this.longPressTimeout) {
- clearTimeout(this.longPressTimeout);
- this.longPressTimeout = null;
- } // change some measurement states when switching gesture to ensure a smooth transition
-
-
- if (this.gestureType !== 'pinch') {
- this.lastGestureCenterPosition = calcGestureCenterPoint(e, gestureState);
- this.lastGestureTouchDistance = calcGestureTouchDistance(e, gestureState);
+ if (longPressTimeout.current) {
+ clearTimeout(longPressTimeout.current);
+ longPressTimeout.current = undefined;
}
- this.gestureType = 'pinch';
-
- this._handlePinching(e, gestureState);
+ // change some measurement states when switching gesture to ensure a smooth transition
+ if (gestureType.current !== 'pinch') {
+ lastGestureCenterPosition.current = calcGestureCenterPoint(e, gestureState);
+ lastGestureTouchDistance.current = calcGestureTouchDistance(e, gestureState);
+ }
+ gestureType.current = 'pinch';
+ _handlePinching(e, gestureState);
} else if (gestureState.numberActiveTouches === 1) {
- if (this.longPressTimeout && (Math.abs(gestureState.dx) > 5 || Math.abs(gestureState.dy) > 5)) {
- clearTimeout(this.longPressTimeout);
- this.longPressTimeout = null;
- } // change some measurement states when switching gesture to ensure a smooth transition
-
-
- if (this.gestureType !== 'shift') {
- this.lastGestureCenterPosition = calcGestureCenterPoint(e, gestureState);
+ if (longPressTimeout.current && (Math.abs(gestureState.dx) > 5 || Math.abs(gestureState.dy) > 5)) {
+ clearTimeout(longPressTimeout.current);
+ longPressTimeout.current = undefined;
+ }
+ // change some measurement states when switching gesture to ensure a smooth transition
+ if (gestureType.current !== 'shift') {
+ lastGestureCenterPosition.current = calcGestureCenterPoint(e, gestureState);
}
-
const {
dx,
dy
} = gestureState;
const isShiftGesture = Math.abs(dx) > 2 || Math.abs(dy) > 2;
-
if (isShiftGesture) {
- this.gestureType = 'shift';
-
- this._handleShifting(gestureState);
+ gestureType.current = 'shift';
+ _handleShifting(gestureState);
}
}
- };
+ });
+
/**
* Handles the pinch movement and zooming
*
@@ -437,115 +396,98 @@ class ReactNativeZoomableView extends Component {
*
* @private
*/
-
- _handlePinching(e, gestureState) {
- if (!this.props.zoomEnabled) return;
+ const _handlePinching = useLatestCallback((e, gestureState) => {
+ if (!props.zoomEnabled) return;
const {
maxZoom,
minZoom,
pinchToZoomInSensitivity,
pinchToZoomOutSensitivity
- } = this.props;
+ } = props;
const distance = calcGestureTouchDistance(e, gestureState);
-
- if (this.props.onZoomBefore && this.props.onZoomBefore(e, gestureState, this._getZoomableViewEventObject())) {
+ if (props.onZoomBefore && props.onZoomBefore(e, gestureState, _getZoomableViewEventObject())) {
return;
}
-
if (!distance) return;
- if (!this.lastGestureTouchDistance) return; // define the new zoom level and take zoom level sensitivity into consideration
+ if (!lastGestureTouchDistance.current) return;
- const zoomGrowthFromLastGestureState = distance / this.lastGestureTouchDistance;
- this.lastGestureTouchDistance = distance;
+ // define the new zoom level and take zoom level sensitivity into consideration
+ const zoomGrowthFromLastGestureState = distance / lastGestureTouchDistance.current;
+ lastGestureTouchDistance.current = distance;
const pinchToZoomSensitivity = zoomGrowthFromLastGestureState < 1 ? pinchToZoomOutSensitivity : pinchToZoomInSensitivity;
if (pinchToZoomSensitivity == null) return;
- const deltaGrowth = zoomGrowthFromLastGestureState - 1; // 0 - no resistance
+ const deltaGrowth = zoomGrowthFromLastGestureState - 1;
+ // 0 - no resistance
// 10 - 90% resistance
-
const deltaGrowthAdjustedBySensitivity = deltaGrowth * (1 - pinchToZoomSensitivity * 9 / 100);
- let newZoomLevel = this.zoomLevel * (1 + deltaGrowthAdjustedBySensitivity); // make sure max and min zoom levels are respected
+ let newZoomLevel = zoomLevel.current * (1 + deltaGrowthAdjustedBySensitivity);
+ // make sure max and min zoom levels are respected
if (maxZoom != null && newZoomLevel > maxZoom) {
newZoomLevel = maxZoom;
}
-
if (minZoom != null && newZoomLevel < minZoom) {
newZoomLevel = minZoom;
}
-
const gestureCenterPoint = calcGestureCenterPoint(e, gestureState);
if (!gestureCenterPoint) return;
let zoomCenter = {
- x: gestureCenterPoint.x - this.state.originalPageX,
- y: gestureCenterPoint.y - this.state.originalPageY
+ x: gestureCenterPoint.x - originalPageX,
+ y: gestureCenterPoint.y - originalPageY
};
-
- if (this.props.staticPinPosition) {
+ if (props.staticPinPosition) {
// When we use a static pin position, the zoom centre is the same as that position,
// otherwise the pin moves around way too much while zooming.
zoomCenter = {
- x: this.props.staticPinPosition.x,
- y: this.props.staticPinPosition.y
+ x: props.staticPinPosition.x,
+ y: props.staticPinPosition.y
};
- } // Uncomment to debug
-
+ }
- this.props.debug && this._setPinchDebugPoints(e, zoomCenter);
- const {
- originalHeight,
- originalWidth
- } = this.state;
- const oldOffsetX = this.offsetX;
- const oldOffsetY = this.offsetY;
- const oldScale = this.zoomLevel;
+ // Uncomment to debug
+ props.debug && _setPinchDebugPoints(e, zoomCenter);
+ const oldOffsetX = offsetX.current;
+ const oldOffsetY = offsetY.current;
+ const oldScale = zoomLevel.current;
const newScale = newZoomLevel;
if (!originalHeight || !originalWidth) return;
- let offsetY = calcNewScaledOffsetForZoomCentering(oldOffsetY, originalHeight, oldScale, newScale, zoomCenter.y);
- let offsetX = calcNewScaledOffsetForZoomCentering(oldOffsetX, originalWidth, oldScale, newScale, zoomCenter.x);
-
- const offsetShift = this._calcOffsetShiftSinceLastGestureState(gestureCenterPoint);
-
+ let newOffsetY = calcNewScaledOffsetForZoomCentering(oldOffsetY, originalHeight, oldScale, newScale, zoomCenter.y);
+ let newOffsetX = calcNewScaledOffsetForZoomCentering(oldOffsetX, originalWidth, oldScale, newScale, zoomCenter.x);
+ const offsetShift = _calcOffsetShiftSinceLastGestureState(gestureCenterPoint);
if (offsetShift) {
- offsetX += offsetShift.x;
- offsetY += offsetShift.y;
+ newOffsetX += offsetShift.x;
+ newOffsetY += offsetShift.y;
}
-
- this.offsetX = offsetX;
- this.offsetY = offsetY;
- this.zoomLevel = newScale;
- this.panAnim.setValue({
- x: this.offsetX,
- y: this.offsetY
+ offsetX.current = newOffsetX;
+ offsetY.current = newOffsetY;
+ zoomLevel.current = newScale;
+ panAnim.current.setValue({
+ x: offsetX.current,
+ y: offsetY.current
});
- this.zoomAnim.setValue(this.zoomLevel);
- this.props.onZoomAfter?.(e, gestureState, this._getZoomableViewEventObject());
- }
+ zoomAnim.current.setValue(zoomLevel.current);
+ props.onZoomAfter?.(e, gestureState, _getZoomableViewEventObject());
+ });
+
/**
* Used to debug pinch events
* @param gestureResponderEvent
* @param zoomCenter
* @param points
*/
-
-
- _setPinchDebugPoints(gestureResponderEvent, zoomCenter, ...points) {
+ const _setPinchDebugPoints = useLatestCallback((gestureResponderEvent, zoomCenter, ...points) => {
const {
touches
} = gestureResponderEvent.nativeEvent;
- const {
- originalPageY,
- originalPageX
- } = this.state;
- this.setState({
- debugPoints: [{
- x: touches[0].pageX - originalPageX,
- y: touches[0].pageY - originalPageY
- }, {
- x: touches[1].pageX - originalPageX,
- y: touches[1].pageY - originalPageY
- }, zoomCenter, ...points]
- });
- }
+ setDebugPoints([{
+ x: touches[0].pageX - originalPageX,
+ y: touches[0].pageY - originalPageY
+ }, {
+ x: touches[1].pageX - originalPageX,
+ y: touches[1].pageY - originalPageY
+ }, zoomCenter, ...points]);
+ });
+
/**
* Calculates the amount the offset should shift since the last position during panning
*
@@ -553,28 +495,25 @@ class ReactNativeZoomableView extends Component {
*
* @private
*/
-
-
- _calcOffsetShiftSinceLastGestureState(gestureCenterPoint) {
+ const _calcOffsetShiftSinceLastGestureState = useLatestCallback(gestureCenterPoint => {
const {
movementSensibility
- } = this.props;
+ } = props;
let shift = null;
-
- if (this.lastGestureCenterPosition && movementSensibility) {
- const dx = gestureCenterPoint.x - this.lastGestureCenterPosition.x;
- const dy = gestureCenterPoint.y - this.lastGestureCenterPosition.y;
- const shiftX = dx / this.zoomLevel / movementSensibility;
- const shiftY = dy / this.zoomLevel / movementSensibility;
+ if (lastGestureCenterPosition.current && movementSensibility) {
+ const dx = gestureCenterPoint.x - lastGestureCenterPosition.current.x;
+ const dy = gestureCenterPoint.y - lastGestureCenterPosition.current.y;
+ const shiftX = dx / zoomLevel.current / movementSensibility;
+ const shiftY = dy / zoomLevel.current / movementSensibility;
shift = {
x: shiftX,
y: shiftY
};
}
-
- this.lastGestureCenterPosition = gestureCenterPoint;
+ lastGestureCenterPosition.current = gestureCenterPoint;
return shift;
- }
+ });
+
/**
* Handles movement by tap and move
*
@@ -582,36 +521,29 @@ class ReactNativeZoomableView extends Component {
*
* @private
*/
-
-
- _handleShifting(gestureState) {
+ const _handleShifting = useLatestCallback(gestureState => {
// Skips shifting if panEnabled is false or disablePanOnInitialZoom is true and we're on the initial zoom level
- if (!this.props.panEnabled || this.props.disablePanOnInitialZoom && this.zoomLevel === this.props.initialZoom) {
+ if (!props.panEnabled || props.disablePanOnInitialZoom && zoomLevel.current === props.initialZoom) {
return;
}
-
- const shift = this._calcOffsetShiftSinceLastGestureState({
+ const shift = _calcOffsetShiftSinceLastGestureState({
x: gestureState.moveX,
y: gestureState.moveY
});
-
if (!shift) return;
- const offsetX = this.offsetX + shift.x;
- const offsetY = this.offsetY + shift.y;
-
- if (this.props.debug && this.state.originalPageX && this.state.originalPageY) {
- const x = gestureState.moveX - this.state.originalPageX;
- const y = gestureState.moveY - this.state.originalPageY;
- this.setState({
- debugPoints: [{
- x,
- y
- }]
- });
+ const newOffsetX = offsetX.current + shift.x;
+ const newOffsetY = offsetY.current + shift.y;
+ if (props.debug && originalPageX && originalPageY) {
+ const x = gestureState.moveX - originalPageX;
+ const y = gestureState.moveY - originalPageY;
+ setDebugPoints([{
+ x,
+ y
+ }]);
}
+ _setNewOffsetPosition(newOffsetX, newOffsetY);
+ });
- this._setNewOffsetPosition(offsetX, offsetY);
- }
/**
* Set the state to offset moved
*
@@ -619,27 +551,24 @@ class ReactNativeZoomableView extends Component {
* @param {number} newOffsetY
* @returns
*/
-
-
- _setNewOffsetPosition(newOffsetX, newOffsetY) {
+ const _setNewOffsetPosition = useLatestCallback((newOffsetX, newOffsetY) => {
const {
onShiftingBefore,
onShiftingAfter
- } = this.props;
-
- if (onShiftingBefore?.(null, null, this._getZoomableViewEventObject())) {
+ } = props;
+ if (onShiftingBefore?.(null, null, _getZoomableViewEventObject())) {
return;
}
-
- this.offsetX = newOffsetX;
- this.offsetY = newOffsetY;
- this.panAnim.setValue({
- x: this.offsetX,
- y: this.offsetY
+ offsetX.current = newOffsetX;
+ offsetY.current = newOffsetY;
+ panAnim.current.setValue({
+ x: offsetX.current,
+ y: offsetY.current
});
- this.zoomAnim.setValue(this.zoomLevel);
- onShiftingAfter?.(null, null, this._getZoomableViewEventObject());
- }
+ zoomAnim.current.setValue(zoomLevel.current);
+ onShiftingAfter?.(null, null, _getZoomableViewEventObject());
+ });
+
/**
* Check whether the press event is double tap
* or single tap and handle the event accordingly
@@ -648,131 +577,118 @@ class ReactNativeZoomableView extends Component {
*
* @private
*/
-
-
- _resolveAndHandleTap = e => {
+ const _resolveAndHandleTap = useLatestCallback(e => {
const now = Date.now();
-
- if (this.doubleTapFirstTapReleaseTimestamp && this.props.doubleTapDelay && now - this.doubleTapFirstTapReleaseTimestamp < this.props.doubleTapDelay) {
- this.doubleTapFirstTap && this._addTouch({ ...this.doubleTapFirstTap,
+ if (doubleTapFirstTapReleaseTimestamp.current && props.doubleTapDelay && now - doubleTapFirstTapReleaseTimestamp.current < props.doubleTapDelay) {
+ doubleTapFirstTap.current && _addTouch({
+ ...doubleTapFirstTap.current,
id: now.toString(),
isSecondTap: true
});
- this.singleTapTimeoutId && clearTimeout(this.singleTapTimeoutId);
- delete this.doubleTapFirstTapReleaseTimestamp;
- delete this.singleTapTimeoutId;
- delete this.doubleTapFirstTap;
-
- this._handleDoubleTap(e);
+ singleTapTimeoutId.current && clearTimeout(singleTapTimeoutId.current);
+ delete doubleTapFirstTapReleaseTimestamp.current;
+ delete singleTapTimeoutId.current;
+ delete doubleTapFirstTap.current;
+ _handleDoubleTap(e);
} else {
- this.doubleTapFirstTapReleaseTimestamp = now;
- this.doubleTapFirstTap = {
+ doubleTapFirstTapReleaseTimestamp.current = now;
+ doubleTapFirstTap.current = {
id: now.toString(),
- x: e.nativeEvent.pageX - this.state.originalPageX,
- y: e.nativeEvent.pageY - this.state.originalPageY
+ x: e.nativeEvent.pageX - originalPageX,
+ y: e.nativeEvent.pageY - originalPageY
};
+ _addTouch(doubleTapFirstTap.current);
- this._addTouch(this.doubleTapFirstTap); // persist event so e.nativeEvent is preserved after a timeout delay
-
-
+ // persist event so e.nativeEvent is preserved after a timeout delay
e.persist();
- this.singleTapTimeoutId = setTimeout(() => {
- delete this.doubleTapFirstTapReleaseTimestamp;
- delete this.singleTapTimeoutId; // Pan to the tapped location
-
- if (this.props.staticPinPosition && this.doubleTapFirstTap) {
- const tapX = this.props.staticPinPosition.x - this.doubleTapFirstTap.x;
- const tapY = this.props.staticPinPosition.y - this.doubleTapFirstTap.y;
- Animated.timing(this.panAnim, {
+ singleTapTimeoutId.current = setTimeout(() => {
+ delete doubleTapFirstTapReleaseTimestamp.current;
+ delete singleTapTimeoutId.current;
+
+ // Pan to the tapped location
+ if (props.staticPinPosition && doubleTapFirstTap.current) {
+ const tapX = props.staticPinPosition.x - doubleTapFirstTap.current.x;
+ const tapY = props.staticPinPosition.y - doubleTapFirstTap.current.y;
+ Animated.timing(panAnim.current, {
toValue: {
- x: this.offsetX + tapX / this.zoomLevel,
- y: this.offsetY + tapY / this.zoomLevel
+ x: offsetX.current + tapX / zoomLevel.current,
+ y: offsetY.current + tapY / zoomLevel.current
},
useNativeDriver: true,
duration: 200
}).start(() => {
- this._updateStaticPin();
+ _updateStaticPin();
});
}
-
- this.props.onSingleTap?.(e, this._getZoomableViewEventObject());
- }, this.props.doubleTapDelay);
+ props.onSingleTap?.(e, _getZoomableViewEventObject());
+ }, props.doubleTapDelay);
}
- };
- moveStaticPinTo = (position, duration) => {
- const {
- originalWidth,
- originalHeight
- } = this.state;
+ });
+ const publicMoveStaticPinTo = useLatestCallback((position, duration) => {
const {
staticPinPosition,
contentWidth,
contentHeight
- } = this.props;
+ } = props;
if (!staticPinPosition) return;
if (!originalWidth || !originalHeight) return;
- if (!contentWidth || !contentHeight) return; // Offset for the static pin
+ if (!contentWidth || !contentHeight) return;
+ // Offset for the static pin
const pinX = staticPinPosition.x - originalWidth / 2;
const pinY = staticPinPosition.y - originalHeight / 2;
- this.offsetX = contentWidth / 2 - position.x + pinX / this.zoomLevel;
- this.offsetY = contentHeight / 2 - position.y + pinY / this.zoomLevel;
-
+ offsetX.current = contentWidth / 2 - position.x + pinX / zoomLevel.current;
+ offsetY.current = contentHeight / 2 - position.y + pinY / zoomLevel.current;
if (duration) {
- Animated.timing(this.panAnim, {
+ Animated.timing(panAnim.current, {
toValue: {
- x: this.offsetX,
- y: this.offsetY
+ x: offsetX.current,
+ y: offsetY.current
},
useNativeDriver: true,
duration
}).start();
} else {
- this.panAnim.setValue({
- x: this.offsetX,
- y: this.offsetY
+ panAnim.current.setValue({
+ x: offsetX.current,
+ y: offsetY.current
});
}
- };
- _staticPinPosition = () => {
- if (!this.props.staticPinPosition) return;
- if (!this.props.contentWidth || !this.props.contentHeight) return;
+ });
+ const _staticPinPosition = useLatestCallback(() => {
+ if (!props.staticPinPosition) return;
+ if (!props.contentWidth || !props.contentHeight) return;
return viewportPositionToImagePosition({
viewportPosition: {
- x: this.props.staticPinPosition.x,
- y: this.props.staticPinPosition.y
+ x: props.staticPinPosition.x,
+ y: props.staticPinPosition.y
},
imageSize: {
- height: this.props.contentHeight,
- width: this.props.contentWidth
+ height: props.contentHeight,
+ width: props.contentWidth
},
- zoomableEvent: { ...this._getZoomableViewEventObject(),
- offsetX: this.offsetX,
- offsetY: this.offsetY,
- zoomLevel: this.zoomLevel
+ zoomableEvent: {
+ ..._getZoomableViewEventObject(),
+ offsetX: offsetX.current,
+ offsetY: offsetY.current,
+ zoomLevel: zoomLevel.current
}
});
- };
- _updateStaticPin = () => {
- const position = this._staticPinPosition();
-
+ });
+ const _updateStaticPin = useLatestCallback(() => {
+ const position = _staticPinPosition();
if (!position) return;
- this.props.onStaticPinPositionChange?.(position);
- };
-
- _addTouch(touch) {
- this.touches.push(touch);
- this.setState({
- touches: [...this.touches]
- });
- }
+ props.onStaticPinPositionChange?.(position);
+ });
+ const _addTouch = useLatestCallback(touch => {
+ touches.current.push(touch);
+ setStateTouches([...touches.current]);
+ });
+ const _removeTouch = useLatestCallback(touch => {
+ touches.current.splice(touches.current.indexOf(touch), 1);
+ setStateTouches([...touches.current]);
+ });
- _removeTouch(touch) {
- this.touches.splice(this.touches.indexOf(touch), 1);
- this.setState({
- touches: [...this.touches]
- });
- }
/**
* Handles the double tap event
*
@@ -780,71 +696,57 @@ class ReactNativeZoomableView extends Component {
*
* @private
*/
-
-
- _handleDoubleTap(e) {
+ const _handleDoubleTap = useLatestCallback(e => {
const {
onDoubleTapBefore,
onDoubleTapAfter,
doubleTapZoomToCenter
- } = this.props;
- onDoubleTapBefore?.(e, this._getZoomableViewEventObject());
-
- const nextZoomStep = this._getNextZoomStep();
-
+ } = props;
+ onDoubleTapBefore?.(e, _getZoomableViewEventObject());
+ const nextZoomStep = _getNextZoomStep();
if (nextZoomStep == null) return;
- const {
- originalPageX,
- originalPageY
- } = this.state; // define new zoom position coordinates
+ // define new zoom position coordinates
const zoomPositionCoordinates = {
x: e.nativeEvent.pageX - originalPageX,
y: e.nativeEvent.pageY - originalPageY
- }; // if doubleTapZoomToCenter enabled -> always zoom to center instead
+ };
+ // if doubleTapZoomToCenter enabled -> always zoom to center instead
if (doubleTapZoomToCenter) {
zoomPositionCoordinates.x = 0;
zoomPositionCoordinates.y = 0;
}
-
- this.zoomTo(nextZoomStep, zoomPositionCoordinates);
- onDoubleTapAfter?.(e, this._getZoomableViewEventObject({
+ publicZoomTo(nextZoomStep, zoomPositionCoordinates);
+ onDoubleTapAfter?.(e, _getZoomableViewEventObject({
zoomLevel: nextZoomStep
}));
- }
+ });
+
/**
* Returns the next zoom step based on current step and zoomStep property.
* If we are zoomed all the way in -> return to initialzoom
*
* @returns {*}
*/
-
-
- _getNextZoomStep() {
+ const _getNextZoomStep = useLatestCallback(() => {
const {
zoomStep,
maxZoom,
initialZoom
- } = this.props;
- const {
- zoomLevel
- } = this;
+ } = props;
if (maxZoom == null) return;
-
- if (zoomLevel.toFixed(2) === maxZoom.toFixed(2)) {
+ if (zoomLevel.current.toFixed(2) === maxZoom.toFixed(2)) {
return initialZoom;
}
-
if (zoomStep == null) return;
- const nextZoomStep = zoomLevel * (1 + zoomStep);
-
+ const nextZoomStep = zoomLevel.current * (1 + zoomStep);
if (nextZoomStep > maxZoom) {
return maxZoom;
}
-
return nextZoomStep;
- }
+ });
+
/**
* Zooms to a specific level. A "zoom center" can be provided, which specifies
* the point that will remain in the same position on the screen after the zoom.
@@ -854,42 +756,42 @@ class ReactNativeZoomableView extends Component {
* @param newZoomLevel
* @param zoomCenter - If not supplied, the container's center is the zoom center
*/
+ const publicZoomTo = useLatestCallback((newZoomLevel, zoomCenter) => {
+ if (!props.zoomEnabled) return false;
+ if (props.maxZoom && newZoomLevel > props.maxZoom) return false;
+ if (props.minZoom && newZoomLevel < props.minZoom) return false;
+ props.onZoomBefore?.(null, null, _getZoomableViewEventObject());
-
- zoomTo(newZoomLevel, zoomCenter) {
- if (!this.props.zoomEnabled) return false;
- if (this.props.maxZoom && newZoomLevel > this.props.maxZoom) return false;
- if (this.props.minZoom && newZoomLevel < this.props.minZoom) return false;
- this.props.onZoomBefore?.(null, null, this._getZoomableViewEventObject()); // == Perform Pan Animation to preserve the zoom center while zooming ==
-
+ // == Perform Pan Animation to preserve the zoom center while zooming ==
let listenerId = '';
-
if (zoomCenter) {
// Calculates panAnim values based on changes in zoomAnim.
- let prevScale = this.zoomLevel; // Since zoomAnim is calculated in native driver,
+ let prevScale = zoomLevel.current;
+ // Since zoomAnim is calculated in native driver,
// it will jitter panAnim once in a while,
// because here panAnim is being calculated in js.
// However the jittering should mostly occur in simulator.
-
- listenerId = this.zoomAnim.addListener(({
+ listenerId = zoomAnim.current.addListener(({
value: newScale
}) => {
- this.panAnim.setValue({
- x: calcNewScaledOffsetForZoomCentering(this.offsetX, this.state.originalWidth, prevScale, newScale, zoomCenter.x),
- y: calcNewScaledOffsetForZoomCentering(this.offsetY, this.state.originalHeight, prevScale, newScale, zoomCenter.y)
+ panAnim.current.setValue({
+ x: calcNewScaledOffsetForZoomCentering(offsetX.current, originalWidth, prevScale, newScale, zoomCenter.x),
+ y: calcNewScaledOffsetForZoomCentering(offsetY.current, originalHeight, prevScale, newScale, zoomCenter.y)
});
prevScale = newScale;
});
- } // == Perform Zoom Animation ==
-
+ }
- getZoomToAnimation(this.zoomAnim, newZoomLevel).start(() => {
- this.zoomAnim.removeListener(listenerId);
- }); // == Zoom Animation Ends ==
+ // == Perform Zoom Animation ==
+ getZoomToAnimation(zoomAnim.current, newZoomLevel).start(() => {
+ zoomAnim.current.removeListener(listenerId);
+ });
+ // == Zoom Animation Ends ==
- this.props.onZoomAfter?.(null, null, this._getZoomableViewEventObject());
+ props.onZoomAfter?.(null, null, _getZoomableViewEventObject());
return true;
- }
+ });
+
/**
* Zooms in or out by a specified change level
* Use a positive number for `zoomLevelChange` to zoom in
@@ -901,13 +803,12 @@ class ReactNativeZoomableView extends Component {
*
* @return {bool}
*/
-
-
- zoomBy(zoomLevelChange) {
+ const publicZoomBy = useLatestCallback(zoomLevelChange => {
// if no zoom level Change given -> just use zoom step
- zoomLevelChange ||= this.props.zoomStep || 0;
- return this.zoomTo(this.zoomLevel + zoomLevelChange);
- }
+ zoomLevelChange ||= props.zoomStep || 0;
+ return publicZoomTo(zoomLevel.current + zoomLevelChange);
+ });
+
/**
* Moves the zoomed view to a specified position
* Returns a promise when finished
@@ -917,19 +818,13 @@ class ReactNativeZoomableView extends Component {
*
* @return {bool}
*/
-
-
- moveTo(newOffsetX, newOffsetY) {
- const {
- originalWidth,
- originalHeight
- } = this.state;
+ const publicMoveTo = useLatestCallback((newOffsetX, newOffsetY) => {
if (!originalWidth || !originalHeight) return;
- const offsetX = (newOffsetX - originalWidth / 2) / this.zoomLevel;
- const offsetY = (newOffsetY - originalHeight / 2) / this.zoomLevel;
+ const offsetX = (newOffsetX - originalWidth / 2) / zoomLevel.current;
+ const offsetY = (newOffsetY - originalHeight / 2) / zoomLevel.current;
+ _setNewOffsetPosition(-offsetX, -offsetY);
+ });
- this._setNewOffsetPosition(-offsetX, -offsetY);
- }
/**
* Moves the zoomed view by a certain amount.
*
@@ -940,81 +835,75 @@ class ReactNativeZoomableView extends Component {
*
* @return {bool}
*/
-
-
- moveBy(offsetChangeX, offsetChangeY) {
- const offsetX = (this.offsetX * this.zoomLevel - offsetChangeX) / this.zoomLevel;
- const offsetY = (this.offsetY * this.zoomLevel - offsetChangeY) / this.zoomLevel;
-
- this._setNewOffsetPosition(offsetX, offsetY);
- }
-
- render() {
- const {
- staticPinIcon,
- children,
- visualTouchFeedbackEnabled,
- doubleTapDelay,
- staticPinPosition,
- onStaticPinLongPress,
- onStaticPinPress,
- pinProps
- } = this.props;
- const {
- pinSize,
- touches,
- debugPoints = []
- } = this.state;
- return /*#__PURE__*/_jsxs(View, {
- style: styles.container,
- ...this.gestureHandlers.panHandlers,
- ref: this.zoomSubjectWrapperRef,
- onLayout: this.measureZoomSubject,
- children: [/*#__PURE__*/_jsx(Animated.View, {
- style: [styles.zoomSubject, this.props.style, {
- transform: [// In RN79, we need to split the scale into X and Y to avoid
- // the content getting pixelated when zooming in
- {
- scaleX: this.zoomAnim
- }, {
- scaleY: this.zoomAnim
- }, ...this.panAnim.getTranslateTransform()]
- }],
- children: children
- }), visualTouchFeedbackEnabled && touches?.map(touch => doubleTapDelay && /*#__PURE__*/_jsx(AnimatedTouchFeedback, {
- x: touch.x,
- y: touch.y,
- animationDuration: doubleTapDelay,
- onAnimationDone: () => {
- this._removeTouch(touch);
- }
- }, touch.id)), debugPoints.map(({
- x,
- y
- }, index) => {
- return /*#__PURE__*/_jsx(DebugTouchPoint, {
- x: x,
- y: y
- }, index);
- }), staticPinPosition && /*#__PURE__*/_jsx(StaticPin, {
- staticPinIcon: staticPinIcon,
- staticPinPosition: staticPinPosition,
- pinSize: pinSize,
- onPress: onStaticPinPress,
- onLongPress: onStaticPinLongPress,
- onParentMove: this._handlePanResponderMove,
- setPinSize: size => {
- this.setState({
- pinSize: size
- });
- },
- pinProps: pinProps
- })]
- });
- }
-
-}
-
+ const publicMoveBy = useLatestCallback((offsetChangeX, offsetChangeY) => {
+ const newOffsetX = (offsetX.current * zoomLevel.current - offsetChangeX) / zoomLevel.current;
+ const newOffsetY = (offsetY.current * zoomLevel.current - offsetChangeY) / zoomLevel.current;
+ _setNewOffsetPosition(newOffsetX, newOffsetY);
+ });
+ useImperativeHandle(ref, () => ({
+ zoomTo: publicZoomTo,
+ zoomBy: publicZoomBy,
+ moveTo: publicMoveTo,
+ moveBy: publicMoveBy,
+ moveStaticPinTo: publicMoveStaticPinTo,
+ get gestureStarted() {
+ return gestureStarted.current;
+ }
+ }));
+ const {
+ staticPinIcon,
+ children,
+ visualTouchFeedbackEnabled,
+ doubleTapDelay,
+ staticPinPosition,
+ onStaticPinLongPress,
+ onStaticPinPress,
+ pinProps
+ } = props;
+ return /*#__PURE__*/_jsxs(View, {
+ style: styles.container,
+ ...gestureHandlers.current?.panHandlers,
+ ref: zoomSubjectWrapperRef,
+ onLayout: measureZoomSubject,
+ children: [/*#__PURE__*/_jsx(Animated.View, {
+ style: [styles.zoomSubject, props.style, {
+ transform: [
+ // In RN79, we need to split the scale into X and Y to avoid
+ // the content getting pixelated when zooming in
+ {
+ scaleX: zoomAnim.current
+ }, {
+ scaleY: zoomAnim.current
+ }, ...panAnim.current.getTranslateTransform()]
+ }],
+ children: children
+ }), visualTouchFeedbackEnabled && stateTouches.map(touch => doubleTapDelay && /*#__PURE__*/_jsx(AnimatedTouchFeedback, {
+ x: touch.x,
+ y: touch.y,
+ animationDuration: doubleTapDelay,
+ onAnimationDone: () => {
+ _removeTouch(touch);
+ }
+ }, touch.id)), debugPoints.map(({
+ x,
+ y
+ }, index) => {
+ return /*#__PURE__*/_jsx(DebugTouchPoint, {
+ x: x,
+ y: y
+ }, index);
+ }), staticPinPosition && /*#__PURE__*/_jsx(StaticPin, {
+ staticPinIcon: staticPinIcon,
+ staticPinPosition: staticPinPosition,
+ pinSize: pinSize,
+ onPress: onStaticPinPress,
+ onLongPress: onStaticPinLongPress,
+ onParentMove: _handlePanResponderMove,
+ setPinSize: setPinSize,
+ pinProps: pinProps
+ })]
+ });
+};
const styles = StyleSheet.create({
container: {
alignItems: 'center',
diff --git a/lib/module/ReactNativeZoomableView.js.map b/lib/module/ReactNativeZoomableView.js.map
index 1af51cb..4c655bd 100644
--- a/lib/module/ReactNativeZoomableView.js.map
+++ b/lib/module/ReactNativeZoomableView.js.map
@@ -1 +1 @@
-{"version":3,"sources":["ReactNativeZoomableView.tsx"],"names":["debounce","React","Component","createRef","Animated","PanResponder","StyleSheet","View","getZoomToAnimation","AnimatedTouchFeedback","StaticPin","DebugTouchPoint","calcGestureCenterPoint","calcGestureTouchDistance","calcNewScaledOffsetForZoomCentering","viewportPositionToImagePosition","initialState","originalWidth","originalHeight","originalPageX","originalPageY","originalX","originalY","pinSize","width","height","ReactNativeZoomableView","defaultProps","zoomEnabled","panEnabled","initialZoom","initialOffsetX","initialOffsetY","maxZoom","minZoom","pinchToZoomInSensitivity","pinchToZoomOutSensitivity","movementSensibility","doubleTapDelay","zoomStep","onLongPress","longPressDuration","contentWidth","undefined","contentHeight","visualTouchFeedbackEnabled","staticPinPosition","staticPinIcon","onStaticPinPositionChange","onStaticPinPositionMove","disablePanOnInitialZoom","panAnim","ValueXY","x","y","zoomAnim","Value","offsetX","offsetY","zoomLevel","lastGestureCenterPosition","lastGestureTouchDistance","_gestureStarted","gestureStarted","v","longPressTimeout","touches","constructor","props","state","gestureHandlers","create","onStartShouldSetPanResponder","_handleStartShouldSetPanResponder","onPanResponderGrant","_handlePanResponderGrant","onPanResponderMove","_handlePanResponderMove","onPanResponderRelease","_handlePanResponderEnd","onPanResponderTerminate","evt","gestureState","_getZoomableViewEventObject","onPanResponderTerminationRequest","onShouldBlockNativeResponder","onStartShouldSetPanResponderCapture","onMoveShouldSetPanResponderCapture","zoomSubjectWrapperRef","zoomAnimatedValue","panAnimatedValueXY","setValue","addListener","value","gestureType","componentDidUpdate","prevProps","prevState","onTransformInvocationInitialized","_invokeOnTransform","successful","currState","originalMeasurementsChanged","staticPinPositionChanged","layout","onLayout","nativeEvent","componentDidMount","measureZoomSubject","measureZoomSubjectInterval","setInterval","componentWillUnmount","clearInterval","debouncedOnStaticPinPositionChange","position","zoomableViewEvent","_staticPinPosition","onTransform","overwriteObj","requestAnimationFrame","setTimeout","current","measure","pageX","pageY","setState","e","persist","stopAnimation","_resolveAndHandleTap","debugPoints","clearTimeout","onPanResponderEnd","onZoomEnd","onShiftingEnd","_updateStaticPin","numberActiveTouches","_handlePinching","Math","abs","dx","dy","isShiftGesture","_handleShifting","distance","onZoomBefore","zoomGrowthFromLastGestureState","pinchToZoomSensitivity","deltaGrowth","deltaGrowthAdjustedBySensitivity","newZoomLevel","gestureCenterPoint","zoomCenter","debug","_setPinchDebugPoints","oldOffsetX","oldOffsetY","oldScale","newScale","offsetShift","_calcOffsetShiftSinceLastGestureState","onZoomAfter","gestureResponderEvent","points","shift","shiftX","shiftY","moveX","moveY","_setNewOffsetPosition","newOffsetX","newOffsetY","onShiftingBefore","onShiftingAfter","now","Date","doubleTapFirstTapReleaseTimestamp","doubleTapFirstTap","_addTouch","id","toString","isSecondTap","singleTapTimeoutId","_handleDoubleTap","tapX","tapY","timing","toValue","useNativeDriver","duration","start","onSingleTap","moveStaticPinTo","pinX","pinY","viewportPosition","imageSize","zoomableEvent","touch","push","_removeTouch","splice","indexOf","onDoubleTapBefore","onDoubleTapAfter","doubleTapZoomToCenter","nextZoomStep","_getNextZoomStep","zoomPositionCoordinates","zoomTo","toFixed","listenerId","prevScale","removeListener","zoomBy","zoomLevelChange","moveTo","moveBy","offsetChangeX","offsetChangeY","render","children","onStaticPinLongPress","onStaticPinPress","pinProps","styles","container","panHandlers","zoomSubject","style","transform","scaleX","scaleY","getTranslateTransform","map","index","size","alignItems","flex","justifyContent","overflow"],"mappings":";;AAAA,SAASA,QAAT,QAAyB,QAAzB;AACA,OAAOC,KAAP,IAAgBC,SAAhB,EAA2BC,SAA3B,QAAuD,OAAvD;AACA,SACEC,QADF,EAGEC,YAHF,EAOEC,UAPF,EAQEC,IARF,QASO,cATP;AAWA,SAASC,kBAAT,QAAmC,cAAnC;AACA,SAASC,qBAAT,QAAsC,cAAtC;AACA,SAASC,SAAT,QAA0B,wBAA1B;AACA,SAASC,eAAT,QAAgC,eAAhC;AACA,SACEC,sBADF,EAEEC,wBAFF,EAGEC,mCAHF,QAIO,UAJP;AAKA,SAASC,+BAAT,QAAgD,+BAAhD;;AAUA,MAAMC,YAA0C,GAAG;AACjDC,EAAAA,aAAa,EAAE,CADkC;AAEjDC,EAAAA,cAAc,EAAE,CAFiC;AAGjDC,EAAAA,aAAa,EAAE,CAHkC;AAIjDC,EAAAA,aAAa,EAAE,CAJkC;AAKjDC,EAAAA,SAAS,EAAE,CALsC;AAMjDC,EAAAA,SAAS,EAAE,CANsC;AAOjDC,EAAAA,OAAO,EAAE;AAAEC,IAAAA,KAAK,EAAE,CAAT;AAAYC,IAAAA,MAAM,EAAE;AAApB;AAPwC,CAAnD;;AAUA,MAAMC,uBAAN,SAAsCxB,SAAtC,CAGE;AAKmB,SAAZyB,YAAY,GAAG;AACpBC,IAAAA,WAAW,EAAE,IADO;AAEpBC,IAAAA,UAAU,EAAE,IAFQ;AAGpBC,IAAAA,WAAW,EAAE,CAHO;AAIpBC,IAAAA,cAAc,EAAE,CAJI;AAKpBC,IAAAA,cAAc,EAAE,CALI;AAMpBC,IAAAA,OAAO,EAAE,GANW;AAOpBC,IAAAA,OAAO,EAAE,GAPW;AAQpBC,IAAAA,wBAAwB,EAAE,CARN;AASpBC,IAAAA,yBAAyB,EAAE,CATP;AAUpBC,IAAAA,mBAAmB,EAAE,CAVD;AAWpBC,IAAAA,cAAc,EAAE,GAXI;AAYpBC,IAAAA,QAAQ,EAAE,GAZU;AAapBC,IAAAA,WAAW,EAAE,IAbO;AAcpBC,IAAAA,iBAAiB,EAAE,GAdC;AAepBC,IAAAA,YAAY,EAAEC,SAfM;AAgBpBC,IAAAA,aAAa,EAAED,SAhBK;AAiBpBE,IAAAA,0BAA0B,EAAE,IAjBR;AAkBpBC,IAAAA,iBAAiB,EAAEH,SAlBC;AAmBpBI,IAAAA,aAAa,EAAEJ,SAnBK;AAoBpBK,IAAAA,yBAAyB,EAAEL,SApBP;AAqBpBM,IAAAA,uBAAuB,EAAEN,SArBL;AAsBpBO,IAAAA,uBAAuB,EAAE;AAtBL,GAAH;AAyBXC,EAAAA,OAAO,GAAG,IAAI/C,QAAQ,CAACgD,OAAb,CAAqB;AAAEC,IAAAA,CAAC,EAAE,CAAL;AAAQC,IAAAA,CAAC,EAAE;AAAX,GAArB,CAAH;AACEC,EAAAA,QAAQ,GAAG,IAAInD,QAAQ,CAACoD,KAAb,CAAmB,CAAnB,CAAH;AAEjBC,EAAAA,OAAO,GAAG,CAAH;AACPC,EAAAA,OAAO,GAAG,CAAH;AAEPC,EAAAA,SAAS,GAAG,CAAH;AACTC,EAAAA,yBAAyB,GAAoC,IAApC;AACzBC,EAAAA,wBAAwB,GAAkB,IAAlB;AAGxBC,EAAAA,eAAe,GAAG,KAAH;;AACG,MAAdC,cAAc,CAACC,CAAD,EAAa;AACrC,SAAKF,eAAL,GAAuBE,CAAvB;AACD;;AAEwB,MAAdD,cAAc,GAAG;AAC1B,WAAO,KAAKD,eAAZ;AACD;AAED;AACF;AACA;AACA;;;AACUG,EAAAA,gBAAgB,GAA0B,IAA1B;AAGhBC,EAAAA,OAAO,GAAiB,EAAjB;;AAIfC,EAAAA,WAAW,CAACC,KAAD,EAAsC;AAC/C,UAAMA,KAAN,EAD+C,CAE/C;AACA;AACA;;AACA,SAAKC,KAAL,GAAa,EAAE,GAAGrD;AAAL,KAAb;AAEA,SAAKsD,eAAL,GAAuBjE,YAAY,CAACkE,MAAb,CAAoB;AACzCC,MAAAA,4BAA4B,EAAE,KAAKC,iCADM;AAEzCC,MAAAA,mBAAmB,EAAE,KAAKC,wBAFe;AAGzCC,MAAAA,kBAAkB,EAAE,KAAKC,uBAHgB;AAIzCC,MAAAA,qBAAqB,EAAE,KAAKC,sBAJa;AAKzCC,MAAAA,uBAAuB,EAAE,CAACC,GAAD,EAAMC,YAAN,KAAuB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,aAAKH,sBAAL,CAA4BE,GAA5B,EAAiCC,YAAjC;;AACA,aAAKd,KAAL,CAAWY,uBAAX,GACEC,GADF,EAEEC,YAFF,EAGE,KAAKC,2BAAL,EAHF;AAKD,OAlBwC;AAmBzCC,MAAAA,gCAAgC,EAAE,CAACH,GAAD,EAAMC,YAAN,KAChC,CAAC,CAAC,KAAKd,KAAL,CAAWgB,gCAAX,GACAH,GADA,EAEAC,YAFA,EAGA,KAAKC,2BAAL,EAHA,CApBqC;AAyBzC;AACAE,MAAAA,4BAA4B,EAAE,CAACJ,GAAD,EAAMC,YAAN,KAC5B,KAAKd,KAAL,CAAWiB,4BAAX,GACEJ,GADF,EAEEC,YAFF,EAGE,KAAKC,2BAAL,EAHF,KAIK,IA/BkC;AAgCzCG,MAAAA,mCAAmC,EAAE,CAACL,GAAD,EAAMC,YAAN,KACnC,CAAC,CAAC,KAAKd,KAAL,CAAWkB,mCAAX,GAAiDL,GAAjD,EAAsDC,YAAtD,CAjCqC;AAkCzCK,MAAAA,kCAAkC,EAAE,CAACN,GAAD,EAAMC,YAAN,KAClC,CAAC,CAAC,KAAKd,KAAL,CAAWmB,kCAAX,GAAgDN,GAAhD,EAAqDC,YAArD;AAnCqC,KAApB,CAAvB;AAsCA,SAAKM,qBAAL,gBAA6BrF,SAAS,EAAtC;AAEA,QAAI,KAAKiE,KAAL,CAAWqB,iBAAf,EACE,KAAKlC,QAAL,GAAgB,KAAKa,KAAL,CAAWqB,iBAA3B;AACF,QAAI,KAAKrB,KAAL,CAAWsB,kBAAf,EACE,KAAKvC,OAAL,GAAe,KAAKiB,KAAL,CAAWsB,kBAA1B;AAEF,QAAI,KAAKtB,KAAL,CAAWtC,WAAf,EAA4B,KAAK6B,SAAL,GAAiB,KAAKS,KAAL,CAAWtC,WAA5B;AAC5B,QAAI,KAAKsC,KAAL,CAAWrC,cAAX,IAA6B,IAAjC,EACE,KAAK0B,OAAL,GAAe,KAAKW,KAAL,CAAWrC,cAA1B;AACF,QAAI,KAAKqC,KAAL,CAAWpC,cAAX,IAA6B,IAAjC,EACE,KAAK0B,OAAL,GAAe,KAAKU,KAAL,CAAWpC,cAA1B;AAEF,SAAKmB,OAAL,CAAawC,QAAb,CAAsB;AAAEtC,MAAAA,CAAC,EAAE,KAAKI,OAAV;AAAmBH,MAAAA,CAAC,EAAE,KAAKI;AAA3B,KAAtB;AACA,SAAKH,QAAL,CAAcoC,QAAd,CAAuB,KAAKhC,SAA5B;AACA,SAAKR,OAAL,CAAayC,WAAb,CAAyB,CAAC;AAAEvC,MAAAA,CAAF;AAAKC,MAAAA;AAAL,KAAD,KAAc;AACrC,WAAKG,OAAL,GAAeJ,CAAf;AACA,WAAKK,OAAL,GAAeJ,CAAf;AACD,KAHD;AAIA,SAAKC,QAAL,CAAcqC,WAAd,CAA0B,CAAC;AAAEC,MAAAA;AAAF,KAAD,KAAe;AACvC,WAAKlC,SAAL,GAAiBkC,KAAjB;AACD,KAFD;AAIA,SAAKhC,wBAAL,GAAgC,GAAhC;AAEA,SAAKiC,WAAL,GAAmB,IAAnB;AACD;;AAEDC,EAAAA,kBAAkB,CAChBC,SADgB,EAEhBC,SAFgB,EAGhB;AACA,UAAM;AAAErE,MAAAA,WAAF;AAAeE,MAAAA;AAAf,QAA+B,KAAKsC,KAA1C;;AACA,QAAI4B,SAAS,CAACpE,WAAV,IAAyB,CAACA,WAA1B,IAAyCE,WAA7C,EAA0D;AACxD,WAAK6B,SAAL,GAAiB7B,WAAjB;AACA,WAAKyB,QAAL,CAAcoC,QAAd,CAAuB,KAAKhC,SAA5B;AACD;;AACD,QACE,CAAC,KAAKuC,gCAAN,IACA,KAAKC,kBAAL,GAA0BC,UAF5B,EAGE;AACA,WAAKjD,OAAL,CAAayC,WAAb,CAAyB,MAAM,KAAKO,kBAAL,EAA/B;AACA,WAAK5C,QAAL,CAAcqC,WAAd,CAA0B,MAAM,KAAKO,kBAAL,EAAhC;AACA,WAAKD,gCAAL,GAAwC,IAAxC;AACD;;AAED,UAAMG,SAAS,GAAG,KAAKhC,KAAvB;AACA,UAAMiC,2BAA2B,GAC/BD,SAAS,CAACnF,cAAV,KAA6B+E,SAAS,CAAC/E,cAAvC,IACAmF,SAAS,CAACpF,aAAV,KAA4BgF,SAAS,CAAChF,aADtC,IAEAoF,SAAS,CAAClF,aAAV,KAA4B8E,SAAS,CAAC9E,aAFtC,IAGAkF,SAAS,CAACjF,aAAV,KAA4B6E,SAAS,CAAC7E,aAHtC,IAIAiF,SAAS,CAAChF,SAAV,KAAwB4E,SAAS,CAAC5E,SAJlC,IAKAgF,SAAS,CAAC/E,SAAV,KAAwB2E,SAAS,CAAC3E,SANpC;AAQA,UAAMiF,wBAAwB,GAC5BP,SAAS,CAAClD,iBAAV,EAA6BO,CAA7B,KAAmC,KAAKe,KAAL,CAAWtB,iBAAX,EAA8BO,CAAjE,IACA2C,SAAS,CAAClD,iBAAV,EAA6BQ,CAA7B,KAAmC,KAAKc,KAAL,CAAWtB,iBAAX,EAA8BQ,CAFnE,CAxBA,CA4BA;AACA;AACA;;AACA,QAAIgD,2BAAJ,EAAiC;AAC/B,YAAME,MAAM,GAAG;AACbhF,QAAAA,KAAK,EAAE6E,SAAS,CAACpF,aADJ;AAEbQ,QAAAA,MAAM,EAAE4E,SAAS,CAACnF,cAFL;AAGbmC,QAAAA,CAAC,EAAEgD,SAAS,CAAChF,SAHA;AAIbiC,QAAAA,CAAC,EAAE+C,SAAS,CAAC/E;AAJA,OAAf;AAMA,WAAK8C,KAAL,CAAWqC,QAAX,GAAsB;AAAEC,QAAAA,WAAW,EAAE;AAAEF,UAAAA;AAAF;AAAf,OAAtB;AACD;;AAED,QACE,KAAKN,gCAAL,KACCI,2BAA2B,IAAIC,wBADhC,CADF,EAGE;AACA,WAAKJ,kBAAL;AACD;AACF;;AAEDQ,EAAAA,iBAAiB,GAAG;AAClB,SAAKC,kBAAL,GADkB,CAElB;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAAKC,0BAAL,GAAkCC,WAAW,CAAC,KAAKF,kBAAN,EAA0B,GAA1B,CAA7C;AACD;;AAEDG,EAAAA,oBAAoB,GAAG;AACrB,SAAKF,0BAAL,IACEG,aAAa,CAAC,KAAKH,0BAAN,CADf;AAED;;AAEDI,EAAAA,kCAAkC,GAAGjH,QAAQ,CAC1CkH,QAAD,IAAqB,KAAK9C,KAAL,CAAWpB,yBAAX,GAAuCkE,QAAvC,CADsB,EAE3C,GAF2C,CAAX;AAKlC;AACF;AACA;AACA;;AACEf,EAAAA,kBAAkB,GAAG;AACnB,UAAMgB,iBAAiB,GAAG,KAAKhC,2BAAL,EAA1B;;AACA,UAAM+B,QAAQ,GAAG,KAAKE,kBAAL,EAAjB;;AAEA,QAAI,CAACD,iBAAiB,CAAClG,aAAnB,IAAoC,CAACkG,iBAAiB,CAACjG,cAA3D,EACE,OAAO;AAAEkF,MAAAA,UAAU,EAAE;AAAd,KAAP;AAEF,SAAKhC,KAAL,CAAWiD,WAAX,GAAyBF,iBAAzB;;AAEA,QAAID,QAAJ,EAAc;AACZ,WAAK9C,KAAL,CAAWnB,uBAAX,GAAqCiE,QAArC;AACA,WAAKD,kCAAL,CAAwCC,QAAxC;AACD;;AAED,WAAO;AAAEd,MAAAA,UAAU,EAAE;AAAd,KAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;;;AACEjB,EAAAA,2BAA2B,CAACmC,YAAY,GAAG,EAAhB,EAAuC;AAChE,WAAO;AACL3D,MAAAA,SAAS,EAAE,KAAKA,SADX;AAELF,MAAAA,OAAO,EAAE,KAAKA,OAFT;AAGLC,MAAAA,OAAO,EAAE,KAAKA,OAHT;AAILxC,MAAAA,cAAc,EAAE,KAAKmD,KAAL,CAAWnD,cAJtB;AAKLD,MAAAA,aAAa,EAAE,KAAKoD,KAAL,CAAWpD,aALrB;AAMLE,MAAAA,aAAa,EAAE,KAAKkD,KAAL,CAAWlD,aANrB;AAOLC,MAAAA,aAAa,EAAE,KAAKiD,KAAL,CAAWjD,aAPrB;AAQL,SAAGkG;AARE,KAAP;AAUD;AAED;AACF;AACA;AACA;AACA;AACA;;;AACUV,EAAAA,kBAAkB,GAAG,MAAM;AACjC;AACAW,IAAAA,qBAAqB,CAAC,MAAM;AAC1B;AACA;AACA;AACAC,MAAAA,UAAU,CAAC,MAAM;AACf;AACA;AACA;AACA;AACA;AACA,aAAKhC,qBAAL,CAA2BiC,OAA3B,EAAoCC,OAApC,CACE,CAACrE,CAAD,EAAIC,CAAJ,EAAO9B,KAAP,EAAcC,MAAd,EAAsBkG,KAAtB,EAA6BC,KAA7B,KAAuC;AACrC;AACA;AACA;AACA,cAAI,CAACD,KAAD,IAAU,CAACC,KAAX,IAAoB,CAACpG,KAArB,IAA8B,CAACC,MAAnC,EAA2C,OAJN,CAMrC;AACA;;AACA,cACE,KAAK4C,KAAL,CAAWhD,SAAX,KAAyBgC,CAAzB,IACA,KAAKgB,KAAL,CAAW/C,SAAX,KAAyBgC,CADzB,IAEA,KAAKe,KAAL,CAAWpD,aAAX,KAA6BO,KAF7B,IAGA,KAAK6C,KAAL,CAAWnD,cAAX,KAA8BO,MAH9B,IAIA,KAAK4C,KAAL,CAAWlD,aAAX,KAA6BwG,KAJ7B,IAKA,KAAKtD,KAAL,CAAWjD,aAAX,KAA6BwG,KAN/B,EAOE;AACA;AACD;;AAED,eAAKC,QAAL,CAAc;AACZxG,YAAAA,SAAS,EAAEgC,CADC;AAEZ/B,YAAAA,SAAS,EAAEgC,CAFC;AAGZrC,YAAAA,aAAa,EAAEO,KAHH;AAIZN,YAAAA,cAAc,EAAEO,MAJJ;AAKZN,YAAAA,aAAa,EAAEwG,KALH;AAMZvG,YAAAA,aAAa,EAAEwG;AANH,WAAd;AAQD,SA5BH;AA8BD,OApCS,CAAV;AAqCD,KAzCoB,CAArB;AA0CD,GA5CyB;AA8C1B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACEnD,EAAAA,iCAAiC,GAAG,CAClCqD,CADkC,EAElC5C,YAFkC,KAG/B;AACH,QAAI,KAAKd,KAAL,CAAWI,4BAAf,EAA6C;AAC3C,WAAKJ,KAAL,CAAWI,4BAAX,CACEsD,CADF,EAEE5C,YAFF,EAGE,KAAKC,2BAAL,EAHF,EAIE,KAJF;AAMD,KARE,CAUH;AACA;AACA;AACA;;;AACA,WAAO,IAAP;AACD,GAlBgC;AAoBjC;AACF;AACA;AACA;AACA;AACA;AACA;;AACER,EAAAA,wBAAwB,GAEpB,CAACmD,CAAD,EAAI5C,YAAJ,KAAqB;AACvB,QAAI,KAAKd,KAAL,CAAW5B,WAAf,EAA4B;AAC1BsF,MAAAA,CAAC,CAACC,OAAF;AACA,WAAK9D,gBAAL,GAAwBuD,UAAU,CAAC,MAAM;AACvC,aAAKpD,KAAL,CAAW5B,WAAX,GACEsF,CADF,EAEE5C,YAFF,EAGE,KAAKC,2BAAL,EAHF;AAKA,aAAKlB,gBAAL,GAAwB,IAAxB;AACD,OAPiC,EAO/B,KAAKG,KAAL,CAAW3B,iBAPoB,CAAlC;AAQD;;AAED,SAAK2B,KAAL,CAAWM,mBAAX,GACEoD,CADF,EAEE5C,YAFF,EAGE,KAAKC,2BAAL,EAHF;AAMA,SAAKhC,OAAL,CAAa6E,aAAb;AACA,SAAKzE,QAAL,CAAcyE,aAAd;AACA,SAAKjE,cAAL,GAAsB,IAAtB;AACD,GAxBuB;AA0BxB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;AACEgB,EAAAA,sBAAsB,GAElB,CAAC+C,CAAD,EAAI5C,YAAJ,KAAqB;AACvB,QAAI,CAAC,KAAKY,WAAV,EAAuB;AACrB,WAAKmC,oBAAL,CAA0BH,CAA1B;AACD;;AAED,SAAKD,QAAL,CAAc;AAAEK,MAAAA,WAAW,EAAE;AAAf,KAAd;AAEA,SAAKtE,yBAAL,GAAiC,IAAjC;;AAEA,QAAI,KAAKK,gBAAT,EAA2B;AACzBkE,MAAAA,YAAY,CAAC,KAAKlE,gBAAN,CAAZ;AACA,WAAKA,gBAAL,GAAwB,IAAxB;AACD;;AAED,SAAKG,KAAL,CAAWgE,iBAAX,GACEN,CADF,EAEE5C,YAFF,EAGE,KAAKC,2BAAL,EAHF;;AAMA,QAAI,KAAKW,WAAL,KAAqB,OAAzB,EAAkC;AAChC,WAAK1B,KAAL,CAAWiE,SAAX,GACEP,CADF,EAEE5C,YAFF,EAGE,KAAKC,2BAAL,EAHF;AAKD,KAND,MAMO,IAAI,KAAKW,WAAL,KAAqB,OAAzB,EAAkC;AACvC,WAAK1B,KAAL,CAAWkE,aAAX,GACER,CADF,EAEE5C,YAFF,EAGE,KAAKC,2BAAL,EAHF;AAKD;;AAED,QAAI,KAAKf,KAAL,CAAWtB,iBAAf,EAAkC;AAChC,WAAKyF,gBAAL;AACD;;AAED,SAAKzC,WAAL,GAAmB,IAAnB;AACA,SAAK/B,cAAL,GAAsB,KAAtB;AACD,GA1CqB;AA4CtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;AACEc,EAAAA,uBAAuB,GAAG,CACxBiD,CADwB,EAExB5C,YAFwB,KAGrB;AACH,QAAI,KAAKd,KAAL,CAAWQ,kBAAf,EAAmC;AACjC,UACE,KAAKR,KAAL,CAAWQ,kBAAX,CACEkD,CADF,EAEE5C,YAFF,EAGE,KAAKC,2BAAL,EAHF,CADF,EAME;AACA,eAAO,KAAP;AACD;AACF,KAXE,CAaH;AACA;;;AACA,QAAID,YAAY,CAACsD,mBAAb,IAAoC,CAAxC,EAA2C;AACzC,UAAI,CAAC,KAAKzE,cAAV,EAA0B;AACxB,aAAKY,wBAAL,CAA8BmD,CAA9B,EAAiC5C,YAAjC;AACD;AACF,KAJD,MAIO;AACL,UAAI,KAAKnB,cAAT,EAAyB;AACvB,aAAKgB,sBAAL,CAA4B+C,CAA5B,EAA+B5C,YAA/B;AACD;;AACD,aAAO,IAAP;AACD;;AAED,QAAIA,YAAY,CAACsD,mBAAb,KAAqC,CAAzC,EAA4C;AAC1C,UAAI,KAAKvE,gBAAT,EAA2B;AACzBkE,QAAAA,YAAY,CAAC,KAAKlE,gBAAN,CAAZ;AACA,aAAKA,gBAAL,GAAwB,IAAxB;AACD,OAJyC,CAM1C;;;AACA,UAAI,KAAK6B,WAAL,KAAqB,OAAzB,EAAkC;AAChC,aAAKlC,yBAAL,GAAiChD,sBAAsB,CACrDkH,CADqD,EAErD5C,YAFqD,CAAvD;AAIA,aAAKrB,wBAAL,GAAgChD,wBAAwB,CACtDiH,CADsD,EAEtD5C,YAFsD,CAAxD;AAID;;AACD,WAAKY,WAAL,GAAmB,OAAnB;;AACA,WAAK2C,eAAL,CAAqBX,CAArB,EAAwB5C,YAAxB;AACD,KAnBD,MAmBO,IAAIA,YAAY,CAACsD,mBAAb,KAAqC,CAAzC,EAA4C;AACjD,UACE,KAAKvE,gBAAL,KACCyE,IAAI,CAACC,GAAL,CAASzD,YAAY,CAAC0D,EAAtB,IAA4B,CAA5B,IAAiCF,IAAI,CAACC,GAAL,CAASzD,YAAY,CAAC2D,EAAtB,IAA4B,CAD9D,CADF,EAGE;AACAV,QAAAA,YAAY,CAAC,KAAKlE,gBAAN,CAAZ;AACA,aAAKA,gBAAL,GAAwB,IAAxB;AACD,OAPgD,CAQjD;;;AACA,UAAI,KAAK6B,WAAL,KAAqB,OAAzB,EAAkC;AAChC,aAAKlC,yBAAL,GAAiChD,sBAAsB,CACrDkH,CADqD,EAErD5C,YAFqD,CAAvD;AAID;;AAED,YAAM;AAAE0D,QAAAA,EAAF;AAAMC,QAAAA;AAAN,UAAa3D,YAAnB;AACA,YAAM4D,cAAc,GAAGJ,IAAI,CAACC,GAAL,CAASC,EAAT,IAAe,CAAf,IAAoBF,IAAI,CAACC,GAAL,CAASE,EAAT,IAAe,CAA1D;;AACA,UAAIC,cAAJ,EAAoB;AAClB,aAAKhD,WAAL,GAAmB,OAAnB;;AACA,aAAKiD,eAAL,CAAqB7D,YAArB;AACD;AACF;AACF,GAvEsB;AAyEvB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;AACEuD,EAAAA,eAAe,CACbX,CADa,EAEb5C,YAFa,EAGb;AACA,QAAI,CAAC,KAAKd,KAAL,CAAWxC,WAAhB,EAA6B;AAE7B,UAAM;AACJK,MAAAA,OADI;AAEJC,MAAAA,OAFI;AAGJC,MAAAA,wBAHI;AAIJC,MAAAA;AAJI,QAKF,KAAKgC,KALT;AAOA,UAAM4E,QAAQ,GAAGnI,wBAAwB,CAACiH,CAAD,EAAI5C,YAAJ,CAAzC;;AAEA,QACE,KAAKd,KAAL,CAAW6E,YAAX,IACA,KAAK7E,KAAL,CAAW6E,YAAX,CACEnB,CADF,EAEE5C,YAFF,EAGE,KAAKC,2BAAL,EAHF,CAFF,EAOE;AACA;AACD;;AAED,QAAI,CAAC6D,QAAL,EAAe;AACf,QAAI,CAAC,KAAKnF,wBAAV,EAAoC,OAxBpC,CA0BA;;AACA,UAAMqF,8BAA8B,GAClCF,QAAQ,GAAG,KAAKnF,wBADlB;AAEA,SAAKA,wBAAL,GAAgCmF,QAAhC;AAEA,UAAMG,sBAAsB,GAC1BD,8BAA8B,GAAG,CAAjC,GACI9G,yBADJ,GAEID,wBAHN;AAKA,QAAIgH,sBAAsB,IAAI,IAA9B,EAAoC;AACpC,UAAMC,WAAW,GAAGF,8BAA8B,GAAG,CAArD,CArCA,CAsCA;AACA;;AACA,UAAMG,gCAAgC,GACpCD,WAAW,IAAI,IAAKD,sBAAsB,GAAG,CAA1B,GAA+B,GAAvC,CADb;AAGA,QAAIG,YAAY,GAAG,KAAK3F,SAAL,IAAkB,IAAI0F,gCAAtB,CAAnB,CA3CA,CA6CA;;AACA,QAAIpH,OAAO,IAAI,IAAX,IAAmBqH,YAAY,GAAGrH,OAAtC,EAA+C;AAC7CqH,MAAAA,YAAY,GAAGrH,OAAf;AACD;;AAED,QAAIC,OAAO,IAAI,IAAX,IAAmBoH,YAAY,GAAGpH,OAAtC,EAA+C;AAC7CoH,MAAAA,YAAY,GAAGpH,OAAf;AACD;;AAED,UAAMqH,kBAAkB,GAAG3I,sBAAsB,CAACkH,CAAD,EAAI5C,YAAJ,CAAjD;AAEA,QAAI,CAACqE,kBAAL,EAAyB;AAEzB,QAAIC,UAAU,GAAG;AACfnG,MAAAA,CAAC,EAAEkG,kBAAkB,CAAClG,CAAnB,GAAuB,KAAKgB,KAAL,CAAWlD,aADtB;AAEfmC,MAAAA,CAAC,EAAEiG,kBAAkB,CAACjG,CAAnB,GAAuB,KAAKe,KAAL,CAAWjD;AAFtB,KAAjB;;AAKA,QAAI,KAAKgD,KAAL,CAAWtB,iBAAf,EAAkC;AAChC;AACA;AACA0G,MAAAA,UAAU,GAAG;AACXnG,QAAAA,CAAC,EAAE,KAAKe,KAAL,CAAWtB,iBAAX,CAA6BO,CADrB;AAEXC,QAAAA,CAAC,EAAE,KAAKc,KAAL,CAAWtB,iBAAX,CAA6BQ;AAFrB,OAAb;AAID,KAtED,CAwEA;;;AACA,SAAKc,KAAL,CAAWqF,KAAX,IAAoB,KAAKC,oBAAL,CAA0B5B,CAA1B,EAA6B0B,UAA7B,CAApB;AAEA,UAAM;AAAEtI,MAAAA,cAAF;AAAkBD,MAAAA;AAAlB,QAAoC,KAAKoD,KAA/C;AAEA,UAAMsF,UAAU,GAAG,KAAKlG,OAAxB;AACA,UAAMmG,UAAU,GAAG,KAAKlG,OAAxB;AACA,UAAMmG,QAAQ,GAAG,KAAKlG,SAAtB;AACA,UAAMmG,QAAQ,GAAGR,YAAjB;AAEA,QAAI,CAACpI,cAAD,IAAmB,CAACD,aAAxB,EAAuC;AAEvC,QAAIyC,OAAO,GAAG5C,mCAAmC,CAC/C8I,UAD+C,EAE/C1I,cAF+C,EAG/C2I,QAH+C,EAI/CC,QAJ+C,EAK/CN,UAAU,CAAClG,CALoC,CAAjD;AAOA,QAAIG,OAAO,GAAG3C,mCAAmC,CAC/C6I,UAD+C,EAE/C1I,aAF+C,EAG/C4I,QAH+C,EAI/CC,QAJ+C,EAK/CN,UAAU,CAACnG,CALoC,CAAjD;;AAQA,UAAM0G,WAAW,GACf,KAAKC,qCAAL,CAA2CT,kBAA3C,CADF;;AAEA,QAAIQ,WAAJ,EAAiB;AACftG,MAAAA,OAAO,IAAIsG,WAAW,CAAC1G,CAAvB;AACAK,MAAAA,OAAO,IAAIqG,WAAW,CAACzG,CAAvB;AACD;;AAED,SAAKG,OAAL,GAAeA,OAAf;AACA,SAAKC,OAAL,GAAeA,OAAf;AACA,SAAKC,SAAL,GAAiBmG,QAAjB;AAEA,SAAK3G,OAAL,CAAawC,QAAb,CAAsB;AAAEtC,MAAAA,CAAC,EAAE,KAAKI,OAAV;AAAmBH,MAAAA,CAAC,EAAE,KAAKI;AAA3B,KAAtB;AACA,SAAKH,QAAL,CAAcoC,QAAd,CAAuB,KAAKhC,SAA5B;AAEA,SAAKS,KAAL,CAAW6F,WAAX,GACEnC,CADF,EAEE5C,YAFF,EAGE,KAAKC,2BAAL,EAHF;AAKD;AAED;AACF;AACA;AACA;AACA;AACA;;;AACEuE,EAAAA,oBAAoB,CAClBQ,qBADkB,EAElBV,UAFkB,EAGlB,GAAGW,MAHe,EAIlB;AACA,UAAM;AAAEjG,MAAAA;AAAF,QAAcgG,qBAAqB,CAACxD,WAA1C;AACA,UAAM;AAAEtF,MAAAA,aAAF;AAAiBD,MAAAA;AAAjB,QAAmC,KAAKkD,KAA9C;AAEA,SAAKwD,QAAL,CAAc;AACZK,MAAAA,WAAW,EAAE,CACX;AACE7E,QAAAA,CAAC,EAAEa,OAAO,CAAC,CAAD,CAAP,CAAWyD,KAAX,GAAmBxG,aADxB;AAEEmC,QAAAA,CAAC,EAAEY,OAAO,CAAC,CAAD,CAAP,CAAW0D,KAAX,GAAmBxG;AAFxB,OADW,EAKX;AACEiC,QAAAA,CAAC,EAAEa,OAAO,CAAC,CAAD,CAAP,CAAWyD,KAAX,GAAmBxG,aADxB;AAEEmC,QAAAA,CAAC,EAAEY,OAAO,CAAC,CAAD,CAAP,CAAW0D,KAAX,GAAmBxG;AAFxB,OALW,EASXoI,UATW,EAUX,GAAGW,MAVQ;AADD,KAAd;AAcD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;;;AACEH,EAAAA,qCAAqC,CAACT,kBAAD,EAA4B;AAC/D,UAAM;AAAElH,MAAAA;AAAF,QAA0B,KAAK+B,KAArC;AAEA,QAAIgG,KAAK,GAAG,IAAZ;;AAEA,QAAI,KAAKxG,yBAAL,IAAkCvB,mBAAtC,EAA2D;AACzD,YAAMuG,EAAE,GAAGW,kBAAkB,CAAClG,CAAnB,GAAuB,KAAKO,yBAAL,CAA+BP,CAAjE;AACA,YAAMwF,EAAE,GAAGU,kBAAkB,CAACjG,CAAnB,GAAuB,KAAKM,yBAAL,CAA+BN,CAAjE;AAEA,YAAM+G,MAAM,GAAGzB,EAAE,GAAG,KAAKjF,SAAV,GAAsBtB,mBAArC;AACA,YAAMiI,MAAM,GAAGzB,EAAE,GAAG,KAAKlF,SAAV,GAAsBtB,mBAArC;AAEA+H,MAAAA,KAAK,GAAG;AACN/G,QAAAA,CAAC,EAAEgH,MADG;AAEN/G,QAAAA,CAAC,EAAEgH;AAFG,OAAR;AAID;;AAED,SAAK1G,yBAAL,GAAiC2F,kBAAjC;AAEA,WAAOa,KAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;;;AACErB,EAAAA,eAAe,CAAC7D,YAAD,EAAyC;AACtD;AACA,QACE,CAAC,KAAKd,KAAL,CAAWvC,UAAZ,IACC,KAAKuC,KAAL,CAAWlB,uBAAX,IACC,KAAKS,SAAL,KAAmB,KAAKS,KAAL,CAAWtC,WAHlC,EAIE;AACA;AACD;;AACD,UAAMsI,KAAK,GAAG,KAAKJ,qCAAL,CAA2C;AACvD3G,MAAAA,CAAC,EAAE6B,YAAY,CAACqF,KADuC;AAEvDjH,MAAAA,CAAC,EAAE4B,YAAY,CAACsF;AAFuC,KAA3C,CAAd;;AAIA,QAAI,CAACJ,KAAL,EAAY;AAEZ,UAAM3G,OAAO,GAAG,KAAKA,OAAL,GAAe2G,KAAK,CAAC/G,CAArC;AACA,UAAMK,OAAO,GAAG,KAAKA,OAAL,GAAe0G,KAAK,CAAC9G,CAArC;;AAEA,QACE,KAAKc,KAAL,CAAWqF,KAAX,IACA,KAAKpF,KAAL,CAAWlD,aADX,IAEA,KAAKkD,KAAL,CAAWjD,aAHb,EAIE;AACA,YAAMiC,CAAC,GAAG6B,YAAY,CAACqF,KAAb,GAAqB,KAAKlG,KAAL,CAAWlD,aAA1C;AACA,YAAMmC,CAAC,GAAG4B,YAAY,CAACsF,KAAb,GAAqB,KAAKnG,KAAL,CAAWjD,aAA1C;AACA,WAAKyG,QAAL,CAAc;AAAEK,QAAAA,WAAW,EAAE,CAAC;AAAE7E,UAAAA,CAAF;AAAKC,UAAAA;AAAL,SAAD;AAAf,OAAd;AACD;;AAED,SAAKmH,qBAAL,CAA2BhH,OAA3B,EAAoCC,OAApC;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;;;AACE+G,EAAAA,qBAAqB,CAACC,UAAD,EAAqBC,UAArB,EAAyC;AAC5D,UAAM;AAAEC,MAAAA,gBAAF;AAAoBC,MAAAA;AAApB,QAAwC,KAAKzG,KAAnD;;AAEA,QAAIwG,gBAAgB,GAAG,IAAH,EAAS,IAAT,EAAe,KAAKzF,2BAAL,EAAf,CAApB,EAAwE;AACtE;AACD;;AAED,SAAK1B,OAAL,GAAeiH,UAAf;AACA,SAAKhH,OAAL,GAAeiH,UAAf;AAEA,SAAKxH,OAAL,CAAawC,QAAb,CAAsB;AAAEtC,MAAAA,CAAC,EAAE,KAAKI,OAAV;AAAmBH,MAAAA,CAAC,EAAE,KAAKI;AAA3B,KAAtB;AACA,SAAKH,QAAL,CAAcoC,QAAd,CAAuB,KAAKhC,SAA5B;AAEAkH,IAAAA,eAAe,GAAG,IAAH,EAAS,IAAT,EAAe,KAAK1F,2BAAL,EAAf,CAAf;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACU8C,EAAAA,oBAAoB,GAAIH,CAAD,IAA8B;AAC3D,UAAMgD,GAAG,GAAGC,IAAI,CAACD,GAAL,EAAZ;;AACA,QACE,KAAKE,iCAAL,IACA,KAAK5G,KAAL,CAAW9B,cADX,IAEAwI,GAAG,GAAG,KAAKE,iCAAX,GAA+C,KAAK5G,KAAL,CAAW9B,cAH5D,EAIE;AACA,WAAK2I,iBAAL,IACE,KAAKC,SAAL,CAAe,EACb,GAAG,KAAKD,iBADK;AAEbE,QAAAA,EAAE,EAAEL,GAAG,CAACM,QAAJ,EAFS;AAGbC,QAAAA,WAAW,EAAE;AAHA,OAAf,CADF;AAMA,WAAKC,kBAAL,IAA2BnD,YAAY,CAAC,KAAKmD,kBAAN,CAAvC;AACA,aAAO,KAAKN,iCAAZ;AACA,aAAO,KAAKM,kBAAZ;AACA,aAAO,KAAKL,iBAAZ;;AACA,WAAKM,gBAAL,CAAsBzD,CAAtB;AACD,KAhBD,MAgBO;AACL,WAAKkD,iCAAL,GAAyCF,GAAzC;AACA,WAAKG,iBAAL,GAAyB;AACvBE,QAAAA,EAAE,EAAEL,GAAG,CAACM,QAAJ,EADmB;AAEvB/H,QAAAA,CAAC,EAAEyE,CAAC,CAACpB,WAAF,CAAciB,KAAd,GAAsB,KAAKtD,KAAL,CAAWlD,aAFb;AAGvBmC,QAAAA,CAAC,EAAEwE,CAAC,CAACpB,WAAF,CAAckB,KAAd,GAAsB,KAAKvD,KAAL,CAAWjD;AAHb,OAAzB;;AAKA,WAAK8J,SAAL,CAAe,KAAKD,iBAApB,EAPK,CASL;;;AACAnD,MAAAA,CAAC,CAACC,OAAF;AACA,WAAKuD,kBAAL,GAA0B9D,UAAU,CAAC,MAAM;AACzC,eAAO,KAAKwD,iCAAZ;AACA,eAAO,KAAKM,kBAAZ,CAFyC,CAIzC;;AACA,YAAI,KAAKlH,KAAL,CAAWtB,iBAAX,IAAgC,KAAKmI,iBAAzC,EAA4D;AAC1D,gBAAMO,IAAI,GACR,KAAKpH,KAAL,CAAWtB,iBAAX,CAA6BO,CAA7B,GAAiC,KAAK4H,iBAAL,CAAuB5H,CAD1D;AAEA,gBAAMoI,IAAI,GACR,KAAKrH,KAAL,CAAWtB,iBAAX,CAA6BQ,CAA7B,GAAiC,KAAK2H,iBAAL,CAAuB3H,CAD1D;AAGAlD,UAAAA,QAAQ,CAACsL,MAAT,CAAgB,KAAKvI,OAArB,EAA8B;AAC5BwI,YAAAA,OAAO,EAAE;AACPtI,cAAAA,CAAC,EAAE,KAAKI,OAAL,GAAe+H,IAAI,GAAG,KAAK7H,SADvB;AAEPL,cAAAA,CAAC,EAAE,KAAKI,OAAL,GAAe+H,IAAI,GAAG,KAAK9H;AAFvB,aADmB;AAK5BiI,YAAAA,eAAe,EAAE,IALW;AAM5BC,YAAAA,QAAQ,EAAE;AANkB,WAA9B,EAOGC,KAPH,CAOS,MAAM;AACb,iBAAKvD,gBAAL;AACD,WATD;AAUD;;AAED,aAAKnE,KAAL,CAAW2H,WAAX,GAAyBjE,CAAzB,EAA4B,KAAK3C,2BAAL,EAA5B;AACD,OAxBmC,EAwBjC,KAAKf,KAAL,CAAW9B,cAxBsB,CAApC;AAyBD;AACF,GAvD2B;AAyD5B0J,EAAAA,eAAe,GAAG,CAAC9E,QAAD,EAAkB2E,QAAlB,KAAwC;AACxD,UAAM;AAAE5K,MAAAA,aAAF;AAAiBC,MAAAA;AAAjB,QAAoC,KAAKmD,KAA/C;AACA,UAAM;AAAEvB,MAAAA,iBAAF;AAAqBJ,MAAAA,YAArB;AAAmCE,MAAAA;AAAnC,QAAqD,KAAKwB,KAAhE;AAEA,QAAI,CAACtB,iBAAL,EAAwB;AACxB,QAAI,CAAC7B,aAAD,IAAkB,CAACC,cAAvB,EAAuC;AACvC,QAAI,CAACwB,YAAD,IAAiB,CAACE,aAAtB,EAAqC,OANmB,CAQxD;;AACA,UAAMqJ,IAAI,GAAGnJ,iBAAiB,CAACO,CAAlB,GAAsBpC,aAAa,GAAG,CAAnD;AACA,UAAMiL,IAAI,GAAGpJ,iBAAiB,CAACQ,CAAlB,GAAsBpC,cAAc,GAAG,CAApD;AAEA,SAAKuC,OAAL,GAAef,YAAY,GAAG,CAAf,GAAmBwE,QAAQ,CAAC7D,CAA5B,GAAgC4I,IAAI,GAAG,KAAKtI,SAA3D;AACA,SAAKD,OAAL,GAAed,aAAa,GAAG,CAAhB,GAAoBsE,QAAQ,CAAC5D,CAA7B,GAAiC4I,IAAI,GAAG,KAAKvI,SAA5D;;AAEA,QAAIkI,QAAJ,EAAc;AACZzL,MAAAA,QAAQ,CAACsL,MAAT,CAAgB,KAAKvI,OAArB,EAA8B;AAC5BwI,QAAAA,OAAO,EAAE;AAAEtI,UAAAA,CAAC,EAAE,KAAKI,OAAV;AAAmBH,UAAAA,CAAC,EAAE,KAAKI;AAA3B,SADmB;AAE5BkI,QAAAA,eAAe,EAAE,IAFW;AAG5BC,QAAAA;AAH4B,OAA9B,EAIGC,KAJH;AAKD,KAND,MAMO;AACL,WAAK3I,OAAL,CAAawC,QAAb,CAAsB;AAAEtC,QAAAA,CAAC,EAAE,KAAKI,OAAV;AAAmBH,QAAAA,CAAC,EAAE,KAAKI;AAA3B,OAAtB;AACD;AACF,GAxBc;AA0BP0D,EAAAA,kBAAkB,GAAG,MAAM;AACjC,QAAI,CAAC,KAAKhD,KAAL,CAAWtB,iBAAhB,EAAmC;AACnC,QAAI,CAAC,KAAKsB,KAAL,CAAW1B,YAAZ,IAA4B,CAAC,KAAK0B,KAAL,CAAWxB,aAA5C,EAA2D;AAE3D,WAAO7B,+BAA+B,CAAC;AACrCoL,MAAAA,gBAAgB,EAAE;AAChB9I,QAAAA,CAAC,EAAE,KAAKe,KAAL,CAAWtB,iBAAX,CAA6BO,CADhB;AAEhBC,QAAAA,CAAC,EAAE,KAAKc,KAAL,CAAWtB,iBAAX,CAA6BQ;AAFhB,OADmB;AAKrC8I,MAAAA,SAAS,EAAE;AACT3K,QAAAA,MAAM,EAAE,KAAK2C,KAAL,CAAWxB,aADV;AAETpB,QAAAA,KAAK,EAAE,KAAK4C,KAAL,CAAW1B;AAFT,OAL0B;AASrC2J,MAAAA,aAAa,EAAE,EACb,GAAG,KAAKlH,2BAAL,EADU;AAEb1B,QAAAA,OAAO,EAAE,KAAKA,OAFD;AAGbC,QAAAA,OAAO,EAAE,KAAKA,OAHD;AAIbC,QAAAA,SAAS,EAAE,KAAKA;AAJH;AATsB,KAAD,CAAtC;AAgBD,GApByB;AAsBlB4E,EAAAA,gBAAgB,GAAG,MAAM;AAC/B,UAAMrB,QAAQ,GAAG,KAAKE,kBAAL,EAAjB;;AACA,QAAI,CAACF,QAAL,EAAe;AACf,SAAK9C,KAAL,CAAWpB,yBAAX,GAAuCkE,QAAvC;AACD,GAJuB;;AAMhBgE,EAAAA,SAAS,CAACoB,KAAD,EAAoB;AACnC,SAAKpI,OAAL,CAAaqI,IAAb,CAAkBD,KAAlB;AACA,SAAKzE,QAAL,CAAc;AAAE3D,MAAAA,OAAO,EAAE,CAAC,GAAG,KAAKA,OAAT;AAAX,KAAd;AACD;;AAEOsI,EAAAA,YAAY,CAACF,KAAD,EAAoB;AACtC,SAAKpI,OAAL,CAAauI,MAAb,CAAoB,KAAKvI,OAAL,CAAawI,OAAb,CAAqBJ,KAArB,CAApB,EAAiD,CAAjD;AACA,SAAKzE,QAAL,CAAc;AAAE3D,MAAAA,OAAO,EAAE,CAAC,GAAG,KAAKA,OAAT;AAAX,KAAd;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;;;AACEqH,EAAAA,gBAAgB,CAACzD,CAAD,EAA2B;AACzC,UAAM;AAAE6E,MAAAA,iBAAF;AAAqBC,MAAAA,gBAArB;AAAuCC,MAAAA;AAAvC,QACJ,KAAKzI,KADP;AAGAuI,IAAAA,iBAAiB,GAAG7E,CAAH,EAAM,KAAK3C,2BAAL,EAAN,CAAjB;;AAEA,UAAM2H,YAAY,GAAG,KAAKC,gBAAL,EAArB;;AACA,QAAID,YAAY,IAAI,IAApB,EAA0B;AAE1B,UAAM;AAAE3L,MAAAA,aAAF;AAAiBC,MAAAA;AAAjB,QAAmC,KAAKiD,KAA9C,CATyC,CAWzC;;AACA,UAAM2I,uBAAuB,GAAG;AAC9B3J,MAAAA,CAAC,EAAEyE,CAAC,CAACpB,WAAF,CAAciB,KAAd,GAAsBxG,aADK;AAE9BmC,MAAAA,CAAC,EAAEwE,CAAC,CAACpB,WAAF,CAAckB,KAAd,GAAsBxG;AAFK,KAAhC,CAZyC,CAiBzC;;AACA,QAAIyL,qBAAJ,EAA2B;AACzBG,MAAAA,uBAAuB,CAAC3J,CAAxB,GAA4B,CAA5B;AACA2J,MAAAA,uBAAuB,CAAC1J,CAAxB,GAA4B,CAA5B;AACD;;AAED,SAAK2J,MAAL,CAAYH,YAAZ,EAA0BE,uBAA1B;AAEAJ,IAAAA,gBAAgB,GACd9E,CADc,EAEd,KAAK3C,2BAAL,CAAiC;AAAExB,MAAAA,SAAS,EAAEmJ;AAAb,KAAjC,CAFc,CAAhB;AAID;AAED;AACF;AACA;AACA;AACA;AACA;;;AACEC,EAAAA,gBAAgB,GAAG;AACjB,UAAM;AAAExK,MAAAA,QAAF;AAAYN,MAAAA,OAAZ;AAAqBH,MAAAA;AAArB,QAAqC,KAAKsC,KAAhD;AACA,UAAM;AAAET,MAAAA;AAAF,QAAgB,IAAtB;AAEA,QAAI1B,OAAO,IAAI,IAAf,EAAqB;;AAErB,QAAI0B,SAAS,CAACuJ,OAAV,CAAkB,CAAlB,MAAyBjL,OAAO,CAACiL,OAAR,CAAgB,CAAhB,CAA7B,EAAiD;AAC/C,aAAOpL,WAAP;AACD;;AAED,QAAIS,QAAQ,IAAI,IAAhB,EAAsB;AAEtB,UAAMuK,YAAY,GAAGnJ,SAAS,IAAI,IAAIpB,QAAR,CAA9B;;AACA,QAAIuK,YAAY,GAAG7K,OAAnB,EAA4B;AAC1B,aAAOA,OAAP;AACD;;AAED,WAAO6K,YAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEG,EAAAA,MAAM,CAAC3D,YAAD,EAAuBE,UAAvB,EAA2C;AAC/C,QAAI,CAAC,KAAKpF,KAAL,CAAWxC,WAAhB,EAA6B,OAAO,KAAP;AAC7B,QAAI,KAAKwC,KAAL,CAAWnC,OAAX,IAAsBqH,YAAY,GAAG,KAAKlF,KAAL,CAAWnC,OAApD,EAA6D,OAAO,KAAP;AAC7D,QAAI,KAAKmC,KAAL,CAAWlC,OAAX,IAAsBoH,YAAY,GAAG,KAAKlF,KAAL,CAAWlC,OAApD,EAA6D,OAAO,KAAP;AAE7D,SAAKkC,KAAL,CAAW6E,YAAX,GAA0B,IAA1B,EAAgC,IAAhC,EAAsC,KAAK9D,2BAAL,EAAtC,EAL+C,CAO/C;;AACA,QAAIgI,UAAU,GAAG,EAAjB;;AACA,QAAI3D,UAAJ,EAAgB;AACd;AACA,UAAI4D,SAAS,GAAG,KAAKzJ,SAArB,CAFc,CAGd;AACA;AACA;AACA;;AACAwJ,MAAAA,UAAU,GAAG,KAAK5J,QAAL,CAAcqC,WAAd,CAA0B,CAAC;AAAEC,QAAAA,KAAK,EAAEiE;AAAT,OAAD,KAAyB;AAC9D,aAAK3G,OAAL,CAAawC,QAAb,CAAsB;AACpBtC,UAAAA,CAAC,EAAEvC,mCAAmC,CACpC,KAAK2C,OAD+B,EAEpC,KAAKY,KAAL,CAAWpD,aAFyB,EAGpCmM,SAHoC,EAIpCtD,QAJoC,EAKpCN,UAAU,CAACnG,CALyB,CADlB;AAQpBC,UAAAA,CAAC,EAAExC,mCAAmC,CACpC,KAAK4C,OAD+B,EAEpC,KAAKW,KAAL,CAAWnD,cAFyB,EAGpCkM,SAHoC,EAIpCtD,QAJoC,EAKpCN,UAAU,CAAClG,CALyB;AARlB,SAAtB;AAgBA8J,QAAAA,SAAS,GAAGtD,QAAZ;AACD,OAlBY,CAAb;AAmBD,KAnC8C,CAqC/C;;;AACAtJ,IAAAA,kBAAkB,CAAC,KAAK+C,QAAN,EAAgB+F,YAAhB,CAAlB,CAAgDwC,KAAhD,CAAsD,MAAM;AAC1D,WAAKvI,QAAL,CAAc8J,cAAd,CAA6BF,UAA7B;AACD,KAFD,EAtC+C,CAyC/C;;AAEA,SAAK/I,KAAL,CAAW6F,WAAX,GAAyB,IAAzB,EAA+B,IAA/B,EAAqC,KAAK9E,2BAAL,EAArC;AACA,WAAO,IAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEmI,EAAAA,MAAM,CAACC,eAAD,EAA0B;AAC9B;AACAA,IAAAA,eAAe,KAAK,KAAKnJ,KAAL,CAAW7B,QAAX,IAAuB,CAA3C;AACA,WAAO,KAAK0K,MAAL,CAAY,KAAKtJ,SAAL,GAAiB4J,eAA7B,CAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEC,EAAAA,MAAM,CAAC9C,UAAD,EAAqBC,UAArB,EAAyC;AAC7C,UAAM;AAAE1J,MAAAA,aAAF;AAAiBC,MAAAA;AAAjB,QAAoC,KAAKmD,KAA/C;AACA,QAAI,CAACpD,aAAD,IAAkB,CAACC,cAAvB,EAAuC;AAEvC,UAAMuC,OAAO,GAAG,CAACiH,UAAU,GAAGzJ,aAAa,GAAG,CAA9B,IAAmC,KAAK0C,SAAxD;AACA,UAAMD,OAAO,GAAG,CAACiH,UAAU,GAAGzJ,cAAc,GAAG,CAA/B,IAAoC,KAAKyC,SAAzD;;AAEA,SAAK8G,qBAAL,CAA2B,CAAChH,OAA5B,EAAqC,CAACC,OAAtC;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACE+J,EAAAA,MAAM,CAACC,aAAD,EAAwBC,aAAxB,EAA+C;AACnD,UAAMlK,OAAO,GACX,CAAC,KAAKA,OAAL,GAAe,KAAKE,SAApB,GAAgC+J,aAAjC,IAAkD,KAAK/J,SADzD;AAEA,UAAMD,OAAO,GACX,CAAC,KAAKA,OAAL,GAAe,KAAKC,SAApB,GAAgCgK,aAAjC,IAAkD,KAAKhK,SADzD;;AAGA,SAAK8G,qBAAL,CAA2BhH,OAA3B,EAAoCC,OAApC;AACD;;AAEDkK,EAAAA,MAAM,GAAG;AACP,UAAM;AACJ7K,MAAAA,aADI;AAEJ8K,MAAAA,QAFI;AAGJhL,MAAAA,0BAHI;AAIJP,MAAAA,cAJI;AAKJQ,MAAAA,iBALI;AAMJgL,MAAAA,oBANI;AAOJC,MAAAA,gBAPI;AAQJC,MAAAA;AARI,QASF,KAAK5J,KATT;AAWA,UAAM;AAAE7C,MAAAA,OAAF;AAAW2C,MAAAA,OAAX;AAAoBgE,MAAAA,WAAW,GAAG;AAAlC,QAAyC,KAAK7D,KAApD;AAEA,wBACE,MAAC,IAAD;AACE,MAAA,KAAK,EAAE4J,MAAM,CAACC,SADhB;AAAA,SAEM,KAAK5J,eAAL,CAAqB6J,WAF3B;AAGE,MAAA,GAAG,EAAE,KAAK3I,qBAHZ;AAIE,MAAA,QAAQ,EAAE,KAAKoB,kBAJjB;AAAA,8BAME,KAAC,QAAD,CAAU,IAAV;AACE,QAAA,KAAK,EAAE,CACLqH,MAAM,CAACG,WADF,EAEL,KAAKhK,KAAL,CAAWiK,KAFN,EAGL;AACEC,UAAAA,SAAS,EAAE,CACT;AACA;AACA;AAAEC,YAAAA,MAAM,EAAE,KAAKhL;AAAf,WAHS,EAIT;AAAEiL,YAAAA,MAAM,EAAE,KAAKjL;AAAf,WAJS,EAKT,GAAG,KAAKJ,OAAL,CAAasL,qBAAb,EALM;AADb,SAHK,CADT;AAAA,kBAeGZ;AAfH,QANF,EAwBGhL,0BAA0B,IACzBqB,OAAO,EAAEwK,GAAT,CACGpC,KAAD,IACEhK,cAAc,iBACZ,KAAC,qBAAD;AACE,QAAA,CAAC,EAAEgK,KAAK,CAACjJ,CADX;AAEE,QAAA,CAAC,EAAEiJ,KAAK,CAAChJ,CAFX;AAIE,QAAA,iBAAiB,EAAEhB,cAJrB;AAKE,QAAA,eAAe,EAAE,MAAM;AACrB,eAAKkK,YAAL,CAAkBF,KAAlB;AACD;AAPH,SAGOA,KAAK,CAACnB,EAHb,CAHN,CAzBJ,EAyCGjD,WAAW,CAACwG,GAAZ,CAAgB,CAAC;AAAErL,QAAAA,CAAF;AAAKC,QAAAA;AAAL,OAAD,EAAWqL,KAAX,KAAqB;AACpC,4BAAO,KAAC,eAAD;AAA6B,UAAA,CAAC,EAAEtL,CAAhC;AAAmC,UAAA,CAAC,EAAEC;AAAtC,WAAsBqL,KAAtB,CAAP;AACD,OAFA,CAzCH,EA6CG7L,iBAAiB,iBAChB,KAAC,SAAD;AACE,QAAA,aAAa,EAAEC,aADjB;AAEE,QAAA,iBAAiB,EAAED,iBAFrB;AAGE,QAAA,OAAO,EAAEvB,OAHX;AAIE,QAAA,OAAO,EAAEwM,gBAJX;AAKE,QAAA,WAAW,EAAED,oBALf;AAME,QAAA,YAAY,EAAE,KAAKjJ,uBANrB;AAOE,QAAA,UAAU,EAAG+J,IAAD,IAAkB;AAC5B,eAAK/G,QAAL,CAAc;AAAEtG,YAAAA,OAAO,EAAEqN;AAAX,WAAd;AACD,SATH;AAUE,QAAA,QAAQ,EAAEZ;AAVZ,QA9CJ;AAAA,MADF;AA8DD;;AAvmCD;;AA0mCF,MAAMC,MAAM,GAAG3N,UAAU,CAACiE,MAAX,CAAkB;AAC/B2J,EAAAA,SAAS,EAAE;AACTW,IAAAA,UAAU,EAAE,QADH;AAETC,IAAAA,IAAI,EAAE,CAFG;AAGTC,IAAAA,cAAc,EAAE,QAHP;AAITC,IAAAA,QAAQ,EAAE,QAJD;AAKT9H,IAAAA,QAAQ,EAAE;AALD,GADoB;AAQ/BkH,EAAAA,WAAW,EAAE;AACXS,IAAAA,UAAU,EAAE,QADD;AAEXC,IAAAA,IAAI,EAAE,CAFK;AAGXC,IAAAA,cAAc,EAAE,QAHL;AAIXvN,IAAAA,KAAK,EAAE;AAJI;AARkB,CAAlB,CAAf;AAgBA,eAAeE,uBAAf;AAEA,SAASA,uBAAT","sourceRoot":"../../src"}
+{"version":3,"names":["debounce","defaults","React","useEffect","useImperativeHandle","useLayoutEffect","useMemo","useRef","useState","Animated","PanResponder","StyleSheet","View","getZoomToAnimation","AnimatedTouchFeedback","StaticPin","DebugTouchPoint","calcGestureCenterPoint","calcGestureTouchDistance","calcNewScaledOffsetForZoomCentering","viewportPositionToImagePosition","useLatestCallback","jsx","_jsx","jsxs","_jsxs","ReactNativeZoomableView","props","ref","originalWidth","setOriginalWidth","originalHeight","setOriginalHeight","originalPageX","setOriginalPageX","originalPageY","setOriginalPageY","originalX","setOriginalX","originalY","setOriginalY","pinSize","setPinSize","width","height","debugPoints","setDebugPoints","stateTouches","setStateTouches","zoomSubjectWrapperRef","gestureHandlers","doubleTapFirstTapReleaseTimestamp","zoomEnabled","panEnabled","initialZoom","initialOffsetX","initialOffsetY","maxZoom","minZoom","pinchToZoomInSensitivity","pinchToZoomOutSensitivity","movementSensibility","doubleTapDelay","zoomStep","onLongPress","undefined","longPressDuration","contentWidth","contentHeight","visualTouchFeedbackEnabled","staticPinPosition","staticPinIcon","onStaticPinPositionChange","onStaticPinPositionMove","disablePanOnInitialZoom","panAnim","ValueXY","x","y","zoomAnim","Value","offsetX","offsetY","zoomLevel","lastGestureCenterPosition","lastGestureTouchDistance","gestureType","gestureStarted","longPressTimeout","onTransformInvocationInitialized","singleTapTimeoutId","touches","doubleTapFirstTap","measureZoomSubjectInterval","current","create","onStartShouldSetPanResponder","_handleStartShouldSetPanResponder","onPanResponderGrant","_handlePanResponderGrant","onPanResponderMove","_handlePanResponderMove","onPanResponderRelease","_handlePanResponderEnd","onPanResponderTerminate","evt","gestureState","_getZoomableViewEventObject","onPanResponderTerminationRequest","onShouldBlockNativeResponder","onStartShouldSetPanResponderCapture","onMoveShouldSetPanResponderCapture","zoomAnimatedValue","panAnimatedValueXY","setValue","addListener","value","_invokeOnTransform","successful","onLayout","layout","nativeEvent","measureZoomSubject","setInterval","clearInterval","debouncedOnStaticPinPositionChange","zoomableViewEvent","position","_staticPinPosition","onTransform","overwriteObj","requestAnimationFrame","setTimeout","measure","pageX","pageY","e","persist","stopAnimation","_resolveAndHandleTap","clearTimeout","onPanResponderEnd","onZoomEnd","onShiftingEnd","_updateStaticPin","numberActiveTouches","_handlePinching","Math","abs","dx","dy","isShiftGesture","_handleShifting","distance","onZoomBefore","zoomGrowthFromLastGestureState","pinchToZoomSensitivity","deltaGrowth","deltaGrowthAdjustedBySensitivity","newZoomLevel","gestureCenterPoint","zoomCenter","debug","_setPinchDebugPoints","oldOffsetX","oldOffsetY","oldScale","newScale","newOffsetY","newOffsetX","offsetShift","_calcOffsetShiftSinceLastGestureState","onZoomAfter","gestureResponderEvent","points","shift","shiftX","shiftY","moveX","moveY","_setNewOffsetPosition","onShiftingBefore","onShiftingAfter","now","Date","_addTouch","id","toString","isSecondTap","_handleDoubleTap","tapX","tapY","timing","toValue","useNativeDriver","duration","start","onSingleTap","publicMoveStaticPinTo","pinX","pinY","viewportPosition","imageSize","zoomableEvent","touch","push","_removeTouch","splice","indexOf","onDoubleTapBefore","onDoubleTapAfter","doubleTapZoomToCenter","nextZoomStep","_getNextZoomStep","zoomPositionCoordinates","publicZoomTo","toFixed","listenerId","prevScale","removeListener","publicZoomBy","zoomLevelChange","publicMoveTo","publicMoveBy","offsetChangeX","offsetChangeY","zoomTo","zoomBy","moveTo","moveBy","moveStaticPinTo","children","onStaticPinLongPress","onStaticPinPress","pinProps","style","styles","container","panHandlers","zoomSubject","transform","scaleX","scaleY","getTranslateTransform","map","animationDuration","onAnimationDone","index","onPress","onParentMove","alignItems","flex","justifyContent","overflow"],"sourceRoot":"../../src","sources":["ReactNativeZoomableView.tsx"],"mappings":"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","ignoreList":[]}
diff --git a/lib/module/animations/index.js.map b/lib/module/animations/index.js.map
index b86d7ff..7c5e7f2 100644
--- a/lib/module/animations/index.js.map
+++ b/lib/module/animations/index.js.map
@@ -1 +1 @@
-{"version":3,"sources":["animations/index.ts"],"names":["Animated","Easing","getZoomToAnimation","animValue","toValue","timing","easing","out","ease","useNativeDriver"],"mappings":";;AAAA,SAASA,QAAT,EAAmBC,MAAnB,QAAiC,cAAjC;AAEA,OAAO,SAASC,kBAAT,CAA4BC,SAA5B,EAAuDC,OAAvD,EAAwE;AAC7E,SAAOJ,QAAQ,CAACK,MAAT,CAAgBF,SAAhB,EAA2B;AAChCG,IAAAA,MAAM,EAAEL,MAAM,CAACM,GAAP,CAAWN,MAAM,CAACO,IAAlB,CADwB;AAEhCJ,IAAAA,OAFgC;AAGhCK,IAAAA,eAAe,EAAE;AAHe,GAA3B,CAAP;AAKD","sourceRoot":"../../../src"}
+{"version":3,"names":["Animated","Easing","getZoomToAnimation","animValue","toValue","timing","easing","out","ease","useNativeDriver"],"sourceRoot":"../../../src","sources":["animations/index.ts"],"mappings":";;AAAA,SAASA,QAAQ,EAAEC,MAAM,QAAQ,cAAc;AAE/C,OAAO,SAASC,kBAAkBA,CAACC,SAAyB,EAAEC,OAAe,EAAE;EAC7E,OAAOJ,QAAQ,CAACK,MAAM,CAACF,SAAS,EAAE;IAChCG,MAAM,EAAEL,MAAM,CAACM,GAAG,CAACN,MAAM,CAACO,IAAI,CAAC;IAC/BJ,OAAO;IACPK,eAAe,EAAE;EACnB,CAAC,CAAC;AACJ","ignoreList":[]}
diff --git a/lib/module/components/AnimatedTouchFeedback.js.map b/lib/module/components/AnimatedTouchFeedback.js.map
index ad2ea65..0f745d8 100644
--- a/lib/module/components/AnimatedTouchFeedback.js.map
+++ b/lib/module/components/AnimatedTouchFeedback.js.map
@@ -1 +1 @@
-{"version":3,"sources":["components/AnimatedTouchFeedback.tsx"],"names":["React","useEffect","useRef","Animated","Easing","StyleSheet","AnimatedTouchFeedback","x","y","animationDelay","animationDuration","onAnimationDone","appearDisappearAnimRef","Value","onAnimationDoneRef","current","setValue","inDuration","outDuration","sequence","timing","delay","toValue","duration","easing","linear","useNativeDriver","out","ease","start","styles","animatedTouchFeedback","opacity","interpolate","inputRange","outputRange","left","top","transform","scale","create","backgroundColor","borderRadius","height","position","width"],"mappings":"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","sourceRoot":"../../../src"}
+{"version":3,"names":["React","useEffect","useRef","Animated","Easing","StyleSheet","jsx","_jsx","AnimatedTouchFeedback","x","y","animationDelay","animationDuration","onAnimationDone","appearDisappearAnimRef","Value","onAnimationDoneRef","current","setValue","inDuration","outDuration","sequence","timing","delay","toValue","duration","easing","linear","useNativeDriver","out","ease","start","View","pointerEvents","style","styles","animatedTouchFeedback","opacity","interpolate","inputRange","outputRange","left","top","transform","scale","create","backgroundColor","borderRadius","height","position","width"],"sourceRoot":"../../../src","sources":["components/AnimatedTouchFeedback.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAChD,SAASC,QAAQ,EAAEC,MAAM,EAAEC,UAAU,QAAQ,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE5D,OAAO,MAAMC,qBAAqB,GAAGA,CAAC;EACpCC,CAAC;EACDC,CAAC;EACDC,cAAc;EACdC,iBAAiB;EACjBC;AAOF,CAAC,KAAK;EACJ,MAAMC,sBAAsB,GAAGZ,MAAM,CAAiB,IAAIC,QAAQ,CAACY,KAAK,CAAC,CAAC,CAAC,CAAC;EAC5E,MAAMC,kBAAkB,GAAGd,MAAM,CAACW,eAAe,CAAC;EAClDG,kBAAkB,CAACC,OAAO,GAAGJ,eAAe;EAE5CZ,SAAS,CAAC,MAAM;IACda,sBAAsB,CAACG,OAAO,CAACC,QAAQ,CAAC,CAAC,CAAC;IAC1C,MAAMC,UAAU,GAAGP,iBAAiB,GAAG,GAAG;IAC1C,MAAMQ,WAAW,GAAGR,iBAAiB,GAAGO,UAAU;IAClDhB,QAAQ,CAACkB,QAAQ,CAAC,CAChBlB,QAAQ,CAACmB,MAAM,CAACR,sBAAsB,CAACG,OAAO,EAAE;MAC9CM,KAAK,EAAEZ,cAAc,IAAI,CAAC;MAC1Ba,OAAO,EAAE,CAAC;MACVC,QAAQ,EAAEN,UAAU;MACpBO,MAAM,EAAEtB,MAAM,CAACuB,MAAM;MACrBC,eAAe,EAAE;IACnB,CAAC,CAAC,EACFzB,QAAQ,CAACmB,MAAM,CAACR,sBAAsB,CAACG,OAAO,EAAE;MAC9CO,OAAO,EAAE,CAAC;MACVC,QAAQ,EAAEL,WAAW;MACrBM,MAAM,EAAEtB,MAAM,CAACyB,GAAG,CAACzB,MAAM,CAAC0B,IAAI,CAAC;MAC/BF,eAAe,EAAE;IACnB,CAAC,CAAC,CACH,CAAC,CAACG,KAAK,CAAC,MAAMf,kBAAkB,CAACC,OAAO,GAAG,CAAC,CAAC;EAChD,CAAC,EAAE,CAACN,cAAc,EAAEC,iBAAiB,CAAC,CAAC;EAEvC,oBACEL,IAAA,CAACJ,QAAQ,CAAC6B,IAAI;IACZC,aAAa,EAAC,MAAM;IACpBC,KAAK,EAAE,CACLC,MAAM,CAACC,qBAAqB,EAC5B;MACEC,OAAO,EAAEvB,sBAAsB,CAACG,OAAO,CAACqB,WAAW,CAAC;QAClDC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAClBC,WAAW,EAAE,CAAC,CAAC,EAAE,GAAG;MACtB,CAAC,CAAC;MACFC,IAAI,EAAEhC,CAAC,GAAG,EAAE;MACZiC,GAAG,EAAEhC,CAAC,GAAG,EAAE;MACXiC,SAAS,EAAE,CACT;QACEC,KAAK,EAAE9B,sBAAsB,CAACG,OAAO,CAACqB,WAAW,CAAC;UAChDC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;UAClBC,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC;QACtB,CAAC;MACH,CAAC;IAEL,CAAC;EACD,CACH,CAAC;AAEN,CAAC;AAED,MAAML,MAAM,GAAG9B,UAAU,CAACwC,MAAM,CAAC;EAC/BT,qBAAqB,EAAE;IACrBU,eAAe,EAAE,WAAW;IAC5BC,YAAY,EAAE,EAAE;IAChBC,MAAM,EAAE,EAAE;IACVC,QAAQ,EAAE,UAAU;IACpBC,KAAK,EAAE;EACT;AACF,CAAC,CAAC","ignoreList":[]}
diff --git a/lib/module/components/StaticPin.js b/lib/module/components/StaticPin.js
index 50a8877..310dc3e 100644
--- a/lib/module/components/StaticPin.js
+++ b/lib/module/components/StaticPin.js
@@ -22,8 +22,9 @@ export const StaticPin = ({
const opacity = pinSize.width && pinSize.height ? 1 : 0;
const panResponder = React.useRef(PanResponder.create({
onStartShouldSetPanResponder: () => {
- tapTime.current = Date.now(); // We want to handle tap on this so set true
+ tapTime.current = Date.now();
+ // We want to handle tap on this so set true
return true;
},
onPanResponderMove: (evt, gestureState) => {
@@ -34,11 +35,9 @@ export const StaticPin = ({
onPanResponderRelease: (evt, gestureState) => {
if (Math.abs(gestureState.dx) > 5 || Math.abs(gestureState.dy) > 5) return;
const dt = Date.now() - tapTime.current;
-
if (onPress && dt < 500) {
onPress(evt);
}
-
if (onLongPress && dt > 500) {
// RN long press is 500ms
onLongPress(evt);
diff --git a/lib/module/components/StaticPin.js.map b/lib/module/components/StaticPin.js.map
index 36e5e06..a40cc35 100644
--- a/lib/module/components/StaticPin.js.map
+++ b/lib/module/components/StaticPin.js.map
@@ -1 +1 @@
-{"version":3,"sources":["components/StaticPin.tsx"],"names":["React","Animated","Image","PanResponder","StyleSheet","View","StaticPin","staticPinPosition","staticPinIcon","pinSize","onParentMove","onPress","onLongPress","setPinSize","pinProps","tapTime","useRef","transform","translateY","height","translateX","width","opacity","panResponder","create","onStartShouldSetPanResponder","current","Date","now","onPanResponderMove","evt","gestureState","Math","abs","dx","dy","onPanResponderRelease","dt","left","x","top","y","styles","pinWrapper","nativeEvent","layout","panHandlers","require","pin","position"],"mappings":"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","sourceRoot":"../../../src"}
+{"version":3,"names":["React","Animated","Image","PanResponder","StyleSheet","View","jsx","_jsx","StaticPin","staticPinPosition","staticPinIcon","pinSize","onParentMove","onPress","onLongPress","setPinSize","pinProps","tapTime","useRef","transform","translateY","height","translateX","width","opacity","panResponder","create","onStartShouldSetPanResponder","current","Date","now","onPanResponderMove","evt","gestureState","Math","abs","dx","dy","onPanResponderRelease","dt","style","left","x","top","y","styles","pinWrapper","children","onLayout","nativeEvent","layout","panHandlers","source","require","pin","position"],"sourceRoot":"../../../src","sources":["components/StaticPin.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SACEC,QAAQ,EAERC,KAAK,EACLC,YAAY,EAEZC,UAAU,EACVC,IAAI,QAEC,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAGtB,OAAO,MAAMC,SAAS,GAAGA,CAAC;EACxBC,iBAAiB;EACjBC,aAAa;EACbC,OAAO;EACPC,YAAY;EACZC,OAAO;EACPC,WAAW;EACXC,UAAU;EACVC,QAAQ,GAAG,CAAC;AAcd,CAAC,KAAK;EACJ,MAAMC,OAAO,GAAGjB,KAAK,CAACkB,MAAM,CAAC,CAAC,CAAC;EAC/B,MAAMC,SAAS,GAAG,CAChB;IAAEC,UAAU,EAAE,CAACT,OAAO,CAACU;EAAO,CAAC,EAC/B;IAAEC,UAAU,EAAE,CAACX,OAAO,CAACY,KAAK,GAAG;EAAE,CAAC,CACnC;EAED,MAAMC,OAAO,GAAGb,OAAO,CAACY,KAAK,IAAIZ,OAAO,CAACU,MAAM,GAAG,CAAC,GAAG,CAAC;EAEvD,MAAMI,YAAY,GAAGzB,KAAK,CAACkB,MAAM,CAC/Bf,YAAY,CAACuB,MAAM,CAAC;IAClBC,4BAA4B,EAAEA,CAAA,KAAM;MAClCV,OAAO,CAACW,OAAO,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;;MAE5B;MACA,OAAO,IAAI;IACb,CAAC;IACDC,kBAAkB,EAAEA,CAACC,GAAG,EAAEC,YAAY,KAAK;MACzC;MACA;MACA,IAAIC,IAAI,CAACC,GAAG,CAACF,YAAY,CAACG,EAAE,CAAC,GAAG,CAAC,IAAIF,IAAI,CAACC,GAAG,CAACF,YAAY,CAACI,EAAE,CAAC,GAAG,CAAC,EAChEzB,YAAY,CAACoB,GAAG,EAAEC,YAAY,CAAC;IACnC,CAAC;IACDK,qBAAqB,EAAEA,CAACN,GAAG,EAAEC,YAAY,KAAK;MAC5C,IAAIC,IAAI,CAACC,GAAG,CAACF,YAAY,CAACG,EAAE,CAAC,GAAG,CAAC,IAAIF,IAAI,CAACC,GAAG,CAACF,YAAY,CAACI,EAAE,CAAC,GAAG,CAAC,EAChE;MACF,MAAME,EAAE,GAAGV,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGb,OAAO,CAACW,OAAO;MACvC,IAAIf,OAAO,IAAI0B,EAAE,GAAG,GAAG,EAAE;QACvB1B,OAAO,CAACmB,GAAG,CAAC;MACd;MACA,IAAIlB,WAAW,IAAIyB,EAAE,GAAG,GAAG,EAAE;QAC3B;QACAzB,WAAW,CAACkB,GAAG,CAAC;MAClB;IACF;EACF,CAAC,CACH,CAAC,CAACJ,OAAO;EAET,oBACErB,IAAA,CAACN,QAAQ,CAACI,IAAI;IACZmC,KAAK,EAAE,CACL;MACEC,IAAI,EAAEhC,iBAAiB,CAACiC,CAAC;MACzBC,GAAG,EAAElC,iBAAiB,CAACmC;IACzB,CAAC,EACDC,MAAM,CAACC,UAAU,EACjB;MAAEtB,OAAO;MAAEL;IAAU,CAAC,CACtB;IAAA,GACEH,QAAQ;IAAA+B,QAAA,eAEZxC,IAAA,CAACF,IAAI;MACH2C,QAAQ,EAAEA,CAAC;QAAEC,WAAW,EAAE;UAAEC;QAAO;MAAE,CAAC,KAAK;QACzCnC,UAAU,CAACmC,MAAM,CAAC;MACpB,CAAE;MAAA,GACEzB,YAAY,CAAC0B,WAAW;MAAAJ,QAAA,EAE3BrC,aAAa;MAAA;MACZ;MACAH,IAAA,CAACL,KAAK;QAACkD,MAAM,EAAEC,OAAO,CAAC,mBAAmB,CAAE;QAACb,KAAK,EAAEK,MAAM,CAACS;MAAI,CAAE;IAClE,CACG;EAAC,CACM,CAAC;AAEpB,CAAC;AAED,MAAMT,MAAM,GAAGzC,UAAU,CAACsB,MAAM,CAAC;EAC/B4B,GAAG,EAAE;IACHjC,MAAM,EAAE,EAAE;IACVE,KAAK,EAAE;EACT,CAAC;EACDuB,UAAU,EAAE;IACVS,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC","ignoreList":[]}
diff --git a/lib/module/components/index.js.map b/lib/module/components/index.js.map
index 761a507..16f3c60 100644
--- a/lib/module/components/index.js.map
+++ b/lib/module/components/index.js.map
@@ -1 +1 @@
-{"version":3,"sources":["components/index.tsx"],"names":["AnimatedTouchFeedback"],"mappings":";;AAAA,SAASA,qBAAT,QAAsC,yBAAtC","sourceRoot":"../../../src"}
+{"version":3,"names":["AnimatedTouchFeedback"],"sourceRoot":"../../../src","sources":["components/index.tsx"],"mappings":";;AAAA,SAASA,qBAAqB,QAAQ,yBAAyB","ignoreList":[]}
diff --git a/lib/module/debugHelper/index.js.map b/lib/module/debugHelper/index.js.map
index 1df0da0..c87cf2b 100644
--- a/lib/module/debugHelper/index.js.map
+++ b/lib/module/debugHelper/index.js.map
@@ -1 +1 @@
-{"version":3,"sources":["debugHelper/index.tsx"],"names":["React","StyleSheet","View","DebugTouchPoint","diameter","x","y","color","radius","styles","debugPoint","width","height","borderRadius","backgroundColor","left","top","DebugRect","debugRect","create","opacity","position"],"mappings":";;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,UAAT,EAAqBC,IAArB,QAAiC,cAAjC;;AAEA,OAAO,MAAMC,eAAe,GAAG,CAAC;AAC9BC,EAAAA,QAAQ,GAAG,EADmB;AAE9BC,EAAAA,CAAC,GAAG,CAF0B;AAG9BC,EAAAA,CAAC,GAAG,CAH0B;AAI9BC,EAAAA,KAAK,GAAG;AAJsB,CAAD,KAKzB;AACJ,QAAMC,MAAM,GAAGJ,QAAQ,GAAG,CAA1B;AACA,sBACE,KAAC,IAAD;AACE,IAAA,KAAK,EAAE,CACLK,MAAM,CAACC,UADF,EAEL;AACEC,MAAAA,KAAK,EAAEP,QADT;AAEEQ,MAAAA,MAAM,EAAER,QAFV;AAGES,MAAAA,YAAY,EAAET,QAHhB;AAIEU,MAAAA,eAAe,EAAEP,KAJnB;AAKEQ,MAAAA,IAAI,EAAEV,CAAC,GAAGG,MALZ;AAMEQ,MAAAA,GAAG,EAAEV,CAAC,GAAGE;AANX,KAFK,CADT;AAYE,IAAA,aAAa,EAAC;AAZhB,IADF;AAgBD,CAvBM;AAwBP,OAAO,MAAMS,SAAS,GAAG,CAAC;AACxBL,EAAAA,MADwB;AAExBP,EAAAA,CAAC,GAAG,CAFoB;AAGxBC,EAAAA,CAAC,GAAG,CAHoB;AAIxBC,EAAAA,KAAK,GAAG;AAJgB,CAAD,KAUnB;AACJ,QAAMI,KAAK,GAAG,CAAd;AACA,sBACE,KAAC,IAAD;AACE,IAAA,KAAK,EAAE,CACLF,MAAM,CAACS,SADF,EAEL;AACEP,MAAAA,KADF;AAEEC,MAAAA,MAFF;AAGEE,MAAAA,eAAe,EAAEP,KAHnB;AAIEQ,MAAAA,IAAI,EAAEV,CAAC,GAAGM,KAAK,GAAG,CAJpB;AAKEK,MAAAA,GAAG,EAAEV;AALP,KAFK,CADT;AAWE,IAAA,aAAa,EAAC;AAXhB,IADF;AAeD,CA3BM;AA6BP,MAAMG,MAAM,GAAGR,UAAU,CAACkB,MAAX,CAAkB;AAC/BT,EAAAA,UAAU,EAAE;AACVU,IAAAA,OAAO,EAAE,GADC;AAEVC,IAAAA,QAAQ,EAAE;AAFA,GADmB;AAK/BH,EAAAA,SAAS,EAAE;AACTE,IAAAA,OAAO,EAAE,GADA;AAETC,IAAAA,QAAQ,EAAE;AAFD;AALoB,CAAlB,CAAf","sourceRoot":"../../../src"}
+{"version":3,"names":["React","StyleSheet","View","jsx","_jsx","DebugTouchPoint","diameter","x","y","color","radius","style","styles","debugPoint","width","height","borderRadius","backgroundColor","left","top","pointerEvents","DebugRect","debugRect","create","opacity","position"],"sourceRoot":"../../../src","sources":["debugHelper/index.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEhD,OAAO,MAAMC,eAAe,GAAGA,CAAC;EAC9BC,QAAQ,GAAG,EAAE;EACbC,CAAC,GAAG,CAAC;EACLC,CAAC,GAAG,CAAC;EACLC,KAAK,GAAG;AACV,CAAC,KAAK;EACJ,MAAMC,MAAM,GAAGJ,QAAQ,GAAG,CAAC;EAC3B,oBACEF,IAAA,CAACF,IAAI;IACHS,KAAK,EAAE,CACLC,MAAM,CAACC,UAAU,EACjB;MACEC,KAAK,EAAER,QAAQ;MACfS,MAAM,EAAET,QAAQ;MAChBU,YAAY,EAAEV,QAAQ;MACtBW,eAAe,EAAER,KAAK;MACtBS,IAAI,EAAEX,CAAC,GAAGG,MAAM;MAChBS,GAAG,EAAEX,CAAC,GAAGE;IACX,CAAC,CACD;IACFU,aAAa,EAAC;EAAM,CACrB,CAAC;AAEN,CAAC;AACD,OAAO,MAAMC,SAAS,GAAGA,CAAC;EACxBN,MAAM;EACNR,CAAC,GAAG,CAAC;EACLC,CAAC,GAAG,CAAC;EACLC,KAAK,GAAG;AAMV,CAAC,KAAK;EACJ,MAAMK,KAAK,GAAG,CAAC;EACf,oBACEV,IAAA,CAACF,IAAI;IACHS,KAAK,EAAE,CACLC,MAAM,CAACU,SAAS,EAChB;MACER,KAAK;MACLC,MAAM;MACNE,eAAe,EAAER,KAAK;MACtBS,IAAI,EAAEX,CAAC,GAAGO,KAAK,GAAG,CAAC;MACnBK,GAAG,EAAEX;IACP,CAAC,CACD;IACFY,aAAa,EAAC;EAAM,CACrB,CAAC;AAEN,CAAC;AAED,MAAMR,MAAM,GAAGX,UAAU,CAACsB,MAAM,CAAC;EAC/BV,UAAU,EAAE;IACVW,OAAO,EAAE,GAAG;IACZC,QAAQ,EAAE;EACZ,CAAC;EACDH,SAAS,EAAE;IACTE,OAAO,EAAE,GAAG;IACZC,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC","ignoreList":[]}
diff --git a/lib/module/helper/calcNewScaledOffsetForZoomCentering.js b/lib/module/helper/calcNewScaledOffsetForZoomCentering.js
index 55240c1..7ac687e 100644
--- a/lib/module/helper/calcNewScaledOffsetForZoomCentering.js
+++ b/lib/module/helper/calcNewScaledOffsetForZoomCentering.js
@@ -52,8 +52,9 @@
*/
export function calcNewScaledOffsetForZoomCentering(oldOffsetXOrYScaled, zoomSubjectOriginalWidthOrHeight, oldScale, newScale, zoomCenterXOrY) {
const oldOffSetUnscaled = oldOffsetXOrYScaled * oldScale;
- const growthRate = newScale / oldScale; // these act like namespaces just for the sake of readability
+ const growthRate = newScale / oldScale;
+ // these act like namespaces just for the sake of readability
const zoomSubjectOriginalCenter = {};
const zoomSubjectCurrentCenter = {};
const zoomSubjectNewCenter = {};
diff --git a/lib/module/helper/calcNewScaledOffsetForZoomCentering.js.map b/lib/module/helper/calcNewScaledOffsetForZoomCentering.js.map
index 93a364e..a84ce62 100644
--- a/lib/module/helper/calcNewScaledOffsetForZoomCentering.js.map
+++ b/lib/module/helper/calcNewScaledOffsetForZoomCentering.js.map
@@ -1 +1 @@
-{"version":3,"sources":["helper/calcNewScaledOffsetForZoomCentering.ts"],"names":["calcNewScaledOffsetForZoomCentering","oldOffsetXOrYScaled","zoomSubjectOriginalWidthOrHeight","oldScale","newScale","zoomCenterXOrY","oldOffSetUnscaled","growthRate","zoomSubjectOriginalCenter","zoomSubjectCurrentCenter","zoomSubjectNewCenter","xOrY","distanceToZoomCenter","newOffsetUnscaled"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,mCAAT,CACLC,mBADK,EAELC,gCAFK,EAGLC,QAHK,EAILC,QAJK,EAKLC,cALK,EAML;AACA,QAAMC,iBAAiB,GAAGL,mBAAmB,GAAGE,QAAhD;AACA,QAAMI,UAAU,GAAGH,QAAQ,GAAGD,QAA9B,CAFA,CAIA;;AACA,QAAMK,yBAAyB,GAAG,EAAlC;AACA,QAAMC,wBAAwB,GAAG,EAAjC;AACA,QAAMC,oBAAoB,GAAG,EAA7B;AAEAF,EAAAA,yBAAyB,CAACG,IAA1B,GAAiCT,gCAAgC,GAAG,CAApE;AACAO,EAAAA,wBAAwB,CAACE,IAAzB,GACEH,yBAAyB,CAACG,IAA1B,GAAiCL,iBADnC;AAEAG,EAAAA,wBAAwB,CAACG,oBAAzB,GACEH,wBAAwB,CAACE,IAAzB,GAAgCN,cADlC;AAGAK,EAAAA,oBAAoB,CAACE,oBAArB,GACEH,wBAAwB,CAACG,oBAAzB,GAAgDL,UADlD;AAEAG,EAAAA,oBAAoB,CAACC,IAArB,GACED,oBAAoB,CAACE,oBAArB,GAA4CP,cAD9C;AAGA,QAAMQ,iBAAiB,GACrBH,oBAAoB,CAACC,IAArB,GAA4BH,yBAAyB,CAACG,IADxD;AAGA,SAAOE,iBAAiB,GAAGT,QAA3B;AACD","sourceRoot":"../../../src"}
+{"version":3,"names":["calcNewScaledOffsetForZoomCentering","oldOffsetXOrYScaled","zoomSubjectOriginalWidthOrHeight","oldScale","newScale","zoomCenterXOrY","oldOffSetUnscaled","growthRate","zoomSubjectOriginalCenter","zoomSubjectCurrentCenter","zoomSubjectNewCenter","xOrY","distanceToZoomCenter","newOffsetUnscaled"],"sourceRoot":"../../../src","sources":["helper/calcNewScaledOffsetForZoomCentering.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,mCAAmCA,CACjDC,mBAA2B,EAC3BC,gCAAwC,EACxCC,QAAgB,EAChBC,QAAgB,EAChBC,cAAsB,EACtB;EACA,MAAMC,iBAAiB,GAAGL,mBAAmB,GAAGE,QAAQ;EACxD,MAAMI,UAAU,GAAGH,QAAQ,GAAGD,QAAQ;;EAEtC;EACA,MAAMK,yBAAyB,GAAG,CAAC,CAAW;EAC9C,MAAMC,wBAAwB,GAAG,CAAC,CAAW;EAC7C,MAAMC,oBAAoB,GAAG,CAAC,CAAW;EAEzCF,yBAAyB,CAACG,IAAI,GAAGT,gCAAgC,GAAG,CAAC;EACrEO,wBAAwB,CAACE,IAAI,GAC3BH,yBAAyB,CAACG,IAAI,GAAGL,iBAAiB;EACpDG,wBAAwB,CAACG,oBAAoB,GAC3CH,wBAAwB,CAACE,IAAI,GAAGN,cAAc;EAEhDK,oBAAoB,CAACE,oBAAoB,GACvCH,wBAAwB,CAACG,oBAAoB,GAAGL,UAAU;EAC5DG,oBAAoB,CAACC,IAAI,GACvBD,oBAAoB,CAACE,oBAAoB,GAAGP,cAAc;EAE5D,MAAMQ,iBAAiB,GACrBH,oBAAoB,CAACC,IAAI,GAAGH,yBAAyB,CAACG,IAAI;EAE5D,OAAOE,iBAAiB,GAAGT,QAAQ;AACrC","ignoreList":[]}
diff --git a/lib/module/helper/coordinateConversion.js b/lib/module/helper/coordinateConversion.js
index cd2e16a..97c2442 100644
--- a/lib/module/helper/coordinateConversion.js
+++ b/lib/module/helper/coordinateConversion.js
@@ -9,6 +9,7 @@ export const defaultTransformSubjectData = {
originalPageX: 0,
originalPageY: 0
};
+
/**
* Assuming you have an image that's being resized to fit into a container
* using the "contain" resize mode. You can use this function to calculate the
@@ -20,7 +21,6 @@ export const defaultTransformSubjectData = {
* @param imgSize
* @param containerSize
*/
-
export function applyContainResizeMode(imgSize, containerSize) {
const {
width: imageWidth,
@@ -33,7 +33,6 @@ export function applyContainResizeMode(imgSize, containerSize) {
const imageAspect = imageWidth / imageHeight;
const areaAspect = areaWidth / areaHeight;
let newSize;
-
if (imageAspect >= areaAspect) {
// longest edge is horizontal
newSize = {
@@ -47,7 +46,6 @@ export function applyContainResizeMode(imgSize, containerSize) {
height: areaHeight
};
}
-
if (isNaN(newSize.height)) newSize.height = areaHeight;
if (isNaN(newSize.width)) newSize.width = areaWidth;
const scale = imageWidth ? newSize.width / imageWidth : newSize.height / imageHeight;
@@ -60,12 +58,12 @@ export function applyContainResizeMode(imgSize, containerSize) {
scale
};
}
+
/**
* get the coord of image's origin relative to the transformSubject
* @param resizedImageSize
* @param transformSubject
*/
-
export function getImageOriginOnTransformSubject(resizedImageSize, transformSubject) {
const {
offsetX,
@@ -79,6 +77,7 @@ export function getImageOriginOnTransformSubject(resizedImageSize, transformSubj
y: offsetY * zoomLevel + originalHeight / 2 - resizedImageSize.height / 2 * zoomLevel
};
}
+
/**
* Translates the coord system of a point from the viewport's space to the image's space
*
@@ -88,7 +87,6 @@ export function getImageOriginOnTransformSubject(resizedImageSize, transformSubj
*
* @return {Vec2D} returns null if point is out of the sheet's bound
*/
-
export function viewportPositionToImagePosition({
viewportPosition,
imageSize,
diff --git a/lib/module/helper/coordinateConversion.js.map b/lib/module/helper/coordinateConversion.js.map
index dd0e207..b6b0ab8 100644
--- a/lib/module/helper/coordinateConversion.js.map
+++ b/lib/module/helper/coordinateConversion.js.map
@@ -1 +1 @@
-{"version":3,"sources":["helper/coordinateConversion.ts"],"names":["defaultTransformSubjectData","offsetX","offsetY","zoomLevel","originalWidth","originalHeight","originalPageX","originalPageY","applyContainResizeMode","imgSize","containerSize","width","imageWidth","height","imageHeight","areaWidth","areaHeight","imageAspect","areaAspect","newSize","isNaN","scale","isFinite","size","getImageOriginOnTransformSubject","resizedImageSize","transformSubject","x","y","viewportPositionToImagePosition","viewportPosition","imageSize","zoomableEvent","resizedImgSize","resizedImgScale","sheetOriginOnContainer","pointOnSheet"],"mappings":";;AAEA,OAAO,MAAMA,2BAA8C,GAAG;AAC5DC,EAAAA,OAAO,EAAE,CADmD;AAE5DC,EAAAA,OAAO,EAAE,CAFmD;AAG5DC,EAAAA,SAAS,EAAE,CAHiD;AAI5DC,EAAAA,aAAa,EAAE,CAJ6C;AAK5DC,EAAAA,cAAc,EAAE,CAL4C;AAM5DC,EAAAA,aAAa,EAAE,CAN6C;AAO5DC,EAAAA,aAAa,EAAE;AAP6C,CAAvD;AAUP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,sBAAT,CACLC,OADK,EAELC,aAFK,EAG0D;AAC/D,QAAM;AAAEC,IAAAA,KAAK,EAAEC,UAAT;AAAqBC,IAAAA,MAAM,EAAEC;AAA7B,MAA6CL,OAAnD;AACA,QAAM;AAAEE,IAAAA,KAAK,EAAEI,SAAT;AAAoBF,IAAAA,MAAM,EAAEG;AAA5B,MAA2CN,aAAjD;AACA,QAAMO,WAAW,GAAGL,UAAU,GAAGE,WAAjC;AACA,QAAMI,UAAU,GAAGH,SAAS,GAAGC,UAA/B;AAEA,MAAIG,OAAJ;;AACA,MAAIF,WAAW,IAAIC,UAAnB,EAA+B;AAC7B;AACAC,IAAAA,OAAO,GAAG;AAAER,MAAAA,KAAK,EAAEI,SAAT;AAAoBF,MAAAA,MAAM,EAAEE,SAAS,GAAGE;AAAxC,KAAV;AACD,GAHD,MAGO;AACL;AACAE,IAAAA,OAAO,GAAG;AAAER,MAAAA,KAAK,EAAEK,UAAU,GAAGC,WAAtB;AAAmCJ,MAAAA,MAAM,EAAEG;AAA3C,KAAV;AACD;;AAED,MAAII,KAAK,CAACD,OAAO,CAACN,MAAT,CAAT,EAA2BM,OAAO,CAACN,MAAR,GAAiBG,UAAjB;AAC3B,MAAII,KAAK,CAACD,OAAO,CAACR,KAAT,CAAT,EAA0BQ,OAAO,CAACR,KAAR,GAAgBI,SAAhB;AAE1B,QAAMM,KAAK,GAAGT,UAAU,GACpBO,OAAO,CAACR,KAAR,GAAgBC,UADI,GAEpBO,OAAO,CAACN,MAAR,GAAiBC,WAFrB;AAIA,MAAI,CAACQ,QAAQ,CAACD,KAAD,CAAb,EAAsB,OAAO;AAAEE,IAAAA,IAAI,EAAE,IAAR;AAAcF,IAAAA,KAAK,EAAE;AAArB,GAAP;AAEtB,SAAO;AACLE,IAAAA,IAAI,EAAEJ,OADD;AAELE,IAAAA;AAFK,GAAP;AAID;AAED;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASG,gCAAT,CACLC,gBADK,EAELC,gBAFK,EAGL;AACA,QAAM;AAAEzB,IAAAA,OAAF;AAAWC,IAAAA,OAAX;AAAoBC,IAAAA,SAApB;AAA+BC,IAAAA,aAA/B;AAA8CC,IAAAA;AAA9C,MACJqB,gBADF;AAEA,SAAO;AACLC,IAAAA,CAAC,EACC1B,OAAO,GAAGE,SAAV,GACAC,aAAa,GAAG,CADhB,GAECqB,gBAAgB,CAACd,KAAjB,GAAyB,CAA1B,GAA+BR,SAJ5B;AAKLyB,IAAAA,CAAC,EACC1B,OAAO,GAAGC,SAAV,GACAE,cAAc,GAAG,CADjB,GAECoB,gBAAgB,CAACZ,MAAjB,GAA0B,CAA3B,GAAgCV;AAR7B,GAAP;AAUD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAAS0B,+BAAT,CAAyC;AAC9CC,EAAAA,gBAD8C;AAE9CC,EAAAA,SAF8C;AAG9CC,EAAAA;AAH8C,CAAzC,EAQU;AACf,QAAM;AAAET,IAAAA,IAAI,EAAEU,cAAR;AAAwBZ,IAAAA,KAAK,EAAEa;AAA/B,MACJ1B,sBAAsB,CAACuB,SAAD,EAAY;AAChCpB,IAAAA,KAAK,EAAEqB,aAAa,CAAC5B,aADW;AAEhCS,IAAAA,MAAM,EAAEmB,aAAa,CAAC3B;AAFU,GAAZ,CADxB;AAMA,MAAI6B,eAAe,IAAI,IAAvB,EAA6B,OAAO,IAAP;AAE7B,QAAMC,sBAAsB,GAAGX,gCAAgC,CAC7DS,cAD6D,EAE7DD,aAF6D,CAA/D;AAKA,QAAMI,YAAY,GAAG;AACnBT,IAAAA,CAAC,EACC,CAACG,gBAAgB,CAACH,CAAjB,GAAqBQ,sBAAsB,CAACR,CAA7C,IACAK,aAAa,CAAC7B,SADd,GAEA+B,eAJiB;AAKnBN,IAAAA,CAAC,EACC,CAACE,gBAAgB,CAACF,CAAjB,GAAqBO,sBAAsB,CAACP,CAA7C,IACAI,aAAa,CAAC7B,SADd,GAEA+B;AARiB,GAArB;AAWA,SAAOE,YAAP;AACD","sourceRoot":"../../../src"}
+{"version":3,"names":["defaultTransformSubjectData","offsetX","offsetY","zoomLevel","originalWidth","originalHeight","originalPageX","originalPageY","applyContainResizeMode","imgSize","containerSize","width","imageWidth","height","imageHeight","areaWidth","areaHeight","imageAspect","areaAspect","newSize","isNaN","scale","isFinite","size","getImageOriginOnTransformSubject","resizedImageSize","transformSubject","x","y","viewportPositionToImagePosition","viewportPosition","imageSize","zoomableEvent","resizedImgSize","resizedImgScale","sheetOriginOnContainer","pointOnSheet"],"sourceRoot":"../../../src","sources":["helper/coordinateConversion.ts"],"mappings":"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","ignoreList":[]}
diff --git a/lib/module/helper/index.js b/lib/module/helper/index.js
index 2c83de5..bdce1d5 100644
--- a/lib/module/helper/index.js
+++ b/lib/module/helper/index.js
@@ -1,6 +1,7 @@
"use strict";
export { calcNewScaledOffsetForZoomCentering } from './calcNewScaledOffsetForZoomCentering';
+
/**
* Calculates the gesture center point relative to the page coordinate system
*
@@ -12,11 +13,9 @@ export { calcNewScaledOffsetForZoomCentering } from './calcNewScaledOffsetForZoo
* because gestureState.moveX/Y is messed up on real device
* (Sometimes it's the center point, but sometimes it randomly takes the position of one of the touches)
*/
-
export function calcGestureCenterPoint(e, gestureState) {
const touches = e.nativeEvent.touches;
if (!touches[0]) return null;
-
if (gestureState.numberActiveTouches === 2) {
if (!touches[1]) return null;
return {
@@ -24,14 +23,12 @@ export function calcGestureCenterPoint(e, gestureState) {
y: (touches[0].pageY + touches[1].pageY) / 2
};
}
-
if (gestureState.numberActiveTouches === 1) {
return {
x: touches[0].pageX,
y: touches[0].pageY
};
}
-
return null;
}
export function calcGestureTouchDistance(e, gestureState) {
diff --git a/lib/module/helper/index.js.map b/lib/module/helper/index.js.map
index 3a2fb9e..0631c9e 100644
--- a/lib/module/helper/index.js.map
+++ b/lib/module/helper/index.js.map
@@ -1 +1 @@
-{"version":3,"sources":["helper/index.ts"],"names":["calcNewScaledOffsetForZoomCentering","calcGestureCenterPoint","e","gestureState","touches","nativeEvent","numberActiveTouches","x","pageX","y","pageY","calcGestureTouchDistance","dx","Math","abs","dy","sqrt"],"mappings":";;AAIA,SAASA,mCAAT,QAAoD,uCAApD;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,sBAAT,CACLC,CADK,EAELC,YAFK,EAGS;AACd,QAAMC,OAAO,GAAGF,CAAC,CAACG,WAAF,CAAcD,OAA9B;AACA,MAAI,CAACA,OAAO,CAAC,CAAD,CAAZ,EAAiB,OAAO,IAAP;;AAEjB,MAAID,YAAY,CAACG,mBAAb,KAAqC,CAAzC,EAA4C;AAC1C,QAAI,CAACF,OAAO,CAAC,CAAD,CAAZ,EAAiB,OAAO,IAAP;AACjB,WAAO;AACLG,MAAAA,CAAC,EAAE,CAACH,OAAO,CAAC,CAAD,CAAP,CAAWI,KAAX,GAAmBJ,OAAO,CAAC,CAAD,CAAP,CAAWI,KAA/B,IAAwC,CADtC;AAELC,MAAAA,CAAC,EAAE,CAACL,OAAO,CAAC,CAAD,CAAP,CAAWM,KAAX,GAAmBN,OAAO,CAAC,CAAD,CAAP,CAAWM,KAA/B,IAAwC;AAFtC,KAAP;AAID;;AACD,MAAIP,YAAY,CAACG,mBAAb,KAAqC,CAAzC,EAA4C;AAC1C,WAAO;AACLC,MAAAA,CAAC,EAAEH,OAAO,CAAC,CAAD,CAAP,CAAWI,KADT;AAELC,MAAAA,CAAC,EAAEL,OAAO,CAAC,CAAD,CAAP,CAAWM;AAFT,KAAP;AAID;;AAED,SAAO,IAAP;AACD;AAED,OAAO,SAASC,wBAAT,CACLT,CADK,EAELC,YAFK,EAGU;AACf,QAAMC,OAAO,GAAGF,CAAC,CAACG,WAAF,CAAcD,OAA9B;AACA,MAAID,YAAY,CAACG,mBAAb,KAAqC,CAArC,IAA0C,CAACF,OAAO,CAAC,CAAD,CAAlD,IAAyD,CAACA,OAAO,CAAC,CAAD,CAArE,EACE,OAAO,IAAP;AAEF,QAAMQ,EAAE,GAAGC,IAAI,CAACC,GAAL,CAASV,OAAO,CAAC,CAAD,CAAP,CAAWI,KAAX,GAAmBJ,OAAO,CAAC,CAAD,CAAP,CAAWI,KAAvC,CAAX;AACA,QAAMO,EAAE,GAAGF,IAAI,CAACC,GAAL,CAASV,OAAO,CAAC,CAAD,CAAP,CAAWM,KAAX,GAAmBN,OAAO,CAAC,CAAD,CAAP,CAAWM,KAAvC,CAAX;AACA,SAAOG,IAAI,CAACG,IAAL,CAAUJ,EAAE,GAAGA,EAAL,GAAUG,EAAE,GAAGA,EAAzB,CAAP;AACD","sourceRoot":"../../../src"}
+{"version":3,"names":["calcNewScaledOffsetForZoomCentering","calcGestureCenterPoint","e","gestureState","touches","nativeEvent","numberActiveTouches","x","pageX","y","pageY","calcGestureTouchDistance","dx","Math","abs","dy","sqrt"],"sourceRoot":"../../../src","sources":["helper/index.ts"],"mappings":";;AAIA,SAASA,mCAAmC,QAAQ,uCAAuC;;AAE3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,sBAAsBA,CACpCC,CAAwB,EACxBC,YAAsC,EACxB;EACd,MAAMC,OAAO,GAAGF,CAAC,CAACG,WAAW,CAACD,OAAO;EACrC,IAAI,CAACA,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI;EAE5B,IAAID,YAAY,CAACG,mBAAmB,KAAK,CAAC,EAAE;IAC1C,IAAI,CAACF,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI;IAC5B,OAAO;MACLG,CAAC,EAAE,CAACH,OAAO,CAAC,CAAC,CAAC,CAACI,KAAK,GAAGJ,OAAO,CAAC,CAAC,CAAC,CAACI,KAAK,IAAI,CAAC;MAC5CC,CAAC,EAAE,CAACL,OAAO,CAAC,CAAC,CAAC,CAACM,KAAK,GAAGN,OAAO,CAAC,CAAC,CAAC,CAACM,KAAK,IAAI;IAC7C,CAAC;EACH;EACA,IAAIP,YAAY,CAACG,mBAAmB,KAAK,CAAC,EAAE;IAC1C,OAAO;MACLC,CAAC,EAAEH,OAAO,CAAC,CAAC,CAAC,CAACI,KAAK;MACnBC,CAAC,EAAEL,OAAO,CAAC,CAAC,CAAC,CAACM;IAChB,CAAC;EACH;EAEA,OAAO,IAAI;AACb;AAEA,OAAO,SAASC,wBAAwBA,CACtCT,CAAwB,EACxBC,YAAsC,EACvB;EACf,MAAMC,OAAO,GAAGF,CAAC,CAACG,WAAW,CAACD,OAAO;EACrC,IAAID,YAAY,CAACG,mBAAmB,KAAK,CAAC,IAAI,CAACF,OAAO,CAAC,CAAC,CAAC,IAAI,CAACA,OAAO,CAAC,CAAC,CAAC,EACtE,OAAO,IAAI;EAEb,MAAMQ,EAAE,GAAGC,IAAI,CAACC,GAAG,CAACV,OAAO,CAAC,CAAC,CAAC,CAACI,KAAK,GAAGJ,OAAO,CAAC,CAAC,CAAC,CAACI,KAAK,CAAC;EACxD,MAAMO,EAAE,GAAGF,IAAI,CAACC,GAAG,CAACV,OAAO,CAAC,CAAC,CAAC,CAACM,KAAK,GAAGN,OAAO,CAAC,CAAC,CAAC,CAACM,KAAK,CAAC;EACxD,OAAOG,IAAI,CAACG,IAAI,CAACJ,EAAE,GAAGA,EAAE,GAAGG,EAAE,GAAGA,EAAE,CAAC;AACrC","ignoreList":[]}
diff --git a/lib/module/hooks/useLatestCallback.js b/lib/module/hooks/useLatestCallback.js
index 6e0ca7b..23305ce 100644
--- a/lib/module/hooks/useLatestCallback.js
+++ b/lib/module/hooks/useLatestCallback.js
@@ -1,11 +1,11 @@
"use strict";
import { useRef } from 'react';
+
/**
* A hook that returns a stable callback reference that always calls the latest version of the function.
* This avoids the need to include the callback in dependency arrays while ensuring the latest version is called.
*/
-
export const useLatestCallback = callback => {
const ref = useRef(callback);
ref.current = callback;
diff --git a/lib/module/hooks/useLatestCallback.js.map b/lib/module/hooks/useLatestCallback.js.map
index 5d8e1ec..98921a8 100644
--- a/lib/module/hooks/useLatestCallback.js.map
+++ b/lib/module/hooks/useLatestCallback.js.map
@@ -1 +1 @@
-{"version":3,"sources":["hooks/useLatestCallback.ts"],"names":["useRef","useLatestCallback","callback","ref","current","args"],"mappings":";;AAAA,SAASA,MAAT,QAAuB,OAAvB;AAEA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,iBAAiB,GAC5BC,QAD+B,IAE5B;AACH,QAAMC,GAAG,GAAGH,MAAM,CAACE,QAAD,CAAlB;AACAC,EAAAA,GAAG,CAACC,OAAJ,GAAcF,QAAd;AAEA,SAAOF,MAAM,CAAkB,CAAC,GAAGK,IAAJ,KAAaF,GAAG,CAACC,OAAJ,CAAY,GAAGC,IAAf,CAA/B,CAAN,CAA2DD,OAAlE;AACD,CAPM","sourceRoot":"../../../src"}
+{"version":3,"names":["useRef","useLatestCallback","callback","ref","current","args"],"sourceRoot":"../../../src","sources":["hooks/useLatestCallback.ts"],"mappings":";;AAAA,SAASA,MAAM,QAAQ,OAAO;;AAE9B;AACA;AACA;AACA;AACA,OAAO,MAAMC,iBAAiB,GAC5BC,QAAmC,IAChC;EACH,MAAMC,GAAG,GAAGH,MAAM,CAACE,QAAQ,CAAC;EAC5BC,GAAG,CAACC,OAAO,GAAGF,QAAQ;EAEtB,OAAOF,MAAM,CAAkB,CAAC,GAAGK,IAAI,KAAKF,GAAG,CAACC,OAAO,CAAC,GAAGC,IAAI,CAAC,CAAC,CAACD,OAAO;AAC3E,CAAC","ignoreList":[]}
diff --git a/lib/module/index.js b/lib/module/index.js
index aaecdc0..bd05c56 100644
--- a/lib/module/index.js
+++ b/lib/module/index.js
@@ -2,6 +2,7 @@
import { applyContainResizeMode, getImageOriginOnTransformSubject, viewportPositionToImagePosition } from './helper/coordinateConversion';
import ReactNativeZoomableView from './ReactNativeZoomableView';
-export { // Helper functions for coordinate conversion
+export {
+// Helper functions for coordinate conversion
applyContainResizeMode, getImageOriginOnTransformSubject, ReactNativeZoomableView, viewportPositionToImagePosition };
//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/lib/module/index.js.map b/lib/module/index.js.map
index 2f14644..add721f 100644
--- a/lib/module/index.js.map
+++ b/lib/module/index.js.map
@@ -1 +1 @@
-{"version":3,"sources":["index.tsx"],"names":["applyContainResizeMode","getImageOriginOnTransformSubject","viewportPositionToImagePosition","ReactNativeZoomableView"],"mappings":";;AAAA,SACEA,sBADF,EAEEC,gCAFF,EAGEC,+BAHF,QAIO,+BAJP;AAKA,OAAOC,uBAAP,MAAoC,2BAApC;AAMA,SACE;AACAH,sBAFF,EAGEC,gCAHF,EAIEE,uBAJF,EAMED,+BANF","sourceRoot":"../../src"}
+{"version":3,"names":["applyContainResizeMode","getImageOriginOnTransformSubject","viewportPositionToImagePosition","ReactNativeZoomableView"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SACEA,sBAAsB,EACtBC,gCAAgC,EAChCC,+BAA+B,QAC1B,+BAA+B;AACtC,OAAOC,uBAAuB,MAAM,2BAA2B;AAM/D;AACE;AACAH,sBAAsB,EACtBC,gCAAgC,EAChCE,uBAAuB,EAEvBD,+BAA+B","ignoreList":[]}
diff --git a/lib/module/typings/index.js.map b/lib/module/typings/index.js.map
index 11cbb3f..533f3a9 100644
--- a/lib/module/typings/index.js.map
+++ b/lib/module/typings/index.js.map
@@ -1 +1 @@
-{"version":3,"sources":["typings/index.ts"],"names":["SwipeDirection"],"mappings":";;AASA,WAAYA,cAAZ,0BAAYA,cAAZ;AAAYA,EAAAA,cAAZ;AAAYA,EAAAA,cAAZ;AAAYA,EAAAA,cAAZ;AAAYA,EAAAA,cAAZ;AAAA,SAAYA,cAAZ;AAAA","sourceRoot":"../../../src"}
+{"version":3,"names":["SwipeDirection"],"sourceRoot":"../../../src","sources":["typings/index.ts"],"mappings":";;AASA,WAAYA,cAAc,0BAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAA,OAAdA,cAAc;AAAA","ignoreList":[]}
diff --git a/lib/typescript/ReactNativeZoomableView.d.ts b/lib/typescript/ReactNativeZoomableView.d.ts
index 2efe831..590c1b1 100644
--- a/lib/typescript/ReactNativeZoomableView.d.ts
+++ b/lib/typescript/ReactNativeZoomableView.d.ts
@@ -1,235 +1,14 @@
-///
-import { Component, RefObject } from 'react';
-import { GestureResponderEvent, PanResponderCallbacks, PanResponderGestureState, PanResponderInstance, View } from 'react-native';
-import { ReactNativeZoomableViewProps, ReactNativeZoomableViewState, Vec2D, ZoomableViewEvent } from './typings';
-declare class ReactNativeZoomableView extends Component {
- zoomSubjectWrapperRef: RefObject;
- gestureHandlers: PanResponderInstance;
- doubleTapFirstTapReleaseTimestamp: number | undefined;
- static defaultProps: {
- zoomEnabled: boolean;
- panEnabled: boolean;
- initialZoom: number;
- initialOffsetX: number;
- initialOffsetY: number;
- maxZoom: number;
- minZoom: number;
- pinchToZoomInSensitivity: number;
- pinchToZoomOutSensitivity: number;
- movementSensibility: number;
- doubleTapDelay: number;
- zoomStep: number;
- onLongPress: null;
- longPressDuration: number;
- contentWidth: undefined;
- contentHeight: undefined;
- visualTouchFeedbackEnabled: boolean;
- staticPinPosition: undefined;
- staticPinIcon: undefined;
- onStaticPinPositionChange: undefined;
- onStaticPinPositionMove: undefined;
- disablePanOnInitialZoom: boolean;
- };
- private panAnim;
- private readonly zoomAnim;
- private offsetX;
- private offsetY;
- private zoomLevel;
- private lastGestureCenterPosition;
- private lastGestureTouchDistance;
- private gestureType;
- private _gestureStarted;
- private set gestureStarted(value);
- get gestureStarted(): boolean;
- /**
- * Last press time (used to evaluate whether user double tapped)
- * @type {number}
- */
- private longPressTimeout;
- private onTransformInvocationInitialized;
- private singleTapTimeoutId;
- private touches;
- private doubleTapFirstTap;
- private measureZoomSubjectInterval;
- constructor(props: ReactNativeZoomableViewProps);
- componentDidUpdate(prevProps: ReactNativeZoomableViewProps, prevState: ReactNativeZoomableViewState): void;
- componentDidMount(): void;
- componentWillUnmount(): void;
- debouncedOnStaticPinPositionChange: import("lodash").DebouncedFunc<(position: Vec2D) => void | undefined>;
- /**
- * try to invoke onTransform
- * @private
- */
- _invokeOnTransform(): {
- successful: boolean;
- };
- /**
- * Returns additional information about components current state for external event hooks
- *
- * @returns {{}}
- * @private
- */
- _getZoomableViewEventObject(overwriteObj?: {}): ZoomableViewEvent;
- /**
- * Get the original box dimensions and save them for later use.
- * (They will be used to calculate boxBorders)
- *
- * @private
- */
- private measureZoomSubject;
- /**
- * Handles the start of touch events and checks for taps
- *
- * @param e
- * @param gestureState
- * @returns {boolean}
- *
- * @private
- */
- _handleStartShouldSetPanResponder: (e: GestureResponderEvent, gestureState: PanResponderGestureState) => boolean;
- /**
- * Calculates pinch distance
- *
- * @param e
- * @param gestureState
- * @private
- */
- _handlePanResponderGrant: NonNullable;
- /**
- * Handles the end of touch events
- *
- * @param e
- * @param gestureState
- *
- * @private
- */
- _handlePanResponderEnd: NonNullable;
- /**
- * Handles the actual movement of our pan responder
- *
- * @param e
- * @param gestureState
- *
- * @private
- */
- _handlePanResponderMove: (e: GestureResponderEvent, gestureState: PanResponderGestureState) => boolean | undefined;
- /**
- * Handles the pinch movement and zooming
- *
- * @param e
- * @param gestureState
- *
- * @private
- */
- _handlePinching(e: GestureResponderEvent, gestureState: PanResponderGestureState): void;
- /**
- * Used to debug pinch events
- * @param gestureResponderEvent
- * @param zoomCenter
- * @param points
- */
- _setPinchDebugPoints(gestureResponderEvent: GestureResponderEvent, zoomCenter: Vec2D, ...points: Vec2D[]): void;
- /**
- * Calculates the amount the offset should shift since the last position during panning
- *
- * @param {Vec2D} gestureCenterPoint
- *
- * @private
- */
- _calcOffsetShiftSinceLastGestureState(gestureCenterPoint: Vec2D): {
- x: number;
- y: number;
- } | null;
- /**
- * Handles movement by tap and move
- *
- * @param gestureState
- *
- * @private
- */
- _handleShifting(gestureState: PanResponderGestureState): void;
- /**
- * Set the state to offset moved
- *
- * @param {number} newOffsetX
- * @param {number} newOffsetY
- * @returns
- */
- _setNewOffsetPosition(newOffsetX: number, newOffsetY: number): void;
- /**
- * Check whether the press event is double tap
- * or single tap and handle the event accordingly
- *
- * @param e
- *
- * @private
- */
- private _resolveAndHandleTap;
- moveStaticPinTo: (position: Vec2D, duration?: number) => void;
- private _staticPinPosition;
- private _updateStaticPin;
- private _addTouch;
- private _removeTouch;
- /**
- * Handles the double tap event
- *
- * @param e
- *
- * @private
- */
- _handleDoubleTap(e: GestureResponderEvent): void;
- /**
- * Returns the next zoom step based on current step and zoomStep property.
- * If we are zoomed all the way in -> return to initialzoom
- *
- * @returns {*}
- */
- _getNextZoomStep(): number | undefined;
- /**
- * Zooms to a specific level. A "zoom center" can be provided, which specifies
- * the point that will remain in the same position on the screen after the zoom.
- * The coordinates of the zoom center is relative to the zoom subject.
- * { x: 0, y: 0 } is the very center of the zoom subject.
- *
- * @param newZoomLevel
- * @param zoomCenter - If not supplied, the container's center is the zoom center
- */
- zoomTo(newZoomLevel: number, zoomCenter?: Vec2D): boolean;
- /**
- * Zooms in or out by a specified change level
- * Use a positive number for `zoomLevelChange` to zoom in
- * Use a negative number for `zoomLevelChange` to zoom out
- *
- * Returns a promise if everything was updated and a boolean, whether it could be updated or if it exceeded the min/max zoom limits.
- *
- * @param {number | null} zoomLevelChange
- *
- * @return {bool}
- */
- zoomBy(zoomLevelChange: number): boolean;
- /**
- * Moves the zoomed view to a specified position
- * Returns a promise when finished
- *
- * @param {number} newOffsetX the new position we want to move it to (x-axis)
- * @param {number} newOffsetY the new position we want to move it to (y-axis)
- *
- * @return {bool}
- */
+import { ForwardRefRenderFunction } from 'react';
+import { ReactNativeZoomableViewProps, Vec2D } from './typings';
+type ReactNativeZoomableView = {
moveTo(newOffsetX: number, newOffsetY: number): void;
- /**
- * Moves the zoomed view by a certain amount.
- *
- * Returns a promise when finished
- *
- * @param {number} offsetChangeX the amount we want to move the offset by (x-axis)
- * @param {number} offsetChangeY the amount we want to move the offset by (y-axis)
- *
- * @return {bool}
- */
moveBy(offsetChangeX: number, offsetChangeY: number): void;
- render(): JSX.Element;
-}
+ zoomTo(newZoomLevel: number, zoomCenter?: Vec2D): boolean;
+ zoomBy(zoomLevelChange: number): boolean;
+ moveStaticPinTo: (position: Vec2D, duration?: number) => void;
+ readonly gestureStarted: boolean;
+};
+declare const ReactNativeZoomableView: ForwardRefRenderFunction;
export default ReactNativeZoomableView;
export { ReactNativeZoomableView };
//# sourceMappingURL=ReactNativeZoomableView.d.ts.map
\ No newline at end of file
diff --git a/lib/typescript/ReactNativeZoomableView.d.ts.map b/lib/typescript/ReactNativeZoomableView.d.ts.map
index bc63e01..fe4cb85 100644
--- a/lib/typescript/ReactNativeZoomableView.d.ts.map
+++ b/lib/typescript/ReactNativeZoomableView.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"ReactNativeZoomableView.d.ts","sourceRoot":"","sources":["../../src/ReactNativeZoomableView.tsx"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"ReactNativeZoomableView.d.ts","sourceRoot":"","sources":["../../src/ReactNativeZoomableView.tsx"],"names":[],"mappings":"AACA,OAAc,EACZ,wBAAwB,EAOzB,MAAM,OAAO,CAAC;AAuBf,OAAO,EACL,4BAA4B,EAE5B,KAAK,EAEN,MAAM,WAAW,CAAC;AAEnB,KAAK,uBAAuB,GAAG;IAC7B,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACrD,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3D,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;IAC1D,MAAM,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC;IACzC,eAAe,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9D,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC,CAAC;AAEF,QAAA,MAAM,uBAAuB,EAAE,wBAAwB,CACrD,uBAAuB,EACvB,4BAA4B,CAmkC7B,CAAC;AAkBF,eAAe,uBAAuB,CAAC;AAEvC,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/lib/typescript/components/AnimatedTouchFeedback.d.ts b/lib/typescript/components/AnimatedTouchFeedback.d.ts
index f0323bf..dd75f5a 100644
--- a/lib/typescript/components/AnimatedTouchFeedback.d.ts
+++ b/lib/typescript/components/AnimatedTouchFeedback.d.ts
@@ -1,8 +1,9 @@
+import React from 'react';
export declare const AnimatedTouchFeedback: ({ x, y, animationDelay, animationDuration, onAnimationDone, }: {
x: number;
y: number;
animationDuration: number;
animationDelay?: number | undefined;
onAnimationDone?: (() => void) | undefined;
-}) => JSX.Element;
+}) => React.JSX.Element;
//# sourceMappingURL=AnimatedTouchFeedback.d.ts.map
\ No newline at end of file
diff --git a/lib/typescript/components/AnimatedTouchFeedback.d.ts.map b/lib/typescript/components/AnimatedTouchFeedback.d.ts.map
index e169ac3..47da034 100644
--- a/lib/typescript/components/AnimatedTouchFeedback.d.ts.map
+++ b/lib/typescript/components/AnimatedTouchFeedback.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"AnimatedTouchFeedback.d.ts","sourceRoot":"","sources":["../../../src/components/AnimatedTouchFeedback.tsx"],"names":[],"mappings":"AAGA,eAAO,MAAM,qBAAqB;OAO7B,MAAM;OACN,MAAM;uBACU,MAAM;;6BAED,IAAI;iBAmD7B,CAAC"}
\ No newline at end of file
+{"version":3,"file":"AnimatedTouchFeedback.d.ts","sourceRoot":"","sources":["../../../src/components/AnimatedTouchFeedback.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAGjD,eAAO,MAAM,qBAAqB;OAO7B,MAAM;OACN,MAAM;uBACU,MAAM;;6BAED,IAAI;uBAmD7B,CAAC"}
\ No newline at end of file
diff --git a/lib/typescript/components/StaticPin.d.ts b/lib/typescript/components/StaticPin.d.ts
index 96d65ff..c19536f 100644
--- a/lib/typescript/components/StaticPin.d.ts
+++ b/lib/typescript/components/StaticPin.d.ts
@@ -14,5 +14,5 @@ export declare const StaticPin: ({ staticPinPosition, staticPinIcon, pinSize, on
onLongPress?: ((evt: GestureResponderEvent) => void) | undefined;
setPinSize: (size: Size2D) => void;
pinProps?: ViewProps | undefined;
-}) => JSX.Element;
+}) => React.JSX.Element;
//# sourceMappingURL=StaticPin.d.ts.map
\ No newline at end of file
diff --git a/lib/typescript/components/StaticPin.d.ts.map b/lib/typescript/components/StaticPin.d.ts.map
index 2427d03..b968077 100644
--- a/lib/typescript/components/StaticPin.d.ts.map
+++ b/lib/typescript/components/StaticPin.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"StaticPin.d.ts","sourceRoot":"","sources":["../../../src/components/StaticPin.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAEL,qBAAqB,EAGrB,wBAAwB,EAGxB,SAAS,EACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,eAAO,MAAM,SAAS;uBAUD;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;mBAC5B,MAAM,SAAS;aACrB,MAAM;IACf,wDAAwD;wBAEjD,qBAAqB,gBACZ,wBAAwB,KACnC,OAAO,GAAG,SAAS;qBACR,qBAAqB,KAAK,IAAI;yBAC1B,qBAAqB,KAAK,IAAI;uBAC/B,MAAM,KAAK,IAAI;;iBAiEnC,CAAC"}
\ No newline at end of file
+{"version":3,"file":"StaticPin.d.ts","sourceRoot":"","sources":["../../../src/components/StaticPin.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAEL,qBAAqB,EAGrB,wBAAwB,EAGxB,SAAS,EACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,eAAO,MAAM,SAAS;uBAUD;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;mBAC5B,MAAM,SAAS;aACrB,MAAM;IACf,wDAAwD;wBAEjD,qBAAqB,gBACZ,wBAAwB,KACnC,OAAO,GAAG,SAAS;qBACR,qBAAqB,KAAK,IAAI;yBAC1B,qBAAqB,KAAK,IAAI;uBAC/B,MAAM,KAAK,IAAI;;uBAiEnC,CAAC"}
\ No newline at end of file
diff --git a/lib/typescript/debugHelper/index.d.ts b/lib/typescript/debugHelper/index.d.ts
index 3d20405..b17e292 100644
--- a/lib/typescript/debugHelper/index.d.ts
+++ b/lib/typescript/debugHelper/index.d.ts
@@ -1,13 +1,14 @@
+import React from 'react';
export declare const DebugTouchPoint: ({ diameter, x, y, color, }: {
diameter?: number | undefined;
x?: number | undefined;
y?: number | undefined;
color?: string | undefined;
-}) => JSX.Element;
+}) => React.JSX.Element;
export declare const DebugRect: ({ height, x, y, color, }: {
height: number;
x: number;
y: number;
color: string;
-}) => JSX.Element;
+}) => React.JSX.Element;
//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/lib/typescript/debugHelper/index.d.ts.map b/lib/typescript/debugHelper/index.d.ts.map
index a2a282f..86a4d35 100644
--- a/lib/typescript/debugHelper/index.d.ts.map
+++ b/lib/typescript/debugHelper/index.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/debugHelper/index.tsx"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe;;;;;iBAuB3B,CAAC;AACF,eAAO,MAAM,SAAS;YAMZ,MAAM;OACX,MAAM;OACN,MAAM;WACF,MAAM;iBAkBd,CAAC"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/debugHelper/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,eAAO,MAAM,eAAe;;;;;uBAuB3B,CAAC;AACF,eAAO,MAAM,SAAS;YAMZ,MAAM;OACX,MAAM;OACN,MAAM;WACF,MAAM;uBAkBd,CAAC"}
\ No newline at end of file
diff --git a/package.json b/package.json
index 3a16d85..7b027da 100644
--- a/package.json
+++ b/package.json
@@ -77,6 +77,7 @@
"eslint-plugin-prettier": "^3.1.3",
"eslint-plugin-simple-import-sort": "^12.1.1",
"husky": "^4.2.5",
+ "lodash": "^4.17.21",
"pod-install": "^0.1.0",
"prettier": "^2.0.5",
"react": "17.0.2",
@@ -86,6 +87,7 @@
"typescript": "^4.9.5"
},
"peerDependencies": {
+ "lodash": "^4.17.21",
"react": ">=16.8.0",
"react-native": ">=0.79.0"
},
diff --git a/src/ReactNativeZoomableView.tsx b/src/ReactNativeZoomableView.tsx
index 12ccae4..b517c88 100644
--- a/src/ReactNativeZoomableView.tsx
+++ b/src/ReactNativeZoomableView.tsx
@@ -1,5 +1,13 @@
-import { debounce } from 'lodash';
-import React, { Component, createRef, RefObject } from 'react';
+import { debounce, defaults } from 'lodash';
+import React, {
+ ForwardRefRenderFunction,
+ useEffect,
+ useImperativeHandle,
+ useLayoutEffect,
+ useMemo,
+ useRef,
+ useState,
+} from 'react';
import {
Animated,
GestureResponderEvent,
@@ -21,34 +29,42 @@ import {
calcNewScaledOffsetForZoomCentering,
} from './helper';
import { viewportPositionToImagePosition } from './helper/coordinateConversion';
+import { useLatestCallback } from './hooks/useLatestCallback';
import {
ReactNativeZoomableViewProps,
- ReactNativeZoomableViewState,
- Size2D,
TouchPoint,
Vec2D,
ZoomableViewEvent,
} from './typings';
-const initialState: ReactNativeZoomableViewState = {
- originalWidth: 0,
- originalHeight: 0,
- originalPageX: 0,
- originalPageY: 0,
- originalX: 0,
- originalY: 0,
- pinSize: { width: 0, height: 0 },
+type ReactNativeZoomableView = {
+ moveTo(newOffsetX: number, newOffsetY: number): void;
+ moveBy(offsetChangeX: number, offsetChangeY: number): void;
+ zoomTo(newZoomLevel: number, zoomCenter?: Vec2D): boolean;
+ zoomBy(zoomLevelChange: number): boolean;
+ moveStaticPinTo: (position: Vec2D, duration?: number) => void;
+ readonly gestureStarted: boolean;
};
-class ReactNativeZoomableView extends Component<
- ReactNativeZoomableViewProps,
- ReactNativeZoomableViewState
-> {
- zoomSubjectWrapperRef: RefObject;
- gestureHandlers: PanResponderInstance;
- doubleTapFirstTapReleaseTimestamp: number | undefined;
-
- static defaultProps = {
+const ReactNativeZoomableView: ForwardRefRenderFunction<
+ ReactNativeZoomableView,
+ ReactNativeZoomableViewProps
+> = (props, ref) => {
+ const [originalWidth, setOriginalWidth] = useState(0);
+ const [originalHeight, setOriginalHeight] = useState(0);
+ const [originalPageX, setOriginalPageX] = useState(0);
+ const [originalPageY, setOriginalPageY] = useState(0);
+ const [originalX, setOriginalX] = useState(0);
+ const [originalY, setOriginalY] = useState(0);
+ const [pinSize, setPinSize] = useState({ width: 0, height: 0 });
+ const [debugPoints, setDebugPoints] = useState([]);
+ const [stateTouches, setStateTouches] = useState([]);
+
+ const zoomSubjectWrapperRef = useRef(null);
+ const gestureHandlers = useRef();
+ const doubleTapFirstTapReleaseTimestamp = useRef();
+
+ props = defaults({}, props, {
zoomEnabled: true,
panEnabled: true,
initialZoom: 1,
@@ -61,7 +77,7 @@ class ReactNativeZoomableView extends Component<
movementSensibility: 1,
doubleTapDelay: 300,
zoomStep: 0.5,
- onLongPress: null,
+ onLongPress: undefined,
longPressDuration: 700,
contentWidth: undefined,
contentHeight: undefined,
@@ -71,51 +87,39 @@ class ReactNativeZoomableView extends Component<
onStaticPinPositionChange: undefined,
onStaticPinPositionMove: undefined,
disablePanOnInitialZoom: false,
- };
-
- private panAnim = new Animated.ValueXY({ x: 0, y: 0 });
- private readonly zoomAnim = new Animated.Value(1);
+ });
- private offsetX = 0;
- private offsetY = 0;
+ const panAnim = useRef(new Animated.ValueXY({ x: 0, y: 0 }));
+ const zoomAnim = useRef(new Animated.Value(1));
- private zoomLevel = 1;
- private lastGestureCenterPosition: { x: number; y: number } | null = null;
- private lastGestureTouchDistance: number | null = null;
- private gestureType: 'pinch' | 'shift' | null;
+ const offsetX = useRef(0);
+ const offsetY = useRef(0);
- private _gestureStarted = false;
- private set gestureStarted(v: boolean) {
- this._gestureStarted = v;
- }
+ const zoomLevel = useRef(1);
+ const lastGestureCenterPosition = useRef<{ x: number; y: number } | null>(
+ null
+ );
+ const lastGestureTouchDistance = useRef(150);
+ const gestureType = useRef<'pinch' | 'shift'>();
- public get gestureStarted() {
- return this._gestureStarted;
- }
+ const gestureStarted = useRef(false);
/**
* Last press time (used to evaluate whether user double tapped)
- * @type {number}
*/
- private longPressTimeout: NodeJS.Timeout | null = null;
- private onTransformInvocationInitialized: boolean | undefined;
- private singleTapTimeoutId: NodeJS.Timeout | undefined;
- private touches: TouchPoint[] = [];
- private doubleTapFirstTap: TouchPoint | undefined;
- private measureZoomSubjectInterval: NodeJS.Timer | undefined;
-
- constructor(props: ReactNativeZoomableViewProps) {
- super(props);
- // This needs to be done before anything else to initialize the state.
- // Otherwise, the logic below may reference the state when it's undefined,
- // causing runtime errors.
- this.state = { ...initialState };
-
- this.gestureHandlers = PanResponder.create({
- onStartShouldSetPanResponder: this._handleStartShouldSetPanResponder,
- onPanResponderGrant: this._handlePanResponderGrant,
- onPanResponderMove: this._handlePanResponderMove,
- onPanResponderRelease: this._handlePanResponderEnd,
+ const longPressTimeout = useRef();
+ const onTransformInvocationInitialized = useRef();
+ const singleTapTimeoutId = useRef();
+ const touches = useRef([]);
+ const doubleTapFirstTap = useRef();
+ const measureZoomSubjectInterval = useRef();
+
+ useLayoutEffect(() => {
+ gestureHandlers.current = PanResponder.create({
+ onStartShouldSetPanResponder: _handleStartShouldSetPanResponder,
+ onPanResponderGrant: _handlePanResponderGrant,
+ onPanResponderMove: _handlePanResponderMove,
+ onPanResponderRelease: _handlePanResponderEnd,
onPanResponderTerminate: (evt, gestureState) => {
// We should also call _handlePanResponderEnd
// to properly perform cleanups when the gesture is terminated
@@ -123,114 +127,108 @@ class ReactNativeZoomableView extends Component<
// This also fixes a weird issue where
// on real device, sometimes onPanResponderRelease is not called when you lift 2 fingers up,
// but onPanResponderTerminate is called instead for no apparent reason.
- this._handlePanResponderEnd(evt, gestureState);
- this.props.onPanResponderTerminate?.(
+ _handlePanResponderEnd(evt, gestureState);
+ props.onPanResponderTerminate?.(
evt,
gestureState,
- this._getZoomableViewEventObject()
+ _getZoomableViewEventObject()
);
},
onPanResponderTerminationRequest: (evt, gestureState) =>
- !!this.props.onPanResponderTerminationRequest?.(
+ !!props.onPanResponderTerminationRequest?.(
evt,
gestureState,
- this._getZoomableViewEventObject()
+ _getZoomableViewEventObject()
),
// Defaults to true to prevent parent components, such as React Navigation's tab view, from taking over as responder.
onShouldBlockNativeResponder: (evt, gestureState) =>
- this.props.onShouldBlockNativeResponder?.(
+ props.onShouldBlockNativeResponder?.(
evt,
gestureState,
- this._getZoomableViewEventObject()
+ _getZoomableViewEventObject()
) ?? true,
onStartShouldSetPanResponderCapture: (evt, gestureState) =>
- !!this.props.onStartShouldSetPanResponderCapture?.(evt, gestureState),
+ !!props.onStartShouldSetPanResponderCapture?.(evt, gestureState),
onMoveShouldSetPanResponderCapture: (evt, gestureState) =>
- !!this.props.onMoveShouldSetPanResponderCapture?.(evt, gestureState),
+ !!props.onMoveShouldSetPanResponderCapture?.(evt, gestureState),
});
- this.zoomSubjectWrapperRef = createRef();
-
- if (this.props.zoomAnimatedValue)
- this.zoomAnim = this.props.zoomAnimatedValue;
- if (this.props.panAnimatedValueXY)
- this.panAnim = this.props.panAnimatedValueXY;
+ if (props.zoomAnimatedValue) zoomAnim.current = props.zoomAnimatedValue;
+ if (props.panAnimatedValueXY) panAnim.current = props.panAnimatedValueXY;
- if (this.props.initialZoom) this.zoomLevel = this.props.initialZoom;
- if (this.props.initialOffsetX != null)
- this.offsetX = this.props.initialOffsetX;
- if (this.props.initialOffsetY != null)
- this.offsetY = this.props.initialOffsetY;
+ if (props.initialZoom) zoomLevel.current = props.initialZoom;
+ if (props.initialOffsetX != null) offsetX.current = props.initialOffsetX;
+ if (props.initialOffsetY != null) offsetY.current = props.initialOffsetY;
- this.panAnim.setValue({ x: this.offsetX, y: this.offsetY });
- this.zoomAnim.setValue(this.zoomLevel);
- this.panAnim.addListener(({ x, y }) => {
- this.offsetX = x;
- this.offsetY = y;
+ panAnim.current.setValue({ x: offsetX.current, y: offsetY.current });
+ zoomAnim.current.setValue(zoomLevel.current);
+ panAnim.current.addListener(({ x, y }) => {
+ offsetX.current = x;
+ offsetY.current = y;
});
- this.zoomAnim.addListener(({ value }) => {
- this.zoomLevel = value;
+ zoomAnim.current.addListener(({ value }) => {
+ zoomLevel.current = value;
});
-
- this.lastGestureTouchDistance = 150;
-
- this.gestureType = null;
- }
-
- componentDidUpdate(
- prevProps: ReactNativeZoomableViewProps,
- prevState: ReactNativeZoomableViewState
- ) {
- const { zoomEnabled, initialZoom } = this.props;
- if (prevProps.zoomEnabled && !zoomEnabled && initialZoom) {
- this.zoomLevel = initialZoom;
- this.zoomAnim.setValue(this.zoomLevel);
- }
- if (
- !this.onTransformInvocationInitialized &&
- this._invokeOnTransform().successful
- ) {
- this.panAnim.addListener(() => this._invokeOnTransform());
- this.zoomAnim.addListener(() => this._invokeOnTransform());
- this.onTransformInvocationInitialized = true;
+ }, []);
+
+ const { zoomEnabled } = props;
+ const initialZoom = useRef(props.initialZoom);
+ initialZoom.current = props.initialZoom;
+ useLayoutEffect(() => {
+ if (!zoomEnabled && initialZoom.current) {
+ zoomLevel.current = initialZoom.current;
+ zoomAnim.current.setValue(zoomLevel.current);
}
+ }, [zoomEnabled]);
- const currState = this.state;
- const originalMeasurementsChanged =
- currState.originalHeight !== prevState.originalHeight ||
- currState.originalWidth !== prevState.originalWidth ||
- currState.originalPageX !== prevState.originalPageX ||
- currState.originalPageY !== prevState.originalPageY ||
- currState.originalX !== prevState.originalX ||
- currState.originalY !== prevState.originalY;
+ useLayoutEffect(
+ () => {
+ if (
+ !onTransformInvocationInitialized.current &&
+ _invokeOnTransform().successful
+ ) {
+ panAnim.current.addListener(() => _invokeOnTransform());
+ zoomAnim.current.addListener(() => _invokeOnTransform());
+ onTransformInvocationInitialized.current = true;
+ }
+ },
+ // FIXME: deps has implicit coupling with internal _invokeOnTransform logic
+ [originalWidth, originalHeight]
+ );
- const staticPinPositionChanged =
- prevProps.staticPinPosition?.x !== this.props.staticPinPosition?.x ||
- prevProps.staticPinPosition?.y !== this.props.staticPinPosition?.y;
+ const onLayout = useRef(props.onLayout);
+ onLayout.current = props.onLayout;
+ // Handle original measurements changed
+ useLayoutEffect(() => {
// We use a custom `onLayout` event, so the clients can stay in-sync
// with when the internal measurements are actually saved to the state,
// thus helping them apply transformations at more accurate timings
- if (originalMeasurementsChanged) {
- const layout = {
- width: currState.originalWidth,
- height: currState.originalHeight,
- x: currState.originalX,
- y: currState.originalY,
- };
- this.props.onLayout?.({ nativeEvent: { layout } });
- }
-
- if (
- this.onTransformInvocationInitialized &&
- (originalMeasurementsChanged || staticPinPositionChanged)
- ) {
- this._invokeOnTransform();
- }
- }
-
- componentDidMount() {
- this.measureZoomSubject();
+ const layout = {
+ width: originalWidth,
+ height: originalHeight,
+ x: originalX,
+ y: originalY,
+ };
+ onLayout.current?.({ nativeEvent: { layout } });
+
+ if (onTransformInvocationInitialized.current) _invokeOnTransform();
+ }, [
+ originalHeight,
+ originalWidth,
+ originalPageX,
+ originalPageY,
+ originalX,
+ originalY,
+ ]);
+
+ // Handle staticPinPosition changed
+ useLayoutEffect(() => {
+ if (onTransformInvocationInitialized.current) _invokeOnTransform();
+ }, [props.staticPinPosition?.x, props.staticPinPosition?.y]);
+
+ useEffect(() => {
+ measureZoomSubject();
// We've already run `grabZoomSubjectOriginalMeasurements` at various events
// to make sure the measurements are promptly updated.
// However, there might be cases we haven't accounted for, especially when
@@ -238,39 +236,43 @@ class ReactNativeZoomableView extends Component<
// we'll use an interval here to ensure we're always up-to-date.
// The `setState` in `grabZoomSubjectOriginalMeasurements` won't trigger a rerender
// if the values given haven't changed, so we're not running performance risk here.
- this.measureZoomSubjectInterval = setInterval(this.measureZoomSubject, 1e3);
- }
+ measureZoomSubjectInterval.current = setInterval(measureZoomSubject, 1e3);
+
+ return () => {
+ measureZoomSubjectInterval.current &&
+ clearInterval(measureZoomSubjectInterval.current);
+ };
+ }, []);
- componentWillUnmount() {
- this.measureZoomSubjectInterval &&
- clearInterval(this.measureZoomSubjectInterval);
- }
+ const onStaticPinPositionChange = useLatestCallback(
+ props.onStaticPinPositionChange || (() => undefined)
+ );
- debouncedOnStaticPinPositionChange = debounce(
- (position: Vec2D) => this.props.onStaticPinPositionChange?.(position),
- 100
+ const debouncedOnStaticPinPositionChange = useMemo(
+ () => debounce(onStaticPinPositionChange, 100),
+ []
);
/**
* try to invoke onTransform
* @private
*/
- _invokeOnTransform() {
- const zoomableViewEvent = this._getZoomableViewEventObject();
- const position = this._staticPinPosition();
+ const _invokeOnTransform = useLatestCallback(() => {
+ const zoomableViewEvent = _getZoomableViewEventObject();
+ const position = _staticPinPosition();
if (!zoomableViewEvent.originalWidth || !zoomableViewEvent.originalHeight)
return { successful: false };
- this.props.onTransform?.(zoomableViewEvent);
+ props.onTransform?.(zoomableViewEvent);
if (position) {
- this.props.onStaticPinPositionMove?.(position);
- this.debouncedOnStaticPinPositionChange(position);
+ props.onStaticPinPositionMove?.(position);
+ debouncedOnStaticPinPositionChange(position);
}
return { successful: true };
- }
+ });
/**
* Returns additional information about components current state for external event hooks
@@ -278,18 +280,20 @@ class ReactNativeZoomableView extends Component<
* @returns {{}}
* @private
*/
- _getZoomableViewEventObject(overwriteObj = {}): ZoomableViewEvent {
- return {
- zoomLevel: this.zoomLevel,
- offsetX: this.offsetX,
- offsetY: this.offsetY,
- originalHeight: this.state.originalHeight,
- originalWidth: this.state.originalWidth,
- originalPageX: this.state.originalPageX,
- originalPageY: this.state.originalPageY,
- ...overwriteObj,
- } as ZoomableViewEvent;
- }
+ const _getZoomableViewEventObject = useLatestCallback(
+ (overwriteObj: Partial = {}): ZoomableViewEvent => {
+ return {
+ zoomLevel: zoomLevel.current,
+ offsetX: offsetX.current,
+ offsetY: offsetY.current,
+ originalHeight,
+ originalWidth,
+ originalPageX,
+ originalPageY,
+ ...overwriteObj,
+ };
+ }
+ );
/**
* Get the original box dimensions and save them for later use.
@@ -297,7 +301,7 @@ class ReactNativeZoomableView extends Component<
*
* @private
*/
- private measureZoomSubject = () => {
+ const measureZoomSubject = useLatestCallback(() => {
// make sure we measure after animations are complete
requestAnimationFrame(() => {
// this setTimeout is here to fix a weird issue on iOS where the measurements are all `0`
@@ -309,39 +313,24 @@ class ReactNativeZoomableView extends Component<
// in which case these measurements will not represent the true "original" measurements.
// We just need to make sure the zoomSubjectWrapper perfectly aligns with the zoomSubject
// (no border, space, or anything between them)
- this.zoomSubjectWrapperRef.current?.measure(
+ zoomSubjectWrapperRef.current?.measure(
(x, y, width, height, pageX, pageY) => {
// When the component is off-screen, these become all 0s, so we don't set them
// to avoid messing up calculations, especially ones that are done right after
// the component transitions from hidden to visible.
if (!pageX && !pageY && !width && !height) return;
- // If these values are all the same, don't re-set them in state
- // this way we don't re-render
- if (
- this.state.originalX === x &&
- this.state.originalY === y &&
- this.state.originalWidth === width &&
- this.state.originalHeight === height &&
- this.state.originalPageX === pageX &&
- this.state.originalPageY === pageY
- ) {
- return;
- }
-
- this.setState({
- originalX: x,
- originalY: y,
- originalWidth: width,
- originalHeight: height,
- originalPageX: pageX,
- originalPageY: pageY,
- });
+ setOriginalX(x);
+ setOriginalY(y);
+ setOriginalWidth(width);
+ setOriginalHeight(height);
+ setOriginalPageX(pageX);
+ setOriginalPageY(pageY);
}
);
});
});
- };
+ });
/**
* Handles the start of touch events and checks for taps
@@ -352,25 +341,24 @@ class ReactNativeZoomableView extends Component<
*
* @private
*/
- _handleStartShouldSetPanResponder = (
- e: GestureResponderEvent,
- gestureState: PanResponderGestureState
- ) => {
- if (this.props.onStartShouldSetPanResponder) {
- this.props.onStartShouldSetPanResponder(
- e,
- gestureState,
- this._getZoomableViewEventObject(),
- false
- );
- }
+ const _handleStartShouldSetPanResponder = useLatestCallback(
+ (e: GestureResponderEvent, gestureState: PanResponderGestureState) => {
+ if (props.onStartShouldSetPanResponder) {
+ props.onStartShouldSetPanResponder(
+ e,
+ gestureState,
+ _getZoomableViewEventObject(),
+ false
+ );
+ }
- // Always set pan responder on start
- // of gesture so we can handle tap.
- // "Pan threshold validation" will be handled
- // in `onPanResponderMove` instead of in `onMoveShouldSetPanResponder`
- return true;
- };
+ // Always set pan responder on start
+ // of gesture so we can handle tap.
+ // "Pan threshold validation" will be handled
+ // in `onPanResponderMove` instead of in `onMoveShouldSetPanResponder`
+ return true;
+ }
+ );
/**
* Calculates pinch distance
@@ -379,31 +367,23 @@ class ReactNativeZoomableView extends Component<
* @param gestureState
* @private
*/
- _handlePanResponderGrant: NonNullable<
+ const _handlePanResponderGrant: NonNullable<
PanResponderCallbacks['onPanResponderGrant']
- > = (e, gestureState) => {
- if (this.props.onLongPress) {
+ > = useLatestCallback((e, gestureState) => {
+ if (props.onLongPress) {
e.persist();
- this.longPressTimeout = setTimeout(() => {
- this.props.onLongPress?.(
- e,
- gestureState,
- this._getZoomableViewEventObject()
- );
- this.longPressTimeout = null;
- }, this.props.longPressDuration);
+ longPressTimeout.current = setTimeout(() => {
+ props.onLongPress?.(e, gestureState, _getZoomableViewEventObject());
+ longPressTimeout.current = undefined;
+ }, props.longPressDuration);
}
- this.props.onPanResponderGrant?.(
- e,
- gestureState,
- this._getZoomableViewEventObject()
- );
+ props.onPanResponderGrant?.(e, gestureState, _getZoomableViewEventObject());
- this.panAnim.stopAnimation();
- this.zoomAnim.stopAnimation();
- this.gestureStarted = true;
- };
+ panAnim.current.stopAnimation();
+ zoomAnim.current.stopAnimation();
+ gestureStarted.current = true;
+ });
/**
* Handles the end of touch events
@@ -413,49 +393,37 @@ class ReactNativeZoomableView extends Component<
*
* @private
*/
- _handlePanResponderEnd: NonNullable<
+ const _handlePanResponderEnd: NonNullable<
PanResponderCallbacks['onPanResponderEnd']
- > = (e, gestureState) => {
- if (!this.gestureType) {
- this._resolveAndHandleTap(e);
+ > = useLatestCallback((e, gestureState) => {
+ if (!gestureType.current) {
+ _resolveAndHandleTap(e);
}
- this.setState({ debugPoints: [] });
+ setDebugPoints([]);
- this.lastGestureCenterPosition = null;
+ lastGestureCenterPosition.current = null;
- if (this.longPressTimeout) {
- clearTimeout(this.longPressTimeout);
- this.longPressTimeout = null;
+ if (longPressTimeout.current) {
+ clearTimeout(longPressTimeout.current);
+ longPressTimeout.current = undefined;
}
- this.props.onPanResponderEnd?.(
- e,
- gestureState,
- this._getZoomableViewEventObject()
- );
+ props.onPanResponderEnd?.(e, gestureState, _getZoomableViewEventObject());
- if (this.gestureType === 'pinch') {
- this.props.onZoomEnd?.(
- e,
- gestureState,
- this._getZoomableViewEventObject()
- );
- } else if (this.gestureType === 'shift') {
- this.props.onShiftingEnd?.(
- e,
- gestureState,
- this._getZoomableViewEventObject()
- );
+ if (gestureType.current === 'pinch') {
+ props.onZoomEnd?.(e, gestureState, _getZoomableViewEventObject());
+ } else if (gestureType.current === 'shift') {
+ props.onShiftingEnd?.(e, gestureState, _getZoomableViewEventObject());
}
- if (this.props.staticPinPosition) {
- this._updateStaticPin();
+ if (props.staticPinPosition) {
+ _updateStaticPin();
}
- this.gestureType = null;
- this.gestureStarted = false;
- };
+ gestureType.current = undefined;
+ gestureStarted.current = false;
+ });
/**
* Handles the actual movement of our pan responder
@@ -465,78 +433,77 @@ class ReactNativeZoomableView extends Component<
*
* @private
*/
- _handlePanResponderMove = (
- e: GestureResponderEvent,
- gestureState: PanResponderGestureState
- ) => {
- if (this.props.onPanResponderMove) {
- if (
- this.props.onPanResponderMove(
- e,
- gestureState,
- this._getZoomableViewEventObject()
- )
- ) {
- return false;
+ const _handlePanResponderMove = useLatestCallback(
+ (e: GestureResponderEvent, gestureState: PanResponderGestureState) => {
+ if (props.onPanResponderMove) {
+ if (
+ props.onPanResponderMove(
+ e,
+ gestureState,
+ _getZoomableViewEventObject()
+ )
+ ) {
+ return false;
+ }
}
- }
- // Only supports 2 touches and below,
- // any invalid number will cause the gesture to end.
- if (gestureState.numberActiveTouches <= 2) {
- if (!this.gestureStarted) {
- this._handlePanResponderGrant(e, gestureState);
- }
- } else {
- if (this.gestureStarted) {
- this._handlePanResponderEnd(e, gestureState);
+ // Only supports 2 touches and below,
+ // any invalid number will cause the gesture to end.
+ if (gestureState.numberActiveTouches <= 2) {
+ if (!gestureStarted.current) {
+ _handlePanResponderGrant(e, gestureState);
+ }
+ } else {
+ if (gestureStarted.current) {
+ _handlePanResponderEnd(e, gestureState);
+ }
+ return true;
}
- return true;
- }
- if (gestureState.numberActiveTouches === 2) {
- if (this.longPressTimeout) {
- clearTimeout(this.longPressTimeout);
- this.longPressTimeout = null;
- }
+ if (gestureState.numberActiveTouches === 2) {
+ if (longPressTimeout.current) {
+ clearTimeout(longPressTimeout.current);
+ longPressTimeout.current = undefined;
+ }
- // change some measurement states when switching gesture to ensure a smooth transition
- if (this.gestureType !== 'pinch') {
- this.lastGestureCenterPosition = calcGestureCenterPoint(
- e,
- gestureState
- );
- this.lastGestureTouchDistance = calcGestureTouchDistance(
- e,
- gestureState
- );
- }
- this.gestureType = 'pinch';
- this._handlePinching(e, gestureState);
- } else if (gestureState.numberActiveTouches === 1) {
- if (
- this.longPressTimeout &&
- (Math.abs(gestureState.dx) > 5 || Math.abs(gestureState.dy) > 5)
- ) {
- clearTimeout(this.longPressTimeout);
- this.longPressTimeout = null;
- }
- // change some measurement states when switching gesture to ensure a smooth transition
- if (this.gestureType !== 'shift') {
- this.lastGestureCenterPosition = calcGestureCenterPoint(
- e,
- gestureState
- );
- }
+ // change some measurement states when switching gesture to ensure a smooth transition
+ if (gestureType.current !== 'pinch') {
+ lastGestureCenterPosition.current = calcGestureCenterPoint(
+ e,
+ gestureState
+ );
+ lastGestureTouchDistance.current = calcGestureTouchDistance(
+ e,
+ gestureState
+ );
+ }
+ gestureType.current = 'pinch';
+ _handlePinching(e, gestureState);
+ } else if (gestureState.numberActiveTouches === 1) {
+ if (
+ longPressTimeout.current &&
+ (Math.abs(gestureState.dx) > 5 || Math.abs(gestureState.dy) > 5)
+ ) {
+ clearTimeout(longPressTimeout.current);
+ longPressTimeout.current = undefined;
+ }
+ // change some measurement states when switching gesture to ensure a smooth transition
+ if (gestureType.current !== 'shift') {
+ lastGestureCenterPosition.current = calcGestureCenterPoint(
+ e,
+ gestureState
+ );
+ }
- const { dx, dy } = gestureState;
- const isShiftGesture = Math.abs(dx) > 2 || Math.abs(dy) > 2;
- if (isShiftGesture) {
- this.gestureType = 'shift';
- this._handleShifting(gestureState);
+ const { dx, dy } = gestureState;
+ const isShiftGesture = Math.abs(dx) > 2 || Math.abs(dy) > 2;
+ if (isShiftGesture) {
+ gestureType.current = 'shift';
+ _handleShifting(gestureState);
+ }
}
}
- };
+ );
/**
* Handles the pinch movement and zooming
@@ -546,128 +513,118 @@ class ReactNativeZoomableView extends Component<
*
* @private
*/
- _handlePinching(
- e: GestureResponderEvent,
- gestureState: PanResponderGestureState
- ) {
- if (!this.props.zoomEnabled) return;
+ const _handlePinching = useLatestCallback(
+ (e: GestureResponderEvent, gestureState: PanResponderGestureState) => {
+ if (!props.zoomEnabled) return;
- const {
- maxZoom,
- minZoom,
- pinchToZoomInSensitivity,
- pinchToZoomOutSensitivity,
- } = this.props;
+ const {
+ maxZoom,
+ minZoom,
+ pinchToZoomInSensitivity,
+ pinchToZoomOutSensitivity,
+ } = props;
- const distance = calcGestureTouchDistance(e, gestureState);
+ const distance = calcGestureTouchDistance(e, gestureState);
- if (
- this.props.onZoomBefore &&
- this.props.onZoomBefore(
- e,
- gestureState,
- this._getZoomableViewEventObject()
- )
- ) {
- return;
- }
-
- if (!distance) return;
- if (!this.lastGestureTouchDistance) return;
+ if (
+ props.onZoomBefore &&
+ props.onZoomBefore(e, gestureState, _getZoomableViewEventObject())
+ ) {
+ return;
+ }
- // define the new zoom level and take zoom level sensitivity into consideration
- const zoomGrowthFromLastGestureState =
- distance / this.lastGestureTouchDistance;
- this.lastGestureTouchDistance = distance;
+ if (!distance) return;
+ if (!lastGestureTouchDistance.current) return;
- const pinchToZoomSensitivity =
- zoomGrowthFromLastGestureState < 1
- ? pinchToZoomOutSensitivity
- : pinchToZoomInSensitivity;
+ // define the new zoom level and take zoom level sensitivity into consideration
+ const zoomGrowthFromLastGestureState =
+ distance / lastGestureTouchDistance.current;
+ lastGestureTouchDistance.current = distance;
- if (pinchToZoomSensitivity == null) return;
- const deltaGrowth = zoomGrowthFromLastGestureState - 1;
- // 0 - no resistance
- // 10 - 90% resistance
- const deltaGrowthAdjustedBySensitivity =
- deltaGrowth * (1 - (pinchToZoomSensitivity * 9) / 100);
+ const pinchToZoomSensitivity =
+ zoomGrowthFromLastGestureState < 1
+ ? pinchToZoomOutSensitivity
+ : pinchToZoomInSensitivity;
- let newZoomLevel = this.zoomLevel * (1 + deltaGrowthAdjustedBySensitivity);
+ if (pinchToZoomSensitivity == null) return;
+ const deltaGrowth = zoomGrowthFromLastGestureState - 1;
+ // 0 - no resistance
+ // 10 - 90% resistance
+ const deltaGrowthAdjustedBySensitivity =
+ deltaGrowth * (1 - (pinchToZoomSensitivity * 9) / 100);
- // make sure max and min zoom levels are respected
- if (maxZoom != null && newZoomLevel > maxZoom) {
- newZoomLevel = maxZoom;
- }
+ let newZoomLevel =
+ zoomLevel.current * (1 + deltaGrowthAdjustedBySensitivity);
- if (minZoom != null && newZoomLevel < minZoom) {
- newZoomLevel = minZoom;
- }
+ // make sure max and min zoom levels are respected
+ if (maxZoom != null && newZoomLevel > maxZoom) {
+ newZoomLevel = maxZoom;
+ }
- const gestureCenterPoint = calcGestureCenterPoint(e, gestureState);
+ if (minZoom != null && newZoomLevel < minZoom) {
+ newZoomLevel = minZoom;
+ }
- if (!gestureCenterPoint) return;
+ const gestureCenterPoint = calcGestureCenterPoint(e, gestureState);
- let zoomCenter = {
- x: gestureCenterPoint.x - this.state.originalPageX,
- y: gestureCenterPoint.y - this.state.originalPageY,
- };
+ if (!gestureCenterPoint) return;
- if (this.props.staticPinPosition) {
- // When we use a static pin position, the zoom centre is the same as that position,
- // otherwise the pin moves around way too much while zooming.
- zoomCenter = {
- x: this.props.staticPinPosition.x,
- y: this.props.staticPinPosition.y,
+ let zoomCenter = {
+ x: gestureCenterPoint.x - originalPageX,
+ y: gestureCenterPoint.y - originalPageY,
};
- }
- // Uncomment to debug
- this.props.debug && this._setPinchDebugPoints(e, zoomCenter);
+ if (props.staticPinPosition) {
+ // When we use a static pin position, the zoom centre is the same as that position,
+ // otherwise the pin moves around way too much while zooming.
+ zoomCenter = {
+ x: props.staticPinPosition.x,
+ y: props.staticPinPosition.y,
+ };
+ }
- const { originalHeight, originalWidth } = this.state;
+ // Uncomment to debug
+ props.debug && _setPinchDebugPoints(e, zoomCenter);
- const oldOffsetX = this.offsetX;
- const oldOffsetY = this.offsetY;
- const oldScale = this.zoomLevel;
- const newScale = newZoomLevel;
+ const oldOffsetX = offsetX.current;
+ const oldOffsetY = offsetY.current;
+ const oldScale = zoomLevel.current;
+ const newScale = newZoomLevel;
- if (!originalHeight || !originalWidth) return;
+ if (!originalHeight || !originalWidth) return;
- let offsetY = calcNewScaledOffsetForZoomCentering(
- oldOffsetY,
- originalHeight,
- oldScale,
- newScale,
- zoomCenter.y
- );
- let offsetX = calcNewScaledOffsetForZoomCentering(
- oldOffsetX,
- originalWidth,
- oldScale,
- newScale,
- zoomCenter.x
- );
+ let newOffsetY = calcNewScaledOffsetForZoomCentering(
+ oldOffsetY,
+ originalHeight,
+ oldScale,
+ newScale,
+ zoomCenter.y
+ );
+ let newOffsetX = calcNewScaledOffsetForZoomCentering(
+ oldOffsetX,
+ originalWidth,
+ oldScale,
+ newScale,
+ zoomCenter.x
+ );
- const offsetShift =
- this._calcOffsetShiftSinceLastGestureState(gestureCenterPoint);
- if (offsetShift) {
- offsetX += offsetShift.x;
- offsetY += offsetShift.y;
- }
+ const offsetShift =
+ _calcOffsetShiftSinceLastGestureState(gestureCenterPoint);
+ if (offsetShift) {
+ newOffsetX += offsetShift.x;
+ newOffsetY += offsetShift.y;
+ }
- this.offsetX = offsetX;
- this.offsetY = offsetY;
- this.zoomLevel = newScale;
+ offsetX.current = newOffsetX;
+ offsetY.current = newOffsetY;
+ zoomLevel.current = newScale;
- this.panAnim.setValue({ x: this.offsetX, y: this.offsetY });
- this.zoomAnim.setValue(this.zoomLevel);
+ panAnim.current.setValue({ x: offsetX.current, y: offsetY.current });
+ zoomAnim.current.setValue(zoomLevel.current);
- this.props.onZoomAfter?.(
- e,
- gestureState,
- this._getZoomableViewEventObject()
- );
- }
+ props.onZoomAfter?.(e, gestureState, _getZoomableViewEventObject());
+ }
+ );
/**
* Used to debug pinch events
@@ -675,16 +632,15 @@ class ReactNativeZoomableView extends Component<
* @param zoomCenter
* @param points
*/
- _setPinchDebugPoints(
- gestureResponderEvent: GestureResponderEvent,
- zoomCenter: Vec2D,
- ...points: Vec2D[]
- ) {
- const { touches } = gestureResponderEvent.nativeEvent;
- const { originalPageY, originalPageX } = this.state;
-
- this.setState({
- debugPoints: [
+ const _setPinchDebugPoints = useLatestCallback(
+ (
+ gestureResponderEvent: GestureResponderEvent,
+ zoomCenter: Vec2D,
+ ...points: Vec2D[]
+ ) => {
+ const { touches } = gestureResponderEvent.nativeEvent;
+
+ setDebugPoints([
{
x: touches[0].pageX - originalPageX,
y: touches[0].pageY - originalPageY,
@@ -695,9 +651,9 @@ class ReactNativeZoomableView extends Component<
},
zoomCenter,
...points,
- ],
- });
- }
+ ]);
+ }
+ );
/**
* Calculates the amount the offset should shift since the last position during panning
@@ -706,28 +662,30 @@ class ReactNativeZoomableView extends Component<
*
* @private
*/
- _calcOffsetShiftSinceLastGestureState(gestureCenterPoint: Vec2D) {
- const { movementSensibility } = this.props;
+ const _calcOffsetShiftSinceLastGestureState = useLatestCallback(
+ (gestureCenterPoint: Vec2D) => {
+ const { movementSensibility } = props;
- let shift = null;
+ let shift = null;
- if (this.lastGestureCenterPosition && movementSensibility) {
- const dx = gestureCenterPoint.x - this.lastGestureCenterPosition.x;
- const dy = gestureCenterPoint.y - this.lastGestureCenterPosition.y;
+ if (lastGestureCenterPosition.current && movementSensibility) {
+ const dx = gestureCenterPoint.x - lastGestureCenterPosition.current.x;
+ const dy = gestureCenterPoint.y - lastGestureCenterPosition.current.y;
- const shiftX = dx / this.zoomLevel / movementSensibility;
- const shiftY = dy / this.zoomLevel / movementSensibility;
+ const shiftX = dx / zoomLevel.current / movementSensibility;
+ const shiftY = dy / zoomLevel.current / movementSensibility;
- shift = {
- x: shiftX,
- y: shiftY,
- };
- }
+ shift = {
+ x: shiftX,
+ y: shiftY,
+ };
+ }
- this.lastGestureCenterPosition = gestureCenterPoint;
+ lastGestureCenterPosition.current = gestureCenterPoint;
- return shift;
- }
+ return shift;
+ }
+ );
/**
* Handles movement by tap and move
@@ -736,36 +694,34 @@ class ReactNativeZoomableView extends Component<
*
* @private
*/
- _handleShifting(gestureState: PanResponderGestureState) {
- // Skips shifting if panEnabled is false or disablePanOnInitialZoom is true and we're on the initial zoom level
- if (
- !this.props.panEnabled ||
- (this.props.disablePanOnInitialZoom &&
- this.zoomLevel === this.props.initialZoom)
- ) {
- return;
- }
- const shift = this._calcOffsetShiftSinceLastGestureState({
- x: gestureState.moveX,
- y: gestureState.moveY,
- });
- if (!shift) return;
+ const _handleShifting = useLatestCallback(
+ (gestureState: PanResponderGestureState) => {
+ // Skips shifting if panEnabled is false or disablePanOnInitialZoom is true and we're on the initial zoom level
+ if (
+ !props.panEnabled ||
+ (props.disablePanOnInitialZoom &&
+ zoomLevel.current === props.initialZoom)
+ ) {
+ return;
+ }
+ const shift = _calcOffsetShiftSinceLastGestureState({
+ x: gestureState.moveX,
+ y: gestureState.moveY,
+ });
+ if (!shift) return;
- const offsetX = this.offsetX + shift.x;
- const offsetY = this.offsetY + shift.y;
+ const newOffsetX = offsetX.current + shift.x;
+ const newOffsetY = offsetY.current + shift.y;
- if (
- this.props.debug &&
- this.state.originalPageX &&
- this.state.originalPageY
- ) {
- const x = gestureState.moveX - this.state.originalPageX;
- const y = gestureState.moveY - this.state.originalPageY;
- this.setState({ debugPoints: [{ x, y }] });
- }
+ if (props.debug && originalPageX && originalPageY) {
+ const x = gestureState.moveX - originalPageX;
+ const y = gestureState.moveY - originalPageY;
+ setDebugPoints([{ x, y }]);
+ }
- this._setNewOffsetPosition(offsetX, offsetY);
- }
+ _setNewOffsetPosition(newOffsetX, newOffsetY);
+ }
+ );
/**
* Set the state to offset moved
@@ -774,21 +730,23 @@ class ReactNativeZoomableView extends Component<
* @param {number} newOffsetY
* @returns
*/
- _setNewOffsetPosition(newOffsetX: number, newOffsetY: number) {
- const { onShiftingBefore, onShiftingAfter } = this.props;
+ const _setNewOffsetPosition = useLatestCallback(
+ (newOffsetX: number, newOffsetY: number) => {
+ const { onShiftingBefore, onShiftingAfter } = props;
- if (onShiftingBefore?.(null, null, this._getZoomableViewEventObject())) {
- return;
- }
+ if (onShiftingBefore?.(null, null, _getZoomableViewEventObject())) {
+ return;
+ }
- this.offsetX = newOffsetX;
- this.offsetY = newOffsetY;
+ offsetX.current = newOffsetX;
+ offsetY.current = newOffsetY;
- this.panAnim.setValue({ x: this.offsetX, y: this.offsetY });
- this.zoomAnim.setValue(this.zoomLevel);
+ panAnim.current.setValue({ x: offsetX.current, y: offsetY.current });
+ zoomAnim.current.setValue(zoomLevel.current);
- onShiftingAfter?.(null, null, this._getZoomableViewEventObject());
- }
+ onShiftingAfter?.(null, null, _getZoomableViewEventObject());
+ }
+ );
/**
* Check whether the press event is double tap
@@ -798,126 +756,127 @@ class ReactNativeZoomableView extends Component<
*
* @private
*/
- private _resolveAndHandleTap = (e: GestureResponderEvent) => {
+ const _resolveAndHandleTap = useLatestCallback((e: GestureResponderEvent) => {
const now = Date.now();
if (
- this.doubleTapFirstTapReleaseTimestamp &&
- this.props.doubleTapDelay &&
- now - this.doubleTapFirstTapReleaseTimestamp < this.props.doubleTapDelay
+ doubleTapFirstTapReleaseTimestamp.current &&
+ props.doubleTapDelay &&
+ now - doubleTapFirstTapReleaseTimestamp.current < props.doubleTapDelay
) {
- this.doubleTapFirstTap &&
- this._addTouch({
- ...this.doubleTapFirstTap,
+ doubleTapFirstTap.current &&
+ _addTouch({
+ ...doubleTapFirstTap.current,
id: now.toString(),
isSecondTap: true,
});
- this.singleTapTimeoutId && clearTimeout(this.singleTapTimeoutId);
- delete this.doubleTapFirstTapReleaseTimestamp;
- delete this.singleTapTimeoutId;
- delete this.doubleTapFirstTap;
- this._handleDoubleTap(e);
+ singleTapTimeoutId.current && clearTimeout(singleTapTimeoutId.current);
+ delete doubleTapFirstTapReleaseTimestamp.current;
+ delete singleTapTimeoutId.current;
+ delete doubleTapFirstTap.current;
+ _handleDoubleTap(e);
} else {
- this.doubleTapFirstTapReleaseTimestamp = now;
- this.doubleTapFirstTap = {
+ doubleTapFirstTapReleaseTimestamp.current = now;
+ doubleTapFirstTap.current = {
id: now.toString(),
- x: e.nativeEvent.pageX - this.state.originalPageX,
- y: e.nativeEvent.pageY - this.state.originalPageY,
+ x: e.nativeEvent.pageX - originalPageX,
+ y: e.nativeEvent.pageY - originalPageY,
};
- this._addTouch(this.doubleTapFirstTap);
+ _addTouch(doubleTapFirstTap.current);
// persist event so e.nativeEvent is preserved after a timeout delay
e.persist();
- this.singleTapTimeoutId = setTimeout(() => {
- delete this.doubleTapFirstTapReleaseTimestamp;
- delete this.singleTapTimeoutId;
+ singleTapTimeoutId.current = setTimeout(() => {
+ delete doubleTapFirstTapReleaseTimestamp.current;
+ delete singleTapTimeoutId.current;
// Pan to the tapped location
- if (this.props.staticPinPosition && this.doubleTapFirstTap) {
- const tapX =
- this.props.staticPinPosition.x - this.doubleTapFirstTap.x;
- const tapY =
- this.props.staticPinPosition.y - this.doubleTapFirstTap.y;
+ if (props.staticPinPosition && doubleTapFirstTap.current) {
+ const tapX = props.staticPinPosition.x - doubleTapFirstTap.current.x;
+ const tapY = props.staticPinPosition.y - doubleTapFirstTap.current.y;
- Animated.timing(this.panAnim, {
+ Animated.timing(panAnim.current, {
toValue: {
- x: this.offsetX + tapX / this.zoomLevel,
- y: this.offsetY + tapY / this.zoomLevel,
+ x: offsetX.current + tapX / zoomLevel.current,
+ y: offsetY.current + tapY / zoomLevel.current,
},
useNativeDriver: true,
duration: 200,
}).start(() => {
- this._updateStaticPin();
+ _updateStaticPin();
});
}
- this.props.onSingleTap?.(e, this._getZoomableViewEventObject());
- }, this.props.doubleTapDelay);
+ props.onSingleTap?.(e, _getZoomableViewEventObject());
+ }, props.doubleTapDelay);
}
- };
-
- moveStaticPinTo = (position: Vec2D, duration?: number) => {
- const { originalWidth, originalHeight } = this.state;
- const { staticPinPosition, contentWidth, contentHeight } = this.props;
-
- if (!staticPinPosition) return;
- if (!originalWidth || !originalHeight) return;
- if (!contentWidth || !contentHeight) return;
-
- // Offset for the static pin
- const pinX = staticPinPosition.x - originalWidth / 2;
- const pinY = staticPinPosition.y - originalHeight / 2;
-
- this.offsetX = contentWidth / 2 - position.x + pinX / this.zoomLevel;
- this.offsetY = contentHeight / 2 - position.y + pinY / this.zoomLevel;
-
- if (duration) {
- Animated.timing(this.panAnim, {
- toValue: { x: this.offsetX, y: this.offsetY },
- useNativeDriver: true,
- duration,
- }).start();
- } else {
- this.panAnim.setValue({ x: this.offsetX, y: this.offsetY });
+ });
+
+ const publicMoveStaticPinTo = useLatestCallback(
+ (position: Vec2D, duration?: number) => {
+ const { staticPinPosition, contentWidth, contentHeight } = props;
+
+ if (!staticPinPosition) return;
+ if (!originalWidth || !originalHeight) return;
+ if (!contentWidth || !contentHeight) return;
+
+ // Offset for the static pin
+ const pinX = staticPinPosition.x - originalWidth / 2;
+ const pinY = staticPinPosition.y - originalHeight / 2;
+
+ offsetX.current =
+ contentWidth / 2 - position.x + pinX / zoomLevel.current;
+ offsetY.current =
+ contentHeight / 2 - position.y + pinY / zoomLevel.current;
+
+ if (duration) {
+ Animated.timing(panAnim.current, {
+ toValue: { x: offsetX.current, y: offsetY.current },
+ useNativeDriver: true,
+ duration,
+ }).start();
+ } else {
+ panAnim.current.setValue({ x: offsetX.current, y: offsetY.current });
+ }
}
- };
+ );
- private _staticPinPosition = () => {
- if (!this.props.staticPinPosition) return;
- if (!this.props.contentWidth || !this.props.contentHeight) return;
+ const _staticPinPosition = useLatestCallback(() => {
+ if (!props.staticPinPosition) return;
+ if (!props.contentWidth || !props.contentHeight) return;
return viewportPositionToImagePosition({
viewportPosition: {
- x: this.props.staticPinPosition.x,
- y: this.props.staticPinPosition.y,
+ x: props.staticPinPosition.x,
+ y: props.staticPinPosition.y,
},
imageSize: {
- height: this.props.contentHeight,
- width: this.props.contentWidth,
+ height: props.contentHeight,
+ width: props.contentWidth,
},
zoomableEvent: {
- ...this._getZoomableViewEventObject(),
- offsetX: this.offsetX,
- offsetY: this.offsetY,
- zoomLevel: this.zoomLevel,
+ ..._getZoomableViewEventObject(),
+ offsetX: offsetX.current,
+ offsetY: offsetY.current,
+ zoomLevel: zoomLevel.current,
},
});
- };
+ });
- private _updateStaticPin = () => {
- const position = this._staticPinPosition();
+ const _updateStaticPin = useLatestCallback(() => {
+ const position = _staticPinPosition();
if (!position) return;
- this.props.onStaticPinPositionChange?.(position);
- };
+ props.onStaticPinPositionChange?.(position);
+ });
- private _addTouch(touch: TouchPoint) {
- this.touches.push(touch);
- this.setState({ touches: [...this.touches] });
- }
+ const _addTouch = useLatestCallback((touch: TouchPoint) => {
+ touches.current.push(touch);
+ setStateTouches([...touches.current]);
+ });
- private _removeTouch(touch: TouchPoint) {
- this.touches.splice(this.touches.indexOf(touch), 1);
- this.setState({ touches: [...this.touches] });
- }
+ const _removeTouch = useLatestCallback((touch: TouchPoint) => {
+ touches.current.splice(touches.current.indexOf(touch), 1);
+ setStateTouches([...touches.current]);
+ });
/**
* Handles the double tap event
@@ -926,17 +885,15 @@ class ReactNativeZoomableView extends Component<
*
* @private
*/
- _handleDoubleTap(e: GestureResponderEvent) {
+ const _handleDoubleTap = useLatestCallback((e: GestureResponderEvent) => {
const { onDoubleTapBefore, onDoubleTapAfter, doubleTapZoomToCenter } =
- this.props;
+ props;
- onDoubleTapBefore?.(e, this._getZoomableViewEventObject());
+ onDoubleTapBefore?.(e, _getZoomableViewEventObject());
- const nextZoomStep = this._getNextZoomStep();
+ const nextZoomStep = _getNextZoomStep();
if (nextZoomStep == null) return;
- const { originalPageX, originalPageY } = this.state;
-
// define new zoom position coordinates
const zoomPositionCoordinates = {
x: e.nativeEvent.pageX - originalPageX,
@@ -949,13 +906,13 @@ class ReactNativeZoomableView extends Component<
zoomPositionCoordinates.y = 0;
}
- this.zoomTo(nextZoomStep, zoomPositionCoordinates);
+ publicZoomTo(nextZoomStep, zoomPositionCoordinates);
onDoubleTapAfter?.(
e,
- this._getZoomableViewEventObject({ zoomLevel: nextZoomStep })
+ _getZoomableViewEventObject({ zoomLevel: nextZoomStep })
);
- }
+ });
/**
* Returns the next zoom step based on current step and zoomStep property.
@@ -963,25 +920,24 @@ class ReactNativeZoomableView extends Component<
*
* @returns {*}
*/
- _getNextZoomStep() {
- const { zoomStep, maxZoom, initialZoom } = this.props;
- const { zoomLevel } = this;
+ const _getNextZoomStep = useLatestCallback(() => {
+ const { zoomStep, maxZoom, initialZoom } = props;
if (maxZoom == null) return;
- if (zoomLevel.toFixed(2) === maxZoom.toFixed(2)) {
+ if (zoomLevel.current.toFixed(2) === maxZoom.toFixed(2)) {
return initialZoom;
}
if (zoomStep == null) return;
- const nextZoomStep = zoomLevel * (1 + zoomStep);
+ const nextZoomStep = zoomLevel.current * (1 + zoomStep);
if (nextZoomStep > maxZoom) {
return maxZoom;
}
return nextZoomStep;
- }
+ });
/**
* Zooms to a specific level. A "zoom center" can be provided, which specifies
@@ -992,52 +948,54 @@ class ReactNativeZoomableView extends Component<
* @param newZoomLevel
* @param zoomCenter - If not supplied, the container's center is the zoom center
*/
- zoomTo(newZoomLevel: number, zoomCenter?: Vec2D) {
- if (!this.props.zoomEnabled) return false;
- if (this.props.maxZoom && newZoomLevel > this.props.maxZoom) return false;
- if (this.props.minZoom && newZoomLevel < this.props.minZoom) return false;
-
- this.props.onZoomBefore?.(null, null, this._getZoomableViewEventObject());
-
- // == Perform Pan Animation to preserve the zoom center while zooming ==
- let listenerId = '';
- if (zoomCenter) {
- // Calculates panAnim values based on changes in zoomAnim.
- let prevScale = this.zoomLevel;
- // Since zoomAnim is calculated in native driver,
- // it will jitter panAnim once in a while,
- // because here panAnim is being calculated in js.
- // However the jittering should mostly occur in simulator.
- listenerId = this.zoomAnim.addListener(({ value: newScale }) => {
- this.panAnim.setValue({
- x: calcNewScaledOffsetForZoomCentering(
- this.offsetX,
- this.state.originalWidth,
- prevScale,
- newScale,
- zoomCenter.x
- ),
- y: calcNewScaledOffsetForZoomCentering(
- this.offsetY,
- this.state.originalHeight,
- prevScale,
- newScale,
- zoomCenter.y
- ),
+ const publicZoomTo = useLatestCallback(
+ (newZoomLevel: number, zoomCenter?: Vec2D) => {
+ if (!props.zoomEnabled) return false;
+ if (props.maxZoom && newZoomLevel > props.maxZoom) return false;
+ if (props.minZoom && newZoomLevel < props.minZoom) return false;
+
+ props.onZoomBefore?.(null, null, _getZoomableViewEventObject());
+
+ // == Perform Pan Animation to preserve the zoom center while zooming ==
+ let listenerId = '';
+ if (zoomCenter) {
+ // Calculates panAnim values based on changes in zoomAnim.
+ let prevScale = zoomLevel.current;
+ // Since zoomAnim is calculated in native driver,
+ // it will jitter panAnim once in a while,
+ // because here panAnim is being calculated in js.
+ // However the jittering should mostly occur in simulator.
+ listenerId = zoomAnim.current.addListener(({ value: newScale }) => {
+ panAnim.current.setValue({
+ x: calcNewScaledOffsetForZoomCentering(
+ offsetX.current,
+ originalWidth,
+ prevScale,
+ newScale,
+ zoomCenter.x
+ ),
+ y: calcNewScaledOffsetForZoomCentering(
+ offsetY.current,
+ originalHeight,
+ prevScale,
+ newScale,
+ zoomCenter.y
+ ),
+ });
+ prevScale = newScale;
});
- prevScale = newScale;
- });
- }
+ }
- // == Perform Zoom Animation ==
- getZoomToAnimation(this.zoomAnim, newZoomLevel).start(() => {
- this.zoomAnim.removeListener(listenerId);
- });
- // == Zoom Animation Ends ==
+ // == Perform Zoom Animation ==
+ getZoomToAnimation(zoomAnim.current, newZoomLevel).start(() => {
+ zoomAnim.current.removeListener(listenerId);
+ });
+ // == Zoom Animation Ends ==
- this.props.onZoomAfter?.(null, null, this._getZoomableViewEventObject());
- return true;
- }
+ props.onZoomAfter?.(null, null, _getZoomableViewEventObject());
+ return true;
+ }
+ );
/**
* Zooms in or out by a specified change level
@@ -1050,11 +1008,11 @@ class ReactNativeZoomableView extends Component<
*
* @return {bool}
*/
- zoomBy(zoomLevelChange: number) {
+ const publicZoomBy = useLatestCallback((zoomLevelChange: number) => {
// if no zoom level Change given -> just use zoom step
- zoomLevelChange ||= this.props.zoomStep || 0;
- return this.zoomTo(this.zoomLevel + zoomLevelChange);
- }
+ zoomLevelChange ||= props.zoomStep || 0;
+ return publicZoomTo(zoomLevel.current + zoomLevelChange);
+ });
/**
* Moves the zoomed view to a specified position
@@ -1065,15 +1023,16 @@ class ReactNativeZoomableView extends Component<
*
* @return {bool}
*/
- moveTo(newOffsetX: number, newOffsetY: number) {
- const { originalWidth, originalHeight } = this.state;
- if (!originalWidth || !originalHeight) return;
+ const publicMoveTo = useLatestCallback(
+ (newOffsetX: number, newOffsetY: number) => {
+ if (!originalWidth || !originalHeight) return;
- const offsetX = (newOffsetX - originalWidth / 2) / this.zoomLevel;
- const offsetY = (newOffsetY - originalHeight / 2) / this.zoomLevel;
+ const offsetX = (newOffsetX - originalWidth / 2) / zoomLevel.current;
+ const offsetY = (newOffsetY - originalHeight / 2) / zoomLevel.current;
- this._setNewOffsetPosition(-offsetX, -offsetY);
- }
+ _setNewOffsetPosition(-offsetX, -offsetY);
+ }
+ );
/**
* Moves the zoomed view by a certain amount.
@@ -1085,93 +1044,102 @@ class ReactNativeZoomableView extends Component<
*
* @return {bool}
*/
- moveBy(offsetChangeX: number, offsetChangeY: number) {
- const offsetX =
- (this.offsetX * this.zoomLevel - offsetChangeX) / this.zoomLevel;
- const offsetY =
- (this.offsetY * this.zoomLevel - offsetChangeY) / this.zoomLevel;
-
- this._setNewOffsetPosition(offsetX, offsetY);
- }
-
- render() {
- const {
- staticPinIcon,
- children,
- visualTouchFeedbackEnabled,
- doubleTapDelay,
- staticPinPosition,
- onStaticPinLongPress,
- onStaticPinPress,
- pinProps,
- } = this.props;
-
- const { pinSize, touches, debugPoints = [] } = this.state;
-
- return (
- {
+ const newOffsetX =
+ (offsetX.current * zoomLevel.current - offsetChangeX) /
+ zoomLevel.current;
+ const newOffsetY =
+ (offsetY.current * zoomLevel.current - offsetChangeY) /
+ zoomLevel.current;
+
+ _setNewOffsetPosition(newOffsetX, newOffsetY);
+ }
+ );
+
+ useImperativeHandle(ref, () => ({
+ zoomTo: publicZoomTo,
+ zoomBy: publicZoomBy,
+ moveTo: publicMoveTo,
+ moveBy: publicMoveBy,
+ moveStaticPinTo: publicMoveStaticPinTo,
+ get gestureStarted() {
+ return gestureStarted.current;
+ },
+ }));
+
+ const {
+ staticPinIcon,
+ children,
+ visualTouchFeedbackEnabled,
+ doubleTapDelay,
+ staticPinPosition,
+ onStaticPinLongPress,
+ onStaticPinPress,
+ pinProps,
+ } = props;
+
+ return (
+
+
-
- {children}
-
-
- {visualTouchFeedbackEnabled &&
- touches?.map(
- (touch) =>
- doubleTapDelay && (
- {
- this._removeTouch(touch);
- }}
- />
- )
- )}
-
- {/* For Debugging Only */}
- {debugPoints.map(({ x, y }, index) => {
- return ;
- })}
-
- {staticPinPosition && (
- {
- this.setState({ pinSize: size });
- }}
- pinProps={pinProps}
- />
+ {children}
+
+
+ {visualTouchFeedbackEnabled &&
+ stateTouches.map(
+ (touch) =>
+ doubleTapDelay && (
+ {
+ _removeTouch(touch);
+ }}
+ />
+ )
)}
-
- );
- }
-}
+
+ {/* For Debugging Only */}
+ {debugPoints.map(({ x, y }, index) => {
+ return ;
+ })}
+
+ {staticPinPosition && (
+
+ )}
+
+ );
+};
const styles = StyleSheet.create({
container: {
diff --git a/src/hooks/useLatestCallback.ts b/src/hooks/useLatestCallback.ts
new file mode 100644
index 0000000..2e8f964
--- /dev/null
+++ b/src/hooks/useLatestCallback.ts
@@ -0,0 +1,14 @@
+import { useRef } from 'react';
+
+/**
+ * A hook that returns a stable callback reference that always calls the latest version of the function.
+ * This avoids the need to include the callback in dependency arrays while ensuring the latest version is called.
+ */
+export const useLatestCallback = (
+ callback: (...args: Args) => Return
+) => {
+ const ref = useRef(callback);
+ ref.current = callback;
+
+ return useRef((...args) => ref.current(...args)).current;
+};
diff --git a/yarn.lock b/yarn.lock
index b01883f..b239cc8 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -49,7 +49,7 @@
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.5.tgz#a8a4962e1567121ac0b3b487f52107443b455c7f"
integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==
-"@babel/core@^7.11.6", "@babel/core@^7.23.9", "@babel/core@^7.25.2":
+"@babel/core@^7.11.6", "@babel/core@^7.25.2":
version "7.28.5"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.5.tgz#4c81b35e51e1b734f510c99b07dfbc7bbbb48f7e"
integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==
@@ -130,7 +130,7 @@
jsesc "^2.5.1"
source-map "^0.5.0"
-"@babel/generator@^7.20.0", "@babel/generator@^7.28.5", "@babel/generator@^7.7.2":
+"@babel/generator@^7.20.0", "@babel/generator@^7.28.5":
version "7.28.5"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.5.tgz#712722d5e50f44d07bc7ac9fe84438742dd61298"
integrity sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==
@@ -502,7 +502,7 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.8.tgz#7bacdcbe71bdc3ff936d510c15dcea7cf0b99016"
integrity sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==
-"@babel/parser@^7.20.0", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.25.3", "@babel/parser@^7.27.2", "@babel/parser@^7.28.5":
+"@babel/parser@^7.20.0", "@babel/parser@^7.20.7", "@babel/parser@^7.25.3", "@babel/parser@^7.27.2", "@babel/parser@^7.28.5":
version "7.28.5"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08"
integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==
@@ -616,7 +616,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-jsx@^7.27.1", "@babel/plugin-syntax-jsx@^7.7.2":
+"@babel/plugin-syntax-jsx@^7.27.1":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz#2f9beb5eff30fa507c5532d107daac7b888fa34c"
integrity sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==
@@ -672,7 +672,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-syntax-typescript@^7.27.1", "@babel/plugin-syntax-typescript@^7.7.2":
+"@babel/plugin-syntax-typescript@^7.27.1":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz#5147d29066a793450f220c63fa3a9431b7e6dd18"
integrity sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==
@@ -1378,11 +1378,6 @@
"@babel/helper-validator-identifier" "^7.24.7"
to-fast-properties "^2.0.0"
-"@bcoe/v8-coverage@^0.2.3":
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
- integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
-
"@commitlint/cli@^11.0.0":
version "11.0.0"
resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-11.0.0.tgz#698199bc52afed50aa28169237758fa14a67b5d3"
@@ -1596,57 +1591,11 @@
js-yaml "^3.13.1"
resolve-from "^5.0.0"
-"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3":
+"@istanbuljs/schema@^0.1.2":
version "0.1.3"
resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
-"@jest/console@^29.7.0":
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc"
- integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==
- dependencies:
- "@jest/types" "^29.6.3"
- "@types/node" "*"
- chalk "^4.0.0"
- jest-message-util "^29.7.0"
- jest-util "^29.7.0"
- slash "^3.0.0"
-
-"@jest/core@^29.7.0":
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f"
- integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==
- dependencies:
- "@jest/console" "^29.7.0"
- "@jest/reporters" "^29.7.0"
- "@jest/test-result" "^29.7.0"
- "@jest/transform" "^29.7.0"
- "@jest/types" "^29.6.3"
- "@types/node" "*"
- ansi-escapes "^4.2.1"
- chalk "^4.0.0"
- ci-info "^3.2.0"
- exit "^0.1.2"
- graceful-fs "^4.2.9"
- jest-changed-files "^29.7.0"
- jest-config "^29.7.0"
- jest-haste-map "^29.7.0"
- jest-message-util "^29.7.0"
- jest-regex-util "^29.6.3"
- jest-resolve "^29.7.0"
- jest-resolve-dependencies "^29.7.0"
- jest-runner "^29.7.0"
- jest-runtime "^29.7.0"
- jest-snapshot "^29.7.0"
- jest-util "^29.7.0"
- jest-validate "^29.7.0"
- jest-watcher "^29.7.0"
- micromatch "^4.0.4"
- pretty-format "^29.7.0"
- slash "^3.0.0"
- strip-ansi "^6.0.0"
-
"@jest/create-cache-key-function@^29.7.0":
version "29.7.0"
resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz#793be38148fab78e65f40ae30c36785f4ad859f0"
@@ -1664,21 +1613,6 @@
"@types/node" "*"
jest-mock "^29.7.0"
-"@jest/expect-utils@^29.7.0":
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6"
- integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==
- dependencies:
- jest-get-type "^29.6.3"
-
-"@jest/expect@^29.7.0":
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2"
- integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==
- dependencies:
- expect "^29.7.0"
- jest-snapshot "^29.7.0"
-
"@jest/fake-timers@^29.7.0":
version "29.7.0"
resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565"
@@ -1691,46 +1625,6 @@
jest-mock "^29.7.0"
jest-util "^29.7.0"
-"@jest/globals@^29.7.0":
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d"
- integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==
- dependencies:
- "@jest/environment" "^29.7.0"
- "@jest/expect" "^29.7.0"
- "@jest/types" "^29.6.3"
- jest-mock "^29.7.0"
-
-"@jest/reporters@^29.7.0":
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7"
- integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==
- dependencies:
- "@bcoe/v8-coverage" "^0.2.3"
- "@jest/console" "^29.7.0"
- "@jest/test-result" "^29.7.0"
- "@jest/transform" "^29.7.0"
- "@jest/types" "^29.6.3"
- "@jridgewell/trace-mapping" "^0.3.18"
- "@types/node" "*"
- chalk "^4.0.0"
- collect-v8-coverage "^1.0.0"
- exit "^0.1.2"
- glob "^7.1.3"
- graceful-fs "^4.2.9"
- istanbul-lib-coverage "^3.0.0"
- istanbul-lib-instrument "^6.0.0"
- istanbul-lib-report "^3.0.0"
- istanbul-lib-source-maps "^4.0.0"
- istanbul-reports "^3.1.3"
- jest-message-util "^29.7.0"
- jest-util "^29.7.0"
- jest-worker "^29.7.0"
- slash "^3.0.0"
- string-length "^4.0.1"
- strip-ansi "^6.0.0"
- v8-to-istanbul "^9.0.1"
-
"@jest/schemas@^29.6.3":
version "29.6.3"
resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03"
@@ -1738,35 +1632,6 @@
dependencies:
"@sinclair/typebox" "^0.27.8"
-"@jest/source-map@^29.6.3":
- version "29.6.3"
- resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4"
- integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==
- dependencies:
- "@jridgewell/trace-mapping" "^0.3.18"
- callsites "^3.0.0"
- graceful-fs "^4.2.9"
-
-"@jest/test-result@^29.7.0":
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c"
- integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==
- dependencies:
- "@jest/console" "^29.7.0"
- "@jest/types" "^29.6.3"
- "@types/istanbul-lib-coverage" "^2.0.0"
- collect-v8-coverage "^1.0.0"
-
-"@jest/test-sequencer@^29.7.0":
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce"
- integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==
- dependencies:
- "@jest/test-result" "^29.7.0"
- graceful-fs "^4.2.9"
- jest-haste-map "^29.7.0"
- slash "^3.0.0"
-
"@jest/transform@^29.7.0":
version "29.7.0"
resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c"
@@ -1858,7 +1723,7 @@
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba"
integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==
-"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.28":
+"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.28":
version "0.3.31"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0"
integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==
@@ -2217,11 +2082,6 @@
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762"
integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==
-"@types/istanbul-lib-coverage@^2.0.1":
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7"
- integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==
-
"@types/istanbul-lib-report@*":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686"
@@ -2236,14 +2096,6 @@
dependencies:
"@types/istanbul-lib-report" "*"
-"@types/jest@29":
- version "29.5.14"
- resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.14.tgz#2b910912fa1d6856cadcd0c1f95af7df1d6049e5"
- integrity sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==
- dependencies:
- expect "^29.0.0"
- pretty-format "^29.0.0"
-
"@types/json-schema@^7.0.9":
version "7.0.15"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
@@ -3123,11 +2975,6 @@ chalk@^2.0.0, chalk@^2.4.2:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
-char-regex@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
- integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
-
chardet@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
@@ -3170,11 +3017,6 @@ ci-info@^3.2.0:
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.1.tgz#58331f6f472a25fe3a50a351ae3052936c2c7f32"
integrity sha512-SXgeMX9VwDe7iFFaEWkA5AstuER9YKqy4EhHqr4DVqkwmD9rpVimkMKWHdjn30Ja45txyjhSn63lVX69eVCckg==
-cjs-module-lexer@^1.0.0:
- version "1.4.3"
- resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz#0f79731eb8cfe1ec72acd4066efac9d61991b00d"
- integrity sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==
-
clean-stack@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
@@ -3241,16 +3083,6 @@ clone@^1.0.2:
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
-co@^4.6.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
- integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==
-
-collect-v8-coverage@^1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz#cc1f01eb8d02298cbc9a437c74c70ab4e5210b80"
- integrity sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==
-
color-convert@^1.9.0:
version "1.9.3"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
@@ -3567,19 +3399,6 @@ cosmiconfig@^9.0.0:
js-yaml "^4.1.0"
parse-json "^5.2.0"
-create-jest@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320"
- integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==
- dependencies:
- "@jest/types" "^29.6.3"
- chalk "^4.0.0"
- exit "^0.1.2"
- graceful-fs "^4.2.9"
- jest-config "^29.7.0"
- jest-util "^29.7.0"
- prompts "^2.0.1"
-
cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
@@ -3650,13 +3469,6 @@ debug@4, debug@4.3.2, debug@^4.1.0:
dependencies:
ms "2.1.2"
-debug@^4.1.1, debug@^4.4.0, debug@^4.4.1:
- version "4.4.3"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a"
- integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
- dependencies:
- ms "^2.1.3"
-
debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
version "4.3.7"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52"
@@ -3664,6 +3476,13 @@ debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
dependencies:
ms "^2.1.3"
+debug@^4.4.0, debug@^4.4.1:
+ version "4.4.3"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a"
+ integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
+ dependencies:
+ ms "^2.1.3"
+
decamelize-keys@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9"
@@ -3701,11 +3520,6 @@ dedent@^0.7.0:
resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
-dedent@^1.0.0:
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.7.1.tgz#364661eea3d73f3faba7089214420ec2f8f13e15"
- integrity sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==
-
deep-extend@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
@@ -3716,11 +3530,6 @@ deep-is@^0.1.3:
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
-deepmerge@^4.2.2:
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
- integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
-
defaults@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
@@ -3810,16 +3619,6 @@ destroy@1.2.0:
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
-detect-newline@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
- integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
-
-diff-sequences@^29.6.3:
- version "29.6.3"
- resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921"
- integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==
-
dir-glob@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
@@ -3873,11 +3672,6 @@ electron-to-chromium@^1.5.4:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.24.tgz#b3cd2f71b7a84bac340d862e3b7b0aadf48478de"
integrity sha512-0x0wLCmpdKFCi9ulhvYZebgcPmHTkFVUfU2wzDykadkslKwT4oAmDTHEKLnlrDsMGZe4B+ksn8quZfZjYsBetA==
-emittery@^0.13.1:
- version "0.13.1"
- resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad"
- integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==
-
emoji-regex@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
@@ -4317,7 +4111,7 @@ event-target-shim@^5.0.0, event-target-shim@^5.0.1:
resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
-execa@5.1.1, execa@^5.0.0:
+execa@5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
@@ -4347,22 +4141,6 @@ execa@^4.0.2, execa@^4.0.3:
signal-exit "^3.0.2"
strip-final-newline "^2.0.0"
-exit@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
- integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==
-
-expect@^29.0.0, expect@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc"
- integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==
- dependencies:
- "@jest/expect-utils" "^29.7.0"
- jest-get-type "^29.6.3"
- jest-matcher-utils "^29.7.0"
- jest-message-util "^29.7.0"
- jest-util "^29.7.0"
-
exponential-backoff@^3.1.1:
version "3.1.3"
resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.3.tgz#51cf92c1c0493c766053f9d3abee4434c244d2f6"
@@ -4493,7 +4271,7 @@ find-up@^3.0.0:
dependencies:
locate-path "^3.0.0"
-find-up@^4.0.0, find-up@^4.1.0:
+find-up@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
@@ -5050,11 +4828,6 @@ hosted-git-info@^4.0.0, hosted-git-info@^4.0.1:
dependencies:
lru-cache "^6.0.0"
-html-escaper@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
- integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
-
http-cache-semantics@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
@@ -5185,14 +4958,6 @@ import-lazy@^2.1.0:
resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=
-import-local@^3.0.2:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260"
- integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==
- dependencies:
- pkg-dir "^4.2.0"
- resolve-cwd "^3.0.0"
-
imurmurhash@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
@@ -5405,11 +5170,6 @@ is-fullwidth-code-point@^3.0.0:
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
-is-generator-fn@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
- integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
-
is-generator-function@^1.0.10:
version "1.0.10"
resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72"
@@ -5663,11 +5423,6 @@ istanbul-lib-coverage@^3.0.0:
resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.2.tgz#36786d4d82aad2ea5911007e255e2da6b5f80d86"
integrity sha512-o5+eTUYzCJ11/+JhW5/FUCdfsdoYVdQ/8I/OveE2XsjehYn5DdeSnNQAbjYaO8gQ6hvGTN6GM6ddQqpTVG5j8g==
-istanbul-lib-coverage@^3.2.0:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756"
- integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==
-
istanbul-lib-instrument@^5.0.4:
version "5.0.4"
resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.0.4.tgz#e976f2aa66ebc6737f236d3ab05b76e36f885c80"
@@ -5679,43 +5434,6 @@ istanbul-lib-instrument@^5.0.4:
istanbul-lib-coverage "^3.0.0"
semver "^6.3.0"
-istanbul-lib-instrument@^6.0.0:
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765"
- integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==
- dependencies:
- "@babel/core" "^7.23.9"
- "@babel/parser" "^7.23.9"
- "@istanbuljs/schema" "^0.1.3"
- istanbul-lib-coverage "^3.2.0"
- semver "^7.5.4"
-
-istanbul-lib-report@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d"
- integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==
- dependencies:
- istanbul-lib-coverage "^3.0.0"
- make-dir "^4.0.0"
- supports-color "^7.1.0"
-
-istanbul-lib-source-maps@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551"
- integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==
- dependencies:
- debug "^4.1.1"
- istanbul-lib-coverage "^3.0.0"
- source-map "^0.6.1"
-
-istanbul-reports@^3.1.3:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.2.0.tgz#cb4535162b5784aa623cee21a7252cf2c807ac93"
- integrity sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==
- dependencies:
- html-escaper "^2.0.0"
- istanbul-lib-report "^3.0.0"
-
iterator.prototype@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0"
@@ -5727,114 +5445,6 @@ iterator.prototype@^1.1.2:
reflect.getprototypeof "^1.0.4"
set-function-name "^2.0.1"
-jest-changed-files@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a"
- integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==
- dependencies:
- execa "^5.0.0"
- jest-util "^29.7.0"
- p-limit "^3.1.0"
-
-jest-circus@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a"
- integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==
- dependencies:
- "@jest/environment" "^29.7.0"
- "@jest/expect" "^29.7.0"
- "@jest/test-result" "^29.7.0"
- "@jest/types" "^29.6.3"
- "@types/node" "*"
- chalk "^4.0.0"
- co "^4.6.0"
- dedent "^1.0.0"
- is-generator-fn "^2.0.0"
- jest-each "^29.7.0"
- jest-matcher-utils "^29.7.0"
- jest-message-util "^29.7.0"
- jest-runtime "^29.7.0"
- jest-snapshot "^29.7.0"
- jest-util "^29.7.0"
- p-limit "^3.1.0"
- pretty-format "^29.7.0"
- pure-rand "^6.0.0"
- slash "^3.0.0"
- stack-utils "^2.0.3"
-
-jest-cli@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995"
- integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==
- dependencies:
- "@jest/core" "^29.7.0"
- "@jest/test-result" "^29.7.0"
- "@jest/types" "^29.6.3"
- chalk "^4.0.0"
- create-jest "^29.7.0"
- exit "^0.1.2"
- import-local "^3.0.2"
- jest-config "^29.7.0"
- jest-util "^29.7.0"
- jest-validate "^29.7.0"
- yargs "^17.3.1"
-
-jest-config@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f"
- integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==
- dependencies:
- "@babel/core" "^7.11.6"
- "@jest/test-sequencer" "^29.7.0"
- "@jest/types" "^29.6.3"
- babel-jest "^29.7.0"
- chalk "^4.0.0"
- ci-info "^3.2.0"
- deepmerge "^4.2.2"
- glob "^7.1.3"
- graceful-fs "^4.2.9"
- jest-circus "^29.7.0"
- jest-environment-node "^29.7.0"
- jest-get-type "^29.6.3"
- jest-regex-util "^29.6.3"
- jest-resolve "^29.7.0"
- jest-runner "^29.7.0"
- jest-util "^29.7.0"
- jest-validate "^29.7.0"
- micromatch "^4.0.4"
- parse-json "^5.2.0"
- pretty-format "^29.7.0"
- slash "^3.0.0"
- strip-json-comments "^3.1.1"
-
-jest-diff@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a"
- integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==
- dependencies:
- chalk "^4.0.0"
- diff-sequences "^29.6.3"
- jest-get-type "^29.6.3"
- pretty-format "^29.7.0"
-
-jest-docblock@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a"
- integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==
- dependencies:
- detect-newline "^3.0.0"
-
-jest-each@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1"
- integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==
- dependencies:
- "@jest/types" "^29.6.3"
- chalk "^4.0.0"
- jest-get-type "^29.6.3"
- jest-util "^29.7.0"
- pretty-format "^29.7.0"
-
jest-environment-node@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376"
@@ -5871,24 +5481,6 @@ jest-haste-map@^29.7.0:
optionalDependencies:
fsevents "^2.3.2"
-jest-leak-detector@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728"
- integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==
- dependencies:
- jest-get-type "^29.6.3"
- pretty-format "^29.7.0"
-
-jest-matcher-utils@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12"
- integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==
- dependencies:
- chalk "^4.0.0"
- jest-diff "^29.7.0"
- jest-get-type "^29.6.3"
- pretty-format "^29.7.0"
-
jest-message-util@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3"
@@ -5913,120 +5505,11 @@ jest-mock@^29.7.0:
"@types/node" "*"
jest-util "^29.7.0"
-jest-pnp-resolver@^1.2.2:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e"
- integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==
-
jest-regex-util@^29.6.3:
version "29.6.3"
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52"
integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==
-jest-resolve-dependencies@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428"
- integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==
- dependencies:
- jest-regex-util "^29.6.3"
- jest-snapshot "^29.7.0"
-
-jest-resolve@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30"
- integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==
- dependencies:
- chalk "^4.0.0"
- graceful-fs "^4.2.9"
- jest-haste-map "^29.7.0"
- jest-pnp-resolver "^1.2.2"
- jest-util "^29.7.0"
- jest-validate "^29.7.0"
- resolve "^1.20.0"
- resolve.exports "^2.0.0"
- slash "^3.0.0"
-
-jest-runner@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e"
- integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==
- dependencies:
- "@jest/console" "^29.7.0"
- "@jest/environment" "^29.7.0"
- "@jest/test-result" "^29.7.0"
- "@jest/transform" "^29.7.0"
- "@jest/types" "^29.6.3"
- "@types/node" "*"
- chalk "^4.0.0"
- emittery "^0.13.1"
- graceful-fs "^4.2.9"
- jest-docblock "^29.7.0"
- jest-environment-node "^29.7.0"
- jest-haste-map "^29.7.0"
- jest-leak-detector "^29.7.0"
- jest-message-util "^29.7.0"
- jest-resolve "^29.7.0"
- jest-runtime "^29.7.0"
- jest-util "^29.7.0"
- jest-watcher "^29.7.0"
- jest-worker "^29.7.0"
- p-limit "^3.1.0"
- source-map-support "0.5.13"
-
-jest-runtime@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817"
- integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==
- dependencies:
- "@jest/environment" "^29.7.0"
- "@jest/fake-timers" "^29.7.0"
- "@jest/globals" "^29.7.0"
- "@jest/source-map" "^29.6.3"
- "@jest/test-result" "^29.7.0"
- "@jest/transform" "^29.7.0"
- "@jest/types" "^29.6.3"
- "@types/node" "*"
- chalk "^4.0.0"
- cjs-module-lexer "^1.0.0"
- collect-v8-coverage "^1.0.0"
- glob "^7.1.3"
- graceful-fs "^4.2.9"
- jest-haste-map "^29.7.0"
- jest-message-util "^29.7.0"
- jest-mock "^29.7.0"
- jest-regex-util "^29.6.3"
- jest-resolve "^29.7.0"
- jest-snapshot "^29.7.0"
- jest-util "^29.7.0"
- slash "^3.0.0"
- strip-bom "^4.0.0"
-
-jest-snapshot@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5"
- integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==
- dependencies:
- "@babel/core" "^7.11.6"
- "@babel/generator" "^7.7.2"
- "@babel/plugin-syntax-jsx" "^7.7.2"
- "@babel/plugin-syntax-typescript" "^7.7.2"
- "@babel/types" "^7.3.3"
- "@jest/expect-utils" "^29.7.0"
- "@jest/transform" "^29.7.0"
- "@jest/types" "^29.6.3"
- babel-preset-current-node-syntax "^1.0.0"
- chalk "^4.0.0"
- expect "^29.7.0"
- graceful-fs "^4.2.9"
- jest-diff "^29.7.0"
- jest-get-type "^29.6.3"
- jest-matcher-utils "^29.7.0"
- jest-message-util "^29.7.0"
- jest-util "^29.7.0"
- natural-compare "^1.4.0"
- pretty-format "^29.7.0"
- semver "^7.5.3"
-
jest-util@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc"
@@ -6051,20 +5534,6 @@ jest-validate@^29.6.3, jest-validate@^29.7.0:
leven "^3.1.0"
pretty-format "^29.7.0"
-jest-watcher@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2"
- integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==
- dependencies:
- "@jest/test-result" "^29.7.0"
- "@jest/types" "^29.6.3"
- "@types/node" "*"
- ansi-escapes "^4.2.1"
- chalk "^4.0.0"
- emittery "^0.13.1"
- jest-util "^29.7.0"
- string-length "^4.0.1"
-
jest-worker@^29.6.3, jest-worker@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a"
@@ -6075,16 +5544,6 @@ jest-worker@^29.6.3, jest-worker@^29.7.0:
merge-stream "^2.0.0"
supports-color "^8.0.0"
-jest@29:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613"
- integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==
- dependencies:
- "@jest/core" "^29.7.0"
- "@jest/types" "^29.6.3"
- import-local "^3.0.2"
- jest-cli "^29.7.0"
-
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@@ -6372,13 +5831,6 @@ make-dir@^3.0.0:
dependencies:
semver "^6.0.0"
-make-dir@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e"
- integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==
- dependencies:
- semver "^7.5.3"
-
makeerror@1.0.12:
version "1.0.12"
resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a"
@@ -7270,7 +6722,7 @@ p-limit@^2.0.0, p-limit@^2.2.0:
dependencies:
p-try "^2.0.0"
-p-limit@^3.0.2, p-limit@^3.1.0:
+p-limit@^3.0.2:
version "3.1.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
@@ -7462,13 +6914,6 @@ pirates@^4.0.4:
resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22"
integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==
-pkg-dir@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
- integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
- dependencies:
- find-up "^4.0.0"
-
pkg-dir@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-5.0.0.tgz#a02d6aebe6ba133a928f74aec20bafdfe6b8e760"
@@ -7530,7 +6975,7 @@ prettier@^2.0.5:
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.4.1.tgz#671e11c89c14a4cfc876ce564106c4a6726c9f5c"
integrity sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==
-pretty-format@^29.0.0, pretty-format@^29.7.0:
+pretty-format@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812"
integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==
@@ -7551,7 +6996,7 @@ promise@^8.3.0:
dependencies:
asap "~2.0.6"
-prompts@^2.0.1, prompts@^2.4.2:
+prompts@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==
@@ -7602,11 +7047,6 @@ pupa@^2.1.1:
dependencies:
escape-goat "^2.0.0"
-pure-rand@^6.0.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2"
- integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==
-
q@^1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
@@ -7973,13 +7413,6 @@ resolve-alpn@^1.0.0:
resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9"
integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==
-resolve-cwd@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
- integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
- dependencies:
- resolve-from "^5.0.0"
-
resolve-from@5.0.0, resolve-from@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
@@ -8002,11 +7435,6 @@ resolve-global@1.0.0, resolve-global@^1.0.0:
dependencies:
global-dirs "^0.1.1"
-resolve.exports@^2.0.0:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.3.tgz#41955e6f1b4013b7586f873749a635dea07ebe3f"
- integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==
-
resolve@^1.1.6, resolve@^1.10.0:
version "1.20.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
@@ -8015,7 +7443,7 @@ resolve@^1.1.6, resolve@^1.10.0:
is-core-module "^2.2.0"
path-parse "^1.0.6"
-resolve@^1.20.0, resolve@^1.22.10, resolve@^1.22.8:
+resolve@^1.22.10, resolve@^1.22.8:
version "1.22.11"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262"
integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==
@@ -8174,7 +7602,7 @@ semver@^6.3.1:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-semver@^7.1.3, semver@^7.5.3, semver@^7.5.4:
+semver@^7.1.3:
version "7.7.3"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946"
integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==
@@ -8315,14 +7743,6 @@ slash@^3.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
-source-map-support@0.5.13:
- version "0.5.13"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932"
- integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==
- dependencies:
- buffer-from "^1.0.0"
- source-map "^0.6.0"
-
source-map-support@~0.5.20:
version "0.5.21"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
@@ -8425,14 +7845,6 @@ strict-uri-encode@^2.0.0:
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY=
-string-length@^4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a"
- integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==
- dependencies:
- char-regex "^1.0.2"
- strip-ansi "^6.0.0"
-
string-natural-compare@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4"
@@ -8543,11 +7955,6 @@ strip-bom@^3.0.0:
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
-strip-bom@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
- integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
-
strip-final-newline@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
@@ -8990,15 +8397,6 @@ uuid@^3.3.2:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
-v8-to-istanbul@^9.0.1:
- version "9.3.0"
- resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175"
- integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==
- dependencies:
- "@jridgewell/trace-mapping" "^0.3.12"
- "@types/istanbul-lib-coverage" "^2.0.1"
- convert-source-map "^2.0.0"
-
validate-npm-package-license@^3.0.1:
version "3.0.4"
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
@@ -9283,7 +8681,7 @@ yargs@^16.2.0:
y18n "^5.0.5"
yargs-parser "^20.2.2"
-yargs@^17.3.1, yargs@^17.5.1, yargs@^17.6.2:
+yargs@^17.5.1, yargs@^17.6.2:
version "17.7.2"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==