diff --git a/README.md b/README.md
index e9980da..f64c307 100644
--- a/README.md
+++ b/README.md
@@ -159,7 +159,7 @@ These options can be used to limit and change the zoom behavior.
| zoomStep | number | How much zoom should be applied on double tap | 0.5 |
| pinchToZoomInSensitivity | number | the level of resistance (sensitivity) to zoom in (0 - 10) - higher is less sensitive | 3 |
| pinchToZoomOutSensitivity | number | the level of resistance (sensitivity) to zoom out (0 - 10) - higher is less sensitive | 1 |
-| movementSensibility | number | how resistant should shifting the view around be? (0.5 - 5) - higher is less sensitive | 1.9 |
+| movementSensitivity | number | how resistant should shifting the view around be? (0.5 - 5) - higher is less sensitive | 1.9 |
| initialOffsetX | number | The horizontal offset the image should start at | 0 |
| initialOffsetY | number | The vertical offset the image should start at | 0 |
| contentHeight | number | Specify if you want to treat the height of the **centered** content inside the zoom subject as the zoom subject's height | undefined |
@@ -182,19 +182,15 @@ These optional props can be used to keep a "static" pin in the centre of the scr
These events can be used to work with data after specific events.
-| name | description | params | expected return |
-| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
-| onTransform | Will be called when the transformation configuration (zoom level and offset) changes | zoomableViewEventObject | void |
-| onDoubleTapBefore | Will be called at the start of a double tap | event, gestureState, zoomableViewEventObject | void |
-| onDoubleTapAfter | Will be called at the end of a double tap | event, gestureState, zoomableViewEventObject | void |
-| onShiftingBefore | Will be called when user taps and moves the view, but before our view movement work kicks in (so this is the place to interrupt movement, if you need to) | event, gestureState, zoomableViewEventObject | {boolean} if this returns true, ZoomableView will not process the shift, otherwise it will |
-| onShiftingAfter | Will be called when user taps and moves the view, but after the values have changed already | event, gestureState, zoomableViewEventObject | void |
-| onShiftingEnd | Will be called when user stops a tap and move gesture | event, gestureState, zoomableViewEventObject | void |
-| onZoomBefore | Will be called while the user pinches the screen, but before our zoom work kicks in (so this is the place to interrupt zooming, if you need to) | event, gestureState, zoomableViewEventObject | {boolean} if this returns true, ZoomableView will not process the pinch, otherwise it will |
-| onZoomAfter | Will be called while the user pinches the screen, but after the values have changed already | event, gestureState, zoomableViewEventObject | {boolean} if this returns true, ZoomableView will not process the pinch, otherwise it will |
-| onZoomEnd | Will be called after pinchzooming has ended | event, gestureState, zoomableViewEventObject | {boolean} if this returns true, ZoomableView will not process the pinch, otherwise it will |
-| onLongPress | Will be called after the user pressed on the image for a while | event, gestureState | void |
-| onLayout | Like `View`'s `onLayout`, but different in that it syncs with this component's internal state and returns a fake sythentic event | Like `View`'s `onLayout` but the synthetic event is fake | void |
+| name | description | params | expected return |
+| ----------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | --------------- |
+| onTransform | Will be called when the transformation configuration (zoom level and offset) changes | zoomableViewEventObject | void |
+| onDoubleTapBefore | Will be called at the start of a double tap | event, zoomableViewEventObject | void |
+| onDoubleTapAfter | Will be called at the end of a double tap | event, zoomableViewEventObject | void |
+| onShiftingEnd | Will be called when user stops a tap and move gesture | event, zoomableViewEventObject | void |
+| onZoomEnd | Will be called after pinchzooming has ended | event, zoomableViewEventObject | void |
+| onLongPress | Will be called after the user pressed on the image for a while | event | void |
+| onLayout | Like `View`'s `onLayout`, but different in that it syncs with this component's internal state and returns a fake sythentic event | Like `View`'s `onLayout` but the synthetic event is fake | void |
#### Methods
@@ -259,17 +255,15 @@ export default function App() {
#### Pan Responder Hooks
-Sometimes you need to change deeper level behavior, so we prepared these panresponder hooks for you.
+`react-native-gesture-handler` is now used instead of the built-in PanResponder. As such, we have removed some hooks that
+are no longer supported and made the rest backward compatible.
-| name | description | params | expected return |
-| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | --------------------------------------------------- |
-| onStartShouldSetPanResponder | description | event, gestureState, zoomableViewEventObject, baseComponentResult | {boolean} whether panresponder should be set or not |
-| onPanResponderGrant | description | event, gestureState, zoomableViewEventObject | void |
-| onPanResponderEnd | Will be called when gesture ends (more accurately, on pan responder "release") | event, gestureState, zoomableViewEventObject | void |
-| onPanResponderTerminate | Will be called when the gesture is force-interrupted by another handler | event, gestureState, zoomableViewEventObject | void |
-| onPanResponderTerminationRequest | Callback asking whether the gesture should be interrupted by another handler (**iOS only** due to https://github.com/facebook/react-native/issues/27778, https://github.com/facebook/react-native/issues/5696, ...) | event, gestureState, zoomableViewEventObject | void |
-| onPanResponderMove | Will be called when user moves while touching | event, gestureState, zoomableViewEventObject | void |
-| onShouldBlockNativeResponder | Returns whether this component should block native components from becoming the JS responder | event, gestureState, zoomableViewEventObject | boolean |
+| name | description | params | expected return |
+| ------------------------- | ------------------------------------------------------------------------------ | ------------------------------ | ------------------------------------------------------------------------------- |
+| onPanResponderGrant | description | event, zoomableViewEventObject | void |
+| onPanResponderEnd | Will be called when gesture ends (more accurately, on pan responder "release") | event, zoomableViewEventObject | void |
+| onPanResponderTerminate | Will be called when the gesture is force-interrupted by another handler | event, zoomableViewEventObject | void |
+| onPanResponderMoveWorklet | Will be called when user moves while touching | event, zoomableViewEventObject | {boolean} if true is returned, pinch and shift operations will not be processed |
### zoomableViewEventObject
@@ -282,8 +276,6 @@ The zoomableViewEventObject object is attached to every event and represents the
offsetY: number, // current offset top
originalHeight: number, // original height of the zoom subject
originalWidth: number, // original width of the zoom subject
- originalPageX: number, // original absolute X of the zoom subject
- originalPageY: number, // original absolite Y of the zoom subject
}
```
diff --git a/example/App.tsx b/example/App.tsx
index 8d249fd..abd7908 100644
--- a/example/App.tsx
+++ b/example/App.tsx
@@ -1,7 +1,20 @@
-import { ReactNativeZoomableView } from '@openspacelabs/react-native-zoomable-view';
+import {
+ FixedSize,
+ ReactNativeZoomableView,
+ ReactNativeZoomableViewRef,
+} from '@openspacelabs/react-native-zoomable-view';
import { debounce } from 'lodash';
-import React, { useCallback, useRef, useState } from 'react';
-import { Animated, Button, Image, Text, View } from 'react-native';
+import React, { ReactNode, useCallback, useRef, useState } from 'react';
+import {
+ Alert,
+ Button,
+ Image,
+ Modal,
+ Text,
+ View,
+ ViewProps,
+} from 'react-native';
+import { scheduleOnRN } from 'react-native-worklets';
import { applyContainResizeMode } from '../src/helper/coordinateConversion';
import { styles } from './style';
@@ -13,10 +26,24 @@ const imageSize = { width: kittenSize, height: kittenSize };
const stringifyPoint = (point?: { x: number; y: number }) =>
point ? `${Math.round(point.x)}, ${Math.round(point.y)}` : 'Off map';
+const PageSheetModal = ({
+ children,
+ style,
+}: {
+ children: ReactNode;
+ style?: ViewProps['style'];
+}) => {
+ return (
+
+ {children}
+
+ );
+};
+
export default function App() {
- const zoomAnimatedValue = useRef(new Animated.Value(1)).current;
- const scale = Animated.divide(1, zoomAnimatedValue);
+ const ref = useRef(null);
const [showMarkers, setShowMarkers] = useState(true);
+ const [modal, setModal] = useState(false);
const [size, setSize] = useState<{ width: number; height: number }>({
width: 0,
height: 0,
@@ -36,8 +63,10 @@ export default function App() {
const staticPinPosition = { x: size.width / 2, y: size.height / 2 };
const { size: contentSize } = applyContainResizeMode(imageSize, size);
+ const Wrapper = modal ? PageSheetModal : View;
+
return (
-
+
ReactNativeZoomableView
{
+ Alert.alert('Long press detected');
+ }}
// Where to put the pin in the content view
staticPinPosition={staticPinPosition}
// Callback that returns the position of the pin
// on the actual source image
onStaticPinPositionChange={debouncedUpdatePin}
- onStaticPinPositionMove={debouncedUpdateMovePin}
+ onStaticPinPositionMove={(position) => {
+ 'worklet';
+ scheduleOnRN(debouncedUpdateMovePin, position);
+ }}
maxZoom={30}
// Give these to the zoomable view so it can apply the boundaries around the actual content.
// Need to make sure the content is actually centered and the width and height are
// measured when it's rendered naturally. Not the intrinsic sizes.
contentWidth={contentSize?.width ?? 0}
contentHeight={contentSize?.height ?? 0}
- zoomAnimatedValue={zoomAnimatedValue}
>
{showMarkers &&
- (['20%', '40%', '60%', '80%'] as const).map((left) =>
- (['20%', '40%', '60%', '80%'] as const).map((top) => (
-
+ [20, 40, 60, 80].map((left) =>
+ [20, 40, 60, 80].map((top) => (
+
+
+
))
)}
@@ -88,6 +118,15 @@ export default function App() {
setShowMarkers((value) => !value);
}}
/>
-
+
+
);
}
diff --git a/example/babel.config.js b/example/babel.config.js
index b85e43d..623d3b9 100644
--- a/example/babel.config.js
+++ b/example/babel.config.js
@@ -17,6 +17,7 @@ module.exports = function (api) {
},
},
],
+ 'react-native-reanimated/plugin',
],
};
};
diff --git a/example/metro.config.js b/example/metro.config.js
index 8a724df..b43babd 100644
--- a/example/metro.config.js
+++ b/example/metro.config.js
@@ -1,50 +1,43 @@
const path = require('path');
-const exclusionList = require('metro-config/src/defaults/exclusionList');
const escape = require('escape-string-regexp');
-const { getDefaultConfig } = require('expo/metro-config');
+const { getDefaultConfig } = require('@expo/metro-config'); // or require("expo/metro-config")
const pak = require('../package.json');
const root = path.resolve(__dirname, '..');
-const modules = Object.keys({
- ...pak.peerDependencies,
-});
-
+const modules = Object.keys(pak.peerDependencies || {});
const config = getDefaultConfig(__dirname);
-/**
- * Allow Metro to see the library source
- */
+// 1) Allow Metro to see the library source (outside example/)
config.watchFolders = [root];
-/**
- * Prevent Metro from resolving deps from repo root
- */
+// 2) Prefer resolving deps from example/node_modules (avoid hoisted duplicates)
config.resolver.disableHierarchicalLookup = true;
config.resolver.nodeModulesPaths = [path.resolve(__dirname, 'node_modules')];
-/**
- * Ensure single versions of peerDependencies
- */
-config.resolver.blockList = exclusionList(
- modules.map(
- (m) => new RegExp(`^${escape(path.join(root, 'node_modules', m))}\\/.*$`)
- )
+// 3) Ensure single versions of peerDependencies (block root/node_modules/)
+const peerBlockList = modules.map(
+ (m) => new RegExp(`^${escape(path.join(root, 'node_modules', m))}(?:\\/.*)?$`)
);
+// Metro accepts an array of regexes here (no need for exclusionList)
+config.resolver.blockList = [
+ ...(config.resolver.blockList || []),
+ ...peerBlockList,
+];
+
+// 4) Force peers to resolve from example/node_modules
config.resolver.extraNodeModules = {
...modules.reduce((acc, name) => {
acc[name] = path.join(__dirname, 'node_modules', name);
return acc;
}, {}),
- // ๐ Alias the library itself to src
+ // Alias the library itself to src
'@openspacelabs/react-native-zoomable-view': path.resolve(root, 'src'),
};
-/**
- * ๐ REQUIRED for assets when aliasing src/
- */
+// 5) Usually not needed if you extend Expo config, but keep if youโre aliasing src
config.transformer.assetRegistryPath = require.resolve(
'react-native/Libraries/Image/AssetRegistry'
);
diff --git a/example/package.json b/example/package.json
index 6afdf85..3d66dab 100644
--- a/example/package.json
+++ b/example/package.json
@@ -11,17 +11,21 @@
"web": "expo start --web"
},
"dependencies": {
- "expo": "~52.0.0",
- "expo-status-bar": "~1.6.0",
+ "@expo/metro-runtime": "~6.1.2",
+ "expo": "~54.0.30",
+ "expo-status-bar": "~3.0.9",
"lodash": "^4.17.21",
- "react": "18.2.0",
- "react-dom": "18.2.0",
- "react-native": "0.76.9",
- "react-native-web": "~0.19.0"
+ "react": "19.1.0",
+ "react-dom": "19.1.0",
+ "react-native": "0.81.5",
+ "react-native-gesture-handler": "~2.28.0",
+ "react-native-reanimated": "~4.1.1",
+ "react-native-web": "~0.21.0",
+ "react-native-worklets": "0.5.1"
},
"devDependencies": {
"@babel/core": "^7.20.0",
"babel-plugin-module-resolver": "^4.0.0",
- "typescript": "^4.9.4"
+ "typescript": "^5.3.3"
}
}
diff --git a/example/style.ts b/example/style.ts
index 1a57070..f4141e5 100644
--- a/example/style.ts
+++ b/example/style.ts
@@ -9,6 +9,7 @@ export const styles = StyleSheet.create({
},
container: {
alignItems: 'center',
+ backgroundColor: 'white',
flex: 1,
justifyContent: 'center',
padding: 20,
diff --git a/example/tsconfig.json b/example/tsconfig.json
index c007e28..a62f05d 100644
--- a/example/tsconfig.json
+++ b/example/tsconfig.json
@@ -13,5 +13,5 @@
"esModuleInterop": true,
"moduleResolution": "node"
},
- "extends": "expo/tsconfig.base"
+ "extends": "../tsconfig"
}
diff --git a/example/yarn.lock b/example/yarn.lock
index 1717d20..a56f642 100644
--- a/example/yarn.lock
+++ b/example/yarn.lock
@@ -14,7 +14,7 @@
dependencies:
"@babel/highlight" "^7.10.4"
-"@babel/code-frame@^7.12.13", "@babel/code-frame@^7.24.7", "@babel/code-frame@^7.27.1":
+"@babel/code-frame@^7.12.13", "@babel/code-frame@^7.20.0", "@babel/code-frame@^7.24.7", "@babel/code-frame@^7.27.1":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be"
integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==
@@ -28,7 +28,7 @@
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.5.tgz#a8a4962e1567121ac0b3b487f52107443b455c7f"
integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==
-"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.20.0", "@babel/core@^7.25.2":
+"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.20.0", "@babel/core@^7.25.2":
version "7.28.5"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.5.tgz#4c81b35e51e1b734f510c99b07dfbc7bbbb48f7e"
integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==
@@ -78,7 +78,7 @@
lru-cache "^5.1.1"
semver "^6.3.1"
-"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.27.1", "@babel/helper-create-class-features-plugin@^7.28.5":
+"@babel/helper-create-class-features-plugin@^7.27.1", "@babel/helper-create-class-features-plugin@^7.28.3", "@babel/helper-create-class-features-plugin@^7.28.5":
version "7.28.5"
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz#472d0c28028850968979ad89f173594a6995da46"
integrity sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==
@@ -124,7 +124,7 @@
"@babel/traverse" "^7.28.5"
"@babel/types" "^7.28.5"
-"@babel/helper-module-imports@^7.27.1":
+"@babel/helper-module-imports@^7.25.9", "@babel/helper-module-imports@^7.27.1":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204"
integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==
@@ -148,7 +148,7 @@
dependencies:
"@babel/types" "^7.27.1"
-"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.8.0":
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.8.0":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c"
integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==
@@ -171,7 +171,7 @@
"@babel/helper-optimise-call-expression" "^7.27.1"
"@babel/traverse" "^7.27.1"
-"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.27.1":
+"@babel/helper-skip-transparent-expression-wrappers@^7.27.1":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz#62bb91b3abba8c7f1fec0252d9dbea11b3ee7a56"
integrity sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==
@@ -221,21 +221,13 @@
js-tokens "^4.0.0"
picocolors "^1.0.0"
-"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.7", "@babel/parser@^7.20.0", "@babel/parser@^7.20.7", "@babel/parser@^7.25.3", "@babel/parser@^7.27.2", "@babel/parser@^7.28.5":
+"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.25.3", "@babel/parser@^7.27.2", "@babel/parser@^7.28.5":
version "7.28.5"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08"
integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==
dependencies:
"@babel/types" "^7.28.5"
-"@babel/plugin-proposal-class-properties@^7.13.0":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3"
- integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==
- dependencies:
- "@babel/helper-create-class-features-plugin" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.18.6"
-
"@babel/plugin-proposal-decorators@^7.12.9":
version "7.28.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz#419c8acc31088e05a774344c021800f7ddc39bf0"
@@ -252,23 +244,6 @@
dependencies:
"@babel/helper-plugin-utils" "^7.27.1"
-"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1"
- integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
- "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
-
-"@babel/plugin-proposal-optional-chaining@^7.13.12":
- version "7.21.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea"
- integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0"
- "@babel/plugin-syntax-optional-chaining" "^7.8.3"
-
"@babel/plugin-syntax-async-generators@^7.8.4":
version "7.8.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
@@ -416,7 +391,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.27.1"
-"@babel/plugin-transform-arrow-functions@^7.24.7":
+"@babel/plugin-transform-arrow-functions@^7.0.0-0", "@babel/plugin-transform-arrow-functions@^7.24.7":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz#6e2061067ba3ab0266d834a9f94811196f2aba9a"
integrity sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==
@@ -448,7 +423,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.27.1"
-"@babel/plugin-transform-class-properties@^7.25.4":
+"@babel/plugin-transform-class-properties@^7.0.0-0", "@babel/plugin-transform-class-properties@^7.25.4":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz#dd40a6a370dfd49d32362ae206ddaf2bb082a925"
integrity sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==
@@ -456,7 +431,15 @@
"@babel/helper-create-class-features-plugin" "^7.27.1"
"@babel/helper-plugin-utils" "^7.27.1"
-"@babel/plugin-transform-classes@^7.25.4":
+"@babel/plugin-transform-class-static-block@^7.27.1":
+ version "7.28.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz#d1b8e69b54c9993bc558203e1f49bfc979bfd852"
+ integrity sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.28.3"
+ "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-classes@^7.0.0-0", "@babel/plugin-transform-classes@^7.25.4":
version "7.28.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz#75d66175486788c56728a73424d67cbc7473495c"
integrity sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==
@@ -484,14 +467,14 @@
"@babel/helper-plugin-utils" "^7.27.1"
"@babel/traverse" "^7.28.5"
-"@babel/plugin-transform-export-namespace-from@^7.22.11":
+"@babel/plugin-transform-export-namespace-from@^7.25.9":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz#71ca69d3471edd6daa711cf4dfc3400415df9c23"
integrity sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==
dependencies:
"@babel/helper-plugin-utils" "^7.27.1"
-"@babel/plugin-transform-flow-strip-types@^7.25.2", "@babel/plugin-transform-flow-strip-types@^7.27.1":
+"@babel/plugin-transform-flow-strip-types@^7.25.2":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.27.1.tgz#5def3e1e7730f008d683144fb79b724f92c5cdf9"
integrity sha512-G5eDKsu50udECw7DL2AcsysXiQyB7Nfg521t2OAJ4tbfTJ27doHLeF/vlI1NZGlLdbb/v+ibvtL1YBQqYOwJGg==
@@ -530,7 +513,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.27.1"
-"@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.24.8", "@babel/plugin-transform-modules-commonjs@^7.27.1":
+"@babel/plugin-transform-modules-commonjs@^7.24.8", "@babel/plugin-transform-modules-commonjs@^7.27.1":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz#8e44ed37c2787ecc23bdc367f49977476614e832"
integrity sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==
@@ -546,7 +529,7 @@
"@babel/helper-create-regexp-features-plugin" "^7.27.1"
"@babel/helper-plugin-utils" "^7.27.1"
-"@babel/plugin-transform-nullish-coalescing-operator@^7.24.7":
+"@babel/plugin-transform-nullish-coalescing-operator@^7.0.0-0", "@babel/plugin-transform-nullish-coalescing-operator@^7.24.7":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz#4f9d3153bf6782d73dd42785a9d22d03197bc91d"
integrity sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==
@@ -560,7 +543,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.27.1"
-"@babel/plugin-transform-object-rest-spread@^7.12.13", "@babel/plugin-transform-object-rest-spread@^7.24.7":
+"@babel/plugin-transform-object-rest-spread@^7.24.7":
version "7.28.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz#9ee1ceca80b3e6c4bac9247b2149e36958f7f98d"
integrity sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==
@@ -578,7 +561,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.27.1"
-"@babel/plugin-transform-optional-chaining@^7.24.8":
+"@babel/plugin-transform-optional-chaining@^7.0.0-0", "@babel/plugin-transform-optional-chaining@^7.24.8":
version "7.28.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz#8238c785f9d5c1c515a90bf196efb50d075a4b26"
integrity sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==
@@ -586,7 +569,7 @@
"@babel/helper-plugin-utils" "^7.27.1"
"@babel/helper-skip-transparent-expression-wrappers" "^7.27.1"
-"@babel/plugin-transform-parameters@^7.22.15", "@babel/plugin-transform-parameters@^7.24.7", "@babel/plugin-transform-parameters@^7.27.7":
+"@babel/plugin-transform-parameters@^7.24.7", "@babel/plugin-transform-parameters@^7.27.7":
version "7.27.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz#1fd2febb7c74e7d21cf3b05f7aebc907940af53a"
integrity sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==
@@ -676,7 +659,7 @@
babel-plugin-polyfill-regenerator "^0.6.5"
semver "^6.3.1"
-"@babel/plugin-transform-shorthand-properties@^7.24.7":
+"@babel/plugin-transform-shorthand-properties@^7.0.0-0", "@babel/plugin-transform-shorthand-properties@^7.24.7":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz#532abdacdec87bfee1e0ef8e2fcdee543fe32b90"
integrity sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==
@@ -698,6 +681,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.27.1"
+"@babel/plugin-transform-template-literals@^7.0.0-0":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz#1a0eb35d8bb3e6efc06c9fd40eb0bcef548328b8"
+ integrity sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.27.1"
+
"@babel/plugin-transform-typescript@^7.25.2", "@babel/plugin-transform-typescript@^7.28.5":
version "7.28.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.5.tgz#441c5f9a4a1315039516c6c612fc66d5f4594e72"
@@ -709,7 +699,7 @@
"@babel/helper-skip-transparent-expression-wrappers" "^7.27.1"
"@babel/plugin-syntax-typescript" "^7.27.1"
-"@babel/plugin-transform-unicode-regex@^7.24.7":
+"@babel/plugin-transform-unicode-regex@^7.0.0-0", "@babel/plugin-transform-unicode-regex@^7.24.7":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz#25948f5c395db15f609028e370667ed8bae9af97"
integrity sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==
@@ -717,15 +707,6 @@
"@babel/helper-create-regexp-features-plugin" "^7.27.1"
"@babel/helper-plugin-utils" "^7.27.1"
-"@babel/preset-flow@^7.13.13":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.27.1.tgz#3050ed7c619e8c4bfd0e0eeee87a2fa86a4bb1c6"
- integrity sha512-ez3a2it5Fn6P54W8QkbfIyyIbxlXvcxyWHHvno1Wg0Ej5eiJY5hBb8ExttoIOJJk7V2dZE6prP7iby5q2aQ0Lg==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
- "@babel/helper-validator-option" "^7.27.1"
- "@babel/plugin-transform-flow-strip-types" "^7.27.1"
-
"@babel/preset-react@^7.22.15":
version "7.28.5"
resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.28.5.tgz#6fcc0400fa79698433d653092c3919bb4b0878d9"
@@ -738,7 +719,7 @@
"@babel/plugin-transform-react-jsx-development" "^7.27.1"
"@babel/plugin-transform-react-pure-annotations" "^7.27.1"
-"@babel/preset-typescript@^7.13.0", "@babel/preset-typescript@^7.23.0":
+"@babel/preset-typescript@^7.16.7", "@babel/preset-typescript@^7.23.0":
version "7.28.5"
resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz#540359efa3028236958466342967522fd8f2a60c"
integrity sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==
@@ -749,17 +730,6 @@
"@babel/plugin-transform-modules-commonjs" "^7.27.1"
"@babel/plugin-transform-typescript" "^7.28.5"
-"@babel/register@^7.13.16":
- version "7.28.3"
- resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.28.3.tgz#abd8a3753480c799bdaf9c9092d6745d16e052c2"
- integrity sha512-CieDOtd8u208eI49bYl4z1J22ySFw87IGwE+IswFEExH7e3rLgKb0WNQeumnacQ1+VoDJLYI5QFA3AJZuyZQfA==
- dependencies:
- clone-deep "^4.0.1"
- find-cache-dir "^2.0.0"
- make-dir "^2.1.0"
- pirates "^4.0.6"
- source-map-support "^0.5.16"
-
"@babel/runtime@^7.18.6", "@babel/runtime@^7.20.0", "@babel/runtime@^7.25.0":
version "7.28.4"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326"
@@ -800,7 +770,7 @@
"@babel/types" "^7.28.5"
debug "^4.3.1"
-"@babel/types@^7.0.0", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.25.2", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.28.5", "@babel/types@^7.3.3":
+"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.2", "@babel/types@^7.26.0", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.28.5", "@babel/types@^7.3.3":
version "7.28.5"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b"
integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==
@@ -808,62 +778,56 @@
"@babel/helper-string-parser" "^7.27.1"
"@babel/helper-validator-identifier" "^7.28.5"
-"@expo/bunyan@^4.0.0":
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/@expo/bunyan/-/bunyan-4.0.1.tgz#ab9e17e36c71c704a0ce72168378a487368da736"
- integrity sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg==
+"@egjs/hammerjs@^2.0.17":
+ version "2.0.17"
+ resolved "https://registry.yarnpkg.com/@egjs/hammerjs/-/hammerjs-2.0.17.tgz#5dc02af75a6a06e4c2db0202cae38c9263895124"
+ integrity sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==
dependencies:
- uuid "^8.0.0"
+ "@types/hammerjs" "^2.0.36"
-"@expo/cli@0.22.27":
- version "0.22.27"
- resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.22.27.tgz#22b64e1b02908390ab397693699986a5c70f72a2"
- integrity sha512-MZ3s68+OFQZWljAiCdwL+dL+xZudpkmhq0A2Qb4+p6MNp386WJyAYineXtiLJVww/8ohIfUxOL10vnaPdDVl4w==
+"@expo/cli@54.0.20":
+ version "54.0.20"
+ resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-54.0.20.tgz#17d6308eab4e54bcd9e618438458af30838f0b98"
+ integrity sha512-cwsXmhftvS0p9NNYOhXGnicBAZl9puWwRt19Qq5eQ6njLnaj8WvcR+kDZyADtgZxBsZiyVlrKXvnjt43HXywQA==
dependencies:
"@0no-co/graphql.web" "^1.0.8"
- "@babel/runtime" "^7.20.0"
"@expo/code-signing-certificates" "^0.0.5"
- "@expo/config" "~10.0.11"
- "@expo/config-plugins" "~9.0.17"
- "@expo/devcert" "^1.1.2"
- "@expo/env" "~0.4.2"
- "@expo/image-utils" "^0.6.5"
- "@expo/json-file" "^9.0.2"
- "@expo/metro-config" "~0.19.12"
- "@expo/osascript" "^2.1.6"
- "@expo/package-manager" "^1.7.2"
- "@expo/plist" "^0.2.2"
- "@expo/prebuild-config" "~8.2.0"
- "@expo/rudder-sdk-node" "^1.1.1"
+ "@expo/config" "~12.0.13"
+ "@expo/config-plugins" "~54.0.4"
+ "@expo/devcert" "^1.2.1"
+ "@expo/env" "~2.0.8"
+ "@expo/image-utils" "^0.8.8"
+ "@expo/json-file" "^10.0.8"
+ "@expo/metro" "~54.2.0"
+ "@expo/metro-config" "~54.0.12"
+ "@expo/osascript" "^2.3.8"
+ "@expo/package-manager" "^1.9.9"
+ "@expo/plist" "^0.4.8"
+ "@expo/prebuild-config" "^54.0.8"
+ "@expo/schema-utils" "^0.1.8"
"@expo/spawn-async" "^1.7.2"
"@expo/ws-tunnel" "^1.0.1"
"@expo/xcpretty" "^4.3.0"
- "@react-native/dev-middleware" "0.76.9"
+ "@react-native/dev-middleware" "0.81.5"
"@urql/core" "^5.0.6"
"@urql/exchange-retry" "^1.3.0"
accepts "^1.3.8"
arg "^5.0.2"
better-opn "~3.0.2"
- bplist-creator "0.0.7"
+ bplist-creator "0.1.0"
bplist-parser "^0.3.1"
- cacache "^18.0.2"
chalk "^4.0.0"
ci-info "^3.3.0"
compression "^1.7.4"
connect "^3.7.0"
debug "^4.3.4"
env-editor "^0.4.1"
- fast-glob "^3.3.2"
- form-data "^3.0.1"
+ expo-server "^1.0.5"
freeport-async "^2.0.0"
- fs-extra "~8.1.0"
- getenv "^1.0.0"
- glob "^10.4.2"
- internal-ip "^4.3.0"
- is-docker "^2.0.0"
- is-wsl "^2.1.1"
- lodash.debounce "^4.0.8"
- minimatch "^3.0.4"
+ getenv "^2.0.0"
+ glob "^13.0.0"
+ lan-network "^0.1.6"
+ minimatch "^9.0.0"
node-forge "^1.3.1"
npm-package-arg "^11.0.0"
ora "^3.4.0"
@@ -884,12 +848,9 @@
source-map-support "~0.5.21"
stacktrace-parser "^0.1.10"
structured-headers "^0.4.1"
- tar "^6.2.1"
- temp-dir "^2.0.0"
- tempy "^0.7.1"
+ tar "^7.5.2"
terminal-link "^2.1.1"
undici "^6.18.2"
- unique-string "~2.0.0"
wrap-ansi "^7.0.0"
ws "^8.12.1"
@@ -901,19 +862,19 @@
node-forge "^1.2.1"
nullthrows "^1.1.1"
-"@expo/config-plugins@~9.0.17":
- version "9.0.17"
- resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-9.0.17.tgz#c997072209129b9f9616efa3533314b889cfd788"
- integrity sha512-m24F1COquwOm7PBl5wRbkT9P9DviCXe0D7S7nQsolfbhdCWuvMkfXeoWmgjtdhy7sDlOyIgBrAdnB6MfsWKqIg==
+"@expo/config-plugins@~54.0.4":
+ version "54.0.4"
+ resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-54.0.4.tgz#b31cb16f6651342abcdafba600118245ecd9fb00"
+ integrity sha512-g2yXGICdoOw5i3LkQSDxl2Q5AlQCrG7oniu0pCPPO+UxGb7He4AFqSvPSy8HpRUj55io17hT62FTjYRD+d6j3Q==
dependencies:
- "@expo/config-types" "^52.0.5"
- "@expo/json-file" "~9.0.2"
- "@expo/plist" "^0.2.2"
+ "@expo/config-types" "^54.0.10"
+ "@expo/json-file" "~10.0.8"
+ "@expo/plist" "^0.4.8"
"@expo/sdk-runtime-versions" "^1.0.0"
chalk "^4.1.2"
debug "^4.3.5"
- getenv "^1.0.0"
- glob "^10.4.2"
+ getenv "^2.0.0"
+ glob "^13.0.0"
resolve-from "^5.0.0"
semver "^7.5.4"
slash "^3.0.0"
@@ -921,31 +882,31 @@
xcode "^3.0.1"
xml2js "0.6.0"
-"@expo/config-types@^52.0.5":
- version "52.0.5"
- resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-52.0.5.tgz#e10a226990dd903a4e3db5992ffb3015adf13f38"
- integrity sha512-AMDeuDLHXXqd8W+0zSjIt7f37vUd/BP8p43k68NHpyAvQO+z8mbQZm3cNQVAMySeayK2XoPigAFB1JF2NFajaA==
+"@expo/config-types@^54.0.10":
+ version "54.0.10"
+ resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-54.0.10.tgz#688f4338255d2fdea970f44e2dfd8e8d37dec292"
+ integrity sha512-/J16SC2an1LdtCZ67xhSkGXpALYUVUNyZws7v+PVsFZxClYehDSoKLqyRaGkpHlYrCc08bS0RF5E0JV6g50psA==
-"@expo/config@~10.0.11":
- version "10.0.11"
- resolved "https://registry.yarnpkg.com/@expo/config/-/config-10.0.11.tgz#5371ccb3b08ece4c174d5d7009d61e928e6925b0"
- integrity sha512-nociJ4zr/NmbVfMNe9j/+zRlt7wz/siISu7PjdWE4WE+elEGxWWxsGzltdJG0llzrM+khx8qUiFK5aiVcdMBww==
+"@expo/config@~12.0.12", "@expo/config@~12.0.13":
+ version "12.0.13"
+ resolved "https://registry.yarnpkg.com/@expo/config/-/config-12.0.13.tgz#8e696e6121c3c364e1dd527f595cf0a1d9386828"
+ integrity sha512-Cu52arBa4vSaupIWsF0h7F/Cg//N374nYb7HAxV0I4KceKA7x2UXpYaHOL7EEYYvp7tZdThBjvGpVmr8ScIvaQ==
dependencies:
"@babel/code-frame" "~7.10.4"
- "@expo/config-plugins" "~9.0.17"
- "@expo/config-types" "^52.0.5"
- "@expo/json-file" "^9.0.2"
+ "@expo/config-plugins" "~54.0.4"
+ "@expo/config-types" "^54.0.10"
+ "@expo/json-file" "^10.0.8"
deepmerge "^4.3.1"
- getenv "^1.0.0"
- glob "^10.4.2"
+ getenv "^2.0.0"
+ glob "^13.0.0"
require-from-string "^2.0.2"
resolve-from "^5.0.0"
resolve-workspace-root "^2.0.0"
semver "^7.6.0"
slugify "^1.3.4"
- sucrase "3.35.0"
+ sucrase "~3.35.1"
-"@expo/devcert@^1.1.2":
+"@expo/devcert@^1.2.1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@expo/devcert/-/devcert-1.2.1.tgz#1a687985bea1670866e54d5ba7c0ced963c354f4"
integrity sha512-qC4eaxmKMTmJC2ahwyui6ud8f3W60Ss7pMkpBq40Hu3zyiAaugPXnZ24145U7K36qO9UHdZUVxsCvIpz2RYYCA==
@@ -953,50 +914,58 @@
"@expo/sudo-prompt" "^9.3.1"
debug "^3.1.0"
-"@expo/env@~0.4.2":
- version "0.4.2"
- resolved "https://registry.yarnpkg.com/@expo/env/-/env-0.4.2.tgz#911709933e6fc1b45b3d2efdb10ca2c52fac7e91"
- integrity sha512-TgbCgvSk0Kq0e2fLoqHwEBL4M0ztFjnBEz0YCDm5boc1nvkV1VMuIMteVdeBwnTh8Z0oPJTwHCD49vhMEt1I6A==
+"@expo/devtools@0.1.8":
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/@expo/devtools/-/devtools-0.1.8.tgz#bc5b297698f78b3b67037f04593a31e688330a7a"
+ integrity sha512-SVLxbuanDjJPgc0sy3EfXUMLb/tXzp6XIHkhtPVmTWJAp+FOr6+5SeiCfJrCzZFet0Ifyke2vX3sFcKwEvCXwQ==
+ dependencies:
+ chalk "^4.1.2"
+
+"@expo/env@~2.0.8":
+ version "2.0.8"
+ resolved "https://registry.yarnpkg.com/@expo/env/-/env-2.0.8.tgz#2aea906eed3d297b2e19608dc1a800fba0a3fe03"
+ integrity sha512-5VQD6GT8HIMRaSaB5JFtOXuvfDVU80YtZIuUT/GDhUF782usIXY13Tn3IdDz1Tm/lqA9qnRZQ1BF4t7LlvdJPA==
dependencies:
chalk "^4.0.0"
debug "^4.3.4"
dotenv "~16.4.5"
dotenv-expand "~11.0.6"
- getenv "^1.0.0"
+ getenv "^2.0.0"
-"@expo/fingerprint@0.11.11":
- version "0.11.11"
- resolved "https://registry.yarnpkg.com/@expo/fingerprint/-/fingerprint-0.11.11.tgz#ae644d4ff7dc26d1ffecce376a5209d001c49331"
- integrity sha512-gNyn1KnAOpEa8gSNsYqXMTcq0fSwqU/vit6fP5863vLSKxHm/dNt/gm/uZJxrRZxKq71KUJWF6I7d3z8qIfq5g==
+"@expo/fingerprint@0.15.4":
+ version "0.15.4"
+ resolved "https://registry.yarnpkg.com/@expo/fingerprint/-/fingerprint-0.15.4.tgz#578bd1e1179a13313f7de682ebaaacb703b2b7ac"
+ integrity sha512-eYlxcrGdR2/j2M6pEDXo9zU9KXXF1vhP+V+Tl+lyY+bU8lnzrN6c637mz6Ye3em2ANy8hhUR03Raf8VsT9Ogng==
dependencies:
"@expo/spawn-async" "^1.7.2"
arg "^5.0.2"
chalk "^4.1.2"
debug "^4.3.4"
- find-up "^5.0.0"
- getenv "^1.0.0"
- minimatch "^3.0.4"
+ getenv "^2.0.0"
+ glob "^13.0.0"
+ ignore "^5.3.1"
+ minimatch "^9.0.0"
p-limit "^3.1.0"
resolve-from "^5.0.0"
semver "^7.6.0"
-"@expo/image-utils@^0.6.5":
- version "0.6.5"
- resolved "https://registry.yarnpkg.com/@expo/image-utils/-/image-utils-0.6.5.tgz#af25e9dd79d1168bebea91dc7f1e6f3efd28643c"
- integrity sha512-RsS/1CwJYzccvlprYktD42KjyfWZECH6PPIEowvoSmXfGLfdViwcUEI4RvBfKX5Jli6P67H+6YmHvPTbGOboew==
+"@expo/image-utils@^0.8.8":
+ version "0.8.8"
+ resolved "https://registry.yarnpkg.com/@expo/image-utils/-/image-utils-0.8.8.tgz#db5d460fd0c7101b10e9d027ffbe42f9cf115248"
+ integrity sha512-HHHaG4J4nKjTtVa1GG9PCh763xlETScfEyNxxOvfTRr8IKPJckjTyqSLEtdJoFNJ1vqiABEjW7tqGhqGibZLeA==
dependencies:
"@expo/spawn-async" "^1.7.2"
chalk "^4.0.0"
- fs-extra "9.0.0"
- getenv "^1.0.0"
+ getenv "^2.0.0"
jimp-compact "0.16.1"
parse-png "^2.1.0"
resolve-from "^5.0.0"
+ resolve-global "^1.0.0"
semver "^7.6.0"
temp-dir "~2.0.0"
unique-string "~2.0.0"
-"@expo/json-file@^10.0.8":
+"@expo/json-file@^10.0.8", "@expo/json-file@~10.0.8":
version "10.0.8"
resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-10.0.8.tgz#05e524d1ecc0011db0a6d66b525ea2f58cfe6d43"
integrity sha512-9LOTh1PgKizD1VXfGQ88LtDH0lRwq9lsTb4aichWTWSWqy3Ugfkhfm3BhzBIkJJfQQ5iJu3m/BoRlEIjoCGcnQ==
@@ -1004,48 +973,64 @@
"@babel/code-frame" "~7.10.4"
json5 "^2.2.3"
-"@expo/json-file@^9.0.2":
- version "9.1.5"
- resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-9.1.5.tgz#7d7b2dc4990dc2c2de69a571191aba984b7fb7ed"
- integrity sha512-prWBhLUlmcQtvN6Y7BpW2k9zXGd3ySa3R6rAguMJkp1z22nunLN64KYTUWfijFlprFoxm9r2VNnGkcbndAlgKA==
- dependencies:
- "@babel/code-frame" "~7.10.4"
- json5 "^2.2.3"
-
-"@expo/json-file@~9.0.2":
- version "9.0.2"
- resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-9.0.2.tgz#ec508c2ad17490e0c664c9d7e2ae0ce65915d3ed"
- integrity sha512-yAznIUrybOIWp3Uax7yRflB0xsEpvIwIEqIjao9SGi2Gaa+N0OamWfe0fnXBSWF+2zzF4VvqwT4W5zwelchfgw==
- dependencies:
- "@babel/code-frame" "~7.10.4"
- json5 "^2.2.3"
- write-file-atomic "^2.3.0"
-
-"@expo/metro-config@0.19.12", "@expo/metro-config@~0.19.12":
- version "0.19.12"
- resolved "https://registry.yarnpkg.com/@expo/metro-config/-/metro-config-0.19.12.tgz#ce6d8dec9aab790874cd0299a64968f74267db1c"
- integrity sha512-fhT3x1ikQWHpZgw7VrEghBdscFPz1laRYa8WcVRB18nTTqorF6S8qPYslkJu1faEziHZS7c2uyDzTYnrg/CKbg==
+"@expo/metro-config@54.0.12", "@expo/metro-config@~54.0.12":
+ version "54.0.12"
+ resolved "https://registry.yarnpkg.com/@expo/metro-config/-/metro-config-54.0.12.tgz#f37248296dc4ef3c01c47ab46f94732ebac8316b"
+ integrity sha512-Xhv1z/ak/cuJWeLxlnWr2u22q2AM/klASbjpP5eE34y91lGWa2NUwrFWoS830MhJ6kuAqtGdoQhwyPa3TES7sA==
dependencies:
+ "@babel/code-frame" "^7.20.0"
"@babel/core" "^7.20.0"
"@babel/generator" "^7.20.5"
- "@babel/parser" "^7.20.0"
- "@babel/types" "^7.20.0"
- "@expo/config" "~10.0.11"
- "@expo/env" "~0.4.2"
- "@expo/json-file" "~9.0.2"
+ "@expo/config" "~12.0.13"
+ "@expo/env" "~2.0.8"
+ "@expo/json-file" "~10.0.8"
+ "@expo/metro" "~54.2.0"
"@expo/spawn-async" "^1.7.2"
+ browserslist "^4.25.0"
chalk "^4.1.0"
debug "^4.3.2"
- fs-extra "^9.1.0"
- getenv "^1.0.0"
- glob "^10.4.2"
+ dotenv "~16.4.5"
+ dotenv-expand "~11.0.6"
+ getenv "^2.0.0"
+ glob "^13.0.0"
+ hermes-parser "^0.29.1"
jsc-safe-url "^0.2.4"
- lightningcss "~1.27.0"
- minimatch "^3.0.4"
+ lightningcss "^1.30.1"
+ minimatch "^9.0.0"
postcss "~8.4.32"
resolve-from "^5.0.0"
-"@expo/osascript@^2.1.6":
+"@expo/metro-runtime@~6.1.2":
+ version "6.1.2"
+ resolved "https://registry.yarnpkg.com/@expo/metro-runtime/-/metro-runtime-6.1.2.tgz#5a4ff117df6115f9c9d4dcc561065e16d69c078b"
+ integrity sha512-nvM+Qv45QH7pmYvP8JB1G8JpScrWND3KrMA6ZKe62cwwNiX/BjHU28Ear0v/4bQWXlOY0mv6B8CDIm8JxXde9g==
+ dependencies:
+ anser "^1.4.9"
+ pretty-format "^29.7.0"
+ stacktrace-parser "^0.1.10"
+ whatwg-fetch "^3.0.0"
+
+"@expo/metro@~54.2.0":
+ version "54.2.0"
+ resolved "https://registry.yarnpkg.com/@expo/metro/-/metro-54.2.0.tgz#6ecf4a77ae7553b73daca4206854728de76c854d"
+ integrity sha512-h68TNZPGsk6swMmLm9nRSnE2UXm48rWwgcbtAHVMikXvbxdS41NDHHeqg1rcQ9AbznDRp6SQVC2MVpDnsRKU1w==
+ dependencies:
+ metro "0.83.3"
+ metro-babel-transformer "0.83.3"
+ metro-cache "0.83.3"
+ metro-cache-key "0.83.3"
+ metro-config "0.83.3"
+ metro-core "0.83.3"
+ metro-file-map "0.83.3"
+ metro-minify-terser "0.83.3"
+ metro-resolver "0.83.3"
+ metro-runtime "0.83.3"
+ metro-source-map "0.83.3"
+ metro-symbolicate "0.83.3"
+ metro-transform-plugins "0.83.3"
+ metro-transform-worker "0.83.3"
+
+"@expo/osascript@^2.3.8":
version "2.3.8"
resolved "https://registry.yarnpkg.com/@expo/osascript/-/osascript-2.3.8.tgz#6b376f09650e6476991f707356be54b5ea53d89e"
integrity sha512-/TuOZvSG7Nn0I8c+FcEaoHeBO07yu6vwDgk7rZVvAXoeAK5rkA09jRyjYsZo+0tMEFaToBeywA6pj50Mb3ny9w==
@@ -1053,7 +1038,7 @@
"@expo/spawn-async" "^1.7.2"
exec-async "^2.2.0"
-"@expo/package-manager@^1.7.2":
+"@expo/package-manager@^1.9.9":
version "1.9.9"
resolved "https://registry.yarnpkg.com/@expo/package-manager/-/package-manager-1.9.9.tgz#dd030d2bccebd095e02bfb6976852afaddcd122a"
integrity sha512-Nv5THOwXzPprMJwbnXU01iXSrCp3vJqly9M4EJ2GkKko9Ifer2ucpg7x6OUsE09/lw+npaoUnHMXwkw7gcKxlg==
@@ -1065,44 +1050,35 @@
ora "^3.4.0"
resolve-workspace-root "^2.0.0"
-"@expo/plist@^0.2.2":
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/@expo/plist/-/plist-0.2.2.tgz#2563b71b4aa78dc9dbc34cc3d2e1011e994bc9cd"
- integrity sha512-ZZGvTO6vEWq02UAPs3LIdja+HRO18+LRI5QuDl6Hs3Ps7KX7xU6Y6kjahWKY37Rx2YjNpX07dGpBFzzC+vKa2g==
+"@expo/plist@^0.4.8":
+ version "0.4.8"
+ resolved "https://registry.yarnpkg.com/@expo/plist/-/plist-0.4.8.tgz#e014511a4a5008cf2b832b91caa8e9f2704127cc"
+ integrity sha512-pfNtErGGzzRwHP+5+RqswzPDKkZrx+Cli0mzjQaus1ZWFsog5ibL+nVT3NcporW51o8ggnt7x813vtRbPiyOrQ==
dependencies:
- "@xmldom/xmldom" "~0.7.7"
+ "@xmldom/xmldom" "^0.8.8"
base64-js "^1.2.3"
- xmlbuilder "^14.0.0"
-
-"@expo/prebuild-config@~8.2.0":
- version "8.2.0"
- resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-8.2.0.tgz#eeca7c58000bacf4e3e60c6953261f78405eedbc"
- integrity sha512-CxiPpd980s0jyxi7eyN3i/7YKu3XL+8qPjBZUCYtc0+axpGweqIkq2CslyLSKHyqVyH/zlPkbVgWdyiYavFS5Q==
- dependencies:
- "@expo/config" "~10.0.11"
- "@expo/config-plugins" "~9.0.17"
- "@expo/config-types" "^52.0.5"
- "@expo/image-utils" "^0.6.5"
- "@expo/json-file" "^9.0.2"
- "@react-native/normalize-colors" "0.76.9"
+ xmlbuilder "^15.1.1"
+
+"@expo/prebuild-config@^54.0.8":
+ version "54.0.8"
+ resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-54.0.8.tgz#509410345489cc52d1e6ece52742384efe7ad7c6"
+ integrity sha512-EA7N4dloty2t5Rde+HP0IEE+nkAQiu4A/+QGZGT9mFnZ5KKjPPkqSyYcRvP5bhQE10D+tvz6X0ngZpulbMdbsg==
+ dependencies:
+ "@expo/config" "~12.0.13"
+ "@expo/config-plugins" "~54.0.4"
+ "@expo/config-types" "^54.0.10"
+ "@expo/image-utils" "^0.8.8"
+ "@expo/json-file" "^10.0.8"
+ "@react-native/normalize-colors" "0.81.5"
debug "^4.3.1"
- fs-extra "^9.0.0"
resolve-from "^5.0.0"
semver "^7.6.0"
xml2js "0.6.0"
-"@expo/rudder-sdk-node@^1.1.1":
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz#6aa575f346833eb6290282118766d4919c808c6a"
- integrity sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==
- dependencies:
- "@expo/bunyan" "^4.0.0"
- "@segment/loosely-validate-event" "^2.0.0"
- fetch-retry "^4.1.1"
- md5 "^2.2.1"
- node-fetch "^2.6.1"
- remove-trailing-slash "^0.1.0"
- uuid "^8.3.2"
+"@expo/schema-utils@^0.1.8":
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/@expo/schema-utils/-/schema-utils-0.1.8.tgz#8b9543d77fc4ac4954196e3fa00f8fcedd71426a"
+ integrity sha512-9I6ZqvnAvKKDiO+ZF8BpQQFYWXOJvTAL5L/227RUbWG1OVZDInFifzCBiqAZ3b67NRfeAgpgvbA7rejsqhY62A==
"@expo/sdk-runtime-versions@^1.0.0":
version "1.0.0"
@@ -1121,12 +1097,10 @@
resolved "https://registry.yarnpkg.com/@expo/sudo-prompt/-/sudo-prompt-9.3.2.tgz#0fd2813402a42988e49145cab220e25bea74b308"
integrity sha512-HHQigo3rQWKMDzYDLkubN5WQOYXJJE2eNqIQC2axC2iO3mHdwnIR7FgZVvHWtBwAdzBgAP0ECp8KqS8TiMKvgw==
-"@expo/vector-icons@~14.0.4":
- version "14.0.4"
- resolved "https://registry.yarnpkg.com/@expo/vector-icons/-/vector-icons-14.0.4.tgz#fa9d4351877312badf91a806598b2f0bab16039a"
- integrity sha512-+yKshcbpDfbV4zoXOgHxCwh7lkE9VVTT5T03OUlBsqfze1PLy6Hi4jp1vSb1GVbY6eskvMIivGVc9SKzIv0oEQ==
- dependencies:
- prop-types "^15.8.1"
+"@expo/vector-icons@^15.0.3":
+ version "15.0.3"
+ resolved "https://registry.yarnpkg.com/@expo/vector-icons/-/vector-icons-15.0.3.tgz#12c38d4e6cc927dd0500e4591ac00672a8909748"
+ integrity sha512-SBUyYKphmlfUBqxSfDdJ3jAdEVSALS2VUPOUyqn48oZmb2TL/O7t7/PQm5v4NQujYEPLPMTLn9KVw6H7twwbTA==
"@expo/ws-tunnel@^1.0.1":
version "1.0.6"
@@ -1143,17 +1117,24 @@
find-up "^5.0.0"
js-yaml "^4.1.0"
-"@isaacs/cliui@^8.0.2":
- version "8.0.2"
- resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
- integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
+"@isaacs/balanced-match@^4.0.1":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz#3081dadbc3460661b751e7591d7faea5df39dd29"
+ integrity sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==
+
+"@isaacs/brace-expansion@^5.0.0":
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz#4b3dabab7d8e75a429414a96bd67bf4c1d13e0f3"
+ integrity sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==
+ dependencies:
+ "@isaacs/balanced-match" "^4.0.1"
+
+"@isaacs/fs-minipass@^4.0.0":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32"
+ integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==
dependencies:
- string-width "^5.1.2"
- string-width-cjs "npm:string-width@^4.2.0"
- strip-ansi "^7.0.1"
- strip-ansi-cjs "npm:strip-ansi@^6.0.1"
- wrap-ansi "^8.1.0"
- wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
+ minipass "^7.0.4"
"@isaacs/ttlcache@^1.4.1":
version "1.4.1"
@@ -1176,7 +1157,7 @@
resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
-"@jest/create-cache-key-function@^29.6.3":
+"@jest/create-cache-key-function@^29.7.0":
version "29.7.0"
resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz#793be38148fab78e65f40ae30c36785f4ad859f0"
integrity sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==
@@ -1287,55 +1268,23 @@
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
-"@nodelib/fs.scandir@2.1.5":
- version "2.1.5"
- resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
- integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
- dependencies:
- "@nodelib/fs.stat" "2.0.5"
- run-parallel "^1.1.9"
-
-"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
- integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
-
-"@nodelib/fs.walk@^1.2.3":
- version "1.2.8"
- resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
- integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
- dependencies:
- "@nodelib/fs.scandir" "2.1.5"
- fastq "^1.6.0"
-
-"@npmcli/fs@^3.1.0":
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.1.tgz#59cdaa5adca95d135fc00f2bb53f5771575ce726"
- integrity sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==
- dependencies:
- semver "^7.3.5"
-
-"@pkgjs/parseargs@^0.11.0":
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
- integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
-
-"@react-native/assets-registry@0.76.9":
- version "0.76.9"
- resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.76.9.tgz#ec63d32556c29bfa29e55b5e6e24c9d6e1ebbfac"
- integrity sha512-pN0Ws5xsjWOZ8P37efh0jqHHQmq+oNGKT4AyAoKRpxBDDDmlAmpaYjer9Qz7PpDKF+IUyRjF/+rBsM50a8JcUg==
+"@react-native/assets-registry@0.81.5":
+ version "0.81.5"
+ resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.81.5.tgz#d22c924fa6f6d4a463c5af34ce91f38756c0fa7d"
+ integrity sha512-705B6x/5Kxm1RKRvSv0ADYWm5JOnoiQ1ufW7h8uu2E6G9Of/eE6hP/Ivw3U5jI16ERqZxiKQwk34VJbB0niX9w==
-"@react-native/babel-plugin-codegen@0.76.9":
- version "0.76.9"
- resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.76.9.tgz#56c4bc21d08ea522e7266ffcec7d5a52e9092a0e"
- integrity sha512-vxL/vtDEIYHfWKm5oTaEmwcnNGsua/i9OjIxBDBFiJDu5i5RU3bpmDiXQm/bJxrJNPRp5lW0I0kpGihVhnMAIQ==
+"@react-native/babel-plugin-codegen@0.81.5":
+ version "0.81.5"
+ resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.81.5.tgz#328d03f42c32b5a8cc2dee1aa84a7c48dddc5f18"
+ integrity sha512-oF71cIH6je3fSLi6VPjjC3Sgyyn57JLHXs+mHWc9MoCiJJcM4nqsS5J38zv1XQ8d3zOW2JtHro+LF0tagj2bfQ==
dependencies:
- "@react-native/codegen" "0.76.9"
+ "@babel/traverse" "^7.25.3"
+ "@react-native/codegen" "0.81.5"
-"@react-native/babel-preset@0.76.9":
- version "0.76.9"
- resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.76.9.tgz#08bc4198c67a0d07905dcc48cb4105b8d0f6ecd9"
- integrity sha512-TbSeCplCM6WhL3hR2MjC/E1a9cRnMLz7i767T7mP90oWkklEjyPxWl+0GGoVGnJ8FC/jLUupg/HvREKjjif6lw==
+"@react-native/babel-preset@0.81.5":
+ version "0.81.5"
+ resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.81.5.tgz#e8b7969d21f87ef4e41e603248e8a70c44b4a5bb"
+ integrity sha512-UoI/x/5tCmi+pZ3c1+Ypr1DaRMDLI3y+Q70pVLLVgrnC3DHsHRIbHcCHIeG/IJvoeFqFM2sTdhSOLJrf8lOPrA==
dependencies:
"@babel/core" "^7.25.2"
"@babel/plugin-proposal-export-default-from" "^7.24.7"
@@ -1378,111 +1327,87 @@
"@babel/plugin-transform-typescript" "^7.25.2"
"@babel/plugin-transform-unicode-regex" "^7.24.7"
"@babel/template" "^7.25.0"
- "@react-native/babel-plugin-codegen" "0.76.9"
- babel-plugin-syntax-hermes-parser "^0.25.1"
+ "@react-native/babel-plugin-codegen" "0.81.5"
+ babel-plugin-syntax-hermes-parser "0.29.1"
babel-plugin-transform-flow-enums "^0.0.2"
react-refresh "^0.14.0"
-"@react-native/codegen@0.76.9":
- version "0.76.9"
- resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.76.9.tgz#b386fae4d893e5e7ffba19833c7d31a330a2f559"
- integrity sha512-AzlCHMTKrAVC2709V4ZGtBXmGVtWTpWm3Ruv5vXcd3/anH4mGucfJ4rjbWKdaYQJMpXa3ytGomQrsIsT/s8kgA==
+"@react-native/codegen@0.81.5":
+ version "0.81.5"
+ resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.81.5.tgz#d4dec668c94b9d58a5c2dbdbf026db331e1b6b27"
+ integrity sha512-a2TDA03Up8lpSa9sh5VRGCQDXgCTOyDOFH+aqyinxp1HChG8uk89/G+nkJ9FPd0rqgi25eCTR16TWdS3b+fA6g==
dependencies:
+ "@babel/core" "^7.25.2"
"@babel/parser" "^7.25.3"
glob "^7.1.1"
- hermes-parser "0.23.1"
+ hermes-parser "0.29.1"
invariant "^2.2.4"
- jscodeshift "^0.14.0"
- mkdirp "^0.5.1"
nullthrows "^1.1.1"
yargs "^17.6.2"
-"@react-native/community-cli-plugin@0.76.9":
- version "0.76.9"
- resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.76.9.tgz#74f9f2dfe11aa5515522e006808b9aa2fd60afe3"
- integrity sha512-08jx8ixCjjd4jNQwNpP8yqrjrDctN2qvPPlf6ebz1OJQk8e1sbUl3wVn1zhhMvWrYcaraDnatPb5uCPq+dn3NQ==
+"@react-native/community-cli-plugin@0.81.5":
+ version "0.81.5"
+ resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.81.5.tgz#617789cda4da419d03dda00e2a78c36188b4391e"
+ integrity sha512-yWRlmEOtcyvSZ4+OvqPabt+NS36vg0K/WADTQLhrYrm9qdZSuXmq8PmdJWz/68wAqKQ+4KTILiq2kjRQwnyhQw==
dependencies:
- "@react-native/dev-middleware" "0.76.9"
- "@react-native/metro-babel-transformer" "0.76.9"
- chalk "^4.0.0"
- execa "^5.1.1"
+ "@react-native/dev-middleware" "0.81.5"
+ debug "^4.4.0"
invariant "^2.2.4"
- metro "^0.81.0"
- metro-config "^0.81.0"
- metro-core "^0.81.0"
- node-fetch "^2.2.0"
- readline "^1.3.0"
+ metro "^0.83.1"
+ metro-config "^0.83.1"
+ metro-core "^0.83.1"
semver "^7.1.3"
-"@react-native/debugger-frontend@0.76.9":
- version "0.76.9"
- resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.76.9.tgz#b329b8e5dccda282a11a107a79fa65268b2e029c"
- integrity sha512-0Ru72Bm066xmxFuOXhhvrryxvb57uI79yDSFf+hxRpktkC98NMuRenlJhslMrbJ6WjCu1vOe/9UjWNYyxXTRTA==
+"@react-native/debugger-frontend@0.81.5":
+ version "0.81.5"
+ resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.81.5.tgz#82ece0181e9a7a3dcbdfa86cf9decd654e13f81f"
+ integrity sha512-bnd9FSdWKx2ncklOetCgrlwqSGhMHP2zOxObJbOWXoj7GHEmih4MKarBo5/a8gX8EfA1EwRATdfNBQ81DY+h+w==
-"@react-native/dev-middleware@0.76.9":
- version "0.76.9"
- resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.76.9.tgz#2fdb716707d90b4d085cabb61cc466fabdd2500f"
- integrity sha512-xkd3C3dRcmZLjFTEAOvC14q3apMLouIvJViCZY/p1EfCMrNND31dgE1dYrLTiI045WAWMt5bD15i6f7dE2/QWA==
+"@react-native/dev-middleware@0.81.5":
+ version "0.81.5"
+ resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.81.5.tgz#81e8ac545d7736ef6ebb2e59fdbaebc5cf9aedec"
+ integrity sha512-WfPfZzboYgo/TUtysuD5xyANzzfka8Ebni6RIb2wDxhb56ERi7qDrE4xGhtPsjCL4pQBXSVxyIlCy0d8I6EgGA==
dependencies:
"@isaacs/ttlcache" "^1.4.1"
- "@react-native/debugger-frontend" "0.76.9"
+ "@react-native/debugger-frontend" "0.81.5"
chrome-launcher "^0.15.2"
chromium-edge-launcher "^0.2.0"
connect "^3.6.5"
- debug "^2.2.0"
+ debug "^4.4.0"
invariant "^2.2.4"
nullthrows "^1.1.1"
open "^7.0.3"
- selfsigned "^2.4.1"
- serve-static "^1.13.1"
+ serve-static "^1.16.2"
ws "^6.2.3"
-"@react-native/gradle-plugin@0.76.9":
- version "0.76.9"
- resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.76.9.tgz#b77ae6614c336a46d91ea61b8967d26848759eb1"
- integrity sha512-uGzp3dL4GfNDz+jOb8Nik1Vrfq1LHm0zESizrGhHACFiFlUSflVAnWuUAjlZlz5XfLhzGVvunG4Vdrpw8CD2ng==
-
-"@react-native/js-polyfills@0.76.9":
- version "0.76.9"
- resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.76.9.tgz#91be7bc48926bc31ebb7e64fc98c86ccb616b1fb"
- integrity sha512-s6z6m8cK4SMjIX1hm8LT187aQ6//ujLrjzDBogqDCYXRbfjbAYovw5as/v2a2rhUIyJbS3UjokZm3W0H+Oh/RQ==
+"@react-native/gradle-plugin@0.81.5":
+ version "0.81.5"
+ resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.81.5.tgz#a58830f38789f6254b64449a17fe57455b589d00"
+ integrity sha512-hORRlNBj+ReNMLo9jme3yQ6JQf4GZpVEBLxmTXGGlIL78MAezDZr5/uq9dwElSbcGmLEgeiax6e174Fie6qPLg==
-"@react-native/metro-babel-transformer@0.76.9":
- version "0.76.9"
- resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.76.9.tgz#898fcb39368b1a5b1e254ab51eb7840cc496da77"
- integrity sha512-HGq11347UHNiO/NvVbAO35hQCmH8YZRs7in7nVq7SL99pnpZK4WXwLdAXmSuwz5uYqOuwnKYDlpadz8fkE94Mg==
- dependencies:
- "@babel/core" "^7.25.2"
- "@react-native/babel-preset" "0.76.9"
- hermes-parser "0.23.1"
- nullthrows "^1.1.1"
+"@react-native/js-polyfills@0.81.5":
+ version "0.81.5"
+ resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.81.5.tgz#2ca68188c8fff9b951f507b1dec7efe928848274"
+ integrity sha512-fB7M1CMOCIUudTRuj7kzxIBTVw2KXnsgbQ6+4cbqSxo8NmRRhA0Ul4ZUzZj3rFd3VznTL4Brmocv1oiN0bWZ8w==
-"@react-native/normalize-colors@0.76.9":
- version "0.76.9"
- resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.76.9.tgz#1c45ce49871ccea7d6fa9332cb14724adf326d6a"
- integrity sha512-TUdMG2JGk72M9d8DYbubdOlrzTYjw+YMe/xOnLU4viDgWRHsCbtRS9x0IAxRjs3amj/7zmK3Atm8jUPvdAc8qw==
+"@react-native/normalize-colors@0.81.5":
+ version "0.81.5"
+ resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.81.5.tgz#1ca6cb6772bb7324df2b11aab35227eacd6bdfe7"
+ integrity sha512-0HuJ8YtqlTVRXGZuGeBejLE04wSQsibpTI+RGOyVqxZvgtlLLC/Ssw0UmbHhT4lYMp2fhdtvKZSs5emWB1zR/g==
"@react-native/normalize-colors@^0.74.1":
version "0.74.89"
resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.74.89.tgz#b8ac17d1bbccd3ef9a1f921665d04d42cff85976"
integrity sha512-qoMMXddVKVhZ8PA1AbUCk83trpd6N+1nF2A6k1i6LsQObyS92fELuk8kU/lQs6M7BsMHwqyLCpQJ1uFgNvIQXg==
-"@react-native/virtualized-lists@0.76.9":
- version "0.76.9"
- resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.76.9.tgz#23b94fe2525d6b3b974604a14ee7810384420dcd"
- integrity sha512-2neUfZKuqMK2LzfS8NyOWOyWUJOWgDym5fUph6fN9qF+LNPjAvnc4Zr9+o+59qjNu/yXwQgVMWNU4+8WJuPVWw==
+"@react-native/virtualized-lists@0.81.5":
+ version "0.81.5"
+ resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.81.5.tgz#24123fded16992d7e46ecc4ccd473be939ea8c1b"
+ integrity sha512-UVXgV/db25OPIvwZySeToXD/9sKKhOdkcWmmf4Jh8iBZuyfML+/5CasaZ1E7Lqg6g3uqVQq75NqIwkYmORJMPw==
dependencies:
invariant "^2.2.4"
nullthrows "^1.1.1"
-"@segment/loosely-validate-event@^2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz#87dfc979e5b4e7b82c5f1d8b722dfd5d77644681"
- integrity sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==
- dependencies:
- component-type "^1.2.1"
- join-component "^1.1.0"
-
"@sinclair/typebox@^0.27.8":
version "0.27.8"
resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
@@ -1542,6 +1467,11 @@
dependencies:
"@types/node" "*"
+"@types/hammerjs@^2.0.36":
+ version "2.0.46"
+ resolved "https://registry.yarnpkg.com/@types/hammerjs/-/hammerjs-2.0.46.tgz#381daaca1360ff8a7c8dff63f32e69745b9fb1e1"
+ integrity sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==
+
"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
version "2.0.6"
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7"
@@ -1561,13 +1491,6 @@
dependencies:
"@types/istanbul-lib-report" "*"
-"@types/node-forge@^1.3.0":
- version "1.3.14"
- resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.14.tgz#006c2616ccd65550560c2757d8472eb6d3ecea0b"
- integrity sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==
- dependencies:
- "@types/node" "*"
-
"@types/node@*":
version "25.0.3"
resolved "https://registry.yarnpkg.com/@types/node/-/node-25.0.3.tgz#79b9ac8318f373fbfaaf6e2784893efa9701f269"
@@ -1592,6 +1515,11 @@
dependencies:
"@types/yargs-parser" "*"
+"@ungap/structured-clone@^1.3.0":
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8"
+ integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==
+
"@urql/core@^5.0.6", "@urql/core@^5.1.2":
version "5.2.0"
resolved "https://registry.yarnpkg.com/@urql/core/-/core-5.2.0.tgz#77ee41e192e261fea30c2ca6c2f340410b45d214"
@@ -1613,11 +1541,6 @@
resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.11.tgz#b79de2d67389734c57c52595f7a7305e30c2d608"
integrity sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==
-"@xmldom/xmldom@~0.7.7":
- version "0.7.13"
- resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.7.13.tgz#ff34942667a4e19a9f4a0996a76814daac364cf3"
- integrity sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==
-
abort-controller@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
@@ -1638,13 +1561,10 @@ acorn@^8.15.0:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816"
integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==
-aggregate-error@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
- integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
- dependencies:
- clean-stack "^2.0.0"
- indent-string "^4.0.0"
+agent-base@^7.1.2:
+ version "7.1.4"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8"
+ integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==
anser@^1.4.9:
version "1.4.10"
@@ -1668,11 +1588,6 @@ ansi-regex@^5.0.0, ansi-regex@^5.0.1:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
-ansi-regex@^6.0.1:
- version "6.2.2"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1"
- integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==
-
ansi-styles@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
@@ -1692,11 +1607,6 @@ ansi-styles@^5.0.0:
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
-ansi-styles@^6.1.0:
- version "6.2.3"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041"
- integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==
-
any-promise@^1.0.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
@@ -1727,43 +1637,16 @@ argparse@^2.0.1:
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
-array-union@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
- integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
-
asap@~2.0.3, asap@~2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==
-ast-types@0.15.2:
- version "0.15.2"
- resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.15.2.tgz#39ae4809393c4b16df751ee563411423e85fb49d"
- integrity sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==
- dependencies:
- tslib "^2.0.1"
-
async-limiter@~1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
-asynckit@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
- integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
-
-at-least-node@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
- integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
-
-babel-core@^7.0.0-bridge.0:
- version "7.0.0-bridge.0"
- resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece"
- integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==
-
babel-jest@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5"
@@ -1833,24 +1716,24 @@ babel-plugin-polyfill-regenerator@^0.6.5:
dependencies:
"@babel/helper-define-polyfill-provider" "^0.6.5"
-babel-plugin-react-native-web@~0.19.13:
- version "0.19.13"
- resolved "https://registry.yarnpkg.com/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.19.13.tgz#bf919bd6f18c4689dd1a528a82bda507363b953d"
- integrity sha512-4hHoto6xaN23LCyZgL9LJZc3olmAxd7b6jDzlZnKXAh4rRAbZRKNBJoOOdp46OBqgy+K0t0guTj5/mhA8inymQ==
-
-babel-plugin-syntax-hermes-parser@^0.23.1:
- version "0.23.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.23.1.tgz#470e9d1d30ad670d4c8a37138e22ae39c843d1ff"
- integrity sha512-uNLD0tk2tLUjGFdmCk+u/3FEw2o+BAwW4g+z2QVlxJrzZYOOPADroEcNtTPt5lNiScctaUmnsTkVEnOwZUOLhA==
+babel-plugin-react-compiler@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-react-compiler/-/babel-plugin-react-compiler-1.0.0.tgz#bdf7360a23a4d5ebfca090255da3893efd07425f"
+ integrity sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==
dependencies:
- hermes-parser "0.23.1"
+ "@babel/types" "^7.26.0"
-babel-plugin-syntax-hermes-parser@^0.25.1:
- version "0.25.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.25.1.tgz#58b539df973427fcfbb5176a3aec7e5dee793cb0"
- integrity sha512-IVNpGzboFLfXZUAwkLFcI/bnqVbwky0jP3eBno4HKtqvQJAHBLdgxiG6lQ4to0+Q/YCN3PO0od5NZwIKyY4REQ==
+babel-plugin-react-native-web@~0.21.0:
+ version "0.21.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.21.2.tgz#d2f7fd673278da82577aa583457edb55d9cccbe0"
+ integrity sha512-SPD0J6qjJn8231i0HZhlAGH6NORe+QvRSQM2mwQEzJ2Fb3E4ruWTiiicPlHjmeWShDXLcvoorOCXjeR7k/lyWA==
+
+babel-plugin-syntax-hermes-parser@0.29.1, babel-plugin-syntax-hermes-parser@^0.29.1:
+ version "0.29.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.29.1.tgz#09ca9ecb0330eba1ef939b6d3f1f55bb06a9dc33"
+ integrity sha512-2WFYnoWGdmih1I1J5eIqxATOeycOqRwYxAQBu3cUu/rhwInwHUg7k60AFNbuGjSDL8tje5GDrAnxzRLcu2pYcA==
dependencies:
- hermes-parser "0.25.1"
+ hermes-parser "0.29.1"
babel-plugin-transform-flow-enums@^0.0.2:
version "0.0.2"
@@ -1880,20 +1763,33 @@ babel-preset-current-node-syntax@^1.0.0:
"@babel/plugin-syntax-private-property-in-object" "^7.14.5"
"@babel/plugin-syntax-top-level-await" "^7.14.5"
-babel-preset-expo@~12.0.11:
- version "12.0.11"
- resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-12.0.11.tgz#3bbac54f269ae0cc94d198260e26d5020d146127"
- integrity sha512-4m6D92nKEieg+7DXa8uSvpr0GjfuRfM/G0t0I/Q5hF8HleEv5ms3z4dJ+p52qXSJsm760tMqLdO93Ywuoi7cCQ==
+babel-preset-expo@~54.0.9:
+ version "54.0.9"
+ resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-54.0.9.tgz#88af355f08dc49b4b54ac559c02ce8890ab08930"
+ integrity sha512-8J6hRdgEC2eJobjoft6mKJ294cLxmi3khCUy2JJQp4htOYYkllSLUq6vudWJkTJiIuGdVR4bR6xuz2EvJLWHNg==
dependencies:
+ "@babel/helper-module-imports" "^7.25.9"
"@babel/plugin-proposal-decorators" "^7.12.9"
- "@babel/plugin-transform-export-namespace-from" "^7.22.11"
- "@babel/plugin-transform-object-rest-spread" "^7.12.13"
- "@babel/plugin-transform-parameters" "^7.22.15"
+ "@babel/plugin-proposal-export-default-from" "^7.24.7"
+ "@babel/plugin-syntax-export-default-from" "^7.24.7"
+ "@babel/plugin-transform-class-static-block" "^7.27.1"
+ "@babel/plugin-transform-export-namespace-from" "^7.25.9"
+ "@babel/plugin-transform-flow-strip-types" "^7.25.2"
+ "@babel/plugin-transform-modules-commonjs" "^7.24.8"
+ "@babel/plugin-transform-object-rest-spread" "^7.24.7"
+ "@babel/plugin-transform-parameters" "^7.24.7"
+ "@babel/plugin-transform-private-methods" "^7.24.7"
+ "@babel/plugin-transform-private-property-in-object" "^7.24.7"
+ "@babel/plugin-transform-runtime" "^7.24.7"
"@babel/preset-react" "^7.22.15"
"@babel/preset-typescript" "^7.23.0"
- "@react-native/babel-preset" "0.76.9"
- babel-plugin-react-native-web "~0.19.13"
- react-refresh "^0.14.2"
+ "@react-native/babel-preset" "0.81.5"
+ babel-plugin-react-compiler "^1.0.0"
+ babel-plugin-react-native-web "~0.21.0"
+ babel-plugin-syntax-hermes-parser "^0.29.1"
+ babel-plugin-transform-flow-enums "^0.0.2"
+ debug "^4.3.4"
+ resolve-from "^5.0.0"
babel-preset-jest@^29.6.3:
version "29.6.3"
@@ -1930,13 +1826,6 @@ big-integer@1.6.x:
resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85"
integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==
-bplist-creator@0.0.7:
- version "0.0.7"
- resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.7.tgz#37df1536092824b87c42f957b01344117372ae45"
- integrity sha512-xp/tcaV3T5PCiaY04mXga7o/TE+t95gqeLmADeBI1CvZtdWTbgBt3uLpvh4UWtenKeBhCV6oVxGk38yZr2uYEA==
- dependencies:
- stream-buffers "~2.2.0"
-
bplist-creator@0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.1.0.tgz#018a2d1b587f769e379ef5519103730f8963ba1e"
@@ -1980,7 +1869,7 @@ braces@^3.0.3:
dependencies:
fill-range "^7.1.1"
-browserslist@^4.24.0, browserslist@^4.28.0:
+browserslist@^4.24.0, browserslist@^4.25.0, browserslist@^4.28.0:
version "4.28.1"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95"
integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==
@@ -1998,24 +1887,6 @@ bser@2.1.1:
dependencies:
node-int64 "^0.4.0"
-buffer-alloc-unsafe@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
- integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
-
-buffer-alloc@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
- integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
- dependencies:
- buffer-alloc-unsafe "^1.1.0"
- buffer-fill "^1.0.0"
-
-buffer-fill@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
- integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==
-
buffer-from@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
@@ -2034,51 +1905,6 @@ bytes@3.1.2:
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
-cacache@^18.0.2:
- version "18.0.4"
- resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.4.tgz#4601d7578dadb59c66044e157d02a3314682d6a5"
- integrity sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==
- dependencies:
- "@npmcli/fs" "^3.1.0"
- fs-minipass "^3.0.0"
- glob "^10.2.2"
- lru-cache "^10.0.1"
- minipass "^7.0.3"
- minipass-collect "^2.0.1"
- minipass-flush "^1.0.5"
- minipass-pipeline "^1.2.4"
- p-map "^4.0.0"
- ssri "^10.0.0"
- tar "^6.1.11"
- unique-filename "^3.0.0"
-
-call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6"
- integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==
- dependencies:
- es-errors "^1.3.0"
- function-bind "^1.1.2"
-
-caller-callsite@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
- integrity sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==
- dependencies:
- callsites "^2.0.0"
-
-caller-path@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
- integrity sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==
- dependencies:
- caller-callsite "^2.0.0"
-
-callsites@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
- integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==
-
camelcase@^5.3.1:
version "5.3.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
@@ -2111,15 +1937,10 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
-charenc@0.0.2:
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
- integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==
-
-chownr@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
- integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
+chownr@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4"
+ integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==
chrome-launcher@^0.15.2:
version "0.15.2"
@@ -2153,11 +1974,6 @@ ci-info@^3.2.0, ci-info@^3.3.0:
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4"
integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==
-clean-stack@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
- integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
-
cli-cursor@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
@@ -2179,15 +1995,6 @@ cliui@^8.0.1:
strip-ansi "^6.0.1"
wrap-ansi "^7.0.0"
-clone-deep@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
- integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==
- dependencies:
- is-plain-object "^2.0.4"
- kind-of "^6.0.2"
- shallow-clone "^3.0.0"
-
clone@^1.0.2:
version "1.0.4"
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
@@ -2217,13 +2024,6 @@ color-name@~1.1.4:
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
-combined-stream@^1.0.8:
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
- integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
- dependencies:
- delayed-stream "~1.0.0"
-
commander@^12.0.0:
version "12.1.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3"
@@ -2244,16 +2044,6 @@ commander@^7.2.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
-commondir@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
- integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==
-
-component-type@^1.2.1:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/component-type/-/component-type-1.2.2.tgz#4458ecc0c1871efc6288bfaff0cbdab08141d079"
- integrity sha512-99VUHREHiN5cLeHm3YLq312p6v+HUEcwtLCAtelvUDI6+SH5g5Cr85oNR2S1o6ywzL0ykMbuwLzM2ANocjEOIA==
-
compressible@~2.0.18:
version "2.0.18"
resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
@@ -2301,16 +2091,6 @@ core-js-compat@^3.43.0:
dependencies:
browserslist "^4.28.0"
-cosmiconfig@^5.0.5:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
- integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
- dependencies:
- import-fresh "^2.0.0"
- is-directory "^0.3.1"
- js-yaml "^3.13.1"
- parse-json "^4.0.0"
-
cross-fetch@^3.1.5:
version "3.2.0"
resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.2.0.tgz#34e9192f53bc757d6614304d9e5e6fb4edb782e3"
@@ -2318,18 +2098,7 @@ cross-fetch@^3.1.5:
dependencies:
node-fetch "^2.7.0"
-cross-spawn@^6.0.0:
- version "6.0.6"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.6.tgz#30d0efa0712ddb7eb5a76e1e8721bffafa6b5d57"
- integrity sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==
- dependencies:
- nice-try "^1.0.4"
- path-key "^2.0.1"
- semver "^5.5.0"
- shebang-command "^1.2.0"
- which "^1.2.9"
-
-cross-spawn@^7.0.3, cross-spawn@^7.0.6:
+cross-spawn@^7.0.3:
version "7.0.6"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
@@ -2338,11 +2107,6 @@ cross-spawn@^7.0.3, cross-spawn@^7.0.6:
shebang-command "^2.0.0"
which "^2.0.1"
-crypt@0.0.2:
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
- integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==
-
crypto-random-string@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
@@ -2355,13 +2119,20 @@ css-in-js-utils@^3.1.0:
dependencies:
hyphenate-style-name "^1.0.3"
-debug@2.6.9, debug@^2.2.0, debug@^2.6.9:
+debug@2.6.9, debug@^2.6.9:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
dependencies:
ms "2.0.0"
+debug@4, debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.4.0, debug@^4.4.1:
+ version "4.4.3"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a"
+ integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
+ dependencies:
+ ms "^2.1.3"
+
debug@^3.1.0:
version "3.2.7"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
@@ -2369,13 +2140,6 @@ debug@^3.1.0:
dependencies:
ms "^2.1.1"
-debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.4.1:
- version "4.4.3"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a"
- integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
- dependencies:
- ms "^2.1.3"
-
deep-extend@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
@@ -2386,14 +2150,6 @@ deepmerge@^4.3.1:
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
-default-gateway@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b"
- integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==
- dependencies:
- execa "^1.0.0"
- ip-regex "^2.1.0"
-
defaults@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a"
@@ -2406,25 +2162,6 @@ define-lazy-prop@^2.0.0:
resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
-del@^6.0.0:
- version "6.1.1"
- resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a"
- integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==
- dependencies:
- globby "^11.0.1"
- graceful-fs "^4.2.4"
- is-glob "^4.0.1"
- is-path-cwd "^2.2.0"
- is-path-inside "^3.0.2"
- p-map "^4.0.0"
- rimraf "^3.0.2"
- slash "^3.0.0"
-
-delayed-stream@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
- integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
-
depd@2.0.0, depd@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
@@ -2435,17 +2172,10 @@ destroy@1.2.0:
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
-detect-libc@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
- integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==
-
-dir-glob@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
- integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
- dependencies:
- path-type "^4.0.0"
+detect-libc@^2.0.3:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad"
+ integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==
dotenv-expand@~11.0.6:
version "11.0.7"
@@ -2464,20 +2194,6 @@ dotenv@~16.4.5:
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26"
integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==
-dunder-proto@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a"
- integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==
- dependencies:
- call-bind-apply-helpers "^1.0.1"
- es-errors "^1.3.0"
- gopd "^1.2.0"
-
-eastasianwidth@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
- integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
-
ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
@@ -2493,11 +2209,6 @@ emoji-regex@^8.0.0:
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
-emoji-regex@^9.2.2:
- version "9.2.2"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
- integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
-
encodeurl@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
@@ -2508,25 +2219,11 @@ encodeurl@~2.0.0:
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58"
integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==
-end-of-stream@^1.1.0:
- version "1.4.5"
- resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c"
- integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==
- dependencies:
- once "^1.4.0"
-
env-editor@^0.4.1:
version "0.4.2"
resolved "https://registry.yarnpkg.com/env-editor/-/env-editor-0.4.2.tgz#4e76568d0bd8f5c2b6d314a9412c8fe9aa3ae861"
integrity sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==
-error-ex@^1.3.1:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.4.tgz#b3a8d8bb6f92eecc1629e3e27d3c8607a8a32414"
- integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==
- dependencies:
- is-arrayish "^0.2.1"
-
error-stack-parser@^2.0.6:
version "2.1.4"
resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286"
@@ -2534,33 +2231,6 @@ error-stack-parser@^2.0.6:
dependencies:
stackframe "^1.3.4"
-es-define-property@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa"
- integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==
-
-es-errors@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
- integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
-
-es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1"
- integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==
- dependencies:
- es-errors "^1.3.0"
-
-es-set-tostringtag@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d"
- integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==
- dependencies:
- es-errors "^1.3.0"
- get-intrinsic "^1.2.6"
- has-tostringtag "^1.0.2"
- hasown "^2.0.2"
-
escalade@^3.1.1, escalade@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
@@ -2586,7 +2256,7 @@ escape-string-regexp@^4.0.0:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
-esprima@^4.0.0, esprima@~4.0.0:
+esprima@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
@@ -2596,7 +2266,7 @@ etag@~1.8.1:
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
-event-target-shim@^5.0.0, event-target-shim@^5.0.1:
+event-target-shim@^5.0.0:
version "5.0.1"
resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
@@ -2606,119 +2276,94 @@ exec-async@^2.2.0:
resolved "https://registry.yarnpkg.com/exec-async/-/exec-async-2.2.0.tgz#c7c5ad2eef3478d38390c6dd3acfe8af0efc8301"
integrity sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==
-execa@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
- integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
- dependencies:
- cross-spawn "^6.0.0"
- get-stream "^4.0.0"
- is-stream "^1.1.0"
- npm-run-path "^2.0.0"
- p-finally "^1.0.0"
- signal-exit "^3.0.0"
- strip-eof "^1.0.0"
-
-execa@^5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
- integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
- dependencies:
- cross-spawn "^7.0.3"
- get-stream "^6.0.0"
- human-signals "^2.1.0"
- is-stream "^2.0.0"
- merge-stream "^2.0.0"
- npm-run-path "^4.0.1"
- onetime "^5.1.2"
- signal-exit "^3.0.3"
- strip-final-newline "^2.0.0"
-
-expo-asset@~11.0.5:
- version "11.0.5"
- resolved "https://registry.yarnpkg.com/expo-asset/-/expo-asset-11.0.5.tgz#9d0ad28da3af220d25c001cd6e4a80cc669ee18b"
- integrity sha512-TL60LmMBGVzs3NQcO8ylWqBumMh4sx0lmeJsn7+9C88fylGDhyyVnKZ1PyTXo9CVDBkndutZx2JUEQWM9BaiXw==
- dependencies:
- "@expo/image-utils" "^0.6.5"
- expo-constants "~17.0.8"
- invariant "^2.2.4"
- md5-file "^3.2.3"
-
-expo-constants@~17.0.8:
- version "17.0.8"
- resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-17.0.8.tgz#d7a21ec6f1f4834ea25aa645be20292ef99c0b81"
- integrity sha512-XfWRyQAf1yUNgWZ1TnE8pFBMqGmFP5Gb+SFSgszxDdOoheB/NI5D4p7q86kI2fvGyfTrxAe+D+74nZkfsGvUlg==
+expo-asset@~12.0.12:
+ version "12.0.12"
+ resolved "https://registry.yarnpkg.com/expo-asset/-/expo-asset-12.0.12.tgz#15eb7d92cd43cc81c37149e5bbcdc3091875a85b"
+ integrity sha512-CsXFCQbx2fElSMn0lyTdRIyKlSXOal6ilLJd+yeZ6xaC7I9AICQgscY5nj0QcwgA+KYYCCEQEBndMsmj7drOWQ==
dependencies:
- "@expo/config" "~10.0.11"
- "@expo/env" "~0.4.2"
+ "@expo/image-utils" "^0.8.8"
+ expo-constants "~18.0.12"
-expo-file-system@~18.0.12:
+expo-constants@~18.0.12:
version "18.0.12"
- resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-18.0.12.tgz#6ceeeb0725f6c5faaf58112f18c073c2acfb3027"
- integrity sha512-HAkrd/mb8r+G3lJ9MzmGeuW2B+BxQR1joKfeCyY4deLl1zoZ48FrAWjgZjHK9aHUVhJ0ehzInu/NQtikKytaeg==
+ resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-18.0.12.tgz#3e67f7109ffd03eaa5514c19875a767c39f5a2ca"
+ integrity sha512-WzcKYMVNRRu4NcSzfIVRD5aUQFnSpTZgXFrlWmm19xJoDa4S3/PQNi6PNTBRc49xz9h8FT7HMxRKaC8lr0gflA==
dependencies:
- web-streams-polyfill "^3.3.2"
+ "@expo/config" "~12.0.12"
+ "@expo/env" "~2.0.8"
-expo-font@~13.0.4:
- version "13.0.4"
- resolved "https://registry.yarnpkg.com/expo-font/-/expo-font-13.0.4.tgz#c60771446598ddfa98ac1d25244c916a089a99c9"
- integrity sha512-eAP5hyBgC8gafFtprsz0HMaB795qZfgJWqTmU0NfbSin1wUuVySFMEPMOrTkTgmazU73v4Cb4x7p86jY1XXYUw==
+expo-file-system@~19.0.21:
+ version "19.0.21"
+ resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-19.0.21.tgz#e96a68107fb629cf0dd1906fe7b46b566ff13e10"
+ integrity sha512-s3DlrDdiscBHtab/6W1osrjGL+C2bvoInPJD7sOwmxfJ5Woynv2oc+Fz1/xVXaE/V7HE/+xrHC/H45tu6lZzzg==
+
+expo-font@~14.0.10:
+ version "14.0.10"
+ resolved "https://registry.yarnpkg.com/expo-font/-/expo-font-14.0.10.tgz#33fb9f6dc5661729192a6bc8cd6f08bd1a9097cc"
+ integrity sha512-UqyNaaLKRpj4pKAP4HZSLnuDQqueaO5tB1c/NWu5vh1/LF9ulItyyg2kF/IpeOp0DeOLk0GY0HrIXaKUMrwB+Q==
dependencies:
fontfaceobserver "^2.1.0"
-expo-keep-awake@~14.0.3:
- version "14.0.3"
- resolved "https://registry.yarnpkg.com/expo-keep-awake/-/expo-keep-awake-14.0.3.tgz#74c91b68effdb6969bc1e8371621aad90386cfbf"
- integrity sha512-6Jh94G6NvTZfuLnm2vwIpKe3GdOiVBuISl7FI8GqN0/9UOg9E0WXXp5cDcfAG8bn80RfgLJS8P7EPUGTZyOvhg==
+expo-keep-awake@~15.0.8:
+ version "15.0.8"
+ resolved "https://registry.yarnpkg.com/expo-keep-awake/-/expo-keep-awake-15.0.8.tgz#911c5effeba9baff2ccde79ef0ff5bf856215f8d"
+ integrity sha512-YK9M1VrnoH1vLJiQzChZgzDvVimVoriibiDIFLbQMpjYBnvyfUeHJcin/Gx1a+XgupNXy92EQJLgI/9ZuXajYQ==
-expo-modules-autolinking@2.0.8:
- version "2.0.8"
- resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-2.0.8.tgz#b00c10ebb589ce2220548bbaee4865db1cf1f1f7"
- integrity sha512-DezgnEYFQYic8hKGhkbztBA3QUmSftjaNDIKNAtS2iGJmzCcNIkatjN2slFDSWjSTNo8gOvPQyMKfyHWFvLpOQ==
+expo-modules-autolinking@3.0.23:
+ version "3.0.23"
+ resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-3.0.23.tgz#1b4349476d4c75b4f2dcefe716ff28c6746aa6ed"
+ integrity sha512-YZnaE0G+52xftjH5nsIRaWsoVBY38SQCECclpdgLisdbRY/6Mzo7ndokjauOv3mpFmzMZACHyJNu1YSAffQwTg==
dependencies:
"@expo/spawn-async" "^1.7.2"
chalk "^4.1.0"
commander "^7.2.0"
- fast-glob "^3.2.5"
- find-up "^5.0.0"
- fs-extra "^9.1.0"
require-from-string "^2.0.2"
resolve-from "^5.0.0"
-expo-modules-core@2.2.3:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-2.2.3.tgz#438084d5386a95dc7327656072c4ff05dd101d99"
- integrity sha512-01QqZzpP/wWlxnNly4G06MsOBUTbMDj02DQigZoXfDh80vd/rk3/uVXqnZgOdLSggTs6DnvOgAUy0H2q30XdUg==
+expo-modules-core@3.0.29:
+ version "3.0.29"
+ resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-3.0.29.tgz#99287eba52f21784bcb2e4f4edd4fc4c21b5b265"
+ integrity sha512-LzipcjGqk8gvkrOUf7O2mejNWugPkf3lmd9GkqL9WuNyeN2fRwU0Dn77e3ZUKI3k6sI+DNwjkq4Nu9fNN9WS7Q==
dependencies:
invariant "^2.2.4"
-expo-status-bar@~1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/expo-status-bar/-/expo-status-bar-1.6.0.tgz#e79ffdb9a84d2e0ec9a0dc7392d9ab364fefa9cf"
- integrity sha512-e//Oi2WPdomMlMDD3skE4+1ZarKCJ/suvcB4Jo/nO427niKug5oppcPNYO+csR6y3ZglGuypS+3pp/hJ+Xp6fQ==
+expo-server@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/expo-server/-/expo-server-1.0.5.tgz#2d52002199a2af99c2c8771d0657916004345ca9"
+ integrity sha512-IGR++flYH70rhLyeXF0Phle56/k4cee87WeQ4mamS+MkVAVP+dDlOHf2nN06Z9Y2KhU0Gp1k+y61KkghF7HdhA==
-expo@~52.0.0:
- version "52.0.48"
- resolved "https://registry.yarnpkg.com/expo/-/expo-52.0.48.tgz#47f83b3b95f4a8970db4aa8e83246105d4a7c7e2"
- integrity sha512-/HR/vuo57KGEWlvF3GWaquwEAjXuA5hrOCsaLcZ3pMSA8mQ27qKd1jva4GWzpxXYedlzs/7LLP1XpZo6hXTsog==
+expo-status-bar@~3.0.9:
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/expo-status-bar/-/expo-status-bar-3.0.9.tgz#87cfc803fa614f09a985b8e75e3dd7abd51ce2cb"
+ integrity sha512-xyYyVg6V1/SSOZWh4Ni3U129XHCnFHBTcUo0dhWtFDrZbNp/duw5AGsQfb2sVeU0gxWHXSY1+5F0jnKYC7WuOw==
+ dependencies:
+ react-native-is-edge-to-edge "^1.2.1"
+
+expo@~54.0.30:
+ version "54.0.30"
+ resolved "https://registry.yarnpkg.com/expo/-/expo-54.0.30.tgz#4e27843b749e6ac5caf02393aae0ef7baddc592e"
+ integrity sha512-6q+aFfKL0SpT8prfdpR3V8HcN51ov0mCGuwQTzyuk6eeO9rg7a7LWbgPv9rEVXGZEuyULstL8LGNwHqusand7Q==
dependencies:
"@babel/runtime" "^7.20.0"
- "@expo/cli" "0.22.27"
- "@expo/config" "~10.0.11"
- "@expo/config-plugins" "~9.0.17"
- "@expo/fingerprint" "0.11.11"
- "@expo/metro-config" "0.19.12"
- "@expo/vector-icons" "~14.0.4"
- babel-preset-expo "~12.0.11"
- expo-asset "~11.0.5"
- expo-constants "~17.0.8"
- expo-file-system "~18.0.12"
- expo-font "~13.0.4"
- expo-keep-awake "~14.0.3"
- expo-modules-autolinking "2.0.8"
- expo-modules-core "2.2.3"
- fbemitter "^3.0.0"
- web-streams-polyfill "^3.3.2"
+ "@expo/cli" "54.0.20"
+ "@expo/config" "~12.0.13"
+ "@expo/config-plugins" "~54.0.4"
+ "@expo/devtools" "0.1.8"
+ "@expo/fingerprint" "0.15.4"
+ "@expo/metro" "~54.2.0"
+ "@expo/metro-config" "54.0.12"
+ "@expo/vector-icons" "^15.0.3"
+ "@ungap/structured-clone" "^1.3.0"
+ babel-preset-expo "~54.0.9"
+ expo-asset "~12.0.12"
+ expo-constants "~18.0.12"
+ expo-file-system "~19.0.21"
+ expo-font "~14.0.10"
+ expo-keep-awake "~15.0.8"
+ expo-modules-autolinking "3.0.23"
+ expo-modules-core "3.0.29"
+ pretty-format "^29.7.0"
+ react-refresh "^0.14.2"
whatwg-url-without-unicode "8.0.0-3"
exponential-backoff@^3.1.1:
@@ -2726,34 +2371,11 @@ exponential-backoff@^3.1.1:
resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.3.tgz#51cf92c1c0493c766053f9d3abee4434c244d2f6"
integrity sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==
-fast-glob@^3.2.5, fast-glob@^3.2.9, fast-glob@^3.3.2:
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818"
- integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==
- dependencies:
- "@nodelib/fs.stat" "^2.0.2"
- "@nodelib/fs.walk" "^1.2.3"
- glob-parent "^5.1.2"
- merge2 "^1.3.0"
- micromatch "^4.0.8"
-
fast-json-stable-stringify@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
-fast-loops@^1.1.3:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/fast-loops/-/fast-loops-1.1.4.tgz#61bc77d518c0af5073a638c6d9d5c7683f069ce2"
- integrity sha512-8dbd3XWoKCTms18ize6JmQF1SFnnfj5s0B7rRry22EofgMu7B6LKHVh+XfFqFGsqnbH54xgeO83PzpKI+ODhlg==
-
-fastq@^1.6.0:
- version "1.19.1"
- resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5"
- integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==
- dependencies:
- reusify "^1.0.4"
-
fb-watchman@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c"
@@ -2761,19 +2383,12 @@ fb-watchman@^2.0.0:
dependencies:
bser "2.1.1"
-fbemitter@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-3.0.0.tgz#00b2a1af5411254aab416cd75f9e6289bee4bff3"
- integrity sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==
- dependencies:
- fbjs "^3.0.0"
-
fbjs-css-vars@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8"
integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==
-fbjs@^3.0.0, fbjs@^3.0.4:
+fbjs@^3.0.4:
version "3.0.5"
resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.5.tgz#aa0edb7d5caa6340011790bd9249dbef8a81128d"
integrity sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==
@@ -2786,10 +2401,10 @@ fbjs@^3.0.0, fbjs@^3.0.4:
setimmediate "^1.0.5"
ua-parser-js "^1.0.35"
-fetch-retry@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/fetch-retry/-/fetch-retry-4.1.1.tgz#fafe0bb22b54f4d0a9c788dff6dd7f8673ca63f3"
- integrity sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==
+fdir@^6.5.0:
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350"
+ integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==
fill-range@^7.1.1:
version "7.1.1"
@@ -2819,15 +2434,6 @@ find-babel-config@^1.2.0:
json5 "^1.0.2"
path-exists "^3.0.0"
-find-cache-dir@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
- integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
- dependencies:
- commondir "^1.0.1"
- make-dir "^2.0.0"
- pkg-dir "^3.0.0"
-
find-up@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
@@ -2856,35 +2462,11 @@ flow-enums-runtime@^0.0.6:
resolved "https://registry.yarnpkg.com/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz#5bb0cd1b0a3e471330f4d109039b7eba5cb3e787"
integrity sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==
-flow-parser@0.*:
- version "0.295.0"
- resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.295.0.tgz#168710333e9b90b34ba6ba2fa0ba98e2aab5acc6"
- integrity sha512-M4GVdl9SIKQEGULoEh/PO5K1REnXvHT6XOEthuKMUDWsLCi576mOWo3Xe8BfKdy2e2aMaW5rKGfMDlMDOA9RqA==
-
fontfaceobserver@^2.1.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz#5fb392116e75d5024b7ec8e4f2ce92106d1488c8"
integrity sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==
-foreground-child@^3.1.0:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f"
- integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==
- dependencies:
- cross-spawn "^7.0.6"
- signal-exit "^4.0.1"
-
-form-data@^3.0.1:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.4.tgz#938273171d3f999286a4557528ce022dc2c98df1"
- integrity sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ==
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.8"
- es-set-tostringtag "^2.1.0"
- hasown "^2.0.2"
- mime-types "^2.1.35"
-
freeport-async@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/freeport-async/-/freeport-async-2.0.0.tgz#6adf2ec0c629d11abff92836acd04b399135bab4"
@@ -2895,49 +2477,6 @@ fresh@~0.5.2:
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
-fs-extra@9.0.0:
- version "9.0.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.0.tgz#b6afc31036e247b2466dc99c29ae797d5d4580a3"
- integrity sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==
- dependencies:
- at-least-node "^1.0.0"
- graceful-fs "^4.2.0"
- jsonfile "^6.0.1"
- universalify "^1.0.0"
-
-fs-extra@^9.0.0, fs-extra@^9.1.0:
- version "9.1.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
- integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
- dependencies:
- at-least-node "^1.0.0"
- graceful-fs "^4.2.0"
- jsonfile "^6.0.1"
- universalify "^2.0.0"
-
-fs-extra@~8.1.0:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
- integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
- dependencies:
- graceful-fs "^4.2.0"
- jsonfile "^4.0.0"
- universalify "^0.1.0"
-
-fs-minipass@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
- integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
- dependencies:
- minipass "^3.0.0"
-
-fs-minipass@^3.0.0:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54"
- integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==
- dependencies:
- minipass "^7.0.3"
-
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
@@ -2963,70 +2502,24 @@ get-caller-file@^2.0.5:
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
-get-intrinsic@^1.2.6:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01"
- integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==
- dependencies:
- call-bind-apply-helpers "^1.0.2"
- es-define-property "^1.0.1"
- es-errors "^1.3.0"
- es-object-atoms "^1.1.1"
- function-bind "^1.1.2"
- get-proto "^1.0.1"
- gopd "^1.2.0"
- has-symbols "^1.1.0"
- hasown "^2.0.2"
- math-intrinsics "^1.1.0"
-
get-package-type@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
-get-proto@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1"
- integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==
- dependencies:
- dunder-proto "^1.0.1"
- es-object-atoms "^1.0.0"
-
-get-stream@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
- integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
- dependencies:
- pump "^3.0.0"
-
-get-stream@^6.0.0:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
- integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
-
-getenv@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/getenv/-/getenv-1.0.0.tgz#874f2e7544fbca53c7a4738f37de8605c3fcfc31"
- integrity sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==
-
-glob-parent@^5.1.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
- integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
- dependencies:
- is-glob "^4.0.1"
+getenv@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/getenv/-/getenv-2.0.0.tgz#b1698c7b0f29588f4577d06c42c73a5b475c69e0"
+ integrity sha512-VilgtJj/ALgGY77fiLam5iD336eSWi96Q15JSAG1zi8NRBysm3LXKdGnHb4m5cuyxvOLQQKWpBZAT6ni4FI2iQ==
-glob@^10.2.2, glob@^10.3.10, glob@^10.4.2:
- version "10.5.0"
- resolved "https://registry.yarnpkg.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c"
- integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==
+glob@^13.0.0:
+ version "13.0.0"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-13.0.0.tgz#9d9233a4a274fc28ef7adce5508b7ef6237a1be3"
+ integrity sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==
dependencies:
- foreground-child "^3.1.0"
- jackspeak "^3.1.2"
- minimatch "^9.0.4"
+ minimatch "^10.1.1"
minipass "^7.1.2"
- package-json-from-dist "^1.0.0"
- path-scurry "^1.11.1"
+ path-scurry "^2.0.0"
glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
version "7.2.3"
@@ -3040,24 +2533,14 @@ glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
once "^1.3.0"
path-is-absolute "^1.0.0"
-globby@^11.0.1:
- version "11.1.0"
- resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
- integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
+global-dirs@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445"
+ integrity sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==
dependencies:
- array-union "^2.1.0"
- dir-glob "^3.0.1"
- fast-glob "^3.2.9"
- ignore "^5.2.0"
- merge2 "^1.4.1"
- slash "^3.0.0"
-
-gopd@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
- integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
+ ini "^1.3.4"
-graceful-fs@^4.1.11, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9:
+graceful-fs@^4.2.4, graceful-fs@^4.2.9:
version "4.2.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
@@ -3072,18 +2555,6 @@ has-flag@^4.0.0:
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
-has-symbols@^1.0.3, has-symbols@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338"
- integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==
-
-has-tostringtag@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc"
- integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
- dependencies:
- has-symbols "^1.0.3"
-
hasown@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
@@ -3091,29 +2562,36 @@ hasown@^2.0.2:
dependencies:
function-bind "^1.1.2"
-hermes-estree@0.23.1:
- version "0.23.1"
- resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.23.1.tgz#d0bac369a030188120ee7024926aabe5a9f84fdb"
- integrity sha512-eT5MU3f5aVhTqsfIReZ6n41X5sYn4IdQL0nvz6yO+MMlPxw49aSARHLg/MSehQftyjnrE8X6bYregzSumqc6cg==
+hermes-estree@0.29.1:
+ version "0.29.1"
+ resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.29.1.tgz#043c7db076e0e8ef8c5f6ed23828d1ba463ebcc5"
+ integrity sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ==
-hermes-estree@0.25.1:
- version "0.25.1"
- resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.25.1.tgz#6aeec17d1983b4eabf69721f3aa3eb705b17f480"
- integrity sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==
+hermes-estree@0.32.0:
+ version "0.32.0"
+ resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.32.0.tgz#bb7da6613ab8e67e334a1854ea1e209f487d307b"
+ integrity sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==
-hermes-parser@0.23.1:
- version "0.23.1"
- resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.23.1.tgz#e5de648e664f3b3d84d01b48fc7ab164f4b68205"
- integrity sha512-oxl5h2DkFW83hT4DAUJorpah8ou4yvmweUzLJmmr6YV2cezduCdlil1AvU/a/xSsAFo4WUcNA4GoV5Bvq6JffA==
+hermes-parser@0.29.1, hermes-parser@^0.29.1:
+ version "0.29.1"
+ resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.29.1.tgz#436b24bcd7bb1e71f92a04c396ccc0716c288d56"
+ integrity sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA==
dependencies:
- hermes-estree "0.23.1"
+ hermes-estree "0.29.1"
-hermes-parser@0.25.1:
- version "0.25.1"
- resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.25.1.tgz#5be0e487b2090886c62bd8a11724cd766d5f54d1"
- integrity sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==
+hermes-parser@0.32.0:
+ version "0.32.0"
+ resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.32.0.tgz#7916984ef6fdce62e7415d354cf35392061cd303"
+ integrity sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==
dependencies:
- hermes-estree "0.25.1"
+ hermes-estree "0.32.0"
+
+hoist-non-react-statics@^3.3.0:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
+ integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
+ dependencies:
+ react-is "^16.7.0"
hosted-git-info@^7.0.0:
version "7.0.2"
@@ -3133,10 +2611,13 @@ http-errors@~2.0.1:
statuses "~2.0.2"
toidentifier "~1.0.1"
-human-signals@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
- integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
+https-proxy-agent@^7.0.5:
+ version "7.0.6"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9"
+ integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==
+ dependencies:
+ agent-base "^7.1.2"
+ debug "4"
hyphenate-style-name@^1.0.3:
version "1.1.0"
@@ -3148,7 +2629,7 @@ ieee754@^1.1.13:
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
-ignore@^5.2.0:
+ignore@^5.3.1:
version "5.3.2"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
@@ -3160,24 +2641,11 @@ image-size@^1.0.2:
dependencies:
queue "6.0.2"
-import-fresh@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
- integrity sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==
- dependencies:
- caller-path "^2.0.0"
- resolve-from "^3.0.0"
-
imurmurhash@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
-indent-string@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
- integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
-
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
@@ -3191,26 +2659,17 @@ inherits@2, inherits@~2.0.3, inherits@~2.0.4:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-ini@~1.3.0:
+ini@^1.3.4, ini@~1.3.0:
version "1.3.8"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
-inline-style-prefixer@^6.0.1:
- version "6.0.4"
- resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-6.0.4.tgz#4290ed453ab0e4441583284ad86e41ad88384f44"
- integrity sha512-FwXmZC2zbeeS7NzGjJ6pAiqRhXR0ugUShSNb6GApMl6da0/XGc4MOJsoWAywia52EEWbXNSy0pzkwz/+Y+swSg==
+inline-style-prefixer@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-7.0.1.tgz#9310f3cfa2c6f3901d1480f373981c02691781e8"
+ integrity sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==
dependencies:
css-in-js-utils "^3.1.0"
- fast-loops "^1.1.3"
-
-internal-ip@^4.3.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907"
- integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==
- dependencies:
- default-gateway "^4.2.0"
- ipaddr.js "^1.9.0"
invariant@^2.2.4:
version "2.2.4"
@@ -3219,26 +2678,6 @@ invariant@^2.2.4:
dependencies:
loose-envify "^1.0.0"
-ip-regex@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
- integrity sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==
-
-ipaddr.js@^1.9.0:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
- integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
-
-is-arrayish@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
- integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
-
-is-buffer@~1.1.6:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
- integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
-
is-core-module@^2.16.1:
version "2.16.1"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4"
@@ -3246,65 +2685,21 @@ is-core-module@^2.16.1:
dependencies:
hasown "^2.0.2"
-is-directory@^0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
- integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==
-
is-docker@^2.0.0, is-docker@^2.1.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
-is-extglob@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
- integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
-
is-fullwidth-code-point@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
-is-glob@^4.0.1:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
- integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
- dependencies:
- is-extglob "^2.1.1"
-
is-number@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
-is-path-cwd@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
- integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==
-
-is-path-inside@^3.0.2:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
- integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
-
-is-plain-object@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
- integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
- dependencies:
- isobject "^3.0.1"
-
-is-stream@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
- integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==
-
-is-stream@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
- integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
-
is-wsl@^2.1.1, is-wsl@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
@@ -3317,11 +2712,6 @@ isexe@^2.0.0:
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
-isobject@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
- integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
-
istanbul-lib-coverage@^3.2.0:
version "3.2.2"
resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756"
@@ -3338,16 +2728,7 @@ istanbul-lib-instrument@^5.0.4:
istanbul-lib-coverage "^3.2.0"
semver "^6.3.0"
-jackspeak@^3.1.2:
- version "3.4.3"
- resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a"
- integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==
- dependencies:
- "@isaacs/cliui" "^8.0.2"
- optionalDependencies:
- "@pkgjs/parseargs" "^0.11.0"
-
-jest-environment-node@^29.6.3:
+jest-environment-node@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376"
integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==
@@ -3451,11 +2832,6 @@ jimp-compact@0.16.1:
resolved "https://registry.yarnpkg.com/jimp-compact/-/jimp-compact-0.16.1.tgz#9582aea06548a2c1e04dd148d7c3ab92075aefa3"
integrity sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==
-join-component@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/join-component/-/join-component-1.1.0.tgz#b8417b750661a392bee2c2537c68b2a9d4977cd5"
- integrity sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==
-
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@@ -3476,51 +2852,16 @@ js-yaml@^4.1.0:
dependencies:
argparse "^2.0.1"
-jsc-android@^250231.0.0:
- version "250231.0.0"
- resolved "https://registry.yarnpkg.com/jsc-android/-/jsc-android-250231.0.0.tgz#91720f8df382a108872fa4b3f558f33ba5e95262"
- integrity sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==
-
jsc-safe-url@^0.2.2, jsc-safe-url@^0.2.4:
version "0.2.4"
resolved "https://registry.yarnpkg.com/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz#141c14fbb43791e88d5dc64e85a374575a83477a"
integrity sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==
-jscodeshift@^0.14.0:
- version "0.14.0"
- resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.14.0.tgz#7542e6715d6d2e8bde0b4e883f0ccea358b46881"
- integrity sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==
- dependencies:
- "@babel/core" "^7.13.16"
- "@babel/parser" "^7.13.16"
- "@babel/plugin-proposal-class-properties" "^7.13.0"
- "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8"
- "@babel/plugin-proposal-optional-chaining" "^7.13.12"
- "@babel/plugin-transform-modules-commonjs" "^7.13.8"
- "@babel/preset-flow" "^7.13.13"
- "@babel/preset-typescript" "^7.13.0"
- "@babel/register" "^7.13.16"
- babel-core "^7.0.0-bridge.0"
- chalk "^4.1.2"
- flow-parser "0.*"
- graceful-fs "^4.2.4"
- micromatch "^4.0.4"
- neo-async "^2.5.0"
- node-dir "^0.1.17"
- recast "^0.21.0"
- temp "^0.8.4"
- write-file-atomic "^2.3.0"
-
jsesc@^3.0.2, jsesc@~3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d"
integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==
-json-parse-better-errors@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
- integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
-
json5@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593"
@@ -3533,32 +2874,16 @@ json5@^2.2.3:
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
-jsonfile@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
- integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==
- optionalDependencies:
- graceful-fs "^4.1.6"
-
-jsonfile@^6.0.1:
- version "6.2.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62"
- integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==
- dependencies:
- universalify "^2.0.0"
- optionalDependencies:
- graceful-fs "^4.1.6"
-
-kind-of@^6.0.2:
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
- integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
-
kleur@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
+lan-network@^0.1.6:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/lan-network/-/lan-network-0.1.7.tgz#9fcb9967c6d951f10b2f9a9ffabe4a312d63f69d"
+ integrity sha512-mnIlAEMu4OyEvUNdzco9xpuB9YVcPkQec+QsgycBCtPZvEqWPCDPfbAE4OJMdBBWpZWtpCn1xw9jJYlwjWI5zQ==
+
leven@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
@@ -3572,73 +2897,79 @@ lighthouse-logger@^1.0.0:
debug "^2.6.9"
marky "^1.2.2"
-lightningcss-darwin-arm64@1.27.0:
- version "1.27.0"
- resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.27.0.tgz#565bd610533941cba648a70e105987578d82f996"
- integrity sha512-Gl/lqIXY+d+ySmMbgDf0pgaWSqrWYxVHoc88q+Vhf2YNzZ8DwoRzGt5NZDVqqIW5ScpSnmmjcgXP87Dn2ylSSQ==
-
-lightningcss-darwin-x64@1.27.0:
- version "1.27.0"
- resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.27.0.tgz#c906a267237b1c7fe08bff6c5ac032c099bc9482"
- integrity sha512-0+mZa54IlcNAoQS9E0+niovhyjjQWEMrwW0p2sSdLRhLDc8LMQ/b67z7+B5q4VmjYCMSfnFi3djAAQFIDuj/Tg==
-
-lightningcss-freebsd-x64@1.27.0:
- version "1.27.0"
- resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.27.0.tgz#a7c3c4d6ee18dffeb8fa69f14f8f9267f7dc0c34"
- integrity sha512-n1sEf85fePoU2aDN2PzYjoI8gbBqnmLGEhKq7q0DKLj0UTVmOTwDC7PtLcy/zFxzASTSBlVQYJUhwIStQMIpRA==
-
-lightningcss-linux-arm-gnueabihf@1.27.0:
- version "1.27.0"
- resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.27.0.tgz#c7c16432a571ec877bf734fe500e4a43d48c2814"
- integrity sha512-MUMRmtdRkOkd5z3h986HOuNBD1c2lq2BSQA1Jg88d9I7bmPGx08bwGcnB75dvr17CwxjxD6XPi3Qh8ArmKFqCA==
-
-lightningcss-linux-arm64-gnu@1.27.0:
- version "1.27.0"
- resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.27.0.tgz#cfd9e18df1cd65131da286ddacfa3aee6862a752"
- integrity sha512-cPsxo1QEWq2sfKkSq2Bq5feQDHdUEwgtA9KaB27J5AX22+l4l0ptgjMZZtYtUnteBofjee+0oW1wQ1guv04a7A==
-
-lightningcss-linux-arm64-musl@1.27.0:
- version "1.27.0"
- resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.27.0.tgz#6682ff6b9165acef9a6796bd9127a8e1247bb0ed"
- integrity sha512-rCGBm2ax7kQ9pBSeITfCW9XSVF69VX+fm5DIpvDZQl4NnQoMQyRwhZQm9pd59m8leZ1IesRqWk2v/DntMo26lg==
-
-lightningcss-linux-x64-gnu@1.27.0:
- version "1.27.0"
- resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.27.0.tgz#714221212ad184ddfe974bbb7dbe9300dfde4bc0"
- integrity sha512-Dk/jovSI7qqhJDiUibvaikNKI2x6kWPN79AQiD/E/KeQWMjdGe9kw51RAgoWFDi0coP4jinaH14Nrt/J8z3U4A==
-
-lightningcss-linux-x64-musl@1.27.0:
- version "1.27.0"
- resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.27.0.tgz#247958daf622a030a6dc2285afa16b7184bdf21e"
- integrity sha512-QKjTxXm8A9s6v9Tg3Fk0gscCQA1t/HMoF7Woy1u68wCk5kS4fR+q3vXa1p3++REW784cRAtkYKrPy6JKibrEZA==
-
-lightningcss-win32-arm64-msvc@1.27.0:
- version "1.27.0"
- resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.27.0.tgz#64cfe473c264ef5dc275a4d57a516d77fcac6bc9"
- integrity sha512-/wXegPS1hnhkeG4OXQKEMQeJd48RDC3qdh+OA8pCuOPCyvnm/yEayrJdJVqzBsqpy1aJklRCVxscpFur80o6iQ==
-
-lightningcss-win32-x64-msvc@1.27.0:
- version "1.27.0"
- resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.27.0.tgz#237d0dc87d9cdc9cf82536bcbc07426fa9f3f422"
- integrity sha512-/OJLj94Zm/waZShL8nB5jsNj3CfNATLCTyFxZyouilfTmSoLDX7VlVAmhPHoZWVFp4vdmoiEbPEYC8HID3m6yw==
-
-lightningcss@~1.27.0:
- version "1.27.0"
- resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.27.0.tgz#d4608e63044343836dd9769f6c8b5d607867649a"
- integrity sha512-8f7aNmS1+etYSLHht0fQApPc2kNO8qGRutifN5rVIc6Xo6ABsEbqOr758UwI7ALVbTt4x1fllKt0PYgzD9S3yQ==
- dependencies:
- detect-libc "^1.0.3"
+lightningcss-android-arm64@1.30.2:
+ version "1.30.2"
+ resolved "https://registry.yarnpkg.com/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz#6966b7024d39c94994008b548b71ab360eb3a307"
+ integrity sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==
+
+lightningcss-darwin-arm64@1.30.2:
+ version "1.30.2"
+ resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz#a5fa946d27c029e48c7ff929e6e724a7de46eb2c"
+ integrity sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==
+
+lightningcss-darwin-x64@1.30.2:
+ version "1.30.2"
+ resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz#5ce87e9cd7c4f2dcc1b713f5e8ee185c88d9b7cd"
+ integrity sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==
+
+lightningcss-freebsd-x64@1.30.2:
+ version "1.30.2"
+ resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz#6ae1d5e773c97961df5cff57b851807ef33692a5"
+ integrity sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==
+
+lightningcss-linux-arm-gnueabihf@1.30.2:
+ version "1.30.2"
+ resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz#62c489610c0424151a6121fa99d77731536cdaeb"
+ integrity sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==
+
+lightningcss-linux-arm64-gnu@1.30.2:
+ version "1.30.2"
+ resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz#2a3661b56fe95a0cafae90be026fe0590d089298"
+ integrity sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==
+
+lightningcss-linux-arm64-musl@1.30.2:
+ version "1.30.2"
+ resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz#d7ddd6b26959245e026bc1ad9eb6aa983aa90e6b"
+ integrity sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==
+
+lightningcss-linux-x64-gnu@1.30.2:
+ version "1.30.2"
+ resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz#5a89814c8e63213a5965c3d166dff83c36152b1a"
+ integrity sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==
+
+lightningcss-linux-x64-musl@1.30.2:
+ version "1.30.2"
+ resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz#808c2e91ce0bf5d0af0e867c6152e5378c049728"
+ integrity sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==
+
+lightningcss-win32-arm64-msvc@1.30.2:
+ version "1.30.2"
+ resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz#ab4a8a8a2e6a82a4531e8bbb6bf0ff161ee6625a"
+ integrity sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==
+
+lightningcss-win32-x64-msvc@1.30.2:
+ version "1.30.2"
+ resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz#f01f382c8e0a27e1c018b0bee316d210eac43b6e"
+ integrity sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==
+
+lightningcss@^1.30.1:
+ version "1.30.2"
+ resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.30.2.tgz#4ade295f25d140f487d37256f4cd40dc607696d0"
+ integrity sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==
+ dependencies:
+ detect-libc "^2.0.3"
optionalDependencies:
- lightningcss-darwin-arm64 "1.27.0"
- lightningcss-darwin-x64 "1.27.0"
- lightningcss-freebsd-x64 "1.27.0"
- lightningcss-linux-arm-gnueabihf "1.27.0"
- lightningcss-linux-arm64-gnu "1.27.0"
- lightningcss-linux-arm64-musl "1.27.0"
- lightningcss-linux-x64-gnu "1.27.0"
- lightningcss-linux-x64-musl "1.27.0"
- lightningcss-win32-arm64-msvc "1.27.0"
- lightningcss-win32-x64-msvc "1.27.0"
+ lightningcss-android-arm64 "1.30.2"
+ lightningcss-darwin-arm64 "1.30.2"
+ lightningcss-darwin-x64 "1.30.2"
+ lightningcss-freebsd-x64 "1.30.2"
+ lightningcss-linux-arm-gnueabihf "1.30.2"
+ lightningcss-linux-arm64-gnu "1.30.2"
+ lightningcss-linux-arm64-musl "1.30.2"
+ lightningcss-linux-x64-gnu "1.30.2"
+ lightningcss-linux-x64-musl "1.30.2"
+ lightningcss-win32-arm64-msvc "1.30.2"
+ lightningcss-win32-x64-msvc "1.30.2"
lines-and-columns@^1.1.6:
version "1.2.4"
@@ -3689,18 +3020,23 @@ log-symbols@^2.2.0:
dependencies:
chalk "^2.0.1"
-loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
+loose-envify@^1.0.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
dependencies:
js-tokens "^3.0.0 || ^4.0.0"
-lru-cache@^10.0.1, lru-cache@^10.2.0:
+lru-cache@^10.0.1:
version "10.4.3"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119"
integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==
+lru-cache@^11.0.0:
+ version "11.2.4"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.2.4.tgz#ecb523ebb0e6f4d837c807ad1abaea8e0619770d"
+ integrity sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==
+
lru-cache@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
@@ -3708,14 +3044,6 @@ lru-cache@^5.1.1:
dependencies:
yallist "^3.0.2"
-make-dir@^2.0.0, make-dir@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
- integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
- dependencies:
- pify "^4.0.1"
- semver "^5.6.0"
-
makeerror@1.0.12:
version "1.0.12"
resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a"
@@ -3728,27 +3056,6 @@ marky@^1.2.2:
resolved "https://registry.yarnpkg.com/marky/-/marky-1.3.0.tgz#422b63b0baf65022f02eda61a238eccdbbc14997"
integrity sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==
-math-intrinsics@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
- integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
-
-md5-file@^3.2.3:
- version "3.2.3"
- resolved "https://registry.yarnpkg.com/md5-file/-/md5-file-3.2.3.tgz#f9bceb941eca2214a4c0727f5e700314e770f06f"
- integrity sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==
- dependencies:
- buffer-alloc "^1.1.0"
-
-md5@^2.2.1:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f"
- integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==
- dependencies:
- charenc "0.0.2"
- crypt "0.0.2"
- is-buffer "~1.1.6"
-
memoize-one@^5.0.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e"
@@ -3764,66 +3071,62 @@ merge-stream@^2.0.0:
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
-merge2@^1.3.0, merge2@^1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
- integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
-
-metro-babel-transformer@0.81.5:
- version "0.81.5"
- resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.81.5.tgz#e4705b2b74bd0adf7b06e984ceba6fbda5b7803a"
- integrity sha512-oKCQuajU5srm+ZdDcFg86pG/U8hkSjBlkyFjz380SZ4TTIiI5F+OQB830i53D8hmqmcosa4wR/pnKv8y4Q3dLw==
+metro-babel-transformer@0.83.3:
+ version "0.83.3"
+ resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.83.3.tgz#d8c134615530c9ee61364526d44ca4bb0c5343ea"
+ integrity sha512-1vxlvj2yY24ES1O5RsSIvg4a4WeL7PFXgKOHvXTXiW0deLvQr28ExXj6LjwCCDZ4YZLhq6HddLpZnX4dEdSq5g==
dependencies:
"@babel/core" "^7.25.2"
flow-enums-runtime "^0.0.6"
- hermes-parser "0.25.1"
+ hermes-parser "0.32.0"
nullthrows "^1.1.1"
-metro-cache-key@0.81.5:
- version "0.81.5"
- resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.81.5.tgz#febf6f252973c64b2eb0a34bc985a7a76f54ee98"
- integrity sha512-lGWnGVm1UwO8faRZ+LXQUesZSmP1LOg14OVR+KNPBip8kbMECbQJ8c10nGesw28uQT7AE0lwQThZPXlxDyCLKQ==
+metro-cache-key@0.83.3:
+ version "0.83.3"
+ resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.83.3.tgz#ae6c5d4eb1ad8d06a92bf7294ca730a8d880b573"
+ integrity sha512-59ZO049jKzSmvBmG/B5bZ6/dztP0ilp0o988nc6dpaDsU05Cl1c/lRf+yx8m9WW/JVgbmfO5MziBU559XjI5Zw==
dependencies:
flow-enums-runtime "^0.0.6"
-metro-cache@0.81.5:
- version "0.81.5"
- resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.81.5.tgz#6b9abb0a24eff1d5b3898420e5c3615613adef06"
- integrity sha512-wOsXuEgmZMZ5DMPoz1pEDerjJ11AuMy9JifH4yNW7NmWS0ghCRqvDxk13LsElzLshey8C+my/tmXauXZ3OqZgg==
+metro-cache@0.83.3:
+ version "0.83.3"
+ resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.83.3.tgz#f1245cc48570c47d8944495e61d67f0228f10172"
+ integrity sha512-3jo65X515mQJvKqK3vWRblxDEcgY55Sk3w4xa6LlfEXgQ9g1WgMh9m4qVZVwgcHoLy0a2HENTPCCX4Pk6s8c8Q==
dependencies:
exponential-backoff "^3.1.1"
flow-enums-runtime "^0.0.6"
- metro-core "0.81.5"
+ https-proxy-agent "^7.0.5"
+ metro-core "0.83.3"
-metro-config@0.81.5, metro-config@^0.81.0:
- version "0.81.5"
- resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.81.5.tgz#2e7c25cb8aa50103fcbe15de4c1948100cb3be96"
- integrity sha512-oDRAzUvj6RNRxratFdcVAqtAsg+T3qcKrGdqGZFUdwzlFJdHGR9Z413sW583uD2ynsuOjA2QB6US8FdwiBdNKg==
+metro-config@0.83.3, metro-config@^0.83.1:
+ version "0.83.3"
+ resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.83.3.tgz#a30e7a69b5cf8c4ac4c4b68b1b4c33649ae129a2"
+ integrity sha512-mTel7ipT0yNjKILIan04bkJkuCzUUkm2SeEaTads8VfEecCh+ltXchdq6DovXJqzQAXuR2P9cxZB47Lg4klriA==
dependencies:
connect "^3.6.5"
- cosmiconfig "^5.0.5"
flow-enums-runtime "^0.0.6"
jest-validate "^29.7.0"
- metro "0.81.5"
- metro-cache "0.81.5"
- metro-core "0.81.5"
- metro-runtime "0.81.5"
+ metro "0.83.3"
+ metro-cache "0.83.3"
+ metro-core "0.83.3"
+ metro-runtime "0.83.3"
+ yaml "^2.6.1"
-metro-core@0.81.5, metro-core@^0.81.0:
- version "0.81.5"
- resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.81.5.tgz#cf22e8e5eca63184fd43a6cce85aafa5320f1979"
- integrity sha512-+2R0c8ByfV2N7CH5wpdIajCWa8escUFd8TukfoXyBq/vb6yTCsznoA25FhNXJ+MC/cz1L447Zj3vdUfCXIZBwg==
+metro-core@0.83.3, metro-core@^0.83.1:
+ version "0.83.3"
+ resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.83.3.tgz#007e93f7d1983777da8988dfb103ad897c9835b8"
+ integrity sha512-M+X59lm7oBmJZamc96usuF1kusd5YimqG/q97g4Ac7slnJ3YiGglW5CsOlicTR5EWf8MQFxxjDoB6ytTqRe8Hw==
dependencies:
flow-enums-runtime "^0.0.6"
lodash.throttle "^4.1.1"
- metro-resolver "0.81.5"
+ metro-resolver "0.83.3"
-metro-file-map@0.81.5:
- version "0.81.5"
- resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.81.5.tgz#b74ef018e5195de636ec04c0eea2040dd26ff7eb"
- integrity sha512-mW1PKyiO3qZvjeeVjj1brhkmIotObA3/9jdbY1fQQYvEWM6Ml7bN/oJCRDGn2+bJRlG+J8pwyJ+DgdrM4BsKyg==
+metro-file-map@0.83.3:
+ version "0.83.3"
+ resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.83.3.tgz#3d79fbb1d379ab178dd895ce54cb5ecb183d74a2"
+ integrity sha512-jg5AcyE0Q9Xbbu/4NAwwZkmQn7doJCKGW0SLeSJmzNB9Z24jBe0AL2PHNMy4eu0JiKtNWHz9IiONGZWq7hjVTA==
dependencies:
- debug "^2.2.0"
+ debug "^4.4.0"
fb-watchman "^2.0.0"
flow-enums-runtime "^0.0.6"
graceful-fs "^4.2.4"
@@ -3833,61 +3136,61 @@ metro-file-map@0.81.5:
nullthrows "^1.1.1"
walker "^1.0.7"
-metro-minify-terser@0.81.5:
- version "0.81.5"
- resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.81.5.tgz#b24c76925131db6e370ca9a6ea39c44376d44985"
- integrity sha512-/mn4AxjANnsSS3/Bb+zA1G5yIS5xygbbz/OuPaJYs0CPcZCaWt66D+65j4Ft/nJkffUxcwE9mk4ubpkl3rjgtw==
+metro-minify-terser@0.83.3:
+ version "0.83.3"
+ resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.83.3.tgz#c1c70929c86b14c8bf03e6321b4f9310bc8dbe87"
+ integrity sha512-O2BmfWj6FSfzBLrNCXt/rr2VYZdX5i6444QJU0fFoc7Ljg+Q+iqebwE3K0eTvkI6TRjELsXk1cjU+fXwAR4OjQ==
dependencies:
flow-enums-runtime "^0.0.6"
terser "^5.15.0"
-metro-resolver@0.81.5:
- version "0.81.5"
- resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.81.5.tgz#8dacac645fbd43fa531532eca44bf33ab1977329"
- integrity sha512-6BX8Nq3g3go3FxcyXkVbWe7IgctjDTk6D9flq+P201DfHHQ28J+DWFpVelFcrNTn4tIfbP/Bw7u/0g2BGmeXfQ==
+metro-resolver@0.83.3:
+ version "0.83.3"
+ resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.83.3.tgz#06207bdddc280b9335722a8c992aeec017413942"
+ integrity sha512-0js+zwI5flFxb1ktmR///bxHYg7OLpRpWZlBBruYG8OKYxeMP7SV0xQ/o/hUelrEMdK4LJzqVtHAhBm25LVfAQ==
dependencies:
flow-enums-runtime "^0.0.6"
-metro-runtime@0.81.5, metro-runtime@^0.81.0:
- version "0.81.5"
- resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.81.5.tgz#0fe4ae028c9d30f8a035d5d2155fc5302dbc9f09"
- integrity sha512-M/Gf71ictUKP9+77dV/y8XlAWg7xl76uhU7ggYFUwEdOHHWPG6gLBr1iiK0BmTjPFH8yRo/xyqMli4s3oGorPQ==
+metro-runtime@0.83.3, metro-runtime@^0.83.1:
+ version "0.83.3"
+ resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.83.3.tgz#ff504df5d93f38b1af396715b327e589ba8d184d"
+ integrity sha512-JHCJb9ebr9rfJ+LcssFYA2x1qPYuSD/bbePupIGhpMrsla7RCwC/VL3yJ9cSU+nUhU4c9Ixxy8tBta+JbDeZWw==
dependencies:
"@babel/runtime" "^7.25.0"
flow-enums-runtime "^0.0.6"
-metro-source-map@0.81.5, metro-source-map@^0.81.0:
- version "0.81.5"
- resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.81.5.tgz#54415de745851a2e60b44e4aafe548c9c42dcf19"
- integrity sha512-Jz+CjvCKLNbJZYJTBeN3Kq9kIJf6b61MoLBdaOQZJ5Ajhw6Pf95Nn21XwA8BwfUYgajsi6IXsp/dTZsYJbN00Q==
+metro-source-map@0.83.3, metro-source-map@^0.83.1:
+ version "0.83.3"
+ resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.83.3.tgz#04bb464f7928ea48bcdfd18912c8607cf317c898"
+ integrity sha512-xkC3qwUBh2psVZgVavo8+r2C9Igkk3DibiOXSAht1aYRRcztEZNFtAMtfSB7sdO2iFMx2Mlyu++cBxz/fhdzQg==
dependencies:
"@babel/traverse" "^7.25.3"
"@babel/traverse--for-generate-function-map" "npm:@babel/traverse@^7.25.3"
"@babel/types" "^7.25.2"
flow-enums-runtime "^0.0.6"
invariant "^2.2.4"
- metro-symbolicate "0.81.5"
+ metro-symbolicate "0.83.3"
nullthrows "^1.1.1"
- ob1 "0.81.5"
+ ob1 "0.83.3"
source-map "^0.5.6"
vlq "^1.0.0"
-metro-symbolicate@0.81.5:
- version "0.81.5"
- resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.81.5.tgz#393cf0244011a39ab2242a7b94672949511bbd6c"
- integrity sha512-X3HV3n3D6FuTE11UWFICqHbFMdTavfO48nXsSpnNGFkUZBexffu0Xd+fYKp+DJLNaQr3S+lAs8q9CgtDTlRRuA==
+metro-symbolicate@0.83.3:
+ version "0.83.3"
+ resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.83.3.tgz#67af03950f0dfe19a7c059e3983e39a31e95d03a"
+ integrity sha512-F/YChgKd6KbFK3eUR5HdUsfBqVsanf5lNTwFd4Ca7uuxnHgBC3kR/Hba/RGkenR3pZaGNp5Bu9ZqqP52Wyhomw==
dependencies:
flow-enums-runtime "^0.0.6"
invariant "^2.2.4"
- metro-source-map "0.81.5"
+ metro-source-map "0.83.3"
nullthrows "^1.1.1"
source-map "^0.5.6"
vlq "^1.0.0"
-metro-transform-plugins@0.81.5:
- version "0.81.5"
- resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.81.5.tgz#1111c7effa632f36a042e6c4f63a79d9b80aa717"
- integrity sha512-MmHhVx/1dJC94FN7m3oHgv5uOjKH8EX8pBeu1pnPMxbJrx6ZuIejO0k84zTSaQTZ8RxX1wqwzWBpXAWPjEX8mA==
+metro-transform-plugins@0.83.3:
+ version "0.83.3"
+ resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.83.3.tgz#2c59ba841e269363cf3acb13138cb992f0c75013"
+ integrity sha512-eRGoKJU6jmqOakBMH5kUB7VitEWiNrDzBHpYbkBXW7C5fUGeOd2CyqrosEzbMK5VMiZYyOcNFEphvxk3OXey2A==
dependencies:
"@babel/core" "^7.25.2"
"@babel/generator" "^7.25.0"
@@ -3896,29 +3199,29 @@ metro-transform-plugins@0.81.5:
flow-enums-runtime "^0.0.6"
nullthrows "^1.1.1"
-metro-transform-worker@0.81.5:
- version "0.81.5"
- resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.81.5.tgz#095da62f4411b3076287e6a874739dcfa9a6c5a8"
- integrity sha512-lUFyWVHa7lZFRSLJEv+m4jH8WrR5gU7VIjUlg4XmxQfV8ngY4V10ARKynLhMYPeQGl7Qvf+Ayg0eCZ272YZ4Mg==
+metro-transform-worker@0.83.3:
+ version "0.83.3"
+ resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.83.3.tgz#ca6ae4a02b0f61b33299e6e56bacaba32dcd607f"
+ integrity sha512-Ztekew9t/gOIMZX1tvJOgX7KlSLL5kWykl0Iwu2cL2vKMKVALRl1hysyhUw0vjpAvLFx+Kfq9VLjnHIkW32fPA==
dependencies:
"@babel/core" "^7.25.2"
"@babel/generator" "^7.25.0"
"@babel/parser" "^7.25.3"
"@babel/types" "^7.25.2"
flow-enums-runtime "^0.0.6"
- metro "0.81.5"
- metro-babel-transformer "0.81.5"
- metro-cache "0.81.5"
- metro-cache-key "0.81.5"
- metro-minify-terser "0.81.5"
- metro-source-map "0.81.5"
- metro-transform-plugins "0.81.5"
+ metro "0.83.3"
+ metro-babel-transformer "0.83.3"
+ metro-cache "0.83.3"
+ metro-cache-key "0.83.3"
+ metro-minify-terser "0.83.3"
+ metro-source-map "0.83.3"
+ metro-transform-plugins "0.83.3"
nullthrows "^1.1.1"
-metro@0.81.5, metro@^0.81.0:
- version "0.81.5"
- resolved "https://registry.yarnpkg.com/metro/-/metro-0.81.5.tgz#965159d72439a99ccc7bed7a480ee81128fd4b0e"
- integrity sha512-YpFF0DDDpDVygeca2mAn7K0+us+XKmiGk4rIYMz/CRdjFoCGqAei/IQSpV0UrGfQbToSugpMQeQJveaWSH88Hg==
+metro@0.83.3, metro@^0.83.1:
+ version "0.83.3"
+ resolved "https://registry.yarnpkg.com/metro/-/metro-0.83.3.tgz#1e7e04c15519af746f8932c7f9c553d92c39e922"
+ integrity sha512-+rP+/GieOzkt97hSJ0MrPOuAH/jpaS21ZDvL9DJ35QYRDlQcwzcvUlGUf79AnQxq/2NPiS/AULhhM4TKutIt8Q==
dependencies:
"@babel/code-frame" "^7.24.7"
"@babel/core" "^7.25.2"
@@ -3931,28 +3234,28 @@ metro@0.81.5, metro@^0.81.0:
chalk "^4.0.0"
ci-info "^2.0.0"
connect "^3.6.5"
- debug "^2.2.0"
+ debug "^4.4.0"
error-stack-parser "^2.0.6"
flow-enums-runtime "^0.0.6"
graceful-fs "^4.2.4"
- hermes-parser "0.25.1"
+ hermes-parser "0.32.0"
image-size "^1.0.2"
invariant "^2.2.4"
jest-worker "^29.7.0"
jsc-safe-url "^0.2.2"
lodash.throttle "^4.1.1"
- metro-babel-transformer "0.81.5"
- metro-cache "0.81.5"
- metro-cache-key "0.81.5"
- metro-config "0.81.5"
- metro-core "0.81.5"
- metro-file-map "0.81.5"
- metro-resolver "0.81.5"
- metro-runtime "0.81.5"
- metro-source-map "0.81.5"
- metro-symbolicate "0.81.5"
- metro-transform-plugins "0.81.5"
- metro-transform-worker "0.81.5"
+ metro-babel-transformer "0.83.3"
+ metro-cache "0.83.3"
+ metro-cache-key "0.83.3"
+ metro-config "0.83.3"
+ metro-core "0.83.3"
+ metro-file-map "0.83.3"
+ metro-resolver "0.83.3"
+ metro-runtime "0.83.3"
+ metro-source-map "0.83.3"
+ metro-symbolicate "0.83.3"
+ metro-transform-plugins "0.83.3"
+ metro-transform-worker "0.83.3"
mime-types "^2.1.27"
nullthrows "^1.1.1"
serialize-error "^2.1.0"
@@ -3961,7 +3264,7 @@ metro@0.81.5, metro@^0.81.0:
ws "^7.5.10"
yargs "^17.6.2"
-micromatch@^4.0.4, micromatch@^4.0.8:
+micromatch@^4.0.4:
version "4.0.8"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
@@ -3979,7 +3282,7 @@ mime-db@1.52.0:
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5"
integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==
-mime-types@^2.1.27, mime-types@^2.1.35, mime-types@~2.1.34:
+mime-types@^2.1.27, mime-types@~2.1.34:
version "2.1.35"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
@@ -3996,84 +3299,45 @@ mimic-fn@^1.0.0:
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
-mimic-fn@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
- integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+minimatch@^10.1.1:
+ version "10.1.1"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.1.1.tgz#e6e61b9b0c1dcab116b5a7d1458e8b6ae9e73a55"
+ integrity sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==
+ dependencies:
+ "@isaacs/brace-expansion" "^5.0.0"
-minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1:
+minimatch@^3.0.4, minimatch@^3.1.1:
version "3.1.2"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
dependencies:
brace-expansion "^1.1.7"
-minimatch@^9.0.4:
+minimatch@^9.0.0:
version "9.0.5"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5"
integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
dependencies:
brace-expansion "^2.0.1"
-minimist@^1.2.0, minimist@^1.2.6:
+minimist@^1.2.0:
version "1.2.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
-minipass-collect@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863"
- integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==
- dependencies:
- minipass "^7.0.3"
-
-minipass-flush@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373"
- integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==
- dependencies:
- minipass "^3.0.0"
-
-minipass-pipeline@^1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c"
- integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==
- dependencies:
- minipass "^3.0.0"
-
-minipass@^3.0.0:
- version "3.3.6"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a"
- integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==
- dependencies:
- yallist "^4.0.0"
-
-minipass@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d"
- integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
-
-"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3, minipass@^7.1.2:
+minipass@^7.0.4, minipass@^7.1.2:
version "7.1.2"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707"
integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
-minizlib@^2.1.1:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
- integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
- dependencies:
- minipass "^3.0.0"
- yallist "^4.0.0"
-
-mkdirp@^0.5.1:
- version "0.5.6"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
- integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
+minizlib@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.1.0.tgz#6ad76c3a8f10227c9b51d1c9ac8e30b27f5a251c"
+ integrity sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==
dependencies:
- minimist "^1.2.6"
+ minipass "^7.1.2"
-mkdirp@^1.0.3, mkdirp@^1.0.4:
+mkdirp@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
@@ -4112,36 +3376,19 @@ negotiator@~0.6.4:
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7"
integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==
-neo-async@^2.5.0:
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
- integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
-
nested-error-stacks@~2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz#d2cc9fc5235ddb371fc44d506234339c8e4b0a4b"
integrity sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==
-nice-try@^1.0.4:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
- integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
-
-node-dir@^0.1.17:
- version "0.1.17"
- resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5"
- integrity sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==
- dependencies:
- minimatch "^3.0.2"
-
-node-fetch@^2.2.0, node-fetch@^2.6.1, node-fetch@^2.7.0:
+node-fetch@^2.7.0:
version "2.7.0"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d"
integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==
dependencies:
whatwg-url "^5.0.0"
-node-forge@^1, node-forge@^1.2.1, node-forge@^1.3.1:
+node-forge@^1.2.1, node-forge@^1.3.1:
version "1.3.3"
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.3.tgz#0ad80f6333b3a0045e827ac20b7f735f93716751"
integrity sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==
@@ -4171,33 +3418,19 @@ npm-package-arg@^11.0.0:
semver "^7.3.5"
validate-npm-package-name "^5.0.0"
-npm-run-path@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
- integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==
- dependencies:
- path-key "^2.0.0"
-
-npm-run-path@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
- integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
- dependencies:
- path-key "^3.0.0"
-
nullthrows@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1"
integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==
-ob1@0.81.5:
- version "0.81.5"
- resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.81.5.tgz#1e14153d75b124f967f308b138239bba17ff5a77"
- integrity sha512-iNpbeXPLmaiT9I5g16gFFFjsF3sGxLpYG2EGP3dfFB4z+l9X60mp/yRzStHhMtuNt8qmf7Ww80nOPQHngHhnIQ==
+ob1@0.83.3:
+ version "0.83.3"
+ resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.83.3.tgz#2208e20c9070e9beff3ad067f2db458fa6b07014"
+ integrity sha512-egUxXCDwoWG06NGCS5s5AdcpnumHKJlfd3HH06P3m9TEMwwScfcY35wpQxbm9oHof+dM/lVH9Rfyu1elTVelSA==
dependencies:
flow-enums-runtime "^0.0.6"
-object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
+object-assign@^4.0.1, object-assign@^4.1.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
@@ -4221,7 +3454,7 @@ on-headers@~1.1.0:
resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.1.0.tgz#59da4f91c45f5f989c6e4bcedc5a3b0aed70ff65"
integrity sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==
-once@^1.3.0, once@^1.3.1, once@^1.4.0:
+once@^1.3.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
@@ -4235,13 +3468,6 @@ onetime@^2.0.0:
dependencies:
mimic-fn "^1.0.0"
-onetime@^5.1.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
- integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
- dependencies:
- mimic-fn "^2.1.0"
-
open@^7.0.3:
version "7.4.2"
resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321"
@@ -4271,11 +3497,6 @@ ora@^3.4.0:
strip-ansi "^5.2.0"
wcwidth "^1.0.1"
-p-finally@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
- integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==
-
p-limit@^2.0.0, p-limit@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
@@ -4311,31 +3532,11 @@ p-locate@^5.0.0:
dependencies:
p-limit "^3.0.2"
-p-map@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
- integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
- dependencies:
- aggregate-error "^3.0.0"
-
p-try@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
-package-json-from-dist@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505"
- integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==
-
-parse-json@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
- integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==
- dependencies:
- error-ex "^1.3.1"
- json-parse-better-errors "^1.0.1"
-
parse-png@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/parse-png/-/parse-png-2.1.0.tgz#2a42ad719fedf90f81c59ebee7ae59b280d6b338"
@@ -4363,12 +3564,7 @@ path-is-absolute@^1.0.0:
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
-path-key@^2.0.0, path-key@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
- integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==
-
-path-key@^3.0.0, path-key@^3.1.0:
+path-key@^3.1.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
@@ -4378,18 +3574,13 @@ path-parse@^1.0.5, path-parse@^1.0.7:
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
-path-scurry@^1.11.1:
- version "1.11.1"
- resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2"
- integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==
+path-scurry@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.1.tgz#4b6572376cfd8b811fca9cd1f5c24b3cbac0fe10"
+ integrity sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==
dependencies:
- lru-cache "^10.2.0"
- minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
-
-path-type@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
- integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+ lru-cache "^11.0.0"
+ minipass "^7.1.2"
picocolors@^1.0.0, picocolors@^1.1.1:
version "1.1.1"
@@ -4406,23 +3597,16 @@ picomatch@^3.0.1:
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-3.0.1.tgz#817033161def55ec9638567a2f3bbc876b3e7516"
integrity sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==
-pify@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
- integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+picomatch@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042"
+ integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==
-pirates@^4.0.1, pirates@^4.0.4, pirates@^4.0.6:
+pirates@^4.0.1, pirates@^4.0.4:
version "4.0.7"
resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22"
integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==
-pkg-dir@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
- integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
- dependencies:
- find-up "^3.0.0"
-
pkg-up@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5"
@@ -4504,23 +3688,6 @@ prompts@^2.3.2:
kleur "^3.0.3"
sisteransi "^1.0.5"
-prop-types@^15.8.1:
- version "15.8.1"
- resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
- integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
- dependencies:
- loose-envify "^1.4.0"
- object-assign "^4.1.1"
- react-is "^16.13.1"
-
-pump@^3.0.0:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.3.tgz#151d979f1a29668dc0025ec589a455b53282268d"
- integrity sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==
- dependencies:
- end-of-stream "^1.1.0"
- once "^1.3.1"
-
punycode@^2.1.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
@@ -4531,11 +3698,6 @@ qrcode-terminal@0.11.0:
resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz#ffc6c28a2fc0bfb47052b47e23f4f446a5fbdb9e"
integrity sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==
-queue-microtask@^1.2.2:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
- integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
-
queue@6.0.2:
version "6.0.2"
resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65"
@@ -4558,23 +3720,22 @@ rc@~1.2.7:
minimist "^1.2.0"
strip-json-comments "~2.0.1"
-react-devtools-core@^5.3.1:
- version "5.3.2"
- resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-5.3.2.tgz#d5df92f8ef2a587986d094ef2c47d84cf4ae46ec"
- integrity sha512-crr9HkVrDiJ0A4zot89oS0Cgv0Oa4OG1Em4jit3P3ZxZSKPMYyMjfwMqgcJna9o625g8oN87rBm8SWWrSTBZxg==
+react-devtools-core@^6.1.5:
+ version "6.1.5"
+ resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-6.1.5.tgz#c5eca79209dab853a03b2158c034c5166975feee"
+ integrity sha512-ePrwPfxAnB+7hgnEr8vpKxL9cmnp7F322t8oqcPshbIQQhDKgFDW4tjhF2wjVbdXF9O/nyuy3sQWd9JGpiLPvA==
dependencies:
shell-quote "^1.6.1"
ws "^7"
-react-dom@18.2.0:
- version "18.2.0"
- resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
- integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
+react-dom@19.1.0:
+ version "19.1.0"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.1.0.tgz#133558deca37fa1d682708df8904b25186793623"
+ integrity sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==
dependencies:
- loose-envify "^1.1.0"
- scheduler "^0.23.0"
+ scheduler "^0.26.0"
-react-is@^16.13.1:
+react-is@^16.7.0:
version "16.13.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
@@ -4584,58 +3745,93 @@ react-is@^18.0.0:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e"
integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==
-react-native-web@~0.19.0:
- version "0.19.13"
- resolved "https://registry.yarnpkg.com/react-native-web/-/react-native-web-0.19.13.tgz#2d84849bf0251ec0e3a8072fda7f9a7c29375331"
- integrity sha512-etv3bN8rJglrRCp/uL4p7l8QvUNUC++QwDbdZ8CB7BvZiMvsxfFIRM1j04vxNldG3uo2puRd6OSWR3ibtmc29A==
+react-native-gesture-handler@~2.28.0:
+ version "2.28.0"
+ resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-2.28.0.tgz#07fb4f5eae72f810aac3019b060d26c1835bfd0c"
+ integrity sha512-0msfJ1vRxXKVgTgvL+1ZOoYw3/0z1R+Ked0+udoJhyplC2jbVKIJ8Z1bzWdpQRCV3QcQ87Op0zJVE5DhKK2A0A==
+ dependencies:
+ "@egjs/hammerjs" "^2.0.17"
+ hoist-non-react-statics "^3.3.0"
+ invariant "^2.2.4"
+
+react-native-is-edge-to-edge@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/react-native-is-edge-to-edge/-/react-native-is-edge-to-edge-1.2.1.tgz#64e10851abd9d176cbf2b40562f751622bde3358"
+ integrity sha512-FLbPWl/MyYQWz+KwqOZsSyj2JmLKglHatd3xLZWskXOpRaio4LfEDEz8E/A6uD8QoTHW6Aobw1jbEwK7KMgR7Q==
+
+react-native-reanimated@~4.1.1:
+ version "4.1.6"
+ resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-4.1.6.tgz#9d3d06416eaf48ab25594611185f66b34e404291"
+ integrity sha512-F+ZJBYiok/6Jzp1re75F/9aLzkgoQCOh4yxrnwATa8392RvM3kx+fiXXFvwcgE59v48lMwd9q0nzF1oJLXpfxQ==
+ dependencies:
+ react-native-is-edge-to-edge "^1.2.1"
+ semver "7.7.2"
+
+react-native-web@~0.21.0:
+ version "0.21.2"
+ resolved "https://registry.yarnpkg.com/react-native-web/-/react-native-web-0.21.2.tgz#0f6983dfea600d9cc1c66fda87ff9ca585eaa647"
+ integrity sha512-SO2t9/17zM4iEnFvlu2DA9jqNbzNhoUP+AItkoCOyFmDMOhUnBBznBDCYN92fGdfAkfQlWzPoez6+zLxFNsZEg==
dependencies:
"@babel/runtime" "^7.18.6"
"@react-native/normalize-colors" "^0.74.1"
fbjs "^3.0.4"
- inline-style-prefixer "^6.0.1"
+ inline-style-prefixer "^7.0.1"
memoize-one "^6.0.0"
nullthrows "^1.1.1"
postcss-value-parser "^4.2.0"
styleq "^0.1.3"
-react-native@0.76.9:
- version "0.76.9"
- resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.76.9.tgz#68cdfbe75a5c02417ac0eefbb28894a1adc330a2"
- integrity sha512-+LRwecWmTDco7OweGsrECIqJu0iyrREd6CTCgC/uLLYipiHvk+MH9nd6drFtCw/6Blz6eoKTcH9YTTJusNtrWg==
- dependencies:
- "@jest/create-cache-key-function" "^29.6.3"
- "@react-native/assets-registry" "0.76.9"
- "@react-native/codegen" "0.76.9"
- "@react-native/community-cli-plugin" "0.76.9"
- "@react-native/gradle-plugin" "0.76.9"
- "@react-native/js-polyfills" "0.76.9"
- "@react-native/normalize-colors" "0.76.9"
- "@react-native/virtualized-lists" "0.76.9"
+react-native-worklets@0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/react-native-worklets/-/react-native-worklets-0.5.1.tgz#d153242655e3757b6c62a474768831157316ad33"
+ integrity sha512-lJG6Uk9YuojjEX/tQrCbcbmpdLCSFxDK1rJlkDhgqkVi1KZzG7cdcBFQRqyNOOzR9Y0CXNuldmtWTGOyM0k0+w==
+ dependencies:
+ "@babel/plugin-transform-arrow-functions" "^7.0.0-0"
+ "@babel/plugin-transform-class-properties" "^7.0.0-0"
+ "@babel/plugin-transform-classes" "^7.0.0-0"
+ "@babel/plugin-transform-nullish-coalescing-operator" "^7.0.0-0"
+ "@babel/plugin-transform-optional-chaining" "^7.0.0-0"
+ "@babel/plugin-transform-shorthand-properties" "^7.0.0-0"
+ "@babel/plugin-transform-template-literals" "^7.0.0-0"
+ "@babel/plugin-transform-unicode-regex" "^7.0.0-0"
+ "@babel/preset-typescript" "^7.16.7"
+ convert-source-map "^2.0.0"
+ semver "7.7.2"
+
+react-native@0.81.5:
+ version "0.81.5"
+ resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.81.5.tgz#6c963f137d3979b22aef2d8482067775c8fe2fed"
+ integrity sha512-1w+/oSjEXZjMqsIvmkCRsOc8UBYv163bTWKTI8+1mxztvQPhCRYGTvZ/PL1w16xXHneIj/SLGfxWg2GWN2uexw==
+ dependencies:
+ "@jest/create-cache-key-function" "^29.7.0"
+ "@react-native/assets-registry" "0.81.5"
+ "@react-native/codegen" "0.81.5"
+ "@react-native/community-cli-plugin" "0.81.5"
+ "@react-native/gradle-plugin" "0.81.5"
+ "@react-native/js-polyfills" "0.81.5"
+ "@react-native/normalize-colors" "0.81.5"
+ "@react-native/virtualized-lists" "0.81.5"
abort-controller "^3.0.0"
anser "^1.4.9"
ansi-regex "^5.0.0"
babel-jest "^29.7.0"
- babel-plugin-syntax-hermes-parser "^0.23.1"
+ babel-plugin-syntax-hermes-parser "0.29.1"
base64-js "^1.5.1"
- chalk "^4.0.0"
commander "^12.0.0"
- event-target-shim "^5.0.1"
flow-enums-runtime "^0.0.6"
glob "^7.1.1"
invariant "^2.2.4"
- jest-environment-node "^29.6.3"
- jsc-android "^250231.0.0"
+ jest-environment-node "^29.7.0"
memoize-one "^5.0.0"
- metro-runtime "^0.81.0"
- metro-source-map "^0.81.0"
- mkdirp "^0.5.1"
+ metro-runtime "^0.83.1"
+ metro-source-map "^0.83.1"
nullthrows "^1.1.1"
pretty-format "^29.7.0"
promise "^8.3.0"
- react-devtools-core "^5.3.1"
+ react-devtools-core "^6.1.5"
react-refresh "^0.14.0"
regenerator-runtime "^0.13.2"
- scheduler "0.24.0-canary-efb381bbf-20230505"
+ scheduler "0.26.0"
semver "^7.1.3"
stacktrace-parser "^0.1.10"
whatwg-fetch "^3.0.0"
@@ -4647,27 +3843,10 @@ react-refresh@^0.14.0, react-refresh@^0.14.2:
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9"
integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==
-react@18.2.0:
- version "18.2.0"
- resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
- integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
- dependencies:
- loose-envify "^1.1.0"
-
-readline@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/readline/-/readline-1.3.0.tgz#c580d77ef2cfc8752b132498060dc9793a7ac01c"
- integrity sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==
-
-recast@^0.21.0:
- version "0.21.5"
- resolved "https://registry.yarnpkg.com/recast/-/recast-0.21.5.tgz#e8cd22bb51bcd6130e54f87955d33a2b2e57b495"
- integrity sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==
- dependencies:
- ast-types "0.15.2"
- esprima "~4.0.0"
- source-map "~0.6.1"
- tslib "^2.0.1"
+react@19.1.0:
+ version "19.1.0"
+ resolved "https://registry.yarnpkg.com/react/-/react-19.1.0.tgz#926864b6c48da7627f004795d6cce50e90793b75"
+ integrity sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==
regenerate-unicode-properties@^10.2.2:
version "10.2.2"
@@ -4710,11 +3889,6 @@ regjsparser@^0.13.0:
dependencies:
jsesc "~3.1.0"
-remove-trailing-slash@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz#be2285a59f39c74d1bce4f825950061915e3780d"
- integrity sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==
-
require-directory@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
@@ -4739,16 +3913,18 @@ reselect@^4.0.0:
resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524"
integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==
-resolve-from@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
- integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==
-
resolve-from@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+resolve-global@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255"
+ integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==
+ dependencies:
+ global-dirs "^0.1.1"
+
resolve-workspace-root@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/resolve-workspace-root/-/resolve-workspace-root-2.0.0.tgz#a0098daa0067cd0efa6eb525c57c8fb4a61e78f8"
@@ -4783,11 +3959,6 @@ restore-cursor@^2.0.0:
onetime "^2.0.0"
signal-exit "^3.0.2"
-reusify@^1.0.4:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f"
- integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==
-
rimraf@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
@@ -4795,20 +3966,6 @@ rimraf@^3.0.2:
dependencies:
glob "^7.1.3"
-rimraf@~2.6.2:
- version "2.6.3"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
- integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
- dependencies:
- glob "^7.1.3"
-
-run-parallel@^1.1.9:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
- integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
- dependencies:
- queue-microtask "^1.2.2"
-
safe-buffer@5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
@@ -4819,32 +3976,15 @@ sax@>=0.6.0:
resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.3.tgz#fcebae3b756cdc8428321805f4b70f16ec0ab5db"
integrity sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==
-scheduler@0.24.0-canary-efb381bbf-20230505:
- version "0.24.0-canary-efb381bbf-20230505"
- resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.24.0-canary-efb381bbf-20230505.tgz#5dddc60e29f91cd7f8b983d7ce4a99c2202d178f"
- integrity sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==
- dependencies:
- loose-envify "^1.1.0"
-
-scheduler@^0.23.0:
- version "0.23.2"
- resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3"
- integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==
- dependencies:
- loose-envify "^1.1.0"
+scheduler@0.26.0, scheduler@^0.26.0:
+ version "0.26.0"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.26.0.tgz#4ce8a8c2a2095f13ea11bf9a445be50c555d6337"
+ integrity sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==
-selfsigned@^2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0"
- integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==
- dependencies:
- "@types/node-forge" "^1.3.0"
- node-forge "^1"
-
-semver@^5.5.0, semver@^5.6.0:
- version "5.7.2"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
- integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
+semver@7.7.2:
+ version "7.7.2"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58"
+ integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==
semver@^6.3.0, semver@^6.3.1:
version "6.3.1"
@@ -4880,7 +4020,7 @@ serialize-error@^2.1.0:
resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a"
integrity sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==
-serve-static@^1.13.1:
+serve-static@^1.16.2:
version "1.16.3"
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.3.tgz#a97b74d955778583f3862a4f0b841eb4d5d78cf9"
integrity sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==
@@ -4900,20 +4040,6 @@ setprototypeof@~1.2.0:
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
-shallow-clone@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
- integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==
- dependencies:
- kind-of "^6.0.2"
-
-shebang-command@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
- integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==
- dependencies:
- shebang-regex "^1.0.0"
-
shebang-command@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
@@ -4921,11 +4047,6 @@ shebang-command@^2.0.0:
dependencies:
shebang-regex "^3.0.0"
-shebang-regex@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
- integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==
-
shebang-regex@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
@@ -4936,16 +4057,11 @@ shell-quote@^1.6.1:
resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.3.tgz#55e40ef33cf5c689902353a3d8cd1a6725f08b4b"
integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==
-signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7:
+signal-exit@^3.0.2, signal-exit@^3.0.7:
version "3.0.7"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
-signal-exit@^4.0.1:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
- integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
-
simple-plist@^1.1.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.3.1.tgz#16e1d8f62c6c9b691b8383127663d834112fb017"
@@ -4975,7 +4091,7 @@ source-map-js@^1.2.1:
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
-source-map-support@^0.5.16, source-map-support@~0.5.20, source-map-support@~0.5.21:
+source-map-support@~0.5.20, source-map-support@~0.5.21:
version "0.5.21"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
@@ -4988,7 +4104,7 @@ source-map@^0.5.6:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
-source-map@^0.6.0, source-map@~0.6.1:
+source-map@^0.6.0:
version "0.6.1"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
@@ -4998,13 +4114,6 @@ sprintf-js@~1.0.2:
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
-ssri@^10.0.0:
- version "10.0.6"
- resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.6.tgz#a8aade2de60ba2bce8688e3fa349bad05c7dc1e5"
- integrity sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==
- dependencies:
- minipass "^7.0.3"
-
stack-utils@^2.0.3:
version "2.0.6"
resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f"
@@ -5034,20 +4143,11 @@ statuses@~2.0.2:
resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382"
integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==
-stream-buffers@2.2.x, stream-buffers@~2.2.0:
+stream-buffers@2.2.x:
version "2.2.0"
resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4"
integrity sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==
-"string-width-cjs@npm:string-width@^4.2.0":
- version "4.2.3"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
- integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
- dependencies:
- emoji-regex "^8.0.0"
- is-fullwidth-code-point "^3.0.0"
- strip-ansi "^6.0.1"
-
string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
@@ -5057,22 +4157,6 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.1"
-string-width@^5.0.1, string-width@^5.1.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
- integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
- dependencies:
- eastasianwidth "^0.2.0"
- emoji-regex "^9.2.2"
- strip-ansi "^7.0.1"
-
-"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
- integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
- dependencies:
- ansi-regex "^5.0.1"
-
strip-ansi@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
@@ -5087,23 +4171,6 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1:
dependencies:
ansi-regex "^5.0.1"
-strip-ansi@^7.0.1:
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.2.tgz#132875abde678c7ea8d691533f2e7e22bb744dba"
- integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==
- dependencies:
- ansi-regex "^6.0.1"
-
-strip-eof@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
- integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==
-
-strip-final-newline@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
- integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
-
strip-json-comments@~2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
@@ -5119,17 +4186,17 @@ styleq@^0.1.3:
resolved "https://registry.yarnpkg.com/styleq/-/styleq-0.1.3.tgz#8efb2892debd51ce7b31dc09c227ad920decab71"
integrity sha512-3ZUifmCDCQanjeej1f6kyl/BeP/Vae5EYkQ9iJfUm/QwZvlgnZzyflqAsAWYURdtea8Vkvswu2GrC57h3qffcA==
-sucrase@3.35.0:
- version "3.35.0"
- resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263"
- integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==
+sucrase@~3.35.1:
+ version "3.35.1"
+ resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.1.tgz#4619ea50393fe8bd0ae5071c26abd9b2e346bfe1"
+ integrity sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==
dependencies:
"@jridgewell/gen-mapping" "^0.3.2"
commander "^4.0.0"
- glob "^10.3.10"
lines-and-columns "^1.1.6"
mz "^2.7.0"
pirates "^4.0.1"
+ tinyglobby "^0.2.11"
ts-interface-checker "^0.1.9"
supports-color@^5.3.0:
@@ -5166,41 +4233,22 @@ supports-preserve-symlinks-flag@^1.0.0:
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
-tar@^6.1.11, tar@^6.2.1:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a"
- integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==
+tar@^7.5.2:
+ version "7.5.2"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.2.tgz#115c061495ec51ff3c6745ff8f6d0871c5b1dedc"
+ integrity sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==
dependencies:
- chownr "^2.0.0"
- fs-minipass "^2.0.0"
- minipass "^5.0.0"
- minizlib "^2.1.1"
- mkdirp "^1.0.3"
- yallist "^4.0.0"
+ "@isaacs/fs-minipass" "^4.0.0"
+ chownr "^3.0.0"
+ minipass "^7.1.2"
+ minizlib "^3.1.0"
+ yallist "^5.0.0"
-temp-dir@^2.0.0, temp-dir@~2.0.0:
+temp-dir@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e"
integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==
-temp@^0.8.4:
- version "0.8.4"
- resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.4.tgz#8c97a33a4770072e0a05f919396c7665a7dd59f2"
- integrity sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==
- dependencies:
- rimraf "~2.6.2"
-
-tempy@^0.7.1:
- version "0.7.1"
- resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.7.1.tgz#5a654e6dbd1747cdd561efb112350b55cd9c1d46"
- integrity sha512-vXPxwOyaNVi9nyczO16mxmHGpl6ASC5/TVhRRHpqeYHvKQm58EaWNvZXxAhR0lYYnBOQFjXjhzeLsaXdjxLjRg==
- dependencies:
- del "^6.0.0"
- is-stream "^2.0.0"
- temp-dir "^2.0.0"
- type-fest "^0.16.0"
- unique-string "^2.0.0"
-
terminal-link@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994"
@@ -5247,6 +4295,14 @@ throat@^5.0.0:
resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b"
integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==
+tinyglobby@^0.2.11:
+ version "0.2.15"
+ resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2"
+ integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==
+ dependencies:
+ fdir "^6.5.0"
+ picomatch "^4.0.3"
+
tmpl@1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
@@ -5274,21 +4330,11 @@ ts-interface-checker@^0.1.9:
resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
-tslib@^2.0.1:
- version "2.8.1"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
- integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
-
type-detect@4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
-type-fest@^0.16.0:
- version "0.16.0"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860"
- integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==
-
type-fest@^0.21.3:
version "0.21.3"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
@@ -5299,10 +4345,10 @@ type-fest@^0.7.1:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48"
integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==
-typescript@^4.9.4:
- version "4.9.5"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a"
- integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==
+typescript@^5.3.3:
+ version "5.9.3"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f"
+ integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==
ua-parser-js@^1.0.35:
version "1.0.41"
@@ -5342,42 +4388,13 @@ unicode-property-aliases-ecmascript@^2.0.0:
resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz#301d4f8a43d2b75c97adfad87c9dd5350c9475d1"
integrity sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==
-unique-filename@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea"
- integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==
- dependencies:
- unique-slug "^4.0.0"
-
-unique-slug@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3"
- integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==
- dependencies:
- imurmurhash "^0.1.4"
-
-unique-string@^2.0.0, unique-string@~2.0.0:
+unique-string@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"
integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==
dependencies:
crypto-random-string "^2.0.0"
-universalify@^0.1.0:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
- integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
-
-universalify@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d"
- integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==
-
-universalify@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d"
- integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==
-
unpipe@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
@@ -5401,11 +4418,6 @@ uuid@^7.0.3:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b"
integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==
-uuid@^8.0.0, uuid@^8.3.2:
- version "8.3.2"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
- integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
-
validate-npm-package-name@^5.0.0:
version "5.0.1"
resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8"
@@ -5435,11 +4447,6 @@ wcwidth@^1.0.1:
dependencies:
defaults "^1.0.3"
-web-streams-polyfill@^3.3.2:
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b"
- integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==
-
webidl-conversions@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
@@ -5472,13 +4479,6 @@ whatwg-url@^5.0.0:
tr46 "~0.0.3"
webidl-conversions "^3.0.0"
-which@^1.2.9:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
- integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
- dependencies:
- isexe "^2.0.0"
-
which@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
@@ -5491,15 +4491,6 @@ wonka@^6.3.2:
resolved "https://registry.yarnpkg.com/wonka/-/wonka-6.3.5.tgz#33fa54ea700ff3e87b56fe32202112a9e8fea1a2"
integrity sha512-SSil+ecw6B4/Dm7Pf2sAshKQ5hWFvfyGlfPbEd6A14dOH6VDjrmbY86u6nZvy9omGwwIPFR8V41+of1EezgoUw==
-"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
- integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
- dependencies:
- ansi-styles "^4.0.0"
- string-width "^4.1.0"
- strip-ansi "^6.0.0"
-
wrap-ansi@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
@@ -5509,29 +4500,11 @@ wrap-ansi@^7.0.0:
string-width "^4.1.0"
strip-ansi "^6.0.0"
-wrap-ansi@^8.1.0:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
- integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
- dependencies:
- ansi-styles "^6.1.0"
- string-width "^5.0.1"
- strip-ansi "^7.0.1"
-
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
-write-file-atomic@^2.3.0:
- version "2.4.3"
- resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481"
- integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==
- dependencies:
- graceful-fs "^4.1.11"
- imurmurhash "^0.1.4"
- signal-exit "^3.0.2"
-
write-file-atomic@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd"
@@ -5573,11 +4546,6 @@ xml2js@0.6.0:
sax ">=0.6.0"
xmlbuilder "~11.0.0"
-xmlbuilder@^14.0.0:
- version "14.0.0"
- resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-14.0.0.tgz#876b5aec4f05ffd5feb97b0a871c855d16fbeb8c"
- integrity sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==
-
xmlbuilder@^15.1.1:
version "15.1.1"
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5"
@@ -5598,10 +4566,15 @@ yallist@^3.0.2:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
-yallist@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
- integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+yallist@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533"
+ integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==
+
+yaml@^2.6.1:
+ version "2.8.2"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.2.tgz#5694f25eca0ce9c3e7a9d9e00ce0ddabbd9e35c5"
+ integrity sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==
yargs-parser@^21.1.1:
version "21.1.1"
diff --git a/lib/commonjs/ReactNativeZoomableView.js b/lib/commonjs/ReactNativeZoomableView.js
index dff3f89..a21865b 100644
--- a/lib/commonjs/ReactNativeZoomableView.js
+++ b/lib/commonjs/ReactNativeZoomableView.js
@@ -3,10 +3,12 @@
Object.defineProperty(exports, "__esModule", {
value: true
});
-exports.default = exports.ReactNativeZoomableView = void 0;
+exports.ReactNativeZoomableView = void 0;
var _lodash = require("lodash");
var _react = _interopRequireWildcard(require("react"));
var _reactNative = require("react-native");
+var _reactNativeGestureHandler = require("react-native-gesture-handler");
+var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
var _animations = require("./animations");
var _components = require("./components");
var _StaticPin = require("./components/StaticPin");
@@ -17,16 +19,16 @@ var _getNextZoomStep = require("./helper/getNextZoomStep");
var _useDebugPoints = require("./hooks/useDebugPoints");
var _useLatestCallback = require("./hooks/useLatestCallback");
var _useZoomSubject = require("./hooks/useZoomSubject");
+var _ReactNativeZoomableViewContext = require("./ReactNativeZoomableViewContext");
+var _styles = require("./styles");
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 ReactNativeZoomableViewInner = (props, ref) => {
const {
wrapperRef: zoomSubjectWrapperRef,
measure: measureZoomSubject,
originalWidth,
originalHeight,
- originalPageX,
- originalPageY,
originalX,
originalY
} = (0, _useZoomSubject.useZoomSubject)();
@@ -39,12 +41,8 @@ const ReactNativeZoomableView = (props, ref) => {
debugPoints,
setDebugPoints,
setPinchDebugPoints
- } = (0, _useDebugPoints.useDebugPoints)({
- originalPageX,
- originalPageY
- });
- const gestureHandlers = (0, _react.useRef)();
- const doubleTapFirstTapReleaseTimestamp = (0, _react.useRef)();
+ } = (0, _useDebugPoints.useDebugPoints)();
+ const doubleTapFirstTapReleaseTimestamp = (0, _reactNativeReanimated.useSharedValue)(undefined);
props = (0, _lodash.defaults)({}, props, {
zoomEnabled: true,
panEnabled: true,
@@ -55,7 +53,7 @@ const ReactNativeZoomableView = (props, ref) => {
minZoom: 0.5,
pinchToZoomInSensitivity: 1,
pinchToZoomOutSensitivity: 1,
- movementSensibility: 1,
+ movementSensitivity: 1,
doubleTapDelay: 300,
zoomStep: 0.5,
onLongPress: undefined,
@@ -70,36 +68,67 @@ const ReactNativeZoomableView = (props, ref) => {
disablePanOnInitialZoom: false
});
const {
+ debug,
staticPinIcon,
children,
visualTouchFeedbackEnabled,
doubleTapDelay,
- staticPinPosition,
- onStaticPinLongPress,
- onStaticPinPress,
+ staticPinPosition: propStaticPinPosition,
+ contentWidth: propContentWidth,
+ contentHeight: propContentHeight,
+ onTransform,
+ onStaticPinPositionMove,
+ onPanResponderMove,
+ zoomEnabled: propZoomEnabled,
+ maxZoom: propMaxZoom,
+ minZoom: propMinZoom,
+ pinchToZoomInSensitivity: propPinchToZoomInSensitivity,
+ pinchToZoomOutSensitivity: propPinchToZoomOutSensitivity,
+ movementSensitivity: propMovementSensitivity,
+ panEnabled: propPanEnabled,
+ disablePanOnInitialZoom: propDisablePanOnInitialZoom,
+ initialZoom: propsInitialZoom,
pinProps
} = props;
- const panAnim = (0, _react.useRef)(new _reactNative.Animated.ValueXY({
- x: 0,
- y: 0
+ const offsetX = (0, _reactNativeReanimated.useSharedValue)(0);
+ const offsetY = (0, _reactNativeReanimated.useSharedValue)(0);
+ const zoom = (0, _reactNativeReanimated.useSharedValue)(1);
+ const inverseZoom = (0, _reactNativeReanimated.useDerivedValue)(() => 1 / zoom.value);
+ const inverseZoomStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => ({
+ transform: [{
+ scale: inverseZoom.value
+ }]
}));
- const zoomAnim = (0, _react.useRef)(new _reactNative.Animated.Value(1));
- const offsetX = (0, _react.useRef)(0);
- const offsetY = (0, _react.useRef)(0);
- const zoomLevel = (0, _react.useRef)(1);
- const lastGestureCenterPosition = (0, _react.useRef)(null);
- const lastGestureTouchDistance = (0, _react.useRef)(150);
- const gestureType = (0, _react.useRef)();
- const gestureStarted = (0, _react.useRef)(false);
+ const lastGestureCenterPosition = (0, _reactNativeReanimated.useSharedValue)(null);
+ const lastGestureTouchDistance = (0, _reactNativeReanimated.useSharedValue)(150);
+ const gestureStarted = (0, _reactNativeReanimated.useSharedValue)(false);
/**
* Last press time (used to evaluate whether user double tapped)
*/
- const longPressTimeout = (0, _react.useRef)();
- const onTransformInvocationInitialized = (0, _react.useRef)();
+ const longPressTimeout = (0, _reactNativeReanimated.useSharedValue)(undefined);
+ const onTransformInvocationInitialized = (0, _reactNativeReanimated.useSharedValue)(false);
const singleTapTimeoutId = (0, _react.useRef)();
- const touches = (0, _react.useRef)([]);
- const doubleTapFirstTap = (0, _react.useRef)();
+ const touches = (0, _reactNativeReanimated.useSharedValue)([]);
+ const doubleTapFirstTap = (0, _reactNativeReanimated.useSharedValue)(undefined);
+ const gestureType = (0, _reactNativeReanimated.useSharedValue)(undefined);
+ const staticPinPosition = (0, _reactNativeReanimated.useDerivedValue)(() => propStaticPinPosition);
+ const contentWidth = (0, _reactNativeReanimated.useDerivedValue)(() => propContentWidth);
+ const contentHeight = (0, _reactNativeReanimated.useDerivedValue)(() => propContentHeight);
+ const zoomEnabled = (0, _reactNativeReanimated.useDerivedValue)(() => propZoomEnabled);
+ const maxZoom = (0, _reactNativeReanimated.useDerivedValue)(() => propMaxZoom);
+ const minZoom = (0, _reactNativeReanimated.useDerivedValue)(() => propMinZoom);
+ const pinchToZoomInSensitivity = (0, _reactNativeReanimated.useDerivedValue)(() => propPinchToZoomInSensitivity);
+ const pinchToZoomOutSensitivity = (0, _reactNativeReanimated.useDerivedValue)(() => propPinchToZoomOutSensitivity);
+ const panEnabled = (0, _reactNativeReanimated.useDerivedValue)(() => propPanEnabled);
+ const disablePanOnInitialZoom = (0, _reactNativeReanimated.useDerivedValue)(() => propDisablePanOnInitialZoom);
+ const initialZoom = (0, _reactNativeReanimated.useDerivedValue)(() => propsInitialZoom);
+ const movementSensitivity = (0, _reactNativeReanimated.useDerivedValue)(() => propMovementSensitivity);
+ const onPanResponderGrant = (0, _useLatestCallback.useLatestCallback)(props.onPanResponderGrant || (() => undefined));
+ const onPanResponderEnd = (0, _useLatestCallback.useLatestCallback)(props.onPanResponderEnd || (() => undefined));
+ const onPanResponderTerminate = (0, _useLatestCallback.useLatestCallback)(props.onPanResponderTerminate || (() => undefined));
+ const onZoomEnd = (0, _useLatestCallback.useLatestCallback)(props.onZoomEnd || (() => undefined));
+ const onShiftingEnd = (0, _useLatestCallback.useLatestCallback)(props.onShiftingEnd || (() => undefined));
/**
* Returns additional information about components current state for external event hooks
@@ -107,50 +136,50 @@ const ReactNativeZoomableView = (props, ref) => {
* @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;
+ const _getZoomableViewEventObject = (overwriteObj = {}) => {
+ 'worklet';
+
+ return Object.assign({
+ zoomLevel: zoom.value,
+ offsetX: offsetX.value,
+ offsetY: offsetY.value,
+ originalHeight: originalHeight.value,
+ originalWidth: originalWidth.value
+ }, overwriteObj);
+ };
+ const _staticPinPosition = () => {
+ 'worklet';
+
+ if (!staticPinPosition.value) return;
+ if (!contentWidth.value || !contentHeight.value) return;
return (0, _coordinateConversion.viewportPositionToImagePosition)({
viewportPosition: {
- x: props.staticPinPosition.x,
- y: props.staticPinPosition.y
+ x: staticPinPosition.value.x,
+ y: staticPinPosition.value.y
},
imageSize: {
- height: props.contentHeight,
- width: props.contentWidth
+ height: contentHeight.value,
+ width: contentWidth.value
},
- zoomableEvent: {
- ..._getZoomableViewEventObject(),
- offsetX: offsetX.current,
- offsetY: offsetY.current,
- zoomLevel: zoomLevel.current
- }
+ zoomableEvent: _getZoomableViewEventObject({
+ offsetX: offsetX.value,
+ offsetY: offsetY.value,
+ zoomLevel: zoom.value
+ })
});
- });
+ };
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]);
+ touches.value.push(touch);
+ setStateTouches([...touches.value]);
});
const _removeTouch = (0, _useLatestCallback.useLatestCallback)(touch => {
- touches.current.splice(touches.current.indexOf(touch), 1);
- setStateTouches([...touches.current]);
+ touches.value.splice(touches.value.indexOf(touch), 1);
+ setStateTouches([...touches.value]);
});
const onStaticPinPositionChange = (0, _useLatestCallback.useLatestCallback)(props.onStaticPinPositionChange || (() => undefined));
const debouncedOnStaticPinPositionChange = (0, _react.useMemo)(() => (0, _lodash.debounce)(onStaticPinPositionChange, 100), []);
@@ -159,133 +188,92 @@ const ReactNativeZoomableView = (props, ref) => {
* try to invoke onTransform
* @private
*/
- const _invokeOnTransform = (0, _useLatestCallback.useLatestCallback)(() => {
+ const _invokeOnTransform = () => {
+ 'worklet';
+
const zoomableViewEvent = _getZoomableViewEventObject();
const position = _staticPinPosition();
if (!zoomableViewEvent.originalWidth || !zoomableViewEvent.originalHeight) return {
successful: false
};
- props.onTransform?.(zoomableViewEvent);
+ onTransform?.(zoomableViewEvent);
if (position) {
- props.onStaticPinPositionMove?.(position);
- debouncedOnStaticPinPositionChange(position);
+ onStaticPinPositionMove?.(position);
+ (0, _reactNativeReanimated.runOnJS)(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;
- if (props.initialOffsetX != null) offsetX.current = props.initialOffsetX;
- if (props.initialOffsetY != null) offsetY.current = props.initialOffsetY;
- panAnim.current.setValue({
- x: offsetX.current,
- y: offsetY.current
- });
- zoomAnim.current.setValue(zoomLevel.current);
- panAnim.current.addListener(({
- x,
- y
- }) => {
- offsetX.current = x;
- offsetY.current = y;
- });
- zoomAnim.current.addListener(({
- value
- }) => {
- zoomLevel.current = value;
- });
+ if (props.initialZoom) zoom.value = props.initialZoom;
+ if (props.initialOffsetX != null) offsetX.value = props.initialOffsetX;
+ if (props.initialOffsetY != null) offsetY.value = props.initialOffsetY;
}, []);
- const {
- zoomEnabled
- } = props;
- const initialZoom = (0, _react.useRef)(props.initialZoom);
- initialZoom.current = props.initialZoom;
(0, _react.useLayoutEffect)(() => {
- if (!zoomEnabled && initialZoom.current) {
- zoomLevel.current = initialZoom.current;
- zoomAnim.current.setValue(zoomLevel.current);
+ if (!propZoomEnabled && initialZoom.value) {
+ zoom.value = initialZoom.value;
}
- }, [zoomEnabled]);
- (0, _react.useLayoutEffect)(() => {
- if (!onTransformInvocationInitialized.current && _invokeOnTransform().successful) {
- panAnim.current.addListener(() => _invokeOnTransform());
- zoomAnim.current.addListener(() => _invokeOnTransform());
- onTransformInvocationInitialized.current = true;
+ }, [propZoomEnabled]);
+ (0, _reactNativeReanimated.useAnimatedReaction)(_getZoomableViewEventObject, () => {
+ if (!onTransformInvocationInitialized.value && _invokeOnTransform().successful) {
+ onTransformInvocationInitialized.value = true;
+ return;
}
+ if (onTransformInvocationInitialized.value) _invokeOnTransform();
},
- // FIXME: deps has implicit coupling with internal _invokeOnTransform logic
- [originalWidth, originalHeight]);
- const onLayout = (0, _react.useRef)(props.onLayout);
- onLayout.current = props.onLayout;
+ // _invokeOnTransform may cause a re-render, which would call the evaluation again,
+ // causing an infinite loop. This deps array prevents the re-evaluation caused
+ // by the re-render, thus breaking the infinite loop.
+ []);
+ const onLayout = (0, _useLatestCallback.useLatestCallback)(props.onLayout || (() => undefined));
// Handle original measurements changed
- (0, _react.useLayoutEffect)(() => {
+ (0, _reactNativeReanimated.useAnimatedReaction)(() => [originalHeight.value, originalWidth.value, originalX.value, originalY.value], () => {
// We use a custom `onLayout` event, so the clients can stay in-sync
// with when the internal measurements are actually saved to the state,
// thus helping them apply transformations at more accurate timings
const layout = {
- width: originalWidth,
- height: originalHeight,
- x: originalX,
- y: originalY
+ width: originalWidth.value,
+ height: originalHeight.value,
+ x: originalX.value,
+ y: originalY.value
};
- onLayout.current?.({
+ (0, _reactNativeReanimated.runOnJS)(onLayout)({
nativeEvent: {
layout
}
});
- if (onTransformInvocationInitialized.current) _invokeOnTransform();
- }, [originalHeight, originalWidth, originalPageX, originalPageY, originalX, originalY]);
+ });
// Handle staticPinPosition changed
(0, _react.useLayoutEffect)(() => {
- if (onTransformInvocationInitialized.current) _invokeOnTransform();
+ if (onTransformInvocationInitialized.value) _invokeOnTransform();
}, [props.staticPinPosition?.x, props.staticPinPosition?.y]);
-
- /**
- * Handles the start of touch events and checks for taps
- *
- * @param e
- * @param gestureState
- * @returns {boolean}
- *
- * @private
- */
- const _handleStartShouldSetPanResponder = (0, _useLatestCallback.useLatestCallback)((e, gestureState) => {
- if (props.onStartShouldSetPanResponder) {
- props.onStartShouldSetPanResponder(e, gestureState, _getZoomableViewEventObject(), false);
+ const scheduleLongPressTimeout = (0, _useLatestCallback.useLatestCallback)(e => {
+ if (props.onLongPress && props.longPressDuration) {
+ longPressTimeout.value = setTimeout(() => {
+ props.onLongPress?.(e, _getZoomableViewEventObject());
+ longPressTimeout.value = undefined;
+ }, props.longPressDuration);
}
-
- // Always set pan responder on start
- // of gesture so we can handle tap.
- // "Pan threshold validation" will be handled
- // in `onPanResponderMove` instead of in `onMoveShouldSetPanResponder`
- return true;
});
-
- /**
- * Calculates pinch distance
- *
- * @param e
- * @param gestureState
- * @private
- */
- const _handlePanResponderGrant = (0, _useLatestCallback.useLatestCallback)((e, gestureState) => {
- if (props.onLongPress) {
- e.persist();
- longPressTimeout.current = setTimeout(() => {
- props.onLongPress?.(e, gestureState, _getZoomableViewEventObject());
- longPressTimeout.current = undefined;
- }, props.longPressDuration);
+ const clearLongPressTimeout = (0, _useLatestCallback.useLatestCallback)(() => {
+ if (longPressTimeout.value) {
+ clearTimeout(longPressTimeout.value);
+ longPressTimeout.value = undefined;
}
- props.onPanResponderGrant?.(e, gestureState, _getZoomableViewEventObject());
- panAnim.current.stopAnimation();
- zoomAnim.current.stopAnimation();
- gestureStarted.current = true;
});
+ const _handlePanResponderGrant = e => {
+ 'worklet';
+
+ (0, _reactNativeReanimated.runOnJS)(scheduleLongPressTimeout)(e);
+ (0, _reactNativeReanimated.runOnJS)(onPanResponderGrant)(e, _getZoomableViewEventObject());
+ (0, _reactNativeReanimated.cancelAnimation)(zoom);
+ (0, _reactNativeReanimated.cancelAnimation)(offsetX);
+ (0, _reactNativeReanimated.cancelAnimation)(offsetY);
+ gestureStarted.value = true;
+ };
/**
* Calculates the amount the offset should shift since the last position during panning
@@ -294,105 +282,86 @@ const ReactNativeZoomableView = (props, ref) => {
*
* @private
*/
- const _calcOffsetShiftSinceLastGestureState = (0, _useLatestCallback.useLatestCallback)(gestureCenterPoint => {
- const {
- movementSensibility
- } = props;
+ const _calcOffsetShiftSinceLastGestureState = gestureCenterPoint => {
+ 'worklet';
+
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;
+ if (lastGestureCenterPosition.value && movementSensitivity.value) {
+ const dx = gestureCenterPoint.x - lastGestureCenterPosition.value.x;
+ const dy = gestureCenterPoint.y - lastGestureCenterPosition.value.y;
+ const shiftX = dx / zoom.value / movementSensitivity.value;
+ const shiftY = dy / zoom.value / movementSensitivity.value;
shift = {
x: shiftX,
y: shiftY
};
}
- lastGestureCenterPosition.current = gestureCenterPoint;
+ lastGestureCenterPosition.value = gestureCenterPoint;
return shift;
- });
+ };
/**
* 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;
- }
+ const _handlePinching = e => {
+ 'worklet';
+
+ if (!zoomEnabled.value) return;
+ const distance = (0, _helper.calcGestureTouchDistance)(e);
if (!distance) return;
- if (!lastGestureTouchDistance.current) return;
+ if (!lastGestureTouchDistance.value) 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;
+ const zoomGrowthFromLastGestureState = distance / lastGestureTouchDistance.value;
+ lastGestureTouchDistance.value = distance;
+ const pinchToZoomSensitivity = zoomGrowthFromLastGestureState < 1 ? pinchToZoomOutSensitivity.value : pinchToZoomInSensitivity.value;
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);
+ let newZoomLevel = zoom.value * (1 + deltaGrowthAdjustedBySensitivity);
// make sure max and min zoom levels are respected
- if (maxZoom != null && newZoomLevel > maxZoom) {
- newZoomLevel = maxZoom;
+ if (maxZoom.value != null && newZoomLevel > maxZoom.value) {
+ newZoomLevel = maxZoom.value;
}
- if (minZoom != null && newZoomLevel < minZoom) {
- newZoomLevel = minZoom;
+ if (minZoom.value != null && newZoomLevel < minZoom.value) {
+ newZoomLevel = minZoom.value;
}
- const gestureCenterPoint = (0, _helper.calcGestureCenterPoint)(e, gestureState);
+ const gestureCenterPoint = (0, _helper.calcGestureCenterPoint)(e);
if (!gestureCenterPoint) return;
let zoomCenter = {
- x: gestureCenterPoint.x - originalPageX,
- y: gestureCenterPoint.y - originalPageY
+ x: gestureCenterPoint.x,
+ y: gestureCenterPoint.y
};
- if (props.staticPinPosition) {
+ if (staticPinPosition.value) {
// When we use a static pin position, the zoom centre is the same as that position,
// otherwise the pin moves around way too much while zooming.
zoomCenter = {
- x: props.staticPinPosition.x,
- y: props.staticPinPosition.y
+ x: staticPinPosition.value.x,
+ y: staticPinPosition.value.y
};
}
// Uncomment to debug
- props.debug && setPinchDebugPoints(e, zoomCenter);
- const oldOffsetX = offsetX.current;
- const oldOffsetY = offsetY.current;
- const oldScale = zoomLevel.current;
+ debug && (0, _reactNativeReanimated.runOnJS)(setPinchDebugPoints)(e, zoomCenter);
+ const oldOffsetX = offsetX.value;
+ const oldOffsetY = offsetY.value;
+ const oldScale = zoom.value;
const newScale = newZoomLevel;
- if (!originalHeight || !originalWidth) return;
- let newOffsetY = (0, _helper.calcNewScaledOffsetForZoomCentering)(oldOffsetY, originalHeight, oldScale, newScale, zoomCenter.y);
- let newOffsetX = (0, _helper.calcNewScaledOffsetForZoomCentering)(oldOffsetX, originalWidth, oldScale, newScale, zoomCenter.x);
+ if (!originalHeight.value || !originalWidth.value) return;
+ let newOffsetY = (0, _helper.calcNewScaledOffsetForZoomCentering)(oldOffsetY, originalHeight.value, oldScale, newScale, zoomCenter.y);
+ let newOffsetX = (0, _helper.calcNewScaledOffsetForZoomCentering)(oldOffsetX, originalWidth.value, oldScale, newScale, zoomCenter.x);
const offsetShift = _calcOffsetShiftSinceLastGestureState(gestureCenterPoint);
if (offsetShift) {
newOffsetX += offsetShift.x;
newOffsetY += offsetShift.y;
}
- offsetX.current = newOffsetX;
- offsetY.current = newOffsetY;
- zoomLevel.current = newScale;
- panAnim.current.setValue({
- x: offsetX.current,
- y: offsetY.current
- });
- zoomAnim.current.setValue(zoomLevel.current);
- props.onZoomAfter?.(e, gestureState, _getZoomableViewEventObject());
- });
+ offsetX.value = newOffsetX;
+ offsetY.value = newOffsetY;
+ zoom.value = newScale;
+ };
/**
* Set the state to offset moved
@@ -401,23 +370,12 @@ const ReactNativeZoomableView = (props, ref) => {
* @param {number} newOffsetY
* @returns
*/
- const _setNewOffsetPosition = (0, _useLatestCallback.useLatestCallback)((newOffsetX, newOffsetY) => {
- const {
- onShiftingBefore,
- onShiftingAfter
- } = props;
- if (onShiftingBefore?.(null, null, _getZoomableViewEventObject())) {
- return;
- }
- offsetX.current = newOffsetX;
- offsetY.current = newOffsetY;
- panAnim.current.setValue({
- x: offsetX.current,
- y: offsetY.current
- });
- zoomAnim.current.setValue(zoomLevel.current);
- onShiftingAfter?.(null, null, _getZoomableViewEventObject());
- });
+ const _setNewOffsetPosition = (newOffsetX, newOffsetY) => {
+ 'worklet';
+
+ offsetX.value = newOffsetX;
+ offsetY.value = newOffsetY;
+ };
/**
* Handles movement by tap and move
@@ -426,28 +384,32 @@ const ReactNativeZoomableView = (props, ref) => {
*
* @private
*/
- const _handleShifting = (0, _useLatestCallback.useLatestCallback)(gestureState => {
+ const _handleShifting = e => {
+ 'worklet';
+
// Skips shifting if panEnabled is false or disablePanOnInitialZoom is true and we're on the initial zoom level
- if (!props.panEnabled || props.disablePanOnInitialZoom && zoomLevel.current === props.initialZoom) {
+ if (!panEnabled.value || disablePanOnInitialZoom.value && zoom.value === initialZoom.value) {
return;
}
const shift = _calcOffsetShiftSinceLastGestureState({
- x: gestureState.moveX,
- y: gestureState.moveY
+ x: e.allTouches[0].x,
+ y: e.allTouches[0].y
});
if (!shift) return;
- const newOffsetX = offsetX.current + shift.x;
- const newOffsetY = offsetY.current + shift.y;
- if (props.debug && originalPageX && originalPageY) {
- const x = gestureState.moveX - originalPageX;
- const y = gestureState.moveY - originalPageY;
- setDebugPoints([{
+ const newOffsetX = offsetX.value + shift.x;
+ const newOffsetY = offsetY.value + shift.y;
+ if (debug) {
+ const x = e.allTouches[0].x;
+ const y = e.allTouches[0].y;
+ (0, _reactNativeReanimated.runOnJS)(setDebugPoints)([{
x,
y
}]);
}
_setNewOffsetPosition(newOffsetX, newOffsetY);
- });
+ };
+ const prevZoom = (0, _reactNativeReanimated.useSharedValue)(1);
+ const zoomToDestination = (0, _reactNativeReanimated.useSharedValue)(undefined);
/**
* Zooms to a specific level. A "zoom center" can be provided, which specifies
@@ -462,38 +424,32 @@ const ReactNativeZoomableView = (props, ref) => {
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;
- });
- }
+
+ // == Trigger Pan Animation to preserve the zoom center while zooming ==
+ // See the "Zoom Animation Support" block more details
+ zoomToDestination.value = zoomCenter;
+ prevZoom.value = zoom.value;
// == Perform Zoom Animation ==
- (0, _animations.getZoomToAnimation)(zoomAnim.current, newZoomLevel).start(() => {
- zoomAnim.current.removeListener(listenerId);
- });
- // == Zoom Animation Ends ==
+ zoom.value = (0, _reactNativeReanimated.withTiming)(newZoomLevel, _animations.zoomToAnimation, () => {
+ 'worlet';
- props.onZoomAfter?.(null, null, _getZoomableViewEventObject());
+ // == Zoom Animation Ends ==
+ zoomToDestination.value = undefined;
+ (0, _reactNativeReanimated.runOnJS)(onZoomEnd)(undefined, _getZoomableViewEventObject());
+ });
return true;
});
+ // Zoom Animation Support:
+ // Adapt offsets when zoom level changes during zoomTo animation
+ (0, _reactNativeReanimated.useAnimatedReaction)(() => zoom.value, newZoom => {
+ if (!zoomToDestination.value) return;
+ offsetX.value = (0, _helper.calcNewScaledOffsetForZoomCentering)(offsetX.value, originalWidth.value, prevZoom.value, newZoom, zoomToDestination.value.x);
+ offsetY.value = (0, _helper.calcNewScaledOffsetForZoomCentering)(offsetY.value, originalHeight.value, prevZoom.value, newZoom, zoomToDestination.value.y);
+ prevZoom.value = newZoom;
+ });
+
/**
* Handles the double tap event
*
@@ -509,7 +465,7 @@ const ReactNativeZoomableView = (props, ref) => {
} = props;
onDoubleTapBefore?.(e, _getZoomableViewEventObject());
const nextZoomStep = (0, _getNextZoomStep.getNextZoomStep)({
- zoomLevel: zoomLevel.current,
+ zoomLevel: zoom.value,
zoomStep: props.zoomStep,
maxZoom: props.maxZoom,
initialZoom: props.initialZoom
@@ -518,8 +474,8 @@ const ReactNativeZoomableView = (props, ref) => {
// define new zoom position coordinates
const zoomPositionCoordinates = {
- x: e.nativeEvent.pageX - originalPageX,
- y: e.nativeEvent.pageY - originalPageY
+ x: e.allTouches[0].x,
+ y: e.allTouches[0].y
};
// if doubleTapZoomToCenter enabled -> always zoom to center instead
@@ -541,53 +497,54 @@ const ReactNativeZoomableView = (props, ref) => {
*
* @private
*/
- const _resolveAndHandleTap = (0, _useLatestCallback.useLatestCallback)(e => {
+ const _resolveAndHandleTap = e => {
const now = Date.now();
- if (doubleTapFirstTapReleaseTimestamp.current && props.doubleTapDelay && now - doubleTapFirstTapReleaseTimestamp.current < props.doubleTapDelay) {
- doubleTapFirstTap.current && _addTouch({
- ...doubleTapFirstTap.current,
+ if (doubleTapFirstTapReleaseTimestamp.value && props.doubleTapDelay && now - doubleTapFirstTapReleaseTimestamp.value < props.doubleTapDelay) {
+ doubleTapFirstTap.value && _addTouch({
+ ...doubleTapFirstTap.value,
id: now.toString(),
isSecondTap: true
});
singleTapTimeoutId.current && clearTimeout(singleTapTimeoutId.current);
- delete doubleTapFirstTapReleaseTimestamp.current;
+ delete doubleTapFirstTapReleaseTimestamp.value;
delete singleTapTimeoutId.current;
- delete doubleTapFirstTap.current;
+ delete doubleTapFirstTap.value;
_handleDoubleTap(e);
} else {
- doubleTapFirstTapReleaseTimestamp.current = now;
- doubleTapFirstTap.current = {
+ doubleTapFirstTapReleaseTimestamp.value = now;
+ doubleTapFirstTap.value = {
id: now.toString(),
- x: e.nativeEvent.pageX - originalPageX,
- y: e.nativeEvent.pageY - originalPageY
+ x: e.allTouches[0].x,
+ y: e.allTouches[0].y
};
- _addTouch(doubleTapFirstTap.current);
-
- // persist event so e.nativeEvent is preserved after a timeout delay
- e.persist();
+ _addTouch(doubleTapFirstTap.value);
singleTapTimeoutId.current = setTimeout(() => {
- delete doubleTapFirstTapReleaseTimestamp.current;
+ delete doubleTapFirstTapReleaseTimestamp.value;
delete singleTapTimeoutId.current;
// Pan to the tapped location
- if (props.staticPinPosition && doubleTapFirstTap.current) {
- const tapX = props.staticPinPosition.x - doubleTapFirstTap.current.x;
- const tapY = props.staticPinPosition.y - doubleTapFirstTap.current.y;
- _reactNative.Animated.timing(panAnim.current, {
- toValue: {
- x: offsetX.current + tapX / zoomLevel.current,
- y: offsetY.current + tapY / zoomLevel.current
- },
- useNativeDriver: true,
+ if (props.staticPinPosition && doubleTapFirstTap.value) {
+ const tapX = props.staticPinPosition.x - doubleTapFirstTap.value.x;
+ const tapY = props.staticPinPosition.y - doubleTapFirstTap.value.y;
+ const toX = offsetX.value + tapX / zoom.value;
+ const toY = offsetY.value + tapY / zoom.value;
+ const animationsDone = (0, _reactNativeReanimated.makeMutable)(0);
+ const done = () => {
+ 'worklet';
+
+ if (++animationsDone.value >= 2) (0, _reactNativeReanimated.runOnJS)(_updateStaticPin)();
+ };
+ offsetX.value = (0, _reactNativeReanimated.withTiming)(toX, {
duration: 200
- }).start(() => {
- _updateStaticPin();
- });
+ }, done);
+ offsetY.value = (0, _reactNativeReanimated.withTiming)(toY, {
+ duration: 200
+ }, done);
}
props.onSingleTap?.(e, _getZoomableViewEventObject());
}, props.doubleTapDelay);
}
- });
+ };
const publicMoveStaticPinTo = (0, _useLatestCallback.useLatestCallback)((position, duration) => {
const {
staticPinPosition,
@@ -595,28 +552,24 @@ const ReactNativeZoomableView = (props, ref) => {
contentHeight
} = props;
if (!staticPinPosition) return;
- if (!originalWidth || !originalHeight) return;
+ if (!originalWidth.value || !originalHeight.value) return;
if (!contentWidth || !contentHeight) return;
// Offset for the static pin
- const pinX = staticPinPosition.x - originalWidth / 2;
- const pinY = staticPinPosition.y - originalHeight / 2;
- offsetX.current = contentWidth / 2 - position.x + pinX / zoomLevel.current;
- offsetY.current = contentHeight / 2 - position.y + pinY / zoomLevel.current;
+ const pinX = staticPinPosition.x - originalWidth.value / 2;
+ const pinY = staticPinPosition.y - originalHeight.value / 2;
+ const newOffsetX = contentWidth / 2 - position.x + pinX / zoom.value;
+ const newOffsetY = contentHeight / 2 - position.y + pinY / zoom.value;
if (duration) {
- _reactNative.Animated.timing(panAnim.current, {
- toValue: {
- x: offsetX.current,
- y: offsetY.current
- },
- useNativeDriver: true,
+ offsetX.value = (0, _reactNativeReanimated.withTiming)(newOffsetX, {
duration
- }).start();
- } else {
- panAnim.current.setValue({
- x: offsetX.current,
- y: offsetY.current
});
+ offsetY.value = (0, _reactNativeReanimated.withTiming)(newOffsetY, {
+ duration
+ });
+ } else {
+ offsetX.value = newOffsetX;
+ offsetY.value = newOffsetY;
}
});
@@ -634,7 +587,7 @@ const ReactNativeZoomableView = (props, ref) => {
const publicZoomBy = (0, _useLatestCallback.useLatestCallback)(zoomLevelChange => {
// if no zoom level Change given -> just use zoom step
zoomLevelChange ||= props.zoomStep || 0;
- return publicZoomTo(zoomLevel.current + zoomLevelChange);
+ return publicZoomTo(zoom.value + zoomLevelChange);
});
/**
@@ -647,9 +600,9 @@ const ReactNativeZoomableView = (props, ref) => {
* @return {bool}
*/
const publicMoveTo = (0, _useLatestCallback.useLatestCallback)((newOffsetX, newOffsetY) => {
- if (!originalWidth || !originalHeight) return;
- const offsetX = (newOffsetX - originalWidth / 2) / zoomLevel.current;
- const offsetY = (newOffsetY - originalHeight / 2) / zoomLevel.current;
+ if (!originalWidth.value || !originalHeight.value) return;
+ const offsetX = (newOffsetX - originalWidth.value / 2) / zoom.value;
+ const offsetY = (newOffsetY - originalHeight.value / 2) / zoom.value;
_setNewOffsetPosition(-offsetX, -offsetY);
});
@@ -664,8 +617,8 @@ const ReactNativeZoomableView = (props, ref) => {
* @return {bool}
*/
const publicMoveBy = (0, _useLatestCallback.useLatestCallback)((offsetChangeX, offsetChangeY) => {
- const newOffsetX = (offsetX.current * zoomLevel.current - offsetChangeX) / zoomLevel.current;
- const newOffsetY = (offsetY.current * zoomLevel.current - offsetChangeY) / zoomLevel.current;
+ const newOffsetX = (offsetX.value * zoom.value - offsetChangeX) / zoom.value;
+ const newOffsetY = (offsetY.value * zoom.value - offsetChangeY) / zoom.value;
_setNewOffsetPosition(newOffsetX, newOffsetY);
});
(0, _react.useImperativeHandle)(ref, () => ({
@@ -675,7 +628,7 @@ const ReactNativeZoomableView = (props, ref) => {
moveBy: publicMoveBy,
moveStaticPinTo: publicMoveStaticPinTo,
get gestureStarted() {
- return gestureStarted.current;
+ return gestureStarted.value;
}
}));
@@ -687,28 +640,27 @@ const ReactNativeZoomableView = (props, ref) => {
*
* @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;
+ const _handlePanResponderEnd = e => {
+ 'worklet';
+
+ if (!gestureType.value) {
+ (0, _reactNativeReanimated.runOnJS)(_resolveAndHandleTap)(e);
}
- props.onPanResponderEnd?.(e, gestureState, _getZoomableViewEventObject());
- if (gestureType.current === 'pinch') {
- props.onZoomEnd?.(e, gestureState, _getZoomableViewEventObject());
- } else if (gestureType.current === 'shift') {
- props.onShiftingEnd?.(e, gestureState, _getZoomableViewEventObject());
+ (0, _reactNativeReanimated.runOnJS)(setDebugPoints)([]);
+ lastGestureCenterPosition.value = null;
+ (0, _reactNativeReanimated.runOnJS)(clearLongPressTimeout)();
+ (0, _reactNativeReanimated.runOnJS)(onPanResponderEnd)(e, _getZoomableViewEventObject());
+ if (gestureType.value === 'pinch') {
+ (0, _reactNativeReanimated.runOnJS)(onZoomEnd)(e, _getZoomableViewEventObject());
+ } else if (gestureType.value === 'shift') {
+ (0, _reactNativeReanimated.runOnJS)(onShiftingEnd)(e, _getZoomableViewEventObject());
}
- if (props.staticPinPosition) {
- _updateStaticPin();
+ if (staticPinPosition.value) {
+ (0, _reactNativeReanimated.runOnJS)(_updateStaticPin)();
}
- gestureType.current = undefined;
- gestureStarted.current = false;
- });
+ gestureType.value = undefined;
+ gestureStarted.value = false;
+ };
/**
* Handles the actual movement of our pan responder
@@ -718,144 +670,147 @@ const ReactNativeZoomableView = (props, ref) => {
*
* @private
*/
- const _handlePanResponderMove = (0, _useLatestCallback.useLatestCallback)((e, gestureState) => {
- if (props.onPanResponderMove) {
- if (props.onPanResponderMove(e, gestureState, _getZoomableViewEventObject())) {
- return false;
- }
+ const _handlePanResponderMove = (e, gestureState) => {
+ 'worklet';
+
+ if (onPanResponderMove?.(e, _getZoomableViewEventObject())) {
+ 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);
+ if (e.numberOfTouches <= 2) {
+ if (!gestureStarted.value) {
+ _handlePanResponderGrant(e);
}
} else {
- if (gestureStarted.current) {
- _handlePanResponderEnd(e, gestureState);
+ if (gestureStarted.value) {
+ _handlePanResponderEnd(e);
}
- return true;
+ return;
}
- if (gestureState.numberActiveTouches === 2) {
- if (longPressTimeout.current) {
- clearTimeout(longPressTimeout.current);
- longPressTimeout.current = undefined;
- }
+ if (e.numberOfTouches === 2) {
+ (0, _reactNativeReanimated.runOnJS)(clearLongPressTimeout)();
// 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);
+ if (gestureType.value !== 'pinch') {
+ lastGestureCenterPosition.value = (0, _helper.calcGestureCenterPoint)(e);
+ lastGestureTouchDistance.value = (0, _helper.calcGestureTouchDistance)(e);
}
+ gestureType.value = 'pinch';
+ _handlePinching(e);
+ } else if (e.numberOfTouches === 1) {
const {
dx,
dy
} = gestureState;
+ if (longPressTimeout.value && (Math.abs(dx) > 5 || Math.abs(dy) > 5)) {
+ (0, _reactNativeReanimated.runOnJS)(clearLongPressTimeout)();
+ }
+
+ // change some measurement states when switching gesture to ensure a smooth transition
+ if (gestureType.value !== 'shift') {
+ lastGestureCenterPosition.value = (0, _helper.calcGestureCenterPoint)(e);
+ }
const isShiftGesture = Math.abs(dx) > 2 || Math.abs(dy) > 2;
if (isShiftGesture) {
- gestureType.current = 'shift';
- _handleShifting(gestureState);
+ gestureType.value = 'shift';
+ _handleShifting(e);
}
}
- });
- (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)
+ };
+ const firstTouch = (0, _reactNativeReanimated.useSharedValue)(undefined);
+ const gesture = _reactNativeGestureHandler.Gesture.Manual().onTouchesDown((e, stateManager) => {
+ // only begin if this is the first touch
+ if (!firstTouch.value) {
+ stateManager.activate();
+ stateManager.begin();
+ firstTouch.value = {
+ x: e.allTouches[0].x,
+ y: e.allTouches[0].y
+ };
+ _handlePanResponderGrant(e);
+ }
+ }).onTouchesMove(e => {
+ const dx = e.allTouches[0].x - (firstTouch.value?.x || 0);
+ const dy = e.allTouches[0].y - (firstTouch.value?.y || 0);
+ _handlePanResponderMove(e, {
+ dx,
+ dy
});
- }, []);
- 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: [
- // 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
- {
- scaleX: zoomAnim.current
- }, {
- scaleY: zoomAnim.current
- }, ...panAnim.current.getTranslateTransform()]
- }],
- children: children
- }), visualTouchFeedbackEnabled && stateTouches.map(touch => doubleTapDelay && /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.AnimatedTouchFeedback, {
- x: touch.x,
- y: touch.y,
- animationDuration: doubleTapDelay,
- onAnimationDone: () => {
- _removeTouch(touch);
- }
- }, touch.id)), debugPoints.map(({
- x,
- y
- }, index) => {
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_debugHelper.DebugTouchPoint, {
- x: x,
- y: y
- }, index);
- }), staticPinPosition && /*#__PURE__*/(0, _jsxRuntime.jsx)(_StaticPin.StaticPin, {
- staticPinIcon: staticPinIcon,
- staticPinPosition: staticPinPosition,
- pinSize: pinSize,
- onPress: onStaticPinPress,
- onLongPress: onStaticPinLongPress,
- onParentMove: _handlePanResponderMove,
- setPinSize: setPinSize,
- pinProps: pinProps
- })]
+ }).onTouchesUp((e, stateManager) => {
+ // only end if this is the last touch being lifted
+ if (e.numberOfTouches === 0) {
+ _handlePanResponderEnd(e);
+ stateManager.end();
+ }
+ }).onTouchesCancelled((e, stateManager) => {
+ _handlePanResponderEnd(e);
+ (0, _reactNativeReanimated.runOnJS)(onPanResponderTerminate)(e, _getZoomableViewEventObject());
+ stateManager.end();
+ }).onFinalize(() => {
+ firstTouch.value = undefined;
+ });
+ const transformStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
+ return {
+ transform: [
+ // In RN79, we need to split the scale into X and Y to avoid
+ // the content getting pixelated when zooming in
+ {
+ scaleX: zoom.value
+ }, {
+ scaleY: zoom.value
+ }, {
+ translateX: offsetX.value
+ }, {
+ translateY: offsetY.value
+ }]
+ };
+ });
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_ReactNativeZoomableViewContext.ReactNativeZoomableViewContext.Provider, {
+ value: {
+ zoom,
+ inverseZoom,
+ inverseZoomStyle,
+ offsetX,
+ offsetY
+ },
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeGestureHandler.GestureHandlerRootView, {
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector, {
+ gesture: gesture,
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
+ style: _styles.styles.container,
+ ref: zoomSubjectWrapperRef,
+ onLayout: measureZoomSubject,
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, {
+ style: [_styles.styles.zoomSubject, props.style, transformStyle],
+ children: children
+ }), visualTouchFeedbackEnabled && stateTouches.map(touch => doubleTapDelay && /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.AnimatedTouchFeedback, {
+ x: touch.x,
+ y: touch.y,
+ animationDuration: doubleTapDelay,
+ onAnimationDone: () => {
+ _removeTouch(touch);
+ }
+ }, touch.id)), debugPoints.map(({
+ x,
+ y
+ }, index) => {
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_debugHelper.DebugTouchPoint, {
+ x: x,
+ y: y
+ }, index);
+ }), propStaticPinPosition && /*#__PURE__*/(0, _jsxRuntime.jsx)(_StaticPin.StaticPin, {
+ staticPinIcon: staticPinIcon,
+ staticPinPosition: propStaticPinPosition,
+ pinSize: pinSize,
+ setPinSize: setPinSize,
+ pinProps: pinProps
+ })]
+ })
+ })
+ })
});
};
-exports.ReactNativeZoomableView = ReactNativeZoomableView;
-const styles = _reactNative.StyleSheet.create({
- container: {
- alignItems: 'center',
- flex: 1,
- justifyContent: 'center',
- overflow: 'hidden',
- position: 'relative'
- },
- zoomSubject: {
- alignItems: 'center',
- flex: 1,
- justifyContent: 'center',
- width: '100%'
- }
-});
-var _default = exports.default = ReactNativeZoomableView;
+const ReactNativeZoomableView = exports.ReactNativeZoomableView = /*#__PURE__*/(0, _react.forwardRef)(ReactNativeZoomableViewInner);
//# sourceMappingURL=ReactNativeZoomableView.js.map
\ No newline at end of file
diff --git a/lib/commonjs/ReactNativeZoomableView.js.map b/lib/commonjs/ReactNativeZoomableView.js.map
index 4c3f9d1..373a26d 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","_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":[]}
+{"version":3,"names":["_lodash","require","_react","_interopRequireWildcard","_reactNative","_reactNativeGestureHandler","_reactNativeReanimated","_animations","_components","_StaticPin","_debugHelper","_helper","_coordinateConversion","_getNextZoomStep","_useDebugPoints","_useLatestCallback","_useZoomSubject","_ReactNativeZoomableViewContext","_styles","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ReactNativeZoomableViewInner","props","ref","wrapperRef","zoomSubjectWrapperRef","measure","measureZoomSubject","originalWidth","originalHeight","originalX","originalY","useZoomSubject","pinSize","setPinSize","useState","width","height","stateTouches","setStateTouches","debugPoints","setDebugPoints","setPinchDebugPoints","useDebugPoints","doubleTapFirstTapReleaseTimestamp","useSharedValue","undefined","defaults","zoomEnabled","panEnabled","initialZoom","initialOffsetX","initialOffsetY","maxZoom","minZoom","pinchToZoomInSensitivity","pinchToZoomOutSensitivity","movementSensitivity","doubleTapDelay","zoomStep","onLongPress","longPressDuration","contentWidth","contentHeight","visualTouchFeedbackEnabled","staticPinPosition","staticPinIcon","onStaticPinPositionChange","onStaticPinPositionMove","disablePanOnInitialZoom","debug","children","propStaticPinPosition","propContentWidth","propContentHeight","onTransform","onPanResponderMove","propZoomEnabled","propMaxZoom","propMinZoom","propPinchToZoomInSensitivity","propPinchToZoomOutSensitivity","propMovementSensitivity","propPanEnabled","propDisablePanOnInitialZoom","propsInitialZoom","pinProps","offsetX","offsetY","zoom","inverseZoom","useDerivedValue","value","inverseZoomStyle","useAnimatedStyle","transform","scale","lastGestureCenterPosition","lastGestureTouchDistance","gestureStarted","longPressTimeout","onTransformInvocationInitialized","singleTapTimeoutId","useRef","touches","doubleTapFirstTap","gestureType","onPanResponderGrant","useLatestCallback","onPanResponderEnd","onPanResponderTerminate","onZoomEnd","onShiftingEnd","_getZoomableViewEventObject","overwriteObj","assign","zoomLevel","_staticPinPosition","viewportPositionToImagePosition","viewportPosition","x","y","imageSize","zoomableEvent","_updateStaticPin","position","_addTouch","touch","push","_removeTouch","splice","indexOf","debouncedOnStaticPinPositionChange","useMemo","debounce","_invokeOnTransform","zoomableViewEvent","successful","runOnJS","useLayoutEffect","useAnimatedReaction","onLayout","layout","nativeEvent","scheduleLongPressTimeout","setTimeout","clearLongPressTimeout","clearTimeout","_handlePanResponderGrant","cancelAnimation","_calcOffsetShiftSinceLastGestureState","gestureCenterPoint","shift","dx","dy","shiftX","shiftY","_handlePinching","distance","calcGestureTouchDistance","zoomGrowthFromLastGestureState","pinchToZoomSensitivity","deltaGrowth","deltaGrowthAdjustedBySensitivity","newZoomLevel","calcGestureCenterPoint","zoomCenter","oldOffsetX","oldOffsetY","oldScale","newScale","newOffsetY","calcNewScaledOffsetForZoomCentering","newOffsetX","offsetShift","_setNewOffsetPosition","_handleShifting","allTouches","prevZoom","zoomToDestination","publicZoomTo","withTiming","zoomToAnimation","newZoom","_handleDoubleTap","onDoubleTapBefore","onDoubleTapAfter","doubleTapZoomToCenter","nextZoomStep","getNextZoomStep","zoomPositionCoordinates","_resolveAndHandleTap","now","Date","id","toString","isSecondTap","current","tapX","tapY","toX","toY","animationsDone","makeMutable","done","duration","onSingleTap","publicMoveStaticPinTo","pinX","pinY","publicZoomBy","zoomLevelChange","publicMoveTo","publicMoveBy","offsetChangeX","offsetChangeY","useImperativeHandle","zoomTo","zoomBy","moveTo","moveBy","moveStaticPinTo","_handlePanResponderEnd","_handlePanResponderMove","gestureState","numberOfTouches","Math","abs","isShiftGesture","firstTouch","gesture","Gesture","Manual","onTouchesDown","stateManager","activate","begin","onTouchesMove","onTouchesUp","end","onTouchesCancelled","onFinalize","transformStyle","scaleX","scaleY","translateX","translateY","jsx","ReactNativeZoomableViewContext","Provider","GestureHandlerRootView","GestureDetector","jsxs","View","style","styles","container","zoomSubject","map","AnimatedTouchFeedback","animationDuration","onAnimationDone","index","DebugTouchPoint","StaticPin","ReactNativeZoomableView","exports","forwardRef"],"sourceRoot":"../../src","sources":["ReactNativeZoomableView.tsx"],"mappings":"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","ignoreList":[]}
diff --git a/lib/commonjs/ReactNativeZoomableViewContext.js b/lib/commonjs/ReactNativeZoomableViewContext.js
new file mode 100644
index 0000000..1640d29
--- /dev/null
+++ b/lib/commonjs/ReactNativeZoomableViewContext.js
@@ -0,0 +1,17 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.useZoomableViewContext = exports.ReactNativeZoomableViewContext = void 0;
+var _react = require("react");
+const ReactNativeZoomableViewContext = exports.ReactNativeZoomableViewContext = /*#__PURE__*/(0, _react.createContext)(null);
+const useZoomableViewContext = () => {
+ const context = (0, _react.useContext)(ReactNativeZoomableViewContext);
+ if (!context) {
+ throw new Error('useZoomableViewContext must be used within ReactNativeZoomableView');
+ }
+ return context;
+};
+exports.useZoomableViewContext = useZoomableViewContext;
+//# sourceMappingURL=ReactNativeZoomableViewContext.js.map
\ No newline at end of file
diff --git a/lib/commonjs/ReactNativeZoomableViewContext.js.map b/lib/commonjs/ReactNativeZoomableViewContext.js.map
new file mode 100644
index 0000000..4711fcb
--- /dev/null
+++ b/lib/commonjs/ReactNativeZoomableViewContext.js.map
@@ -0,0 +1 @@
+{"version":3,"names":["_react","require","ReactNativeZoomableViewContext","exports","createContext","useZoomableViewContext","context","useContext","Error"],"sourceRoot":"../../src","sources":["ReactNativeZoomableViewContext.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAGO,MAAMC,8BAA8B,GAAAC,OAAA,CAAAD,8BAAA,gBAAG,IAAAE,oBAAa,EAQjD,IAAI,CAAC;AAER,MAAMC,sBAAsB,GAAGA,CAAA,KAAM;EAC1C,MAAMC,OAAO,GAAG,IAAAC,iBAAU,EAACL,8BAA8B,CAAC;EAE1D,IAAI,CAACI,OAAO,EAAE;IACZ,MAAM,IAAIE,KAAK,CACb,oEACF,CAAC;EACH;EACA,OAAOF,OAAO;AAChB,CAAC;AAACH,OAAA,CAAAE,sBAAA,GAAAA,sBAAA","ignoreList":[]}
diff --git a/lib/commonjs/animations/index.js b/lib/commonjs/animations/index.js
index 473c1d5..76d78d9 100644
--- a/lib/commonjs/animations/index.js
+++ b/lib/commonjs/animations/index.js
@@ -3,13 +3,10 @@
Object.defineProperty(exports, "__esModule", {
value: true
});
-exports.getZoomToAnimation = getZoomToAnimation;
-var _reactNative = require("react-native");
-function getZoomToAnimation(animValue, toValue) {
- return _reactNative.Animated.timing(animValue, {
- easing: _reactNative.Easing.out(_reactNative.Easing.ease),
- toValue,
- useNativeDriver: true
- });
-}
+exports.zoomToAnimation = void 0;
+var _reactNativeReanimated = require("react-native-reanimated");
+const zoomToAnimation = exports.zoomToAnimation = {
+ easing: _reactNativeReanimated.Easing.out(_reactNativeReanimated.Easing.ease),
+ duration: 250
+};
//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/lib/commonjs/animations/index.js.map b/lib/commonjs/animations/index.js.map
index a048353..e02a122 100644
--- a/lib/commonjs/animations/index.js.map
+++ b/lib/commonjs/animations/index.js.map
@@ -1 +1 @@
-{"version":3,"names":["_reactNative","require","getZoomToAnimation","animValue","toValue","Animated","timing","easing","Easing","out","ease","useNativeDriver"],"sourceRoot":"../../../src","sources":["animations/index.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEO,SAASC,kBAAkBA,CAACC,SAAyB,EAAEC,OAAe,EAAE;EAC7E,OAAOC,qBAAQ,CAACC,MAAM,CAACH,SAAS,EAAE;IAChCI,MAAM,EAAEC,mBAAM,CAACC,GAAG,CAACD,mBAAM,CAACE,IAAI,CAAC;IAC/BN,OAAO;IACPO,eAAe,EAAE;EACnB,CAAC,CAAC;AACJ","ignoreList":[]}
+{"version":3,"names":["_reactNativeReanimated","require","zoomToAnimation","exports","easing","Easing","out","ease","duration"],"sourceRoot":"../../../src","sources":["animations/index.ts"],"mappings":";;;;;;AAAA,IAAAA,sBAAA,GAAAC,OAAA;AAEO,MAAMC,eAAiC,GAAAC,OAAA,CAAAD,eAAA,GAAG;EAC/CE,MAAM,EAAEC,6BAAM,CAACC,GAAG,CAACD,6BAAM,CAACE,IAAI,CAAC;EAC/BC,QAAQ,EAAE;AACZ,CAAC","ignoreList":[]}
diff --git a/lib/commonjs/components/FixedSize.js b/lib/commonjs/components/FixedSize.js
new file mode 100644
index 0000000..00d2fd9
--- /dev/null
+++ b/lib/commonjs/components/FixedSize.js
@@ -0,0 +1,44 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = exports.FixedSize = void 0;
+var _react = _interopRequireDefault(require("react"));
+var _reactNativeReanimated = _interopRequireDefault(require("react-native-reanimated"));
+var _ReactNativeZoomableViewContext = require("../ReactNativeZoomableViewContext");
+var _jsxRuntime = require("react/jsx-runtime");
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+/**
+ * A wrapper component that keeps elements at a fixed visual size regardless of zoom level.
+ *
+ * @param {{
+ * left: number;
+ * top: number;
+ * children: React.ReactNode;
+ * }} param0
+ * @param {number} param0.left The left position in percentage (0-100)
+ * @param {number} param0.top The top position in percentage (0-100)
+ * @param {React.ReactNode} param0.children The children to render inside the fixed size container
+ * @returns {*}
+ */
+const FixedSize = ({
+ left,
+ top,
+ children
+}) => {
+ const context = _react.default.useContext(_ReactNativeZoomableViewContext.ReactNativeZoomableViewContext);
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, {
+ style: [context?.inverseZoomStyle, {
+ width: 1,
+ height: 1,
+ position: 'absolute',
+ left: `${left}%`,
+ top: `${top}%`
+ }],
+ children: children
+ });
+};
+exports.FixedSize = FixedSize;
+var _default = exports.default = FixedSize;
+//# sourceMappingURL=FixedSize.js.map
\ No newline at end of file
diff --git a/lib/commonjs/components/FixedSize.js.map b/lib/commonjs/components/FixedSize.js.map
new file mode 100644
index 0000000..6c4d055
--- /dev/null
+++ b/lib/commonjs/components/FixedSize.js.map
@@ -0,0 +1 @@
+{"version":3,"names":["_react","_interopRequireDefault","require","_reactNativeReanimated","_ReactNativeZoomableViewContext","_jsxRuntime","e","__esModule","default","FixedSize","left","top","children","context","React","useContext","ReactNativeZoomableViewContext","jsx","View","style","inverseZoomStyle","width","height","position","exports","_default"],"sourceRoot":"../../../src","sources":["components/FixedSize.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,sBAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,+BAAA,GAAAF,OAAA;AAAmF,IAAAG,WAAA,GAAAH,OAAA;AAAA,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMG,SAAS,GAAGA,CAAC;EACxBC,IAAI;EACJC,GAAG;EACHC;AAKF,CAAC,KAAK;EACJ,MAAMC,OAAO,GAAGC,cAAK,CAACC,UAAU,CAACC,8DAA8B,CAAC;EAEhE,oBACE,IAAAX,WAAA,CAAAY,GAAA,EAACd,sBAAA,CAAAK,OAAQ,CAACU,IAAI;IACZC,KAAK,EAAE,CACLN,OAAO,EAAEO,gBAAgB,EACzB;MACEC,KAAK,EAAE,CAAC;MACRC,MAAM,EAAE,CAAC;MACTC,QAAQ,EAAE,UAAU;MACpBb,IAAI,EAAE,GAAGA,IAAI,GAAG;MAChBC,GAAG,EAAE,GAAGA,GAAG;IACb,CAAC,CACD;IAAAC,QAAA,EAEDA;EAAQ,CACI,CAAC;AAEpB,CAAC;AAACY,OAAA,CAAAf,SAAA,GAAAA,SAAA;AAAA,IAAAgB,QAAA,GAAAD,OAAA,CAAAhB,OAAA,GAEaC,SAAS","ignoreList":[]}
diff --git a/lib/commonjs/components/StaticPin.js b/lib/commonjs/components/StaticPin.js
index 66c6c65..9849dd1 100644
--- a/lib/commonjs/components/StaticPin.js
+++ b/lib/commonjs/components/StaticPin.js
@@ -12,44 +12,16 @@ const StaticPin = ({
staticPinPosition,
staticPinIcon,
pinSize,
- onParentMove,
- onPress,
- onLongPress,
setPinSize,
pinProps = {}
}) => {
- const tapTime = _react.default.useRef(0);
const transform = [{
translateY: -pinSize.height
}, {
translateX: -pinSize.width / 2
}];
const opacity = pinSize.width && pinSize.height ? 1 : 0;
- const panResponder = _react.default.useRef(_reactNative.PanResponder.create({
- onStartShouldSetPanResponder: () => {
- tapTime.current = Date.now();
-
- // We want to handle tap on this so set true
- return true;
- },
- onPanResponderMove: (evt, gestureState) => {
- // However if the user moves finger we want to pass this evt to parent
- // to handle panning (tap not recognized)
- if (Math.abs(gestureState.dx) > 5 && Math.abs(gestureState.dy) > 5) onParentMove(evt, gestureState);
- },
- onPanResponderRelease: (evt, gestureState) => {
- if (Math.abs(gestureState.dx) > 5 || Math.abs(gestureState.dy) > 5) return;
- const dt = Date.now() - tapTime.current;
- if (onPress && dt < 500) {
- onPress(evt);
- }
- if (onLongPress && dt > 500) {
- // RN long press is 500ms
- onLongPress(evt);
- }
- }
- })).current;
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
style: [{
left: staticPinPosition.x,
top: staticPinPosition.y
@@ -68,7 +40,6 @@ const StaticPin = ({
}) => {
setPinSize(layout);
},
- ...panResponder.panHandlers,
children: staticPinIcon ||
/*#__PURE__*/
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-use-before-define
diff --git a/lib/commonjs/components/StaticPin.js.map b/lib/commonjs/components/StaticPin.js.map
index 0ee0ad8..1e91fe1 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","setPinSize","pinProps","transform","translateY","height","translateX","width","opacity","jsx","View","style","left","x","top","y","styles","pinWrapper","children","onLayout","nativeEvent","layout","Image","source","pin","exports","StyleSheet","create","position"],"sourceRoot":"../../../src","sources":["components/StaticPin.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAAkE,IAAAE,WAAA,GAAAF,OAAA;AAAA,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAI3D,MAAMG,SAAS,GAAGA,CAAC;EACxBC,iBAAiB;EACjBC,aAAa;EACbC,OAAO;EACPC,UAAU;EACVC,QAAQ,GAAG,CAAC;AAOd,CAAC,KAAK;EACJ,MAAMC,SAAS,GAAG,CAChB;IAAEC,UAAU,EAAE,CAACJ,OAAO,CAACK;EAAO,CAAC,EAC/B;IAAEC,UAAU,EAAE,CAACN,OAAO,CAACO,KAAK,GAAG;EAAE,CAAC,CACnC;EAED,MAAMC,OAAO,GAAGR,OAAO,CAACO,KAAK,IAAIP,OAAO,CAACK,MAAM,GAAG,CAAC,GAAG,CAAC;EAEvD,oBACE,IAAAZ,WAAA,CAAAgB,GAAA,EAACjB,YAAA,CAAAkB,IAAI;IACHC,KAAK,EAAE,CACL;MACEC,IAAI,EAAEd,iBAAiB,CAACe,CAAC;MACzBC,GAAG,EAAEhB,iBAAiB,CAACiB;IACzB,CAAC;IACD;IACAC,MAAM,CAACC,UAAU,EACjB;MAAET,OAAO;MAAEL;IAAU,CAAC,CACtB;IAAA,GACED,QAAQ;IAAAgB,QAAA,eAEZ,IAAAzB,WAAA,CAAAgB,GAAA,EAACjB,YAAA,CAAAkB,IAAI;MACHS,QAAQ,EAAEA,CAAC;QAAEC,WAAW,EAAE;UAAEC;QAAO;MAAE,CAAC,KAAK;QACzCpB,UAAU,CAACoB,MAAM,CAAC;MACpB,CAAE;MAAAH,QAAA,EAEDnB,aAAa;MAAA;MACZ;MACA,IAAAN,WAAA,CAAAgB,GAAA,EAACjB,YAAA,CAAA8B,KAAK;QAACC,MAAM,EAAEhC,OAAO,CAAC,mBAAmB,CAAE;QAACoB,KAAK,EAAEK,MAAM,CAACQ;MAAI,CAAE;IAClE,CACG;EAAC,CACH,CAAC;AAEX,CAAC;AAACC,OAAA,CAAA5B,SAAA,GAAAA,SAAA;AAEF,MAAMmB,MAAM,GAAGU,uBAAU,CAACC,MAAM,CAAC;EAC/BH,GAAG,EAAE;IACHnB,MAAM,EAAE,EAAE;IACVE,KAAK,EAAE;EACT,CAAC;EACDU,UAAU,EAAE;IACVW,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC","ignoreList":[]}
diff --git a/lib/commonjs/helper/calcNewScaledOffsetForZoomCentering.js b/lib/commonjs/helper/calcNewScaledOffsetForZoomCentering.js
index cdf9a30..517172f 100644
--- a/lib/commonjs/helper/calcNewScaledOffsetForZoomCentering.js
+++ b/lib/commonjs/helper/calcNewScaledOffsetForZoomCentering.js
@@ -55,6 +55,8 @@ exports.calcNewScaledOffsetForZoomCentering = calcNewScaledOffsetForZoomCenterin
* @param zoomCenterXOrY
*/
function calcNewScaledOffsetForZoomCentering(oldOffsetXOrYScaled, zoomSubjectOriginalWidthOrHeight, oldScale, newScale, zoomCenterXOrY) {
+ 'worklet';
+
const oldOffSetUnscaled = oldOffsetXOrYScaled * oldScale;
const growthRate = newScale / oldScale;
diff --git a/lib/commonjs/helper/calcNewScaledOffsetForZoomCentering.js.map b/lib/commonjs/helper/calcNewScaledOffsetForZoomCentering.js.map
index 0b6bb9c..47a086e 100644
--- a/lib/commonjs/helper/calcNewScaledOffsetForZoomCentering.js.map
+++ b/lib/commonjs/helper/calcNewScaledOffsetForZoomCentering.js.map
@@ -1 +1 @@
-{"version":3,"names":["calcNewScaledOffsetForZoomCentering","oldOffsetXOrYScaled","zoomSubjectOriginalWidthOrHeight","oldScale","newScale","zoomCenterXOrY","oldOffSetUnscaled","growthRate","zoomSubjectOriginalCenter","zoomSubjectCurrentCenter","zoomSubjectNewCenter","xOrY","distanceToZoomCenter","newOffsetUnscaled"],"sourceRoot":"../../../src","sources":["helper/calcNewScaledOffsetForZoomCentering.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,mCAAmCA,CACjDC,mBAA2B,EAC3BC,gCAAwC,EACxCC,QAAgB,EAChBC,QAAgB,EAChBC,cAAsB,EACtB;EACA,MAAMC,iBAAiB,GAAGL,mBAAmB,GAAGE,QAAQ;EACxD,MAAMI,UAAU,GAAGH,QAAQ,GAAGD,QAAQ;;EAEtC;EACA,MAAMK,yBAAyB,GAAG,CAAC,CAAW;EAC9C,MAAMC,wBAAwB,GAAG,CAAC,CAAW;EAC7C,MAAMC,oBAAoB,GAAG,CAAC,CAAW;EAEzCF,yBAAyB,CAACG,IAAI,GAAGT,gCAAgC,GAAG,CAAC;EACrEO,wBAAwB,CAACE,IAAI,GAC3BH,yBAAyB,CAACG,IAAI,GAAGL,iBAAiB;EACpDG,wBAAwB,CAACG,oBAAoB,GAC3CH,wBAAwB,CAACE,IAAI,GAAGN,cAAc;EAEhDK,oBAAoB,CAACE,oBAAoB,GACvCH,wBAAwB,CAACG,oBAAoB,GAAGL,UAAU;EAC5DG,oBAAoB,CAACC,IAAI,GACvBD,oBAAoB,CAACE,oBAAoB,GAAGP,cAAc;EAE5D,MAAMQ,iBAAiB,GACrBH,oBAAoB,CAACC,IAAI,GAAGH,yBAAyB,CAACG,IAAI;EAE5D,OAAOE,iBAAiB,GAAGT,QAAQ;AACrC","ignoreList":[]}
+{"version":3,"names":["calcNewScaledOffsetForZoomCentering","oldOffsetXOrYScaled","zoomSubjectOriginalWidthOrHeight","oldScale","newScale","zoomCenterXOrY","oldOffSetUnscaled","growthRate","zoomSubjectOriginalCenter","zoomSubjectCurrentCenter","zoomSubjectNewCenter","xOrY","distanceToZoomCenter","newOffsetUnscaled"],"sourceRoot":"../../../src","sources":["helper/calcNewScaledOffsetForZoomCentering.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,mCAAmCA,CACjDC,mBAA2B,EAC3BC,gCAAwC,EACxCC,QAAgB,EAChBC,QAAgB,EAChBC,cAAsB,EACtB;EACA,SAAS;;EAET,MAAMC,iBAAiB,GAAGL,mBAAmB,GAAGE,QAAQ;EACxD,MAAMI,UAAU,GAAGH,QAAQ,GAAGD,QAAQ;;EAEtC;EACA,MAAMK,yBAAyB,GAAG,CAAC,CAAW;EAC9C,MAAMC,wBAAwB,GAAG,CAAC,CAAW;EAC7C,MAAMC,oBAAoB,GAAG,CAAC,CAAW;EAEzCF,yBAAyB,CAACG,IAAI,GAAGT,gCAAgC,GAAG,CAAC;EACrEO,wBAAwB,CAACE,IAAI,GAC3BH,yBAAyB,CAACG,IAAI,GAAGL,iBAAiB;EACpDG,wBAAwB,CAACG,oBAAoB,GAC3CH,wBAAwB,CAACE,IAAI,GAAGN,cAAc;EAEhDK,oBAAoB,CAACE,oBAAoB,GACvCH,wBAAwB,CAACG,oBAAoB,GAAGL,UAAU;EAC5DG,oBAAoB,CAACC,IAAI,GACvBD,oBAAoB,CAACE,oBAAoB,GAAGP,cAAc;EAE5D,MAAMQ,iBAAiB,GACrBH,oBAAoB,CAACC,IAAI,GAAGH,yBAAyB,CAACG,IAAI;EAE5D,OAAOE,iBAAiB,GAAGT,QAAQ;AACrC","ignoreList":[]}
diff --git a/lib/commonjs/helper/coordinateConversion.js b/lib/commonjs/helper/coordinateConversion.js
index c49c209..ba3df69 100644
--- a/lib/commonjs/helper/coordinateConversion.js
+++ b/lib/commonjs/helper/coordinateConversion.js
@@ -4,19 +4,8 @@ Object.defineProperty(exports, "__esModule", {
value: true
});
exports.applyContainResizeMode = applyContainResizeMode;
-exports.defaultTransformSubjectData = void 0;
exports.getImageOriginOnTransformSubject = getImageOriginOnTransformSubject;
exports.viewportPositionToImagePosition = viewportPositionToImagePosition;
-const defaultTransformSubjectData = exports.defaultTransformSubjectData = {
- offsetX: 0,
- offsetY: 0,
- zoomLevel: 0,
- originalWidth: 0,
- originalHeight: 0,
- originalPageX: 0,
- originalPageY: 0
-};
-
/**
* Assuming you have an image that's being resized to fit into a container
* using the "contain" resize mode. You can use this function to calculate the
@@ -29,6 +18,8 @@ const defaultTransformSubjectData = exports.defaultTransformSubjectData = {
* @param containerSize
*/
function applyContainResizeMode(imgSize, containerSize) {
+ 'worklet';
+
const {
width: imageWidth,
height: imageHeight
@@ -72,6 +63,8 @@ function applyContainResizeMode(imgSize, containerSize) {
* @param transformSubject
*/
function getImageOriginOnTransformSubject(resizedImageSize, transformSubject) {
+ 'worklet';
+
const {
offsetX,
offsetY,
@@ -99,6 +92,8 @@ function viewportPositionToImagePosition({
imageSize,
zoomableEvent
}) {
+ 'worklet';
+
const {
size: resizedImgSize,
scale: resizedImgScale
diff --git a/lib/commonjs/helper/coordinateConversion.js.map b/lib/commonjs/helper/coordinateConversion.js.map
index 88b61d9..1b5b17d 100644
--- a/lib/commonjs/helper/coordinateConversion.js.map
+++ b/lib/commonjs/helper/coordinateConversion.js.map
@@ -1 +1 @@
-{"version":3,"names":["defaultTransformSubjectData","exports","offsetX","offsetY","zoomLevel","originalWidth","originalHeight","originalPageX","originalPageY","applyContainResizeMode","imgSize","containerSize","width","imageWidth","height","imageHeight","areaWidth","areaHeight","imageAspect","areaAspect","newSize","isNaN","scale","isFinite","size","getImageOriginOnTransformSubject","resizedImageSize","transformSubject","x","y","viewportPositionToImagePosition","viewportPosition","imageSize","zoomableEvent","resizedImgSize","resizedImgScale","sheetOriginOnContainer","pointOnSheet"],"sourceRoot":"../../../src","sources":["helper/coordinateConversion.ts"],"mappings":"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","ignoreList":[]}
+{"version":3,"names":["applyContainResizeMode","imgSize","containerSize","width","imageWidth","height","imageHeight","areaWidth","areaHeight","imageAspect","areaAspect","newSize","isNaN","scale","isFinite","size","getImageOriginOnTransformSubject","resizedImageSize","transformSubject","offsetX","offsetY","zoomLevel","originalWidth","originalHeight","x","y","viewportPositionToImagePosition","viewportPosition","imageSize","zoomableEvent","resizedImgSize","resizedImgScale","sheetOriginOnContainer","pointOnSheet"],"sourceRoot":"../../../src","sources":["helper/coordinateConversion.ts"],"mappings":"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","ignoreList":[]}
diff --git a/lib/commonjs/helper/index.js b/lib/commonjs/helper/index.js
index 5d28b87..37c198f 100644
--- a/lib/commonjs/helper/index.js
+++ b/lib/commonjs/helper/index.js
@@ -23,29 +23,33 @@ var _calcNewScaledOffsetForZoomCentering = require("./calcNewScaledOffsetForZoom
* because gestureState.moveX/Y is messed up on real device
* (Sometimes it's the center point, but sometimes it randomly takes the position of one of the touches)
*/
-function calcGestureCenterPoint(e, gestureState) {
- const touches = e.nativeEvent.touches;
+function calcGestureCenterPoint(e) {
+ 'worklet';
+
+ const touches = e.allTouches;
if (!touches[0]) return null;
- if (gestureState.numberActiveTouches === 2) {
+ if (e.numberOfTouches === 2) {
if (!touches[1]) return null;
return {
- x: (touches[0].pageX + touches[1].pageX) / 2,
- y: (touches[0].pageY + touches[1].pageY) / 2
+ x: (touches[0].x + touches[1].x) / 2,
+ y: (touches[0].y + touches[1].y) / 2
};
}
- if (gestureState.numberActiveTouches === 1) {
+ if (e.numberOfTouches === 1) {
return {
- x: touches[0].pageX,
- y: touches[0].pageY
+ x: touches[0].x,
+ y: touches[0].y
};
}
return null;
}
-function calcGestureTouchDistance(e, gestureState) {
- const touches = e.nativeEvent.touches;
- if (gestureState.numberActiveTouches !== 2 || !touches[0] || !touches[1]) return null;
- const dx = Math.abs(touches[0].pageX - touches[1].pageX);
- const dy = Math.abs(touches[0].pageY - touches[1].pageY);
+function calcGestureTouchDistance(e) {
+ 'worklet';
+
+ const touches = e.allTouches;
+ if (e.numberOfTouches !== 2 || !touches[0] || !touches[1]) return null;
+ const dx = Math.abs(touches[0].x - touches[1].x);
+ const dy = Math.abs(touches[0].x - touches[1].x);
return Math.sqrt(dx * dx + dy * dy);
}
//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/lib/commonjs/helper/index.js.map b/lib/commonjs/helper/index.js.map
index 53f40f3..2653eef 100644
--- a/lib/commonjs/helper/index.js.map
+++ b/lib/commonjs/helper/index.js.map
@@ -1 +1 @@
-{"version":3,"names":["_calcNewScaledOffsetForZoomCentering","require","calcGestureCenterPoint","e","gestureState","touches","nativeEvent","numberActiveTouches","x","pageX","y","pageY","calcGestureTouchDistance","dx","Math","abs","dy","sqrt"],"sourceRoot":"../../../src","sources":["helper/index.ts"],"mappings":";;;;;;;;;;;;;AAIA,IAAAA,oCAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,sBAAsBA,CACpCC,CAAwB,EACxBC,YAAsC,EACxB;EACd,MAAMC,OAAO,GAAGF,CAAC,CAACG,WAAW,CAACD,OAAO;EACrC,IAAI,CAACA,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI;EAE5B,IAAID,YAAY,CAACG,mBAAmB,KAAK,CAAC,EAAE;IAC1C,IAAI,CAACF,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI;IAC5B,OAAO;MACLG,CAAC,EAAE,CAACH,OAAO,CAAC,CAAC,CAAC,CAACI,KAAK,GAAGJ,OAAO,CAAC,CAAC,CAAC,CAACI,KAAK,IAAI,CAAC;MAC5CC,CAAC,EAAE,CAACL,OAAO,CAAC,CAAC,CAAC,CAACM,KAAK,GAAGN,OAAO,CAAC,CAAC,CAAC,CAACM,KAAK,IAAI;IAC7C,CAAC;EACH;EACA,IAAIP,YAAY,CAACG,mBAAmB,KAAK,CAAC,EAAE;IAC1C,OAAO;MACLC,CAAC,EAAEH,OAAO,CAAC,CAAC,CAAC,CAACI,KAAK;MACnBC,CAAC,EAAEL,OAAO,CAAC,CAAC,CAAC,CAACM;IAChB,CAAC;EACH;EAEA,OAAO,IAAI;AACb;AAEO,SAASC,wBAAwBA,CACtCT,CAAwB,EACxBC,YAAsC,EACvB;EACf,MAAMC,OAAO,GAAGF,CAAC,CAACG,WAAW,CAACD,OAAO;EACrC,IAAID,YAAY,CAACG,mBAAmB,KAAK,CAAC,IAAI,CAACF,OAAO,CAAC,CAAC,CAAC,IAAI,CAACA,OAAO,CAAC,CAAC,CAAC,EACtE,OAAO,IAAI;EAEb,MAAMQ,EAAE,GAAGC,IAAI,CAACC,GAAG,CAACV,OAAO,CAAC,CAAC,CAAC,CAACI,KAAK,GAAGJ,OAAO,CAAC,CAAC,CAAC,CAACI,KAAK,CAAC;EACxD,MAAMO,EAAE,GAAGF,IAAI,CAACC,GAAG,CAACV,OAAO,CAAC,CAAC,CAAC,CAACM,KAAK,GAAGN,OAAO,CAAC,CAAC,CAAC,CAACM,KAAK,CAAC;EACxD,OAAOG,IAAI,CAACG,IAAI,CAACJ,EAAE,GAAGA,EAAE,GAAGG,EAAE,GAAGA,EAAE,CAAC;AACrC","ignoreList":[]}
+{"version":3,"names":["_calcNewScaledOffsetForZoomCentering","require","calcGestureCenterPoint","e","touches","allTouches","numberOfTouches","x","y","calcGestureTouchDistance","dx","Math","abs","dy","sqrt"],"sourceRoot":"../../../src","sources":["helper/index.ts"],"mappings":";;;;;;;;;;;;;AAIA,IAAAA,oCAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,sBAAsBA,CAACC,CAAoB,EAAgB;EACzE,SAAS;;EAET,MAAMC,OAAO,GAAGD,CAAC,CAACE,UAAU;EAC5B,IAAI,CAACD,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI;EAE5B,IAAID,CAAC,CAACG,eAAe,KAAK,CAAC,EAAE;IAC3B,IAAI,CAACF,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI;IAC5B,OAAO;MACLG,CAAC,EAAE,CAACH,OAAO,CAAC,CAAC,CAAC,CAACG,CAAC,GAAGH,OAAO,CAAC,CAAC,CAAC,CAACG,CAAC,IAAI,CAAC;MACpCC,CAAC,EAAE,CAACJ,OAAO,CAAC,CAAC,CAAC,CAACI,CAAC,GAAGJ,OAAO,CAAC,CAAC,CAAC,CAACI,CAAC,IAAI;IACrC,CAAC;EACH;EACA,IAAIL,CAAC,CAACG,eAAe,KAAK,CAAC,EAAE;IAC3B,OAAO;MAAEC,CAAC,EAAEH,OAAO,CAAC,CAAC,CAAC,CAACG,CAAC;MAAEC,CAAC,EAAEJ,OAAO,CAAC,CAAC,CAAC,CAACI;IAAE,CAAC;EAC7C;EAEA,OAAO,IAAI;AACb;AAEO,SAASC,wBAAwBA,CAACN,CAAoB,EAAiB;EAC5E,SAAS;;EAET,MAAMC,OAAO,GAAGD,CAAC,CAACE,UAAU;EAC5B,IAAIF,CAAC,CAACG,eAAe,KAAK,CAAC,IAAI,CAACF,OAAO,CAAC,CAAC,CAAC,IAAI,CAACA,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI;EAEtE,MAAMM,EAAE,GAAGC,IAAI,CAACC,GAAG,CAACR,OAAO,CAAC,CAAC,CAAC,CAACG,CAAC,GAAGH,OAAO,CAAC,CAAC,CAAC,CAACG,CAAC,CAAC;EAChD,MAAMM,EAAE,GAAGF,IAAI,CAACC,GAAG,CAACR,OAAO,CAAC,CAAC,CAAC,CAACG,CAAC,GAAGH,OAAO,CAAC,CAAC,CAAC,CAACG,CAAC,CAAC;EAEhD,OAAOI,IAAI,CAACG,IAAI,CAACJ,EAAE,GAAGA,EAAE,GAAGG,EAAE,GAAGA,EAAE,CAAC;AACrC","ignoreList":[]}
diff --git a/lib/commonjs/hooks/useDebugPoints.js b/lib/commonjs/hooks/useDebugPoints.js
index 12308dd..ac280c6 100644
--- a/lib/commonjs/hooks/useDebugPoints.js
+++ b/lib/commonjs/hooks/useDebugPoints.js
@@ -6,10 +6,7 @@ Object.defineProperty(exports, "__esModule", {
exports.useDebugPoints = void 0;
var _react = require("react");
var _useLatestCallback = require("./useLatestCallback");
-const useDebugPoints = ({
- originalPageX,
- originalPageY
-}) => {
+const useDebugPoints = () => {
const [debugPoints, setDebugPoints] = (0, _react.useState)([]);
/**
@@ -18,16 +15,13 @@ const useDebugPoints = ({
* @param zoomCenter
* @param points
*/
- const setPinchDebugPoints = (0, _useLatestCallback.useLatestCallback)((gestureResponderEvent, zoomCenter, ...points) => {
- const {
- touches
- } = gestureResponderEvent.nativeEvent;
+ const setPinchDebugPoints = (0, _useLatestCallback.useLatestCallback)((e, zoomCenter, ...points) => {
setDebugPoints([{
- x: touches[0].pageX - originalPageX,
- y: touches[0].pageY - originalPageY
+ x: e.allTouches[0].x,
+ y: e.allTouches[0].y
}, {
- x: touches[1].pageX - originalPageX,
- y: touches[1].pageY - originalPageY
+ x: e.allTouches[1].x,
+ y: e.allTouches[1].y
}, zoomCenter, ...points]);
});
return {
diff --git a/lib/commonjs/hooks/useDebugPoints.js.map b/lib/commonjs/hooks/useDebugPoints.js.map
index 7c9a084..6756564 100644
--- a/lib/commonjs/hooks/useDebugPoints.js.map
+++ b/lib/commonjs/hooks/useDebugPoints.js.map
@@ -1 +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":[]}
+{"version":3,"names":["_react","require","_useLatestCallback","useDebugPoints","debugPoints","setDebugPoints","useState","setPinchDebugPoints","useLatestCallback","e","zoomCenter","points","x","allTouches","y","exports"],"sourceRoot":"../../../src","sources":["hooks/useDebugPoints.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAIA,IAAAC,kBAAA,GAAAD,OAAA;AAEO,MAAME,cAAc,GAAGA,CAAA,KAAM;EAClC,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,CAACC,CAAoB,EAAEC,UAAiB,EAAE,GAAGC,MAAe,KAAK;IAC/DN,cAAc,CAAC,CACb;MAAEO,CAAC,EAAEH,CAAC,CAACI,UAAU,CAAC,CAAC,CAAC,CAACD,CAAC;MAAEE,CAAC,EAAEL,CAAC,CAACI,UAAU,CAAC,CAAC,CAAC,CAACC;IAAE,CAAC,EAC9C;MAAEF,CAAC,EAAEH,CAAC,CAACI,UAAU,CAAC,CAAC,CAAC,CAACD,CAAC;MAAEE,CAAC,EAAEL,CAAC,CAACI,UAAU,CAAC,CAAC,CAAC,CAACC;IAAE,CAAC,EAC9CJ,UAAU,EACV,GAAGC,MAAM,CACV,CAAC;EACJ,CACF,CAAC;EAED,OAAO;IAAEP,WAAW;IAAEC,cAAc;IAAEE;EAAoB,CAAC;AAC7D,CAAC;AAACQ,OAAA,CAAAZ,cAAA,GAAAA,cAAA","ignoreList":[]}
diff --git a/lib/commonjs/hooks/useZoomSubject.js b/lib/commonjs/hooks/useZoomSubject.js
index e3e8e0b..7101a87 100644
--- a/lib/commonjs/hooks/useZoomSubject.js
+++ b/lib/commonjs/hooks/useZoomSubject.js
@@ -5,15 +5,14 @@ Object.defineProperty(exports, "__esModule", {
});
exports.useZoomSubject = void 0;
var _react = require("react");
+var _reactNativeReanimated = require("react-native-reanimated");
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 originalWidth = (0, _reactNativeReanimated.useSharedValue)(0);
+ const originalHeight = (0, _reactNativeReanimated.useSharedValue)(0);
+ const originalX = (0, _reactNativeReanimated.useSharedValue)(0);
+ const originalY = (0, _reactNativeReanimated.useSharedValue)(0);
const measureZoomSubjectInterval = (0, _react.useRef)();
/**
@@ -39,12 +38,10 @@ const useZoomSubject = () => {
// 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);
+ originalX.value = x;
+ originalY.value = y;
+ originalWidth.value = width;
+ originalHeight.value = height;
});
});
});
@@ -68,8 +65,6 @@ const useZoomSubject = () => {
measure,
originalWidth,
originalHeight,
- originalPageX,
- originalPageY,
originalX,
originalY
};
diff --git a/lib/commonjs/hooks/useZoomSubject.js.map b/lib/commonjs/hooks/useZoomSubject.js.map
index 937b6c3..4f295fc 100644
--- a/lib/commonjs/hooks/useZoomSubject.js.map
+++ b/lib/commonjs/hooks/useZoomSubject.js.map
@@ -1 +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":[]}
+{"version":3,"names":["_react","require","_reactNativeReanimated","_useLatestCallback","useZoomSubject","wrapperRef","useRef","originalWidth","useSharedValue","originalHeight","originalX","originalY","measureZoomSubjectInterval","measure","useLatestCallback","requestAnimationFrame","setTimeout","current","x","y","width","height","pageX","pageY","value","useEffect","setInterval","clearInterval","exports"],"sourceRoot":"../../../src","sources":["hooks/useZoomSubject.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,sBAAA,GAAAD,OAAA;AAEA,IAAAE,kBAAA,GAAAF,OAAA;AAEO,MAAMG,cAAc,GAAGA,CAAA,KAAM;EAClC,MAAMC,UAAU,GAAG,IAAAC,aAAM,EAAO,IAAI,CAAC;EACrC,MAAMC,aAAa,GAAG,IAAAC,qCAAc,EAAC,CAAC,CAAC;EACvC,MAAMC,cAAc,GAAG,IAAAD,qCAAc,EAAC,CAAC,CAAC;EACxC,MAAME,SAAS,GAAG,IAAAF,qCAAc,EAAC,CAAC,CAAC;EACnC,MAAMG,SAAS,GAAG,IAAAH,qCAAc,EAAC,CAAC,CAAC;EACnC,MAAMI,0BAA0B,GAAG,IAAAN,aAAM,EAAe,CAAC;;EAEzD;AACF;AACA;AACA;AACA;AACA;EACE,MAAMO,OAAO,GAAG,IAAAC,oCAAiB,EAAC,MAAM;IACtC;IACAC,qBAAqB,CAAC,MAAM;MAC1B;MACA;MACA;MACAC,UAAU,CAAC,MAAM;QACf;QACA;QACA;QACA;QACA;QACAX,UAAU,CAACY,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;UAE3CX,SAAS,CAACc,KAAK,GAAGN,CAAC;UACnBP,SAAS,CAACa,KAAK,GAAGL,CAAC;UACnBZ,aAAa,CAACiB,KAAK,GAAGJ,KAAK;UAC3BX,cAAc,CAACe,KAAK,GAAGH,MAAM;QAC/B,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,IAAAI,gBAAS,EAAC,MAAM;IACdZ,OAAO,CAAC,CAAC;IACT;IACA;IACA;IACA;IACA;IACA;IACA;IACAD,0BAA0B,CAACK,OAAO,GAAGS,WAAW,CAACb,OAAO,EAAE,GAAG,CAAC;IAE9D,OAAO,MAAM;MACXD,0BAA0B,CAACK,OAAO,IAChCU,aAAa,CAACf,0BAA0B,CAACK,OAAO,CAAC;IACrD,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IACLZ,UAAU;IACVQ,OAAO;IACPN,aAAa;IACbE,cAAc;IACdC,SAAS;IACTC;EACF,CAAC;AACH,CAAC;AAACiB,OAAA,CAAAxB,cAAA,GAAAA,cAAA","ignoreList":[]}
diff --git a/lib/commonjs/index.js b/lib/commonjs/index.js
index 39cbcac..8873a47 100644
--- a/lib/commonjs/index.js
+++ b/lib/commonjs/index.js
@@ -3,10 +3,22 @@
Object.defineProperty(exports, "__esModule", {
value: true
});
+Object.defineProperty(exports, "FixedSize", {
+ enumerable: true,
+ get: function () {
+ return _FixedSize.default;
+ }
+});
Object.defineProperty(exports, "ReactNativeZoomableView", {
enumerable: true,
get: function () {
- return _ReactNativeZoomableView.default;
+ return _ReactNativeZoomableView.ReactNativeZoomableView;
+ }
+});
+Object.defineProperty(exports, "ReactNativeZoomableViewContext", {
+ enumerable: true,
+ get: function () {
+ return _ReactNativeZoomableViewContext.ReactNativeZoomableViewContext;
}
});
Object.defineProperty(exports, "applyContainResizeMode", {
@@ -21,13 +33,21 @@ Object.defineProperty(exports, "getImageOriginOnTransformSubject", {
return _coordinateConversion.getImageOriginOnTransformSubject;
}
});
+Object.defineProperty(exports, "useZoomableViewContext", {
+ enumerable: true,
+ get: function () {
+ return _ReactNativeZoomableViewContext.useZoomableViewContext;
+ }
+});
Object.defineProperty(exports, "viewportPositionToImagePosition", {
enumerable: true,
get: function () {
return _coordinateConversion.viewportPositionToImagePosition;
}
});
+var _FixedSize = _interopRequireDefault(require("./components/FixedSize"));
var _coordinateConversion = require("./helper/coordinateConversion");
-var _ReactNativeZoomableView = _interopRequireDefault(require("./ReactNativeZoomableView"));
+var _ReactNativeZoomableView = require("./ReactNativeZoomableView");
+var _ReactNativeZoomableViewContext = require("./ReactNativeZoomableViewContext");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/lib/commonjs/index.js.map b/lib/commonjs/index.js.map
index 631e513..05c3ebc 100644
--- a/lib/commonjs/index.js.map
+++ b/lib/commonjs/index.js.map
@@ -1 +1 @@
-{"version":3,"names":["_coordinateConversion","require","_ReactNativeZoomableView","_interopRequireDefault","e","__esModule","default"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,qBAAA,GAAAC,OAAA;AAKA,IAAAC,wBAAA,GAAAC,sBAAA,CAAAF,OAAA;AAAgE,SAAAE,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA","ignoreList":[]}
+{"version":3,"names":["_FixedSize","_interopRequireDefault","require","_coordinateConversion","_ReactNativeZoomableView","_ReactNativeZoomableViewContext","e","__esModule","default"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,qBAAA,GAAAD,OAAA;AAKA,IAAAE,wBAAA,GAAAF,OAAA;AACA,IAAAG,+BAAA,GAAAH,OAAA;AAG0C,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA","ignoreList":[]}
diff --git a/lib/commonjs/styles.js b/lib/commonjs/styles.js
new file mode 100644
index 0000000..70ba600
--- /dev/null
+++ b/lib/commonjs/styles.js
@@ -0,0 +1,23 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.styles = void 0;
+var _reactNative = require("react-native");
+const styles = exports.styles = _reactNative.StyleSheet.create({
+ container: {
+ alignItems: 'center',
+ flex: 1,
+ justifyContent: 'center',
+ overflow: 'hidden',
+ position: 'relative'
+ },
+ zoomSubject: {
+ alignItems: 'center',
+ flex: 1,
+ justifyContent: 'center',
+ width: '100%'
+ }
+});
+//# sourceMappingURL=styles.js.map
\ No newline at end of file
diff --git a/lib/commonjs/styles.js.map b/lib/commonjs/styles.js.map
new file mode 100644
index 0000000..a100995
--- /dev/null
+++ b/lib/commonjs/styles.js.map
@@ -0,0 +1 @@
+{"version":3,"names":["_reactNative","require","styles","exports","StyleSheet","create","container","alignItems","flex","justifyContent","overflow","position","zoomSubject","width"],"sourceRoot":"../../src","sources":["styles.tsx"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEO,MAAMC,MAAM,GAAAC,OAAA,CAAAD,MAAA,GAAGE,uBAAU,CAACC,MAAM,CAAC;EACtCC,SAAS,EAAE;IACTC,UAAU,EAAE,QAAQ;IACpBC,IAAI,EAAE,CAAC;IACPC,cAAc,EAAE,QAAQ;IACxBC,QAAQ,EAAE,QAAQ;IAClBC,QAAQ,EAAE;EACZ,CAAC;EACDC,WAAW,EAAE;IACXL,UAAU,EAAE,QAAQ;IACpBC,IAAI,EAAE,CAAC;IACPC,cAAc,EAAE,QAAQ;IACxBI,KAAK,EAAE;EACT;AACF,CAAC,CAAC","ignoreList":[]}
diff --git a/lib/commonjs/typings/index.js b/lib/commonjs/typings/index.js
index 4907bab..951c783 100644
--- a/lib/commonjs/typings/index.js
+++ b/lib/commonjs/typings/index.js
@@ -3,12 +3,4 @@
Object.defineProperty(exports, "__esModule", {
value: true
});
-exports.SwipeDirection = void 0;
-let SwipeDirection = exports.SwipeDirection = /*#__PURE__*/function (SwipeDirection) {
- SwipeDirection["SWIPE_UP"] = "SWIPE_UP";
- SwipeDirection["SWIPE_DOWN"] = "SWIPE_DOWN";
- SwipeDirection["SWIPE_LEFT"] = "SWIPE_LEFT";
- SwipeDirection["SWIPE_RIGHT"] = "SWIPE_RIGHT";
- return SwipeDirection;
-}({});
//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/lib/commonjs/typings/index.js.map b/lib/commonjs/typings/index.js.map
index 1b6eb0d..6aff261 100644
--- a/lib/commonjs/typings/index.js.map
+++ b/lib/commonjs/typings/index.js.map
@@ -1 +1 @@
-{"version":3,"names":["SwipeDirection","exports"],"sourceRoot":"../../../src","sources":["typings/index.ts"],"mappings":";;;;;;IASYA,cAAc,GAAAC,OAAA,CAAAD,cAAA,0BAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAA,OAAdA,cAAc;AAAA","ignoreList":[]}
+{"version":3,"names":[],"sourceRoot":"../../../src","sources":["typings/index.ts"],"mappings":"","ignoreList":[]}
diff --git a/lib/module/ReactNativeZoomableView.js b/lib/module/ReactNativeZoomableView.js
index e269932..e755499 100644
--- a/lib/module/ReactNativeZoomableView.js
+++ b/lib/module/ReactNativeZoomableView.js
@@ -1,9 +1,11 @@
"use strict";
import { debounce, defaults } from 'lodash';
-import React, { useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from 'react';
-import { Animated, PanResponder, StyleSheet, View } from 'react-native';
-import { getZoomToAnimation } from './animations';
+import React, { forwardRef, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from 'react';
+import { View } from 'react-native';
+import { Gesture, GestureDetector, GestureHandlerRootView } from 'react-native-gesture-handler';
+import Animated, { cancelAnimation, makeMutable, runOnJS, useAnimatedReaction, useAnimatedStyle, useDerivedValue, useSharedValue, withTiming } from 'react-native-reanimated';
+import { zoomToAnimation } from './animations';
import { AnimatedTouchFeedback } from './components';
import { StaticPin } from './components/StaticPin';
import { DebugTouchPoint } from './debugHelper';
@@ -13,15 +15,15 @@ import { getNextZoomStep } from './helper/getNextZoomStep';
import { useDebugPoints } from './hooks/useDebugPoints';
import { useLatestCallback } from './hooks/useLatestCallback';
import { useZoomSubject } from './hooks/useZoomSubject';
+import { ReactNativeZoomableViewContext } from './ReactNativeZoomableViewContext';
+import { styles } from './styles';
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
-const ReactNativeZoomableView = (props, ref) => {
+const ReactNativeZoomableViewInner = (props, ref) => {
const {
wrapperRef: zoomSubjectWrapperRef,
measure: measureZoomSubject,
originalWidth,
originalHeight,
- originalPageX,
- originalPageY,
originalX,
originalY
} = useZoomSubject();
@@ -34,12 +36,8 @@ const ReactNativeZoomableView = (props, ref) => {
debugPoints,
setDebugPoints,
setPinchDebugPoints
- } = useDebugPoints({
- originalPageX,
- originalPageY
- });
- const gestureHandlers = useRef();
- const doubleTapFirstTapReleaseTimestamp = useRef();
+ } = useDebugPoints();
+ const doubleTapFirstTapReleaseTimestamp = useSharedValue(undefined);
props = defaults({}, props, {
zoomEnabled: true,
panEnabled: true,
@@ -50,7 +48,7 @@ const ReactNativeZoomableView = (props, ref) => {
minZoom: 0.5,
pinchToZoomInSensitivity: 1,
pinchToZoomOutSensitivity: 1,
- movementSensibility: 1,
+ movementSensitivity: 1,
doubleTapDelay: 300,
zoomStep: 0.5,
onLongPress: undefined,
@@ -65,36 +63,67 @@ const ReactNativeZoomableView = (props, ref) => {
disablePanOnInitialZoom: false
});
const {
+ debug,
staticPinIcon,
children,
visualTouchFeedbackEnabled,
doubleTapDelay,
- staticPinPosition,
- onStaticPinLongPress,
- onStaticPinPress,
+ staticPinPosition: propStaticPinPosition,
+ contentWidth: propContentWidth,
+ contentHeight: propContentHeight,
+ onTransform,
+ onStaticPinPositionMove,
+ onPanResponderMove,
+ zoomEnabled: propZoomEnabled,
+ maxZoom: propMaxZoom,
+ minZoom: propMinZoom,
+ pinchToZoomInSensitivity: propPinchToZoomInSensitivity,
+ pinchToZoomOutSensitivity: propPinchToZoomOutSensitivity,
+ movementSensitivity: propMovementSensitivity,
+ panEnabled: propPanEnabled,
+ disablePanOnInitialZoom: propDisablePanOnInitialZoom,
+ initialZoom: propsInitialZoom,
pinProps
} = props;
- const panAnim = useRef(new Animated.ValueXY({
- x: 0,
- y: 0
+ const offsetX = useSharedValue(0);
+ const offsetY = useSharedValue(0);
+ const zoom = useSharedValue(1);
+ const inverseZoom = useDerivedValue(() => 1 / zoom.value);
+ const inverseZoomStyle = useAnimatedStyle(() => ({
+ transform: [{
+ scale: inverseZoom.value
+ }]
}));
- const zoomAnim = useRef(new Animated.Value(1));
- const offsetX = useRef(0);
- const offsetY = useRef(0);
- const zoomLevel = useRef(1);
- const lastGestureCenterPosition = useRef(null);
- const lastGestureTouchDistance = useRef(150);
- const gestureType = useRef();
- const gestureStarted = useRef(false);
+ const lastGestureCenterPosition = useSharedValue(null);
+ const lastGestureTouchDistance = useSharedValue(150);
+ const gestureStarted = useSharedValue(false);
/**
* Last press time (used to evaluate whether user double tapped)
*/
- const longPressTimeout = useRef();
- const onTransformInvocationInitialized = useRef();
+ const longPressTimeout = useSharedValue(undefined);
+ const onTransformInvocationInitialized = useSharedValue(false);
const singleTapTimeoutId = useRef();
- const touches = useRef([]);
- const doubleTapFirstTap = useRef();
+ const touches = useSharedValue([]);
+ const doubleTapFirstTap = useSharedValue(undefined);
+ const gestureType = useSharedValue(undefined);
+ const staticPinPosition = useDerivedValue(() => propStaticPinPosition);
+ const contentWidth = useDerivedValue(() => propContentWidth);
+ const contentHeight = useDerivedValue(() => propContentHeight);
+ const zoomEnabled = useDerivedValue(() => propZoomEnabled);
+ const maxZoom = useDerivedValue(() => propMaxZoom);
+ const minZoom = useDerivedValue(() => propMinZoom);
+ const pinchToZoomInSensitivity = useDerivedValue(() => propPinchToZoomInSensitivity);
+ const pinchToZoomOutSensitivity = useDerivedValue(() => propPinchToZoomOutSensitivity);
+ const panEnabled = useDerivedValue(() => propPanEnabled);
+ const disablePanOnInitialZoom = useDerivedValue(() => propDisablePanOnInitialZoom);
+ const initialZoom = useDerivedValue(() => propsInitialZoom);
+ const movementSensitivity = useDerivedValue(() => propMovementSensitivity);
+ const onPanResponderGrant = useLatestCallback(props.onPanResponderGrant || (() => undefined));
+ const onPanResponderEnd = useLatestCallback(props.onPanResponderEnd || (() => undefined));
+ const onPanResponderTerminate = useLatestCallback(props.onPanResponderTerminate || (() => undefined));
+ const onZoomEnd = useLatestCallback(props.onZoomEnd || (() => undefined));
+ const onShiftingEnd = useLatestCallback(props.onShiftingEnd || (() => undefined));
/**
* Returns additional information about components current state for external event hooks
@@ -102,50 +131,50 @@ const ReactNativeZoomableView = (props, ref) => {
* @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;
+ const _getZoomableViewEventObject = (overwriteObj = {}) => {
+ 'worklet';
+
+ return Object.assign({
+ zoomLevel: zoom.value,
+ offsetX: offsetX.value,
+ offsetY: offsetY.value,
+ originalHeight: originalHeight.value,
+ originalWidth: originalWidth.value
+ }, overwriteObj);
+ };
+ const _staticPinPosition = () => {
+ 'worklet';
+
+ if (!staticPinPosition.value) return;
+ if (!contentWidth.value || !contentHeight.value) return;
return viewportPositionToImagePosition({
viewportPosition: {
- x: props.staticPinPosition.x,
- y: props.staticPinPosition.y
+ x: staticPinPosition.value.x,
+ y: staticPinPosition.value.y
},
imageSize: {
- height: props.contentHeight,
- width: props.contentWidth
+ height: contentHeight.value,
+ width: contentWidth.value
},
- zoomableEvent: {
- ..._getZoomableViewEventObject(),
- offsetX: offsetX.current,
- offsetY: offsetY.current,
- zoomLevel: zoomLevel.current
- }
+ zoomableEvent: _getZoomableViewEventObject({
+ offsetX: offsetX.value,
+ offsetY: offsetY.value,
+ zoomLevel: zoom.value
+ })
});
- });
+ };
const _updateStaticPin = useLatestCallback(() => {
const position = _staticPinPosition();
if (!position) return;
props.onStaticPinPositionChange?.(position);
});
const _addTouch = useLatestCallback(touch => {
- touches.current.push(touch);
- setStateTouches([...touches.current]);
+ touches.value.push(touch);
+ setStateTouches([...touches.value]);
});
const _removeTouch = useLatestCallback(touch => {
- touches.current.splice(touches.current.indexOf(touch), 1);
- setStateTouches([...touches.current]);
+ touches.value.splice(touches.value.indexOf(touch), 1);
+ setStateTouches([...touches.value]);
});
const onStaticPinPositionChange = useLatestCallback(props.onStaticPinPositionChange || (() => undefined));
const debouncedOnStaticPinPositionChange = useMemo(() => debounce(onStaticPinPositionChange, 100), []);
@@ -154,133 +183,92 @@ const ReactNativeZoomableView = (props, ref) => {
* try to invoke onTransform
* @private
*/
- const _invokeOnTransform = useLatestCallback(() => {
+ const _invokeOnTransform = () => {
+ 'worklet';
+
const zoomableViewEvent = _getZoomableViewEventObject();
const position = _staticPinPosition();
if (!zoomableViewEvent.originalWidth || !zoomableViewEvent.originalHeight) return {
successful: false
};
- props.onTransform?.(zoomableViewEvent);
+ onTransform?.(zoomableViewEvent);
if (position) {
- props.onStaticPinPositionMove?.(position);
- debouncedOnStaticPinPositionChange(position);
+ onStaticPinPositionMove?.(position);
+ runOnJS(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;
- if (props.initialOffsetX != null) offsetX.current = props.initialOffsetX;
- if (props.initialOffsetY != null) offsetY.current = props.initialOffsetY;
- panAnim.current.setValue({
- x: offsetX.current,
- y: offsetY.current
- });
- zoomAnim.current.setValue(zoomLevel.current);
- panAnim.current.addListener(({
- x,
- y
- }) => {
- offsetX.current = x;
- offsetY.current = y;
- });
- zoomAnim.current.addListener(({
- value
- }) => {
- zoomLevel.current = value;
- });
+ if (props.initialZoom) zoom.value = props.initialZoom;
+ if (props.initialOffsetX != null) offsetX.value = props.initialOffsetX;
+ if (props.initialOffsetY != null) offsetY.value = props.initialOffsetY;
}, []);
- const {
- zoomEnabled
- } = props;
- const initialZoom = useRef(props.initialZoom);
- initialZoom.current = props.initialZoom;
useLayoutEffect(() => {
- if (!zoomEnabled && initialZoom.current) {
- zoomLevel.current = initialZoom.current;
- zoomAnim.current.setValue(zoomLevel.current);
+ if (!propZoomEnabled && initialZoom.value) {
+ zoom.value = initialZoom.value;
}
- }, [zoomEnabled]);
- useLayoutEffect(() => {
- if (!onTransformInvocationInitialized.current && _invokeOnTransform().successful) {
- panAnim.current.addListener(() => _invokeOnTransform());
- zoomAnim.current.addListener(() => _invokeOnTransform());
- onTransformInvocationInitialized.current = true;
+ }, [propZoomEnabled]);
+ useAnimatedReaction(_getZoomableViewEventObject, () => {
+ if (!onTransformInvocationInitialized.value && _invokeOnTransform().successful) {
+ onTransformInvocationInitialized.value = true;
+ return;
}
+ if (onTransformInvocationInitialized.value) _invokeOnTransform();
},
- // FIXME: deps has implicit coupling with internal _invokeOnTransform logic
- [originalWidth, originalHeight]);
- const onLayout = useRef(props.onLayout);
- onLayout.current = props.onLayout;
+ // _invokeOnTransform may cause a re-render, which would call the evaluation again,
+ // causing an infinite loop. This deps array prevents the re-evaluation caused
+ // by the re-render, thus breaking the infinite loop.
+ []);
+ const onLayout = useLatestCallback(props.onLayout || (() => undefined));
// Handle original measurements changed
- useLayoutEffect(() => {
+ useAnimatedReaction(() => [originalHeight.value, originalWidth.value, originalX.value, originalY.value], () => {
// We use a custom `onLayout` event, so the clients can stay in-sync
// with when the internal measurements are actually saved to the state,
// thus helping them apply transformations at more accurate timings
const layout = {
- width: originalWidth,
- height: originalHeight,
- x: originalX,
- y: originalY
+ width: originalWidth.value,
+ height: originalHeight.value,
+ x: originalX.value,
+ y: originalY.value
};
- onLayout.current?.({
+ runOnJS(onLayout)({
nativeEvent: {
layout
}
});
- if (onTransformInvocationInitialized.current) _invokeOnTransform();
- }, [originalHeight, originalWidth, originalPageX, originalPageY, originalX, originalY]);
+ });
// Handle staticPinPosition changed
useLayoutEffect(() => {
- if (onTransformInvocationInitialized.current) _invokeOnTransform();
+ if (onTransformInvocationInitialized.value) _invokeOnTransform();
}, [props.staticPinPosition?.x, props.staticPinPosition?.y]);
-
- /**
- * Handles the start of touch events and checks for taps
- *
- * @param e
- * @param gestureState
- * @returns {boolean}
- *
- * @private
- */
- const _handleStartShouldSetPanResponder = useLatestCallback((e, gestureState) => {
- if (props.onStartShouldSetPanResponder) {
- props.onStartShouldSetPanResponder(e, gestureState, _getZoomableViewEventObject(), false);
+ const scheduleLongPressTimeout = useLatestCallback(e => {
+ if (props.onLongPress && props.longPressDuration) {
+ longPressTimeout.value = setTimeout(() => {
+ props.onLongPress?.(e, _getZoomableViewEventObject());
+ longPressTimeout.value = undefined;
+ }, props.longPressDuration);
}
-
- // Always set pan responder on start
- // of gesture so we can handle tap.
- // "Pan threshold validation" will be handled
- // in `onPanResponderMove` instead of in `onMoveShouldSetPanResponder`
- return true;
});
-
- /**
- * Calculates pinch distance
- *
- * @param e
- * @param gestureState
- * @private
- */
- const _handlePanResponderGrant = useLatestCallback((e, gestureState) => {
- if (props.onLongPress) {
- e.persist();
- longPressTimeout.current = setTimeout(() => {
- props.onLongPress?.(e, gestureState, _getZoomableViewEventObject());
- longPressTimeout.current = undefined;
- }, props.longPressDuration);
+ const clearLongPressTimeout = useLatestCallback(() => {
+ if (longPressTimeout.value) {
+ clearTimeout(longPressTimeout.value);
+ longPressTimeout.value = undefined;
}
- props.onPanResponderGrant?.(e, gestureState, _getZoomableViewEventObject());
- panAnim.current.stopAnimation();
- zoomAnim.current.stopAnimation();
- gestureStarted.current = true;
});
+ const _handlePanResponderGrant = e => {
+ 'worklet';
+
+ runOnJS(scheduleLongPressTimeout)(e);
+ runOnJS(onPanResponderGrant)(e, _getZoomableViewEventObject());
+ cancelAnimation(zoom);
+ cancelAnimation(offsetX);
+ cancelAnimation(offsetY);
+ gestureStarted.value = true;
+ };
/**
* Calculates the amount the offset should shift since the last position during panning
@@ -289,105 +277,86 @@ const ReactNativeZoomableView = (props, ref) => {
*
* @private
*/
- const _calcOffsetShiftSinceLastGestureState = useLatestCallback(gestureCenterPoint => {
- const {
- movementSensibility
- } = props;
+ const _calcOffsetShiftSinceLastGestureState = gestureCenterPoint => {
+ 'worklet';
+
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;
+ if (lastGestureCenterPosition.value && movementSensitivity.value) {
+ const dx = gestureCenterPoint.x - lastGestureCenterPosition.value.x;
+ const dy = gestureCenterPoint.y - lastGestureCenterPosition.value.y;
+ const shiftX = dx / zoom.value / movementSensitivity.value;
+ const shiftY = dy / zoom.value / movementSensitivity.value;
shift = {
x: shiftX,
y: shiftY
};
}
- lastGestureCenterPosition.current = gestureCenterPoint;
+ lastGestureCenterPosition.value = gestureCenterPoint;
return shift;
- });
+ };
/**
* 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;
- }
+ const _handlePinching = e => {
+ 'worklet';
+
+ if (!zoomEnabled.value) return;
+ const distance = calcGestureTouchDistance(e);
if (!distance) return;
- if (!lastGestureTouchDistance.current) return;
+ if (!lastGestureTouchDistance.value) 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;
+ const zoomGrowthFromLastGestureState = distance / lastGestureTouchDistance.value;
+ lastGestureTouchDistance.value = distance;
+ const pinchToZoomSensitivity = zoomGrowthFromLastGestureState < 1 ? pinchToZoomOutSensitivity.value : pinchToZoomInSensitivity.value;
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);
+ let newZoomLevel = zoom.value * (1 + deltaGrowthAdjustedBySensitivity);
// make sure max and min zoom levels are respected
- if (maxZoom != null && newZoomLevel > maxZoom) {
- newZoomLevel = maxZoom;
+ if (maxZoom.value != null && newZoomLevel > maxZoom.value) {
+ newZoomLevel = maxZoom.value;
}
- if (minZoom != null && newZoomLevel < minZoom) {
- newZoomLevel = minZoom;
+ if (minZoom.value != null && newZoomLevel < minZoom.value) {
+ newZoomLevel = minZoom.value;
}
- const gestureCenterPoint = calcGestureCenterPoint(e, gestureState);
+ const gestureCenterPoint = calcGestureCenterPoint(e);
if (!gestureCenterPoint) return;
let zoomCenter = {
- x: gestureCenterPoint.x - originalPageX,
- y: gestureCenterPoint.y - originalPageY
+ x: gestureCenterPoint.x,
+ y: gestureCenterPoint.y
};
- if (props.staticPinPosition) {
+ if (staticPinPosition.value) {
// When we use a static pin position, the zoom centre is the same as that position,
// otherwise the pin moves around way too much while zooming.
zoomCenter = {
- x: props.staticPinPosition.x,
- y: props.staticPinPosition.y
+ x: staticPinPosition.value.x,
+ y: staticPinPosition.value.y
};
}
// Uncomment to debug
- props.debug && setPinchDebugPoints(e, zoomCenter);
- const oldOffsetX = offsetX.current;
- const oldOffsetY = offsetY.current;
- const oldScale = zoomLevel.current;
+ debug && runOnJS(setPinchDebugPoints)(e, zoomCenter);
+ const oldOffsetX = offsetX.value;
+ const oldOffsetY = offsetY.value;
+ const oldScale = zoom.value;
const newScale = newZoomLevel;
- if (!originalHeight || !originalWidth) return;
- let newOffsetY = calcNewScaledOffsetForZoomCentering(oldOffsetY, originalHeight, oldScale, newScale, zoomCenter.y);
- let newOffsetX = calcNewScaledOffsetForZoomCentering(oldOffsetX, originalWidth, oldScale, newScale, zoomCenter.x);
+ if (!originalHeight.value || !originalWidth.value) return;
+ let newOffsetY = calcNewScaledOffsetForZoomCentering(oldOffsetY, originalHeight.value, oldScale, newScale, zoomCenter.y);
+ let newOffsetX = calcNewScaledOffsetForZoomCentering(oldOffsetX, originalWidth.value, oldScale, newScale, zoomCenter.x);
const offsetShift = _calcOffsetShiftSinceLastGestureState(gestureCenterPoint);
if (offsetShift) {
newOffsetX += offsetShift.x;
newOffsetY += offsetShift.y;
}
- offsetX.current = newOffsetX;
- offsetY.current = newOffsetY;
- zoomLevel.current = newScale;
- panAnim.current.setValue({
- x: offsetX.current,
- y: offsetY.current
- });
- zoomAnim.current.setValue(zoomLevel.current);
- props.onZoomAfter?.(e, gestureState, _getZoomableViewEventObject());
- });
+ offsetX.value = newOffsetX;
+ offsetY.value = newOffsetY;
+ zoom.value = newScale;
+ };
/**
* Set the state to offset moved
@@ -396,23 +365,12 @@ const ReactNativeZoomableView = (props, ref) => {
* @param {number} newOffsetY
* @returns
*/
- const _setNewOffsetPosition = useLatestCallback((newOffsetX, newOffsetY) => {
- const {
- onShiftingBefore,
- onShiftingAfter
- } = props;
- if (onShiftingBefore?.(null, null, _getZoomableViewEventObject())) {
- return;
- }
- offsetX.current = newOffsetX;
- offsetY.current = newOffsetY;
- panAnim.current.setValue({
- x: offsetX.current,
- y: offsetY.current
- });
- zoomAnim.current.setValue(zoomLevel.current);
- onShiftingAfter?.(null, null, _getZoomableViewEventObject());
- });
+ const _setNewOffsetPosition = (newOffsetX, newOffsetY) => {
+ 'worklet';
+
+ offsetX.value = newOffsetX;
+ offsetY.value = newOffsetY;
+ };
/**
* Handles movement by tap and move
@@ -421,28 +379,32 @@ const ReactNativeZoomableView = (props, ref) => {
*
* @private
*/
- const _handleShifting = useLatestCallback(gestureState => {
+ const _handleShifting = e => {
+ 'worklet';
+
// Skips shifting if panEnabled is false or disablePanOnInitialZoom is true and we're on the initial zoom level
- if (!props.panEnabled || props.disablePanOnInitialZoom && zoomLevel.current === props.initialZoom) {
+ if (!panEnabled.value || disablePanOnInitialZoom.value && zoom.value === initialZoom.value) {
return;
}
const shift = _calcOffsetShiftSinceLastGestureState({
- x: gestureState.moveX,
- y: gestureState.moveY
+ x: e.allTouches[0].x,
+ y: e.allTouches[0].y
});
if (!shift) return;
- const newOffsetX = offsetX.current + shift.x;
- const newOffsetY = offsetY.current + shift.y;
- if (props.debug && originalPageX && originalPageY) {
- const x = gestureState.moveX - originalPageX;
- const y = gestureState.moveY - originalPageY;
- setDebugPoints([{
+ const newOffsetX = offsetX.value + shift.x;
+ const newOffsetY = offsetY.value + shift.y;
+ if (debug) {
+ const x = e.allTouches[0].x;
+ const y = e.allTouches[0].y;
+ runOnJS(setDebugPoints)([{
x,
y
}]);
}
_setNewOffsetPosition(newOffsetX, newOffsetY);
- });
+ };
+ const prevZoom = useSharedValue(1);
+ const zoomToDestination = useSharedValue(undefined);
/**
* Zooms to a specific level. A "zoom center" can be provided, which specifies
@@ -457,38 +419,32 @@ const ReactNativeZoomableView = (props, ref) => {
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;
- });
- }
+
+ // == Trigger Pan Animation to preserve the zoom center while zooming ==
+ // See the "Zoom Animation Support" block more details
+ zoomToDestination.value = zoomCenter;
+ prevZoom.value = zoom.value;
// == Perform Zoom Animation ==
- getZoomToAnimation(zoomAnim.current, newZoomLevel).start(() => {
- zoomAnim.current.removeListener(listenerId);
- });
- // == Zoom Animation Ends ==
+ zoom.value = withTiming(newZoomLevel, zoomToAnimation, () => {
+ 'worlet';
- props.onZoomAfter?.(null, null, _getZoomableViewEventObject());
+ // == Zoom Animation Ends ==
+ zoomToDestination.value = undefined;
+ runOnJS(onZoomEnd)(undefined, _getZoomableViewEventObject());
+ });
return true;
});
+ // Zoom Animation Support:
+ // Adapt offsets when zoom level changes during zoomTo animation
+ useAnimatedReaction(() => zoom.value, newZoom => {
+ if (!zoomToDestination.value) return;
+ offsetX.value = calcNewScaledOffsetForZoomCentering(offsetX.value, originalWidth.value, prevZoom.value, newZoom, zoomToDestination.value.x);
+ offsetY.value = calcNewScaledOffsetForZoomCentering(offsetY.value, originalHeight.value, prevZoom.value, newZoom, zoomToDestination.value.y);
+ prevZoom.value = newZoom;
+ });
+
/**
* Handles the double tap event
*
@@ -504,7 +460,7 @@ const ReactNativeZoomableView = (props, ref) => {
} = props;
onDoubleTapBefore?.(e, _getZoomableViewEventObject());
const nextZoomStep = getNextZoomStep({
- zoomLevel: zoomLevel.current,
+ zoomLevel: zoom.value,
zoomStep: props.zoomStep,
maxZoom: props.maxZoom,
initialZoom: props.initialZoom
@@ -513,8 +469,8 @@ const ReactNativeZoomableView = (props, ref) => {
// define new zoom position coordinates
const zoomPositionCoordinates = {
- x: e.nativeEvent.pageX - originalPageX,
- y: e.nativeEvent.pageY - originalPageY
+ x: e.allTouches[0].x,
+ y: e.allTouches[0].y
};
// if doubleTapZoomToCenter enabled -> always zoom to center instead
@@ -536,53 +492,54 @@ const ReactNativeZoomableView = (props, ref) => {
*
* @private
*/
- const _resolveAndHandleTap = useLatestCallback(e => {
+ const _resolveAndHandleTap = e => {
const now = Date.now();
- if (doubleTapFirstTapReleaseTimestamp.current && props.doubleTapDelay && now - doubleTapFirstTapReleaseTimestamp.current < props.doubleTapDelay) {
- doubleTapFirstTap.current && _addTouch({
- ...doubleTapFirstTap.current,
+ if (doubleTapFirstTapReleaseTimestamp.value && props.doubleTapDelay && now - doubleTapFirstTapReleaseTimestamp.value < props.doubleTapDelay) {
+ doubleTapFirstTap.value && _addTouch({
+ ...doubleTapFirstTap.value,
id: now.toString(),
isSecondTap: true
});
singleTapTimeoutId.current && clearTimeout(singleTapTimeoutId.current);
- delete doubleTapFirstTapReleaseTimestamp.current;
+ delete doubleTapFirstTapReleaseTimestamp.value;
delete singleTapTimeoutId.current;
- delete doubleTapFirstTap.current;
+ delete doubleTapFirstTap.value;
_handleDoubleTap(e);
} else {
- doubleTapFirstTapReleaseTimestamp.current = now;
- doubleTapFirstTap.current = {
+ doubleTapFirstTapReleaseTimestamp.value = now;
+ doubleTapFirstTap.value = {
id: now.toString(),
- x: e.nativeEvent.pageX - originalPageX,
- y: e.nativeEvent.pageY - originalPageY
+ x: e.allTouches[0].x,
+ y: e.allTouches[0].y
};
- _addTouch(doubleTapFirstTap.current);
-
- // persist event so e.nativeEvent is preserved after a timeout delay
- e.persist();
+ _addTouch(doubleTapFirstTap.value);
singleTapTimeoutId.current = setTimeout(() => {
- delete doubleTapFirstTapReleaseTimestamp.current;
+ delete doubleTapFirstTapReleaseTimestamp.value;
delete singleTapTimeoutId.current;
// Pan to the tapped location
- if (props.staticPinPosition && doubleTapFirstTap.current) {
- const tapX = props.staticPinPosition.x - doubleTapFirstTap.current.x;
- const tapY = props.staticPinPosition.y - doubleTapFirstTap.current.y;
- Animated.timing(panAnim.current, {
- toValue: {
- x: offsetX.current + tapX / zoomLevel.current,
- y: offsetY.current + tapY / zoomLevel.current
- },
- useNativeDriver: true,
+ if (props.staticPinPosition && doubleTapFirstTap.value) {
+ const tapX = props.staticPinPosition.x - doubleTapFirstTap.value.x;
+ const tapY = props.staticPinPosition.y - doubleTapFirstTap.value.y;
+ const toX = offsetX.value + tapX / zoom.value;
+ const toY = offsetY.value + tapY / zoom.value;
+ const animationsDone = makeMutable(0);
+ const done = () => {
+ 'worklet';
+
+ if (++animationsDone.value >= 2) runOnJS(_updateStaticPin)();
+ };
+ offsetX.value = withTiming(toX, {
+ duration: 200
+ }, done);
+ offsetY.value = withTiming(toY, {
duration: 200
- }).start(() => {
- _updateStaticPin();
- });
+ }, done);
}
props.onSingleTap?.(e, _getZoomableViewEventObject());
}, props.doubleTapDelay);
}
- });
+ };
const publicMoveStaticPinTo = useLatestCallback((position, duration) => {
const {
staticPinPosition,
@@ -590,28 +547,24 @@ const ReactNativeZoomableView = (props, ref) => {
contentHeight
} = props;
if (!staticPinPosition) return;
- if (!originalWidth || !originalHeight) return;
+ if (!originalWidth.value || !originalHeight.value) return;
if (!contentWidth || !contentHeight) return;
// Offset for the static pin
- const pinX = staticPinPosition.x - originalWidth / 2;
- const pinY = staticPinPosition.y - originalHeight / 2;
- offsetX.current = contentWidth / 2 - position.x + pinX / zoomLevel.current;
- offsetY.current = contentHeight / 2 - position.y + pinY / zoomLevel.current;
+ const pinX = staticPinPosition.x - originalWidth.value / 2;
+ const pinY = staticPinPosition.y - originalHeight.value / 2;
+ const newOffsetX = contentWidth / 2 - position.x + pinX / zoom.value;
+ const newOffsetY = contentHeight / 2 - position.y + pinY / zoom.value;
if (duration) {
- Animated.timing(panAnim.current, {
- toValue: {
- x: offsetX.current,
- y: offsetY.current
- },
- useNativeDriver: true,
+ offsetX.value = withTiming(newOffsetX, {
+ duration
+ });
+ offsetY.value = withTiming(newOffsetY, {
duration
- }).start();
- } else {
- panAnim.current.setValue({
- x: offsetX.current,
- y: offsetY.current
});
+ } else {
+ offsetX.value = newOffsetX;
+ offsetY.value = newOffsetY;
}
});
@@ -629,7 +582,7 @@ const ReactNativeZoomableView = (props, ref) => {
const publicZoomBy = useLatestCallback(zoomLevelChange => {
// if no zoom level Change given -> just use zoom step
zoomLevelChange ||= props.zoomStep || 0;
- return publicZoomTo(zoomLevel.current + zoomLevelChange);
+ return publicZoomTo(zoom.value + zoomLevelChange);
});
/**
@@ -642,9 +595,9 @@ const ReactNativeZoomableView = (props, ref) => {
* @return {bool}
*/
const publicMoveTo = useLatestCallback((newOffsetX, newOffsetY) => {
- if (!originalWidth || !originalHeight) return;
- const offsetX = (newOffsetX - originalWidth / 2) / zoomLevel.current;
- const offsetY = (newOffsetY - originalHeight / 2) / zoomLevel.current;
+ if (!originalWidth.value || !originalHeight.value) return;
+ const offsetX = (newOffsetX - originalWidth.value / 2) / zoom.value;
+ const offsetY = (newOffsetY - originalHeight.value / 2) / zoom.value;
_setNewOffsetPosition(-offsetX, -offsetY);
});
@@ -659,8 +612,8 @@ const ReactNativeZoomableView = (props, ref) => {
* @return {bool}
*/
const publicMoveBy = useLatestCallback((offsetChangeX, offsetChangeY) => {
- const newOffsetX = (offsetX.current * zoomLevel.current - offsetChangeX) / zoomLevel.current;
- const newOffsetY = (offsetY.current * zoomLevel.current - offsetChangeY) / zoomLevel.current;
+ const newOffsetX = (offsetX.value * zoom.value - offsetChangeX) / zoom.value;
+ const newOffsetY = (offsetY.value * zoom.value - offsetChangeY) / zoom.value;
_setNewOffsetPosition(newOffsetX, newOffsetY);
});
useImperativeHandle(ref, () => ({
@@ -670,7 +623,7 @@ const ReactNativeZoomableView = (props, ref) => {
moveBy: publicMoveBy,
moveStaticPinTo: publicMoveStaticPinTo,
get gestureStarted() {
- return gestureStarted.current;
+ return gestureStarted.value;
}
}));
@@ -682,28 +635,27 @@ const ReactNativeZoomableView = (props, ref) => {
*
* @private
*/
- const _handlePanResponderEnd = useLatestCallback((e, gestureState) => {
- if (!gestureType.current) {
- _resolveAndHandleTap(e);
- }
- setDebugPoints([]);
- lastGestureCenterPosition.current = null;
- if (longPressTimeout.current) {
- clearTimeout(longPressTimeout.current);
- longPressTimeout.current = undefined;
+ const _handlePanResponderEnd = e => {
+ 'worklet';
+
+ if (!gestureType.value) {
+ runOnJS(_resolveAndHandleTap)(e);
}
- props.onPanResponderEnd?.(e, gestureState, _getZoomableViewEventObject());
- if (gestureType.current === 'pinch') {
- props.onZoomEnd?.(e, gestureState, _getZoomableViewEventObject());
- } else if (gestureType.current === 'shift') {
- props.onShiftingEnd?.(e, gestureState, _getZoomableViewEventObject());
+ runOnJS(setDebugPoints)([]);
+ lastGestureCenterPosition.value = null;
+ runOnJS(clearLongPressTimeout)();
+ runOnJS(onPanResponderEnd)(e, _getZoomableViewEventObject());
+ if (gestureType.value === 'pinch') {
+ runOnJS(onZoomEnd)(e, _getZoomableViewEventObject());
+ } else if (gestureType.value === 'shift') {
+ runOnJS(onShiftingEnd)(e, _getZoomableViewEventObject());
}
- if (props.staticPinPosition) {
- _updateStaticPin();
+ if (staticPinPosition.value) {
+ runOnJS(_updateStaticPin)();
}
- gestureType.current = undefined;
- gestureStarted.current = false;
- });
+ gestureType.value = undefined;
+ gestureStarted.value = false;
+ };
/**
* Handles the actual movement of our pan responder
@@ -713,144 +665,147 @@ const ReactNativeZoomableView = (props, ref) => {
*
* @private
*/
- const _handlePanResponderMove = useLatestCallback((e, gestureState) => {
- if (props.onPanResponderMove) {
- if (props.onPanResponderMove(e, gestureState, _getZoomableViewEventObject())) {
- return false;
- }
+ const _handlePanResponderMove = (e, gestureState) => {
+ 'worklet';
+
+ if (onPanResponderMove?.(e, _getZoomableViewEventObject())) {
+ 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);
+ if (e.numberOfTouches <= 2) {
+ if (!gestureStarted.value) {
+ _handlePanResponderGrant(e);
}
} else {
- if (gestureStarted.current) {
- _handlePanResponderEnd(e, gestureState);
+ if (gestureStarted.value) {
+ _handlePanResponderEnd(e);
}
- return true;
+ return;
}
- if (gestureState.numberActiveTouches === 2) {
- if (longPressTimeout.current) {
- clearTimeout(longPressTimeout.current);
- longPressTimeout.current = undefined;
- }
+ if (e.numberOfTouches === 2) {
+ runOnJS(clearLongPressTimeout)();
// 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);
+ if (gestureType.value !== 'pinch') {
+ lastGestureCenterPosition.value = calcGestureCenterPoint(e);
+ lastGestureTouchDistance.value = calcGestureTouchDistance(e);
}
+ gestureType.value = 'pinch';
+ _handlePinching(e);
+ } else if (e.numberOfTouches === 1) {
const {
dx,
dy
} = gestureState;
+ if (longPressTimeout.value && (Math.abs(dx) > 5 || Math.abs(dy) > 5)) {
+ runOnJS(clearLongPressTimeout)();
+ }
+
+ // change some measurement states when switching gesture to ensure a smooth transition
+ if (gestureType.value !== 'shift') {
+ lastGestureCenterPosition.value = calcGestureCenterPoint(e);
+ }
const isShiftGesture = Math.abs(dx) > 2 || Math.abs(dy) > 2;
if (isShiftGesture) {
- gestureType.current = 'shift';
- _handleShifting(gestureState);
+ gestureType.value = 'shift';
+ _handleShifting(e);
}
}
- });
- 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)
+ };
+ const firstTouch = useSharedValue(undefined);
+ const gesture = Gesture.Manual().onTouchesDown((e, stateManager) => {
+ // only begin if this is the first touch
+ if (!firstTouch.value) {
+ stateManager.activate();
+ stateManager.begin();
+ firstTouch.value = {
+ x: e.allTouches[0].x,
+ y: e.allTouches[0].y
+ };
+ _handlePanResponderGrant(e);
+ }
+ }).onTouchesMove(e => {
+ const dx = e.allTouches[0].x - (firstTouch.value?.x || 0);
+ const dy = e.allTouches[0].y - (firstTouch.value?.y || 0);
+ _handlePanResponderMove(e, {
+ dx,
+ dy
});
- }, []);
- 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: [
- // 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
- {
- scaleX: zoomAnim.current
- }, {
- scaleY: zoomAnim.current
- }, ...panAnim.current.getTranslateTransform()]
- }],
- children: children
- }), visualTouchFeedbackEnabled && stateTouches.map(touch => doubleTapDelay && /*#__PURE__*/_jsx(AnimatedTouchFeedback, {
- x: touch.x,
- y: touch.y,
- animationDuration: doubleTapDelay,
- onAnimationDone: () => {
- _removeTouch(touch);
- }
- }, touch.id)), debugPoints.map(({
- x,
- y
- }, index) => {
- return /*#__PURE__*/_jsx(DebugTouchPoint, {
- x: x,
- y: y
- }, index);
- }), staticPinPosition && /*#__PURE__*/_jsx(StaticPin, {
- staticPinIcon: staticPinIcon,
- staticPinPosition: staticPinPosition,
- pinSize: pinSize,
- onPress: onStaticPinPress,
- onLongPress: onStaticPinLongPress,
- onParentMove: _handlePanResponderMove,
- setPinSize: setPinSize,
- pinProps: pinProps
- })]
+ }).onTouchesUp((e, stateManager) => {
+ // only end if this is the last touch being lifted
+ if (e.numberOfTouches === 0) {
+ _handlePanResponderEnd(e);
+ stateManager.end();
+ }
+ }).onTouchesCancelled((e, stateManager) => {
+ _handlePanResponderEnd(e);
+ runOnJS(onPanResponderTerminate)(e, _getZoomableViewEventObject());
+ stateManager.end();
+ }).onFinalize(() => {
+ firstTouch.value = undefined;
+ });
+ const transformStyle = useAnimatedStyle(() => {
+ return {
+ transform: [
+ // In RN79, we need to split the scale into X and Y to avoid
+ // the content getting pixelated when zooming in
+ {
+ scaleX: zoom.value
+ }, {
+ scaleY: zoom.value
+ }, {
+ translateX: offsetX.value
+ }, {
+ translateY: offsetY.value
+ }]
+ };
+ });
+ return /*#__PURE__*/_jsx(ReactNativeZoomableViewContext.Provider, {
+ value: {
+ zoom,
+ inverseZoom,
+ inverseZoomStyle,
+ offsetX,
+ offsetY
+ },
+ children: /*#__PURE__*/_jsx(GestureHandlerRootView, {
+ children: /*#__PURE__*/_jsx(GestureDetector, {
+ gesture: gesture,
+ children: /*#__PURE__*/_jsxs(View, {
+ style: styles.container,
+ ref: zoomSubjectWrapperRef,
+ onLayout: measureZoomSubject,
+ children: [/*#__PURE__*/_jsx(Animated.View, {
+ style: [styles.zoomSubject, props.style, transformStyle],
+ children: children
+ }), visualTouchFeedbackEnabled && stateTouches.map(touch => doubleTapDelay && /*#__PURE__*/_jsx(AnimatedTouchFeedback, {
+ x: touch.x,
+ y: touch.y,
+ animationDuration: doubleTapDelay,
+ onAnimationDone: () => {
+ _removeTouch(touch);
+ }
+ }, touch.id)), debugPoints.map(({
+ x,
+ y
+ }, index) => {
+ return /*#__PURE__*/_jsx(DebugTouchPoint, {
+ x: x,
+ y: y
+ }, index);
+ }), propStaticPinPosition && /*#__PURE__*/_jsx(StaticPin, {
+ staticPinIcon: staticPinIcon,
+ staticPinPosition: propStaticPinPosition,
+ pinSize: pinSize,
+ setPinSize: setPinSize,
+ pinProps: pinProps
+ })]
+ })
+ })
+ })
});
};
-const styles = StyleSheet.create({
- container: {
- alignItems: 'center',
- flex: 1,
- justifyContent: 'center',
- overflow: 'hidden',
- position: 'relative'
- },
- zoomSubject: {
- alignItems: 'center',
- flex: 1,
- justifyContent: 'center',
- width: '100%'
- }
-});
-export default ReactNativeZoomableView;
-export { ReactNativeZoomableView };
+export const ReactNativeZoomableView = /*#__PURE__*/forwardRef(ReactNativeZoomableViewInner);
//# sourceMappingURL=ReactNativeZoomableView.js.map
\ No newline at end of file
diff --git a/lib/module/ReactNativeZoomableView.js.map b/lib/module/ReactNativeZoomableView.js.map
index e72f481..40e7c61 100644
--- a/lib/module/ReactNativeZoomableView.js.map
+++ b/lib/module/ReactNativeZoomableView.js.map
@@ -1 +1 @@
-{"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":[]}
+{"version":3,"names":["debounce","defaults","React","forwardRef","useImperativeHandle","useLayoutEffect","useMemo","useRef","useState","View","Gesture","GestureDetector","GestureHandlerRootView","Animated","cancelAnimation","makeMutable","runOnJS","useAnimatedReaction","useAnimatedStyle","useDerivedValue","useSharedValue","withTiming","zoomToAnimation","AnimatedTouchFeedback","StaticPin","DebugTouchPoint","calcGestureCenterPoint","calcGestureTouchDistance","calcNewScaledOffsetForZoomCentering","viewportPositionToImagePosition","getNextZoomStep","useDebugPoints","useLatestCallback","useZoomSubject","ReactNativeZoomableViewContext","styles","jsx","_jsx","jsxs","_jsxs","ReactNativeZoomableViewInner","props","ref","wrapperRef","zoomSubjectWrapperRef","measure","measureZoomSubject","originalWidth","originalHeight","originalX","originalY","pinSize","setPinSize","width","height","stateTouches","setStateTouches","debugPoints","setDebugPoints","setPinchDebugPoints","doubleTapFirstTapReleaseTimestamp","undefined","zoomEnabled","panEnabled","initialZoom","initialOffsetX","initialOffsetY","maxZoom","minZoom","pinchToZoomInSensitivity","pinchToZoomOutSensitivity","movementSensitivity","doubleTapDelay","zoomStep","onLongPress","longPressDuration","contentWidth","contentHeight","visualTouchFeedbackEnabled","staticPinPosition","staticPinIcon","onStaticPinPositionChange","onStaticPinPositionMove","disablePanOnInitialZoom","debug","children","propStaticPinPosition","propContentWidth","propContentHeight","onTransform","onPanResponderMove","propZoomEnabled","propMaxZoom","propMinZoom","propPinchToZoomInSensitivity","propPinchToZoomOutSensitivity","propMovementSensitivity","propPanEnabled","propDisablePanOnInitialZoom","propsInitialZoom","pinProps","offsetX","offsetY","zoom","inverseZoom","value","inverseZoomStyle","transform","scale","lastGestureCenterPosition","lastGestureTouchDistance","gestureStarted","longPressTimeout","onTransformInvocationInitialized","singleTapTimeoutId","touches","doubleTapFirstTap","gestureType","onPanResponderGrant","onPanResponderEnd","onPanResponderTerminate","onZoomEnd","onShiftingEnd","_getZoomableViewEventObject","overwriteObj","Object","assign","zoomLevel","_staticPinPosition","viewportPosition","x","y","imageSize","zoomableEvent","_updateStaticPin","position","_addTouch","touch","push","_removeTouch","splice","indexOf","debouncedOnStaticPinPositionChange","_invokeOnTransform","zoomableViewEvent","successful","onLayout","layout","nativeEvent","scheduleLongPressTimeout","e","setTimeout","clearLongPressTimeout","clearTimeout","_handlePanResponderGrant","_calcOffsetShiftSinceLastGestureState","gestureCenterPoint","shift","dx","dy","shiftX","shiftY","_handlePinching","distance","zoomGrowthFromLastGestureState","pinchToZoomSensitivity","deltaGrowth","deltaGrowthAdjustedBySensitivity","newZoomLevel","zoomCenter","oldOffsetX","oldOffsetY","oldScale","newScale","newOffsetY","newOffsetX","offsetShift","_setNewOffsetPosition","_handleShifting","allTouches","prevZoom","zoomToDestination","publicZoomTo","newZoom","_handleDoubleTap","onDoubleTapBefore","onDoubleTapAfter","doubleTapZoomToCenter","nextZoomStep","zoomPositionCoordinates","_resolveAndHandleTap","now","Date","id","toString","isSecondTap","current","tapX","tapY","toX","toY","animationsDone","done","duration","onSingleTap","publicMoveStaticPinTo","pinX","pinY","publicZoomBy","zoomLevelChange","publicMoveTo","publicMoveBy","offsetChangeX","offsetChangeY","zoomTo","zoomBy","moveTo","moveBy","moveStaticPinTo","_handlePanResponderEnd","_handlePanResponderMove","gestureState","numberOfTouches","Math","abs","isShiftGesture","firstTouch","gesture","Manual","onTouchesDown","stateManager","activate","begin","onTouchesMove","onTouchesUp","end","onTouchesCancelled","onFinalize","transformStyle","scaleX","scaleY","translateX","translateY","Provider","style","container","zoomSubject","map","animationDuration","onAnimationDone","index","ReactNativeZoomableView"],"sourceRoot":"../../src","sources":["ReactNativeZoomableView.tsx"],"mappings":"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","ignoreList":[]}
diff --git a/lib/module/ReactNativeZoomableViewContext.js b/lib/module/ReactNativeZoomableViewContext.js
new file mode 100644
index 0000000..25ec20e
--- /dev/null
+++ b/lib/module/ReactNativeZoomableViewContext.js
@@ -0,0 +1,12 @@
+"use strict";
+
+import { createContext, useContext } from 'react';
+export const ReactNativeZoomableViewContext = /*#__PURE__*/createContext(null);
+export const useZoomableViewContext = () => {
+ const context = useContext(ReactNativeZoomableViewContext);
+ if (!context) {
+ throw new Error('useZoomableViewContext must be used within ReactNativeZoomableView');
+ }
+ return context;
+};
+//# sourceMappingURL=ReactNativeZoomableViewContext.js.map
\ No newline at end of file
diff --git a/lib/module/ReactNativeZoomableViewContext.js.map b/lib/module/ReactNativeZoomableViewContext.js.map
new file mode 100644
index 0000000..02f538d
--- /dev/null
+++ b/lib/module/ReactNativeZoomableViewContext.js.map
@@ -0,0 +1 @@
+{"version":3,"names":["createContext","useContext","ReactNativeZoomableViewContext","useZoomableViewContext","context","Error"],"sourceRoot":"../../src","sources":["ReactNativeZoomableViewContext.tsx"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;AAGjD,OAAO,MAAMC,8BAA8B,gBAAGF,aAAa,CAQjD,IAAI,CAAC;AAEf,OAAO,MAAMG,sBAAsB,GAAGA,CAAA,KAAM;EAC1C,MAAMC,OAAO,GAAGH,UAAU,CAACC,8BAA8B,CAAC;EAE1D,IAAI,CAACE,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CACb,oEACF,CAAC;EACH;EACA,OAAOD,OAAO;AAChB,CAAC","ignoreList":[]}
diff --git a/lib/module/animations/index.js b/lib/module/animations/index.js
index 3cf33e8..8e2986d 100644
--- a/lib/module/animations/index.js
+++ b/lib/module/animations/index.js
@@ -1,11 +1,8 @@
"use strict";
-import { Animated, Easing } from 'react-native';
-export function getZoomToAnimation(animValue, toValue) {
- return Animated.timing(animValue, {
- easing: Easing.out(Easing.ease),
- toValue,
- useNativeDriver: true
- });
-}
+import { Easing } from 'react-native-reanimated';
+export const zoomToAnimation = {
+ easing: Easing.out(Easing.ease),
+ duration: 250
+};
//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/lib/module/animations/index.js.map b/lib/module/animations/index.js.map
index 7c5e7f2..19e5651 100644
--- a/lib/module/animations/index.js.map
+++ b/lib/module/animations/index.js.map
@@ -1 +1 @@
-{"version":3,"names":["Animated","Easing","getZoomToAnimation","animValue","toValue","timing","easing","out","ease","useNativeDriver"],"sourceRoot":"../../../src","sources":["animations/index.ts"],"mappings":";;AAAA,SAASA,QAAQ,EAAEC,MAAM,QAAQ,cAAc;AAE/C,OAAO,SAASC,kBAAkBA,CAACC,SAAyB,EAAEC,OAAe,EAAE;EAC7E,OAAOJ,QAAQ,CAACK,MAAM,CAACF,SAAS,EAAE;IAChCG,MAAM,EAAEL,MAAM,CAACM,GAAG,CAACN,MAAM,CAACO,IAAI,CAAC;IAC/BJ,OAAO;IACPK,eAAe,EAAE;EACnB,CAAC,CAAC;AACJ","ignoreList":[]}
+{"version":3,"names":["Easing","zoomToAnimation","easing","out","ease","duration"],"sourceRoot":"../../../src","sources":["animations/index.ts"],"mappings":";;AAAA,SAASA,MAAM,QAA0B,yBAAyB;AAElE,OAAO,MAAMC,eAAiC,GAAG;EAC/CC,MAAM,EAAEF,MAAM,CAACG,GAAG,CAACH,MAAM,CAACI,IAAI,CAAC;EAC/BC,QAAQ,EAAE;AACZ,CAAC","ignoreList":[]}
diff --git a/lib/module/components/FixedSize.js b/lib/module/components/FixedSize.js
new file mode 100644
index 0000000..8791e6e
--- /dev/null
+++ b/lib/module/components/FixedSize.js
@@ -0,0 +1,38 @@
+"use strict";
+
+import React from 'react';
+import Animated from 'react-native-reanimated';
+import { ReactNativeZoomableViewContext } from '../ReactNativeZoomableViewContext';
+/**
+ * A wrapper component that keeps elements at a fixed visual size regardless of zoom level.
+ *
+ * @param {{
+ * left: number;
+ * top: number;
+ * children: React.ReactNode;
+ * }} param0
+ * @param {number} param0.left The left position in percentage (0-100)
+ * @param {number} param0.top The top position in percentage (0-100)
+ * @param {React.ReactNode} param0.children The children to render inside the fixed size container
+ * @returns {*}
+ */
+import { jsx as _jsx } from "react/jsx-runtime";
+export const FixedSize = ({
+ left,
+ top,
+ children
+}) => {
+ const context = React.useContext(ReactNativeZoomableViewContext);
+ return /*#__PURE__*/_jsx(Animated.View, {
+ style: [context?.inverseZoomStyle, {
+ width: 1,
+ height: 1,
+ position: 'absolute',
+ left: `${left}%`,
+ top: `${top}%`
+ }],
+ children: children
+ });
+};
+export default FixedSize;
+//# sourceMappingURL=FixedSize.js.map
\ No newline at end of file
diff --git a/lib/module/components/FixedSize.js.map b/lib/module/components/FixedSize.js.map
new file mode 100644
index 0000000..0d1481c
--- /dev/null
+++ b/lib/module/components/FixedSize.js.map
@@ -0,0 +1 @@
+{"version":3,"names":["React","Animated","ReactNativeZoomableViewContext","jsx","_jsx","FixedSize","left","top","children","context","useContext","View","style","inverseZoomStyle","width","height","position"],"sourceRoot":"../../../src","sources":["components/FixedSize.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,QAAQ,MAAM,yBAAyB;AAE9C,SAASC,8BAA8B,QAAQ,mCAAmC;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAZA,SAAAC,GAAA,IAAAC,IAAA;AAaA,OAAO,MAAMC,SAAS,GAAGA,CAAC;EACxBC,IAAI;EACJC,GAAG;EACHC;AAKF,CAAC,KAAK;EACJ,MAAMC,OAAO,GAAGT,KAAK,CAACU,UAAU,CAACR,8BAA8B,CAAC;EAEhE,oBACEE,IAAA,CAACH,QAAQ,CAACU,IAAI;IACZC,KAAK,EAAE,CACLH,OAAO,EAAEI,gBAAgB,EACzB;MACEC,KAAK,EAAE,CAAC;MACRC,MAAM,EAAE,CAAC;MACTC,QAAQ,EAAE,UAAU;MACpBV,IAAI,EAAE,GAAGA,IAAI,GAAG;MAChBC,GAAG,EAAE,GAAGA,GAAG;IACb,CAAC,CACD;IAAAC,QAAA,EAEDA;EAAQ,CACI,CAAC;AAEpB,CAAC;AAED,eAAeH,SAAS","ignoreList":[]}
diff --git a/lib/module/components/StaticPin.js b/lib/module/components/StaticPin.js
index 761afbd..13a7614 100644
--- a/lib/module/components/StaticPin.js
+++ b/lib/module/components/StaticPin.js
@@ -1,50 +1,22 @@
"use strict";
import React from 'react';
-import { Animated, Image, PanResponder, StyleSheet, View } from 'react-native';
+import { Image, StyleSheet, View } from 'react-native';
import { jsx as _jsx } from "react/jsx-runtime";
export const StaticPin = ({
staticPinPosition,
staticPinIcon,
pinSize,
- onParentMove,
- onPress,
- onLongPress,
setPinSize,
pinProps = {}
}) => {
- const tapTime = React.useRef(0);
const transform = [{
translateY: -pinSize.height
}, {
translateX: -pinSize.width / 2
}];
const opacity = pinSize.width && pinSize.height ? 1 : 0;
- const panResponder = React.useRef(PanResponder.create({
- onStartShouldSetPanResponder: () => {
- tapTime.current = Date.now();
-
- // We want to handle tap on this so set true
- return true;
- },
- onPanResponderMove: (evt, gestureState) => {
- // However if the user moves finger we want to pass this evt to parent
- // to handle panning (tap not recognized)
- if (Math.abs(gestureState.dx) > 5 && Math.abs(gestureState.dy) > 5) onParentMove(evt, gestureState);
- },
- onPanResponderRelease: (evt, gestureState) => {
- if (Math.abs(gestureState.dx) > 5 || Math.abs(gestureState.dy) > 5) return;
- const dt = Date.now() - tapTime.current;
- if (onPress && dt < 500) {
- onPress(evt);
- }
- if (onLongPress && dt > 500) {
- // RN long press is 500ms
- onLongPress(evt);
- }
- }
- })).current;
- return /*#__PURE__*/_jsx(Animated.View, {
+ return /*#__PURE__*/_jsx(View, {
style: [{
left: staticPinPosition.x,
top: staticPinPosition.y
@@ -63,7 +35,6 @@ export const StaticPin = ({
}) => {
setPinSize(layout);
},
- ...panResponder.panHandlers,
children: staticPinIcon ||
/*#__PURE__*/
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-use-before-define
diff --git a/lib/module/components/StaticPin.js.map b/lib/module/components/StaticPin.js.map
index 5b867c9..11c5718 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","Image","StyleSheet","View","jsx","_jsx","StaticPin","staticPinPosition","staticPinIcon","pinSize","setPinSize","pinProps","transform","translateY","height","translateX","width","opacity","style","left","x","top","y","styles","pinWrapper","children","onLayout","nativeEvent","layout","source","require","pin","create","position"],"sourceRoot":"../../../src","sources":["components/StaticPin.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,KAAK,EAAEC,UAAU,EAAEC,IAAI,QAAmB,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAIlE,OAAO,MAAMC,SAAS,GAAGA,CAAC;EACxBC,iBAAiB;EACjBC,aAAa;EACbC,OAAO;EACPC,UAAU;EACVC,QAAQ,GAAG,CAAC;AAOd,CAAC,KAAK;EACJ,MAAMC,SAAS,GAAG,CAChB;IAAEC,UAAU,EAAE,CAACJ,OAAO,CAACK;EAAO,CAAC,EAC/B;IAAEC,UAAU,EAAE,CAACN,OAAO,CAACO,KAAK,GAAG;EAAE,CAAC,CACnC;EAED,MAAMC,OAAO,GAAGR,OAAO,CAACO,KAAK,IAAIP,OAAO,CAACK,MAAM,GAAG,CAAC,GAAG,CAAC;EAEvD,oBACET,IAAA,CAACF,IAAI;IACHe,KAAK,EAAE,CACL;MACEC,IAAI,EAAEZ,iBAAiB,CAACa,CAAC;MACzBC,GAAG,EAAEd,iBAAiB,CAACe;IACzB,CAAC;IACD;IACAC,MAAM,CAACC,UAAU,EACjB;MAAEP,OAAO;MAAEL;IAAU,CAAC,CACtB;IAAA,GACED,QAAQ;IAAAc,QAAA,eAEZpB,IAAA,CAACF,IAAI;MACHuB,QAAQ,EAAEA,CAAC;QAAEC,WAAW,EAAE;UAAEC;QAAO;MAAE,CAAC,KAAK;QACzClB,UAAU,CAACkB,MAAM,CAAC;MACpB,CAAE;MAAAH,QAAA,EAEDjB,aAAa;MAAA;MACZ;MACAH,IAAA,CAACJ,KAAK;QAAC4B,MAAM,EAAEC,OAAO,CAAC,mBAAmB,CAAE;QAACZ,KAAK,EAAEK,MAAM,CAACQ;MAAI,CAAE;IAClE,CACG;EAAC,CACH,CAAC;AAEX,CAAC;AAED,MAAMR,MAAM,GAAGrB,UAAU,CAAC8B,MAAM,CAAC;EAC/BD,GAAG,EAAE;IACHjB,MAAM,EAAE,EAAE;IACVE,KAAK,EAAE;EACT,CAAC;EACDQ,UAAU,EAAE;IACVS,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC","ignoreList":[]}
diff --git a/lib/module/helper/calcNewScaledOffsetForZoomCentering.js b/lib/module/helper/calcNewScaledOffsetForZoomCentering.js
index 7ac687e..a1cdf99 100644
--- a/lib/module/helper/calcNewScaledOffsetForZoomCentering.js
+++ b/lib/module/helper/calcNewScaledOffsetForZoomCentering.js
@@ -51,6 +51,8 @@
* @param zoomCenterXOrY
*/
export function calcNewScaledOffsetForZoomCentering(oldOffsetXOrYScaled, zoomSubjectOriginalWidthOrHeight, oldScale, newScale, zoomCenterXOrY) {
+ 'worklet';
+
const oldOffSetUnscaled = oldOffsetXOrYScaled * oldScale;
const growthRate = newScale / oldScale;
diff --git a/lib/module/helper/calcNewScaledOffsetForZoomCentering.js.map b/lib/module/helper/calcNewScaledOffsetForZoomCentering.js.map
index a84ce62..964b5e8 100644
--- a/lib/module/helper/calcNewScaledOffsetForZoomCentering.js.map
+++ b/lib/module/helper/calcNewScaledOffsetForZoomCentering.js.map
@@ -1 +1 @@
-{"version":3,"names":["calcNewScaledOffsetForZoomCentering","oldOffsetXOrYScaled","zoomSubjectOriginalWidthOrHeight","oldScale","newScale","zoomCenterXOrY","oldOffSetUnscaled","growthRate","zoomSubjectOriginalCenter","zoomSubjectCurrentCenter","zoomSubjectNewCenter","xOrY","distanceToZoomCenter","newOffsetUnscaled"],"sourceRoot":"../../../src","sources":["helper/calcNewScaledOffsetForZoomCentering.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,mCAAmCA,CACjDC,mBAA2B,EAC3BC,gCAAwC,EACxCC,QAAgB,EAChBC,QAAgB,EAChBC,cAAsB,EACtB;EACA,MAAMC,iBAAiB,GAAGL,mBAAmB,GAAGE,QAAQ;EACxD,MAAMI,UAAU,GAAGH,QAAQ,GAAGD,QAAQ;;EAEtC;EACA,MAAMK,yBAAyB,GAAG,CAAC,CAAW;EAC9C,MAAMC,wBAAwB,GAAG,CAAC,CAAW;EAC7C,MAAMC,oBAAoB,GAAG,CAAC,CAAW;EAEzCF,yBAAyB,CAACG,IAAI,GAAGT,gCAAgC,GAAG,CAAC;EACrEO,wBAAwB,CAACE,IAAI,GAC3BH,yBAAyB,CAACG,IAAI,GAAGL,iBAAiB;EACpDG,wBAAwB,CAACG,oBAAoB,GAC3CH,wBAAwB,CAACE,IAAI,GAAGN,cAAc;EAEhDK,oBAAoB,CAACE,oBAAoB,GACvCH,wBAAwB,CAACG,oBAAoB,GAAGL,UAAU;EAC5DG,oBAAoB,CAACC,IAAI,GACvBD,oBAAoB,CAACE,oBAAoB,GAAGP,cAAc;EAE5D,MAAMQ,iBAAiB,GACrBH,oBAAoB,CAACC,IAAI,GAAGH,yBAAyB,CAACG,IAAI;EAE5D,OAAOE,iBAAiB,GAAGT,QAAQ;AACrC","ignoreList":[]}
+{"version":3,"names":["calcNewScaledOffsetForZoomCentering","oldOffsetXOrYScaled","zoomSubjectOriginalWidthOrHeight","oldScale","newScale","zoomCenterXOrY","oldOffSetUnscaled","growthRate","zoomSubjectOriginalCenter","zoomSubjectCurrentCenter","zoomSubjectNewCenter","xOrY","distanceToZoomCenter","newOffsetUnscaled"],"sourceRoot":"../../../src","sources":["helper/calcNewScaledOffsetForZoomCentering.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,mCAAmCA,CACjDC,mBAA2B,EAC3BC,gCAAwC,EACxCC,QAAgB,EAChBC,QAAgB,EAChBC,cAAsB,EACtB;EACA,SAAS;;EAET,MAAMC,iBAAiB,GAAGL,mBAAmB,GAAGE,QAAQ;EACxD,MAAMI,UAAU,GAAGH,QAAQ,GAAGD,QAAQ;;EAEtC;EACA,MAAMK,yBAAyB,GAAG,CAAC,CAAW;EAC9C,MAAMC,wBAAwB,GAAG,CAAC,CAAW;EAC7C,MAAMC,oBAAoB,GAAG,CAAC,CAAW;EAEzCF,yBAAyB,CAACG,IAAI,GAAGT,gCAAgC,GAAG,CAAC;EACrEO,wBAAwB,CAACE,IAAI,GAC3BH,yBAAyB,CAACG,IAAI,GAAGL,iBAAiB;EACpDG,wBAAwB,CAACG,oBAAoB,GAC3CH,wBAAwB,CAACE,IAAI,GAAGN,cAAc;EAEhDK,oBAAoB,CAACE,oBAAoB,GACvCH,wBAAwB,CAACG,oBAAoB,GAAGL,UAAU;EAC5DG,oBAAoB,CAACC,IAAI,GACvBD,oBAAoB,CAACE,oBAAoB,GAAGP,cAAc;EAE5D,MAAMQ,iBAAiB,GACrBH,oBAAoB,CAACC,IAAI,GAAGH,yBAAyB,CAACG,IAAI;EAE5D,OAAOE,iBAAiB,GAAGT,QAAQ;AACrC","ignoreList":[]}
diff --git a/lib/module/helper/coordinateConversion.js b/lib/module/helper/coordinateConversion.js
index 97c2442..c9944f9 100644
--- a/lib/module/helper/coordinateConversion.js
+++ b/lib/module/helper/coordinateConversion.js
@@ -1,15 +1,5 @@
"use strict";
-export const defaultTransformSubjectData = {
- offsetX: 0,
- offsetY: 0,
- zoomLevel: 0,
- originalWidth: 0,
- originalHeight: 0,
- originalPageX: 0,
- originalPageY: 0
-};
-
/**
* Assuming you have an image that's being resized to fit into a container
* using the "contain" resize mode. You can use this function to calculate the
@@ -22,6 +12,8 @@ export const defaultTransformSubjectData = {
* @param containerSize
*/
export function applyContainResizeMode(imgSize, containerSize) {
+ 'worklet';
+
const {
width: imageWidth,
height: imageHeight
@@ -65,6 +57,8 @@ export function applyContainResizeMode(imgSize, containerSize) {
* @param transformSubject
*/
export function getImageOriginOnTransformSubject(resizedImageSize, transformSubject) {
+ 'worklet';
+
const {
offsetX,
offsetY,
@@ -92,6 +86,8 @@ export function viewportPositionToImagePosition({
imageSize,
zoomableEvent
}) {
+ 'worklet';
+
const {
size: resizedImgSize,
scale: resizedImgScale
diff --git a/lib/module/helper/coordinateConversion.js.map b/lib/module/helper/coordinateConversion.js.map
index b6b0ab8..55eabe1 100644
--- a/lib/module/helper/coordinateConversion.js.map
+++ b/lib/module/helper/coordinateConversion.js.map
@@ -1 +1 @@
-{"version":3,"names":["defaultTransformSubjectData","offsetX","offsetY","zoomLevel","originalWidth","originalHeight","originalPageX","originalPageY","applyContainResizeMode","imgSize","containerSize","width","imageWidth","height","imageHeight","areaWidth","areaHeight","imageAspect","areaAspect","newSize","isNaN","scale","isFinite","size","getImageOriginOnTransformSubject","resizedImageSize","transformSubject","x","y","viewportPositionToImagePosition","viewportPosition","imageSize","zoomableEvent","resizedImgSize","resizedImgScale","sheetOriginOnContainer","pointOnSheet"],"sourceRoot":"../../../src","sources":["helper/coordinateConversion.ts"],"mappings":"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","ignoreList":[]}
+{"version":3,"names":["applyContainResizeMode","imgSize","containerSize","width","imageWidth","height","imageHeight","areaWidth","areaHeight","imageAspect","areaAspect","newSize","isNaN","scale","isFinite","size","getImageOriginOnTransformSubject","resizedImageSize","transformSubject","offsetX","offsetY","zoomLevel","originalWidth","originalHeight","x","y","viewportPositionToImagePosition","viewportPosition","imageSize","zoomableEvent","resizedImgSize","resizedImgScale","sheetOriginOnContainer","pointOnSheet"],"sourceRoot":"../../../src","sources":["helper/coordinateConversion.ts"],"mappings":"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","ignoreList":[]}
diff --git a/lib/module/helper/index.js b/lib/module/helper/index.js
index bdce1d5..f9fc91b 100644
--- a/lib/module/helper/index.js
+++ b/lib/module/helper/index.js
@@ -13,29 +13,33 @@ export { calcNewScaledOffsetForZoomCentering } from './calcNewScaledOffsetForZoo
* because gestureState.moveX/Y is messed up on real device
* (Sometimes it's the center point, but sometimes it randomly takes the position of one of the touches)
*/
-export function calcGestureCenterPoint(e, gestureState) {
- const touches = e.nativeEvent.touches;
+export function calcGestureCenterPoint(e) {
+ 'worklet';
+
+ const touches = e.allTouches;
if (!touches[0]) return null;
- if (gestureState.numberActiveTouches === 2) {
+ if (e.numberOfTouches === 2) {
if (!touches[1]) return null;
return {
- x: (touches[0].pageX + touches[1].pageX) / 2,
- y: (touches[0].pageY + touches[1].pageY) / 2
+ x: (touches[0].x + touches[1].x) / 2,
+ y: (touches[0].y + touches[1].y) / 2
};
}
- if (gestureState.numberActiveTouches === 1) {
+ if (e.numberOfTouches === 1) {
return {
- x: touches[0].pageX,
- y: touches[0].pageY
+ x: touches[0].x,
+ y: touches[0].y
};
}
return null;
}
-export function calcGestureTouchDistance(e, gestureState) {
- const touches = e.nativeEvent.touches;
- if (gestureState.numberActiveTouches !== 2 || !touches[0] || !touches[1]) return null;
- const dx = Math.abs(touches[0].pageX - touches[1].pageX);
- const dy = Math.abs(touches[0].pageY - touches[1].pageY);
+export function calcGestureTouchDistance(e) {
+ 'worklet';
+
+ const touches = e.allTouches;
+ if (e.numberOfTouches !== 2 || !touches[0] || !touches[1]) return null;
+ const dx = Math.abs(touches[0].x - touches[1].x);
+ const dy = Math.abs(touches[0].x - touches[1].x);
return Math.sqrt(dx * dx + dy * dy);
}
//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/lib/module/helper/index.js.map b/lib/module/helper/index.js.map
index 0631c9e..2e42c07 100644
--- a/lib/module/helper/index.js.map
+++ b/lib/module/helper/index.js.map
@@ -1 +1 @@
-{"version":3,"names":["calcNewScaledOffsetForZoomCentering","calcGestureCenterPoint","e","gestureState","touches","nativeEvent","numberActiveTouches","x","pageX","y","pageY","calcGestureTouchDistance","dx","Math","abs","dy","sqrt"],"sourceRoot":"../../../src","sources":["helper/index.ts"],"mappings":";;AAIA,SAASA,mCAAmC,QAAQ,uCAAuC;;AAE3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,sBAAsBA,CACpCC,CAAwB,EACxBC,YAAsC,EACxB;EACd,MAAMC,OAAO,GAAGF,CAAC,CAACG,WAAW,CAACD,OAAO;EACrC,IAAI,CAACA,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI;EAE5B,IAAID,YAAY,CAACG,mBAAmB,KAAK,CAAC,EAAE;IAC1C,IAAI,CAACF,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI;IAC5B,OAAO;MACLG,CAAC,EAAE,CAACH,OAAO,CAAC,CAAC,CAAC,CAACI,KAAK,GAAGJ,OAAO,CAAC,CAAC,CAAC,CAACI,KAAK,IAAI,CAAC;MAC5CC,CAAC,EAAE,CAACL,OAAO,CAAC,CAAC,CAAC,CAACM,KAAK,GAAGN,OAAO,CAAC,CAAC,CAAC,CAACM,KAAK,IAAI;IAC7C,CAAC;EACH;EACA,IAAIP,YAAY,CAACG,mBAAmB,KAAK,CAAC,EAAE;IAC1C,OAAO;MACLC,CAAC,EAAEH,OAAO,CAAC,CAAC,CAAC,CAACI,KAAK;MACnBC,CAAC,EAAEL,OAAO,CAAC,CAAC,CAAC,CAACM;IAChB,CAAC;EACH;EAEA,OAAO,IAAI;AACb;AAEA,OAAO,SAASC,wBAAwBA,CACtCT,CAAwB,EACxBC,YAAsC,EACvB;EACf,MAAMC,OAAO,GAAGF,CAAC,CAACG,WAAW,CAACD,OAAO;EACrC,IAAID,YAAY,CAACG,mBAAmB,KAAK,CAAC,IAAI,CAACF,OAAO,CAAC,CAAC,CAAC,IAAI,CAACA,OAAO,CAAC,CAAC,CAAC,EACtE,OAAO,IAAI;EAEb,MAAMQ,EAAE,GAAGC,IAAI,CAACC,GAAG,CAACV,OAAO,CAAC,CAAC,CAAC,CAACI,KAAK,GAAGJ,OAAO,CAAC,CAAC,CAAC,CAACI,KAAK,CAAC;EACxD,MAAMO,EAAE,GAAGF,IAAI,CAACC,GAAG,CAACV,OAAO,CAAC,CAAC,CAAC,CAACM,KAAK,GAAGN,OAAO,CAAC,CAAC,CAAC,CAACM,KAAK,CAAC;EACxD,OAAOG,IAAI,CAACG,IAAI,CAACJ,EAAE,GAAGA,EAAE,GAAGG,EAAE,GAAGA,EAAE,CAAC;AACrC","ignoreList":[]}
+{"version":3,"names":["calcNewScaledOffsetForZoomCentering","calcGestureCenterPoint","e","touches","allTouches","numberOfTouches","x","y","calcGestureTouchDistance","dx","Math","abs","dy","sqrt"],"sourceRoot":"../../../src","sources":["helper/index.ts"],"mappings":";;AAIA,SAASA,mCAAmC,QAAQ,uCAAuC;;AAE3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,sBAAsBA,CAACC,CAAoB,EAAgB;EACzE,SAAS;;EAET,MAAMC,OAAO,GAAGD,CAAC,CAACE,UAAU;EAC5B,IAAI,CAACD,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI;EAE5B,IAAID,CAAC,CAACG,eAAe,KAAK,CAAC,EAAE;IAC3B,IAAI,CAACF,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI;IAC5B,OAAO;MACLG,CAAC,EAAE,CAACH,OAAO,CAAC,CAAC,CAAC,CAACG,CAAC,GAAGH,OAAO,CAAC,CAAC,CAAC,CAACG,CAAC,IAAI,CAAC;MACpCC,CAAC,EAAE,CAACJ,OAAO,CAAC,CAAC,CAAC,CAACI,CAAC,GAAGJ,OAAO,CAAC,CAAC,CAAC,CAACI,CAAC,IAAI;IACrC,CAAC;EACH;EACA,IAAIL,CAAC,CAACG,eAAe,KAAK,CAAC,EAAE;IAC3B,OAAO;MAAEC,CAAC,EAAEH,OAAO,CAAC,CAAC,CAAC,CAACG,CAAC;MAAEC,CAAC,EAAEJ,OAAO,CAAC,CAAC,CAAC,CAACI;IAAE,CAAC;EAC7C;EAEA,OAAO,IAAI;AACb;AAEA,OAAO,SAASC,wBAAwBA,CAACN,CAAoB,EAAiB;EAC5E,SAAS;;EAET,MAAMC,OAAO,GAAGD,CAAC,CAACE,UAAU;EAC5B,IAAIF,CAAC,CAACG,eAAe,KAAK,CAAC,IAAI,CAACF,OAAO,CAAC,CAAC,CAAC,IAAI,CAACA,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI;EAEtE,MAAMM,EAAE,GAAGC,IAAI,CAACC,GAAG,CAACR,OAAO,CAAC,CAAC,CAAC,CAACG,CAAC,GAAGH,OAAO,CAAC,CAAC,CAAC,CAACG,CAAC,CAAC;EAChD,MAAMM,EAAE,GAAGF,IAAI,CAACC,GAAG,CAACR,OAAO,CAAC,CAAC,CAAC,CAACG,CAAC,GAAGH,OAAO,CAAC,CAAC,CAAC,CAACG,CAAC,CAAC;EAEhD,OAAOI,IAAI,CAACG,IAAI,CAACJ,EAAE,GAAGA,EAAE,GAAGG,EAAE,GAAGA,EAAE,CAAC;AACrC","ignoreList":[]}
diff --git a/lib/module/hooks/useDebugPoints.js b/lib/module/hooks/useDebugPoints.js
index 7d628fc..ea0308b 100644
--- a/lib/module/hooks/useDebugPoints.js
+++ b/lib/module/hooks/useDebugPoints.js
@@ -2,10 +2,7 @@
import { useState } from 'react';
import { useLatestCallback } from './useLatestCallback';
-export const useDebugPoints = ({
- originalPageX,
- originalPageY
-}) => {
+export const useDebugPoints = () => {
const [debugPoints, setDebugPoints] = useState([]);
/**
@@ -14,16 +11,13 @@ export const useDebugPoints = ({
* @param zoomCenter
* @param points
*/
- const setPinchDebugPoints = useLatestCallback((gestureResponderEvent, zoomCenter, ...points) => {
- const {
- touches
- } = gestureResponderEvent.nativeEvent;
+ const setPinchDebugPoints = useLatestCallback((e, zoomCenter, ...points) => {
setDebugPoints([{
- x: touches[0].pageX - originalPageX,
- y: touches[0].pageY - originalPageY
+ x: e.allTouches[0].x,
+ y: e.allTouches[0].y
}, {
- x: touches[1].pageX - originalPageX,
- y: touches[1].pageY - originalPageY
+ x: e.allTouches[1].x,
+ y: e.allTouches[1].y
}, zoomCenter, ...points]);
});
return {
diff --git a/lib/module/hooks/useDebugPoints.js.map b/lib/module/hooks/useDebugPoints.js.map
index def583d..5aee34b 100644
--- a/lib/module/hooks/useDebugPoints.js.map
+++ b/lib/module/hooks/useDebugPoints.js.map
@@ -1 +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":[]}
+{"version":3,"names":["useState","useLatestCallback","useDebugPoints","debugPoints","setDebugPoints","setPinchDebugPoints","e","zoomCenter","points","x","allTouches","y"],"sourceRoot":"../../../src","sources":["hooks/useDebugPoints.ts"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,OAAO;AAIhC,SAASC,iBAAiB,QAAQ,qBAAqB;AAEvD,OAAO,MAAMC,cAAc,GAAGA,CAAA,KAAM;EAClC,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAGJ,QAAQ,CAAU,EAAE,CAAC;;EAE3D;AACF;AACA;AACA;AACA;AACA;EACE,MAAMK,mBAAmB,GAAGJ,iBAAiB,CAC3C,CAACK,CAAoB,EAAEC,UAAiB,EAAE,GAAGC,MAAe,KAAK;IAC/DJ,cAAc,CAAC,CACb;MAAEK,CAAC,EAAEH,CAAC,CAACI,UAAU,CAAC,CAAC,CAAC,CAACD,CAAC;MAAEE,CAAC,EAAEL,CAAC,CAACI,UAAU,CAAC,CAAC,CAAC,CAACC;IAAE,CAAC,EAC9C;MAAEF,CAAC,EAAEH,CAAC,CAACI,UAAU,CAAC,CAAC,CAAC,CAACD,CAAC;MAAEE,CAAC,EAAEL,CAAC,CAACI,UAAU,CAAC,CAAC,CAAC,CAACC;IAAE,CAAC,EAC9CJ,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
index 64756bb..feeb067 100644
--- a/lib/module/hooks/useZoomSubject.js
+++ b/lib/module/hooks/useZoomSubject.js
@@ -1,15 +1,14 @@
"use strict";
-import { useEffect, useRef, useState } from 'react';
+import { useEffect, useRef } from 'react';
+import { useSharedValue } from 'react-native-reanimated';
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 originalWidth = useSharedValue(0);
+ const originalHeight = useSharedValue(0);
+ const originalX = useSharedValue(0);
+ const originalY = useSharedValue(0);
const measureZoomSubjectInterval = useRef();
/**
@@ -35,12 +34,10 @@ export const useZoomSubject = () => {
// 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);
+ originalX.value = x;
+ originalY.value = y;
+ originalWidth.value = width;
+ originalHeight.value = height;
});
});
});
@@ -64,8 +61,6 @@ export const useZoomSubject = () => {
measure,
originalWidth,
originalHeight,
- originalPageX,
- originalPageY,
originalX,
originalY
};
diff --git a/lib/module/hooks/useZoomSubject.js.map b/lib/module/hooks/useZoomSubject.js.map
index 89245a9..15a795d 100644
--- a/lib/module/hooks/useZoomSubject.js.map
+++ b/lib/module/hooks/useZoomSubject.js.map
@@ -1 +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":[]}
+{"version":3,"names":["useEffect","useRef","useSharedValue","useLatestCallback","useZoomSubject","wrapperRef","originalWidth","originalHeight","originalX","originalY","measureZoomSubjectInterval","measure","requestAnimationFrame","setTimeout","current","x","y","width","height","pageX","pageY","value","setInterval","clearInterval"],"sourceRoot":"../../../src","sources":["hooks/useZoomSubject.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAEzC,SAASC,cAAc,QAAQ,yBAAyB;AAExD,SAASC,iBAAiB,QAAQ,qBAAqB;AAEvD,OAAO,MAAMC,cAAc,GAAGA,CAAA,KAAM;EAClC,MAAMC,UAAU,GAAGJ,MAAM,CAAO,IAAI,CAAC;EACrC,MAAMK,aAAa,GAAGJ,cAAc,CAAC,CAAC,CAAC;EACvC,MAAMK,cAAc,GAAGL,cAAc,CAAC,CAAC,CAAC;EACxC,MAAMM,SAAS,GAAGN,cAAc,CAAC,CAAC,CAAC;EACnC,MAAMO,SAAS,GAAGP,cAAc,CAAC,CAAC,CAAC;EACnC,MAAMQ,0BAA0B,GAAGT,MAAM,CAAe,CAAC;;EAEzD;AACF;AACA;AACA;AACA;AACA;EACE,MAAMU,OAAO,GAAGR,iBAAiB,CAAC,MAAM;IACtC;IACAS,qBAAqB,CAAC,MAAM;MAC1B;MACA;MACA;MACAC,UAAU,CAAC,MAAM;QACf;QACA;QACA;QACA;QACA;QACAR,UAAU,CAACS,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;UAE3CV,SAAS,CAACa,KAAK,GAAGN,CAAC;UACnBN,SAAS,CAACY,KAAK,GAAGL,CAAC;UACnBV,aAAa,CAACe,KAAK,GAAGJ,KAAK;UAC3BV,cAAc,CAACc,KAAK,GAAGH,MAAM;QAC/B,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFlB,SAAS,CAAC,MAAM;IACdW,OAAO,CAAC,CAAC;IACT;IACA;IACA;IACA;IACA;IACA;IACA;IACAD,0BAA0B,CAACI,OAAO,GAAGQ,WAAW,CAACX,OAAO,EAAE,GAAG,CAAC;IAE9D,OAAO,MAAM;MACXD,0BAA0B,CAACI,OAAO,IAChCS,aAAa,CAACb,0BAA0B,CAACI,OAAO,CAAC;IACrD,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IACLT,UAAU;IACVM,OAAO;IACPL,aAAa;IACbC,cAAc;IACdC,SAAS;IACTC;EACF,CAAC;AACH,CAAC","ignoreList":[]}
diff --git a/lib/module/index.js b/lib/module/index.js
index bd05c56..ac4c59b 100644
--- a/lib/module/index.js
+++ b/lib/module/index.js
@@ -1,8 +1,10 @@
"use strict";
+import FixedSize from './components/FixedSize';
import { applyContainResizeMode, getImageOriginOnTransformSubject, viewportPositionToImagePosition } from './helper/coordinateConversion';
-import ReactNativeZoomableView from './ReactNativeZoomableView';
+import { ReactNativeZoomableView } from './ReactNativeZoomableView';
+import { ReactNativeZoomableViewContext, useZoomableViewContext } from './ReactNativeZoomableViewContext';
export {
// Helper functions for coordinate conversion
-applyContainResizeMode, getImageOriginOnTransformSubject, ReactNativeZoomableView, viewportPositionToImagePosition };
+applyContainResizeMode, FixedSize, getImageOriginOnTransformSubject, ReactNativeZoomableView, ReactNativeZoomableViewContext, useZoomableViewContext, viewportPositionToImagePosition };
//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/lib/module/index.js.map b/lib/module/index.js.map
index add721f..5617ce7 100644
--- a/lib/module/index.js.map
+++ b/lib/module/index.js.map
@@ -1 +1 @@
-{"version":3,"names":["applyContainResizeMode","getImageOriginOnTransformSubject","viewportPositionToImagePosition","ReactNativeZoomableView"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SACEA,sBAAsB,EACtBC,gCAAgC,EAChCC,+BAA+B,QAC1B,+BAA+B;AACtC,OAAOC,uBAAuB,MAAM,2BAA2B;AAM/D;AACE;AACAH,sBAAsB,EACtBC,gCAAgC,EAChCE,uBAAuB,EAEvBD,+BAA+B","ignoreList":[]}
+{"version":3,"names":["FixedSize","applyContainResizeMode","getImageOriginOnTransformSubject","viewportPositionToImagePosition","ReactNativeZoomableView","ReactNativeZoomableViewContext","useZoomableViewContext"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,OAAOA,SAAS,MAAM,wBAAwB;AAC9C,SACEC,sBAAsB,EACtBC,gCAAgC,EAChCC,+BAA+B,QAC1B,+BAA+B;AACtC,SAASC,uBAAuB,QAAQ,2BAA2B;AACnE,SACEC,8BAA8B,EAC9BC,sBAAsB,QACjB,kCAAkC;AAOzC;AACE;AACAL,sBAAsB,EACtBD,SAAS,EACTE,gCAAgC,EAChCE,uBAAuB,EACvBC,8BAA8B,EAG9BC,sBAAsB,EACtBH,+BAA+B","ignoreList":[]}
diff --git a/lib/module/styles.js b/lib/module/styles.js
new file mode 100644
index 0000000..02c0306
--- /dev/null
+++ b/lib/module/styles.js
@@ -0,0 +1,19 @@
+"use strict";
+
+import { StyleSheet } from 'react-native';
+export const styles = StyleSheet.create({
+ container: {
+ alignItems: 'center',
+ flex: 1,
+ justifyContent: 'center',
+ overflow: 'hidden',
+ position: 'relative'
+ },
+ zoomSubject: {
+ alignItems: 'center',
+ flex: 1,
+ justifyContent: 'center',
+ width: '100%'
+ }
+});
+//# sourceMappingURL=styles.js.map
\ No newline at end of file
diff --git a/lib/module/styles.js.map b/lib/module/styles.js.map
new file mode 100644
index 0000000..66d0388
--- /dev/null
+++ b/lib/module/styles.js.map
@@ -0,0 +1 @@
+{"version":3,"names":["StyleSheet","styles","create","container","alignItems","flex","justifyContent","overflow","position","zoomSubject","width"],"sourceRoot":"../../src","sources":["styles.tsx"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,cAAc;AAEzC,OAAO,MAAMC,MAAM,GAAGD,UAAU,CAACE,MAAM,CAAC;EACtCC,SAAS,EAAE;IACTC,UAAU,EAAE,QAAQ;IACpBC,IAAI,EAAE,CAAC;IACPC,cAAc,EAAE,QAAQ;IACxBC,QAAQ,EAAE,QAAQ;IAClBC,QAAQ,EAAE;EACZ,CAAC;EACDC,WAAW,EAAE;IACXL,UAAU,EAAE,QAAQ;IACpBC,IAAI,EAAE,CAAC;IACPC,cAAc,EAAE,QAAQ;IACxBI,KAAK,EAAE;EACT;AACF,CAAC,CAAC","ignoreList":[]}
diff --git a/lib/module/typings/index.js b/lib/module/typings/index.js
index f9391cf..2d4a461 100644
--- a/lib/module/typings/index.js
+++ b/lib/module/typings/index.js
@@ -1,10 +1,4 @@
"use strict";
-export let SwipeDirection = /*#__PURE__*/function (SwipeDirection) {
- SwipeDirection["SWIPE_UP"] = "SWIPE_UP";
- SwipeDirection["SWIPE_DOWN"] = "SWIPE_DOWN";
- SwipeDirection["SWIPE_LEFT"] = "SWIPE_LEFT";
- SwipeDirection["SWIPE_RIGHT"] = "SWIPE_RIGHT";
- return SwipeDirection;
-}({});
+export {};
//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/lib/module/typings/index.js.map b/lib/module/typings/index.js.map
index 533f3a9..6aff261 100644
--- a/lib/module/typings/index.js.map
+++ b/lib/module/typings/index.js.map
@@ -1 +1 @@
-{"version":3,"names":["SwipeDirection"],"sourceRoot":"../../../src","sources":["typings/index.ts"],"mappings":";;AASA,WAAYA,cAAc,0BAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAA,OAAdA,cAAc;AAAA","ignoreList":[]}
+{"version":3,"names":[],"sourceRoot":"../../../src","sources":["typings/index.ts"],"mappings":"","ignoreList":[]}
diff --git a/lib/typescript/ReactNativeZoomableView.d.ts b/lib/typescript/ReactNativeZoomableView.d.ts
index 590c1b1..5450bb4 100644
--- a/lib/typescript/ReactNativeZoomableView.d.ts
+++ b/lib/typescript/ReactNativeZoomableView.d.ts
@@ -1,14 +1,4 @@
-import { ForwardRefRenderFunction } from 'react';
-import { ReactNativeZoomableViewProps, Vec2D } from './typings';
-type ReactNativeZoomableView = {
- moveTo(newOffsetX: number, newOffsetY: number): void;
- moveBy(offsetChangeX: number, offsetChangeY: number): void;
- zoomTo(newZoomLevel: number, zoomCenter?: Vec2D): boolean;
- zoomBy(zoomLevelChange: number): boolean;
- moveStaticPinTo: (position: Vec2D, duration?: number) => void;
- readonly gestureStarted: boolean;
-};
-declare const ReactNativeZoomableView: ForwardRefRenderFunction;
-export default ReactNativeZoomableView;
-export { ReactNativeZoomableView };
+import React from 'react';
+import { ReactNativeZoomableViewProps, ReactNativeZoomableViewRef } from './typings';
+export declare const ReactNativeZoomableView: React.ForwardRefExoticComponent>;
//# sourceMappingURL=ReactNativeZoomableView.d.ts.map
\ No newline at end of file
diff --git a/lib/typescript/ReactNativeZoomableView.d.ts.map b/lib/typescript/ReactNativeZoomableView.d.ts.map
index 2d2a5b6..4fd7b14 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,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
+{"version":3,"file":"ReactNativeZoomableView.d.ts","sourceRoot":"","sources":["../../src/ReactNativeZoomableView.tsx"],"names":[],"mappings":"AACA,OAAO,KAQN,MAAM,OAAO,CAAC;AAmCf,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAI3B,MAAM,WAAW,CAAC;AA26BnB,eAAO,MAAM,uBAAuB,iHAA2C,CAAC"}
\ No newline at end of file
diff --git a/lib/typescript/ReactNativeZoomableViewContext.d.ts b/lib/typescript/ReactNativeZoomableViewContext.d.ts
new file mode 100644
index 0000000..ea39c85
--- /dev/null
+++ b/lib/typescript/ReactNativeZoomableViewContext.d.ts
@@ -0,0 +1,25 @@
+///
+import { DerivedValue, SharedValue } from 'react-native-reanimated';
+export declare const ReactNativeZoomableViewContext: import("react").Context<{
+ zoom: SharedValue;
+ inverseZoom: DerivedValue;
+ inverseZoomStyle: {
+ transform: {
+ scale: number;
+ }[];
+ };
+ offsetX: SharedValue;
+ offsetY: SharedValue;
+} | null>;
+export declare const useZoomableViewContext: () => {
+ zoom: SharedValue;
+ inverseZoom: DerivedValue;
+ inverseZoomStyle: {
+ transform: {
+ scale: number;
+ }[];
+ };
+ offsetX: SharedValue;
+ offsetY: SharedValue;
+};
+//# sourceMappingURL=ReactNativeZoomableViewContext.d.ts.map
\ No newline at end of file
diff --git a/lib/typescript/ReactNativeZoomableViewContext.d.ts.map b/lib/typescript/ReactNativeZoomableViewContext.d.ts.map
new file mode 100644
index 0000000..1a54224
--- /dev/null
+++ b/lib/typescript/ReactNativeZoomableViewContext.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ReactNativeZoomableViewContext.d.ts","sourceRoot":"","sources":["../../src/ReactNativeZoomableViewContext.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEpE,eAAO,MAAM,8BAA8B;UACnC,YAAY,MAAM,CAAC;iBACZ,aAAa,MAAM,CAAC;sBAGf;QAAE,SAAS,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE;aAC3C,YAAY,MAAM,CAAC;aACnB,YAAY,MAAM,CAAC;SACf,CAAC;AAEhB,eAAO,MAAM,sBAAsB;UAT3B,YAAY,MAAM,CAAC;iBACZ,aAAa,MAAM,CAAC;sBAGf;QAAE,SAAS,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE;aAC3C,YAAY,MAAM,CAAC;aACnB,YAAY,MAAM,CAAC;CAY7B,CAAC"}
\ No newline at end of file
diff --git a/lib/typescript/animations/index.d.ts b/lib/typescript/animations/index.d.ts
index 06cf7dd..27533ce 100644
--- a/lib/typescript/animations/index.d.ts
+++ b/lib/typescript/animations/index.d.ts
@@ -1,3 +1,3 @@
-import { Animated } from 'react-native';
-export declare function getZoomToAnimation(animValue: Animated.Value, toValue: number): Animated.CompositeAnimation;
+import { WithTimingConfig } from 'react-native-reanimated';
+export declare const zoomToAnimation: WithTimingConfig;
//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/lib/typescript/animations/index.d.ts.map b/lib/typescript/animations/index.d.ts.map
index d11620f..f8dacb9 100644
--- a/lib/typescript/animations/index.d.ts.map
+++ b/lib/typescript/animations/index.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/animations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAU,MAAM,cAAc,CAAC;AAEhD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,+BAM5E"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/animations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,eAAO,MAAM,eAAe,EAAE,gBAG7B,CAAC"}
\ No newline at end of file
diff --git a/lib/typescript/components/FixedSize.d.ts b/lib/typescript/components/FixedSize.d.ts
new file mode 100644
index 0000000..ff31ab3
--- /dev/null
+++ b/lib/typescript/components/FixedSize.d.ts
@@ -0,0 +1,21 @@
+import React from 'react';
+/**
+ * A wrapper component that keeps elements at a fixed visual size regardless of zoom level.
+ *
+ * @param {{
+ * left: number;
+ * top: number;
+ * children: React.ReactNode;
+ * }} param0
+ * @param {number} param0.left The left position in percentage (0-100)
+ * @param {number} param0.top The top position in percentage (0-100)
+ * @param {React.ReactNode} param0.children The children to render inside the fixed size container
+ * @returns {*}
+ */
+export declare const FixedSize: ({ left, top, children, }: {
+ left: number;
+ top: number;
+ children: React.ReactNode;
+}) => React.JSX.Element;
+export default FixedSize;
+//# sourceMappingURL=FixedSize.d.ts.map
\ No newline at end of file
diff --git a/lib/typescript/components/FixedSize.d.ts.map b/lib/typescript/components/FixedSize.d.ts.map
new file mode 100644
index 0000000..133d69e
--- /dev/null
+++ b/lib/typescript/components/FixedSize.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"FixedSize.d.ts","sourceRoot":"","sources":["../../../src/components/FixedSize.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,SAAS;UAKd,MAAM;SACP,MAAM;cACD,MAAM,SAAS;uBAoB1B,CAAC;AAEF,eAAe,SAAS,CAAC"}
\ No newline at end of file
diff --git a/lib/typescript/components/StaticPin.d.ts b/lib/typescript/components/StaticPin.d.ts
index c19536f..b6ccf9c 100644
--- a/lib/typescript/components/StaticPin.d.ts
+++ b/lib/typescript/components/StaticPin.d.ts
@@ -1,17 +1,13 @@
import React from 'react';
-import { GestureResponderEvent, PanResponderGestureState, ViewProps } from 'react-native';
-import { Size2D } from 'src/typings';
-export declare const StaticPin: ({ staticPinPosition, staticPinIcon, pinSize, onParentMove, onPress, onLongPress, setPinSize, pinProps, }: {
+import { ViewProps } from 'react-native';
+import { Size2D } from '../typings';
+export declare const StaticPin: ({ staticPinPosition, staticPinIcon, pinSize, setPinSize, pinProps, }: {
staticPinPosition: {
x: number;
y: number;
};
staticPinIcon: React.ReactNode;
pinSize: Size2D;
- /** Internal handler for passing move event to parent */
- onParentMove: (evt: GestureResponderEvent, gestureState: PanResponderGestureState) => boolean | undefined;
- onPress?: ((evt: GestureResponderEvent) => void) | undefined;
- onLongPress?: ((evt: GestureResponderEvent) => void) | undefined;
setPinSize: (size: Size2D) => void;
pinProps?: ViewProps | undefined;
}) => React.JSX.Element;
diff --git a/lib/typescript/components/StaticPin.d.ts.map b/lib/typescript/components/StaticPin.d.ts.map
index 2adcbc3..1a2f324 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;;uBAkEnC,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,EAA2B,SAAS,EAAE,MAAM,cAAc,CAAC;AAElE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,eAAO,MAAM,SAAS;uBAOD;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;mBAC5B,MAAM,SAAS;aACrB,MAAM;uBACI,MAAM,KAAK,IAAI;;uBAmCnC,CAAC"}
\ No newline at end of file
diff --git a/lib/typescript/helper/calcNewScaledOffsetForZoomCentering.d.ts.map b/lib/typescript/helper/calcNewScaledOffsetForZoomCentering.d.ts.map
index 4ffc3f5..4a36bc1 100644
--- a/lib/typescript/helper/calcNewScaledOffsetForZoomCentering.d.ts.map
+++ b/lib/typescript/helper/calcNewScaledOffsetForZoomCentering.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"calcNewScaledOffsetForZoomCentering.d.ts","sourceRoot":"","sources":["../../../src/helper/calcNewScaledOffsetForZoomCentering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,wBAAgB,mCAAmC,CACjD,mBAAmB,EAAE,MAAM,EAC3B,gCAAgC,EAAE,MAAM,EACxC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,UAyBvB"}
\ No newline at end of file
+{"version":3,"file":"calcNewScaledOffsetForZoomCentering.d.ts","sourceRoot":"","sources":["../../../src/helper/calcNewScaledOffsetForZoomCentering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,wBAAgB,mCAAmC,CACjD,mBAAmB,EAAE,MAAM,EAC3B,gCAAgC,EAAE,MAAM,EACxC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,UA2BvB"}
\ No newline at end of file
diff --git a/lib/typescript/helper/coordinateConversion.d.ts b/lib/typescript/helper/coordinateConversion.d.ts
index c8bfdc0..b3978cc 100644
--- a/lib/typescript/helper/coordinateConversion.d.ts
+++ b/lib/typescript/helper/coordinateConversion.d.ts
@@ -1,5 +1,4 @@
-import { Size2D, Vec2D, ZoomableViewEvent } from 'src/typings';
-export declare const defaultTransformSubjectData: ZoomableViewEvent;
+import { Size2D, Vec2D, ZoomableViewEvent } from '../typings';
/**
* Assuming you have an image that's being resized to fit into a container
* using the "contain" resize mode. You can use this function to calculate the
diff --git a/lib/typescript/helper/coordinateConversion.d.ts.map b/lib/typescript/helper/coordinateConversion.d.ts.map
index c43dfee..26b73db 100644
--- a/lib/typescript/helper/coordinateConversion.d.ts.map
+++ b/lib/typescript/helper/coordinateConversion.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"coordinateConversion.d.ts","sourceRoot":"","sources":["../../../src/helper/coordinateConversion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE/D,eAAO,MAAM,2BAA2B,EAAE,iBAQzC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,IAAI,CAAA;CAAE,CA4B/D;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAC9C,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,iBAAiB;;;EAcpC;AAED;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAAC,EAC9C,gBAAgB,EAChB,SAAS,EACT,aAAa,GACd,EAAE;IACD,gBAAgB,EAAE,KAAK,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,iBAAiB,CAAC;CAClC,GAAG,KAAK,GAAG,IAAI,CA0Bf"}
\ No newline at end of file
+{"version":3,"file":"coordinateConversion.d.ts","sourceRoot":"","sources":["../../../src/helper/coordinateConversion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE9D;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,IAAI,CAAA;CAAE,CA8B/D;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAC9C,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,iBAAiB;;;EAgBpC;AAED;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAAC,EAC9C,gBAAgB,EAChB,SAAS,EACT,aAAa,GACd,EAAE;IACD,gBAAgB,EAAE,KAAK,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,iBAAiB,CAAC;CAClC,GAAG,KAAK,GAAG,IAAI,CA4Bf"}
\ No newline at end of file
diff --git a/lib/typescript/helper/index.d.ts b/lib/typescript/helper/index.d.ts
index bc85ca3..a65b5b4 100644
--- a/lib/typescript/helper/index.d.ts
+++ b/lib/typescript/helper/index.d.ts
@@ -1,4 +1,4 @@
-import { GestureResponderEvent, PanResponderGestureState } from 'react-native';
+import { GestureTouchEvent } from 'react-native-gesture-handler';
import { Vec2D } from '../typings';
export { calcNewScaledOffsetForZoomCentering } from './calcNewScaledOffsetForZoomCentering';
/**
@@ -12,6 +12,6 @@ export { calcNewScaledOffsetForZoomCentering } from './calcNewScaledOffsetForZoo
* because gestureState.moveX/Y is messed up on real device
* (Sometimes it's the center point, but sometimes it randomly takes the position of one of the touches)
*/
-export declare function calcGestureCenterPoint(e: GestureResponderEvent, gestureState: PanResponderGestureState): Vec2D | null;
-export declare function calcGestureTouchDistance(e: GestureResponderEvent, gestureState: PanResponderGestureState): number | null;
+export declare function calcGestureCenterPoint(e: GestureTouchEvent): Vec2D | null;
+export declare function calcGestureTouchDistance(e: GestureTouchEvent): number | null;
//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/lib/typescript/helper/index.d.ts.map b/lib/typescript/helper/index.d.ts.map
index fe42758..195045a 100644
--- a/lib/typescript/helper/index.d.ts.map
+++ b/lib/typescript/helper/index.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/helper/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAE/E,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,mCAAmC,EAAE,MAAM,uCAAuC,CAAC;AAE5F;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,CAAC,EAAE,qBAAqB,EACxB,YAAY,EAAE,wBAAwB,GACrC,KAAK,GAAG,IAAI,CAmBd;AAED,wBAAgB,wBAAwB,CACtC,CAAC,EAAE,qBAAqB,EACxB,YAAY,EAAE,wBAAwB,GACrC,MAAM,GAAG,IAAI,CAQf"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/helper/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,mCAAmC,EAAE,MAAM,uCAAuC,CAAC;AAE5F;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,iBAAiB,GAAG,KAAK,GAAG,IAAI,CAkBzE;AAED,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI,CAU5E"}
\ No newline at end of file
diff --git a/lib/typescript/hooks/useDebugPoints.d.ts b/lib/typescript/hooks/useDebugPoints.d.ts
index 91de831..c0babf9 100644
--- a/lib/typescript/hooks/useDebugPoints.d.ts
+++ b/lib/typescript/hooks/useDebugPoints.d.ts
@@ -1,12 +1,9 @@
///
-import { GestureResponderEvent } from 'react-native';
+import { GestureTouchEvent } from 'react-native-gesture-handler';
import { Vec2D } from '../typings';
-export declare const useDebugPoints: ({ originalPageX, originalPageY, }: {
- originalPageX: number;
- originalPageY: number;
-}) => {
+export declare const useDebugPoints: () => {
debugPoints: Vec2D[];
setDebugPoints: import("react").Dispatch>;
- setPinchDebugPoints: (gestureResponderEvent: GestureResponderEvent, zoomCenter: Vec2D, ...points: Vec2D[]) => void;
+ setPinchDebugPoints: (e: GestureTouchEvent, 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
index 7230df2..4ac35c8 100644
--- a/lib/typescript/hooks/useDebugPoints.d.ts.map
+++ b/lib/typescript/hooks/useDebugPoints.d.ts.map
@@ -1 +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
+{"version":3,"file":"useDebugPoints.d.ts","sourceRoot":"","sources":["../../../src/hooks/useDebugPoints.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,eAAO,MAAM,cAAc;;;;CAqB1B,CAAC"}
\ No newline at end of file
diff --git a/lib/typescript/hooks/useZoomSubject.d.ts b/lib/typescript/hooks/useZoomSubject.d.ts
index 9a6c972..22f125c 100644
--- a/lib/typescript/hooks/useZoomSubject.d.ts
+++ b/lib/typescript/hooks/useZoomSubject.d.ts
@@ -3,11 +3,9 @@ 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;
+ originalWidth: import("react-native-reanimated").SharedValue;
+ originalHeight: import("react-native-reanimated").SharedValue;
+ originalX: import("react-native-reanimated").SharedValue;
+ originalY: import("react-native-reanimated").SharedValue;
};
//# 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
index ac0b8ce..853621d 100644
--- a/lib/typescript/hooks/useZoomSubject.d.ts.map
+++ b/lib/typescript/hooks/useZoomSubject.d.ts.map
@@ -1 +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
+{"version":3,"file":"useZoomSubject.d.ts","sourceRoot":"","sources":["../../../src/hooks/useZoomSubject.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAKpC,eAAO,MAAM,cAAc;;;;;;;CAkE1B,CAAC"}
\ No newline at end of file
diff --git a/lib/typescript/index.d.ts b/lib/typescript/index.d.ts
index 7b02103..6a548e6 100644
--- a/lib/typescript/index.d.ts
+++ b/lib/typescript/index.d.ts
@@ -1,5 +1,7 @@
+import FixedSize from './components/FixedSize';
import { applyContainResizeMode, getImageOriginOnTransformSubject, viewportPositionToImagePosition } from './helper/coordinateConversion';
-import ReactNativeZoomableView from './ReactNativeZoomableView';
-import type { ReactNativeZoomableViewProps, ZoomableViewEvent } from './typings';
-export { applyContainResizeMode, getImageOriginOnTransformSubject, ReactNativeZoomableView, ReactNativeZoomableViewProps, viewportPositionToImagePosition, ZoomableViewEvent, };
+import { ReactNativeZoomableView } from './ReactNativeZoomableView';
+import { ReactNativeZoomableViewContext, useZoomableViewContext } from './ReactNativeZoomableViewContext';
+import type { ReactNativeZoomableViewProps, ReactNativeZoomableViewRef, ZoomableViewEvent } from './typings';
+export { applyContainResizeMode, FixedSize, getImageOriginOnTransformSubject, ReactNativeZoomableView, ReactNativeZoomableViewContext, ReactNativeZoomableViewProps, ReactNativeZoomableViewRef, useZoomableViewContext, viewportPositionToImagePosition, ZoomableViewEvent, };
//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/lib/typescript/index.d.ts.map b/lib/typescript/index.d.ts.map
index 2a3655b..e1be245 100644
--- a/lib/typescript/index.d.ts.map
+++ b/lib/typescript/index.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,gCAAgC,EAChC,+BAA+B,EAChC,MAAM,+BAA+B,CAAC;AACvC,OAAO,uBAAuB,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EACV,4BAA4B,EAC5B,iBAAiB,EAClB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAEL,sBAAsB,EACtB,gCAAgC,EAChC,uBAAuB,EACvB,4BAA4B,EAC5B,+BAA+B,EAC/B,iBAAiB,GAClB,CAAC"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EACL,sBAAsB,EACtB,gCAAgC,EAChC,+BAA+B,EAChC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EACL,8BAA8B,EAC9B,sBAAsB,EACvB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EACV,4BAA4B,EAC5B,0BAA0B,EAC1B,iBAAiB,EAClB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAEL,sBAAsB,EACtB,SAAS,EACT,gCAAgC,EAChC,uBAAuB,EACvB,8BAA8B,EAC9B,4BAA4B,EAC5B,0BAA0B,EAC1B,sBAAsB,EACtB,+BAA+B,EAC/B,iBAAiB,GAClB,CAAC"}
\ No newline at end of file
diff --git a/lib/typescript/styles.d.ts b/lib/typescript/styles.d.ts
new file mode 100644
index 0000000..0e01452
--- /dev/null
+++ b/lib/typescript/styles.d.ts
@@ -0,0 +1,16 @@
+export declare const styles: {
+ container: {
+ alignItems: "center";
+ flex: number;
+ justifyContent: "center";
+ overflow: "hidden";
+ position: "relative";
+ };
+ zoomSubject: {
+ alignItems: "center";
+ flex: number;
+ justifyContent: "center";
+ width: "100%";
+ };
+};
+//# sourceMappingURL=styles.d.ts.map
\ No newline at end of file
diff --git a/lib/typescript/styles.d.ts.map b/lib/typescript/styles.d.ts.map
new file mode 100644
index 0000000..041696a
--- /dev/null
+++ b/lib/typescript/styles.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/styles.tsx"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;CAcjB,CAAC"}
\ No newline at end of file
diff --git a/lib/typescript/typings/index.d.ts b/lib/typescript/typings/index.d.ts
index 303e666..fa39ece 100644
--- a/lib/typescript/typings/index.d.ts
+++ b/lib/typescript/typings/index.d.ts
@@ -1,20 +1,22 @@
import { ReactNode } from 'react';
-import { Animated, GestureResponderEvent, LayoutChangeEvent, PanResponderGestureState, ViewProps } from 'react-native';
-export declare enum SwipeDirection {
- SWIPE_UP = "SWIPE_UP",
- SWIPE_DOWN = "SWIPE_DOWN",
- SWIPE_LEFT = "SWIPE_LEFT",
- SWIPE_RIGHT = "SWIPE_RIGHT"
-}
+import { LayoutChangeEvent, ViewProps } from 'react-native';
+import { GestureTouchEvent } from 'react-native-gesture-handler';
export interface ZoomableViewEvent {
zoomLevel: number;
offsetX: number;
offsetY: number;
originalHeight: number;
originalWidth: number;
- originalPageX: number;
- originalPageY: number;
}
+export type ReactNativeZoomableViewRef = {
+ moveTo(newOffsetX: number, newOffsetY: number): void;
+ moveBy(offsetChangeX: number, offsetChangeY: number): void;
+ zoomTo(newZoomLevel: number, zoomCenter?: Vec2D): boolean;
+ zoomBy(zoomLevelChange: number): boolean;
+ moveStaticPinTo: (position: Vec2D, duration?: number) => void;
+ readonly gestureStarted: boolean;
+};
+type Worklet any> = T;
export interface ReactNativeZoomableViewProps {
style?: ViewProps['style'];
children?: ReactNode;
@@ -25,7 +27,6 @@ export interface ReactNativeZoomableViewProps {
initialOffsetY?: number;
contentWidth?: number;
contentHeight?: number;
- panBoundaryPadding?: number;
maxZoom?: number;
minZoom?: number;
doubleTapDelay?: number;
@@ -33,40 +34,39 @@ export interface ReactNativeZoomableViewProps {
zoomStep?: number;
pinchToZoomInSensitivity?: number;
pinchToZoomOutSensitivity?: number;
- movementSensibility?: number;
+ movementSensitivity?: number;
longPressDuration?: number;
visualTouchFeedbackEnabled?: boolean;
disablePanOnInitialZoom?: boolean;
- zoomAnimatedValue?: Animated.Value;
- panAnimatedValueXY?: Animated.ValueXY;
debug?: boolean;
onLayout?: (event: Pick) => void;
- onTransform?: (zoomableViewEventObject: ZoomableViewEvent) => void;
- onSingleTap?: (event: GestureResponderEvent, zoomableViewEventObject: ZoomableViewEvent) => void;
- onDoubleTapBefore?: (event: GestureResponderEvent, zoomableViewEventObject: ZoomableViewEvent) => void;
- onDoubleTapAfter?: (event: GestureResponderEvent, zoomableViewEventObject: ZoomableViewEvent) => void;
- onShiftingBefore?: (event: GestureResponderEvent | null, gestureState: PanResponderGestureState | null, zoomableViewEventObject: ZoomableViewEvent) => boolean;
- onShiftingAfter?: (event: GestureResponderEvent | null, gestureState: PanResponderGestureState | null, zoomableViewEventObject: ZoomableViewEvent) => boolean;
- onShiftingEnd?: (event: GestureResponderEvent, gestureState: PanResponderGestureState, zoomableViewEventObject: ZoomableViewEvent) => void;
- onZoomBefore?: (event: GestureResponderEvent | null, gestureState: PanResponderGestureState | null, zoomableViewEventObject: ZoomableViewEvent) => boolean | undefined;
- onZoomAfter?: (event: GestureResponderEvent | null, gestureState: PanResponderGestureState | null, zoomableViewEventObject: ZoomableViewEvent) => void;
- onZoomEnd?: (event: GestureResponderEvent, gestureState: PanResponderGestureState, zoomableViewEventObject: ZoomableViewEvent) => void;
- onLongPress?: (event: GestureResponderEvent, gestureState: PanResponderGestureState, zoomableViewEventObject: ZoomableViewEvent) => void;
- onStartShouldSetPanResponder?: (event: GestureResponderEvent, gestureState: PanResponderGestureState, zoomableViewEventObject: ZoomableViewEvent, baseComponentResult: boolean) => boolean;
- onPanResponderGrant?: (event: GestureResponderEvent, gestureState: PanResponderGestureState, zoomableViewEventObject: ZoomableViewEvent) => void;
- onPanResponderEnd?: (event: GestureResponderEvent, gestureState: PanResponderGestureState, zoomableViewEventObject: ZoomableViewEvent) => void;
- onPanResponderMove?: (event: GestureResponderEvent, gestureState: PanResponderGestureState, zoomableViewEventObject: ZoomableViewEvent) => boolean;
- onPanResponderTerminate?: (event: GestureResponderEvent, gestureState: PanResponderGestureState, zoomableViewEventObject: ZoomableViewEvent) => void;
- onPanResponderTerminationRequest?: (event: GestureResponderEvent, gestureState: PanResponderGestureState, zoomableViewEventObject: ZoomableViewEvent) => boolean;
- onShouldBlockNativeResponder?: (event: GestureResponderEvent, gestureState: PanResponderGestureState, zoomableViewEventObject: ZoomableViewEvent) => boolean;
- onStartShouldSetPanResponderCapture?: (event: GestureResponderEvent, gestureState: PanResponderGestureState) => boolean;
- onMoveShouldSetPanResponderCapture?: (event: GestureResponderEvent, gestureState: PanResponderGestureState) => boolean;
- onStaticPinPress?: (event: GestureResponderEvent) => void;
- onStaticPinLongPress?: (event: GestureResponderEvent) => void;
+ /**
+ * Called on the UI thread.
+ * Must be a worklet.
+ */
+ onTransform?: Worklet<(zoomableViewEventObject: ZoomableViewEvent) => void>;
+ onSingleTap?: (event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent) => void;
+ onDoubleTapBefore?: (event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent) => void;
+ onDoubleTapAfter?: (event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent) => void;
+ onShiftingEnd?: (event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent) => void;
+ onZoomEnd?: (event: GestureTouchEvent | undefined, zoomableViewEventObject: ZoomableViewEvent) => void;
+ onLongPress?: (event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent) => void;
+ onPanResponderGrant?: (event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent) => void;
+ onPanResponderEnd?: (event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent) => void;
+ onPanResponderMove?: Worklet<(event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent) => boolean>;
+ onPanResponderTerminate?: (event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent) => void;
staticPinPosition?: Vec2D;
staticPinIcon?: React.ReactElement;
- onStaticPinPositionChange?: (position: Vec2D) => void;
- onStaticPinPositionMove?: (position: Vec2D) => void;
+ /**
+ * Called on the UI thread.
+ * Must be a worklet.
+ */
+ onStaticPinPositionChange?: Worklet<(position: Vec2D) => void>;
+ /**
+ * Called on the UI thread.
+ * Must be a worklet.
+ */
+ onStaticPinPositionMove?: Worklet<(position: Vec2D) => void>;
pinProps?: ViewProps;
}
export interface Vec2D {
@@ -81,28 +81,5 @@ export interface TouchPoint extends Vec2D {
id: string;
isSecondTap?: boolean;
}
-export interface ReactNativeZoomableViewState {
- touches?: TouchPoint[];
- originalWidth: number;
- originalHeight: number;
- originalPageX: number;
- originalPageY: number;
- originalX: number;
- originalY: number;
- debugPoints?: undefined | Vec2D[];
- pinSize: Size2D;
-}
-export interface ReactNativeZoomableViewWithGesturesProps extends ReactNativeZoomableViewProps {
- swipeLengthThreshold?: number;
- swipeVelocityThreshold?: number;
- swipeDirectionalThreshold?: number;
- swipeMinZoom?: number;
- swipeMaxZoom?: number;
- swipeDisabled?: boolean;
- onSwipe?: (swipeDirection: SwipeDirection, gestureState: PanResponderGestureState) => void;
- onSwipeUp?: (gestureState: PanResponderGestureState) => void;
- onSwipeDown?: (gestureState: PanResponderGestureState) => void;
- onSwipeLeft?: (gestureState: PanResponderGestureState) => void;
- onSwipeRight?: (gestureState: PanResponderGestureState) => void;
-}
+export {};
//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/lib/typescript/typings/index.d.ts.map b/lib/typescript/typings/index.d.ts.map
index dfc9f21..a47803e 100644
--- a/lib/typescript/typings/index.d.ts.map
+++ b/lib/typescript/typings/index.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/typings/index.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/typings/index.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/package.json b/package.json
index cd6b9df..36e1f17 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@openspacelabs/react-native-zoomable-view",
- "version": "2.4.2",
+ "version": "2.4.3",
"description": "A view component for react-native with pinch to zoom, tap to move and double tap to zoom capability.",
"main": "lib/commonjs/index",
"module": "lib/module/index",
@@ -67,7 +67,7 @@
"@react-native/eslint-config": "^0.73.0",
"@release-it/conventional-changelog": "^2.0.0",
"@types/lodash": "^4.17.7",
- "@types/react": "^16.9.19",
+ "@types/react": "18.3.12",
"@types/react-native": "^0.65.4",
"@typescript-eslint/eslint-plugin": "^7.18.0",
"@typescript-eslint/parser": "^7.18.0",
@@ -75,21 +75,26 @@
"eslint": "^8.57.1",
"eslint-config-prettier": "^7.0.0",
"eslint-plugin-prettier": "^3.1.3",
+ "eslint-plugin-reanimated": "^2.0.1",
"eslint-plugin-simple-import-sort": "^12.1.1",
"husky": "^4.2.5",
"lodash": "^4.17.21",
"pod-install": "^0.1.0",
"prettier": "^2.0.5",
- "react": "17.0.2",
+ "react": "^18.3.1",
"react-native": "0.79.7",
"react-native-builder-bob": "^0.30.0",
+ "react-native-gesture-handler": "~2.20.2",
+ "react-native-reanimated": "~3.16.1",
"release-it": "^14.2.2",
"typescript": "^4.9.5"
},
"peerDependencies": {
"lodash": "^4.17.21",
- "react": ">=16.8.0",
- "react-native": ">=0.79.0"
+ "react": ">=18.0.0",
+ "react-native": ">=0.79.0",
+ "react-native-gesture-handler": "^2.20.2",
+ "react-native-reanimated": "^3.16.1"
},
"jest": {
"preset": "react-native",
@@ -141,7 +146,8 @@
"prettier",
"react",
"react-native",
- "simple-import-sort"
+ "simple-import-sort",
+ "reanimated"
],
"rules": {
"prettier/prettier": [
@@ -157,7 +163,10 @@
"react-native/no-color-literals": "off",
"react-native/no-inline-styles": "off",
"simple-import-sort/imports": "error",
- "simple-import-sort/exports": "error"
+ "simple-import-sort/exports": "error",
+ "reanimated/js-function-in-worklet": "error",
+ "reanimated/unsupported-syntax": "error",
+ "reanimated/no-multiple-animated-style-usages": "error"
},
"overrides": [
{
diff --git a/src/ReactNativeZoomableView.tsx b/src/ReactNativeZoomableView.tsx
index 25f13a9..3b387a2 100644
--- a/src/ReactNativeZoomableView.tsx
+++ b/src/ReactNativeZoomableView.tsx
@@ -1,5 +1,6 @@
import { debounce, defaults } from 'lodash';
import React, {
+ forwardRef,
ForwardRefRenderFunction,
useImperativeHandle,
useLayoutEffect,
@@ -7,18 +8,25 @@ import React, {
useRef,
useState,
} from 'react';
+import { View } from 'react-native';
import {
- Animated,
- GestureResponderEvent,
- PanResponder,
- PanResponderCallbacks,
- PanResponderGestureState,
- PanResponderInstance,
- StyleSheet,
- View,
-} from 'react-native';
-
-import { getZoomToAnimation } from './animations';
+ Gesture,
+ GestureDetector,
+ GestureHandlerRootView,
+ GestureTouchEvent,
+} from 'react-native-gesture-handler';
+import Animated, {
+ cancelAnimation,
+ makeMutable,
+ runOnJS,
+ useAnimatedReaction,
+ useAnimatedStyle,
+ useDerivedValue,
+ useSharedValue,
+ withTiming,
+} from 'react-native-reanimated';
+
+import { zoomToAnimation } from './animations';
import { AnimatedTouchFeedback } from './components';
import { StaticPin } from './components/StaticPin';
import { DebugTouchPoint } from './debugHelper';
@@ -32,24 +40,18 @@ import { getNextZoomStep } from './helper/getNextZoomStep';
import { useDebugPoints } from './hooks/useDebugPoints';
import { useLatestCallback } from './hooks/useLatestCallback';
import { useZoomSubject } from './hooks/useZoomSubject';
+import { ReactNativeZoomableViewContext } from './ReactNativeZoomableViewContext';
+import { styles } from './styles';
import {
ReactNativeZoomableViewProps,
+ ReactNativeZoomableViewRef,
TouchPoint,
Vec2D,
ZoomableViewEvent,
} from './typings';
-type ReactNativeZoomableView = {
- moveTo(newOffsetX: number, newOffsetY: number): void;
- moveBy(offsetChangeX: number, offsetChangeY: number): void;
- zoomTo(newZoomLevel: number, zoomCenter?: Vec2D): boolean;
- zoomBy(zoomLevelChange: number): boolean;
- moveStaticPinTo: (position: Vec2D, duration?: number) => void;
- readonly gestureStarted: boolean;
-};
-
-const ReactNativeZoomableView: ForwardRefRenderFunction<
- ReactNativeZoomableView,
+const ReactNativeZoomableViewInner: ForwardRefRenderFunction<
+ ReactNativeZoomableViewRef,
ReactNativeZoomableViewProps
> = (props, ref) => {
const {
@@ -57,8 +59,6 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
measure: measureZoomSubject,
originalWidth,
originalHeight,
- originalPageX,
- originalPageY,
originalX,
originalY,
} = useZoomSubject();
@@ -66,13 +66,11 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
const [pinSize, setPinSize] = useState({ width: 0, height: 0 });
const [stateTouches, setStateTouches] = useState([]);
- const { debugPoints, setDebugPoints, setPinchDebugPoints } = useDebugPoints({
- originalPageX,
- originalPageY,
- });
+ const { debugPoints, setDebugPoints, setPinchDebugPoints } = useDebugPoints();
- const gestureHandlers = useRef();
- const doubleTapFirstTapReleaseTimestamp = useRef();
+ const doubleTapFirstTapReleaseTimestamp = useSharedValue(
+ undefined
+ );
props = defaults({}, props, {
zoomEnabled: true,
@@ -84,7 +82,7 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
minZoom: 0.5,
pinchToZoomInSensitivity: 1,
pinchToZoomOutSensitivity: 1,
- movementSensibility: 1,
+ movementSensitivity: 1,
doubleTapDelay: 300,
zoomStep: 0.5,
onLongPress: undefined,
@@ -100,39 +98,84 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
});
const {
+ debug,
staticPinIcon,
children,
visualTouchFeedbackEnabled,
doubleTapDelay,
- staticPinPosition,
- onStaticPinLongPress,
- onStaticPinPress,
+ staticPinPosition: propStaticPinPosition,
+ contentWidth: propContentWidth,
+ contentHeight: propContentHeight,
+ onTransform,
+ onStaticPinPositionMove,
+ onPanResponderMove,
+ zoomEnabled: propZoomEnabled,
+ maxZoom: propMaxZoom,
+ minZoom: propMinZoom,
+ pinchToZoomInSensitivity: propPinchToZoomInSensitivity,
+ pinchToZoomOutSensitivity: propPinchToZoomOutSensitivity,
+ movementSensitivity: propMovementSensitivity,
+ panEnabled: propPanEnabled,
+ disablePanOnInitialZoom: propDisablePanOnInitialZoom,
+ initialZoom: propsInitialZoom,
pinProps,
} = props;
- const panAnim = useRef(new Animated.ValueXY({ x: 0, y: 0 }));
- const zoomAnim = useRef(new Animated.Value(1));
-
- const offsetX = useRef(0);
- const offsetY = useRef(0);
-
- const zoomLevel = useRef(1);
- const lastGestureCenterPosition = useRef<{ x: number; y: number } | null>(
- null
- );
- const lastGestureTouchDistance = useRef(150);
- const gestureType = useRef<'pinch' | 'shift'>();
+ const offsetX = useSharedValue(0);
+ const offsetY = useSharedValue(0);
+ const zoom = useSharedValue(1);
+ const inverseZoom = useDerivedValue(() => 1 / zoom.value);
+ const inverseZoomStyle = useAnimatedStyle(() => ({
+ transform: [{ scale: inverseZoom.value }],
+ }));
- const gestureStarted = useRef(false);
+ const lastGestureCenterPosition = useSharedValue(null);
+ const lastGestureTouchDistance = useSharedValue(150);
+ const gestureStarted = useSharedValue(false);
/**
* Last press time (used to evaluate whether user double tapped)
*/
- const longPressTimeout = useRef();
- const onTransformInvocationInitialized = useRef();
+ const longPressTimeout = useSharedValue(
+ undefined
+ );
+ const onTransformInvocationInitialized = useSharedValue(false);
const singleTapTimeoutId = useRef();
- const touches = useRef([]);
- const doubleTapFirstTap = useRef();
+ const touches = useSharedValue([]);
+ const doubleTapFirstTap = useSharedValue(undefined);
+ const gestureType = useSharedValue<'shift' | 'pinch' | undefined>(undefined);
+
+ const staticPinPosition = useDerivedValue(() => propStaticPinPosition);
+ const contentWidth = useDerivedValue(() => propContentWidth);
+ const contentHeight = useDerivedValue(() => propContentHeight);
+ const zoomEnabled = useDerivedValue(() => propZoomEnabled);
+ const maxZoom = useDerivedValue(() => propMaxZoom);
+ const minZoom = useDerivedValue(() => propMinZoom);
+ const pinchToZoomInSensitivity = useDerivedValue(
+ () => propPinchToZoomInSensitivity
+ );
+ const pinchToZoomOutSensitivity = useDerivedValue(
+ () => propPinchToZoomOutSensitivity
+ );
+ const panEnabled = useDerivedValue(() => propPanEnabled);
+ const disablePanOnInitialZoom = useDerivedValue(
+ () => propDisablePanOnInitialZoom
+ );
+ const initialZoom = useDerivedValue(() => propsInitialZoom);
+ const movementSensitivity = useDerivedValue(() => propMovementSensitivity);
+ const onPanResponderGrant = useLatestCallback(
+ props.onPanResponderGrant || (() => undefined)
+ );
+ const onPanResponderEnd = useLatestCallback(
+ props.onPanResponderEnd || (() => undefined)
+ );
+ const onPanResponderTerminate = useLatestCallback(
+ props.onPanResponderTerminate || (() => undefined)
+ );
+ const onZoomEnd = useLatestCallback(props.onZoomEnd || (() => undefined));
+ const onShiftingEnd = useLatestCallback(
+ props.onShiftingEnd || (() => undefined)
+ );
/**
* Returns additional information about components current state for external event hooks
@@ -140,42 +183,45 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
* @returns {{}}
* @private
*/
- const _getZoomableViewEventObject = useLatestCallback(
- (overwriteObj: Partial = {}): ZoomableViewEvent => {
- return {
- zoomLevel: zoomLevel.current,
- offsetX: offsetX.current,
- offsetY: offsetY.current,
- originalHeight,
- originalWidth,
- originalPageX,
- originalPageY,
- ...overwriteObj,
- };
- }
- );
+ const _getZoomableViewEventObject = (
+ overwriteObj: Partial = {}
+ ): ZoomableViewEvent => {
+ 'worklet';
+
+ return Object.assign(
+ {
+ zoomLevel: zoom.value,
+ offsetX: offsetX.value,
+ offsetY: offsetY.value,
+ originalHeight: originalHeight.value,
+ originalWidth: originalWidth.value,
+ },
+ overwriteObj
+ );
+ };
- const _staticPinPosition = useLatestCallback(() => {
- if (!props.staticPinPosition) return;
- if (!props.contentWidth || !props.contentHeight) return;
+ const _staticPinPosition = () => {
+ 'worklet';
+
+ if (!staticPinPosition.value) return;
+ if (!contentWidth.value || !contentHeight.value) return;
return viewportPositionToImagePosition({
viewportPosition: {
- x: props.staticPinPosition.x,
- y: props.staticPinPosition.y,
+ x: staticPinPosition.value.x,
+ y: staticPinPosition.value.y,
},
imageSize: {
- height: props.contentHeight,
- width: props.contentWidth,
- },
- zoomableEvent: {
- ..._getZoomableViewEventObject(),
- offsetX: offsetX.current,
- offsetY: offsetY.current,
- zoomLevel: zoomLevel.current,
+ height: contentHeight.value,
+ width: contentWidth.value,
},
+ zoomableEvent: _getZoomableViewEventObject({
+ offsetX: offsetX.value,
+ offsetY: offsetY.value,
+ zoomLevel: zoom.value,
+ }),
});
- });
+ };
const _updateStaticPin = useLatestCallback(() => {
const position = _staticPinPosition();
@@ -184,13 +230,13 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
});
const _addTouch = useLatestCallback((touch: TouchPoint) => {
- touches.current.push(touch);
- setStateTouches([...touches.current]);
+ touches.value.push(touch);
+ setStateTouches([...touches.value]);
});
const _removeTouch = useLatestCallback((touch: TouchPoint) => {
- touches.current.splice(touches.current.indexOf(touch), 1);
- setStateTouches([...touches.current]);
+ touches.value.splice(touches.value.indexOf(touch), 1);
+ setStateTouches([...touches.value]);
});
const onStaticPinPositionChange = useLatestCallback(
@@ -206,150 +252,112 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
* try to invoke onTransform
* @private
*/
- const _invokeOnTransform = useLatestCallback(() => {
+ const _invokeOnTransform = () => {
+ 'worklet';
+
const zoomableViewEvent = _getZoomableViewEventObject();
const position = _staticPinPosition();
if (!zoomableViewEvent.originalWidth || !zoomableViewEvent.originalHeight)
return { successful: false };
- props.onTransform?.(zoomableViewEvent);
+ onTransform?.(zoomableViewEvent);
if (position) {
- props.onStaticPinPositionMove?.(position);
- debouncedOnStaticPinPositionChange(position);
+ onStaticPinPositionMove?.(position);
+ runOnJS(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;
- if (props.initialOffsetX != null) offsetX.current = props.initialOffsetX;
- if (props.initialOffsetY != null) offsetY.current = props.initialOffsetY;
-
- panAnim.current.setValue({ x: offsetX.current, y: offsetY.current });
- zoomAnim.current.setValue(zoomLevel.current);
- panAnim.current.addListener(({ x, y }) => {
- offsetX.current = x;
- offsetY.current = y;
- });
- zoomAnim.current.addListener(({ value }) => {
- zoomLevel.current = value;
- });
+ if (props.initialZoom) zoom.value = props.initialZoom;
+ if (props.initialOffsetX != null) offsetX.value = props.initialOffsetX;
+ if (props.initialOffsetY != null) offsetY.value = props.initialOffsetY;
}, []);
- const { zoomEnabled } = props;
- const initialZoom = useRef(props.initialZoom);
- initialZoom.current = props.initialZoom;
useLayoutEffect(() => {
- if (!zoomEnabled && initialZoom.current) {
- zoomLevel.current = initialZoom.current;
- zoomAnim.current.setValue(zoomLevel.current);
+ if (!propZoomEnabled && initialZoom.value) {
+ zoom.value = initialZoom.value;
}
- }, [zoomEnabled]);
+ }, [propZoomEnabled]);
- useLayoutEffect(
+ useAnimatedReaction(
+ _getZoomableViewEventObject,
() => {
if (
- !onTransformInvocationInitialized.current &&
+ !onTransformInvocationInitialized.value &&
_invokeOnTransform().successful
) {
- panAnim.current.addListener(() => _invokeOnTransform());
- zoomAnim.current.addListener(() => _invokeOnTransform());
- onTransformInvocationInitialized.current = true;
+ onTransformInvocationInitialized.value = true;
+ return;
}
+
+ if (onTransformInvocationInitialized.value) _invokeOnTransform();
},
- // FIXME: deps has implicit coupling with internal _invokeOnTransform logic
- [originalWidth, originalHeight]
+ // _invokeOnTransform may cause a re-render, which would call the evaluation again,
+ // causing an infinite loop. This deps array prevents the re-evaluation caused
+ // by the re-render, thus breaking the infinite loop.
+ []
);
- const onLayout = useRef(props.onLayout);
- onLayout.current = props.onLayout;
+ const onLayout = useLatestCallback(props.onLayout || (() => undefined));
// Handle original measurements changed
- useLayoutEffect(() => {
- // We use a custom `onLayout` event, so the clients can stay in-sync
- // with when the internal measurements are actually saved to the state,
- // thus helping them apply transformations at more accurate timings
- const layout = {
- width: originalWidth,
- height: originalHeight,
- x: originalX,
- y: originalY,
- };
- onLayout.current?.({ nativeEvent: { layout } });
-
- if (onTransformInvocationInitialized.current) _invokeOnTransform();
- }, [
- originalHeight,
- originalWidth,
- originalPageX,
- originalPageY,
- originalX,
- originalY,
- ]);
+ useAnimatedReaction(
+ () => [
+ originalHeight.value,
+ originalWidth.value,
+ originalX.value,
+ originalY.value,
+ ],
+ () => {
+ // We use a custom `onLayout` event, so the clients can stay in-sync
+ // with when the internal measurements are actually saved to the state,
+ // thus helping them apply transformations at more accurate timings
+ const layout = {
+ width: originalWidth.value,
+ height: originalHeight.value,
+ x: originalX.value,
+ y: originalY.value,
+ };
+ runOnJS(onLayout)({ nativeEvent: { layout } });
+ }
+ );
// Handle staticPinPosition changed
useLayoutEffect(() => {
- if (onTransformInvocationInitialized.current) _invokeOnTransform();
+ if (onTransformInvocationInitialized.value) _invokeOnTransform();
}, [props.staticPinPosition?.x, props.staticPinPosition?.y]);
- /**
- * Handles the start of touch events and checks for taps
- *
- * @param e
- * @param gestureState
- * @returns {boolean}
- *
- * @private
- */
- const _handleStartShouldSetPanResponder = useLatestCallback(
- (e: GestureResponderEvent, gestureState: PanResponderGestureState) => {
- if (props.onStartShouldSetPanResponder) {
- props.onStartShouldSetPanResponder(
- e,
- gestureState,
- _getZoomableViewEventObject(),
- false
- );
- }
-
- // Always set pan responder on start
- // of gesture so we can handle tap.
- // "Pan threshold validation" will be handled
- // in `onPanResponderMove` instead of in `onMoveShouldSetPanResponder`
- return true;
- }
- );
-
- /**
- * Calculates pinch distance
- *
- * @param e
- * @param gestureState
- * @private
- */
- const _handlePanResponderGrant: NonNullable<
- PanResponderCallbacks['onPanResponderGrant']
- > = useLatestCallback((e, gestureState) => {
- if (props.onLongPress) {
- e.persist();
- longPressTimeout.current = setTimeout(() => {
- props.onLongPress?.(e, gestureState, _getZoomableViewEventObject());
- longPressTimeout.current = undefined;
+ const scheduleLongPressTimeout = useLatestCallback((e: GestureTouchEvent) => {
+ if (props.onLongPress && props.longPressDuration) {
+ longPressTimeout.value = setTimeout(() => {
+ props.onLongPress?.(e, _getZoomableViewEventObject());
+ longPressTimeout.value = undefined;
}, props.longPressDuration);
}
+ });
+ const clearLongPressTimeout = useLatestCallback(() => {
+ if (longPressTimeout.value) {
+ clearTimeout(longPressTimeout.value);
+ longPressTimeout.value = undefined;
+ }
+ });
- props.onPanResponderGrant?.(e, gestureState, _getZoomableViewEventObject());
+ const _handlePanResponderGrant = (e: GestureTouchEvent) => {
+ 'worklet';
- panAnim.current.stopAnimation();
- zoomAnim.current.stopAnimation();
- gestureStarted.current = true;
- });
+ runOnJS(scheduleLongPressTimeout)(e);
+
+ runOnJS(onPanResponderGrant)(e, _getZoomableViewEventObject());
+
+ cancelAnimation(zoom);
+ cancelAnimation(offsetX);
+ cancelAnimation(offsetY);
+ gestureStarted.value = true;
+ };
/**
* Calculates the amount the offset should shift since the last position during panning
@@ -358,151 +366,124 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
*
* @private
*/
- const _calcOffsetShiftSinceLastGestureState = useLatestCallback(
- (gestureCenterPoint: Vec2D) => {
- const { movementSensibility } = props;
+ const _calcOffsetShiftSinceLastGestureState = (gestureCenterPoint: Vec2D) => {
+ 'worklet';
- let shift = null;
+ let shift = null;
- if (lastGestureCenterPosition.current && movementSensibility) {
- const dx = gestureCenterPoint.x - lastGestureCenterPosition.current.x;
- const dy = gestureCenterPoint.y - lastGestureCenterPosition.current.y;
+ if (lastGestureCenterPosition.value && movementSensitivity.value) {
+ const dx = gestureCenterPoint.x - lastGestureCenterPosition.value.x;
+ const dy = gestureCenterPoint.y - lastGestureCenterPosition.value.y;
- const shiftX = dx / zoomLevel.current / movementSensibility;
- const shiftY = dy / zoomLevel.current / movementSensibility;
+ const shiftX = dx / zoom.value / movementSensitivity.value;
+ const shiftY = dy / zoom.value / movementSensitivity.value;
- shift = {
- x: shiftX,
- y: shiftY,
- };
- }
+ shift = {
+ x: shiftX,
+ y: shiftY,
+ };
+ }
- lastGestureCenterPosition.current = gestureCenterPoint;
+ lastGestureCenterPosition.value = gestureCenterPoint;
- return shift;
- }
- );
+ return shift;
+ };
/**
* Handles the pinch movement and zooming
- *
- * @param e
- * @param gestureState
- *
- * @private
*/
- const _handlePinching = useLatestCallback(
- (e: GestureResponderEvent, gestureState: PanResponderGestureState) => {
- if (!props.zoomEnabled) return;
+ const _handlePinching = (e: GestureTouchEvent) => {
+ 'worklet';
- const {
- maxZoom,
- minZoom,
- pinchToZoomInSensitivity,
- pinchToZoomOutSensitivity,
- } = props;
+ if (!zoomEnabled.value) return;
- const distance = calcGestureTouchDistance(e, gestureState);
+ const distance = calcGestureTouchDistance(e);
- if (
- props.onZoomBefore &&
- props.onZoomBefore(e, gestureState, _getZoomableViewEventObject())
- ) {
- return;
- }
+ if (!distance) return;
+ if (!lastGestureTouchDistance.value) return;
- if (!distance) return;
- if (!lastGestureTouchDistance.current) return;
+ // define the new zoom level and take zoom level sensitivity into consideration
+ const zoomGrowthFromLastGestureState =
+ distance / lastGestureTouchDistance.value;
+ lastGestureTouchDistance.value = distance;
- // define the new zoom level and take zoom level sensitivity into consideration
- const zoomGrowthFromLastGestureState =
- distance / lastGestureTouchDistance.current;
- lastGestureTouchDistance.current = distance;
+ const pinchToZoomSensitivity =
+ zoomGrowthFromLastGestureState < 1
+ ? pinchToZoomOutSensitivity.value
+ : pinchToZoomInSensitivity.value;
- 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);
- if (pinchToZoomSensitivity == null) return;
- const deltaGrowth = zoomGrowthFromLastGestureState - 1;
- // 0 - no resistance
- // 10 - 90% resistance
- const deltaGrowthAdjustedBySensitivity =
- deltaGrowth * (1 - (pinchToZoomSensitivity * 9) / 100);
+ let newZoomLevel = zoom.value * (1 + deltaGrowthAdjustedBySensitivity);
- let newZoomLevel =
- zoomLevel.current * (1 + deltaGrowthAdjustedBySensitivity);
+ // make sure max and min zoom levels are respected
+ if (maxZoom.value != null && newZoomLevel > maxZoom.value) {
+ newZoomLevel = maxZoom.value;
+ }
- // make sure max and min zoom levels are respected
- if (maxZoom != null && newZoomLevel > maxZoom) {
- newZoomLevel = maxZoom;
- }
+ if (minZoom.value != null && newZoomLevel < minZoom.value) {
+ newZoomLevel = minZoom.value;
+ }
- if (minZoom != null && newZoomLevel < minZoom) {
- newZoomLevel = minZoom;
- }
+ const gestureCenterPoint = calcGestureCenterPoint(e);
- const gestureCenterPoint = calcGestureCenterPoint(e, gestureState);
+ if (!gestureCenterPoint) return;
- if (!gestureCenterPoint) return;
+ let zoomCenter = {
+ x: gestureCenterPoint.x,
+ y: gestureCenterPoint.y,
+ };
- let zoomCenter = {
- x: gestureCenterPoint.x - originalPageX,
- y: gestureCenterPoint.y - originalPageY,
+ if (staticPinPosition.value) {
+ // When we use a static pin position, the zoom centre is the same as that position,
+ // otherwise the pin moves around way too much while zooming.
+ zoomCenter = {
+ x: staticPinPosition.value.x,
+ y: staticPinPosition.value.y,
};
+ }
- if (props.staticPinPosition) {
- // When we use a static pin position, the zoom centre is the same as that position,
- // otherwise the pin moves around way too much while zooming.
- zoomCenter = {
- x: props.staticPinPosition.x,
- y: props.staticPinPosition.y,
- };
- }
-
- // Uncomment to debug
- props.debug && setPinchDebugPoints(e, zoomCenter);
+ // Uncomment to debug
+ debug && runOnJS(setPinchDebugPoints)(e, zoomCenter);
- const oldOffsetX = offsetX.current;
- const oldOffsetY = offsetY.current;
- const oldScale = zoomLevel.current;
- const newScale = newZoomLevel;
+ const oldOffsetX = offsetX.value;
+ const oldOffsetY = offsetY.value;
+ const oldScale = zoom.value;
+ const newScale = newZoomLevel;
- if (!originalHeight || !originalWidth) return;
+ if (!originalHeight.value || !originalWidth.value) return;
- let newOffsetY = calcNewScaledOffsetForZoomCentering(
- oldOffsetY,
- originalHeight,
- oldScale,
- newScale,
- zoomCenter.y
- );
- let newOffsetX = calcNewScaledOffsetForZoomCentering(
- oldOffsetX,
- originalWidth,
- oldScale,
- newScale,
- zoomCenter.x
- );
-
- const offsetShift =
- _calcOffsetShiftSinceLastGestureState(gestureCenterPoint);
- if (offsetShift) {
- newOffsetX += offsetShift.x;
- newOffsetY += offsetShift.y;
- }
-
- offsetX.current = newOffsetX;
- offsetY.current = newOffsetY;
- zoomLevel.current = newScale;
-
- panAnim.current.setValue({ x: offsetX.current, y: offsetY.current });
- zoomAnim.current.setValue(zoomLevel.current);
+ let newOffsetY = calcNewScaledOffsetForZoomCentering(
+ oldOffsetY,
+ originalHeight.value,
+ oldScale,
+ newScale,
+ zoomCenter.y
+ );
+ let newOffsetX = calcNewScaledOffsetForZoomCentering(
+ oldOffsetX,
+ originalWidth.value,
+ oldScale,
+ newScale,
+ zoomCenter.x
+ );
- props.onZoomAfter?.(e, gestureState, _getZoomableViewEventObject());
+ const offsetShift =
+ _calcOffsetShiftSinceLastGestureState(gestureCenterPoint);
+ if (offsetShift) {
+ newOffsetX += offsetShift.x;
+ newOffsetY += offsetShift.y;
}
- );
+
+ offsetX.value = newOffsetX;
+ offsetY.value = newOffsetY;
+ zoom.value = newScale;
+ };
/**
* Set the state to offset moved
@@ -511,23 +492,12 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
* @param {number} newOffsetY
* @returns
*/
- const _setNewOffsetPosition = useLatestCallback(
- (newOffsetX: number, newOffsetY: number) => {
- const { onShiftingBefore, onShiftingAfter } = props;
-
- if (onShiftingBefore?.(null, null, _getZoomableViewEventObject())) {
- return;
- }
+ const _setNewOffsetPosition = (newOffsetX: number, newOffsetY: number) => {
+ 'worklet';
- offsetX.current = newOffsetX;
- offsetY.current = newOffsetY;
-
- panAnim.current.setValue({ x: offsetX.current, y: offsetY.current });
- zoomAnim.current.setValue(zoomLevel.current);
-
- onShiftingAfter?.(null, null, _getZoomableViewEventObject());
- }
- );
+ offsetX.value = newOffsetX;
+ offsetY.value = newOffsetY;
+ };
/**
* Handles movement by tap and move
@@ -536,34 +506,35 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
*
* @private
*/
- const _handleShifting = useLatestCallback(
- (gestureState: PanResponderGestureState) => {
- // Skips shifting if panEnabled is false or disablePanOnInitialZoom is true and we're on the initial zoom level
- if (
- !props.panEnabled ||
- (props.disablePanOnInitialZoom &&
- zoomLevel.current === props.initialZoom)
- ) {
- return;
- }
- const shift = _calcOffsetShiftSinceLastGestureState({
- x: gestureState.moveX,
- y: gestureState.moveY,
- });
- if (!shift) return;
-
- const newOffsetX = offsetX.current + shift.x;
- const newOffsetY = offsetY.current + shift.y;
+ const _handleShifting = (e: GestureTouchEvent) => {
+ 'worklet';
+ // Skips shifting if panEnabled is false or disablePanOnInitialZoom is true and we're on the initial zoom level
+ if (
+ !panEnabled.value ||
+ (disablePanOnInitialZoom.value && zoom.value === initialZoom.value)
+ ) {
+ return;
+ }
+ const shift = _calcOffsetShiftSinceLastGestureState({
+ x: e.allTouches[0].x,
+ y: e.allTouches[0].y,
+ });
+ if (!shift) return;
- if (props.debug && originalPageX && originalPageY) {
- const x = gestureState.moveX - originalPageX;
- const y = gestureState.moveY - originalPageY;
- setDebugPoints([{ x, y }]);
- }
+ const newOffsetX = offsetX.value + shift.x;
+ const newOffsetY = offsetY.value + shift.y;
- _setNewOffsetPosition(newOffsetX, newOffsetY);
+ if (debug) {
+ const x = e.allTouches[0].x;
+ const y = e.allTouches[0].y;
+ runOnJS(setDebugPoints)([{ x, y }]);
}
- );
+
+ _setNewOffsetPosition(newOffsetX, newOffsetY);
+ };
+
+ const prevZoom = useSharedValue(1);
+ const zoomToDestination = useSharedValue(undefined);
/**
* Zooms to a specific level. A "zoom center" can be provided, which specifies
@@ -580,49 +551,48 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
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;
- });
- }
+ // == Trigger Pan Animation to preserve the zoom center while zooming ==
+ // See the "Zoom Animation Support" block more details
+ zoomToDestination.value = zoomCenter;
+ prevZoom.value = zoom.value;
// == Perform Zoom Animation ==
- getZoomToAnimation(zoomAnim.current, newZoomLevel).start(() => {
- zoomAnim.current.removeListener(listenerId);
+ zoom.value = withTiming(newZoomLevel, zoomToAnimation, () => {
+ 'worlet';
+
+ // == Zoom Animation Ends ==
+ zoomToDestination.value = undefined;
+ runOnJS(onZoomEnd)(undefined, _getZoomableViewEventObject());
});
- // == Zoom Animation Ends ==
- props.onZoomAfter?.(null, null, _getZoomableViewEventObject());
return true;
}
);
+ // Zoom Animation Support:
+ // Adapt offsets when zoom level changes during zoomTo animation
+ useAnimatedReaction(
+ () => zoom.value,
+ (newZoom) => {
+ if (!zoomToDestination.value) return;
+ offsetX.value = calcNewScaledOffsetForZoomCentering(
+ offsetX.value,
+ originalWidth.value,
+ prevZoom.value,
+ newZoom,
+ zoomToDestination.value.x
+ );
+ offsetY.value = calcNewScaledOffsetForZoomCentering(
+ offsetY.value,
+ originalHeight.value,
+ prevZoom.value,
+ newZoom,
+ zoomToDestination.value.y
+ );
+ prevZoom.value = newZoom;
+ }
+ );
+
/**
* Handles the double tap event
*
@@ -630,14 +600,14 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
*
* @private
*/
- const _handleDoubleTap = useLatestCallback((e: GestureResponderEvent) => {
+ const _handleDoubleTap = useLatestCallback((e: GestureTouchEvent) => {
const { onDoubleTapBefore, onDoubleTapAfter, doubleTapZoomToCenter } =
props;
onDoubleTapBefore?.(e, _getZoomableViewEventObject());
const nextZoomStep = getNextZoomStep({
- zoomLevel: zoomLevel.current,
+ zoomLevel: zoom.value,
zoomStep: props.zoomStep,
maxZoom: props.maxZoom,
initialZoom: props.initialZoom,
@@ -646,8 +616,8 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
// define new zoom position coordinates
const zoomPositionCoordinates = {
- x: e.nativeEvent.pageX - originalPageX,
- y: e.nativeEvent.pageY - originalPageY,
+ x: e.allTouches[0].x,
+ y: e.allTouches[0].y,
};
// if doubleTapZoomToCenter enabled -> always zoom to center instead
@@ -672,86 +642,81 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
*
* @private
*/
- const _resolveAndHandleTap = useLatestCallback((e: GestureResponderEvent) => {
+ const _resolveAndHandleTap = (e: GestureTouchEvent) => {
const now = Date.now();
if (
- doubleTapFirstTapReleaseTimestamp.current &&
+ doubleTapFirstTapReleaseTimestamp.value &&
props.doubleTapDelay &&
- now - doubleTapFirstTapReleaseTimestamp.current < props.doubleTapDelay
+ now - doubleTapFirstTapReleaseTimestamp.value < props.doubleTapDelay
) {
- doubleTapFirstTap.current &&
+ doubleTapFirstTap.value &&
_addTouch({
- ...doubleTapFirstTap.current,
+ ...doubleTapFirstTap.value,
id: now.toString(),
isSecondTap: true,
});
singleTapTimeoutId.current && clearTimeout(singleTapTimeoutId.current);
- delete doubleTapFirstTapReleaseTimestamp.current;
+ delete doubleTapFirstTapReleaseTimestamp.value;
delete singleTapTimeoutId.current;
- delete doubleTapFirstTap.current;
+ delete doubleTapFirstTap.value;
_handleDoubleTap(e);
} else {
- doubleTapFirstTapReleaseTimestamp.current = now;
- doubleTapFirstTap.current = {
+ doubleTapFirstTapReleaseTimestamp.value = now;
+ doubleTapFirstTap.value = {
id: now.toString(),
- x: e.nativeEvent.pageX - originalPageX,
- y: e.nativeEvent.pageY - originalPageY,
+ x: e.allTouches[0].x,
+ y: e.allTouches[0].y,
};
- _addTouch(doubleTapFirstTap.current);
+ _addTouch(doubleTapFirstTap.value);
- // persist event so e.nativeEvent is preserved after a timeout delay
- e.persist();
singleTapTimeoutId.current = setTimeout(() => {
- delete doubleTapFirstTapReleaseTimestamp.current;
+ delete doubleTapFirstTapReleaseTimestamp.value;
delete singleTapTimeoutId.current;
// Pan to the tapped location
- if (props.staticPinPosition && doubleTapFirstTap.current) {
- const tapX = props.staticPinPosition.x - doubleTapFirstTap.current.x;
- const tapY = props.staticPinPosition.y - doubleTapFirstTap.current.y;
-
- Animated.timing(panAnim.current, {
- toValue: {
- x: offsetX.current + tapX / zoomLevel.current,
- y: offsetY.current + tapY / zoomLevel.current,
- },
- useNativeDriver: true,
- duration: 200,
- }).start(() => {
- _updateStaticPin();
- });
+ if (props.staticPinPosition && doubleTapFirstTap.value) {
+ const tapX = props.staticPinPosition.x - doubleTapFirstTap.value.x;
+ const tapY = props.staticPinPosition.y - doubleTapFirstTap.value.y;
+
+ const toX = offsetX.value + tapX / zoom.value;
+ const toY = offsetY.value + tapY / zoom.value;
+
+ const animationsDone = makeMutable(0);
+ const done = () => {
+ 'worklet';
+ if (++animationsDone.value >= 2) runOnJS(_updateStaticPin)();
+ };
+
+ offsetX.value = withTiming(toX, { duration: 200 }, done);
+ offsetY.value = withTiming(toY, { duration: 200 }, done);
}
props.onSingleTap?.(e, _getZoomableViewEventObject());
}, props.doubleTapDelay);
}
- });
+ };
const publicMoveStaticPinTo = useLatestCallback(
(position: Vec2D, duration?: number) => {
const { staticPinPosition, contentWidth, contentHeight } = props;
if (!staticPinPosition) return;
- if (!originalWidth || !originalHeight) return;
+ if (!originalWidth.value || !originalHeight.value) return;
if (!contentWidth || !contentHeight) return;
// Offset for the static pin
- const pinX = staticPinPosition.x - originalWidth / 2;
- const pinY = staticPinPosition.y - originalHeight / 2;
+ const pinX = staticPinPosition.x - originalWidth.value / 2;
+ const pinY = staticPinPosition.y - originalHeight.value / 2;
- offsetX.current =
- contentWidth / 2 - position.x + pinX / zoomLevel.current;
- offsetY.current =
- contentHeight / 2 - position.y + pinY / zoomLevel.current;
+ const newOffsetX = contentWidth / 2 - position.x + pinX / zoom.value;
+ const newOffsetY = contentHeight / 2 - position.y + pinY / zoom.value;
if (duration) {
- Animated.timing(panAnim.current, {
- toValue: { x: offsetX.current, y: offsetY.current },
- useNativeDriver: true,
- duration,
- }).start();
+ offsetX.value = withTiming(newOffsetX, { duration });
+ offsetY.value = withTiming(newOffsetY, { duration });
} else {
- panAnim.current.setValue({ x: offsetX.current, y: offsetY.current });
+ offsetX.value = newOffsetX;
+ offsetY.value = newOffsetY;
}
}
);
@@ -770,7 +735,7 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
const publicZoomBy = useLatestCallback((zoomLevelChange: number) => {
// if no zoom level Change given -> just use zoom step
zoomLevelChange ||= props.zoomStep || 0;
- return publicZoomTo(zoomLevel.current + zoomLevelChange);
+ return publicZoomTo(zoom.value + zoomLevelChange);
});
/**
@@ -784,10 +749,10 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
*/
const publicMoveTo = useLatestCallback(
(newOffsetX: number, newOffsetY: number) => {
- if (!originalWidth || !originalHeight) return;
+ if (!originalWidth.value || !originalHeight.value) return;
- const offsetX = (newOffsetX - originalWidth / 2) / zoomLevel.current;
- const offsetY = (newOffsetY - originalHeight / 2) / zoomLevel.current;
+ const offsetX = (newOffsetX - originalWidth.value / 2) / zoom.value;
+ const offsetY = (newOffsetY - originalHeight.value / 2) / zoom.value;
_setNewOffsetPosition(-offsetX, -offsetY);
}
@@ -806,11 +771,9 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
const publicMoveBy = useLatestCallback(
(offsetChangeX: number, offsetChangeY: number) => {
const newOffsetX =
- (offsetX.current * zoomLevel.current - offsetChangeX) /
- zoomLevel.current;
+ (offsetX.value * zoom.value - offsetChangeX) / zoom.value;
const newOffsetY =
- (offsetY.current * zoomLevel.current - offsetChangeY) /
- zoomLevel.current;
+ (offsetY.value * zoom.value - offsetChangeY) / zoom.value;
_setNewOffsetPosition(newOffsetX, newOffsetY);
}
@@ -823,7 +786,7 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
moveBy: publicMoveBy,
moveStaticPinTo: publicMoveStaticPinTo,
get gestureStarted() {
- return gestureStarted.current;
+ return gestureStarted.value;
},
}));
@@ -835,37 +798,34 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
*
* @private
*/
- const _handlePanResponderEnd: NonNullable<
- PanResponderCallbacks['onPanResponderEnd']
- > = useLatestCallback((e, gestureState) => {
- if (!gestureType.current) {
- _resolveAndHandleTap(e);
+ const _handlePanResponderEnd = (e: GestureTouchEvent) => {
+ 'worklet';
+
+ if (!gestureType.value) {
+ runOnJS(_resolveAndHandleTap)(e);
}
- setDebugPoints([]);
+ runOnJS(setDebugPoints)([]);
- lastGestureCenterPosition.current = null;
+ lastGestureCenterPosition.value = null;
- if (longPressTimeout.current) {
- clearTimeout(longPressTimeout.current);
- longPressTimeout.current = undefined;
- }
+ runOnJS(clearLongPressTimeout)();
- props.onPanResponderEnd?.(e, gestureState, _getZoomableViewEventObject());
+ runOnJS(onPanResponderEnd)(e, _getZoomableViewEventObject());
- if (gestureType.current === 'pinch') {
- props.onZoomEnd?.(e, gestureState, _getZoomableViewEventObject());
- } else if (gestureType.current === 'shift') {
- props.onShiftingEnd?.(e, gestureState, _getZoomableViewEventObject());
+ if (gestureType.value === 'pinch') {
+ runOnJS(onZoomEnd)(e, _getZoomableViewEventObject());
+ } else if (gestureType.value === 'shift') {
+ runOnJS(onShiftingEnd)(e, _getZoomableViewEventObject());
}
- if (props.staticPinPosition) {
- _updateStaticPin();
+ if (staticPinPosition.value) {
+ runOnJS(_updateStaticPin)();
}
- gestureType.current = undefined;
- gestureStarted.current = false;
- });
+ gestureType.value = undefined;
+ gestureStarted.value = false;
+ };
/**
* Handles the actual movement of our pan responder
@@ -875,198 +835,156 @@ const ReactNativeZoomableView: ForwardRefRenderFunction<
*
* @private
*/
- const _handlePanResponderMove = useLatestCallback(
- (e: GestureResponderEvent, gestureState: PanResponderGestureState) => {
- if (props.onPanResponderMove) {
- if (
- props.onPanResponderMove(
- e,
- gestureState,
- _getZoomableViewEventObject()
- )
- ) {
- return false;
- }
+ const _handlePanResponderMove = (
+ e: GestureTouchEvent,
+ gestureState: { dx: number; dy: number }
+ ) => {
+ 'worklet';
+
+ if (onPanResponderMove?.(e, _getZoomableViewEventObject())) {
+ return;
+ }
+
+ // Only supports 2 touches and below,
+ // any invalid number will cause the gesture to end.
+ if (e.numberOfTouches <= 2) {
+ if (!gestureStarted.value) {
+ _handlePanResponderGrant(e);
+ }
+ } else {
+ if (gestureStarted.value) {
+ _handlePanResponderEnd(e);
}
+ 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 (e.numberOfTouches === 2) {
+ runOnJS(clearLongPressTimeout)();
+
+ // change some measurement states when switching gesture to ensure a smooth transition
+ if (gestureType.value !== 'pinch') {
+ lastGestureCenterPosition.value = calcGestureCenterPoint(e);
+ lastGestureTouchDistance.value = calcGestureTouchDistance(e);
}
+ gestureType.value = 'pinch';
+ _handlePinching(e);
+ } else if (e.numberOfTouches === 1) {
+ const { dx, dy } = gestureState;
- if (gestureState.numberActiveTouches === 2) {
- if (longPressTimeout.current) {
- clearTimeout(longPressTimeout.current);
- longPressTimeout.current = undefined;
- }
+ if (longPressTimeout.value && (Math.abs(dx) > 5 || Math.abs(dy) > 5)) {
+ runOnJS(clearLongPressTimeout)();
+ }
- // 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
- );
- }
+ // change some measurement states when switching gesture to ensure a smooth transition
+ if (gestureType.value !== 'shift') {
+ lastGestureCenterPosition.value = calcGestureCenterPoint(e);
+ }
- const { dx, dy } = gestureState;
- const isShiftGesture = Math.abs(dx) > 2 || Math.abs(dy) > 2;
- if (isShiftGesture) {
- gestureType.current = 'shift';
- _handleShifting(gestureState);
- }
+ const isShiftGesture = Math.abs(dx) > 2 || Math.abs(dy) > 2;
+ if (isShiftGesture) {
+ gestureType.value = 'shift';
+ _handleShifting(e);
}
}
- );
-
- 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),
+ };
+
+ const firstTouch = useSharedValue(undefined);
+ const gesture = Gesture.Manual()
+ .onTouchesDown((e, stateManager) => {
+ // only begin if this is the first touch
+ if (!firstTouch.value) {
+ stateManager.activate();
+ stateManager.begin();
+ firstTouch.value = { x: e.allTouches[0].x, y: e.allTouches[0].y };
+ _handlePanResponderGrant(e);
+ }
+ })
+ .onTouchesMove((e) => {
+ const dx = e.allTouches[0].x - (firstTouch.value?.x || 0);
+ const dy = e.allTouches[0].y - (firstTouch.value?.y || 0);
+ _handlePanResponderMove(e, { dx, dy });
+ })
+ .onTouchesUp((e, stateManager) => {
+ // only end if this is the last touch being lifted
+ if (e.numberOfTouches === 0) {
+ _handlePanResponderEnd(e);
+ stateManager.end();
+ }
+ })
+ .onTouchesCancelled((e, stateManager) => {
+ _handlePanResponderEnd(e);
+ runOnJS(onPanResponderTerminate)(e, _getZoomableViewEventObject());
+ stateManager.end();
+ })
+ .onFinalize(() => {
+ firstTouch.value = undefined;
});
- }, []);
+
+ const transformStyle = useAnimatedStyle(() => {
+ return {
+ transform: [
+ // In RN79, we need to split the scale into X and Y to avoid
+ // the content getting pixelated when zooming in
+ { scaleX: zoom.value },
+ { scaleY: zoom.value },
+ { translateX: offsetX.value },
+ { translateY: offsetY.value },
+ ],
+ };
+ });
return (
-
-
- {children}
-
-
- {visualTouchFeedbackEnabled &&
- stateTouches.map(
- (touch) =>
- doubleTapDelay && (
- {
- _removeTouch(touch);
- }}
+
+
+
+
+ {children}
+
+
+ {visualTouchFeedbackEnabled &&
+ stateTouches.map(
+ (touch) =>
+ doubleTapDelay && (
+ {
+ _removeTouch(touch);
+ }}
+ />
+ )
+ )}
+
+ {/* For Debugging Only */}
+ {debugPoints.map(({ x, y }, index) => {
+ return ;
+ })}
+
+ {propStaticPinPosition && (
+
- )
- )}
-
- {/* For Debugging Only */}
- {debugPoints.map(({ x, y }, index) => {
- return ;
- })}
-
- {staticPinPosition && (
-
- )}
-
+ )}
+
+
+
+
);
};
-const styles = StyleSheet.create({
- container: {
- alignItems: 'center',
- flex: 1,
- justifyContent: 'center',
- overflow: 'hidden',
- position: 'relative',
- },
- zoomSubject: {
- alignItems: 'center',
- flex: 1,
- justifyContent: 'center',
- width: '100%',
- },
-});
-
-export default ReactNativeZoomableView;
-
-export { ReactNativeZoomableView };
+export const ReactNativeZoomableView = forwardRef(ReactNativeZoomableViewInner);
diff --git a/src/ReactNativeZoomableViewContext.tsx b/src/ReactNativeZoomableViewContext.tsx
new file mode 100644
index 0000000..eaf39f2
--- /dev/null
+++ b/src/ReactNativeZoomableViewContext.tsx
@@ -0,0 +1,23 @@
+import { createContext, useContext } from 'react';
+import { DerivedValue, SharedValue } from 'react-native-reanimated';
+
+export const ReactNativeZoomableViewContext = createContext<{
+ zoom: SharedValue;
+ inverseZoom: DerivedValue;
+ // A style that applies the inverse zoom level, so that children stay the same size when zooming.
+ // Generic type for compatibility with React Native versions.
+ inverseZoomStyle: { transform: { scale: number }[] };
+ offsetX: SharedValue;
+ offsetY: SharedValue;
+} | null>(null);
+
+export const useZoomableViewContext = () => {
+ const context = useContext(ReactNativeZoomableViewContext);
+
+ if (!context) {
+ throw new Error(
+ 'useZoomableViewContext must be used within ReactNativeZoomableView'
+ );
+ }
+ return context;
+};
diff --git a/src/animations/index.ts b/src/animations/index.ts
index bd72f4b..4472af4 100644
--- a/src/animations/index.ts
+++ b/src/animations/index.ts
@@ -1,9 +1,6 @@
-import { Animated, Easing } from 'react-native';
+import { Easing, WithTimingConfig } from 'react-native-reanimated';
-export function getZoomToAnimation(animValue: Animated.Value, toValue: number) {
- return Animated.timing(animValue, {
- easing: Easing.out(Easing.ease),
- toValue,
- useNativeDriver: true,
- });
-}
+export const zoomToAnimation: WithTimingConfig = {
+ easing: Easing.out(Easing.ease),
+ duration: 250,
+};
diff --git a/src/components/FixedSize.tsx b/src/components/FixedSize.tsx
new file mode 100644
index 0000000..906016f
--- /dev/null
+++ b/src/components/FixedSize.tsx
@@ -0,0 +1,47 @@
+import React from 'react';
+import Animated from 'react-native-reanimated';
+
+import { ReactNativeZoomableViewContext } from '../ReactNativeZoomableViewContext';
+/**
+ * A wrapper component that keeps elements at a fixed visual size regardless of zoom level.
+ *
+ * @param {{
+ * left: number;
+ * top: number;
+ * children: React.ReactNode;
+ * }} param0
+ * @param {number} param0.left The left position in percentage (0-100)
+ * @param {number} param0.top The top position in percentage (0-100)
+ * @param {React.ReactNode} param0.children The children to render inside the fixed size container
+ * @returns {*}
+ */
+export const FixedSize = ({
+ left,
+ top,
+ children,
+}: {
+ left: number;
+ top: number;
+ children: React.ReactNode;
+}) => {
+ const context = React.useContext(ReactNativeZoomableViewContext);
+
+ return (
+
+ {children}
+
+ );
+};
+
+export default FixedSize;
diff --git a/src/components/StaticPin.tsx b/src/components/StaticPin.tsx
index 9715188..edfdbb3 100644
--- a/src/components/StaticPin.tsx
+++ b/src/components/StaticPin.tsx
@@ -1,40 +1,21 @@
import React from 'react';
-import {
- Animated,
- GestureResponderEvent,
- Image,
- PanResponder,
- PanResponderGestureState,
- StyleSheet,
- View,
- ViewProps,
-} from 'react-native';
-import { Size2D } from 'src/typings';
+import { Image, StyleSheet, View, ViewProps } from 'react-native';
+
+import { Size2D } from '../typings';
export const StaticPin = ({
staticPinPosition,
staticPinIcon,
pinSize,
- onParentMove,
- onPress,
- onLongPress,
setPinSize,
pinProps = {},
}: {
staticPinPosition: { x: number; y: number };
staticPinIcon: React.ReactNode;
pinSize: Size2D;
- /** Internal handler for passing move event to parent */
- onParentMove: (
- evt: GestureResponderEvent,
- gestureState: PanResponderGestureState
- ) => boolean | undefined;
- onPress?: (evt: GestureResponderEvent) => void;
- onLongPress?: (evt: GestureResponderEvent) => void;
setPinSize: (size: Size2D) => void;
pinProps?: ViewProps;
}) => {
- const tapTime = React.useRef(0);
const transform = [
{ translateY: -pinSize.height },
{ translateX: -pinSize.width / 2 },
@@ -42,37 +23,8 @@ export const StaticPin = ({
const opacity = pinSize.width && pinSize.height ? 1 : 0;
- const panResponder = React.useRef(
- PanResponder.create({
- onStartShouldSetPanResponder: () => {
- tapTime.current = Date.now();
-
- // We want to handle tap on this so set true
- return true;
- },
- onPanResponderMove: (evt, gestureState) => {
- // However if the user moves finger we want to pass this evt to parent
- // to handle panning (tap not recognized)
- if (Math.abs(gestureState.dx) > 5 && Math.abs(gestureState.dy) > 5)
- onParentMove(evt, gestureState);
- },
- onPanResponderRelease: (evt, gestureState) => {
- if (Math.abs(gestureState.dx) > 5 || Math.abs(gestureState.dy) > 5)
- return;
- const dt = Date.now() - tapTime.current;
- if (onPress && dt < 500) {
- onPress(evt);
- }
- if (onLongPress && dt > 500) {
- // RN long press is 500ms
- onLongPress(evt);
- }
- },
- })
- ).current;
-
return (
- {
setPinSize(layout);
}}
- {...panResponder.panHandlers}
>
{staticPinIcon || (
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-use-before-define
)}
-
+
);
};
diff --git a/src/helper/calcNewScaledOffsetForZoomCentering.ts b/src/helper/calcNewScaledOffsetForZoomCentering.ts
index d76b930..df525a5 100644
--- a/src/helper/calcNewScaledOffsetForZoomCentering.ts
+++ b/src/helper/calcNewScaledOffsetForZoomCentering.ts
@@ -55,6 +55,8 @@ export function calcNewScaledOffsetForZoomCentering(
newScale: number,
zoomCenterXOrY: number
) {
+ 'worklet';
+
const oldOffSetUnscaled = oldOffsetXOrYScaled * oldScale;
const growthRate = newScale / oldScale;
diff --git a/src/helper/coordinateConversion.ts b/src/helper/coordinateConversion.ts
index 3162dcf..77ca90d 100644
--- a/src/helper/coordinateConversion.ts
+++ b/src/helper/coordinateConversion.ts
@@ -1,14 +1,4 @@
-import { Size2D, Vec2D, ZoomableViewEvent } from 'src/typings';
-
-export const defaultTransformSubjectData: ZoomableViewEvent = {
- offsetX: 0,
- offsetY: 0,
- zoomLevel: 0,
- originalWidth: 0,
- originalHeight: 0,
- originalPageX: 0,
- originalPageY: 0,
-};
+import { Size2D, Vec2D, ZoomableViewEvent } from '../typings';
/**
* Assuming you have an image that's being resized to fit into a container
@@ -25,6 +15,8 @@ export function applyContainResizeMode(
imgSize: Size2D,
containerSize: Size2D
): { size: Size2D; scale: number } | { size: null; scale: null } {
+ 'worklet';
+
const { width: imageWidth, height: imageHeight } = imgSize;
const { width: areaWidth, height: areaHeight } = containerSize;
const imageAspect = imageWidth / imageHeight;
@@ -63,6 +55,8 @@ export function getImageOriginOnTransformSubject(
resizedImageSize: Size2D,
transformSubject: ZoomableViewEvent
) {
+ 'worklet';
+
const { offsetX, offsetY, zoomLevel, originalWidth, originalHeight } =
transformSubject;
return {
@@ -95,6 +89,8 @@ export function viewportPositionToImagePosition({
imageSize: Size2D;
zoomableEvent: ZoomableViewEvent;
}): Vec2D | null {
+ 'worklet';
+
const { size: resizedImgSize, scale: resizedImgScale } =
applyContainResizeMode(imageSize, {
width: zoomableEvent.originalWidth,
diff --git a/src/helper/index.ts b/src/helper/index.ts
index 9cf3a90..d871de0 100644
--- a/src/helper/index.ts
+++ b/src/helper/index.ts
@@ -1,4 +1,4 @@
-import { GestureResponderEvent, PanResponderGestureState } from 'react-native';
+import { GestureTouchEvent } from 'react-native-gesture-handler';
import { Vec2D } from '../typings';
@@ -15,39 +15,34 @@ export { calcNewScaledOffsetForZoomCentering } from './calcNewScaledOffsetForZoo
* because gestureState.moveX/Y is messed up on real device
* (Sometimes it's the center point, but sometimes it randomly takes the position of one of the touches)
*/
-export function calcGestureCenterPoint(
- e: GestureResponderEvent,
- gestureState: PanResponderGestureState
-): Vec2D | null {
- const touches = e.nativeEvent.touches;
+export function calcGestureCenterPoint(e: GestureTouchEvent): Vec2D | null {
+ 'worklet';
+
+ const touches = e.allTouches;
if (!touches[0]) return null;
- if (gestureState.numberActiveTouches === 2) {
+ if (e.numberOfTouches === 2) {
if (!touches[1]) return null;
return {
- x: (touches[0].pageX + touches[1].pageX) / 2,
- y: (touches[0].pageY + touches[1].pageY) / 2,
+ x: (touches[0].x + touches[1].x) / 2,
+ y: (touches[0].y + touches[1].y) / 2,
};
}
- if (gestureState.numberActiveTouches === 1) {
- return {
- x: touches[0].pageX,
- y: touches[0].pageY,
- };
+ if (e.numberOfTouches === 1) {
+ return { x: touches[0].x, y: touches[0].y };
}
return null;
}
-export function calcGestureTouchDistance(
- e: GestureResponderEvent,
- gestureState: PanResponderGestureState
-): number | null {
- const touches = e.nativeEvent.touches;
- if (gestureState.numberActiveTouches !== 2 || !touches[0] || !touches[1])
- return null;
+export function calcGestureTouchDistance(e: GestureTouchEvent): number | null {
+ 'worklet';
+
+ const touches = e.allTouches;
+ if (e.numberOfTouches !== 2 || !touches[0] || !touches[1]) return null;
+
+ const dx = Math.abs(touches[0].x - touches[1].x);
+ const dy = Math.abs(touches[0].x - touches[1].x);
- const dx = Math.abs(touches[0].pageX - touches[1].pageX);
- const dy = Math.abs(touches[0].pageY - touches[1].pageY);
return Math.sqrt(dx * dx + dy * dy);
}
diff --git a/src/hooks/useDebugPoints.ts b/src/hooks/useDebugPoints.ts
index 5f6b736..e106df5 100644
--- a/src/hooks/useDebugPoints.ts
+++ b/src/hooks/useDebugPoints.ts
@@ -1,16 +1,10 @@
import { useState } from 'react';
-import { GestureResponderEvent } from 'react-native';
+import { GestureTouchEvent } from 'react-native-gesture-handler';
import { Vec2D } from '../typings';
import { useLatestCallback } from './useLatestCallback';
-export const useDebugPoints = ({
- originalPageX,
- originalPageY,
-}: {
- originalPageX: number;
- originalPageY: number;
-}) => {
+export const useDebugPoints = () => {
const [debugPoints, setDebugPoints] = useState([]);
/**
@@ -20,22 +14,10 @@ export const useDebugPoints = ({
* @param points
*/
const setPinchDebugPoints = useLatestCallback(
- (
- gestureResponderEvent: GestureResponderEvent,
- zoomCenter: Vec2D,
- ...points: Vec2D[]
- ) => {
- const { touches } = gestureResponderEvent.nativeEvent;
-
+ (e: GestureTouchEvent, zoomCenter: Vec2D, ...points: Vec2D[]) => {
setDebugPoints([
- {
- x: touches[0].pageX - originalPageX,
- y: touches[0].pageY - originalPageY,
- },
- {
- x: touches[1].pageX - originalPageX,
- y: touches[1].pageY - originalPageY,
- },
+ { x: e.allTouches[0].x, y: e.allTouches[0].y },
+ { x: e.allTouches[1].x, y: e.allTouches[1].y },
zoomCenter,
...points,
]);
diff --git a/src/hooks/useZoomSubject.ts b/src/hooks/useZoomSubject.ts
index c1f6526..f699308 100644
--- a/src/hooks/useZoomSubject.ts
+++ b/src/hooks/useZoomSubject.ts
@@ -1,16 +1,15 @@
-import { useEffect, useRef, useState } from 'react';
+import { useEffect, useRef } from 'react';
import { View } from 'react-native';
+import { useSharedValue } from 'react-native-reanimated';
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 originalWidth = useSharedValue(0);
+ const originalHeight = useSharedValue(0);
+ const originalX = useSharedValue(0);
+ const originalY = useSharedValue(0);
const measureZoomSubjectInterval = useRef();
/**
@@ -37,12 +36,10 @@ export const useZoomSubject = () => {
// 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);
+ originalX.value = x;
+ originalY.value = y;
+ originalWidth.value = width;
+ originalHeight.value = height;
});
});
});
@@ -70,8 +67,6 @@ export const useZoomSubject = () => {
measure,
originalWidth,
originalHeight,
- originalPageX,
- originalPageY,
originalX,
originalY,
};
diff --git a/src/index.tsx b/src/index.tsx
index f370933..a4457e0 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -1,20 +1,30 @@
+import FixedSize from './components/FixedSize';
import {
applyContainResizeMode,
getImageOriginOnTransformSubject,
viewportPositionToImagePosition,
} from './helper/coordinateConversion';
-import ReactNativeZoomableView from './ReactNativeZoomableView';
+import { ReactNativeZoomableView } from './ReactNativeZoomableView';
+import {
+ ReactNativeZoomableViewContext,
+ useZoomableViewContext,
+} from './ReactNativeZoomableViewContext';
import type {
ReactNativeZoomableViewProps,
+ ReactNativeZoomableViewRef,
ZoomableViewEvent,
} from './typings';
export {
// Helper functions for coordinate conversion
applyContainResizeMode,
+ FixedSize,
getImageOriginOnTransformSubject,
ReactNativeZoomableView,
+ ReactNativeZoomableViewContext,
ReactNativeZoomableViewProps,
+ ReactNativeZoomableViewRef,
+ useZoomableViewContext,
viewportPositionToImagePosition,
ZoomableViewEvent,
};
diff --git a/src/styles.tsx b/src/styles.tsx
new file mode 100644
index 0000000..e9fe1aa
--- /dev/null
+++ b/src/styles.tsx
@@ -0,0 +1,17 @@
+import { StyleSheet } from 'react-native';
+
+export const styles = StyleSheet.create({
+ container: {
+ alignItems: 'center',
+ flex: 1,
+ justifyContent: 'center',
+ overflow: 'hidden',
+ position: 'relative',
+ },
+ zoomSubject: {
+ alignItems: 'center',
+ flex: 1,
+ justifyContent: 'center',
+ width: '100%',
+ },
+});
diff --git a/src/typings/index.ts b/src/typings/index.ts
index 9136a10..520fdda 100644
--- a/src/typings/index.ts
+++ b/src/typings/index.ts
@@ -1,18 +1,6 @@
import { ReactNode } from 'react';
-import {
- Animated,
- GestureResponderEvent,
- LayoutChangeEvent,
- PanResponderGestureState,
- ViewProps,
-} from 'react-native';
-
-export enum SwipeDirection {
- SWIPE_UP = 'SWIPE_UP',
- SWIPE_DOWN = 'SWIPE_DOWN',
- SWIPE_LEFT = 'SWIPE_LEFT',
- SWIPE_RIGHT = 'SWIPE_RIGHT',
-}
+import { LayoutChangeEvent, ViewProps } from 'react-native';
+import { GestureTouchEvent } from 'react-native-gesture-handler';
export interface ZoomableViewEvent {
zoomLevel: number;
@@ -20,10 +8,20 @@ export interface ZoomableViewEvent {
offsetY: number;
originalHeight: number;
originalWidth: number;
- originalPageX: number;
- originalPageY: number;
}
+export type ReactNativeZoomableViewRef = {
+ moveTo(newOffsetX: number, newOffsetY: number): void;
+ moveBy(offsetChangeX: number, offsetChangeY: number): void;
+ zoomTo(newZoomLevel: number, zoomCenter?: Vec2D): boolean;
+ zoomBy(zoomLevelChange: number): boolean;
+ moveStaticPinTo: (position: Vec2D, duration?: number) => void;
+ readonly gestureStarted: boolean;
+};
+
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+type Worklet any> = T;
+
export interface ReactNativeZoomableViewProps {
// options
style?: ViewProps['style'];
@@ -35,7 +33,6 @@ export interface ReactNativeZoomableViewProps {
initialOffsetY?: number;
contentWidth?: number;
contentHeight?: number;
- panBoundaryPadding?: number;
maxZoom?: number;
minZoom?: number;
doubleTapDelay?: number;
@@ -43,118 +40,75 @@ export interface ReactNativeZoomableViewProps {
zoomStep?: number;
pinchToZoomInSensitivity?: number;
pinchToZoomOutSensitivity?: number;
- movementSensibility?: number;
+ movementSensitivity?: number;
longPressDuration?: number;
visualTouchFeedbackEnabled?: boolean;
disablePanOnInitialZoom?: boolean;
- // Zoom animated value ref
- zoomAnimatedValue?: Animated.Value;
- panAnimatedValueXY?: Animated.ValueXY;
-
// debug
debug?: boolean;
// callbacks
onLayout?: (event: Pick) => void;
- onTransform?: (zoomableViewEventObject: ZoomableViewEvent) => void;
+ /**
+ * Called on the UI thread.
+ * Must be a worklet.
+ */
+ onTransform?: Worklet<(zoomableViewEventObject: ZoomableViewEvent) => void>;
onSingleTap?: (
- event: GestureResponderEvent,
+ event: GestureTouchEvent,
zoomableViewEventObject: ZoomableViewEvent
) => void;
onDoubleTapBefore?: (
- event: GestureResponderEvent,
+ event: GestureTouchEvent,
zoomableViewEventObject: ZoomableViewEvent
) => void;
onDoubleTapAfter?: (
- event: GestureResponderEvent,
+ event: GestureTouchEvent,
zoomableViewEventObject: ZoomableViewEvent
) => void;
- onShiftingBefore?: (
- event: GestureResponderEvent | null,
- gestureState: PanResponderGestureState | null,
- zoomableViewEventObject: ZoomableViewEvent
- ) => boolean;
- onShiftingAfter?: (
- event: GestureResponderEvent | null,
- gestureState: PanResponderGestureState | null,
- zoomableViewEventObject: ZoomableViewEvent
- ) => boolean;
onShiftingEnd?: (
- event: GestureResponderEvent,
- gestureState: PanResponderGestureState,
- zoomableViewEventObject: ZoomableViewEvent
- ) => void;
- onZoomBefore?: (
- event: GestureResponderEvent | null,
- gestureState: PanResponderGestureState | null,
- zoomableViewEventObject: ZoomableViewEvent
- ) => boolean | undefined;
- onZoomAfter?: (
- event: GestureResponderEvent | null,
- gestureState: PanResponderGestureState | null,
+ event: GestureTouchEvent,
zoomableViewEventObject: ZoomableViewEvent
) => void;
onZoomEnd?: (
- event: GestureResponderEvent,
- gestureState: PanResponderGestureState,
+ event: GestureTouchEvent | undefined,
zoomableViewEventObject: ZoomableViewEvent
) => void;
onLongPress?: (
- event: GestureResponderEvent,
- gestureState: PanResponderGestureState,
+ event: GestureTouchEvent,
zoomableViewEventObject: ZoomableViewEvent
) => void;
- onStartShouldSetPanResponder?: (
- event: GestureResponderEvent,
- gestureState: PanResponderGestureState,
- zoomableViewEventObject: ZoomableViewEvent,
- baseComponentResult: boolean
- ) => boolean;
onPanResponderGrant?: (
- event: GestureResponderEvent,
- gestureState: PanResponderGestureState,
+ event: GestureTouchEvent,
zoomableViewEventObject: ZoomableViewEvent
) => void;
onPanResponderEnd?: (
- event: GestureResponderEvent,
- gestureState: PanResponderGestureState,
+ event: GestureTouchEvent,
zoomableViewEventObject: ZoomableViewEvent
) => void;
- onPanResponderMove?: (
- event: GestureResponderEvent,
- gestureState: PanResponderGestureState,
- zoomableViewEventObject: ZoomableViewEvent
- ) => boolean;
+ onPanResponderMove?: Worklet<
+ (
+ event: GestureTouchEvent,
+ zoomableViewEventObject: ZoomableViewEvent
+ ) => boolean
+ >;
onPanResponderTerminate?: (
- event: GestureResponderEvent,
- gestureState: PanResponderGestureState,
+ event: GestureTouchEvent,
zoomableViewEventObject: ZoomableViewEvent
) => void;
- onPanResponderTerminationRequest?: (
- event: GestureResponderEvent,
- gestureState: PanResponderGestureState,
- zoomableViewEventObject: ZoomableViewEvent
- ) => boolean;
- onShouldBlockNativeResponder?: (
- event: GestureResponderEvent,
- gestureState: PanResponderGestureState,
- zoomableViewEventObject: ZoomableViewEvent
- ) => boolean;
- onStartShouldSetPanResponderCapture?: (
- event: GestureResponderEvent,
- gestureState: PanResponderGestureState
- ) => boolean;
- onMoveShouldSetPanResponderCapture?: (
- event: GestureResponderEvent,
- gestureState: PanResponderGestureState
- ) => boolean;
- onStaticPinPress?: (event: GestureResponderEvent) => void;
- onStaticPinLongPress?: (event: GestureResponderEvent) => void;
staticPinPosition?: Vec2D;
staticPinIcon?: React.ReactElement;
- onStaticPinPositionChange?: (position: Vec2D) => void;
- onStaticPinPositionMove?: (position: Vec2D) => void;
+ /**
+ * Called on the UI thread.
+ * Must be a worklet.
+ */
+ onStaticPinPositionChange?: Worklet<(position: Vec2D) => void>;
+ /**
+ * Called on the UI thread.
+ * Must be a worklet.
+ */
+ onStaticPinPositionMove?: Worklet<(position: Vec2D) => void>;
pinProps?: ViewProps;
}
@@ -172,33 +126,3 @@ export interface TouchPoint extends Vec2D {
id: string;
isSecondTap?: boolean;
}
-
-export interface ReactNativeZoomableViewState {
- touches?: TouchPoint[];
- originalWidth: number;
- originalHeight: number;
- originalPageX: number;
- originalPageY: number;
- originalX: number;
- originalY: number;
- debugPoints?: undefined | Vec2D[];
- pinSize: Size2D;
-}
-
-export interface ReactNativeZoomableViewWithGesturesProps
- extends ReactNativeZoomableViewProps {
- swipeLengthThreshold?: number;
- swipeVelocityThreshold?: number;
- swipeDirectionalThreshold?: number;
- swipeMinZoom?: number;
- swipeMaxZoom?: number;
- swipeDisabled?: boolean;
- onSwipe?: (
- swipeDirection: SwipeDirection,
- gestureState: PanResponderGestureState
- ) => void;
- onSwipeUp?: (gestureState: PanResponderGestureState) => void;
- onSwipeDown?: (gestureState: PanResponderGestureState) => void;
- onSwipeLeft?: (gestureState: PanResponderGestureState) => void;
- onSwipeRight?: (gestureState: PanResponderGestureState) => void;
-}
diff --git a/tsconfig.build.json b/tsconfig.build.json
index 999d3f3..08d157a 100644
--- a/tsconfig.build.json
+++ b/tsconfig.build.json
@@ -1,5 +1,9 @@
{
"extends": "./tsconfig",
- "exclude": ["example"]
+ "compilerOptions": {
+ "rootDir": "./src",
+ },
+ "include": ["src/**/*"],
+ "exclude": ["example", "lib", "node_modules", "**/__tests__/**"]
}
diff --git a/tsconfig.json b/tsconfig.json
index 0d58a71..f48a299 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,8 +1,8 @@
{
"compilerOptions": {
- "baseUrl": "./",
+ "rootDir": ".",
"paths": {
- "@openspacelabs/react-native-zoomable-view": ["./src/index"]
+ "@openspacelabs/react-native-zoomable-view": ["./src/index"],
},
"declaration": true,
"module": "esnext",
diff --git a/yarn.lock b/yarn.lock
index b239cc8..b899f4a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -687,7 +687,7 @@
"@babel/helper-create-regexp-features-plugin" "^7.18.6"
"@babel/helper-plugin-utils" "^7.18.6"
-"@babel/plugin-transform-arrow-functions@^7.27.1":
+"@babel/plugin-transform-arrow-functions@^7.0.0-0", "@babel/plugin-transform-arrow-functions@^7.27.1":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz#6e2061067ba3ab0266d834a9f94811196f2aba9a"
integrity sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==
@@ -726,7 +726,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.27.1"
-"@babel/plugin-transform-class-properties@^7.27.1":
+"@babel/plugin-transform-class-properties@^7.0.0-0", "@babel/plugin-transform-class-properties@^7.27.1":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz#dd40a6a370dfd49d32362ae206ddaf2bb082a925"
integrity sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==
@@ -742,7 +742,7 @@
"@babel/helper-create-class-features-plugin" "^7.28.3"
"@babel/helper-plugin-utils" "^7.27.1"
-"@babel/plugin-transform-classes@^7.28.4":
+"@babel/plugin-transform-classes@^7.0.0-0", "@babel/plugin-transform-classes@^7.28.4":
version "7.28.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz#75d66175486788c56728a73424d67cbc7473495c"
integrity sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==
@@ -924,7 +924,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.27.1"
-"@babel/plugin-transform-nullish-coalescing-operator@^7.27.1":
+"@babel/plugin-transform-nullish-coalescing-operator@^7.0.0-0", "@babel/plugin-transform-nullish-coalescing-operator@^7.27.1":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz#4f9d3153bf6782d73dd42785a9d22d03197bc91d"
integrity sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==
@@ -964,7 +964,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.27.1"
-"@babel/plugin-transform-optional-chaining@^7.27.1", "@babel/plugin-transform-optional-chaining@^7.28.5":
+"@babel/plugin-transform-optional-chaining@^7.0.0-0", "@babel/plugin-transform-optional-chaining@^7.27.1", "@babel/plugin-transform-optional-chaining@^7.28.5":
version "7.28.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz#8238c785f9d5c1c515a90bf196efb50d075a4b26"
integrity sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==
@@ -1058,7 +1058,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.27.1"
-"@babel/plugin-transform-shorthand-properties@^7.27.1":
+"@babel/plugin-transform-shorthand-properties@^7.0.0-0", "@babel/plugin-transform-shorthand-properties@^7.27.1":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz#532abdacdec87bfee1e0ef8e2fcdee543fe32b90"
integrity sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==
@@ -1087,7 +1087,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.27.1"
-"@babel/plugin-transform-template-literals@^7.27.1":
+"@babel/plugin-transform-template-literals@^7.0.0-0", "@babel/plugin-transform-template-literals@^7.27.1":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz#1a0eb35d8bb3e6efc06c9fd40eb0bcef548328b8"
integrity sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==
@@ -1127,7 +1127,7 @@
"@babel/helper-create-regexp-features-plugin" "^7.27.1"
"@babel/helper-plugin-utils" "^7.27.1"
-"@babel/plugin-transform-unicode-regex@^7.27.1":
+"@babel/plugin-transform-unicode-regex@^7.0.0-0", "@babel/plugin-transform-unicode-regex@^7.27.1":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz#25948f5c395db15f609028e370667ed8bae9af97"
integrity sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==
@@ -1249,7 +1249,7 @@
"@babel/plugin-transform-react-jsx-development" "^7.27.1"
"@babel/plugin-transform-react-pure-annotations" "^7.27.1"
-"@babel/preset-typescript@^7.24.7":
+"@babel/preset-typescript@^7.16.7", "@babel/preset-typescript@^7.24.7":
version "7.28.5"
resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz#540359efa3028236958466342967522fd8f2a60c"
integrity sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==
@@ -1514,6 +1514,13 @@
resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-11.0.0.tgz#719cf05fcc1abb6533610a2e0f5dd1e61eac14fe"
integrity sha512-VoNqai1vR5anRF5Tuh/+SWDFk7xi7oMwHrHrbm1BprYXjB2RJsWLhUrStMssDxEl5lW/z3EUdg8RvH/IUBccSQ==
+"@egjs/hammerjs@^2.0.17":
+ version "2.0.17"
+ resolved "https://registry.yarnpkg.com/@egjs/hammerjs/-/hammerjs-2.0.17.tgz#5dc02af75a6a06e4c2db0202cae38c9263895124"
+ integrity sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==
+ dependencies:
+ "@types/hammerjs" "^2.0.36"
+
"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
@@ -2072,6 +2079,11 @@
dependencies:
"@types/node" "*"
+"@types/hammerjs@^2.0.36":
+ version "2.0.46"
+ resolved "https://registry.yarnpkg.com/@types/hammerjs/-/hammerjs-2.0.46.tgz#381daaca1360ff8a7c8dff63f32e69745b9fb1e1"
+ integrity sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==
+
"@types/http-cache-semantics@*":
version "4.0.1"
resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812"
@@ -2154,13 +2166,12 @@
"@types/scheduler" "*"
csstype "^3.0.2"
-"@types/react@^16.9.19":
- version "16.14.17"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-16.14.17.tgz#c57fcfb05efa6423f5b65fcd4a75f63f05b162bf"
- integrity sha512-pMLc/7+7SEdQa9A+hN9ujI8blkjFqYAZVqh3iNXqdZ0cQ8TIR502HMkNJniaOGv9SAgc47jxVKoiBJ7c0AakvQ==
+"@types/react@18.3.12":
+ version "18.3.12"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.12.tgz#99419f182ccd69151813b7ee24b792fe08774f60"
+ integrity sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==
dependencies:
"@types/prop-types" "*"
- "@types/scheduler" "*"
csstype "^3.0.2"
"@types/responselike@*", "@types/responselike@^1.0.0":
@@ -2228,6 +2239,13 @@
natural-compare "^1.4.0"
ts-api-utils "^1.3.0"
+"@typescript-eslint/experimental-utils@5.33.0":
+ version "5.33.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.33.0.tgz#94ca44da43731f2c62d91eb0c75917588bc483a2"
+ integrity sha512-NvRsNe+T90QrSVlgdV9/U8/chfqGmShvKUE7hWZTAUUCF6hZty/R+eMPVGldKcUDq7uRQaK6+V8gv5OwVDqC+g==
+ dependencies:
+ "@typescript-eslint/utils" "5.33.0"
+
"@typescript-eslint/parser@^5.57.1":
version "5.62.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7"
@@ -2249,6 +2267,14 @@
"@typescript-eslint/visitor-keys" "7.18.0"
debug "^4.3.4"
+"@typescript-eslint/scope-manager@5.33.0":
+ version "5.33.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.33.0.tgz#509d7fa540a2c58f66bdcfcf278a3fa79002e18d"
+ integrity sha512-/Jta8yMNpXYpRDl8EwF/M8It2A9sFJTubDo0ATZefGXmOqlaBffEw0ZbkbQ7TNDK6q55NPHFshGBPAZvZkE8Pw==
+ dependencies:
+ "@typescript-eslint/types" "5.33.0"
+ "@typescript-eslint/visitor-keys" "5.33.0"
+
"@typescript-eslint/scope-manager@5.62.0":
version "5.62.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c"
@@ -2285,6 +2311,11 @@
debug "^4.3.4"
ts-api-utils "^1.3.0"
+"@typescript-eslint/types@5.33.0":
+ version "5.33.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.33.0.tgz#d41c584831805554b063791338b0220b613a275b"
+ integrity sha512-nIMt96JngB4MYFYXpZ/3ZNU4GWPNdBbcB5w2rDOCpXOVUkhtNlG2mmm8uXhubhidRZdwMaMBap7Uk8SZMU/ppw==
+
"@typescript-eslint/types@5.62.0":
version "5.62.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f"
@@ -2295,6 +2326,19 @@
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9"
integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==
+"@typescript-eslint/typescript-estree@5.33.0":
+ version "5.33.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.0.tgz#02d9c9ade6f4897c09e3508c27de53ad6bfa54cf"
+ integrity sha512-tqq3MRLlggkJKJUrzM6wltk8NckKyyorCSGMq4eVkyL5sDYzJJcMgZATqmF8fLdsWrW7OjjIZ1m9v81vKcaqwQ==
+ dependencies:
+ "@typescript-eslint/types" "5.33.0"
+ "@typescript-eslint/visitor-keys" "5.33.0"
+ debug "^4.3.4"
+ globby "^11.1.0"
+ is-glob "^4.0.3"
+ semver "^7.3.7"
+ tsutils "^3.21.0"
+
"@typescript-eslint/typescript-estree@5.62.0":
version "5.62.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b"
@@ -2322,6 +2366,18 @@
semver "^7.6.0"
ts-api-utils "^1.3.0"
+"@typescript-eslint/utils@5.33.0":
+ version "5.33.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.33.0.tgz#46797461ce3146e21c095d79518cc0f8ec574038"
+ integrity sha512-JxOAnXt9oZjXLIiXb5ZIcZXiwVHCkqZgof0O8KPgz7C7y0HS42gi75PdPlqh1Tf109M0fyUw45Ao6JLo7S5AHw==
+ dependencies:
+ "@types/json-schema" "^7.0.9"
+ "@typescript-eslint/scope-manager" "5.33.0"
+ "@typescript-eslint/types" "5.33.0"
+ "@typescript-eslint/typescript-estree" "5.33.0"
+ eslint-scope "^5.1.1"
+ eslint-utils "^3.0.0"
+
"@typescript-eslint/utils@5.62.0", "@typescript-eslint/utils@^5.10.0":
version "5.62.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86"
@@ -2346,6 +2402,14 @@
"@typescript-eslint/types" "7.18.0"
"@typescript-eslint/typescript-estree" "7.18.0"
+"@typescript-eslint/visitor-keys@5.33.0":
+ version "5.33.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.0.tgz#fbcbb074e460c11046e067bc3384b5d66b555484"
+ integrity sha512-/XsqCzD4t+Y9p5wd9HZiptuGKBlaZO5showwqODii5C0nZawxWLF+Q6k5wYHBrQv96h6GYKyqqMHCSTqta8Kiw==
+ dependencies:
+ "@typescript-eslint/types" "5.33.0"
+ eslint-visitor-keys "^3.3.0"
+
"@typescript-eslint/visitor-keys@5.62.0":
version "5.62.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e"
@@ -3978,6 +4042,14 @@ eslint-plugin-react@^7.30.1:
string.prototype.matchall "^4.0.11"
string.prototype.repeat "^1.0.0"
+eslint-plugin-reanimated@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-reanimated/-/eslint-plugin-reanimated-2.0.1.tgz#42a5244fdbf5bf0faadca357b6a348ce31c1f010"
+ integrity sha512-lxoQdNRuMBeA5s83GzcjGzKEQTKkByfXaUAVNxYY8z/te3x3IdfOQrQKruNC68IcvSc1rL08+op0RjcSM25wHg==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "5.33.0"
+ eslint-plugin-ft-flow "^2.0.1"
+
eslint-plugin-simple-import-sort@^12.1.1:
version "12.1.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.1.1.tgz#e64bfdaf91c5b98a298619aa634a9f7aa43b709e"
@@ -3999,7 +4071,14 @@ eslint-scope@^7.2.2:
esrecurse "^4.3.0"
estraverse "^5.2.0"
-eslint-visitor-keys@^2.1.0:
+eslint-utils@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"
+ integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
+ dependencies:
+ eslint-visitor-keys "^2.0.0"
+
+eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
@@ -4816,6 +4895,13 @@ hermes-parser@0.29.1:
dependencies:
hermes-estree "0.29.1"
+hoist-non-react-statics@^3.3.0:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
+ integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
+ dependencies:
+ react-is "^16.7.0"
+
hosted-git-info@^2.1.4:
version "2.8.9"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
@@ -7114,7 +7200,7 @@ react-devtools-core@^6.1.1:
shell-quote "^1.6.1"
ws "^7"
-react-is@^16.13.1, react-is@^16.8.1:
+react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.1:
version "16.13.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
@@ -7152,6 +7238,33 @@ react-native-builder-bob@^0.30.0:
which "^2.0.2"
yargs "^17.5.1"
+react-native-gesture-handler@~2.20.2:
+ version "2.20.2"
+ resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-2.20.2.tgz#73844c8e9c417459c2f2981bc4d8f66ba8a5ee66"
+ integrity sha512-HqzFpFczV4qCnwKlvSAvpzEXisL+Z9fsR08YV5LfJDkzuArMhBu2sOoSPUF/K62PCoAb+ObGlTC83TKHfUd0vg==
+ dependencies:
+ "@egjs/hammerjs" "^2.0.17"
+ hoist-non-react-statics "^3.3.0"
+ invariant "^2.2.4"
+ prop-types "^15.7.2"
+
+react-native-reanimated@~3.16.1:
+ version "3.16.7"
+ resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-3.16.7.tgz#6c7fa516f62c6743c24d955dada00e3c5323d50d"
+ integrity sha512-qoUUQOwE1pHlmQ9cXTJ2MX9FQ9eHllopCLiWOkDkp6CER95ZWeXhJCP4cSm6AD4jigL5jHcZf/SkWrg8ttZUsw==
+ dependencies:
+ "@babel/plugin-transform-arrow-functions" "^7.0.0-0"
+ "@babel/plugin-transform-class-properties" "^7.0.0-0"
+ "@babel/plugin-transform-classes" "^7.0.0-0"
+ "@babel/plugin-transform-nullish-coalescing-operator" "^7.0.0-0"
+ "@babel/plugin-transform-optional-chaining" "^7.0.0-0"
+ "@babel/plugin-transform-shorthand-properties" "^7.0.0-0"
+ "@babel/plugin-transform-template-literals" "^7.0.0-0"
+ "@babel/plugin-transform-unicode-regex" "^7.0.0-0"
+ "@babel/preset-typescript" "^7.16.7"
+ convert-source-map "^2.0.0"
+ invariant "^2.2.4"
+
react-native@0.79.7:
version "0.79.7"
resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.79.7.tgz#25846876d1f5962eea8190f6b50410816c93b0a4"
@@ -7199,13 +7312,12 @@ react-refresh@^0.14.0:
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9"
integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==
-react@17.0.2:
- version "17.0.2"
- resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037"
- integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==
+react@^18.3.1:
+ version "18.3.1"
+ resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891"
+ integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==
dependencies:
loose-envify "^1.1.0"
- object-assign "^4.1.1"
read-pkg-up@^3.0.0:
version "3.0.0"