diff --git a/lib/commonjs/ReactNativeZoomableView.js b/lib/commonjs/ReactNativeZoomableView.js index 000ace8..dff3f89 100644 --- a/lib/commonjs/ReactNativeZoomableView.js +++ b/lib/commonjs/ReactNativeZoomableView.js @@ -13,23 +13,36 @@ var _StaticPin = require("./components/StaticPin"); var _debugHelper = require("./debugHelper"); var _helper = require("./helper"); var _coordinateConversion = require("./helper/coordinateConversion"); +var _getNextZoomStep = require("./helper/getNextZoomStep"); +var _useDebugPoints = require("./hooks/useDebugPoints"); var _useLatestCallback = require("./hooks/useLatestCallback"); +var _useZoomSubject = require("./hooks/useZoomSubject"); 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 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 { + wrapperRef: zoomSubjectWrapperRef, + measure: measureZoomSubject, + originalWidth, + originalHeight, + originalPageX, + originalPageY, + originalX, + originalY + } = (0, _useZoomSubject.useZoomSubject)(); const [pinSize, setPinSize] = (0, _react.useState)({ width: 0, height: 0 }); - const [debugPoints, setDebugPoints] = (0, _react.useState)([]); const [stateTouches, setStateTouches] = (0, _react.useState)([]); - const zoomSubjectWrapperRef = (0, _react.useRef)(null); + const { + debugPoints, + setDebugPoints, + setPinchDebugPoints + } = (0, _useDebugPoints.useDebugPoints)({ + originalPageX, + originalPageY + }); const gestureHandlers = (0, _react.useRef)(); const doubleTapFirstTapReleaseTimestamp = (0, _react.useRef)(); props = (0, _lodash.defaults)({}, props, { @@ -56,6 +69,16 @@ const ReactNativeZoomableView = (props, ref) => { onStaticPinPositionMove: undefined, disablePanOnInitialZoom: false }); + const { + staticPinIcon, + children, + visualTouchFeedbackEnabled, + doubleTapDelay, + staticPinPosition, + onStaticPinLongPress, + onStaticPinPress, + pinProps + } = props; const panAnim = (0, _react.useRef)(new _reactNative.Animated.ValueXY({ x: 0, y: 0 @@ -77,29 +100,81 @@ const ReactNativeZoomableView = (props, ref) => { 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 - // (aka gesture handling responsibility is taken over by another 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. - _handlePanResponderEnd(evt, gestureState); - props.onPanResponderTerminate?.(evt, gestureState, _getZoomableViewEventObject()); + + /** + * Returns additional information about components current state for external event hooks + * + * @returns {{}} + * @private + */ + const _getZoomableViewEventObject = (0, _useLatestCallback.useLatestCallback)((overwriteObj = {}) => { + return { + zoomLevel: zoomLevel.current, + offsetX: offsetX.current, + offsetY: offsetY.current, + originalHeight, + originalWidth, + originalPageX, + originalPageY, + ...overwriteObj + }; + }); + const _staticPinPosition = (0, _useLatestCallback.useLatestCallback)(() => { + if (!props.staticPinPosition) return; + if (!props.contentWidth || !props.contentHeight) return; + return (0, _coordinateConversion.viewportPositionToImagePosition)({ + viewportPosition: { + x: props.staticPinPosition.x, + y: props.staticPinPosition.y }, - 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) => props.onShouldBlockNativeResponder?.(evt, gestureState, _getZoomableViewEventObject()) ?? true, - onStartShouldSetPanResponderCapture: (evt, gestureState) => !!props.onStartShouldSetPanResponderCapture?.(evt, gestureState), - onMoveShouldSetPanResponderCapture: (evt, gestureState) => !!props.onMoveShouldSetPanResponderCapture?.(evt, gestureState) + imageSize: { + height: props.contentHeight, + width: props.contentWidth + }, + zoomableEvent: { + ..._getZoomableViewEventObject(), + offsetX: offsetX.current, + offsetY: offsetY.current, + zoomLevel: zoomLevel.current + } }); + }); + const _updateStaticPin = (0, _useLatestCallback.useLatestCallback)(() => { + const position = _staticPinPosition(); + if (!position) return; + 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]); + }); + const onStaticPinPositionChange = (0, _useLatestCallback.useLatestCallback)(props.onStaticPinPositionChange || (() => undefined)); + const debouncedOnStaticPinPositionChange = (0, _react.useMemo)(() => (0, _lodash.debounce)(onStaticPinPositionChange, 100), []); + + /** + * try to invoke onTransform + * @private + */ + const _invokeOnTransform = (0, _useLatestCallback.useLatestCallback)(() => { + const zoomableViewEvent = _getZoomableViewEventObject(); + const position = _staticPinPosition(); + if (!zoomableViewEvent.originalWidth || !zoomableViewEvent.originalHeight) return { + successful: false + }; + props.onTransform?.(zoomableViewEvent); + if (position) { + props.onStaticPinPositionMove?.(position); + debouncedOnStaticPinPositionChange(position); + } + return { + successful: true + }; + }); + (0, _react.useLayoutEffect)(() => { if (props.zoomAnimatedValue) zoomAnim.current = props.zoomAnimatedValue; if (props.panAnimatedValueXY) panAnim.current = props.panAnimatedValueXY; if (props.initialZoom) zoomLevel.current = props.initialZoom; @@ -169,95 +244,6 @@ const ReactNativeZoomableView = (props, ref) => { (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), []); - - /** - * try to invoke onTransform - * @private - */ - const _invokeOnTransform = (0, _useLatestCallback.useLatestCallback)(() => { - const zoomableViewEvent = _getZoomableViewEventObject(); - const position = _staticPinPosition(); - if (!zoomableViewEvent.originalWidth || !zoomableViewEvent.originalHeight) return { - successful: false - }; - props.onTransform?.(zoomableViewEvent); - if (position) { - props.onStaticPinPositionMove?.(position); - debouncedOnStaticPinPositionChange(position); - } - return { - successful: true - }; - }); - - /** - * Returns additional information about components current state for external event hooks - * - * @returns {{}} - * @private - */ - const _getZoomableViewEventObject = (0, _useLatestCallback.useLatestCallback)((overwriteObj = {}) => { - 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. - * (They will be used to calculate boxBorders) - * - * @private - */ - 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` - // when navigating back (react-navigation stack) from another view - // while closing the keyboard at the same time - setTimeout(() => { - // In normal conditions, we're supposed to measure zoomSubject instead of its wrapper. - // However, our zoomSubject may have been transformed by an initial zoomLevel or offset, - // 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) - 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; - setOriginalX(x); - setOriginalY(y); - setOriginalWidth(width); - setOriginalHeight(height); - setOriginalPageX(pageX); - setOriginalPageY(pageY); - }); - }); - }); - }); /** * Handles the start of touch events and checks for taps @@ -302,130 +288,64 @@ const ReactNativeZoomableView = (props, ref) => { }); /** - * Handles the end of touch events + * Calculates the amount the offset should shift since the last position during panning * - * @param e - * @param gestureState + * @param {Vec2D} gestureCenterPoint * * @private */ - const _handlePanResponderEnd = (0, _useLatestCallback.useLatestCallback)((e, gestureState) => { - if (!gestureType.current) { - _resolveAndHandleTap(e); - } - setDebugPoints([]); - lastGestureCenterPosition.current = null; - if (longPressTimeout.current) { - clearTimeout(longPressTimeout.current); - longPressTimeout.current = undefined; - } - 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 (props.staticPinPosition) { - _updateStaticPin(); + const _calcOffsetShiftSinceLastGestureState = (0, _useLatestCallback.useLatestCallback)(gestureCenterPoint => { + const { + movementSensibility + } = props; + let shift = null; + 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 + }; } - gestureType.current = undefined; - gestureStarted.current = false; + lastGestureCenterPosition.current = gestureCenterPoint; + return shift; }); /** - * Handles the actual movement of our pan responder + * Handles the pinch movement and zooming * * @param e * @param gestureState * * @private */ - const _handlePanResponderMove = (0, _useLatestCallback.useLatestCallback)((e, gestureState) => { - if (props.onPanResponderMove) { - if (props.onPanResponderMove(e, gestureState, _getZoomableViewEventObject())) { - return false; - } + const _handlePinching = (0, _useLatestCallback.useLatestCallback)((e, gestureState) => { + if (!props.zoomEnabled) return; + const { + maxZoom, + minZoom, + pinchToZoomInSensitivity, + pinchToZoomOutSensitivity + } = props; + const distance = (0, _helper.calcGestureTouchDistance)(e, gestureState); + if (props.onZoomBefore && props.onZoomBefore(e, gestureState, _getZoomableViewEventObject())) { + return; } + if (!distance) return; + if (!lastGestureTouchDistance.current) return; - // 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; - } - 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 (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 (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) { - gestureType.current = 'shift'; - _handleShifting(gestureState); - } - } - }); - - /** - * Handles the pinch movement and zooming - * - * @param e - * @param gestureState - * - * @private - */ - const _handlePinching = (0, _useLatestCallback.useLatestCallback)((e, gestureState) => { - if (!props.zoomEnabled) return; - const { - maxZoom, - minZoom, - pinchToZoomInSensitivity, - pinchToZoomOutSensitivity - } = props; - const distance = (0, _helper.calcGestureTouchDistance)(e, gestureState); - if (props.onZoomBefore && props.onZoomBefore(e, gestureState, _getZoomableViewEventObject())) { - return; - } - if (!distance) return; - if (!lastGestureTouchDistance.current) return; - - // 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 - // 10 - 90% resistance - const deltaGrowthAdjustedBySensitivity = deltaGrowth * (1 - pinchToZoomSensitivity * 9 / 100); - let newZoomLevel = zoomLevel.current * (1 + deltaGrowthAdjustedBySensitivity); + // 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 + // 10 - 90% resistance + const deltaGrowthAdjustedBySensitivity = deltaGrowth * (1 - pinchToZoomSensitivity * 9 / 100); + let newZoomLevel = zoomLevel.current * (1 + deltaGrowthAdjustedBySensitivity); // make sure max and min zoom levels are respected if (maxZoom != null && newZoomLevel > maxZoom) { @@ -450,7 +370,7 @@ const ReactNativeZoomableView = (props, ref) => { } // Uncomment to debug - props.debug && _setPinchDebugPoints(e, zoomCenter); + props.debug && setPinchDebugPoints(e, zoomCenter); const oldOffsetX = offsetX.current; const oldOffsetY = offsetY.current; const oldScale = zoomLevel.current; @@ -475,48 +395,28 @@ const ReactNativeZoomableView = (props, ref) => { }); /** - * Used to debug pinch events - * @param gestureResponderEvent - * @param zoomCenter - * @param points - */ - const _setPinchDebugPoints = (0, _useLatestCallback.useLatestCallback)((gestureResponderEvent, zoomCenter, ...points) => { - const { - touches - } = gestureResponderEvent.nativeEvent; - 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 - * - * @param {Vec2D} gestureCenterPoint + * Set the state to offset moved * - * @private + * @param {number} newOffsetX + * @param {number} newOffsetY + * @returns */ - const _calcOffsetShiftSinceLastGestureState = (0, _useLatestCallback.useLatestCallback)(gestureCenterPoint => { + const _setNewOffsetPosition = (0, _useLatestCallback.useLatestCallback)((newOffsetX, newOffsetY) => { const { - movementSensibility + onShiftingBefore, + onShiftingAfter } = props; - let shift = null; - 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 - }; + if (onShiftingBefore?.(null, null, _getZoomableViewEventObject())) { + return; } - lastGestureCenterPosition.current = gestureCenterPoint; - return shift; + offsetX.current = newOffsetX; + offsetY.current = newOffsetY; + panAnim.current.setValue({ + x: offsetX.current, + y: offsetY.current + }); + zoomAnim.current.setValue(zoomLevel.current); + onShiftingAfter?.(null, null, _getZoomableViewEventObject()); }); /** @@ -550,28 +450,87 @@ const ReactNativeZoomableView = (props, ref) => { }); /** - * Set the state to offset moved + * 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 {number} newOffsetX - * @param {number} newOffsetY - * @returns + * @param newZoomLevel + * @param zoomCenter - If not supplied, the container's center is the zoom center */ - const _setNewOffsetPosition = (0, _useLatestCallback.useLatestCallback)((newOffsetX, newOffsetY) => { + 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()); + + // == 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: (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)(zoomAnim.current, newZoomLevel).start(() => { + zoomAnim.current.removeListener(listenerId); + }); + // == Zoom Animation Ends == + + props.onZoomAfter?.(null, null, _getZoomableViewEventObject()); + return true; + }); + + /** + * Handles the double tap event + * + * @param e + * + * @private + */ + const _handleDoubleTap = (0, _useLatestCallback.useLatestCallback)(e => { const { - onShiftingBefore, - onShiftingAfter + onDoubleTapBefore, + onDoubleTapAfter, + doubleTapZoomToCenter } = props; - if (onShiftingBefore?.(null, null, _getZoomableViewEventObject())) { - return; - } - offsetX.current = newOffsetX; - offsetY.current = newOffsetY; - panAnim.current.setValue({ - x: offsetX.current, - y: offsetY.current + onDoubleTapBefore?.(e, _getZoomableViewEventObject()); + const nextZoomStep = (0, _getNextZoomStep.getNextZoomStep)({ + zoomLevel: zoomLevel.current, + zoomStep: props.zoomStep, + maxZoom: props.maxZoom, + initialZoom: props.initialZoom }); - zoomAnim.current.setValue(zoomLevel.current); - onShiftingAfter?.(null, null, _getZoomableViewEventObject()); + if (nextZoomStep == null) return; + + // 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) { + zoomPositionCoordinates.x = 0; + zoomPositionCoordinates.y = 0; + } + publicZoomTo(nextZoomStep, zoomPositionCoordinates); + onDoubleTapAfter?.(e, _getZoomableViewEventObject({ + zoomLevel: nextZoomStep + })); }); /** @@ -660,142 +619,6 @@ const ReactNativeZoomableView = (props, ref) => { }); } }); - const _staticPinPosition = (0, _useLatestCallback.useLatestCallback)(() => { - if (!props.staticPinPosition) return; - if (!props.contentWidth || !props.contentHeight) return; - return (0, _coordinateConversion.viewportPositionToImagePosition)({ - viewportPosition: { - x: props.staticPinPosition.x, - y: props.staticPinPosition.y - }, - imageSize: { - height: props.contentHeight, - width: props.contentWidth - }, - zoomableEvent: { - ..._getZoomableViewEventObject(), - offsetX: offsetX.current, - offsetY: offsetY.current, - zoomLevel: zoomLevel.current - } - }); - }); - const _updateStaticPin = (0, _useLatestCallback.useLatestCallback)(() => { - const position = _staticPinPosition(); - if (!position) return; - 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]); - }); - - /** - * Handles the double tap event - * - * @param e - * - * @private - */ - const _handleDoubleTap = (0, _useLatestCallback.useLatestCallback)(e => { - const { - onDoubleTapBefore, - onDoubleTapAfter, - doubleTapZoomToCenter - } = props; - onDoubleTapBefore?.(e, _getZoomableViewEventObject()); - const nextZoomStep = _getNextZoomStep(); - if (nextZoomStep == null) return; - - // 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) { - zoomPositionCoordinates.x = 0; - zoomPositionCoordinates.y = 0; - } - 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 {*} - */ - const _getNextZoomStep = (0, _useLatestCallback.useLatestCallback)(() => { - const { - zoomStep, - maxZoom, - initialZoom - } = props; - if (maxZoom == null) return; - if (zoomLevel.current.toFixed(2) === maxZoom.toFixed(2)) { - return initialZoom; - } - if (zoomStep == null) return; - 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. - * 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 - */ - 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()); - - // == 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: (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)(zoomAnim.current, newZoomLevel).start(() => { - zoomAnim.current.removeListener(listenerId); - }); - // == Zoom Animation Ends == - - props.onZoomAfter?.(null, null, _getZoomableViewEventObject()); - return true; - }); /** * Zooms in or out by a specified change level @@ -855,23 +678,132 @@ const ReactNativeZoomableView = (props, ref) => { return gestureStarted.current; } })); - const { - staticPinIcon, - children, - visualTouchFeedbackEnabled, - doubleTapDelay, - staticPinPosition, - onStaticPinLongPress, - onStaticPinPress, - pinProps - } = props; - return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, { + + /** + * Handles the end of touch events + * + * @param e + * @param gestureState + * + * @private + */ + const _handlePanResponderEnd = (0, _useLatestCallback.useLatestCallback)((e, gestureState) => { + if (!gestureType.current) { + _resolveAndHandleTap(e); + } + setDebugPoints([]); + lastGestureCenterPosition.current = null; + if (longPressTimeout.current) { + clearTimeout(longPressTimeout.current); + longPressTimeout.current = undefined; + } + 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 (props.staticPinPosition) { + _updateStaticPin(); + } + gestureType.current = undefined; + gestureStarted.current = false; + }); + + /** + * Handles the actual movement of our pan responder + * + * @param e + * @param gestureState + * + * @private + */ + 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. + if (gestureState.numberActiveTouches <= 2) { + if (!gestureStarted.current) { + _handlePanResponderGrant(e, gestureState); + } + } else { + if (gestureStarted.current) { + _handlePanResponderEnd(e, gestureState); + } + return true; + } + 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 (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 (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) { + gestureType.current = 'shift'; + _handleShifting(gestureState); + } + } + }); + (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 + // (aka gesture handling responsibility is taken over by another 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. + _handlePanResponderEnd(evt, gestureState); + props.onPanResponderTerminate?.(evt, gestureState, _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) => props.onShouldBlockNativeResponder?.(evt, gestureState, _getZoomableViewEventObject()) ?? true, + onStartShouldSetPanResponderCapture: (evt, gestureState) => !!props.onStartShouldSetPanResponderCapture?.(evt, gestureState), + onMoveShouldSetPanResponderCapture: (evt, gestureState) => !!props.onMoveShouldSetPanResponderCapture?.(evt, gestureState) + }); + }, []); + return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View + // eslint-disable-next-line @typescript-eslint/no-use-before-define + , { style: styles.container, ...gestureHandlers.current?.panHandlers, ref: zoomSubjectWrapperRef, onLayout: measureZoomSubject, children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, { - style: [styles.zoomSubject, props.style, { + style: [ + // eslint-disable-next-line @typescript-eslint/no-use-before-define + 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 diff --git a/lib/commonjs/ReactNativeZoomableView.js.map b/lib/commonjs/ReactNativeZoomableView.js.map index 42a9b99..4c3f9d1 100644 --- a/lib/commonjs/ReactNativeZoomableView.js.map +++ b/lib/commonjs/ReactNativeZoomableView.js.map @@ -1 +1 @@ -{"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":[]} +{"version":3,"names":["_lodash","require","_react","_interopRequireWildcard","_reactNative","_animations","_components","_StaticPin","_debugHelper","_helper","_coordinateConversion","_getNextZoomStep","_useDebugPoints","_useLatestCallback","_useZoomSubject","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ReactNativeZoomableView","props","ref","wrapperRef","zoomSubjectWrapperRef","measure","measureZoomSubject","originalWidth","originalHeight","originalPageX","originalPageY","originalX","originalY","useZoomSubject","pinSize","setPinSize","useState","width","height","stateTouches","setStateTouches","debugPoints","setDebugPoints","setPinchDebugPoints","useDebugPoints","gestureHandlers","useRef","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","children","onStaticPinLongPress","onStaticPinPress","pinProps","panAnim","Animated","ValueXY","x","y","zoomAnim","Value","offsetX","offsetY","zoomLevel","lastGestureCenterPosition","lastGestureTouchDistance","gestureType","gestureStarted","longPressTimeout","onTransformInvocationInitialized","singleTapTimeoutId","touches","doubleTapFirstTap","_getZoomableViewEventObject","useLatestCallback","overwriteObj","current","_staticPinPosition","viewportPositionToImagePosition","viewportPosition","imageSize","zoomableEvent","_updateStaticPin","position","_addTouch","touch","push","_removeTouch","splice","indexOf","debouncedOnStaticPinPositionChange","useMemo","debounce","_invokeOnTransform","zoomableViewEvent","successful","onTransform","useLayoutEffect","zoomAnimatedValue","panAnimatedValueXY","setValue","addListener","value","onLayout","layout","nativeEvent","_handleStartShouldSetPanResponder","gestureState","onStartShouldSetPanResponder","_handlePanResponderGrant","persist","setTimeout","onPanResponderGrant","stopAnimation","_calcOffsetShiftSinceLastGestureState","gestureCenterPoint","shift","dx","dy","shiftX","shiftY","_handlePinching","distance","calcGestureTouchDistance","onZoomBefore","zoomGrowthFromLastGestureState","pinchToZoomSensitivity","deltaGrowth","deltaGrowthAdjustedBySensitivity","newZoomLevel","calcGestureCenterPoint","zoomCenter","debug","oldOffsetX","oldOffsetY","oldScale","newScale","newOffsetY","calcNewScaledOffsetForZoomCentering","newOffsetX","offsetShift","onZoomAfter","_setNewOffsetPosition","onShiftingBefore","onShiftingAfter","_handleShifting","moveX","moveY","publicZoomTo","listenerId","prevScale","getZoomToAnimation","start","removeListener","_handleDoubleTap","onDoubleTapBefore","onDoubleTapAfter","doubleTapZoomToCenter","nextZoomStep","getNextZoomStep","zoomPositionCoordinates","pageX","pageY","_resolveAndHandleTap","now","Date","id","toString","isSecondTap","clearTimeout","tapX","tapY","timing","toValue","useNativeDriver","duration","onSingleTap","publicMoveStaticPinTo","pinX","pinY","publicZoomBy","zoomLevelChange","publicMoveTo","publicMoveBy","offsetChangeX","offsetChangeY","useImperativeHandle","zoomTo","zoomBy","moveTo","moveBy","moveStaticPinTo","_handlePanResponderEnd","onPanResponderEnd","onZoomEnd","onShiftingEnd","_handlePanResponderMove","onPanResponderMove","numberActiveTouches","Math","abs","isShiftGesture","PanResponder","create","onPanResponderRelease","onPanResponderTerminate","evt","onPanResponderTerminationRequest","onShouldBlockNativeResponder","onStartShouldSetPanResponderCapture","onMoveShouldSetPanResponderCapture","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/components/AnimatedTouchFeedback.js b/lib/commonjs/components/AnimatedTouchFeedback.js index 02a15b8..fb2fdfe 100644 --- a/lib/commonjs/components/AnimatedTouchFeedback.js +++ b/lib/commonjs/components/AnimatedTouchFeedback.js @@ -37,7 +37,9 @@ const AnimatedTouchFeedback = ({ }, [animationDelay, animationDuration]); return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, { pointerEvents: "none", - style: [styles.animatedTouchFeedback, { + style: [ + // eslint-disable-next-line @typescript-eslint/no-use-before-define + styles.animatedTouchFeedback, { opacity: appearDisappearAnimRef.current.interpolate({ inputRange: [0, 1], outputRange: [0, 0.3] diff --git a/lib/commonjs/components/AnimatedTouchFeedback.js.map b/lib/commonjs/components/AnimatedTouchFeedback.js.map index b33e7fb..3330ce4 100644 --- a/lib/commonjs/components/AnimatedTouchFeedback.js.map +++ b/lib/commonjs/components/AnimatedTouchFeedback.js.map @@ -1 +1 @@ -{"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":[]} +{"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 14318a9..66c6c65 100644 --- a/lib/commonjs/components/StaticPin.js +++ b/lib/commonjs/components/StaticPin.js @@ -53,7 +53,9 @@ const StaticPin = ({ style: [{ left: staticPinPosition.x, top: staticPinPosition.y - }, styles.pinWrapper, { + }, + // eslint-disable-next-line @typescript-eslint/no-use-before-define + styles.pinWrapper, { opacity, transform }], @@ -69,7 +71,7 @@ const StaticPin = ({ ...panResponder.panHandlers, children: staticPinIcon || /*#__PURE__*/ - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-use-before-define (0, _jsxRuntime.jsx)(_reactNative.Image, { source: require('../assets/pin.png'), style: styles.pin diff --git a/lib/commonjs/components/StaticPin.js.map b/lib/commonjs/components/StaticPin.js.map index 95f9eda..0ee0ad8 100644 --- a/lib/commonjs/components/StaticPin.js.map +++ b/lib/commonjs/components/StaticPin.js.map @@ -1 +1 @@ -{"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":[]} +{"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/debugHelper/index.js b/lib/commonjs/debugHelper/index.js index 75beac3..eb86437 100644 --- a/lib/commonjs/debugHelper/index.js +++ b/lib/commonjs/debugHelper/index.js @@ -16,7 +16,9 @@ const DebugTouchPoint = ({ }) => { const radius = diameter / 2; return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, { - style: [styles.debugPoint, { + style: [ + // eslint-disable-next-line @typescript-eslint/no-use-before-define + styles.debugPoint, { width: diameter, height: diameter, borderRadius: diameter, @@ -36,7 +38,9 @@ const DebugRect = ({ }) => { const width = 5; return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, { - style: [styles.debugRect, { + style: [ + // eslint-disable-next-line @typescript-eslint/no-use-before-define + styles.debugRect, { width, height, backgroundColor: color, diff --git a/lib/commonjs/debugHelper/index.js.map b/lib/commonjs/debugHelper/index.js.map index 8e47667..82c0e22 100644 --- a/lib/commonjs/debugHelper/index.js.map +++ b/lib/commonjs/debugHelper/index.js.map @@ -1 +1 @@ -{"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":[]} +{"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;IACL;IACAC,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;IACL;IACAC,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/getNextZoomStep.js b/lib/commonjs/helper/getNextZoomStep.js new file mode 100644 index 0000000..1ad0d46 --- /dev/null +++ b/lib/commonjs/helper/getNextZoomStep.js @@ -0,0 +1,31 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.getNextZoomStep = void 0; +/** + * Returns the next zoom step based on current step and zoomStep property. + * If we are zoomed all the way in -> return to initialzoom + * + * @returns {*} + */ +const getNextZoomStep = ({ + zoomStep, + maxZoom, + initialZoom, + zoomLevel +}) => { + if (maxZoom == null) return; + if (zoomLevel.toFixed(2) === maxZoom.toFixed(2)) { + return initialZoom; + } + if (zoomStep == null) return; + const nextZoomStep = zoomLevel * (1 + zoomStep); + if (nextZoomStep > maxZoom) { + return maxZoom; + } + return nextZoomStep; +}; +exports.getNextZoomStep = getNextZoomStep; +//# sourceMappingURL=getNextZoomStep.js.map \ No newline at end of file diff --git a/lib/commonjs/helper/getNextZoomStep.js.map b/lib/commonjs/helper/getNextZoomStep.js.map new file mode 100644 index 0000000..e956f68 --- /dev/null +++ b/lib/commonjs/helper/getNextZoomStep.js.map @@ -0,0 +1 @@ +{"version":3,"names":["getNextZoomStep","zoomStep","maxZoom","initialZoom","zoomLevel","toFixed","nextZoomStep","exports"],"sourceRoot":"../../../src","sources":["helper/getNextZoomStep.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,eAAe,GAAGA,CAAC;EAC9BC,QAAQ;EACRC,OAAO;EACPC,WAAW;EACXC;AAMF,CAAC,KAAK;EACJ,IAAIF,OAAO,IAAI,IAAI,EAAE;EAErB,IAAIE,SAAS,CAACC,OAAO,CAAC,CAAC,CAAC,KAAKH,OAAO,CAACG,OAAO,CAAC,CAAC,CAAC,EAAE;IAC/C,OAAOF,WAAW;EACpB;EAEA,IAAIF,QAAQ,IAAI,IAAI,EAAE;EAEtB,MAAMK,YAAY,GAAGF,SAAS,IAAI,CAAC,GAAGH,QAAQ,CAAC;EAC/C,IAAIK,YAAY,GAAGJ,OAAO,EAAE;IAC1B,OAAOA,OAAO;EAChB;EAEA,OAAOI,YAAY;AACrB,CAAC;AAACC,OAAA,CAAAP,eAAA,GAAAA,eAAA","ignoreList":[]} diff --git a/lib/commonjs/hooks/useDebugPoints.js b/lib/commonjs/hooks/useDebugPoints.js new file mode 100644 index 0000000..12308dd --- /dev/null +++ b/lib/commonjs/hooks/useDebugPoints.js @@ -0,0 +1,40 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.useDebugPoints = void 0; +var _react = require("react"); +var _useLatestCallback = require("./useLatestCallback"); +const useDebugPoints = ({ + originalPageX, + originalPageY +}) => { + const [debugPoints, setDebugPoints] = (0, _react.useState)([]); + + /** + * Used to debug pinch events + * @param gestureResponderEvent + * @param zoomCenter + * @param points + */ + const setPinchDebugPoints = (0, _useLatestCallback.useLatestCallback)((gestureResponderEvent, zoomCenter, ...points) => { + const { + touches + } = gestureResponderEvent.nativeEvent; + setDebugPoints([{ + x: touches[0].pageX - originalPageX, + y: touches[0].pageY - originalPageY + }, { + x: touches[1].pageX - originalPageX, + y: touches[1].pageY - originalPageY + }, zoomCenter, ...points]); + }); + return { + debugPoints, + setDebugPoints, + setPinchDebugPoints + }; +}; +exports.useDebugPoints = useDebugPoints; +//# sourceMappingURL=useDebugPoints.js.map \ No newline at end of file diff --git a/lib/commonjs/hooks/useDebugPoints.js.map b/lib/commonjs/hooks/useDebugPoints.js.map new file mode 100644 index 0000000..7c9a084 --- /dev/null +++ b/lib/commonjs/hooks/useDebugPoints.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_react","require","_useLatestCallback","useDebugPoints","originalPageX","originalPageY","debugPoints","setDebugPoints","useState","setPinchDebugPoints","useLatestCallback","gestureResponderEvent","zoomCenter","points","touches","nativeEvent","x","pageX","y","pageY","exports"],"sourceRoot":"../../../src","sources":["hooks/useDebugPoints.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAIA,IAAAC,kBAAA,GAAAD,OAAA;AAEO,MAAME,cAAc,GAAGA,CAAC;EAC7BC,aAAa;EACbC;AAIF,CAAC,KAAK;EACJ,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAG,IAAAC,eAAQ,EAAU,EAAE,CAAC;;EAE3D;AACF;AACA;AACA;AACA;AACA;EACE,MAAMC,mBAAmB,GAAG,IAAAC,oCAAiB,EAC3C,CACEC,qBAA4C,EAC5CC,UAAiB,EACjB,GAAGC,MAAe,KACf;IACH,MAAM;MAAEC;IAAQ,CAAC,GAAGH,qBAAqB,CAACI,WAAW;IAErDR,cAAc,CAAC,CACb;MACES,CAAC,EAAEF,OAAO,CAAC,CAAC,CAAC,CAACG,KAAK,GAAGb,aAAa;MACnCc,CAAC,EAAEJ,OAAO,CAAC,CAAC,CAAC,CAACK,KAAK,GAAGd;IACxB,CAAC,EACD;MACEW,CAAC,EAAEF,OAAO,CAAC,CAAC,CAAC,CAACG,KAAK,GAAGb,aAAa;MACnCc,CAAC,EAAEJ,OAAO,CAAC,CAAC,CAAC,CAACK,KAAK,GAAGd;IACxB,CAAC,EACDO,UAAU,EACV,GAAGC,MAAM,CACV,CAAC;EACJ,CACF,CAAC;EAED,OAAO;IAAEP,WAAW;IAAEC,cAAc;IAAEE;EAAoB,CAAC;AAC7D,CAAC;AAACW,OAAA,CAAAjB,cAAA,GAAAA,cAAA","ignoreList":[]} diff --git a/lib/commonjs/hooks/useZoomSubject.js b/lib/commonjs/hooks/useZoomSubject.js new file mode 100644 index 0000000..e3e8e0b --- /dev/null +++ b/lib/commonjs/hooks/useZoomSubject.js @@ -0,0 +1,78 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.useZoomSubject = void 0; +var _react = require("react"); +var _useLatestCallback = require("./useLatestCallback"); +const useZoomSubject = () => { + const wrapperRef = (0, _react.useRef)(null); + 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 measureZoomSubjectInterval = (0, _react.useRef)(); + + /** + * Get the original box dimensions and save them for later use. + * (They will be used to calculate boxBorders) + * + * @private + */ + const measure = (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` + // when navigating back (react-navigation stack) from another view + // while closing the keyboard at the same time + setTimeout(() => { + // In normal conditions, we're supposed to measure zoomSubject instead of its wrapper. + // However, our zoomSubject may have been transformed by an initial zoomLevel or offset, + // 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) + wrapperRef.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; + setOriginalX(x); + setOriginalY(y); + setOriginalWidth(width); + setOriginalHeight(height); + setOriginalPageX(pageX); + setOriginalPageY(pageY); + }); + }); + }); + }); + (0, _react.useEffect)(() => { + measure(); + // 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(measure, 1e3); + return () => { + measureZoomSubjectInterval.current && clearInterval(measureZoomSubjectInterval.current); + }; + }, []); + return { + wrapperRef, + measure, + originalWidth, + originalHeight, + originalPageX, + originalPageY, + originalX, + originalY + }; +}; +exports.useZoomSubject = useZoomSubject; +//# sourceMappingURL=useZoomSubject.js.map \ No newline at end of file diff --git a/lib/commonjs/hooks/useZoomSubject.js.map b/lib/commonjs/hooks/useZoomSubject.js.map new file mode 100644 index 0000000..937b6c3 --- /dev/null +++ b/lib/commonjs/hooks/useZoomSubject.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_react","require","_useLatestCallback","useZoomSubject","wrapperRef","useRef","originalWidth","setOriginalWidth","useState","originalHeight","setOriginalHeight","originalPageX","setOriginalPageX","originalPageY","setOriginalPageY","originalX","setOriginalX","originalY","setOriginalY","measureZoomSubjectInterval","measure","useLatestCallback","requestAnimationFrame","setTimeout","current","x","y","width","height","pageX","pageY","useEffect","setInterval","clearInterval","exports"],"sourceRoot":"../../../src","sources":["hooks/useZoomSubject.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAGA,IAAAC,kBAAA,GAAAD,OAAA;AAEO,MAAME,cAAc,GAAGA,CAAA,KAAM;EAClC,MAAMC,UAAU,GAAG,IAAAC,aAAM,EAAO,IAAI,CAAC;EACrC,MAAM,CAACC,aAAa,EAAEC,gBAAgB,CAAC,GAAG,IAAAC,eAAQ,EAAC,CAAC,CAAC;EACrD,MAAM,CAACC,cAAc,EAAEC,iBAAiB,CAAC,GAAG,IAAAF,eAAQ,EAAC,CAAC,CAAC;EACvD,MAAM,CAACG,aAAa,EAAEC,gBAAgB,CAAC,GAAG,IAAAJ,eAAQ,EAAC,CAAC,CAAC;EACrD,MAAM,CAACK,aAAa,EAAEC,gBAAgB,CAAC,GAAG,IAAAN,eAAQ,EAAC,CAAC,CAAC;EACrD,MAAM,CAACO,SAAS,EAAEC,YAAY,CAAC,GAAG,IAAAR,eAAQ,EAAC,CAAC,CAAC;EAC7C,MAAM,CAACS,SAAS,EAAEC,YAAY,CAAC,GAAG,IAAAV,eAAQ,EAAC,CAAC,CAAC;EAC7C,MAAMW,0BAA0B,GAAG,IAAAd,aAAM,EAAe,CAAC;;EAEzD;AACF;AACA;AACA;AACA;AACA;EACE,MAAMe,OAAO,GAAG,IAAAC,oCAAiB,EAAC,MAAM;IACtC;IACAC,qBAAqB,CAAC,MAAM;MAC1B;MACA;MACA;MACAC,UAAU,CAAC,MAAM;QACf;QACA;QACA;QACA;QACA;QACAnB,UAAU,CAACoB,OAAO,EAAEJ,OAAO,CAAC,CAACK,CAAC,EAAEC,CAAC,EAAEC,KAAK,EAAEC,MAAM,EAAEC,KAAK,EAAEC,KAAK,KAAK;UACjE;UACA;UACA;UACA,IAAI,CAACD,KAAK,IAAI,CAACC,KAAK,IAAI,CAACH,KAAK,IAAI,CAACC,MAAM,EAAE;UAE3CZ,YAAY,CAACS,CAAC,CAAC;UACfP,YAAY,CAACQ,CAAC,CAAC;UACfnB,gBAAgB,CAACoB,KAAK,CAAC;UACvBjB,iBAAiB,CAACkB,MAAM,CAAC;UACzBhB,gBAAgB,CAACiB,KAAK,CAAC;UACvBf,gBAAgB,CAACgB,KAAK,CAAC;QACzB,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,IAAAC,gBAAS,EAAC,MAAM;IACdX,OAAO,CAAC,CAAC;IACT;IACA;IACA;IACA;IACA;IACA;IACA;IACAD,0BAA0B,CAACK,OAAO,GAAGQ,WAAW,CAACZ,OAAO,EAAE,GAAG,CAAC;IAE9D,OAAO,MAAM;MACXD,0BAA0B,CAACK,OAAO,IAChCS,aAAa,CAACd,0BAA0B,CAACK,OAAO,CAAC;IACrD,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IACLpB,UAAU;IACVgB,OAAO;IACPd,aAAa;IACbG,cAAc;IACdE,aAAa;IACbE,aAAa;IACbE,SAAS;IACTE;EACF,CAAC;AACH,CAAC;AAACiB,OAAA,CAAA/B,cAAA,GAAAA,cAAA","ignoreList":[]} diff --git a/lib/module/ReactNativeZoomableView.js b/lib/module/ReactNativeZoomableView.js index 2f6c9e6..e269932 100644 --- a/lib/module/ReactNativeZoomableView.js +++ b/lib/module/ReactNativeZoomableView.js @@ -1,7 +1,7 @@ "use strict"; import { debounce, defaults } from 'lodash'; -import React, { useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from 'react'; +import React, { 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,35 @@ import { StaticPin } from './components/StaticPin'; import { DebugTouchPoint } from './debugHelper'; import { calcGestureCenterPoint, calcGestureTouchDistance, calcNewScaledOffsetForZoomCentering } from './helper'; import { viewportPositionToImagePosition } from './helper/coordinateConversion'; +import { getNextZoomStep } from './helper/getNextZoomStep'; +import { useDebugPoints } from './hooks/useDebugPoints'; import { useLatestCallback } from './hooks/useLatestCallback'; +import { useZoomSubject } from './hooks/useZoomSubject'; import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; 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 { + wrapperRef: zoomSubjectWrapperRef, + measure: measureZoomSubject, + originalWidth, + originalHeight, + originalPageX, + originalPageY, + originalX, + originalY + } = useZoomSubject(); const [pinSize, setPinSize] = useState({ width: 0, height: 0 }); - const [debugPoints, setDebugPoints] = useState([]); const [stateTouches, setStateTouches] = useState([]); - const zoomSubjectWrapperRef = useRef(null); + const { + debugPoints, + setDebugPoints, + setPinchDebugPoints + } = useDebugPoints({ + originalPageX, + originalPageY + }); const gestureHandlers = useRef(); const doubleTapFirstTapReleaseTimestamp = useRef(); props = defaults({}, props, { @@ -51,6 +64,16 @@ const ReactNativeZoomableView = (props, ref) => { onStaticPinPositionMove: undefined, disablePanOnInitialZoom: false }); + const { + staticPinIcon, + children, + visualTouchFeedbackEnabled, + doubleTapDelay, + staticPinPosition, + onStaticPinLongPress, + onStaticPinPress, + pinProps + } = props; const panAnim = useRef(new Animated.ValueXY({ x: 0, y: 0 @@ -72,29 +95,81 @@ const ReactNativeZoomableView = (props, ref) => { 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 - // (aka gesture handling responsibility is taken over by another 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. - _handlePanResponderEnd(evt, gestureState); - props.onPanResponderTerminate?.(evt, gestureState, _getZoomableViewEventObject()); + + /** + * Returns additional information about components current state for external event hooks + * + * @returns {{}} + * @private + */ + const _getZoomableViewEventObject = useLatestCallback((overwriteObj = {}) => { + return { + zoomLevel: zoomLevel.current, + offsetX: offsetX.current, + offsetY: offsetY.current, + originalHeight, + originalWidth, + originalPageX, + originalPageY, + ...overwriteObj + }; + }); + const _staticPinPosition = useLatestCallback(() => { + if (!props.staticPinPosition) return; + if (!props.contentWidth || !props.contentHeight) return; + return viewportPositionToImagePosition({ + viewportPosition: { + x: props.staticPinPosition.x, + y: props.staticPinPosition.y }, - 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) => props.onShouldBlockNativeResponder?.(evt, gestureState, _getZoomableViewEventObject()) ?? true, - onStartShouldSetPanResponderCapture: (evt, gestureState) => !!props.onStartShouldSetPanResponderCapture?.(evt, gestureState), - onMoveShouldSetPanResponderCapture: (evt, gestureState) => !!props.onMoveShouldSetPanResponderCapture?.(evt, gestureState) + imageSize: { + height: props.contentHeight, + width: props.contentWidth + }, + zoomableEvent: { + ..._getZoomableViewEventObject(), + offsetX: offsetX.current, + offsetY: offsetY.current, + zoomLevel: zoomLevel.current + } }); + }); + const _updateStaticPin = useLatestCallback(() => { + const position = _staticPinPosition(); + if (!position) return; + 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]); + }); + const onStaticPinPositionChange = useLatestCallback(props.onStaticPinPositionChange || (() => undefined)); + const debouncedOnStaticPinPositionChange = useMemo(() => debounce(onStaticPinPositionChange, 100), []); + + /** + * try to invoke onTransform + * @private + */ + const _invokeOnTransform = useLatestCallback(() => { + const zoomableViewEvent = _getZoomableViewEventObject(); + const position = _staticPinPosition(); + if (!zoomableViewEvent.originalWidth || !zoomableViewEvent.originalHeight) return { + successful: false + }; + props.onTransform?.(zoomableViewEvent); + if (position) { + props.onStaticPinPositionMove?.(position); + debouncedOnStaticPinPositionChange(position); + } + return { + successful: true + }; + }); + useLayoutEffect(() => { if (props.zoomAnimatedValue) zoomAnim.current = props.zoomAnimatedValue; if (props.panAnimatedValueXY) panAnim.current = props.panAnimatedValueXY; if (props.initialZoom) zoomLevel.current = props.initialZoom; @@ -164,95 +239,6 @@ const ReactNativeZoomableView = (props, ref) => { 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), []); - - /** - * try to invoke onTransform - * @private - */ - const _invokeOnTransform = useLatestCallback(() => { - const zoomableViewEvent = _getZoomableViewEventObject(); - const position = _staticPinPosition(); - if (!zoomableViewEvent.originalWidth || !zoomableViewEvent.originalHeight) return { - successful: false - }; - props.onTransform?.(zoomableViewEvent); - if (position) { - props.onStaticPinPositionMove?.(position); - debouncedOnStaticPinPositionChange(position); - } - return { - successful: true - }; - }); - - /** - * Returns additional information about components current state for external event hooks - * - * @returns {{}} - * @private - */ - const _getZoomableViewEventObject = useLatestCallback((overwriteObj = {}) => { - 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. - * (They will be used to calculate boxBorders) - * - * @private - */ - 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` - // when navigating back (react-navigation stack) from another view - // while closing the keyboard at the same time - setTimeout(() => { - // In normal conditions, we're supposed to measure zoomSubject instead of its wrapper. - // However, our zoomSubject may have been transformed by an initial zoomLevel or offset, - // 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) - 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; - setOriginalX(x); - setOriginalY(y); - setOriginalWidth(width); - setOriginalHeight(height); - setOriginalPageX(pageX); - setOriginalPageY(pageY); - }); - }); - }); - }); /** * Handles the start of touch events and checks for taps @@ -297,130 +283,64 @@ const ReactNativeZoomableView = (props, ref) => { }); /** - * Handles the end of touch events + * Calculates the amount the offset should shift since the last position during panning * - * @param e - * @param gestureState + * @param {Vec2D} gestureCenterPoint * * @private */ - const _handlePanResponderEnd = useLatestCallback((e, gestureState) => { - if (!gestureType.current) { - _resolveAndHandleTap(e); - } - setDebugPoints([]); - lastGestureCenterPosition.current = null; - if (longPressTimeout.current) { - clearTimeout(longPressTimeout.current); - longPressTimeout.current = undefined; - } - 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 (props.staticPinPosition) { - _updateStaticPin(); + const _calcOffsetShiftSinceLastGestureState = useLatestCallback(gestureCenterPoint => { + const { + movementSensibility + } = props; + let shift = null; + 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 + }; } - gestureType.current = undefined; - gestureStarted.current = false; + lastGestureCenterPosition.current = gestureCenterPoint; + return shift; }); /** - * Handles the actual movement of our pan responder + * Handles the pinch movement and zooming * * @param e * @param gestureState * * @private */ - const _handlePanResponderMove = useLatestCallback((e, gestureState) => { - if (props.onPanResponderMove) { - if (props.onPanResponderMove(e, gestureState, _getZoomableViewEventObject())) { - return false; - } + const _handlePinching = useLatestCallback((e, gestureState) => { + if (!props.zoomEnabled) return; + const { + maxZoom, + minZoom, + pinchToZoomInSensitivity, + pinchToZoomOutSensitivity + } = props; + const distance = calcGestureTouchDistance(e, gestureState); + if (props.onZoomBefore && props.onZoomBefore(e, gestureState, _getZoomableViewEventObject())) { + return; } + if (!distance) return; + if (!lastGestureTouchDistance.current) return; - // 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; - } - 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 (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) { - gestureType.current = 'shift'; - _handleShifting(gestureState); - } - } - }); - - /** - * Handles the pinch movement and zooming - * - * @param e - * @param gestureState - * - * @private - */ - const _handlePinching = useLatestCallback((e, gestureState) => { - if (!props.zoomEnabled) return; - const { - maxZoom, - minZoom, - pinchToZoomInSensitivity, - pinchToZoomOutSensitivity - } = props; - const distance = calcGestureTouchDistance(e, gestureState); - if (props.onZoomBefore && props.onZoomBefore(e, gestureState, _getZoomableViewEventObject())) { - return; - } - if (!distance) return; - if (!lastGestureTouchDistance.current) return; - - // 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 - // 10 - 90% resistance - const deltaGrowthAdjustedBySensitivity = deltaGrowth * (1 - pinchToZoomSensitivity * 9 / 100); - let newZoomLevel = zoomLevel.current * (1 + deltaGrowthAdjustedBySensitivity); + // 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 + // 10 - 90% resistance + const deltaGrowthAdjustedBySensitivity = deltaGrowth * (1 - pinchToZoomSensitivity * 9 / 100); + let newZoomLevel = zoomLevel.current * (1 + deltaGrowthAdjustedBySensitivity); // make sure max and min zoom levels are respected if (maxZoom != null && newZoomLevel > maxZoom) { @@ -445,7 +365,7 @@ const ReactNativeZoomableView = (props, ref) => { } // Uncomment to debug - props.debug && _setPinchDebugPoints(e, zoomCenter); + props.debug && setPinchDebugPoints(e, zoomCenter); const oldOffsetX = offsetX.current; const oldOffsetY = offsetY.current; const oldScale = zoomLevel.current; @@ -470,48 +390,28 @@ const ReactNativeZoomableView = (props, ref) => { }); /** - * Used to debug pinch events - * @param gestureResponderEvent - * @param zoomCenter - * @param points - */ - const _setPinchDebugPoints = useLatestCallback((gestureResponderEvent, zoomCenter, ...points) => { - const { - touches - } = gestureResponderEvent.nativeEvent; - 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 - * - * @param {Vec2D} gestureCenterPoint + * Set the state to offset moved * - * @private + * @param {number} newOffsetX + * @param {number} newOffsetY + * @returns */ - const _calcOffsetShiftSinceLastGestureState = useLatestCallback(gestureCenterPoint => { + const _setNewOffsetPosition = useLatestCallback((newOffsetX, newOffsetY) => { const { - movementSensibility + onShiftingBefore, + onShiftingAfter } = props; - let shift = null; - 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 - }; + if (onShiftingBefore?.(null, null, _getZoomableViewEventObject())) { + return; } - lastGestureCenterPosition.current = gestureCenterPoint; - return shift; + offsetX.current = newOffsetX; + offsetY.current = newOffsetY; + panAnim.current.setValue({ + x: offsetX.current, + y: offsetY.current + }); + zoomAnim.current.setValue(zoomLevel.current); + onShiftingAfter?.(null, null, _getZoomableViewEventObject()); }); /** @@ -545,28 +445,87 @@ const ReactNativeZoomableView = (props, ref) => { }); /** - * Set the state to offset moved + * 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 {number} newOffsetX - * @param {number} newOffsetY - * @returns + * @param newZoomLevel + * @param zoomCenter - If not supplied, the container's center is the zoom center */ - const _setNewOffsetPosition = useLatestCallback((newOffsetX, newOffsetY) => { + 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()); + + // == 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; + }); + } + + // == Perform Zoom Animation == + getZoomToAnimation(zoomAnim.current, newZoomLevel).start(() => { + zoomAnim.current.removeListener(listenerId); + }); + // == Zoom Animation Ends == + + props.onZoomAfter?.(null, null, _getZoomableViewEventObject()); + return true; + }); + + /** + * Handles the double tap event + * + * @param e + * + * @private + */ + const _handleDoubleTap = useLatestCallback(e => { const { - onShiftingBefore, - onShiftingAfter + onDoubleTapBefore, + onDoubleTapAfter, + doubleTapZoomToCenter } = props; - if (onShiftingBefore?.(null, null, _getZoomableViewEventObject())) { - return; - } - offsetX.current = newOffsetX; - offsetY.current = newOffsetY; - panAnim.current.setValue({ - x: offsetX.current, - y: offsetY.current + onDoubleTapBefore?.(e, _getZoomableViewEventObject()); + const nextZoomStep = getNextZoomStep({ + zoomLevel: zoomLevel.current, + zoomStep: props.zoomStep, + maxZoom: props.maxZoom, + initialZoom: props.initialZoom }); - zoomAnim.current.setValue(zoomLevel.current); - onShiftingAfter?.(null, null, _getZoomableViewEventObject()); + if (nextZoomStep == null) return; + + // 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) { + zoomPositionCoordinates.x = 0; + zoomPositionCoordinates.y = 0; + } + publicZoomTo(nextZoomStep, zoomPositionCoordinates); + onDoubleTapAfter?.(e, _getZoomableViewEventObject({ + zoomLevel: nextZoomStep + })); }); /** @@ -655,142 +614,6 @@ const ReactNativeZoomableView = (props, ref) => { }); } }); - const _staticPinPosition = useLatestCallback(() => { - if (!props.staticPinPosition) return; - if (!props.contentWidth || !props.contentHeight) return; - return viewportPositionToImagePosition({ - viewportPosition: { - x: props.staticPinPosition.x, - y: props.staticPinPosition.y - }, - imageSize: { - height: props.contentHeight, - width: props.contentWidth - }, - zoomableEvent: { - ..._getZoomableViewEventObject(), - offsetX: offsetX.current, - offsetY: offsetY.current, - zoomLevel: zoomLevel.current - } - }); - }); - const _updateStaticPin = useLatestCallback(() => { - const position = _staticPinPosition(); - if (!position) return; - 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]); - }); - - /** - * Handles the double tap event - * - * @param e - * - * @private - */ - const _handleDoubleTap = useLatestCallback(e => { - const { - onDoubleTapBefore, - onDoubleTapAfter, - doubleTapZoomToCenter - } = props; - onDoubleTapBefore?.(e, _getZoomableViewEventObject()); - const nextZoomStep = _getNextZoomStep(); - if (nextZoomStep == null) return; - - // 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) { - zoomPositionCoordinates.x = 0; - zoomPositionCoordinates.y = 0; - } - 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 {*} - */ - const _getNextZoomStep = useLatestCallback(() => { - const { - zoomStep, - maxZoom, - initialZoom - } = props; - if (maxZoom == null) return; - if (zoomLevel.current.toFixed(2) === maxZoom.toFixed(2)) { - return initialZoom; - } - if (zoomStep == null) return; - 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. - * 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 - */ - 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()); - - // == 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; - }); - } - - // == Perform Zoom Animation == - getZoomToAnimation(zoomAnim.current, newZoomLevel).start(() => { - zoomAnim.current.removeListener(listenerId); - }); - // == Zoom Animation Ends == - - props.onZoomAfter?.(null, null, _getZoomableViewEventObject()); - return true; - }); /** * Zooms in or out by a specified change level @@ -850,23 +673,132 @@ const ReactNativeZoomableView = (props, ref) => { return gestureStarted.current; } })); - const { - staticPinIcon, - children, - visualTouchFeedbackEnabled, - doubleTapDelay, - staticPinPosition, - onStaticPinLongPress, - onStaticPinPress, - pinProps - } = props; - return /*#__PURE__*/_jsxs(View, { + + /** + * Handles the end of touch events + * + * @param e + * @param gestureState + * + * @private + */ + const _handlePanResponderEnd = useLatestCallback((e, gestureState) => { + if (!gestureType.current) { + _resolveAndHandleTap(e); + } + setDebugPoints([]); + lastGestureCenterPosition.current = null; + if (longPressTimeout.current) { + clearTimeout(longPressTimeout.current); + longPressTimeout.current = undefined; + } + 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 (props.staticPinPosition) { + _updateStaticPin(); + } + gestureType.current = undefined; + gestureStarted.current = false; + }); + + /** + * Handles the actual movement of our pan responder + * + * @param e + * @param gestureState + * + * @private + */ + 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. + if (gestureState.numberActiveTouches <= 2) { + if (!gestureStarted.current) { + _handlePanResponderGrant(e, gestureState); + } + } else { + if (gestureStarted.current) { + _handlePanResponderEnd(e, gestureState); + } + return true; + } + 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 (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) { + gestureType.current = 'shift'; + _handleShifting(gestureState); + } + } + }); + 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 + // (aka gesture handling responsibility is taken over by another 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. + _handlePanResponderEnd(evt, gestureState); + props.onPanResponderTerminate?.(evt, gestureState, _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) => props.onShouldBlockNativeResponder?.(evt, gestureState, _getZoomableViewEventObject()) ?? true, + onStartShouldSetPanResponderCapture: (evt, gestureState) => !!props.onStartShouldSetPanResponderCapture?.(evt, gestureState), + onMoveShouldSetPanResponderCapture: (evt, gestureState) => !!props.onMoveShouldSetPanResponderCapture?.(evt, gestureState) + }); + }, []); + return /*#__PURE__*/_jsxs(View + // eslint-disable-next-line @typescript-eslint/no-use-before-define + , { style: styles.container, ...gestureHandlers.current?.panHandlers, ref: zoomSubjectWrapperRef, onLayout: measureZoomSubject, children: [/*#__PURE__*/_jsx(Animated.View, { - style: [styles.zoomSubject, props.style, { + style: [ + // eslint-disable-next-line @typescript-eslint/no-use-before-define + 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 diff --git a/lib/module/ReactNativeZoomableView.js.map b/lib/module/ReactNativeZoomableView.js.map index 4c655bd..e72f481 100644 --- a/lib/module/ReactNativeZoomableView.js.map +++ b/lib/module/ReactNativeZoomableView.js.map @@ -1 +1 @@ -{"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":";;AAAA,SAASA,QAAQ,EAAEC,QAAQ,QAAQ,QAAQ;AAC3C,OAAOC,KAAK,IAEVC,SAAS,EACTC,mBAAmB,EACnBC,eAAe,EACfC,OAAO,EACPC,MAAM,EACNC,QAAQ,QACH,OAAO;AACd,SACEC,QAAQ,EAERC,YAAY,EAIZC,UAAU,EACVC,IAAI,QACC,cAAc;AAErB,SAASC,kBAAkB,QAAQ,cAAc;AACjD,SAASC,qBAAqB,QAAQ,cAAc;AACpD,SAASC,SAAS,QAAQ,wBAAwB;AAClD,SAASC,eAAe,QAAQ,eAAe;AAC/C,SACEC,sBAAsB,EACtBC,wBAAwB,EACxBC,mCAAmC,QAC9B,UAAU;AACjB,SAASC,+BAA+B,QAAQ,+BAA+B;AAC/E,SAASC,iBAAiB,QAAQ,2BAA2B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAiB9D,MAAMC,uBAGL,GAAGA,CAACC,KAAK,EAAEC,GAAG,KAAK;EAClB,MAAM,CAACC,aAAa,EAAEC,gBAAgB,CAAC,GAAGtB,QAAQ,CAAC,CAAC,CAAC;EACrD,MAAM,CAACuB,cAAc,EAAEC,iBAAiB,CAAC,GAAGxB,QAAQ,CAAC,CAAC,CAAC;EACvD,MAAM,CAACyB,aAAa,EAAEC,gBAAgB,CAAC,GAAG1B,QAAQ,CAAC,CAAC,CAAC;EACrD,MAAM,CAAC2B,aAAa,EAAEC,gBAAgB,CAAC,GAAG5B,QAAQ,CAAC,CAAC,CAAC;EACrD,MAAM,CAAC6B,SAAS,EAAEC,YAAY,CAAC,GAAG9B,QAAQ,CAAC,CAAC,CAAC;EAC7C,MAAM,CAAC+B,SAAS,EAAEC,YAAY,CAAC,GAAGhC,QAAQ,CAAC,CAAC,CAAC;EAC7C,MAAM,CAACiC,OAAO,EAAEC,UAAU,CAAC,GAAGlC,QAAQ,CAAC;IAAEmC,KAAK,EAAE,CAAC;IAAEC,MAAM,EAAE;EAAE,CAAC,CAAC;EAC/D,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAGtC,QAAQ,CAAU,EAAE,CAAC;EAC3D,MAAM,CAACuC,YAAY,EAAEC,eAAe,CAAC,GAAGxC,QAAQ,CAAe,EAAE,CAAC;EAElE,MAAMyC,qBAAqB,GAAG1C,MAAM,CAAO,IAAI,CAAC;EAChD,MAAM2C,eAAe,GAAG3C,MAAM,CAAuB,CAAC;EACtD,MAAM4C,iCAAiC,GAAG5C,MAAM,CAAS,CAAC;EAE1DoB,KAAK,GAAG1B,QAAQ,CAAC,CAAC,CAAC,EAAE0B,KAAK,EAAE;IAC1ByB,WAAW,EAAE,IAAI;IACjBC,UAAU,EAAE,IAAI;IAChBC,WAAW,EAAE,CAAC;IACdC,cAAc,EAAE,CAAC;IACjBC,cAAc,EAAE,CAAC;IACjBC,OAAO,EAAE,GAAG;IACZC,OAAO,EAAE,GAAG;IACZC,wBAAwB,EAAE,CAAC;IAC3BC,yBAAyB,EAAE,CAAC;IAC5BC,mBAAmB,EAAE,CAAC;IACtBC,cAAc,EAAE,GAAG;IACnBC,QAAQ,EAAE,GAAG;IACbC,WAAW,EAAEC,SAAS;IACtBC,iBAAiB,EAAE,GAAG;IACtBC,YAAY,EAAEF,SAAS;IACvBG,aAAa,EAAEH,SAAS;IACxBI,0BAA0B,EAAE,IAAI;IAChCC,iBAAiB,EAAEL,SAAS;IAC5BM,aAAa,EAAEN,SAAS;IACxBO,yBAAyB,EAAEP,SAAS;IACpCQ,uBAAuB,EAAER,SAAS;IAClCS,uBAAuB,EAAE;EAC3B,CAAC,CAAC;EAEF,MAAMC,OAAO,GAAGpE,MAAM,CAAC,IAAIE,QAAQ,CAACmE,OAAO,CAAC;IAAEC,CAAC,EAAE,CAAC;IAAEC,CAAC,EAAE;EAAE,CAAC,CAAC,CAAC;EAC5D,MAAMC,QAAQ,GAAGxE,MAAM,CAAC,IAAIE,QAAQ,CAACuE,KAAK,CAAC,CAAC,CAAC,CAAC;EAE9C,MAAMC,OAAO,GAAG1E,MAAM,CAAC,CAAC,CAAC;EACzB,MAAM2E,OAAO,GAAG3E,MAAM,CAAC,CAAC,CAAC;EAEzB,MAAM4E,SAAS,GAAG5E,MAAM,CAAC,CAAC,CAAC;EAC3B,MAAM6E,yBAAyB,GAAG7E,MAAM,CACtC,IACF,CAAC;EACD,MAAM8E,wBAAwB,GAAG9E,MAAM,CAAgB,GAAG,CAAC;EAC3D,MAAM+E,WAAW,GAAG/E,MAAM,CAAoB,CAAC;EAE/C,MAAMgF,cAAc,GAAGhF,MAAM,CAAC,KAAK,CAAC;;EAEpC;AACF;AACA;EACE,MAAMiF,gBAAgB,GAAGjF,MAAM,CAAiB,CAAC;EACjD,MAAMkF,gCAAgC,GAAGlF,MAAM,CAAU,CAAC;EAC1D,MAAMmF,kBAAkB,GAAGnF,MAAM,CAAiB,CAAC;EACnD,MAAMoF,OAAO,GAAGpF,MAAM,CAAe,EAAE,CAAC;EACxC,MAAMqF,iBAAiB,GAAGrF,MAAM,CAAa,CAAC;EAC9C,MAAMsF,0BAA0B,GAAGtF,MAAM,CAAe,CAAC;EAEzDF,eAAe,CAAC,MAAM;IACpB6C,eAAe,CAAC4C,OAAO,GAAGpF,YAAY,CAACqF,MAAM,CAAC;MAC5CC,4BAA4B,EAAEC,iCAAiC;MAC/DC,mBAAmB,EAAEC,wBAAwB;MAC7CC,kBAAkB,EAAEC,uBAAuB;MAC3CC,qBAAqB,EAAEC,sBAAsB;MAC7CC,uBAAuB,EAAEA,CAACC,GAAG,EAAEC,YAAY,KAAK;QAC9C;QACA;QACA;QACA;QACA;QACA;QACAH,sBAAsB,CAACE,GAAG,EAAEC,YAAY,CAAC;QACzC/E,KAAK,CAAC6E,uBAAuB,GAC3BC,GAAG,EACHC,YAAY,EACZC,2BAA2B,CAAC,CAC9B,CAAC;MACH,CAAC;MACDC,gCAAgC,EAAEA,CAACH,GAAG,EAAEC,YAAY,KAClD,CAAC,CAAC/E,KAAK,CAACiF,gCAAgC,GACtCH,GAAG,EACHC,YAAY,EACZC,2BAA2B,CAAC,CAC9B,CAAC;MACH;MACAE,4BAA4B,EAAEA,CAACJ,GAAG,EAAEC,YAAY,KAC9C/E,KAAK,CAACkF,4BAA4B,GAChCJ,GAAG,EACHC,YAAY,EACZC,2BAA2B,CAAC,CAC9B,CAAC,IAAI,IAAI;MACXG,mCAAmC,EAAEA,CAACL,GAAG,EAAEC,YAAY,KACrD,CAAC,CAAC/E,KAAK,CAACmF,mCAAmC,GAAGL,GAAG,EAAEC,YAAY,CAAC;MAClEK,kCAAkC,EAAEA,CAACN,GAAG,EAAEC,YAAY,KACpD,CAAC,CAAC/E,KAAK,CAACoF,kCAAkC,GAAGN,GAAG,EAAEC,YAAY;IAClE,CAAC,CAAC;IAEF,IAAI/E,KAAK,CAACqF,iBAAiB,EAAEjC,QAAQ,CAACe,OAAO,GAAGnE,KAAK,CAACqF,iBAAiB;IACvE,IAAIrF,KAAK,CAACsF,kBAAkB,EAAEtC,OAAO,CAACmB,OAAO,GAAGnE,KAAK,CAACsF,kBAAkB;IAExE,IAAItF,KAAK,CAAC2B,WAAW,EAAE6B,SAAS,CAACW,OAAO,GAAGnE,KAAK,CAAC2B,WAAW;IAC5D,IAAI3B,KAAK,CAAC4B,cAAc,IAAI,IAAI,EAAE0B,OAAO,CAACa,OAAO,GAAGnE,KAAK,CAAC4B,cAAc;IACxE,IAAI5B,KAAK,CAAC6B,cAAc,IAAI,IAAI,EAAE0B,OAAO,CAACY,OAAO,GAAGnE,KAAK,CAAC6B,cAAc;IAExEmB,OAAO,CAACmB,OAAO,CAACoB,QAAQ,CAAC;MAAErC,CAAC,EAAEI,OAAO,CAACa,OAAO;MAAEhB,CAAC,EAAEI,OAAO,CAACY;IAAQ,CAAC,CAAC;IACpEf,QAAQ,CAACe,OAAO,CAACoB,QAAQ,CAAC/B,SAAS,CAACW,OAAO,CAAC;IAC5CnB,OAAO,CAACmB,OAAO,CAACqB,WAAW,CAAC,CAAC;MAAEtC,CAAC;MAAEC;IAAE,CAAC,KAAK;MACxCG,OAAO,CAACa,OAAO,GAAGjB,CAAC;MACnBK,OAAO,CAACY,OAAO,GAAGhB,CAAC;IACrB,CAAC,CAAC;IACFC,QAAQ,CAACe,OAAO,CAACqB,WAAW,CAAC,CAAC;MAAEC;IAAM,CAAC,KAAK;MAC1CjC,SAAS,CAACW,OAAO,GAAGsB,KAAK;IAC3B,CAAC,CAAC;EACJ,CAAC,EAAE,EAAE,CAAC;EAEN,MAAM;IAAEhE;EAAY,CAAC,GAAGzB,KAAK;EAC7B,MAAM2B,WAAW,GAAG/C,MAAM,CAACoB,KAAK,CAAC2B,WAAW,CAAC;EAC7CA,WAAW,CAACwC,OAAO,GAAGnE,KAAK,CAAC2B,WAAW;EACvCjD,eAAe,CAAC,MAAM;IACpB,IAAI,CAAC+C,WAAW,IAAIE,WAAW,CAACwC,OAAO,EAAE;MACvCX,SAAS,CAACW,OAAO,GAAGxC,WAAW,CAACwC,OAAO;MACvCf,QAAQ,CAACe,OAAO,CAACoB,QAAQ,CAAC/B,SAAS,CAACW,OAAO,CAAC;IAC9C;EACF,CAAC,EAAE,CAAC1C,WAAW,CAAC,CAAC;EAEjB/C,eAAe,CACb,MAAM;IACJ,IACE,CAACoF,gCAAgC,CAACK,OAAO,IACzCuB,kBAAkB,CAAC,CAAC,CAACC,UAAU,EAC/B;MACA3C,OAAO,CAACmB,OAAO,CAACqB,WAAW,CAAC,MAAME,kBAAkB,CAAC,CAAC,CAAC;MACvDtC,QAAQ,CAACe,OAAO,CAACqB,WAAW,CAAC,MAAME,kBAAkB,CAAC,CAAC,CAAC;MACxD5B,gCAAgC,CAACK,OAAO,GAAG,IAAI;IACjD;EACF,CAAC;EACD;EACA,CAACjE,aAAa,EAAEE,cAAc,CAChC,CAAC;EAED,MAAMwF,QAAQ,GAAGhH,MAAM,CAACoB,KAAK,CAAC4F,QAAQ,CAAC;EACvCA,QAAQ,CAACzB,OAAO,GAAGnE,KAAK,CAAC4F,QAAQ;;EAEjC;EACAlH,eAAe,CAAC,MAAM;IACpB;IACA;IACA;IACA,MAAMmH,MAAM,GAAG;MACb7E,KAAK,EAAEd,aAAa;MACpBe,MAAM,EAAEb,cAAc;MACtB8C,CAAC,EAAExC,SAAS;MACZyC,CAAC,EAAEvC;IACL,CAAC;IACDgF,QAAQ,CAACzB,OAAO,GAAG;MAAE2B,WAAW,EAAE;QAAED;MAAO;IAAE,CAAC,CAAC;IAE/C,IAAI/B,gCAAgC,CAACK,OAAO,EAAEuB,kBAAkB,CAAC,CAAC;EACpE,CAAC,EAAE,CACDtF,cAAc,EACdF,aAAa,EACbI,aAAa,EACbE,aAAa,EACbE,SAAS,EACTE,SAAS,CACV,CAAC;;EAEF;EACAlC,eAAe,CAAC,MAAM;IACpB,IAAIoF,gCAAgC,CAACK,OAAO,EAAEuB,kBAAkB,CAAC,CAAC;EACpE,CAAC,EAAE,CAAC1F,KAAK,CAAC2C,iBAAiB,EAAEO,CAAC,EAAElD,KAAK,CAAC2C,iBAAiB,EAAEQ,CAAC,CAAC,CAAC;EAE5D3E,SAAS,CAAC,MAAM;IACduH,kBAAkB,CAAC,CAAC;IACpB;IACA;IACA;IACA;IACA;IACA;IACA;IACA7B,0BAA0B,CAACC,OAAO,GAAG6B,WAAW,CAACD,kBAAkB,EAAE,GAAG,CAAC;IAEzE,OAAO,MAAM;MACX7B,0BAA0B,CAACC,OAAO,IAChC8B,aAAa,CAAC/B,0BAA0B,CAACC,OAAO,CAAC;IACrD,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMtB,yBAAyB,GAAGnD,iBAAiB,CACjDM,KAAK,CAAC6C,yBAAyB,KAAK,MAAMP,SAAS,CACrD,CAAC;EAED,MAAM4D,kCAAkC,GAAGvH,OAAO,CAChD,MAAMN,QAAQ,CAACwE,yBAAyB,EAAE,GAAG,CAAC,EAC9C,EACF,CAAC;;EAED;AACF;AACA;AACA;EACE,MAAM6C,kBAAkB,GAAGhG,iBAAiB,CAAC,MAAM;IACjD,MAAMyG,iBAAiB,GAAGnB,2BAA2B,CAAC,CAAC;IACvD,MAAMoB,QAAQ,GAAGC,kBAAkB,CAAC,CAAC;IAErC,IAAI,CAACF,iBAAiB,CAACjG,aAAa,IAAI,CAACiG,iBAAiB,CAAC/F,cAAc,EACvE,OAAO;MAAEuF,UAAU,EAAE;IAAM,CAAC;IAE9B3F,KAAK,CAACsG,WAAW,GAAGH,iBAAiB,CAAC;IAEtC,IAAIC,QAAQ,EAAE;MACZpG,KAAK,CAAC8C,uBAAuB,GAAGsD,QAAQ,CAAC;MACzCF,kCAAkC,CAACE,QAAQ,CAAC;IAC9C;IAEA,OAAO;MAAET,UAAU,EAAE;IAAK,CAAC;EAC7B,CAAC,CAAC;;EAEF;AACF;AACA;AACA;AACA;AACA;EACE,MAAMX,2BAA2B,GAAGtF,iBAAiB,CACnD,CAAC6G,YAAwC,GAAG,CAAC,CAAC,KAAwB;IACpE,OAAO;MACL/C,SAAS,EAAEA,SAAS,CAACW,OAAO;MAC5Bb,OAAO,EAAEA,OAAO,CAACa,OAAO;MACxBZ,OAAO,EAAEA,OAAO,CAACY,OAAO;MACxB/D,cAAc;MACdF,aAAa;MACbI,aAAa;MACbE,aAAa;MACb,GAAG+F;IACL,CAAC;EACH,CACF,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;EACE,MAAMR,kBAAkB,GAAGrG,iBAAiB,CAAC,MAAM;IACjD;IACA8G,qBAAqB,CAAC,MAAM;MAC1B;MACA;MACA;MACAC,UAAU,CAAC,MAAM;QACf;QACA;QACA;QACA;QACA;QACAnF,qBAAqB,CAAC6C,OAAO,EAAEuC,OAAO,CACpC,CAACxD,CAAC,EAAEC,CAAC,EAAEnC,KAAK,EAAEC,MAAM,EAAE0F,KAAK,EAAEC,KAAK,KAAK;UACrC;UACA;UACA;UACA,IAAI,CAACD,KAAK,IAAI,CAACC,KAAK,IAAI,CAAC5F,KAAK,IAAI,CAACC,MAAM,EAAE;UAE3CN,YAAY,CAACuC,CAAC,CAAC;UACfrC,YAAY,CAACsC,CAAC,CAAC;UACfhD,gBAAgB,CAACa,KAAK,CAAC;UACvBX,iBAAiB,CAACY,MAAM,CAAC;UACzBV,gBAAgB,CAACoG,KAAK,CAAC;UACvBlG,gBAAgB,CAACmG,KAAK,CAAC;QACzB,CACF,CAAC;MACH,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;;EAEF;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMtC,iCAAiC,GAAG5E,iBAAiB,CACzD,CAACmH,CAAwB,EAAE9B,YAAsC,KAAK;IACpE,IAAI/E,KAAK,CAACqE,4BAA4B,EAAE;MACtCrE,KAAK,CAACqE,4BAA4B,CAChCwC,CAAC,EACD9B,YAAY,EACZC,2BAA2B,CAAC,CAAC,EAC7B,KACF,CAAC;IACH;;IAEA;IACA;IACA;IACA;IACA,OAAO,IAAI;EACb,CACF,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACE,MAAMR,wBAEL,GAAG9E,iBAAiB,CAAC,CAACmH,CAAC,EAAE9B,YAAY,KAAK;IACzC,IAAI/E,KAAK,CAACqC,WAAW,EAAE;MACrBwE,CAAC,CAACC,OAAO,CAAC,CAAC;MACXjD,gBAAgB,CAACM,OAAO,GAAGsC,UAAU,CAAC,MAAM;QAC1CzG,KAAK,CAACqC,WAAW,GAAGwE,CAAC,EAAE9B,YAAY,EAAEC,2BAA2B,CAAC,CAAC,CAAC;QACnEnB,gBAAgB,CAACM,OAAO,GAAG7B,SAAS;MACtC,CAAC,EAAEtC,KAAK,CAACuC,iBAAiB,CAAC;IAC7B;IAEAvC,KAAK,CAACuE,mBAAmB,GAAGsC,CAAC,EAAE9B,YAAY,EAAEC,2BAA2B,CAAC,CAAC,CAAC;IAE3EhC,OAAO,CAACmB,OAAO,CAAC4C,aAAa,CAAC,CAAC;IAC/B3D,QAAQ,CAACe,OAAO,CAAC4C,aAAa,CAAC,CAAC;IAChCnD,cAAc,CAACO,OAAO,GAAG,IAAI;EAC/B,CAAC,CAAC;;EAEF;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMS,sBAEL,GAAGlF,iBAAiB,CAAC,CAACmH,CAAC,EAAE9B,YAAY,KAAK;IACzC,IAAI,CAACpB,WAAW,CAACQ,OAAO,EAAE;MACxB6C,oBAAoB,CAACH,CAAC,CAAC;IACzB;IAEA1F,cAAc,CAAC,EAAE,CAAC;IAElBsC,yBAAyB,CAACU,OAAO,GAAG,IAAI;IAExC,IAAIN,gBAAgB,CAACM,OAAO,EAAE;MAC5B8C,YAAY,CAACpD,gBAAgB,CAACM,OAAO,CAAC;MACtCN,gBAAgB,CAACM,OAAO,GAAG7B,SAAS;IACtC;IAEAtC,KAAK,CAACkH,iBAAiB,GAAGL,CAAC,EAAE9B,YAAY,EAAEC,2BAA2B,CAAC,CAAC,CAAC;IAEzE,IAAIrB,WAAW,CAACQ,OAAO,KAAK,OAAO,EAAE;MACnCnE,KAAK,CAACmH,SAAS,GAAGN,CAAC,EAAE9B,YAAY,EAAEC,2BAA2B,CAAC,CAAC,CAAC;IACnE,CAAC,MAAM,IAAIrB,WAAW,CAACQ,OAAO,KAAK,OAAO,EAAE;MAC1CnE,KAAK,CAACoH,aAAa,GAAGP,CAAC,EAAE9B,YAAY,EAAEC,2BAA2B,CAAC,CAAC,CAAC;IACvE;IAEA,IAAIhF,KAAK,CAAC2C,iBAAiB,EAAE;MAC3B0E,gBAAgB,CAAC,CAAC;IACpB;IAEA1D,WAAW,CAACQ,OAAO,GAAG7B,SAAS;IAC/BsB,cAAc,CAACO,OAAO,GAAG,KAAK;EAChC,CAAC,CAAC;;EAEF;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMO,uBAAuB,GAAGhF,iBAAiB,CAC/C,CAACmH,CAAwB,EAAE9B,YAAsC,KAAK;IACpE,IAAI/E,KAAK,CAACyE,kBAAkB,EAAE;MAC5B,IACEzE,KAAK,CAACyE,kBAAkB,CACtBoC,CAAC,EACD9B,YAAY,EACZC,2BAA2B,CAAC,CAC9B,CAAC,EACD;QACA,OAAO,KAAK;MACd;IACF;;IAEA;IACA;IACA,IAAID,YAAY,CAACuC,mBAAmB,IAAI,CAAC,EAAE;MACzC,IAAI,CAAC1D,cAAc,CAACO,OAAO,EAAE;QAC3BK,wBAAwB,CAACqC,CAAC,EAAE9B,YAAY,CAAC;MAC3C;IACF,CAAC,MAAM;MACL,IAAInB,cAAc,CAACO,OAAO,EAAE;QAC1BS,sBAAsB,CAACiC,CAAC,EAAE9B,YAAY,CAAC;MACzC;MACA,OAAO,IAAI;IACb;IAEA,IAAIA,YAAY,CAACuC,mBAAmB,KAAK,CAAC,EAAE;MAC1C,IAAIzD,gBAAgB,CAACM,OAAO,EAAE;QAC5B8C,YAAY,CAACpD,gBAAgB,CAACM,OAAO,CAAC;QACtCN,gBAAgB,CAACM,OAAO,GAAG7B,SAAS;MACtC;;MAEA;MACA,IAAIqB,WAAW,CAACQ,OAAO,KAAK,OAAO,EAAE;QACnCV,yBAAyB,CAACU,OAAO,GAAG7E,sBAAsB,CACxDuH,CAAC,EACD9B,YACF,CAAC;QACDrB,wBAAwB,CAACS,OAAO,GAAG5E,wBAAwB,CACzDsH,CAAC,EACD9B,YACF,CAAC;MACH;MACApB,WAAW,CAACQ,OAAO,GAAG,OAAO;MAC7BoD,eAAe,CAACV,CAAC,EAAE9B,YAAY,CAAC;IAClC,CAAC,MAAM,IAAIA,YAAY,CAACuC,mBAAmB,KAAK,CAAC,EAAE;MACjD,IACEzD,gBAAgB,CAACM,OAAO,KACvBqD,IAAI,CAACC,GAAG,CAAC1C,YAAY,CAAC2C,EAAE,CAAC,GAAG,CAAC,IAAIF,IAAI,CAACC,GAAG,CAAC1C,YAAY,CAAC4C,EAAE,CAAC,GAAG,CAAC,CAAC,EAChE;QACAV,YAAY,CAACpD,gBAAgB,CAACM,OAAO,CAAC;QACtCN,gBAAgB,CAACM,OAAO,GAAG7B,SAAS;MACtC;MACA;MACA,IAAIqB,WAAW,CAACQ,OAAO,KAAK,OAAO,EAAE;QACnCV,yBAAyB,CAACU,OAAO,GAAG7E,sBAAsB,CACxDuH,CAAC,EACD9B,YACF,CAAC;MACH;MAEA,MAAM;QAAE2C,EAAE;QAAEC;MAAG,CAAC,GAAG5C,YAAY;MAC/B,MAAM6C,cAAc,GAAGJ,IAAI,CAACC,GAAG,CAACC,EAAE,CAAC,GAAG,CAAC,IAAIF,IAAI,CAACC,GAAG,CAACE,EAAE,CAAC,GAAG,CAAC;MAC3D,IAAIC,cAAc,EAAE;QAClBjE,WAAW,CAACQ,OAAO,GAAG,OAAO;QAC7B0D,eAAe,CAAC9C,YAAY,CAAC;MAC/B;IACF;EACF,CACF,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMwC,eAAe,GAAG7H,iBAAiB,CACvC,CAACmH,CAAwB,EAAE9B,YAAsC,KAAK;IACpE,IAAI,CAAC/E,KAAK,CAACyB,WAAW,EAAE;IAExB,MAAM;MACJK,OAAO;MACPC,OAAO;MACPC,wBAAwB;MACxBC;IACF,CAAC,GAAGjC,KAAK;IAET,MAAM8H,QAAQ,GAAGvI,wBAAwB,CAACsH,CAAC,EAAE9B,YAAY,CAAC;IAE1D,IACE/E,KAAK,CAAC+H,YAAY,IAClB/H,KAAK,CAAC+H,YAAY,CAAClB,CAAC,EAAE9B,YAAY,EAAEC,2BAA2B,CAAC,CAAC,CAAC,EAClE;MACA;IACF;IAEA,IAAI,CAAC8C,QAAQ,EAAE;IACf,IAAI,CAACpE,wBAAwB,CAACS,OAAO,EAAE;;IAEvC;IACA,MAAM6D,8BAA8B,GAClCF,QAAQ,GAAGpE,wBAAwB,CAACS,OAAO;IAC7CT,wBAAwB,CAACS,OAAO,GAAG2D,QAAQ;IAE3C,MAAMG,sBAAsB,GAC1BD,8BAA8B,GAAG,CAAC,GAC9B/F,yBAAyB,GACzBD,wBAAwB;IAE9B,IAAIiG,sBAAsB,IAAI,IAAI,EAAE;IACpC,MAAMC,WAAW,GAAGF,8BAA8B,GAAG,CAAC;IACtD;IACA;IACA,MAAMG,gCAAgC,GACpCD,WAAW,IAAI,CAAC,GAAID,sBAAsB,GAAG,CAAC,GAAI,GAAG,CAAC;IAExD,IAAIG,YAAY,GACd5E,SAAS,CAACW,OAAO,IAAI,CAAC,GAAGgE,gCAAgC,CAAC;;IAE5D;IACA,IAAIrG,OAAO,IAAI,IAAI,IAAIsG,YAAY,GAAGtG,OAAO,EAAE;MAC7CsG,YAAY,GAAGtG,OAAO;IACxB;IAEA,IAAIC,OAAO,IAAI,IAAI,IAAIqG,YAAY,GAAGrG,OAAO,EAAE;MAC7CqG,YAAY,GAAGrG,OAAO;IACxB;IAEA,MAAMsG,kBAAkB,GAAG/I,sBAAsB,CAACuH,CAAC,EAAE9B,YAAY,CAAC;IAElE,IAAI,CAACsD,kBAAkB,EAAE;IAEzB,IAAIC,UAAU,GAAG;MACfpF,CAAC,EAAEmF,kBAAkB,CAACnF,CAAC,GAAG5C,aAAa;MACvC6C,CAAC,EAAEkF,kBAAkB,CAAClF,CAAC,GAAG3C;IAC5B,CAAC;IAED,IAAIR,KAAK,CAAC2C,iBAAiB,EAAE;MAC3B;MACA;MACA2F,UAAU,GAAG;QACXpF,CAAC,EAAElD,KAAK,CAAC2C,iBAAiB,CAACO,CAAC;QAC5BC,CAAC,EAAEnD,KAAK,CAAC2C,iBAAiB,CAACQ;MAC7B,CAAC;IACH;;IAEA;IACAnD,KAAK,CAACuI,KAAK,IAAIC,oBAAoB,CAAC3B,CAAC,EAAEyB,UAAU,CAAC;IAElD,MAAMG,UAAU,GAAGnF,OAAO,CAACa,OAAO;IAClC,MAAMuE,UAAU,GAAGnF,OAAO,CAACY,OAAO;IAClC,MAAMwE,QAAQ,GAAGnF,SAAS,CAACW,OAAO;IAClC,MAAMyE,QAAQ,GAAGR,YAAY;IAE7B,IAAI,CAAChI,cAAc,IAAI,CAACF,aAAa,EAAE;IAEvC,IAAI2I,UAAU,GAAGrJ,mCAAmC,CAClDkJ,UAAU,EACVtI,cAAc,EACduI,QAAQ,EACRC,QAAQ,EACRN,UAAU,CAACnF,CACb,CAAC;IACD,IAAI2F,UAAU,GAAGtJ,mCAAmC,CAClDiJ,UAAU,EACVvI,aAAa,EACbyI,QAAQ,EACRC,QAAQ,EACRN,UAAU,CAACpF,CACb,CAAC;IAED,MAAM6F,WAAW,GACfC,qCAAqC,CAACX,kBAAkB,CAAC;IAC3D,IAAIU,WAAW,EAAE;MACfD,UAAU,IAAIC,WAAW,CAAC7F,CAAC;MAC3B2F,UAAU,IAAIE,WAAW,CAAC5F,CAAC;IAC7B;IAEAG,OAAO,CAACa,OAAO,GAAG2E,UAAU;IAC5BvF,OAAO,CAACY,OAAO,GAAG0E,UAAU;IAC5BrF,SAAS,CAACW,OAAO,GAAGyE,QAAQ;IAE5B5F,OAAO,CAACmB,OAAO,CAACoB,QAAQ,CAAC;MAAErC,CAAC,EAAEI,OAAO,CAACa,OAAO;MAAEhB,CAAC,EAAEI,OAAO,CAACY;IAAQ,CAAC,CAAC;IACpEf,QAAQ,CAACe,OAAO,CAACoB,QAAQ,CAAC/B,SAAS,CAACW,OAAO,CAAC;IAE5CnE,KAAK,CAACiJ,WAAW,GAAGpC,CAAC,EAAE9B,YAAY,EAAEC,2BAA2B,CAAC,CAAC,CAAC;EACrE,CACF,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;EACE,MAAMwD,oBAAoB,GAAG9I,iBAAiB,CAC5C,CACEwJ,qBAA4C,EAC5CZ,UAAiB,EACjB,GAAGa,MAAe,KACf;IACH,MAAM;MAAEnF;IAAQ,CAAC,GAAGkF,qBAAqB,CAACpD,WAAW;IAErD3E,cAAc,CAAC,CACb;MACE+B,CAAC,EAAEc,OAAO,CAAC,CAAC,CAAC,CAAC2C,KAAK,GAAGrG,aAAa;MACnC6C,CAAC,EAAEa,OAAO,CAAC,CAAC,CAAC,CAAC4C,KAAK,GAAGpG;IACxB,CAAC,EACD;MACE0C,CAAC,EAAEc,OAAO,CAAC,CAAC,CAAC,CAAC2C,KAAK,GAAGrG,aAAa;MACnC6C,CAAC,EAAEa,OAAO,CAAC,CAAC,CAAC,CAAC4C,KAAK,GAAGpG;IACxB,CAAC,EACD8H,UAAU,EACV,GAAGa,MAAM,CACV,CAAC;EACJ,CACF,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACE,MAAMH,qCAAqC,GAAGtJ,iBAAiB,CAC5D2I,kBAAyB,IAAK;IAC7B,MAAM;MAAEnG;IAAoB,CAAC,GAAGlC,KAAK;IAErC,IAAIoJ,KAAK,GAAG,IAAI;IAEhB,IAAI3F,yBAAyB,CAACU,OAAO,IAAIjC,mBAAmB,EAAE;MAC5D,MAAMwF,EAAE,GAAGW,kBAAkB,CAACnF,CAAC,GAAGO,yBAAyB,CAACU,OAAO,CAACjB,CAAC;MACrE,MAAMyE,EAAE,GAAGU,kBAAkB,CAAClF,CAAC,GAAGM,yBAAyB,CAACU,OAAO,CAAChB,CAAC;MAErE,MAAMkG,MAAM,GAAG3B,EAAE,GAAGlE,SAAS,CAACW,OAAO,GAAGjC,mBAAmB;MAC3D,MAAMoH,MAAM,GAAG3B,EAAE,GAAGnE,SAAS,CAACW,OAAO,GAAGjC,mBAAmB;MAE3DkH,KAAK,GAAG;QACNlG,CAAC,EAAEmG,MAAM;QACTlG,CAAC,EAAEmG;MACL,CAAC;IACH;IAEA7F,yBAAyB,CAACU,OAAO,GAAGkE,kBAAkB;IAEtD,OAAOe,KAAK;EACd,CACF,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACE,MAAMvB,eAAe,GAAGnI,iBAAiB,CACtCqF,YAAsC,IAAK;IAC1C;IACA,IACE,CAAC/E,KAAK,CAAC0B,UAAU,IAChB1B,KAAK,CAAC+C,uBAAuB,IAC5BS,SAAS,CAACW,OAAO,KAAKnE,KAAK,CAAC2B,WAAY,EAC1C;MACA;IACF;IACA,MAAMyH,KAAK,GAAGJ,qCAAqC,CAAC;MAClD9F,CAAC,EAAE6B,YAAY,CAACwE,KAAK;MACrBpG,CAAC,EAAE4B,YAAY,CAACyE;IAClB,CAAC,CAAC;IACF,IAAI,CAACJ,KAAK,EAAE;IAEZ,MAAMN,UAAU,GAAGxF,OAAO,CAACa,OAAO,GAAGiF,KAAK,CAAClG,CAAC;IAC5C,MAAM2F,UAAU,GAAGtF,OAAO,CAACY,OAAO,GAAGiF,KAAK,CAACjG,CAAC;IAE5C,IAAInD,KAAK,CAACuI,KAAK,IAAIjI,aAAa,IAAIE,aAAa,EAAE;MACjD,MAAM0C,CAAC,GAAG6B,YAAY,CAACwE,KAAK,GAAGjJ,aAAa;MAC5C,MAAM6C,CAAC,GAAG4B,YAAY,CAACyE,KAAK,GAAGhJ,aAAa;MAC5CW,cAAc,CAAC,CAAC;QAAE+B,CAAC;QAAEC;MAAE,CAAC,CAAC,CAAC;IAC5B;IAEAsG,qBAAqB,CAACX,UAAU,EAAED,UAAU,CAAC;EAC/C,CACF,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACE,MAAMY,qBAAqB,GAAG/J,iBAAiB,CAC7C,CAACoJ,UAAkB,EAAED,UAAkB,KAAK;IAC1C,MAAM;MAAEa,gBAAgB;MAAEC;IAAgB,CAAC,GAAG3J,KAAK;IAEnD,IAAI0J,gBAAgB,GAAG,IAAI,EAAE,IAAI,EAAE1E,2BAA2B,CAAC,CAAC,CAAC,EAAE;MACjE;IACF;IAEA1B,OAAO,CAACa,OAAO,GAAG2E,UAAU;IAC5BvF,OAAO,CAACY,OAAO,GAAG0E,UAAU;IAE5B7F,OAAO,CAACmB,OAAO,CAACoB,QAAQ,CAAC;MAAErC,CAAC,EAAEI,OAAO,CAACa,OAAO;MAAEhB,CAAC,EAAEI,OAAO,CAACY;IAAQ,CAAC,CAAC;IACpEf,QAAQ,CAACe,OAAO,CAACoB,QAAQ,CAAC/B,SAAS,CAACW,OAAO,CAAC;IAE5CwF,eAAe,GAAG,IAAI,EAAE,IAAI,EAAE3E,2BAA2B,CAAC,CAAC,CAAC;EAC9D,CACF,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMgC,oBAAoB,GAAGtH,iBAAiB,CAAEmH,CAAwB,IAAK;IAC3E,MAAM+C,GAAG,GAAGC,IAAI,CAACD,GAAG,CAAC,CAAC;IACtB,IACEpI,iCAAiC,CAAC2C,OAAO,IACzCnE,KAAK,CAACmC,cAAc,IACpByH,GAAG,GAAGpI,iCAAiC,CAAC2C,OAAO,GAAGnE,KAAK,CAACmC,cAAc,EACtE;MACA8B,iBAAiB,CAACE,OAAO,IACvB2F,SAAS,CAAC;QACR,GAAG7F,iBAAiB,CAACE,OAAO;QAC5B4F,EAAE,EAAEH,GAAG,CAACI,QAAQ,CAAC,CAAC;QAClBC,WAAW,EAAE;MACf,CAAC,CAAC;MACJlG,kBAAkB,CAACI,OAAO,IAAI8C,YAAY,CAAClD,kBAAkB,CAACI,OAAO,CAAC;MACtE,OAAO3C,iCAAiC,CAAC2C,OAAO;MAChD,OAAOJ,kBAAkB,CAACI,OAAO;MACjC,OAAOF,iBAAiB,CAACE,OAAO;MAChC+F,gBAAgB,CAACrD,CAAC,CAAC;IACrB,CAAC,MAAM;MACLrF,iCAAiC,CAAC2C,OAAO,GAAGyF,GAAG;MAC/C3F,iBAAiB,CAACE,OAAO,GAAG;QAC1B4F,EAAE,EAAEH,GAAG,CAACI,QAAQ,CAAC,CAAC;QAClB9G,CAAC,EAAE2D,CAAC,CAACf,WAAW,CAACa,KAAK,GAAGrG,aAAa;QACtC6C,CAAC,EAAE0D,CAAC,CAACf,WAAW,CAACc,KAAK,GAAGpG;MAC3B,CAAC;MACDsJ,SAAS,CAAC7F,iBAAiB,CAACE,OAAO,CAAC;;MAEpC;MACA0C,CAAC,CAACC,OAAO,CAAC,CAAC;MACX/C,kBAAkB,CAACI,OAAO,GAAGsC,UAAU,CAAC,MAAM;QAC5C,OAAOjF,iCAAiC,CAAC2C,OAAO;QAChD,OAAOJ,kBAAkB,CAACI,OAAO;;QAEjC;QACA,IAAInE,KAAK,CAAC2C,iBAAiB,IAAIsB,iBAAiB,CAACE,OAAO,EAAE;UACxD,MAAMgG,IAAI,GAAGnK,KAAK,CAAC2C,iBAAiB,CAACO,CAAC,GAAGe,iBAAiB,CAACE,OAAO,CAACjB,CAAC;UACpE,MAAMkH,IAAI,GAAGpK,KAAK,CAAC2C,iBAAiB,CAACQ,CAAC,GAAGc,iBAAiB,CAACE,OAAO,CAAChB,CAAC;UAEpErE,QAAQ,CAACuL,MAAM,CAACrH,OAAO,CAACmB,OAAO,EAAE;YAC/BmG,OAAO,EAAE;cACPpH,CAAC,EAAEI,OAAO,CAACa,OAAO,GAAGgG,IAAI,GAAG3G,SAAS,CAACW,OAAO;cAC7ChB,CAAC,EAAEI,OAAO,CAACY,OAAO,GAAGiG,IAAI,GAAG5G,SAAS,CAACW;YACxC,CAAC;YACDoG,eAAe,EAAE,IAAI;YACrBC,QAAQ,EAAE;UACZ,CAAC,CAAC,CAACC,KAAK,CAAC,MAAM;YACbpD,gBAAgB,CAAC,CAAC;UACpB,CAAC,CAAC;QACJ;QAEArH,KAAK,CAAC0K,WAAW,GAAG7D,CAAC,EAAE7B,2BAA2B,CAAC,CAAC,CAAC;MACvD,CAAC,EAAEhF,KAAK,CAACmC,cAAc,CAAC;IAC1B;EACF,CAAC,CAAC;EAEF,MAAMwI,qBAAqB,GAAGjL,iBAAiB,CAC7C,CAAC0G,QAAe,EAAEoE,QAAiB,KAAK;IACtC,MAAM;MAAE7H,iBAAiB;MAAEH,YAAY;MAAEC;IAAc,CAAC,GAAGzC,KAAK;IAEhE,IAAI,CAAC2C,iBAAiB,EAAE;IACxB,IAAI,CAACzC,aAAa,IAAI,CAACE,cAAc,EAAE;IACvC,IAAI,CAACoC,YAAY,IAAI,CAACC,aAAa,EAAE;;IAErC;IACA,MAAMmI,IAAI,GAAGjI,iBAAiB,CAACO,CAAC,GAAGhD,aAAa,GAAG,CAAC;IACpD,MAAM2K,IAAI,GAAGlI,iBAAiB,CAACQ,CAAC,GAAG/C,cAAc,GAAG,CAAC;IAErDkD,OAAO,CAACa,OAAO,GACb3B,YAAY,GAAG,CAAC,GAAG4D,QAAQ,CAAClD,CAAC,GAAG0H,IAAI,GAAGpH,SAAS,CAACW,OAAO;IAC1DZ,OAAO,CAACY,OAAO,GACb1B,aAAa,GAAG,CAAC,GAAG2D,QAAQ,CAACjD,CAAC,GAAG0H,IAAI,GAAGrH,SAAS,CAACW,OAAO;IAE3D,IAAIqG,QAAQ,EAAE;MACZ1L,QAAQ,CAACuL,MAAM,CAACrH,OAAO,CAACmB,OAAO,EAAE;QAC/BmG,OAAO,EAAE;UAAEpH,CAAC,EAAEI,OAAO,CAACa,OAAO;UAAEhB,CAAC,EAAEI,OAAO,CAACY;QAAQ,CAAC;QACnDoG,eAAe,EAAE,IAAI;QACrBC;MACF,CAAC,CAAC,CAACC,KAAK,CAAC,CAAC;IACZ,CAAC,MAAM;MACLzH,OAAO,CAACmB,OAAO,CAACoB,QAAQ,CAAC;QAAErC,CAAC,EAAEI,OAAO,CAACa,OAAO;QAAEhB,CAAC,EAAEI,OAAO,CAACY;MAAQ,CAAC,CAAC;IACtE;EACF,CACF,CAAC;EAED,MAAMkC,kBAAkB,GAAG3G,iBAAiB,CAAC,MAAM;IACjD,IAAI,CAACM,KAAK,CAAC2C,iBAAiB,EAAE;IAC9B,IAAI,CAAC3C,KAAK,CAACwC,YAAY,IAAI,CAACxC,KAAK,CAACyC,aAAa,EAAE;IAEjD,OAAOhD,+BAA+B,CAAC;MACrCqL,gBAAgB,EAAE;QAChB5H,CAAC,EAAElD,KAAK,CAAC2C,iBAAiB,CAACO,CAAC;QAC5BC,CAAC,EAAEnD,KAAK,CAAC2C,iBAAiB,CAACQ;MAC7B,CAAC;MACD4H,SAAS,EAAE;QACT9J,MAAM,EAAEjB,KAAK,CAACyC,aAAa;QAC3BzB,KAAK,EAAEhB,KAAK,CAACwC;MACf,CAAC;MACDwI,aAAa,EAAE;QACb,GAAGhG,2BAA2B,CAAC,CAAC;QAChC1B,OAAO,EAAEA,OAAO,CAACa,OAAO;QACxBZ,OAAO,EAAEA,OAAO,CAACY,OAAO;QACxBX,SAAS,EAAEA,SAAS,CAACW;MACvB;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,MAAMkD,gBAAgB,GAAG3H,iBAAiB,CAAC,MAAM;IAC/C,MAAM0G,QAAQ,GAAGC,kBAAkB,CAAC,CAAC;IACrC,IAAI,CAACD,QAAQ,EAAE;IACfpG,KAAK,CAAC6C,yBAAyB,GAAGuD,QAAQ,CAAC;EAC7C,CAAC,CAAC;EAEF,MAAM0D,SAAS,GAAGpK,iBAAiB,CAAEuL,KAAiB,IAAK;IACzDjH,OAAO,CAACG,OAAO,CAAC+G,IAAI,CAACD,KAAK,CAAC;IAC3B5J,eAAe,CAAC,CAAC,GAAG2C,OAAO,CAACG,OAAO,CAAC,CAAC;EACvC,CAAC,CAAC;EAEF,MAAMgH,YAAY,GAAGzL,iBAAiB,CAAEuL,KAAiB,IAAK;IAC5DjH,OAAO,CAACG,OAAO,CAACiH,MAAM,CAACpH,OAAO,CAACG,OAAO,CAACkH,OAAO,CAACJ,KAAK,CAAC,EAAE,CAAC,CAAC;IACzD5J,eAAe,CAAC,CAAC,GAAG2C,OAAO,CAACG,OAAO,CAAC,CAAC;EACvC,CAAC,CAAC;;EAEF;AACF;AACA;AACA;AACA;AACA;AACA;EACE,MAAM+F,gBAAgB,GAAGxK,iBAAiB,CAAEmH,CAAwB,IAAK;IACvE,MAAM;MAAEyE,iBAAiB;MAAEC,gBAAgB;MAAEC;IAAsB,CAAC,GAClExL,KAAK;IAEPsL,iBAAiB,GAAGzE,CAAC,EAAE7B,2BAA2B,CAAC,CAAC,CAAC;IAErD,MAAMyG,YAAY,GAAGC,gBAAgB,CAAC,CAAC;IACvC,IAAID,YAAY,IAAI,IAAI,EAAE;;IAE1B;IACA,MAAME,uBAAuB,GAAG;MAC9BzI,CAAC,EAAE2D,CAAC,CAACf,WAAW,CAACa,KAAK,GAAGrG,aAAa;MACtC6C,CAAC,EAAE0D,CAAC,CAACf,WAAW,CAACc,KAAK,GAAGpG;IAC3B,CAAC;;IAED;IACA,IAAIgL,qBAAqB,EAAE;MACzBG,uBAAuB,CAACzI,CAAC,GAAG,CAAC;MAC7ByI,uBAAuB,CAACxI,CAAC,GAAG,CAAC;IAC/B;IAEAyI,YAAY,CAACH,YAAY,EAAEE,uBAAuB,CAAC;IAEnDJ,gBAAgB,GACd1E,CAAC,EACD7B,2BAA2B,CAAC;MAAExB,SAAS,EAAEiI;IAAa,CAAC,CACzD,CAAC;EACH,CAAC,CAAC;;EAEF;AACF;AACA;AACA;AACA;AACA;EACE,MAAMC,gBAAgB,GAAGhM,iBAAiB,CAAC,MAAM;IAC/C,MAAM;MAAE0C,QAAQ;MAAEN,OAAO;MAAEH;IAAY,CAAC,GAAG3B,KAAK;IAEhD,IAAI8B,OAAO,IAAI,IAAI,EAAE;IAErB,IAAI0B,SAAS,CAACW,OAAO,CAAC0H,OAAO,CAAC,CAAC,CAAC,KAAK/J,OAAO,CAAC+J,OAAO,CAAC,CAAC,CAAC,EAAE;MACvD,OAAOlK,WAAW;IACpB;IAEA,IAAIS,QAAQ,IAAI,IAAI,EAAE;IAEtB,MAAMqJ,YAAY,GAAGjI,SAAS,CAACW,OAAO,IAAI,CAAC,GAAG/B,QAAQ,CAAC;IACvD,IAAIqJ,YAAY,GAAG3J,OAAO,EAAE;MAC1B,OAAOA,OAAO;IAChB;IAEA,OAAO2J,YAAY;EACrB,CAAC,CAAC;;EAEF;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMG,YAAY,GAAGlM,iBAAiB,CACpC,CAAC0I,YAAoB,EAAEE,UAAkB,KAAK;IAC5C,IAAI,CAACtI,KAAK,CAACyB,WAAW,EAAE,OAAO,KAAK;IACpC,IAAIzB,KAAK,CAAC8B,OAAO,IAAIsG,YAAY,GAAGpI,KAAK,CAAC8B,OAAO,EAAE,OAAO,KAAK;IAC/D,IAAI9B,KAAK,CAAC+B,OAAO,IAAIqG,YAAY,GAAGpI,KAAK,CAAC+B,OAAO,EAAE,OAAO,KAAK;IAE/D/B,KAAK,CAAC+H,YAAY,GAAG,IAAI,EAAE,IAAI,EAAE/C,2BAA2B,CAAC,CAAC,CAAC;;IAE/D;IACA,IAAI8G,UAAU,GAAG,EAAE;IACnB,IAAIxD,UAAU,EAAE;MACd;MACA,IAAIyD,SAAS,GAAGvI,SAAS,CAACW,OAAO;MACjC;MACA;MACA;MACA;MACA2H,UAAU,GAAG1I,QAAQ,CAACe,OAAO,CAACqB,WAAW,CAAC,CAAC;QAAEC,KAAK,EAAEmD;MAAS,CAAC,KAAK;QACjE5F,OAAO,CAACmB,OAAO,CAACoB,QAAQ,CAAC;UACvBrC,CAAC,EAAE1D,mCAAmC,CACpC8D,OAAO,CAACa,OAAO,EACfjE,aAAa,EACb6L,SAAS,EACTnD,QAAQ,EACRN,UAAU,CAACpF,CACb,CAAC;UACDC,CAAC,EAAE3D,mCAAmC,CACpC+D,OAAO,CAACY,OAAO,EACf/D,cAAc,EACd2L,SAAS,EACTnD,QAAQ,EACRN,UAAU,CAACnF,CACb;QACF,CAAC,CAAC;QACF4I,SAAS,GAAGnD,QAAQ;MACtB,CAAC,CAAC;IACJ;;IAEA;IACA1J,kBAAkB,CAACkE,QAAQ,CAACe,OAAO,EAAEiE,YAAY,CAAC,CAACqC,KAAK,CAAC,MAAM;MAC7DrH,QAAQ,CAACe,OAAO,CAAC6H,cAAc,CAACF,UAAU,CAAC;IAC7C,CAAC,CAAC;IACF;;IAEA9L,KAAK,CAACiJ,WAAW,GAAG,IAAI,EAAE,IAAI,EAAEjE,2BAA2B,CAAC,CAAC,CAAC;IAC9D,OAAO,IAAI;EACb,CACF,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMiH,YAAY,GAAGvM,iBAAiB,CAAEwM,eAAuB,IAAK;IAClE;IACAA,eAAe,KAAKlM,KAAK,CAACoC,QAAQ,IAAI,CAAC;IACvC,OAAOwJ,YAAY,CAACpI,SAAS,CAACW,OAAO,GAAG+H,eAAe,CAAC;EAC1D,CAAC,CAAC;;EAEF;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMC,YAAY,GAAGzM,iBAAiB,CACpC,CAACoJ,UAAkB,EAAED,UAAkB,KAAK;IAC1C,IAAI,CAAC3I,aAAa,IAAI,CAACE,cAAc,EAAE;IAEvC,MAAMkD,OAAO,GAAG,CAACwF,UAAU,GAAG5I,aAAa,GAAG,CAAC,IAAIsD,SAAS,CAACW,OAAO;IACpE,MAAMZ,OAAO,GAAG,CAACsF,UAAU,GAAGzI,cAAc,GAAG,CAAC,IAAIoD,SAAS,CAACW,OAAO;IAErEsF,qBAAqB,CAAC,CAACnG,OAAO,EAAE,CAACC,OAAO,CAAC;EAC3C,CACF,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAM6I,YAAY,GAAG1M,iBAAiB,CACpC,CAAC2M,aAAqB,EAAEC,aAAqB,KAAK;IAChD,MAAMxD,UAAU,GACd,CAACxF,OAAO,CAACa,OAAO,GAAGX,SAAS,CAACW,OAAO,GAAGkI,aAAa,IACpD7I,SAAS,CAACW,OAAO;IACnB,MAAM0E,UAAU,GACd,CAACtF,OAAO,CAACY,OAAO,GAAGX,SAAS,CAACW,OAAO,GAAGmI,aAAa,IACpD9I,SAAS,CAACW,OAAO;IAEnBsF,qBAAqB,CAACX,UAAU,EAAED,UAAU,CAAC;EAC/C,CACF,CAAC;EAEDpK,mBAAmB,CAACwB,GAAG,EAAE,OAAO;IAC9BsM,MAAM,EAAEX,YAAY;IACpBY,MAAM,EAAEP,YAAY;IACpBQ,MAAM,EAAEN,YAAY;IACpBO,MAAM,EAAEN,YAAY;IACpBO,eAAe,EAAEhC,qBAAqB;IACtC,IAAI/G,cAAcA,CAAA,EAAG;MACnB,OAAOA,cAAc,CAACO,OAAO;IAC/B;EACF,CAAC,CAAC,CAAC;EAEH,MAAM;IACJvB,aAAa;IACbgK,QAAQ;IACRlK,0BAA0B;IAC1BP,cAAc;IACdQ,iBAAiB;IACjBkK,oBAAoB;IACpBC,gBAAgB;IAChBC;EACF,CAAC,GAAG/M,KAAK;EAET,oBACEF,KAAA,CAACb,IAAI;IACH+N,KAAK,EAAEC,MAAM,CAACC,SAAU;IAAA,GACpB3L,eAAe,CAAC4C,OAAO,EAAEgJ,WAAW;IACxClN,GAAG,EAAEqB,qBAAsB;IAC3BsE,QAAQ,EAAEG,kBAAmB;IAAA6G,QAAA,gBAE7BhN,IAAA,CAACd,QAAQ,CAACG,IAAI;MACZ+N,KAAK,EAAE,CACLC,MAAM,CAACG,WAAW,EAClBpN,KAAK,CAACgN,KAAK,EACX;QACEK,SAAS,EAAE;QACT;QACA;QACA;UAAEC,MAAM,EAAElK,QAAQ,CAACe;QAAQ,CAAC,EAC5B;UAAEoJ,MAAM,EAAEnK,QAAQ,CAACe;QAAQ,CAAC,EAC5B,GAAGnB,OAAO,CAACmB,OAAO,CAACqJ,qBAAqB,CAAC,CAAC;MAE9C,CAAC,CACD;MAAAZ,QAAA,EAEDA;IAAQ,CACI,CAAC,EAEflK,0BAA0B,IACzBtB,YAAY,CAACqM,GAAG,CACbxC,KAAK,IACJ9I,cAAc,iBACZvC,IAAA,CAACT,qBAAqB;MACpB+D,CAAC,EAAE+H,KAAK,CAAC/H,CAAE;MACXC,CAAC,EAAE8H,KAAK,CAAC9H,CAAE;MAEXuK,iBAAiB,EAAEvL,cAAe;MAClCwL,eAAe,EAAEA,CAAA,KAAM;QACrBxC,YAAY,CAACF,KAAK,CAAC;MACrB;IAAE,GAJGA,KAAK,CAAClB,EAKZ,CAEP,CAAC,EAGF7I,WAAW,CAACuM,GAAG,CAAC,CAAC;MAAEvK,CAAC;MAAEC;IAAE,CAAC,EAAEyK,KAAK,KAAK;MACpC,oBAAOhO,IAAA,CAACP,eAAe;QAAa6D,CAAC,EAAEA,CAAE;QAACC,CAAC,EAAEA;MAAE,GAAlByK,KAAoB,CAAC;IACpD,CAAC,CAAC,EAEDjL,iBAAiB,iBAChB/C,IAAA,CAACR,SAAS;MACRwD,aAAa,EAAEA,aAAc;MAC7BD,iBAAiB,EAAEA,iBAAkB;MACrC7B,OAAO,EAAEA,OAAQ;MACjB+M,OAAO,EAAEf,gBAAiB;MAC1BzK,WAAW,EAAEwK,oBAAqB;MAClCiB,YAAY,EAAEpJ,uBAAwB;MACtC3D,UAAU,EAAEA,UAAW;MACvBgM,QAAQ,EAAEA;IAAS,CACpB,CACF;EAAA,CACG,CAAC;AAEX,CAAC;AAED,MAAME,MAAM,GAAGjO,UAAU,CAACoF,MAAM,CAAC;EAC/B8I,SAAS,EAAE;IACTa,UAAU,EAAE,QAAQ;IACpBC,IAAI,EAAE,CAAC;IACPC,cAAc,EAAE,QAAQ;IACxBC,QAAQ,EAAE,QAAQ;IAClB9H,QAAQ,EAAE;EACZ,CAAC;EACDgH,WAAW,EAAE;IACXW,UAAU,EAAE,QAAQ;IACpBC,IAAI,EAAE,CAAC;IACPC,cAAc,EAAE,QAAQ;IACxBjN,KAAK,EAAE;EACT;AACF,CAAC,CAAC;AAEF,eAAejB,uBAAuB;AAEtC,SAASA,uBAAuB","ignoreList":[]} +{"version":3,"names":["debounce","defaults","React","useImperativeHandle","useLayoutEffect","useMemo","useRef","useState","Animated","PanResponder","StyleSheet","View","getZoomToAnimation","AnimatedTouchFeedback","StaticPin","DebugTouchPoint","calcGestureCenterPoint","calcGestureTouchDistance","calcNewScaledOffsetForZoomCentering","viewportPositionToImagePosition","getNextZoomStep","useDebugPoints","useLatestCallback","useZoomSubject","jsx","_jsx","jsxs","_jsxs","ReactNativeZoomableView","props","ref","wrapperRef","zoomSubjectWrapperRef","measure","measureZoomSubject","originalWidth","originalHeight","originalPageX","originalPageY","originalX","originalY","pinSize","setPinSize","width","height","stateTouches","setStateTouches","debugPoints","setDebugPoints","setPinchDebugPoints","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","children","onStaticPinLongPress","onStaticPinPress","pinProps","panAnim","ValueXY","x","y","zoomAnim","Value","offsetX","offsetY","zoomLevel","lastGestureCenterPosition","lastGestureTouchDistance","gestureType","gestureStarted","longPressTimeout","onTransformInvocationInitialized","singleTapTimeoutId","touches","doubleTapFirstTap","_getZoomableViewEventObject","overwriteObj","current","_staticPinPosition","viewportPosition","imageSize","zoomableEvent","_updateStaticPin","position","_addTouch","touch","push","_removeTouch","splice","indexOf","debouncedOnStaticPinPositionChange","_invokeOnTransform","zoomableViewEvent","successful","onTransform","zoomAnimatedValue","panAnimatedValueXY","setValue","addListener","value","onLayout","layout","nativeEvent","_handleStartShouldSetPanResponder","e","gestureState","onStartShouldSetPanResponder","_handlePanResponderGrant","persist","setTimeout","onPanResponderGrant","stopAnimation","_calcOffsetShiftSinceLastGestureState","gestureCenterPoint","shift","dx","dy","shiftX","shiftY","_handlePinching","distance","onZoomBefore","zoomGrowthFromLastGestureState","pinchToZoomSensitivity","deltaGrowth","deltaGrowthAdjustedBySensitivity","newZoomLevel","zoomCenter","debug","oldOffsetX","oldOffsetY","oldScale","newScale","newOffsetY","newOffsetX","offsetShift","onZoomAfter","_setNewOffsetPosition","onShiftingBefore","onShiftingAfter","_handleShifting","moveX","moveY","publicZoomTo","listenerId","prevScale","start","removeListener","_handleDoubleTap","onDoubleTapBefore","onDoubleTapAfter","doubleTapZoomToCenter","nextZoomStep","zoomPositionCoordinates","pageX","pageY","_resolveAndHandleTap","now","Date","id","toString","isSecondTap","clearTimeout","tapX","tapY","timing","toValue","useNativeDriver","duration","onSingleTap","publicMoveStaticPinTo","pinX","pinY","publicZoomBy","zoomLevelChange","publicMoveTo","publicMoveBy","offsetChangeX","offsetChangeY","zoomTo","zoomBy","moveTo","moveBy","moveStaticPinTo","_handlePanResponderEnd","onPanResponderEnd","onZoomEnd","onShiftingEnd","_handlePanResponderMove","onPanResponderMove","numberActiveTouches","Math","abs","isShiftGesture","create","onPanResponderRelease","onPanResponderTerminate","evt","onPanResponderTerminationRequest","onShouldBlockNativeResponder","onStartShouldSetPanResponderCapture","onMoveShouldSetPanResponderCapture","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/components/AnimatedTouchFeedback.js b/lib/module/components/AnimatedTouchFeedback.js index 391b2e1..a7769ea 100644 --- a/lib/module/components/AnimatedTouchFeedback.js +++ b/lib/module/components/AnimatedTouchFeedback.js @@ -32,7 +32,9 @@ export const AnimatedTouchFeedback = ({ }, [animationDelay, animationDuration]); return /*#__PURE__*/_jsx(Animated.View, { pointerEvents: "none", - style: [styles.animatedTouchFeedback, { + style: [ + // eslint-disable-next-line @typescript-eslint/no-use-before-define + styles.animatedTouchFeedback, { opacity: appearDisappearAnimRef.current.interpolate({ inputRange: [0, 1], outputRange: [0, 0.3] diff --git a/lib/module/components/AnimatedTouchFeedback.js.map b/lib/module/components/AnimatedTouchFeedback.js.map index 0f745d8..8ab9b08 100644 --- a/lib/module/components/AnimatedTouchFeedback.js.map +++ b/lib/module/components/AnimatedTouchFeedback.js.map @@ -1 +1 @@ -{"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":[]} +{"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;IACL;IACAC,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 310dc3e..761afbd 100644 --- a/lib/module/components/StaticPin.js +++ b/lib/module/components/StaticPin.js @@ -48,7 +48,9 @@ export const StaticPin = ({ style: [{ left: staticPinPosition.x, top: staticPinPosition.y - }, styles.pinWrapper, { + }, + // eslint-disable-next-line @typescript-eslint/no-use-before-define + styles.pinWrapper, { opacity, transform }], @@ -64,7 +66,7 @@ export const StaticPin = ({ ...panResponder.panHandlers, children: staticPinIcon || /*#__PURE__*/ - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-use-before-define _jsx(Image, { source: require('../assets/pin.png'), style: styles.pin diff --git a/lib/module/components/StaticPin.js.map b/lib/module/components/StaticPin.js.map index a40cc35..5b867c9 100644 --- a/lib/module/components/StaticPin.js.map +++ b/lib/module/components/StaticPin.js.map @@ -1 +1 @@ -{"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":[]} +{"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/debugHelper/index.js b/lib/module/debugHelper/index.js index f689e53..f37e7db 100644 --- a/lib/module/debugHelper/index.js +++ b/lib/module/debugHelper/index.js @@ -11,7 +11,9 @@ export const DebugTouchPoint = ({ }) => { const radius = diameter / 2; return /*#__PURE__*/_jsx(View, { - style: [styles.debugPoint, { + style: [ + // eslint-disable-next-line @typescript-eslint/no-use-before-define + styles.debugPoint, { width: diameter, height: diameter, borderRadius: diameter, @@ -30,7 +32,9 @@ export const DebugRect = ({ }) => { const width = 5; return /*#__PURE__*/_jsx(View, { - style: [styles.debugRect, { + style: [ + // eslint-disable-next-line @typescript-eslint/no-use-before-define + styles.debugRect, { width, height, backgroundColor: color, diff --git a/lib/module/debugHelper/index.js.map b/lib/module/debugHelper/index.js.map index c87cf2b..6ea5ba4 100644 --- a/lib/module/debugHelper/index.js.map +++ b/lib/module/debugHelper/index.js.map @@ -1 +1 @@ -{"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":[]} +{"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;IACL;IACAC,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;IACL;IACAC,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/getNextZoomStep.js b/lib/module/helper/getNextZoomStep.js new file mode 100644 index 0000000..6cf8e94 --- /dev/null +++ b/lib/module/helper/getNextZoomStep.js @@ -0,0 +1,26 @@ +"use strict"; + +/** + * Returns the next zoom step based on current step and zoomStep property. + * If we are zoomed all the way in -> return to initialzoom + * + * @returns {*} + */ +export const getNextZoomStep = ({ + zoomStep, + maxZoom, + initialZoom, + zoomLevel +}) => { + if (maxZoom == null) return; + if (zoomLevel.toFixed(2) === maxZoom.toFixed(2)) { + return initialZoom; + } + if (zoomStep == null) return; + const nextZoomStep = zoomLevel * (1 + zoomStep); + if (nextZoomStep > maxZoom) { + return maxZoom; + } + return nextZoomStep; +}; +//# sourceMappingURL=getNextZoomStep.js.map \ No newline at end of file diff --git a/lib/module/helper/getNextZoomStep.js.map b/lib/module/helper/getNextZoomStep.js.map new file mode 100644 index 0000000..df06be8 --- /dev/null +++ b/lib/module/helper/getNextZoomStep.js.map @@ -0,0 +1 @@ +{"version":3,"names":["getNextZoomStep","zoomStep","maxZoom","initialZoom","zoomLevel","toFixed","nextZoomStep"],"sourceRoot":"../../../src","sources":["helper/getNextZoomStep.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,eAAe,GAAGA,CAAC;EAC9BC,QAAQ;EACRC,OAAO;EACPC,WAAW;EACXC;AAMF,CAAC,KAAK;EACJ,IAAIF,OAAO,IAAI,IAAI,EAAE;EAErB,IAAIE,SAAS,CAACC,OAAO,CAAC,CAAC,CAAC,KAAKH,OAAO,CAACG,OAAO,CAAC,CAAC,CAAC,EAAE;IAC/C,OAAOF,WAAW;EACpB;EAEA,IAAIF,QAAQ,IAAI,IAAI,EAAE;EAEtB,MAAMK,YAAY,GAAGF,SAAS,IAAI,CAAC,GAAGH,QAAQ,CAAC;EAC/C,IAAIK,YAAY,GAAGJ,OAAO,EAAE;IAC1B,OAAOA,OAAO;EAChB;EAEA,OAAOI,YAAY;AACrB,CAAC","ignoreList":[]} diff --git a/lib/module/hooks/useDebugPoints.js b/lib/module/hooks/useDebugPoints.js new file mode 100644 index 0000000..7d628fc --- /dev/null +++ b/lib/module/hooks/useDebugPoints.js @@ -0,0 +1,35 @@ +"use strict"; + +import { useState } from 'react'; +import { useLatestCallback } from './useLatestCallback'; +export const useDebugPoints = ({ + originalPageX, + originalPageY +}) => { + const [debugPoints, setDebugPoints] = useState([]); + + /** + * Used to debug pinch events + * @param gestureResponderEvent + * @param zoomCenter + * @param points + */ + const setPinchDebugPoints = useLatestCallback((gestureResponderEvent, zoomCenter, ...points) => { + const { + touches + } = gestureResponderEvent.nativeEvent; + setDebugPoints([{ + x: touches[0].pageX - originalPageX, + y: touches[0].pageY - originalPageY + }, { + x: touches[1].pageX - originalPageX, + y: touches[1].pageY - originalPageY + }, zoomCenter, ...points]); + }); + return { + debugPoints, + setDebugPoints, + setPinchDebugPoints + }; +}; +//# sourceMappingURL=useDebugPoints.js.map \ No newline at end of file diff --git a/lib/module/hooks/useDebugPoints.js.map b/lib/module/hooks/useDebugPoints.js.map new file mode 100644 index 0000000..def583d --- /dev/null +++ b/lib/module/hooks/useDebugPoints.js.map @@ -0,0 +1 @@ +{"version":3,"names":["useState","useLatestCallback","useDebugPoints","originalPageX","originalPageY","debugPoints","setDebugPoints","setPinchDebugPoints","gestureResponderEvent","zoomCenter","points","touches","nativeEvent","x","pageX","y","pageY"],"sourceRoot":"../../../src","sources":["hooks/useDebugPoints.ts"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,OAAO;AAIhC,SAASC,iBAAiB,QAAQ,qBAAqB;AAEvD,OAAO,MAAMC,cAAc,GAAGA,CAAC;EAC7BC,aAAa;EACbC;AAIF,CAAC,KAAK;EACJ,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAGN,QAAQ,CAAU,EAAE,CAAC;;EAE3D;AACF;AACA;AACA;AACA;AACA;EACE,MAAMO,mBAAmB,GAAGN,iBAAiB,CAC3C,CACEO,qBAA4C,EAC5CC,UAAiB,EACjB,GAAGC,MAAe,KACf;IACH,MAAM;MAAEC;IAAQ,CAAC,GAAGH,qBAAqB,CAACI,WAAW;IAErDN,cAAc,CAAC,CACb;MACEO,CAAC,EAAEF,OAAO,CAAC,CAAC,CAAC,CAACG,KAAK,GAAGX,aAAa;MACnCY,CAAC,EAAEJ,OAAO,CAAC,CAAC,CAAC,CAACK,KAAK,GAAGZ;IACxB,CAAC,EACD;MACES,CAAC,EAAEF,OAAO,CAAC,CAAC,CAAC,CAACG,KAAK,GAAGX,aAAa;MACnCY,CAAC,EAAEJ,OAAO,CAAC,CAAC,CAAC,CAACK,KAAK,GAAGZ;IACxB,CAAC,EACDK,UAAU,EACV,GAAGC,MAAM,CACV,CAAC;EACJ,CACF,CAAC;EAED,OAAO;IAAEL,WAAW;IAAEC,cAAc;IAAEC;EAAoB,CAAC;AAC7D,CAAC","ignoreList":[]} diff --git a/lib/module/hooks/useZoomSubject.js b/lib/module/hooks/useZoomSubject.js new file mode 100644 index 0000000..64756bb --- /dev/null +++ b/lib/module/hooks/useZoomSubject.js @@ -0,0 +1,73 @@ +"use strict"; + +import { useEffect, useRef, useState } from 'react'; +import { useLatestCallback } from './useLatestCallback'; +export const useZoomSubject = () => { + const wrapperRef = useRef(null); + 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 measureZoomSubjectInterval = useRef(); + + /** + * Get the original box dimensions and save them for later use. + * (They will be used to calculate boxBorders) + * + * @private + */ + const measure = 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` + // when navigating back (react-navigation stack) from another view + // while closing the keyboard at the same time + setTimeout(() => { + // In normal conditions, we're supposed to measure zoomSubject instead of its wrapper. + // However, our zoomSubject may have been transformed by an initial zoomLevel or offset, + // 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) + wrapperRef.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; + setOriginalX(x); + setOriginalY(y); + setOriginalWidth(width); + setOriginalHeight(height); + setOriginalPageX(pageX); + setOriginalPageY(pageY); + }); + }); + }); + }); + useEffect(() => { + measure(); + // 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(measure, 1e3); + return () => { + measureZoomSubjectInterval.current && clearInterval(measureZoomSubjectInterval.current); + }; + }, []); + return { + wrapperRef, + measure, + originalWidth, + originalHeight, + originalPageX, + originalPageY, + originalX, + originalY + }; +}; +//# sourceMappingURL=useZoomSubject.js.map \ No newline at end of file diff --git a/lib/module/hooks/useZoomSubject.js.map b/lib/module/hooks/useZoomSubject.js.map new file mode 100644 index 0000000..89245a9 --- /dev/null +++ b/lib/module/hooks/useZoomSubject.js.map @@ -0,0 +1 @@ +{"version":3,"names":["useEffect","useRef","useState","useLatestCallback","useZoomSubject","wrapperRef","originalWidth","setOriginalWidth","originalHeight","setOriginalHeight","originalPageX","setOriginalPageX","originalPageY","setOriginalPageY","originalX","setOriginalX","originalY","setOriginalY","measureZoomSubjectInterval","measure","requestAnimationFrame","setTimeout","current","x","y","width","height","pageX","pageY","setInterval","clearInterval"],"sourceRoot":"../../../src","sources":["hooks/useZoomSubject.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAGnD,SAASC,iBAAiB,QAAQ,qBAAqB;AAEvD,OAAO,MAAMC,cAAc,GAAGA,CAAA,KAAM;EAClC,MAAMC,UAAU,GAAGJ,MAAM,CAAO,IAAI,CAAC;EACrC,MAAM,CAACK,aAAa,EAAEC,gBAAgB,CAAC,GAAGL,QAAQ,CAAC,CAAC,CAAC;EACrD,MAAM,CAACM,cAAc,EAAEC,iBAAiB,CAAC,GAAGP,QAAQ,CAAC,CAAC,CAAC;EACvD,MAAM,CAACQ,aAAa,EAAEC,gBAAgB,CAAC,GAAGT,QAAQ,CAAC,CAAC,CAAC;EACrD,MAAM,CAACU,aAAa,EAAEC,gBAAgB,CAAC,GAAGX,QAAQ,CAAC,CAAC,CAAC;EACrD,MAAM,CAACY,SAAS,EAAEC,YAAY,CAAC,GAAGb,QAAQ,CAAC,CAAC,CAAC;EAC7C,MAAM,CAACc,SAAS,EAAEC,YAAY,CAAC,GAAGf,QAAQ,CAAC,CAAC,CAAC;EAC7C,MAAMgB,0BAA0B,GAAGjB,MAAM,CAAe,CAAC;;EAEzD;AACF;AACA;AACA;AACA;AACA;EACE,MAAMkB,OAAO,GAAGhB,iBAAiB,CAAC,MAAM;IACtC;IACAiB,qBAAqB,CAAC,MAAM;MAC1B;MACA;MACA;MACAC,UAAU,CAAC,MAAM;QACf;QACA;QACA;QACA;QACA;QACAhB,UAAU,CAACiB,OAAO,EAAEH,OAAO,CAAC,CAACI,CAAC,EAAEC,CAAC,EAAEC,KAAK,EAAEC,MAAM,EAAEC,KAAK,EAAEC,KAAK,KAAK;UACjE;UACA;UACA;UACA,IAAI,CAACD,KAAK,IAAI,CAACC,KAAK,IAAI,CAACH,KAAK,IAAI,CAACC,MAAM,EAAE;UAE3CX,YAAY,CAACQ,CAAC,CAAC;UACfN,YAAY,CAACO,CAAC,CAAC;UACfjB,gBAAgB,CAACkB,KAAK,CAAC;UACvBhB,iBAAiB,CAACiB,MAAM,CAAC;UACzBf,gBAAgB,CAACgB,KAAK,CAAC;UACvBd,gBAAgB,CAACe,KAAK,CAAC;QACzB,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF5B,SAAS,CAAC,MAAM;IACdmB,OAAO,CAAC,CAAC;IACT;IACA;IACA;IACA;IACA;IACA;IACA;IACAD,0BAA0B,CAACI,OAAO,GAAGO,WAAW,CAACV,OAAO,EAAE,GAAG,CAAC;IAE9D,OAAO,MAAM;MACXD,0BAA0B,CAACI,OAAO,IAChCQ,aAAa,CAACZ,0BAA0B,CAACI,OAAO,CAAC;IACrD,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IACLjB,UAAU;IACVc,OAAO;IACPb,aAAa;IACbE,cAAc;IACdE,aAAa;IACbE,aAAa;IACbE,SAAS;IACTE;EACF,CAAC;AACH,CAAC","ignoreList":[]} diff --git a/lib/typescript/ReactNativeZoomableView.d.ts.map b/lib/typescript/ReactNativeZoomableView.d.ts.map index fe4cb85..2d2a5b6 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":"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 +{"version":3,"file":"ReactNativeZoomableView.d.ts","sourceRoot":"","sources":["../../src/ReactNativeZoomableView.tsx"],"names":[],"mappings":"AACA,OAAc,EACZ,wBAAwB,EAMzB,MAAM,OAAO,CAAC;AA0Bf,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,CAu+B7B,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.map b/lib/typescript/components/AnimatedTouchFeedback.d.ts.map index 47da034..521a5d6 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":"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 +{"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;uBAoD7B,CAAC"} \ 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 b968077..2adcbc3 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;;uBAiEnC,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;;uBAkEnC,CAAC"} \ 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 86a4d35..6b7a9e4 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":"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 +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/debugHelper/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,eAAO,MAAM,eAAe;;;;;uBAwB3B,CAAC;AACF,eAAO,MAAM,SAAS;YAMZ,MAAM;OACX,MAAM;OACN,MAAM;WACF,MAAM;uBAmBd,CAAC"} \ No newline at end of file diff --git a/lib/typescript/helper/getNextZoomStep.d.ts b/lib/typescript/helper/getNextZoomStep.d.ts new file mode 100644 index 0000000..bad2645 --- /dev/null +++ b/lib/typescript/helper/getNextZoomStep.d.ts @@ -0,0 +1,13 @@ +/** + * Returns the next zoom step based on current step and zoomStep property. + * If we are zoomed all the way in -> return to initialzoom + * + * @returns {*} + */ +export declare const getNextZoomStep: ({ zoomStep, maxZoom, initialZoom, zoomLevel, }: { + zoomStep: number | undefined; + maxZoom: number | undefined; + initialZoom: number | undefined; + zoomLevel: number; +}) => number | undefined; +//# sourceMappingURL=getNextZoomStep.d.ts.map \ No newline at end of file diff --git a/lib/typescript/helper/getNextZoomStep.d.ts.map b/lib/typescript/helper/getNextZoomStep.d.ts.map new file mode 100644 index 0000000..cd741fe --- /dev/null +++ b/lib/typescript/helper/getNextZoomStep.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"getNextZoomStep.d.ts","sourceRoot":"","sources":["../../../src/helper/getNextZoomStep.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,eAAe;cAMhB,MAAM,GAAG,SAAS;aACnB,MAAM,GAAG,SAAS;iBACd,MAAM,GAAG,SAAS;eACpB,MAAM;wBAgBlB,CAAC"} \ No newline at end of file diff --git a/lib/typescript/hooks/useDebugPoints.d.ts b/lib/typescript/hooks/useDebugPoints.d.ts new file mode 100644 index 0000000..91de831 --- /dev/null +++ b/lib/typescript/hooks/useDebugPoints.d.ts @@ -0,0 +1,12 @@ +/// +import { GestureResponderEvent } from 'react-native'; +import { Vec2D } from '../typings'; +export declare const useDebugPoints: ({ originalPageX, originalPageY, }: { + originalPageX: number; + originalPageY: number; +}) => { + debugPoints: Vec2D[]; + setDebugPoints: import("react").Dispatch>; + setPinchDebugPoints: (gestureResponderEvent: GestureResponderEvent, zoomCenter: Vec2D, ...points: Vec2D[]) => void; +}; +//# sourceMappingURL=useDebugPoints.d.ts.map \ No newline at end of file diff --git a/lib/typescript/hooks/useDebugPoints.d.ts.map b/lib/typescript/hooks/useDebugPoints.d.ts.map new file mode 100644 index 0000000..7230df2 --- /dev/null +++ b/lib/typescript/hooks/useDebugPoints.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"useDebugPoints.d.ts","sourceRoot":"","sources":["../../../src/hooks/useDebugPoints.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,eAAO,MAAM,cAAc;mBAIV,MAAM;mBACN,MAAM;;;;;CAkCtB,CAAC"} \ No newline at end of file diff --git a/lib/typescript/hooks/useZoomSubject.d.ts b/lib/typescript/hooks/useZoomSubject.d.ts new file mode 100644 index 0000000..9a6c972 --- /dev/null +++ b/lib/typescript/hooks/useZoomSubject.d.ts @@ -0,0 +1,13 @@ +/// +import { View } from 'react-native'; +export declare const useZoomSubject: () => { + wrapperRef: import("react").RefObject; + measure: () => void; + originalWidth: number; + originalHeight: number; + originalPageX: number; + originalPageY: number; + originalX: number; + originalY: number; +}; +//# sourceMappingURL=useZoomSubject.d.ts.map \ No newline at end of file diff --git a/lib/typescript/hooks/useZoomSubject.d.ts.map b/lib/typescript/hooks/useZoomSubject.d.ts.map new file mode 100644 index 0000000..ac0b8ce --- /dev/null +++ b/lib/typescript/hooks/useZoomSubject.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"useZoomSubject.d.ts","sourceRoot":"","sources":["../../../src/hooks/useZoomSubject.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAIpC,eAAO,MAAM,cAAc;;;;;;;;;CAwE1B,CAAC"} \ No newline at end of file diff --git a/package.json b/package.json index 7b027da..cd6b9df 100644 --- a/package.json +++ b/package.json @@ -155,6 +155,7 @@ } ], "react-native/no-color-literals": "off", + "react-native/no-inline-styles": "off", "simple-import-sort/imports": "error", "simple-import-sort/exports": "error" }, @@ -182,6 +183,16 @@ { "allowNumber": true } + ], + "@typescript-eslint/no-use-before-define": [ + "error", + { + "functions": true, + "variables": true, + "enums": false, + "classes": false, + "typedefs": false + } ] } } diff --git a/src/ReactNativeZoomableView.tsx b/src/ReactNativeZoomableView.tsx index b517c88..25f13a9 100644 --- a/src/ReactNativeZoomableView.tsx +++ b/src/ReactNativeZoomableView.tsx @@ -1,7 +1,6 @@ import { debounce, defaults } from 'lodash'; import React, { ForwardRefRenderFunction, - useEffect, useImperativeHandle, useLayoutEffect, useMemo, @@ -29,7 +28,10 @@ import { calcNewScaledOffsetForZoomCentering, } from './helper'; import { viewportPositionToImagePosition } from './helper/coordinateConversion'; +import { getNextZoomStep } from './helper/getNextZoomStep'; +import { useDebugPoints } from './hooks/useDebugPoints'; import { useLatestCallback } from './hooks/useLatestCallback'; +import { useZoomSubject } from './hooks/useZoomSubject'; import { ReactNativeZoomableViewProps, TouchPoint, @@ -50,17 +52,25 @@ 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 { + wrapperRef: zoomSubjectWrapperRef, + measure: measureZoomSubject, + originalWidth, + originalHeight, + originalPageX, + originalPageY, + originalX, + originalY, + } = useZoomSubject(); + const [pinSize, setPinSize] = useState({ width: 0, height: 0 }); - const [debugPoints, setDebugPoints] = useState([]); const [stateTouches, setStateTouches] = useState([]); - const zoomSubjectWrapperRef = useRef(null); + const { debugPoints, setDebugPoints, setPinchDebugPoints } = useDebugPoints({ + originalPageX, + originalPageY, + }); + const gestureHandlers = useRef(); const doubleTapFirstTapReleaseTimestamp = useRef(); @@ -89,6 +99,17 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< disablePanOnInitialZoom: false, }); + const { + staticPinIcon, + children, + visualTouchFeedbackEnabled, + doubleTapDelay, + staticPinPosition, + onStaticPinLongPress, + onStaticPinPress, + pinProps, + } = props; + const panAnim = useRef(new Animated.ValueXY({ x: 0, y: 0 })); const zoomAnim = useRef(new Animated.Value(1)); @@ -112,47 +133,97 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< 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 - // (aka gesture handling responsibility is taken over by another 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. - _handlePanResponderEnd(evt, gestureState); - props.onPanResponderTerminate?.( - evt, - gestureState, - _getZoomableViewEventObject() - ); + /** + * Returns additional information about components current state for external event hooks + * + * @returns {{}} + * @private + */ + const _getZoomableViewEventObject = useLatestCallback( + (overwriteObj: Partial = {}): ZoomableViewEvent => { + return { + zoomLevel: zoomLevel.current, + offsetX: offsetX.current, + offsetY: offsetY.current, + originalHeight, + originalWidth, + originalPageX, + originalPageY, + ...overwriteObj, + }; + } + ); + + const _staticPinPosition = useLatestCallback(() => { + if (!props.staticPinPosition) return; + if (!props.contentWidth || !props.contentHeight) return; + + return viewportPositionToImagePosition({ + viewportPosition: { + x: props.staticPinPosition.x, + y: props.staticPinPosition.y, + }, + imageSize: { + height: props.contentHeight, + width: props.contentWidth, + }, + zoomableEvent: { + ..._getZoomableViewEventObject(), + offsetX: offsetX.current, + offsetY: offsetY.current, + zoomLevel: zoomLevel.current, }, - 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) => - props.onShouldBlockNativeResponder?.( - evt, - gestureState, - _getZoomableViewEventObject() - ) ?? true, - onStartShouldSetPanResponderCapture: (evt, gestureState) => - !!props.onStartShouldSetPanResponderCapture?.(evt, gestureState), - onMoveShouldSetPanResponderCapture: (evt, gestureState) => - !!props.onMoveShouldSetPanResponderCapture?.(evt, gestureState), }); + }); + + const _updateStaticPin = useLatestCallback(() => { + const position = _staticPinPosition(); + if (!position) return; + props.onStaticPinPositionChange?.(position); + }); + + const _addTouch = useLatestCallback((touch: TouchPoint) => { + touches.current.push(touch); + setStateTouches([...touches.current]); + }); + + const _removeTouch = useLatestCallback((touch: TouchPoint) => { + touches.current.splice(touches.current.indexOf(touch), 1); + setStateTouches([...touches.current]); + }); + + const onStaticPinPositionChange = useLatestCallback( + props.onStaticPinPositionChange || (() => undefined) + ); + + const debouncedOnStaticPinPositionChange = useMemo( + () => debounce(onStaticPinPositionChange, 100), + [] + ); + + /** + * try to invoke onTransform + * @private + */ + const _invokeOnTransform = useLatestCallback(() => { + const zoomableViewEvent = _getZoomableViewEventObject(); + const position = _staticPinPosition(); + + if (!zoomableViewEvent.originalWidth || !zoomableViewEvent.originalHeight) + return { successful: false }; + + props.onTransform?.(zoomableViewEvent); + + if (position) { + props.onStaticPinPositionMove?.(position); + debouncedOnStaticPinPositionChange(position); + } + + return { successful: true }; + }); + useLayoutEffect(() => { if (props.zoomAnimatedValue) zoomAnim.current = props.zoomAnimatedValue; if (props.panAnimatedValueXY) panAnim.current = props.panAnimatedValueXY; @@ -227,111 +298,6 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< 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), - [] - ); - - /** - * try to invoke onTransform - * @private - */ - const _invokeOnTransform = useLatestCallback(() => { - const zoomableViewEvent = _getZoomableViewEventObject(); - const position = _staticPinPosition(); - - if (!zoomableViewEvent.originalWidth || !zoomableViewEvent.originalHeight) - return { successful: false }; - - props.onTransform?.(zoomableViewEvent); - - if (position) { - props.onStaticPinPositionMove?.(position); - debouncedOnStaticPinPositionChange(position); - } - - return { successful: true }; - }); - - /** - * Returns additional information about components current state for external event hooks - * - * @returns {{}} - * @private - */ - 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. - * (They will be used to calculate boxBorders) - * - * @private - */ - 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` - // when navigating back (react-navigation stack) from another view - // while closing the keyboard at the same time - setTimeout(() => { - // In normal conditions, we're supposed to measure zoomSubject instead of its wrapper. - // However, our zoomSubject may have been transformed by an initial zoomLevel or offset, - // 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) - 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; - - setOriginalX(x); - setOriginalY(y); - setOriginalWidth(width); - setOriginalHeight(height); - setOriginalPageX(pageX); - setOriginalPageY(pageY); - } - ); - }); - }); - }); - /** * Handles the start of touch events and checks for taps * @@ -386,124 +352,36 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< }); /** - * Handles the end of touch events + * Calculates the amount the offset should shift since the last position during panning * - * @param e - * @param gestureState + * @param {Vec2D} gestureCenterPoint * * @private */ - const _handlePanResponderEnd: NonNullable< - PanResponderCallbacks['onPanResponderEnd'] - > = useLatestCallback((e, gestureState) => { - if (!gestureType.current) { - _resolveAndHandleTap(e); - } + const _calcOffsetShiftSinceLastGestureState = useLatestCallback( + (gestureCenterPoint: Vec2D) => { + const { movementSensibility } = props; - setDebugPoints([]); + let shift = null; - lastGestureCenterPosition.current = null; + if (lastGestureCenterPosition.current && movementSensibility) { + const dx = gestureCenterPoint.x - lastGestureCenterPosition.current.x; + const dy = gestureCenterPoint.y - lastGestureCenterPosition.current.y; - if (longPressTimeout.current) { - clearTimeout(longPressTimeout.current); - longPressTimeout.current = undefined; - } + const shiftX = dx / zoomLevel.current / movementSensibility; + const shiftY = dy / zoomLevel.current / movementSensibility; - props.onPanResponderEnd?.(e, gestureState, _getZoomableViewEventObject()); + shift = { + x: shiftX, + y: shiftY, + }; + } - if (gestureType.current === 'pinch') { - props.onZoomEnd?.(e, gestureState, _getZoomableViewEventObject()); - } else if (gestureType.current === 'shift') { - props.onShiftingEnd?.(e, gestureState, _getZoomableViewEventObject()); - } + lastGestureCenterPosition.current = gestureCenterPoint; - if (props.staticPinPosition) { - _updateStaticPin(); + return shift; } - - gestureType.current = undefined; - gestureStarted.current = false; - }); - - /** - * Handles the actual movement of our pan responder - * - * @param e - * @param gestureState - * - * @private - */ - 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 (!gestureStarted.current) { - _handlePanResponderGrant(e, gestureState); - } - } else { - if (gestureStarted.current) { - _handlePanResponderEnd(e, gestureState); - } - return true; - } - - 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 (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) { - gestureType.current = 'shift'; - _handleShifting(gestureState); - } - } - } - ); + ); /** * Handles the pinch movement and zooming @@ -584,7 +462,7 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< } // Uncomment to debug - props.debug && _setPinchDebugPoints(e, zoomCenter); + props.debug && setPinchDebugPoints(e, zoomCenter); const oldOffsetX = offsetX.current; const oldOffsetY = offsetY.current; @@ -627,63 +505,27 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< ); /** - * Used to debug pinch events - * @param gestureResponderEvent - * @param zoomCenter - * @param points - */ - const _setPinchDebugPoints = useLatestCallback( - ( - gestureResponderEvent: GestureResponderEvent, - zoomCenter: Vec2D, - ...points: Vec2D[] - ) => { - const { touches } = gestureResponderEvent.nativeEvent; - - 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 - * - * @param {Vec2D} gestureCenterPoint + * Set the state to offset moved * - * @private + * @param {number} newOffsetX + * @param {number} newOffsetY + * @returns */ - const _calcOffsetShiftSinceLastGestureState = useLatestCallback( - (gestureCenterPoint: Vec2D) => { - const { movementSensibility } = props; - - let shift = null; - - 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; + const _setNewOffsetPosition = useLatestCallback( + (newOffsetX: number, newOffsetY: number) => { + const { onShiftingBefore, onShiftingAfter } = props; - shift = { - x: shiftX, - y: shiftY, - }; + if (onShiftingBefore?.(null, null, _getZoomableViewEventObject())) { + return; } - lastGestureCenterPosition.current = gestureCenterPoint; + offsetX.current = newOffsetX; + offsetY.current = newOffsetY; - return shift; + panAnim.current.setValue({ x: offsetX.current, y: offsetY.current }); + zoomAnim.current.setValue(zoomLevel.current); + + onShiftingAfter?.(null, null, _getZoomableViewEventObject()); } ); @@ -724,30 +566,104 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< ); /** - * Set the state to offset moved + * 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 {number} newOffsetX - * @param {number} newOffsetY - * @returns + * @param newZoomLevel + * @param zoomCenter - If not supplied, the container's center is the zoom center */ - const _setNewOffsetPosition = useLatestCallback( - (newOffsetX: number, newOffsetY: number) => { - const { onShiftingBefore, onShiftingAfter } = props; + 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; - if (onShiftingBefore?.(null, null, _getZoomableViewEventObject())) { - return; - } + props.onZoomBefore?.(null, null, _getZoomableViewEventObject()); - offsetX.current = newOffsetX; - offsetY.current = newOffsetY; + // == 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; + }); + } - panAnim.current.setValue({ x: offsetX.current, y: offsetY.current }); - zoomAnim.current.setValue(zoomLevel.current); + // == Perform Zoom Animation == + getZoomToAnimation(zoomAnim.current, newZoomLevel).start(() => { + zoomAnim.current.removeListener(listenerId); + }); + // == Zoom Animation Ends == - onShiftingAfter?.(null, null, _getZoomableViewEventObject()); + props.onZoomAfter?.(null, null, _getZoomableViewEventObject()); + return true; } ); + /** + * Handles the double tap event + * + * @param e + * + * @private + */ + const _handleDoubleTap = useLatestCallback((e: GestureResponderEvent) => { + const { onDoubleTapBefore, onDoubleTapAfter, doubleTapZoomToCenter } = + props; + + onDoubleTapBefore?.(e, _getZoomableViewEventObject()); + + const nextZoomStep = getNextZoomStep({ + zoomLevel: zoomLevel.current, + zoomStep: props.zoomStep, + maxZoom: props.maxZoom, + initialZoom: props.initialZoom, + }); + if (nextZoomStep == null) return; + + // 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) { + zoomPositionCoordinates.x = 0; + zoomPositionCoordinates.y = 0; + } + + publicZoomTo(nextZoomStep, zoomPositionCoordinates); + + onDoubleTapAfter?.( + e, + _getZoomableViewEventObject({ zoomLevel: nextZoomStep }) + ); + }); + /** * Check whether the press event is double tap * or single tap and handle the event accordingly @@ -840,178 +756,21 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< } ); - const _staticPinPosition = useLatestCallback(() => { - if (!props.staticPinPosition) return; - if (!props.contentWidth || !props.contentHeight) return; - - return viewportPositionToImagePosition({ - viewportPosition: { - x: props.staticPinPosition.x, - y: props.staticPinPosition.y, - }, - imageSize: { - height: props.contentHeight, - width: props.contentWidth, - }, - zoomableEvent: { - ..._getZoomableViewEventObject(), - offsetX: offsetX.current, - offsetY: offsetY.current, - zoomLevel: zoomLevel.current, - }, - }); - }); - - const _updateStaticPin = useLatestCallback(() => { - const position = _staticPinPosition(); - if (!position) return; - props.onStaticPinPositionChange?.(position); - }); - - const _addTouch = useLatestCallback((touch: TouchPoint) => { - touches.current.push(touch); - setStateTouches([...touches.current]); - }); - - const _removeTouch = useLatestCallback((touch: TouchPoint) => { - touches.current.splice(touches.current.indexOf(touch), 1); - setStateTouches([...touches.current]); - }); - - /** - * Handles the double tap event - * - * @param e - * - * @private - */ - const _handleDoubleTap = useLatestCallback((e: GestureResponderEvent) => { - const { onDoubleTapBefore, onDoubleTapAfter, doubleTapZoomToCenter } = - props; - - onDoubleTapBefore?.(e, _getZoomableViewEventObject()); - - const nextZoomStep = _getNextZoomStep(); - if (nextZoomStep == null) return; - - // 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) { - zoomPositionCoordinates.x = 0; - zoomPositionCoordinates.y = 0; - } - - 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 {*} - */ - const _getNextZoomStep = useLatestCallback(() => { - const { zoomStep, maxZoom, initialZoom } = props; - - if (maxZoom == null) return; - - if (zoomLevel.current.toFixed(2) === maxZoom.toFixed(2)) { - return initialZoom; - } - - if (zoomStep == null) return; - - 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. - * 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 - */ - 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; - }); - } - - // == Perform Zoom Animation == - getZoomToAnimation(zoomAnim.current, newZoomLevel).start(() => { - zoomAnim.current.removeListener(listenerId); - }); - // == Zoom Animation Ends == - - 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 - * 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} - */ - const publicZoomBy = useLatestCallback((zoomLevelChange: number) => { - // if no zoom level Change given -> just use zoom step - zoomLevelChange ||= props.zoomStep || 0; - return publicZoomTo(zoomLevel.current + zoomLevelChange); + /** + * 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} + */ + const publicZoomBy = useLatestCallback((zoomLevelChange: number) => { + // if no zoom level Change given -> just use zoom step + zoomLevelChange ||= props.zoomStep || 0; + return publicZoomTo(zoomLevel.current + zoomLevelChange); }); /** @@ -1068,19 +827,169 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< }, })); - const { - staticPinIcon, - children, - visualTouchFeedbackEnabled, - doubleTapDelay, - staticPinPosition, - onStaticPinLongPress, - onStaticPinPress, - pinProps, - } = props; + /** + * Handles the end of touch events + * + * @param e + * @param gestureState + * + * @private + */ + const _handlePanResponderEnd: NonNullable< + PanResponderCallbacks['onPanResponderEnd'] + > = useLatestCallback((e, gestureState) => { + if (!gestureType.current) { + _resolveAndHandleTap(e); + } + + setDebugPoints([]); + + lastGestureCenterPosition.current = null; + + if (longPressTimeout.current) { + clearTimeout(longPressTimeout.current); + longPressTimeout.current = undefined; + } + + 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 (props.staticPinPosition) { + _updateStaticPin(); + } + + gestureType.current = undefined; + gestureStarted.current = false; + }); + + /** + * Handles the actual movement of our pan responder + * + * @param e + * @param gestureState + * + * @private + */ + 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 (!gestureStarted.current) { + _handlePanResponderGrant(e, gestureState); + } + } else { + if (gestureStarted.current) { + _handlePanResponderEnd(e, gestureState); + } + return true; + } + + 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 (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) { + gestureType.current = 'shift'; + _handleShifting(gestureState); + } + } + } + ); + + 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 + // (aka gesture handling responsibility is taken over by another 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. + _handlePanResponderEnd(evt, gestureState); + props.onPanResponderTerminate?.( + evt, + gestureState, + _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) => + props.onShouldBlockNativeResponder?.( + evt, + gestureState, + _getZoomableViewEventObject() + ) ?? true, + onStartShouldSetPanResponderCapture: (evt, gestureState) => + !!props.onStartShouldSetPanResponderCapture?.(evt, gestureState), + onMoveShouldSetPanResponderCapture: (evt, gestureState) => + !!props.onMoveShouldSetPanResponderCapture?.(evt, gestureState), + }); + }, []); return ( {staticPinIcon || ( - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-use-before-define )} diff --git a/src/debugHelper/index.tsx b/src/debugHelper/index.tsx index d9a3f7d..d088b9b 100644 --- a/src/debugHelper/index.tsx +++ b/src/debugHelper/index.tsx @@ -11,6 +11,7 @@ export const DebugTouchPoint = ({ return ( return to initialzoom + * + * @returns {*} + */ +export const getNextZoomStep = ({ + zoomStep, + maxZoom, + initialZoom, + zoomLevel, +}: { + zoomStep: number | undefined; + maxZoom: number | undefined; + initialZoom: number | undefined; + zoomLevel: number; +}) => { + if (maxZoom == null) return; + + if (zoomLevel.toFixed(2) === maxZoom.toFixed(2)) { + return initialZoom; + } + + if (zoomStep == null) return; + + const nextZoomStep = zoomLevel * (1 + zoomStep); + if (nextZoomStep > maxZoom) { + return maxZoom; + } + + return nextZoomStep; +}; diff --git a/src/hooks/useDebugPoints.ts b/src/hooks/useDebugPoints.ts new file mode 100644 index 0000000..5f6b736 --- /dev/null +++ b/src/hooks/useDebugPoints.ts @@ -0,0 +1,46 @@ +import { useState } from 'react'; +import { GestureResponderEvent } from 'react-native'; + +import { Vec2D } from '../typings'; +import { useLatestCallback } from './useLatestCallback'; + +export const useDebugPoints = ({ + originalPageX, + originalPageY, +}: { + originalPageX: number; + originalPageY: number; +}) => { + const [debugPoints, setDebugPoints] = useState([]); + + /** + * Used to debug pinch events + * @param gestureResponderEvent + * @param zoomCenter + * @param points + */ + const setPinchDebugPoints = useLatestCallback( + ( + gestureResponderEvent: GestureResponderEvent, + zoomCenter: Vec2D, + ...points: Vec2D[] + ) => { + const { touches } = gestureResponderEvent.nativeEvent; + + setDebugPoints([ + { + x: touches[0].pageX - originalPageX, + y: touches[0].pageY - originalPageY, + }, + { + x: touches[1].pageX - originalPageX, + y: touches[1].pageY - originalPageY, + }, + zoomCenter, + ...points, + ]); + } + ); + + return { debugPoints, setDebugPoints, setPinchDebugPoints }; +}; diff --git a/src/hooks/useZoomSubject.ts b/src/hooks/useZoomSubject.ts new file mode 100644 index 0000000..c1f6526 --- /dev/null +++ b/src/hooks/useZoomSubject.ts @@ -0,0 +1,78 @@ +import { useEffect, useRef, useState } from 'react'; +import { View } from 'react-native'; + +import { useLatestCallback } from './useLatestCallback'; + +export const useZoomSubject = () => { + const wrapperRef = useRef(null); + 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 measureZoomSubjectInterval = useRef(); + + /** + * Get the original box dimensions and save them for later use. + * (They will be used to calculate boxBorders) + * + * @private + */ + const measure = 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` + // when navigating back (react-navigation stack) from another view + // while closing the keyboard at the same time + setTimeout(() => { + // In normal conditions, we're supposed to measure zoomSubject instead of its wrapper. + // However, our zoomSubject may have been transformed by an initial zoomLevel or offset, + // 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) + wrapperRef.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; + + setOriginalX(x); + setOriginalY(y); + setOriginalWidth(width); + setOriginalHeight(height); + setOriginalPageX(pageX); + setOriginalPageY(pageY); + }); + }); + }); + }); + + useEffect(() => { + measure(); + // 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(measure, 1e3); + + return () => { + measureZoomSubjectInterval.current && + clearInterval(measureZoomSubjectInterval.current); + }; + }, []); + + return { + wrapperRef, + measure, + originalWidth, + originalHeight, + originalPageX, + originalPageY, + originalX, + originalY, + }; +};