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":";;;;;;;;;AAEO,MAAMA,2BAA8C,yCAAG;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;;AACO,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;;;AACO,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;;;AACO,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","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":"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","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":"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","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":"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","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==