From fa598a6a9bde374c9f55a0642edece168972dcad Mon Sep 17 00:00:00 2001 From: thomasvo Date: Tue, 23 Dec 2025 22:01:22 -0800 Subject: [PATCH 01/34] reanimated --- example/babel.config.js | 1 + example/package.json | 12 +- example/yarn.lock | 115 +- package.json | 23 +- src/ReactNativeZoomableView.tsx | 1099 ++++++++--------- src/animations/index.ts | 13 +- .../calcNewScaledOffsetForZoomCentering.ts | 2 + src/helper/coordinateConversion.ts | 6 + src/helper/index.ts | 43 +- src/typings/index.ts | 102 +- yarn.lock | 154 ++- 11 files changed, 810 insertions(+), 760 deletions(-) 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/package.json b/example/package.json index 6afdf85..c380e57 100644 --- a/example/package.json +++ b/example/package.json @@ -12,16 +12,18 @@ }, "dependencies": { "expo": "~52.0.0", - "expo-status-bar": "~1.6.0", + "expo-status-bar": "~2.0.1", "lodash": "^4.17.21", - "react": "18.2.0", - "react-dom": "18.2.0", + "react": "18.3.1", + "react-dom": "18.3.1", "react-native": "0.76.9", - "react-native-web": "~0.19.0" + "react-native-gesture-handler": "~2.20.2", + "react-native-reanimated": "~3.16.1", + "react-native-web": "~0.19.0", }, "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/yarn.lock b/example/yarn.lock index 1717d20..cdf2946 100644 --- a/example/yarn.lock +++ b/example/yarn.lock @@ -416,7 +416,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 +448,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 +456,7 @@ "@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-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== @@ -546,7 +546,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== @@ -578,7 +578,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== @@ -676,7 +676,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 +698,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 +716,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== @@ -738,7 +745,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.13.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== @@ -808,6 +815,13 @@ "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.28.5" +"@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" + "@expo/bunyan@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@expo/bunyan/-/bunyan-4.0.1.tgz#ab9e17e36c71c704a0ce72168378a487368da736" @@ -1542,6 +1556,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" @@ -2692,10 +2711,10 @@ expo-modules-core@2.2.3: 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-status-bar@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/expo-status-bar/-/expo-status-bar-2.0.1.tgz#fc07726346dc30fbb68aadb0d7890b34fba42eee" + integrity sha512-AkIPX7jWHRPp83UBZ1iXtVvyr0g+DgBVvIXTtlmPtmUsm8Vq9Bb5IGj86PW8osuFlgoTVAg7HI/+Ok7yEYwiRg== expo@~52.0.0: version "52.0.48" @@ -2748,9 +2767,9 @@ fast-loops@^1.1.3: 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== + version "1.20.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.20.1.tgz#ca750a10dc925bc8b18839fd203e3ef4b3ced675" + integrity sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw== dependencies: reusify "^1.0.4" @@ -3115,6 +3134,13 @@ hermes-parser@0.25.1: dependencies: hermes-estree "0.25.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@^7.0.0: version "7.0.2" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17" @@ -4504,7 +4530,7 @@ prompts@^2.3.2: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.8.1: +prop-types@^15.7.2, 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== @@ -4566,15 +4592,15 @@ react-devtools-core@^5.3.1: 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@18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" + integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== dependencies: loose-envify "^1.1.0" - scheduler "^0.23.0" + scheduler "^0.23.2" -react-is@^16.13.1: +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,6 +4610,33 @@ 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-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-web@~0.19.0: version "0.19.13" resolved "https://registry.yarnpkg.com/react-native-web/-/react-native-web-0.19.13.tgz#2d84849bf0251ec0e3a8072fda7f9a7c29375331" @@ -4647,10 +4700,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== +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" @@ -4826,7 +4879,7 @@ scheduler@0.24.0-canary-efb381bbf-20230505: dependencies: loose-envify "^1.1.0" -scheduler@^0.23.0: +scheduler@^0.23.2: version "0.23.2" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== @@ -5299,10 +5352,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" diff --git a/package.json b/package.json index 7b027da..2335077 100644 --- a/package.json +++ b/package.json @@ -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,27 @@ "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", + "react-native-worklets": "~0.7.1" }, "jest": { "preset": "react-native", @@ -141,7 +147,8 @@ "prettier", "react", "react-native", - "simple-import-sort" + "simple-import-sort", + "reanimated" ], "rules": { "prettier/prettier": [ @@ -156,7 +163,11 @@ ], "react-native/no-color-literals": "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", + "no-use-before-define": "warn" }, "overrides": [ { diff --git a/src/ReactNativeZoomableView.tsx b/src/ReactNativeZoomableView.tsx index 6fd7cd2..42cf6e3 100644 --- a/src/ReactNativeZoomableView.tsx +++ b/src/ReactNativeZoomableView.tsx @@ -8,18 +8,24 @@ import React, { useRef, useState, } from 'react'; +import { StyleSheet, 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, + runOnJS, + useAnimatedReaction, + useAnimatedRef, + useAnimatedStyle, + useSharedValue, + withTiming, +} from 'react-native-reanimated'; + +import { zoomToAnimation } from './animations'; import { AnimatedTouchFeedback } from './components'; import { StaticPin } from './components/StaticPin'; import { DebugTouchPoint } from './debugHelper'; @@ -60,9 +66,10 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< const [debugPoints, setDebugPoints] = useState([]); const [stateTouches, setStateTouches] = useState([]); - const zoomSubjectWrapperRef = useRef(null); - const gestureHandlers = useRef(); - const doubleTapFirstTapReleaseTimestamp = useRef(); + const zoomSubjectWrapperRef = useAnimatedRef(); + const doubleTapFirstTapReleaseTimestamp = useSharedValue( + undefined + ); props = defaults({}, props, { zoomEnabled: true, @@ -89,86 +96,29 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< disablePanOnInitialZoom: false, }); - 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 gestureStarted = useRef(false); + const zoom = useSharedValue(1); + 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 onTransformInvocationInitialized = useSharedValue(false); const singleTapTimeoutId = useRef(); - const touches = useRef([]); - const doubleTapFirstTap = useRef(); + const touches = useSharedValue([]); + const doubleTapFirstTap = useSharedValue(undefined); const measureZoomSubjectInterval = useRef(); + const gestureType = useSharedValue<'shift' | 'pinch' | undefined>(undefined); 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), - }); - - 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; @@ -176,21 +126,18 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< initialZoom.current = props.initialZoom; useLayoutEffect(() => { if (!zoomEnabled && initialZoom.current) { - zoomLevel.current = initialZoom.current; - zoomAnim.current.setValue(zoomLevel.current); + zoom.value = initialZoom.current; } }, [zoomEnabled]); useLayoutEffect(() => { if ( - !onTransformInvocationInitialized.current && + !onTransformInvocationInitialized.value && _invokeOnTransform().successful ) { - panAnim.current.addListener(() => _invokeOnTransform()); - zoomAnim.current.addListener(() => _invokeOnTransform()); - onTransformInvocationInitialized.current = true; + onTransformInvocationInitialized.value = true; } - }, []); + }, [originalHeight, originalWidth]); const onLayout = useRef(props.onLayout); onLayout.current = props.onLayout; @@ -208,7 +155,7 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< }; onLayout.current?.({ nativeEvent: { layout } }); - if (onTransformInvocationInitialized.current) _invokeOnTransform(); + if (onTransformInvocationInitialized.value) _invokeOnTransform(); }, [ originalHeight, originalWidth, @@ -220,7 +167,7 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< // Handle staticPinPosition changed useLayoutEffect(() => { - if (onTransformInvocationInitialized.current) _invokeOnTransform(); + if (onTransformInvocationInitialized.value) _invokeOnTransform(); }, [props.staticPinPosition?.x, props.staticPinPosition?.y]); useEffect(() => { @@ -249,47 +196,78 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< [] ); + /** + * Returns additional information about components current state for external event hooks + * + * @returns {{}} + * @private + */ + const _getZoomableViewEventObject = ( + overwriteObj: Partial = {} + ): ZoomableViewEvent => { + 'worklet'; + + return Object.assign( + { + zoomLevel: zoom.value, + offsetX: offsetX.value, + offsetY: offsetY.value, + originalHeight, + originalWidth, + originalPageX, + originalPageY, + }, + overwriteObj + ); + }; + + const _staticPinPosition = () => { + 'worklet'; + + if (!props.staticPinPosition) return; + if (!props.contentWidth || !props.contentHeight) return; + + return viewportPositionToImagePosition({ + viewportPosition: { + x: props.staticPinPosition.x, + y: props.staticPinPosition.y, + }, + imageSize: { + height: props.contentHeight, + width: props.contentWidth, + }, + zoomableEvent: _getZoomableViewEventObject({ + offsetX: offsetX.value, + offsetY: offsetY.value, + zoomLevel: zoom.value, + }), + }); + }; + /** * 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); + props.onTransformWorklet?.(zoomableViewEvent); if (position) { - props.onStaticPinPositionMove?.(position); - debouncedOnStaticPinPositionChange(position); + if (props.onStaticPinPositionMove) + runOnJS(props.onStaticPinPositionMove)(position); + + runOnJS(debouncedOnStaticPinPositionChange)(position); } return { successful: true }; - }); - - /** - * Returns additional information about components current state for external event hooks - * - * @returns {{}} - * @private - */ - const _getZoomableViewEventObject = useLatestCallback( - (overwriteObj: Partial = {}): ZoomableViewEvent => { - return { - zoomLevel: zoomLevel.current, - offsetX: offsetX.current, - offsetY: offsetY.current, - originalHeight, - originalWidth, - originalPageX, - originalPageY, - ...overwriteObj, - }; - } - ); + }; /** * Get the original box dimensions and save them for later use. @@ -328,58 +306,34 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< }); }); - /** - * 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(); + const scheduleLongPressTimeout = useLatestCallback((e: GestureTouchEvent) => { + if (props.onLongPress && props.longPressDuration) { longPressTimeout.current = setTimeout(() => { - props.onLongPress?.(e, gestureState, _getZoomableViewEventObject()); + props.onLongPress?.(e, _getZoomableViewEventObject()); longPressTimeout.current = undefined; }, props.longPressDuration); } + }); + const clearLongPressTimeout = useLatestCallback(() => { + if (longPressTimeout.current) { + clearTimeout(longPressTimeout.current); + longPressTimeout.current = undefined; + } + }); - props.onPanResponderGrant?.(e, gestureState, _getZoomableViewEventObject()); + const _handlePanResponderGrant = (e: GestureTouchEvent) => { + 'worklet'; - panAnim.current.stopAnimation(); - zoomAnim.current.stopAnimation(); - gestureStarted.current = true; - }); + runOnJS(scheduleLongPressTimeout)(e); + + if (props.onPanResponderGrant) + runOnJS(props.onPanResponderGrant)(e, _getZoomableViewEventObject()); + + cancelAnimation(zoom); + cancelAnimation(offsetX); + cancelAnimation(offsetY); + gestureStarted.value = true; + }; /** * Handles the end of touch events @@ -389,37 +343,37 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< * * @private */ - const _handlePanResponderEnd: NonNullable< - PanResponderCallbacks['onPanResponderEnd'] - > = useLatestCallback((e, gestureState) => { - if (!gestureType.current) { + const _handlePanResponderEnd = (e: GestureTouchEvent) => { + 'worklet'; + + if (!gestureType.value) { _resolveAndHandleTap(e); } setDebugPoints([]); - lastGestureCenterPosition.current = null; + lastGestureCenterPosition.value = null; - if (longPressTimeout.current) { - clearTimeout(longPressTimeout.current); - longPressTimeout.current = undefined; - } + runOnJS(clearLongPressTimeout)(); - props.onPanResponderEnd?.(e, gestureState, _getZoomableViewEventObject()); + if (props.onPanResponderEnd) + runOnJS(props.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') { + if (props.onZoomEnd) + runOnJS(props.onZoomEnd)(e, _getZoomableViewEventObject()); + } else if (gestureType.value === 'shift') { + if (props.onShiftingEnd) + runOnJS(props.onShiftingEnd)(e, _getZoomableViewEventObject()); } if (props.staticPinPosition) { - _updateStaticPin(); + runOnJS(_updateStaticPin)(); } - gestureType.current = undefined; - gestureStarted.current = false; - }); + gestureType.value = undefined; + gestureStarted.value = false; + }; /** * Handles the actual movement of our pan responder @@ -429,198 +383,168 @@ 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) => { + 'worklet'; + + // Only supports 2 touches and below, + // any invalid number will cause the gesture to end. + if (e.numberOfTouches <= 2) { + if (!gestureStarted.value) { + _handlePanResponderGrant(e); } - - // 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; + } else { + if (gestureStarted.value) { + _handlePanResponderEnd(e); } + return true; + } + const newGestureCenterPosition = calcGestureCenterPoint(e); + let dx = 0; + let dy = 0; - if (gestureState.numberActiveTouches === 2) { - if (longPressTimeout.current) { - clearTimeout(longPressTimeout.current); - longPressTimeout.current = undefined; - } + if (newGestureCenterPosition && lastGestureCenterPosition.value) { + dx = newGestureCenterPosition.x - lastGestureCenterPosition.value.x; + dy = newGestureCenterPosition.y - lastGestureCenterPosition.value.y; + } - // 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 - ); - } + lastGestureCenterPosition.value = newGestureCenterPosition; - const { dx, dy } = gestureState; - const isShiftGesture = Math.abs(dx) > 2 || Math.abs(dy) > 2; - if (isShiftGesture) { - gestureType.current = 'shift'; - _handleShifting(gestureState); - } + if (e.numberOfTouches === 2) { + runOnJS(clearLongPressTimeout); + + // change some measurement states when switching gesture to ensure a smooth transition + if (gestureType.value !== 'pinch') { + lastGestureTouchDistance.value = calcGestureTouchDistance(e); + } + gestureType.value = 'pinch'; + _handlePinching(e); + } else if (e.numberOfTouches === 1) { + if (longPressTimeout.current && (Math.abs(dx) > 5 || Math.abs(dy) > 5)) { + runOnJS(clearLongPressTimeout)(); + } + + const isShiftGesture = Math.abs(dx) > 2 || Math.abs(dy) > 2; + if (isShiftGesture) { + gestureType.value = 'shift'; + _handleShifting(e); } } - ); + }; /** * Handles the pinch movement and zooming - * - * @param e - * @param gestureState - * - * @private */ - const _handlePinching = useLatestCallback( - (e: GestureResponderEvent, gestureState: PanResponderGestureState) => { - if (!props.zoomEnabled) return; - - const { - maxZoom, - minZoom, - pinchToZoomInSensitivity, - pinchToZoomOutSensitivity, - } = props; - - const distance = calcGestureTouchDistance(e, gestureState); - - if ( - props.onZoomBefore && - props.onZoomBefore(e, gestureState, _getZoomableViewEventObject()) - ) { - return; - } - - if (!distance) return; - if (!lastGestureTouchDistance.current) return; - - // define the new zoom level and take zoom level sensitivity into consideration - const zoomGrowthFromLastGestureState = - distance / lastGestureTouchDistance.current; - lastGestureTouchDistance.current = distance; - - const pinchToZoomSensitivity = - zoomGrowthFromLastGestureState < 1 - ? pinchToZoomOutSensitivity - : pinchToZoomInSensitivity; - - if (pinchToZoomSensitivity == null) return; - const deltaGrowth = zoomGrowthFromLastGestureState - 1; - // 0 - no resistance - // 10 - 90% resistance - const deltaGrowthAdjustedBySensitivity = - deltaGrowth * (1 - (pinchToZoomSensitivity * 9) / 100); - - let newZoomLevel = - zoomLevel.current * (1 + deltaGrowthAdjustedBySensitivity); + const _handlePinching = (e: GestureTouchEvent) => { + 'worklet'; + + if (!props.zoomEnabled) return; + + const { + maxZoom, + minZoom, + pinchToZoomInSensitivity, + pinchToZoomOutSensitivity, + } = props; + + const distance = calcGestureTouchDistance(e); + + // TODO this gets called way too often, we need to find a better way + // if ( + // props.onZoomBefore && + // props.onZoomBefore(e, _getZoomableViewEventObject()) + // ) { + // return; + // } + + if (!distance) return; + if (!lastGestureTouchDistance.value) return; + + // define the new zoom level and take zoom level sensitivity into consideration + const zoomGrowthFromLastGestureState = + distance / lastGestureTouchDistance.value; + lastGestureTouchDistance.value = distance; + + const pinchToZoomSensitivity = + zoomGrowthFromLastGestureState < 1 + ? pinchToZoomOutSensitivity + : pinchToZoomInSensitivity; + + if (pinchToZoomSensitivity == null) return; + const deltaGrowth = zoomGrowthFromLastGestureState - 1; + // 0 - no resistance + // 10 - 90% resistance + const deltaGrowthAdjustedBySensitivity = + deltaGrowth * (1 - (pinchToZoomSensitivity * 9) / 100); + + let newZoomLevel = zoom.value * (1 + deltaGrowthAdjustedBySensitivity); + + // make sure max and min zoom levels are respected + if (maxZoom != null && newZoomLevel > maxZoom) { + newZoomLevel = maxZoom; + } - // make sure max and min zoom levels are respected - if (maxZoom != null && newZoomLevel > maxZoom) { - newZoomLevel = maxZoom; - } + if (minZoom != null && newZoomLevel < minZoom) { + newZoomLevel = minZoom; + } - 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 - originalPageX, + y: gestureCenterPoint.y - originalPageY, + }; - let zoomCenter = { - x: gestureCenterPoint.x - originalPageX, - y: gestureCenterPoint.y - originalPageY, + 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, }; + } - 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 + props.debug && _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 || !originalWidth) 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; - } + let newOffsetY = calcNewScaledOffsetForZoomCentering( + oldOffsetY, + originalHeight, + oldScale, + newScale, + zoomCenter.y + ); + let newOffsetX = calcNewScaledOffsetForZoomCentering( + oldOffsetX, + originalWidth, + oldScale, + newScale, + zoomCenter.x + ); - offsetX.current = newOffsetX; - offsetY.current = newOffsetY; - zoomLevel.current = newScale; + const offsetShift = + _calcOffsetShiftSinceLastGestureState(gestureCenterPoint); + if (offsetShift) { + newOffsetX += offsetShift.x; + newOffsetY += offsetShift.y; + } - panAnim.current.setValue({ x: offsetX.current, y: offsetY.current }); - zoomAnim.current.setValue(zoomLevel.current); + offsetX.value = newOffsetX; + offsetY.value = newOffsetY; + zoom.value = newScale; - props.onZoomAfter?.(e, gestureState, _getZoomableViewEventObject()); - } - ); + // TODO this gets called way too often, we need to find a better way + // if (props.onZoomAfter) + // runOnJS(props.onZoomAfter)(e, _getZoomableViewEventObject()); + }; /** * Used to debug pinch events @@ -629,21 +553,15 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< * @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: e.allTouches[0].absoluteX - originalPageX, + y: e.allTouches[0].absoluteY - originalPageY, }, { - x: touches[1].pageX - originalPageX, - y: touches[1].pageY - originalPageY, + x: e.allTouches[1].absoluteX - originalPageX, + y: e.allTouches[1].absoluteY - originalPageY, }, zoomCenter, ...points, @@ -658,30 +576,30 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< * * @private */ - const _calcOffsetShiftSinceLastGestureState = useLatestCallback( - (gestureCenterPoint: Vec2D) => { - const { movementSensibility } = props; - - let shift = null; + const _calcOffsetShiftSinceLastGestureState = (gestureCenterPoint: Vec2D) => { + 'worklet'; - if (lastGestureCenterPosition.current && movementSensibility) { - const dx = gestureCenterPoint.x - lastGestureCenterPosition.current.x; - const dy = gestureCenterPoint.y - lastGestureCenterPosition.current.y; + const { movementSensibility } = props; - const shiftX = dx / zoomLevel.current / movementSensibility; - const shiftY = dy / zoomLevel.current / movementSensibility; + let shift = null; - shift = { - x: shiftX, - y: shiftY, - }; - } + if (lastGestureCenterPosition.value && movementSensibility) { + const dx = gestureCenterPoint.x - lastGestureCenterPosition.value.x; + const dy = gestureCenterPoint.y - lastGestureCenterPosition.value.y; - lastGestureCenterPosition.current = gestureCenterPoint; + const shiftX = dx / zoom.value / movementSensibility; + const shiftY = dy / zoom.value / movementSensibility; - return shift; + shift = { + x: shiftX, + y: shiftY, + }; } - ); + + lastGestureCenterPosition.value = gestureCenterPoint; + + return shift; + }; /** * Handles movement by tap and move @@ -690,34 +608,32 @@ 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 ( + !props.panEnabled || + (props.disablePanOnInitialZoom && zoom.value === props.initialZoom) + ) { + return; + } + const shift = _calcOffsetShiftSinceLastGestureState({ + x: e.allTouches[0].absoluteX, + y: e.allTouches[0].absoluteY, + }); + 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 (props.debug && originalPageX && originalPageY) { + const x = e.allTouches[0].absoluteX - originalPageX; + const y = e.allTouches[0].absoluteY - originalPageY; + setDebugPoints([{ x, y }]); } - ); + + _setNewOffsetPosition(newOffsetX, newOffsetY); + }; /** * Set the state to offset moved @@ -726,23 +642,22 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< * @param {number} newOffsetY * @returns */ - const _setNewOffsetPosition = useLatestCallback( - (newOffsetX: number, newOffsetY: number) => { - const { onShiftingBefore, onShiftingAfter } = props; + const _setNewOffsetPosition = (newOffsetX: number, newOffsetY: number) => { + 'worklet'; - if (onShiftingBefore?.(null, null, _getZoomableViewEventObject())) { - return; - } + const { onShiftingBefore, onShiftingAfter } = props; - offsetX.current = newOffsetX; - offsetY.current = newOffsetY; + // TODO this gets called way too often, we need to find a better way + // if (onShiftingBefore?.(null, _getZoomableViewEventObject())) { + // return; + // } - panAnim.current.setValue({ x: offsetX.current, y: offsetY.current }); - zoomAnim.current.setValue(zoomLevel.current); + offsetX.value = newOffsetX; + offsetY.value = newOffsetY; - onShiftingAfter?.(null, null, _getZoomableViewEventObject()); - } - ); + // TODO this gets called way too often, we need to find a better way + // onShiftingAfter?.(null, _getZoomableViewEventObject()); + }; /** * Check whether the press event is double tap @@ -752,60 +667,62 @@ 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].absoluteX - originalPageX, + y: e.allTouches[0].absoluteY - originalPageY, }; - _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; + + let xAnimationFinished = false; + let yAnimationFinished = false; + + offsetX.value = withTiming(toX, { duration: 200 }, () => { + xAnimationFinished = true; + if (yAnimationFinished) runOnJS(_updateStaticPin)(); + }); + offsetY.value = withTiming(toY, { duration: 200 }, () => { + yAnimationFinished = true; + if (xAnimationFinished) runOnJS(_updateStaticPin)(); }); } props.onSingleTap?.(e, _getZoomableViewEventObject()); }, props.doubleTapDelay); } - }); + }; const publicMoveStaticPinTo = useLatestCallback( (position: Vec2D, duration?: number) => { @@ -819,45 +736,19 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< 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 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; } } ); - const _staticPinPosition = useLatestCallback(() => { - if (!props.staticPinPosition) return; - if (!props.contentWidth || !props.contentHeight) return; - - return viewportPositionToImagePosition({ - viewportPosition: { - x: props.staticPinPosition.x, - y: props.staticPinPosition.y, - }, - imageSize: { - height: props.contentHeight, - width: props.contentWidth, - }, - zoomableEvent: { - ..._getZoomableViewEventObject(), - offsetX: offsetX.current, - offsetY: offsetY.current, - zoomLevel: zoomLevel.current, - }, - }); - }); - const _updateStaticPin = useLatestCallback(() => { const position = _staticPinPosition(); if (!position) return; @@ -865,13 +756,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]); }); /** @@ -881,7 +772,7 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< * * @private */ - const _handleDoubleTap = useLatestCallback((e: GestureResponderEvent) => { + const _handleDoubleTap = useLatestCallback((e: GestureTouchEvent) => { const { onDoubleTapBefore, onDoubleTapAfter, doubleTapZoomToCenter } = props; @@ -892,8 +783,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].absoluteX - originalPageX, + y: e.allTouches[0].absoluteY - originalPageY, }; // if doubleTapZoomToCenter enabled -> always zoom to center instead @@ -921,13 +812,13 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< if (maxZoom == null) return; - if (zoomLevel.current.toFixed(2) === maxZoom.toFixed(2)) { + if (zoom.value.toFixed(2) === maxZoom.toFixed(2)) { return initialZoom; } if (zoomStep == null) return; - const nextZoomStep = zoomLevel.current * (1 + zoomStep); + const nextZoomStep = zoom.value * (1 + zoomStep); if (nextZoomStep > maxZoom) { return maxZoom; } @@ -950,49 +841,53 @@ 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; - }); - } + props.onZoomBefore?.(null, _getZoomableViewEventObject()); + + // == 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; + props.onZoomAfter?.(null, _getZoomableViewEventObject()); }); - // == Zoom Animation Ends == - props.onZoomAfter?.(null, null, _getZoomableViewEventObject()); return true; } ); + const prevZoom = useSharedValue(zoom.value); + const zoomToDestination = useSharedValue(undefined); + + // 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, + prevZoom.value, + newZoom, + zoomToDestination.value.x + ); + offsetY.value = calcNewScaledOffsetForZoomCentering( + offsetY.value, + originalHeight, + prevZoom.value, + newZoom, + zoomToDestination.value.y + ); + prevZoom.value = newZoom; + } + ); + /** * Zooms in or out by a specified change level * Use a positive number for `zoomLevelChange` to zoom in @@ -1007,7 +902,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); }); /** @@ -1023,8 +918,8 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< (newOffsetX: number, newOffsetY: number) => { if (!originalWidth || !originalHeight) return; - const offsetX = (newOffsetX - originalWidth / 2) / zoomLevel.current; - const offsetY = (newOffsetY - originalHeight / 2) / zoomLevel.current; + const offsetX = (newOffsetX - originalWidth / 2) / zoom.value; + const offsetY = (newOffsetY - originalHeight / 2) / zoom.value; _setNewOffsetPosition(-offsetX, -offsetY); } @@ -1043,11 +938,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); } @@ -1060,7 +953,7 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< moveBy: publicMoveBy, moveStaticPinTo: publicMoveStaticPinTo, get gestureStarted() { - return gestureStarted.current; + return gestureStarted.value; }, })); @@ -1075,65 +968,93 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< pinProps, } = props; + useAnimatedReaction( + () => [zoom.value, offsetX.value, offsetY.value], + () => { + if (onTransformInvocationInitialized.value) _invokeOnTransform(); + } + ); + + const gesture = Gesture.Manual() + .onTouchesDown((e) => { + console.log('start', e); + _handlePanResponderGrant(e); + }) + .onTouchesMove((e) => { + console.log('move', e); + _handlePanResponderMove(e); + }) + .onFinalize((e) => { + console.log('end', e); + _handlePanResponderEnd(e); + }); + return ( - - - {children} - - - {visualTouchFeedbackEnabled && - stateTouches.map( - (touch) => - doubleTapDelay && ( - { - _removeTouch(touch); - }} - /> - ) - )} - - {/* For Debugging Only */} - {debugPoints.map(({ x, y }, index) => { - return ; - })} - - {staticPinPosition && ( - - )} - + + + + { + 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 }, + ], + }; + }), + ]} + > + {children} + + + {visualTouchFeedbackEnabled && + stateTouches.map( + (touch) => + doubleTapDelay && ( + { + _removeTouch(touch); + }} + /> + ) + )} + + {/* For Debugging Only */} + {debugPoints.map(({ x, y }, index) => { + return ; + })} + + {/* TODO */} + {/*{staticPinPosition && false && (*/} + {/* */} + {/*)}*/} + + + ); }; 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/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..b4f9edd 100644 --- a/src/helper/coordinateConversion.ts +++ b/src/helper/coordinateConversion.ts @@ -25,6 +25,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 +65,8 @@ export function getImageOriginOnTransformSubject( resizedImageSize: Size2D, transformSubject: ZoomableViewEvent ) { + 'worklet'; + const { offsetX, offsetY, zoomLevel, originalWidth, originalHeight } = transformSubject; return { @@ -95,6 +99,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..e033f6e 100644 --- a/src/helper/index.ts +++ b/src/helper/index.ts @@ -1,4 +1,8 @@ -import { GestureResponderEvent, PanResponderGestureState } from 'react-native'; +import { + GestureTouchEvent, + GestureUpdateEvent, + PanGestureHandlerEventPayload, +} from 'react-native-gesture-handler'; import { Vec2D } from '../typings'; @@ -15,39 +19,36 @@ 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].absoluteX + touches[1].absoluteX) / 2, + y: (touches[0].absoluteY + touches[1].absoluteY) / 2, }; } - if (gestureState.numberActiveTouches === 1) { + if (e.numberOfTouches === 1) { return { - x: touches[0].pageX, - y: touches[0].pageY, + x: touches[0].absoluteX, + y: touches[0].absoluteY, }; } 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].pageX - touches[1].pageX); - const dy = Math.abs(touches[0].pageY - touches[1].pageY); + const dx = Math.abs(touches[0].absoluteX - touches[1].absoluteX); + const dy = Math.abs(touches[0].absoluteY - touches[1].absoluteY); return Math.sqrt(dx * dx + dy * dy); } diff --git a/src/typings/index.ts b/src/typings/index.ts index 9136a10..5630ae1 100644 --- a/src/typings/index.ts +++ b/src/typings/index.ts @@ -1,18 +1,10 @@ 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 { GestureTouchEvent } from 'react-native-gesture-handler'; export interface ZoomableViewEvent { zoomLevel: number; @@ -48,109 +40,91 @@ export interface ReactNativeZoomableViewProps { 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; + onTransformWorklet?: (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, + event: GestureTouchEvent | null, zoomableViewEventObject: ZoomableViewEvent ) => boolean; onShiftingAfter?: ( - event: GestureResponderEvent | null, - gestureState: PanResponderGestureState | null, + event: GestureTouchEvent | null, zoomableViewEventObject: ZoomableViewEvent ) => boolean; onShiftingEnd?: ( - event: GestureResponderEvent, - gestureState: PanResponderGestureState, + event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent ) => void; onZoomBefore?: ( - event: GestureResponderEvent | null, - gestureState: PanResponderGestureState | null, + event: GestureTouchEvent | null, zoomableViewEventObject: ZoomableViewEvent ) => boolean | undefined; onZoomAfter?: ( - event: GestureResponderEvent | null, - gestureState: PanResponderGestureState | null, + event: GestureTouchEvent | null, zoomableViewEventObject: ZoomableViewEvent ) => void; onZoomEnd?: ( - event: GestureResponderEvent, - gestureState: PanResponderGestureState, + event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent ) => void; onLongPress?: ( - event: GestureResponderEvent, - gestureState: PanResponderGestureState, + event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent ) => void; onStartShouldSetPanResponder?: ( - event: GestureResponderEvent, - gestureState: PanResponderGestureState, + event: GestureTouchEvent, 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, + event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent ) => boolean; onPanResponderTerminate?: ( - event: GestureResponderEvent, - gestureState: PanResponderGestureState, + event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent ) => void; onPanResponderTerminationRequest?: ( - event: GestureResponderEvent, - gestureState: PanResponderGestureState, + event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent ) => boolean; onShouldBlockNativeResponder?: ( - event: GestureResponderEvent, - gestureState: PanResponderGestureState, + event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent ) => boolean; onStartShouldSetPanResponderCapture?: ( - event: GestureResponderEvent, + event: GestureTouchEvent, gestureState: PanResponderGestureState ) => boolean; onMoveShouldSetPanResponderCapture?: ( - event: GestureResponderEvent, + event: GestureTouchEvent, gestureState: PanResponderGestureState ) => boolean; - onStaticPinPress?: (event: GestureResponderEvent) => void; - onStaticPinLongPress?: (event: GestureResponderEvent) => void; + onStaticPinPress?: (event: GestureTouchEvent) => void; + onStaticPinLongPress?: (event: GestureTouchEvent) => void; staticPinPosition?: Vec2D; staticPinIcon?: React.ReactElement; onStaticPinPositionChange?: (position: Vec2D) => void; @@ -172,33 +146,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/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" From d1c21ee0639c3dbb0916765a32025f727ea8928a Mon Sep 17 00:00:00 2001 From: thomasvo Date: Wed, 24 Dec 2025 10:52:59 -0800 Subject: [PATCH 02/34] set up physical device test --- example/metro.config.js | 60 +- example/package.json | 18 +- example/style.ts | 1 + example/tsconfig.json | 2 +- example/yarn.lock | 2624 ++++++++-------------------- package.json | 5 +- src/ReactNativeZoomableView.tsx | 27 +- src/components/StaticPin.tsx | 3 +- src/helper/coordinateConversion.ts | 2 +- src/hooks/useGesture.ts | 35 + tsconfig.json | 4 +- 11 files changed, 866 insertions(+), 1915 deletions(-) create mode 100644 src/hooks/useGesture.ts diff --git a/example/metro.config.js b/example/metro.config.js index 8a724df..57df371 100644 --- a/example/metro.config.js +++ b/example/metro.config.js @@ -1,52 +1,48 @@ -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 path = require("path"); +const escape = require("escape-string-regexp"); +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 pak = require("../package.json"); +const root = path.resolve(__dirname, ".."); +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))}\\/.*$`) - ) +config.resolver.nodeModulesPaths = [path.resolve(__dirname, "node_modules")]; + +// 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); + acc[name] = path.join(__dirname, "node_modules", name); return acc; }, {}), - // 👇 Alias the library itself to src - '@openspacelabs/react-native-zoomable-view': path.resolve(root, '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' + "react-native/Libraries/Image/AssetRegistry" ); module.exports = config; diff --git a/example/package.json b/example/package.json index c380e57..3d66dab 100644 --- a/example/package.json +++ b/example/package.json @@ -11,15 +11,17 @@ "web": "expo start --web" }, "dependencies": { - "expo": "~52.0.0", - "expo-status-bar": "~2.0.1", + "@expo/metro-runtime": "~6.1.2", + "expo": "~54.0.30", + "expo-status-bar": "~3.0.9", "lodash": "^4.17.21", - "react": "18.3.1", - "react-dom": "18.3.1", - "react-native": "0.76.9", - "react-native-gesture-handler": "~2.20.2", - "react-native-reanimated": "~3.16.1", - "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", 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 cdf2946..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" @@ -456,6 +431,14 @@ "@babel/helper-create-class-features-plugin" "^7.27.1" "@babel/helper-plugin-utils" "^7.27.1" +"@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" @@ -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== @@ -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== @@ -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== @@ -724,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" @@ -745,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.16.7", "@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== @@ -756,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" @@ -807,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== @@ -822,62 +785,49 @@ dependencies: "@types/hammerjs" "^2.0.36" -"@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== - dependencies: - uuid "^8.0.0" - -"@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" @@ -898,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" @@ -915,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" @@ -935,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== @@ -967,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== @@ -1018,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== @@ -1067,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== @@ -1079,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" @@ -1135,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" @@ -1157,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" @@ -1190,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== @@ -1301,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" @@ -1392,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" @@ -1580,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" @@ -1611,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" @@ -1632,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" @@ -1657,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" @@ -1687,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" @@ -1711,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" @@ -1746,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" @@ -1852,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-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.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-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" @@ -1899,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" @@ -1949,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" @@ -1999,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== @@ -2017,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" @@ -2053,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" @@ -2130,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" @@ -2172,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" @@ -2198,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" @@ -2236,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" @@ -2263,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" @@ -2320,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" @@ -2337,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== @@ -2357,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" @@ -2374,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" @@ -2388,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" @@ -2405,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" @@ -2425,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" @@ -2454,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" @@ -2483,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" @@ -2512,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" @@ -2527,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" @@ -2553,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" @@ -2605,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== @@ -2615,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== @@ -2625,154 +2276,106 @@ 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-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@~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-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@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/expo-status-bar/-/expo-status-bar-2.0.1.tgz#fc07726346dc30fbb68aadb0d7890b34fba42eee" - integrity sha512-AkIPX7jWHRPp83UBZ1iXtVvyr0g+DgBVvIXTtlmPtmUsm8Vq9Bb5IGj86PW8osuFlgoTVAg7HI/+Ok7yEYwiRg== +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: - "@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" - whatwg-url-without-unicode "8.0.0-3" + react-native-is-edge-to-edge "^1.2.1" -exponential-backoff@^3.1.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" "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: version "3.1.3" 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.20.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.20.1.tgz#ca750a10dc925bc8b18839fd203e3ef4b3ced675" - integrity sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw== - 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" @@ -2780,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== @@ -2805,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" @@ -2838,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" @@ -2875,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" @@ -2914,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" @@ -2982,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" @@ -3059,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== @@ -3091,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" @@ -3110,29 +2562,29 @@ 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" @@ -3159,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" @@ -3174,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== @@ -3186,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" @@ -3217,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" @@ -3245,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" @@ -3272,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" @@ -3343,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" @@ -3364,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== @@ -3477,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" @@ -3502,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" @@ -3559,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" @@ -3598,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" @@ -3715,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" @@ -3734,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" @@ -3754,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" @@ -3790,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" @@ -3859,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" @@ -3922,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" @@ -3957,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" @@ -3987,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== @@ -4005,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== @@ -4022,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== @@ -4138,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== @@ -4197,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== @@ -4247,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== @@ -4261,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" @@ -4297,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" @@ -4337,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" @@ -4389,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== @@ -4404,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" @@ -4432,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" @@ -4530,23 +3688,6 @@ prompts@^2.3.2: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.7.2, 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" @@ -4557,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" @@ -4584,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.3.1: - version "18.3.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" - integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== +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.2" + scheduler "^0.26.0" -react-is@^16.13.1, react-is@^16.7.0: +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== @@ -4610,20 +3745,46 @@ 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-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== +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" - 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== +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 "^7.0.1" + memoize-one "^6.0.0" + nullthrows "^1.1.1" + postcss-value-parser "^4.2.0" + styleq "^0.1.3" + +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" @@ -4635,60 +3796,42 @@ react-native-reanimated@~3.16.1: "@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-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== - dependencies: - "@babel/runtime" "^7.18.6" - "@react-native/normalize-colors" "^0.74.1" - fbjs "^3.0.4" - inline-style-prefixer "^6.0.1" - memoize-one "^6.0.0" - nullthrows "^1.1.1" - postcss-value-parser "^4.2.0" - styleq "^0.1.3" + semver "7.7.2" -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@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" @@ -4700,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.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" - -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" @@ -4763,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" @@ -4792,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" @@ -4836,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" @@ -4848,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" @@ -4872,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.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== -scheduler@^0.23.2: - 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" - -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" @@ -4933,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== @@ -4953,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" @@ -4974,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" @@ -4989,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" @@ -5028,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== @@ -5041,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== @@ -5051,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" @@ -5087,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" @@ -5110,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" @@ -5140,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" @@ -5172,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: @@ -5219,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" @@ -5300,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" @@ -5327,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" @@ -5395,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" @@ -5454,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" @@ -5488,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" @@ -5525,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" @@ -5544,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" @@ -5562,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" @@ -5626,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" @@ -5651,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/package.json b/package.json index 2335077..8a828e7 100644 --- a/package.json +++ b/package.json @@ -94,8 +94,7 @@ "react": ">=18.0.0", "react-native": ">=0.79.0", "react-native-gesture-handler": "^2.20.2", - "react-native-reanimated": "^3.16.1", - "react-native-worklets": "~0.7.1" + "react-native-reanimated": "^3.16.1" }, "jest": { "preset": "react-native", @@ -167,7 +166,7 @@ "reanimated/js-function-in-worklet": "error", "reanimated/unsupported-syntax": "error", "reanimated/no-multiple-animated-style-usages": "error", - "no-use-before-define": "warn" + "no-use-before-define": "error" }, "overrides": [ { diff --git a/src/ReactNativeZoomableView.tsx b/src/ReactNativeZoomableView.tsx index 42cf6e3..65f52db 100644 --- a/src/ReactNativeZoomableView.tsx +++ b/src/ReactNativeZoomableView.tsx @@ -35,6 +35,7 @@ import { calcNewScaledOffsetForZoomCentering, } from './helper'; import { viewportPositionToImagePosition } from './helper/coordinateConversion'; +import { useGesture } from './hooks/useGesture'; import { useLatestCallback } from './hooks/useLatestCallback'; import { ReactNativeZoomableViewProps, @@ -100,6 +101,7 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< const offsetY = useSharedValue(0); const zoom = useSharedValue(1); + const lastGestureCenterPosition = useSharedValue(null); const lastGestureTouchDistance = useSharedValue(150); const gestureStarted = useSharedValue(false); @@ -861,7 +863,7 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< } ); - const prevZoom = useSharedValue(zoom.value); + const prevZoom = useSharedValue(1); const zoomToDestination = useSharedValue(undefined); // Zoom Animation Support: @@ -972,22 +974,17 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< () => [zoom.value, offsetX.value, offsetY.value], () => { if (onTransformInvocationInitialized.value) _invokeOnTransform(); - } + }, + // prevents _invokeOnTransform from causing a re-render, + // which would call the evaluation again, causing an infinite loop + [] ); - const gesture = Gesture.Manual() - .onTouchesDown((e) => { - console.log('start', e); - _handlePanResponderGrant(e); - }) - .onTouchesMove((e) => { - console.log('move', e); - _handlePanResponderMove(e); - }) - .onFinalize((e) => { - console.log('end', e); - _handlePanResponderEnd(e); - }); + const gesture = useGesture({ + touchesDownWorklet: _handlePanResponderGrant, + touchesMoveWorklet: _handlePanResponderMove, + finalizeWorklet: _handlePanResponderEnd, + }); return ( diff --git a/src/components/StaticPin.tsx b/src/components/StaticPin.tsx index 113f5e6..80c2790 100644 --- a/src/components/StaticPin.tsx +++ b/src/components/StaticPin.tsx @@ -9,7 +9,8 @@ import { View, ViewProps, } from 'react-native'; -import { Size2D } from 'src/typings'; + +import { Size2D } from '../typings'; export const StaticPin = ({ staticPinPosition, diff --git a/src/helper/coordinateConversion.ts b/src/helper/coordinateConversion.ts index b4f9edd..b0ac683 100644 --- a/src/helper/coordinateConversion.ts +++ b/src/helper/coordinateConversion.ts @@ -1,4 +1,4 @@ -import { Size2D, Vec2D, ZoomableViewEvent } from 'src/typings'; +import { Size2D, Vec2D, ZoomableViewEvent } from '../typings'; export const defaultTransformSubjectData: ZoomableViewEvent = { offsetX: 0, diff --git a/src/hooks/useGesture.ts b/src/hooks/useGesture.ts new file mode 100644 index 0000000..30879d7 --- /dev/null +++ b/src/hooks/useGesture.ts @@ -0,0 +1,35 @@ +import { Gesture, GestureTouchEvent } from 'react-native-gesture-handler'; +import { useSharedValue } from 'react-native-reanimated'; + +export const useGesture = ({ + touchesDownWorklet, + touchesMoveWorklet, + finalizeWorklet, +}: { + touchesDownWorklet: (e: GestureTouchEvent) => void; + touchesMoveWorklet: (e: GestureTouchEvent) => void; + finalizeWorklet: (e: GestureTouchEvent) => void; +}) => { + const lastTouchEvent = useSharedValue( + undefined + ); + + const gesture = Gesture.Manual() + .onTouchesDown((e) => { + console.log('start', e); + touchesDownWorklet(e); + }) + .onTouchesMove((e) => { + console.log('move', e); + touchesMoveWorklet(e); + lastTouchEvent.value = e; + }) + .onFinalize((e) => { + console.log('end', e); + if (!lastTouchEvent.value) return; + finalizeWorklet(lastTouchEvent.value); + lastTouchEvent.value = undefined; + }); + + return gesture; +}; 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", From 7c761548a7a34b8d77827b564dc035ae988eb3a7 Mon Sep 17 00:00:00 2001 From: thomasvo Date: Wed, 24 Dec 2025 13:19:13 -0800 Subject: [PATCH 03/34] doc fix --- src/ReactNativeZoomableView.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ReactNativeZoomableView.tsx b/src/ReactNativeZoomableView.tsx index fc22a29..0b526fb 100644 --- a/src/ReactNativeZoomableView.tsx +++ b/src/ReactNativeZoomableView.tsx @@ -267,8 +267,9 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< () => { if (onTransformInvocationInitialized.value) _invokeOnTransform(); }, - // prevents _invokeOnTransform from causing a re-render, - // which would call the evaluation again, causing an infinite loop + // _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. [] ); From fac493f6eb2c9b28213a757e0f6a101a1a70cce1 Mon Sep 17 00:00:00 2001 From: thomasvo Date: Wed, 24 Dec 2025 14:30:40 -0800 Subject: [PATCH 04/34] fix crashes --- src/ReactNativeZoomableView.tsx | 55 +++++++++++++++------------------ 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/src/ReactNativeZoomableView.tsx b/src/ReactNativeZoomableView.tsx index 0b526fb..6758f53 100644 --- a/src/ReactNativeZoomableView.tsx +++ b/src/ReactNativeZoomableView.tsx @@ -16,6 +16,7 @@ import { } from 'react-native-gesture-handler'; import Animated, { cancelAnimation, + makeMutable, runOnJS, useAnimatedReaction, useAnimatedRef, @@ -688,17 +689,14 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< const toX = offsetX.value + tapX / zoom.value; const toY = offsetY.value + tapY / zoom.value; - let xAnimationFinished = false; - let yAnimationFinished = false; - - offsetX.value = withTiming(toX, { duration: 200 }, () => { - xAnimationFinished = true; - if (yAnimationFinished) runOnJS(_updateStaticPin)(); - }); - offsetY.value = withTiming(toY, { duration: 200 }, () => { - yAnimationFinished = true; - if (xAnimationFinished) runOnJS(_updateStaticPin)(); - }); + 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()); @@ -812,7 +810,7 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< 'worklet'; if (!gestureType.value) { - _resolveAndHandleTap(e); + runOnJS(_resolveAndHandleTap)(e); } runOnJS(setDebugPoints)([]); @@ -863,16 +861,6 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< } return true; } - const newGestureCenterPosition = calcGestureCenterPoint(e); - let dx = 0; - let dy = 0; - - if (newGestureCenterPosition && lastGestureCenterPosition.value) { - dx = newGestureCenterPosition.x - lastGestureCenterPosition.value.x; - dy = newGestureCenterPosition.y - lastGestureCenterPosition.value.y; - } - - lastGestureCenterPosition.value = newGestureCenterPosition; if (e.numberOfTouches === 2) { runOnJS(clearLongPressTimeout); @@ -884,15 +872,21 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< gestureType.value = 'pinch'; _handlePinching(e); } else if (e.numberOfTouches === 1) { - if (longPressTimeout.current && (Math.abs(dx) > 5 || Math.abs(dy) > 5)) { - runOnJS(clearLongPressTimeout)(); - } + //TODO + // if (longPressTimeout.current && (Math.abs(dx) > 5 || Math.abs(dy) > 5)) { + runOnJS(clearLongPressTimeout)(); + // } - const isShiftGesture = Math.abs(dx) > 2 || Math.abs(dy) > 2; - if (isShiftGesture) { - gestureType.value = 'shift'; - _handleShifting(e); + // 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.value = 'shift'; + _handleShifting(e); + // } } }; @@ -907,7 +901,8 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< }) .onTouchesUp((e) => { console.log('up', e); - _handlePanResponderEnd(e); + // only end if this is the last touch being lifted + if (e.numberOfTouches === 0) _handlePanResponderEnd(e); }) .onTouchesCancelled((e) => { console.log('cancel', e); From 8604c3c0b95767ec49866806bc901be78bc04c43 Mon Sep 17 00:00:00 2001 From: thomasvo Date: Wed, 24 Dec 2025 15:57:19 -0800 Subject: [PATCH 05/34] onTransformWorklet works --- example/App.tsx | 36 ++++++--- src/ReactNativeZoomableView.tsx | 137 ++++++++++++++++---------------- src/hooks/useDebugPoints.ts | 13 +-- src/hooks/useZoomSubject.ts | 25 +++--- src/typings/index.ts | 2 +- 5 files changed, 113 insertions(+), 100 deletions(-) diff --git a/example/App.tsx b/example/App.tsx index 8d249fd..86d548b 100644 --- a/example/App.tsx +++ b/example/App.tsx @@ -1,7 +1,12 @@ import { ReactNativeZoomableView } 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 { Button, Image, Modal, Text, View } from 'react-native'; +import Animated, { + runOnJS, + useAnimatedStyle, + useSharedValue, +} from 'react-native-reanimated'; import { applyContainResizeMode } from '../src/helper/coordinateConversion'; import { styles } from './style'; @@ -14,8 +19,7 @@ const stringifyPoint = (point?: { x: number; y: number }) => point ? `${Math.round(point.x)}, ${Math.round(point.y)}` : 'Off map'; export default function App() { - const zoomAnimatedValue = useRef(new Animated.Value(1)).current; - const scale = Animated.divide(1, zoomAnimatedValue); + const scale = useSharedValue(1); const [showMarkers, setShowMarkers] = useState(true); const [size, setSize] = useState<{ width: number; height: number }>({ width: 0, @@ -36,8 +40,14 @@ export default function App() { const staticPinPosition = { x: size.width / 2, y: size.height / 2 }; const { size: contentSize } = applyContainResizeMode(imageSize, size); + const markerScaleStyle = useAnimatedStyle(() => { + return { + transform: [{ scale: scale.value }], + }; + }); + return ( - + ReactNativeZoomableView { + 'worklet'; + runOnJS(debouncedUpdateMovePin)(position); + }} + onTransformWorklet={({ zoomLevel }) => { + 'worklet'; + scale.value = 1 / zoomLevel; + }} 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} > @@ -70,10 +87,7 @@ export default function App() { key={`${left}x${top}`} // These markers will move and zoom with the image, but will retain their size // because of the scale transformation. - style={[ - styles.marker, - { left, top, transform: [{ scale }] }, - ]} + style={[styles.marker, { left, top }, markerScaleStyle]} /> )) )} @@ -88,6 +102,6 @@ export default function App() { setShowMarkers((value) => !value); }} /> - + ); } diff --git a/src/ReactNativeZoomableView.tsx b/src/ReactNativeZoomableView.tsx index 6758f53..5effd60 100644 --- a/src/ReactNativeZoomableView.tsx +++ b/src/ReactNativeZoomableView.tsx @@ -19,7 +19,6 @@ import Animated, { makeMutable, runOnJS, useAnimatedReaction, - useAnimatedRef, useAnimatedStyle, useSharedValue, withTiming, @@ -103,7 +102,7 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< staticPinPosition: undefined, staticPinIcon: undefined, onStaticPinPositionChange: undefined, - onStaticPinPositionMove: undefined, + onStaticPinPositionMoveWorklet: undefined, disablePanOnInitialZoom: false, }); @@ -153,10 +152,10 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< zoomLevel: zoom.value, offsetX: offsetX.value, offsetY: offsetY.value, - originalHeight, - originalWidth, - originalPageX, - originalPageY, + originalHeight: originalHeight.value, + originalWidth: originalWidth.value, + originalPageX: originalPageX.value, + originalPageY: originalPageY.value, }, overwriteObj ); @@ -226,9 +225,7 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< props.onTransformWorklet?.(zoomableViewEvent); if (position) { - if (props.onStaticPinPositionMove) - runOnJS(props.onStaticPinPositionMove)(position); - + props.onStaticPinPositionMoveWorklet?.(position); runOnJS(debouncedOnStaticPinPositionChange)(position); } @@ -250,22 +247,17 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< } }, [zoomEnabled]); - useLayoutEffect( + useAnimatedReaction( + _getZoomableViewEventObject, () => { if ( !onTransformInvocationInitialized.value && _invokeOnTransform().successful ) { onTransformInvocationInitialized.value = true; + return; } - }, - // FIXME: deps has implicit coupling with internal _invokeOnTransform logic - [originalWidth, originalHeight] - ); - useAnimatedReaction( - () => [zoom.value, offsetX.value, offsetY.value], - () => { if (onTransformInvocationInitialized.value) _invokeOnTransform(); }, // _invokeOnTransform may cause a re-render, which would call the evaluation again, @@ -274,31 +266,31 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< [] ); - 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.value) _invokeOnTransform(); - }, [ - originalHeight, - originalWidth, - originalPageX, - originalPageY, - originalX, - originalY, - ]); + useAnimatedReaction( + () => [ + originalHeight.value, + originalWidth.value, + originalPageX.value, + originalPageY.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(() => { @@ -427,8 +419,8 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< if (!gestureCenterPoint) return; let zoomCenter = { - x: gestureCenterPoint.x - originalPageX, - y: gestureCenterPoint.y - originalPageY, + x: gestureCenterPoint.x - originalPageX.value, + y: gestureCenterPoint.y - originalPageY.value, }; if (props.staticPinPosition) { @@ -441,25 +433,25 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< } // Uncomment to debug - props.debug && setPinchDebugPoints(e, zoomCenter); + props.debug && runOnJS(setPinchDebugPoints)(e, zoomCenter); 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, + originalHeight.value, oldScale, newScale, zoomCenter.y ); let newOffsetX = calcNewScaledOffsetForZoomCentering( oldOffsetX, - originalWidth, + originalWidth.value, oldScale, newScale, zoomCenter.x @@ -530,10 +522,10 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< const newOffsetX = offsetX.value + shift.x; const newOffsetY = offsetY.value + shift.y; - if (props.debug && originalPageX && originalPageY) { - const x = e.allTouches[0].absoluteX - originalPageX; - const y = e.allTouches[0].absoluteY - originalPageY; - setDebugPoints([{ x, y }]); + if (props.debug && originalPageX.value && originalPageY.value) { + const x = e.allTouches[0].absoluteX - originalPageX.value; + const y = e.allTouches[0].absoluteY - originalPageY.value; + runOnJS(setDebugPoints)([{ x, y }]); } _setNewOffsetPosition(newOffsetX, newOffsetY); @@ -585,14 +577,14 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< if (!zoomToDestination.value) return; offsetX.value = calcNewScaledOffsetForZoomCentering( offsetX.value, - originalWidth, + originalWidth.value, prevZoom.value, newZoom, zoomToDestination.value.x ); offsetY.value = calcNewScaledOffsetForZoomCentering( offsetY.value, - originalHeight, + originalHeight.value, prevZoom.value, newZoom, zoomToDestination.value.y @@ -624,8 +616,8 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< // define new zoom position coordinates const zoomPositionCoordinates = { - x: e.allTouches[0].absoluteX - originalPageX, - y: e.allTouches[0].absoluteY - originalPageY, + x: e.allTouches[0].absoluteX - originalPageX.value, + y: e.allTouches[0].absoluteY - originalPageY.value, }; // if doubleTapZoomToCenter enabled -> always zoom to center instead @@ -672,8 +664,8 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< doubleTapFirstTapReleaseTimestamp.value = now; doubleTapFirstTap.value = { id: now.toString(), - x: e.allTouches[0].absoluteX - originalPageX, - y: e.allTouches[0].absoluteY - originalPageY, + x: e.allTouches[0].absoluteX - originalPageX.value, + y: e.allTouches[0].absoluteY - originalPageY.value, }; _addTouch(doubleTapFirstTap.value); @@ -709,12 +701,12 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< 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; const newOffsetX = contentWidth / 2 - position.x + pinX / zoom.value; const newOffsetY = contentHeight / 2 - position.y + pinY / zoom.value; @@ -757,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) / zoom.value; - const offsetY = (newOffsetY - originalHeight / 2) / zoom.value; + const offsetX = (newOffsetX - originalWidth.value / 2) / zoom.value; + const offsetY = (newOffsetY - originalHeight.value / 2) / zoom.value; _setNewOffsetPosition(-offsetX, -offsetY); } @@ -891,22 +883,27 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< }; const gesture = Gesture.Manual() - .onTouchesDown((e) => { - console.log('start', e); + .onTouchesDown((e, stateManager) => { + // console.log('start', e); + stateManager.activate(); + stateManager.begin(); _handlePanResponderGrant(e); }) .onTouchesMove((e) => { - console.log('move', e); + // console.log('move', e); _handlePanResponderMove(e); }) - .onTouchesUp((e) => { - console.log('up', e); + .onTouchesUp((e, stateManager) => { + // console.log('up', e); // only end if this is the last touch being lifted - if (e.numberOfTouches === 0) _handlePanResponderEnd(e); + if (e.numberOfTouches === 0) { + _handlePanResponderEnd(e); + stateManager.end(); + } }) - .onTouchesCancelled((e) => { - console.log('cancel', e); + .onTouchesCancelled((e, stateManager) => { _handlePanResponderEnd(e); + stateManager.end(); }); return ( diff --git a/src/hooks/useDebugPoints.ts b/src/hooks/useDebugPoints.ts index 4e83e10..8e26cf9 100644 --- a/src/hooks/useDebugPoints.ts +++ b/src/hooks/useDebugPoints.ts @@ -1,5 +1,6 @@ import { useState } from 'react'; import { GestureTouchEvent } from 'react-native-gesture-handler'; +import { SharedValue } from 'react-native-reanimated'; import { Vec2D } from '../typings'; import { useLatestCallback } from './useLatestCallback'; @@ -8,8 +9,8 @@ export const useDebugPoints = ({ originalPageX, originalPageY, }: { - originalPageX: number; - originalPageY: number; + originalPageX: SharedValue; + originalPageY: SharedValue; }) => { const [debugPoints, setDebugPoints] = useState([]); @@ -23,12 +24,12 @@ export const useDebugPoints = ({ (e: GestureTouchEvent, zoomCenter: Vec2D, ...points: Vec2D[]) => { setDebugPoints([ { - x: e.allTouches[0].absoluteX - originalPageX, - y: e.allTouches[0].absoluteY - originalPageY, + x: e.allTouches[0].absoluteX - originalPageX.value, + y: e.allTouches[0].absoluteY - originalPageY.value, }, { - x: e.allTouches[1].absoluteX - originalPageX, - y: e.allTouches[1].absoluteY - originalPageY, + x: e.allTouches[1].absoluteX - originalPageX.value, + y: e.allTouches[1].absoluteY - originalPageY.value, }, zoomCenter, ...points, diff --git a/src/hooks/useZoomSubject.ts b/src/hooks/useZoomSubject.ts index c1f6526..fe9b5cd 100644 --- a/src/hooks/useZoomSubject.ts +++ b/src/hooks/useZoomSubject.ts @@ -1,16 +1,17 @@ import { useEffect, useRef, useState } 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 originalPageX = useSharedValue(0); + const originalPageY = useSharedValue(0); + const originalX = useSharedValue(0); + const originalY = useSharedValue(0); const measureZoomSubjectInterval = useRef(); /** @@ -37,12 +38,12 @@ 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; + originalPageX.value = pageX; + originalPageY.value = pageY; }); }); }); diff --git a/src/typings/index.ts b/src/typings/index.ts index 5630ae1..23e671b 100644 --- a/src/typings/index.ts +++ b/src/typings/index.ts @@ -128,7 +128,7 @@ export interface ReactNativeZoomableViewProps { staticPinPosition?: Vec2D; staticPinIcon?: React.ReactElement; onStaticPinPositionChange?: (position: Vec2D) => void; - onStaticPinPositionMove?: (position: Vec2D) => void; + onStaticPinPositionMoveWorklet?: (position: Vec2D) => void; pinProps?: ViewProps; } From 6c2adfe0c1bfd6cc16dc36d5177aab3078680f35 Mon Sep 17 00:00:00 2001 From: thomasvo Date: Wed, 24 Dec 2025 16:36:12 -0800 Subject: [PATCH 06/34] fix pageSheet modal breaking coordinates by removing originalPageX/Y and switch from using touch.absoluteX/Y to touch.x/y --- example/App.tsx | 2 +- src/ReactNativeZoomableView.tsx | 33 ++++++++++++--------------------- src/helper/index.ts | 13 +++++-------- src/hooks/useDebugPoints.ts | 19 +++---------------- src/hooks/useZoomSubject.ts | 8 +------- src/typings/index.ts | 2 -- 6 files changed, 22 insertions(+), 55 deletions(-) diff --git a/example/App.tsx b/example/App.tsx index 86d548b..26ebb47 100644 --- a/example/App.tsx +++ b/example/App.tsx @@ -48,7 +48,7 @@ export default function App() { return ( - ReactNativeZoomableView + {/*ReactNativeZoomableView*/} { diff --git a/src/ReactNativeZoomableView.tsx b/src/ReactNativeZoomableView.tsx index 5effd60..fe6bb6b 100644 --- a/src/ReactNativeZoomableView.tsx +++ b/src/ReactNativeZoomableView.tsx @@ -63,8 +63,6 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< measure: measureZoomSubject, originalWidth, originalHeight, - originalPageX, - originalPageY, originalX, originalY, } = useZoomSubject(); @@ -72,10 +70,7 @@ 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 doubleTapFirstTapReleaseTimestamp = useSharedValue( undefined @@ -154,8 +149,6 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< offsetY: offsetY.value, originalHeight: originalHeight.value, originalWidth: originalWidth.value, - originalPageX: originalPageX.value, - originalPageY: originalPageY.value, }, overwriteObj ); @@ -273,8 +266,6 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< () => [ originalHeight.value, originalWidth.value, - originalPageX.value, - originalPageY.value, originalX.value, originalY.value, ], @@ -419,8 +410,8 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< if (!gestureCenterPoint) return; let zoomCenter = { - x: gestureCenterPoint.x - originalPageX.value, - y: gestureCenterPoint.y - originalPageY.value, + x: gestureCenterPoint.x, + y: gestureCenterPoint.y, }; if (props.staticPinPosition) { @@ -514,17 +505,17 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< return; } const shift = _calcOffsetShiftSinceLastGestureState({ - x: e.allTouches[0].absoluteX, - y: e.allTouches[0].absoluteY, + x: e.allTouches[0].x, + y: e.allTouches[0].y, }); if (!shift) return; const newOffsetX = offsetX.value + shift.x; const newOffsetY = offsetY.value + shift.y; - if (props.debug && originalPageX.value && originalPageY.value) { - const x = e.allTouches[0].absoluteX - originalPageX.value; - const y = e.allTouches[0].absoluteY - originalPageY.value; + if (props.debug) { + const x = e.allTouches[0].x; + const y = e.allTouches[0].y; runOnJS(setDebugPoints)([{ x, y }]); } @@ -616,8 +607,8 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< // define new zoom position coordinates const zoomPositionCoordinates = { - x: e.allTouches[0].absoluteX - originalPageX.value, - y: e.allTouches[0].absoluteY - originalPageY.value, + x: e.allTouches[0].x, + y: e.allTouches[0].y, }; // if doubleTapZoomToCenter enabled -> always zoom to center instead @@ -664,8 +655,8 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< doubleTapFirstTapReleaseTimestamp.value = now; doubleTapFirstTap.value = { id: now.toString(), - x: e.allTouches[0].absoluteX - originalPageX.value, - y: e.allTouches[0].absoluteY - originalPageY.value, + x: e.allTouches[0].x, + y: e.allTouches[0].y, }; _addTouch(doubleTapFirstTap.value); diff --git a/src/helper/index.ts b/src/helper/index.ts index e033f6e..5793e54 100644 --- a/src/helper/index.ts +++ b/src/helper/index.ts @@ -28,15 +28,12 @@ export function calcGestureCenterPoint(e: GestureTouchEvent): Vec2D | null { if (e.numberOfTouches === 2) { if (!touches[1]) return null; return { - x: (touches[0].absoluteX + touches[1].absoluteX) / 2, - y: (touches[0].absoluteY + touches[1].absoluteY) / 2, + x: (touches[0].x + touches[1].x) / 2, + y: (touches[0].y + touches[1].y) / 2, }; } if (e.numberOfTouches === 1) { - return { - x: touches[0].absoluteX, - y: touches[0].absoluteY, - }; + return { x: touches[0].x, y: touches[0].y }; } return null; @@ -48,7 +45,7 @@ export function calcGestureTouchDistance(e: GestureTouchEvent): number | null { const touches = e.allTouches; if (e.numberOfTouches !== 2 || !touches[0] || !touches[1]) return null; - const dx = Math.abs(touches[0].absoluteX - touches[1].absoluteX); - const dy = Math.abs(touches[0].absoluteY - touches[1].absoluteY); + 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); } diff --git a/src/hooks/useDebugPoints.ts b/src/hooks/useDebugPoints.ts index 8e26cf9..e106df5 100644 --- a/src/hooks/useDebugPoints.ts +++ b/src/hooks/useDebugPoints.ts @@ -1,17 +1,10 @@ import { useState } from 'react'; import { GestureTouchEvent } from 'react-native-gesture-handler'; -import { SharedValue } from 'react-native-reanimated'; import { Vec2D } from '../typings'; import { useLatestCallback } from './useLatestCallback'; -export const useDebugPoints = ({ - originalPageX, - originalPageY, -}: { - originalPageX: SharedValue; - originalPageY: SharedValue; -}) => { +export const useDebugPoints = () => { const [debugPoints, setDebugPoints] = useState([]); /** @@ -23,14 +16,8 @@ export const useDebugPoints = ({ const setPinchDebugPoints = useLatestCallback( (e: GestureTouchEvent, zoomCenter: Vec2D, ...points: Vec2D[]) => { setDebugPoints([ - { - x: e.allTouches[0].absoluteX - originalPageX.value, - y: e.allTouches[0].absoluteY - originalPageY.value, - }, - { - x: e.allTouches[1].absoluteX - originalPageX.value, - y: e.allTouches[1].absoluteY - originalPageY.value, - }, + { 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 fe9b5cd..f699308 100644 --- a/src/hooks/useZoomSubject.ts +++ b/src/hooks/useZoomSubject.ts @@ -1,4 +1,4 @@ -import { useEffect, useRef, useState } from 'react'; +import { useEffect, useRef } from 'react'; import { View } from 'react-native'; import { useSharedValue } from 'react-native-reanimated'; @@ -8,8 +8,6 @@ export const useZoomSubject = () => { const wrapperRef = useRef(null); const originalWidth = useSharedValue(0); const originalHeight = useSharedValue(0); - const originalPageX = useSharedValue(0); - const originalPageY = useSharedValue(0); const originalX = useSharedValue(0); const originalY = useSharedValue(0); const measureZoomSubjectInterval = useRef(); @@ -42,8 +40,6 @@ export const useZoomSubject = () => { originalY.value = y; originalWidth.value = width; originalHeight.value = height; - originalPageX.value = pageX; - originalPageY.value = pageY; }); }); }); @@ -71,8 +67,6 @@ export const useZoomSubject = () => { measure, originalWidth, originalHeight, - originalPageX, - originalPageY, originalX, originalY, }; diff --git a/src/typings/index.ts b/src/typings/index.ts index 23e671b..6510dad 100644 --- a/src/typings/index.ts +++ b/src/typings/index.ts @@ -12,8 +12,6 @@ export interface ZoomableViewEvent { offsetY: number; originalHeight: number; originalWidth: number; - originalPageX: number; - originalPageY: number; } export interface ReactNativeZoomableViewProps { From b7b10affd96d31a75d0a28868cf55c0fa1794103 Mon Sep 17 00:00:00 2001 From: thomasvo Date: Wed, 24 Dec 2025 16:47:58 -0800 Subject: [PATCH 07/34] fix missing gesture center logic --- src/ReactNativeZoomableView.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ReactNativeZoomableView.tsx b/src/ReactNativeZoomableView.tsx index fe6bb6b..3405496 100644 --- a/src/ReactNativeZoomableView.tsx +++ b/src/ReactNativeZoomableView.tsx @@ -850,6 +850,7 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< // 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'; From 4427fcb8b000eb47086f034880ba8233e7b503df Mon Sep 17 00:00:00 2001 From: thomasvo Date: Wed, 24 Dec 2025 17:03:19 -0800 Subject: [PATCH 08/34] fix dx, dy --- src/ReactNativeZoomableView.tsx | 50 ++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/src/ReactNativeZoomableView.tsx b/src/ReactNativeZoomableView.tsx index 3405496..6b18355 100644 --- a/src/ReactNativeZoomableView.tsx +++ b/src/ReactNativeZoomableView.tsx @@ -124,7 +124,9 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< /** * Last press time (used to evaluate whether user double tapped) */ - const longPressTimeout = useRef(); + const longPressTimeout = useSharedValue( + undefined + ); const onTransformInvocationInitialized = useSharedValue(false); const singleTapTimeoutId = useRef(); const touches = useSharedValue([]); @@ -290,16 +292,16 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< const scheduleLongPressTimeout = useLatestCallback((e: GestureTouchEvent) => { if (props.onLongPress && props.longPressDuration) { - longPressTimeout.current = setTimeout(() => { + longPressTimeout.value = setTimeout(() => { props.onLongPress?.(e, _getZoomableViewEventObject()); - longPressTimeout.current = undefined; + longPressTimeout.value = undefined; }, props.longPressDuration); } }); const clearLongPressTimeout = useLatestCallback(() => { - if (longPressTimeout.current) { - clearTimeout(longPressTimeout.current); - longPressTimeout.current = undefined; + if (longPressTimeout.value) { + clearTimeout(longPressTimeout.value); + longPressTimeout.value = undefined; } }); @@ -829,7 +831,10 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< * * @private */ - const _handlePanResponderMove = (e: GestureTouchEvent) => { + const _handlePanResponderMove = ( + e: GestureTouchEvent, + gestureState: { dx: number; dy: number } + ) => { 'worklet'; // Only supports 2 touches and below, @@ -856,37 +861,39 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< gestureType.value = 'pinch'; _handlePinching(e); } else if (e.numberOfTouches === 1) { - //TODO - // if (longPressTimeout.current && (Math.abs(dx) > 5 || Math.abs(dy) > 5)) { - runOnJS(clearLongPressTimeout)(); - // } + 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.value = 'shift'; - _handleShifting(e); - // } + const isShiftGesture = Math.abs(dx) > 2 || Math.abs(dy) > 2; + if (isShiftGesture) { + gestureType.value = 'shift'; + _handleShifting(e); + } } }; + const firstTouch = useSharedValue(undefined); const gesture = Gesture.Manual() .onTouchesDown((e, stateManager) => { - // console.log('start', e); stateManager.activate(); stateManager.begin(); + firstTouch.value = { x: e.allTouches[0].x, y: e.allTouches[0].y }; _handlePanResponderGrant(e); }) .onTouchesMove((e) => { - // console.log('move', e); - _handlePanResponderMove(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) => { - // console.log('up', e); // only end if this is the last touch being lifted if (e.numberOfTouches === 0) { _handlePanResponderEnd(e); @@ -896,6 +903,9 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< .onTouchesCancelled((e, stateManager) => { _handlePanResponderEnd(e); stateManager.end(); + }) + .onFinalize(() => { + firstTouch.value = undefined; }); return ( From ebcb7b87b138dfaed1074f834548520a170f2f11 Mon Sep 17 00:00:00 2001 From: thomasvo Date: Wed, 24 Dec 2025 18:04:02 -0800 Subject: [PATCH 09/34] fix accessing props from worklets --- src/ReactNativeZoomableView.tsx | 153 ++++++++++++++++---------------- src/typings/index.ts | 17 ---- 2 files changed, 78 insertions(+), 92 deletions(-) diff --git a/src/ReactNativeZoomableView.tsx b/src/ReactNativeZoomableView.tsx index 6b18355..7e80fb8 100644 --- a/src/ReactNativeZoomableView.tsx +++ b/src/ReactNativeZoomableView.tsx @@ -20,6 +20,7 @@ import Animated, { runOnJS, useAnimatedReaction, useAnimatedStyle, + useDerivedValue, useSharedValue, withTiming, } from 'react-native-reanimated'; @@ -102,11 +103,25 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< }); const { + debug, staticPinIcon, children, visualTouchFeedbackEnabled, doubleTapDelay, - staticPinPosition, + staticPinPosition: propStaticPinPosition, + contentWidth: propContentWidth, + contentHeight: propContentHeight, + onTransformWorklet, + onStaticPinPositionMoveWorklet, + zoomEnabled: propZoomEnabled, + maxZoom: propMaxZoom, + minZoom: propMinZoom, + pinchToZoomInSensitivity: propPinchToZoomInSensitivity, + pinchToZoomOutSensitivity: propPinchToZoomOutSensitivity, + movementSensibility: propMovementSensibility, + panEnabled: propPanEnabled, + disablePanOnInitialZoom: propDisablePanOnInitialZoom, + initialZoom: propsInitialZoom, onStaticPinLongPress, onStaticPinPress, pinProps, @@ -133,6 +148,35 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< 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 movementSensibility = useDerivedValue(() => propMovementSensibility); + const onPanResponderGrant = useLatestCallback( + props.onPanResponderGrant || (() => undefined) + ); + const onPanResponderEnd = useLatestCallback( + props.onPanResponderEnd || (() => undefined) + ); + const onZoomEnd = useLatestCallback(props.onZoomEnd || (() => undefined)); + const onShiftingEnd = useLatestCallback( + props.onShiftingEnd || (() => undefined) + ); + /** * Returns additional information about components current state for external event hooks * @@ -159,17 +203,17 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< const _staticPinPosition = () => { 'worklet'; - if (!props.staticPinPosition) return; - if (!props.contentWidth || !props.contentHeight) return; + 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.value, @@ -217,10 +261,10 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< if (!zoomableViewEvent.originalWidth || !zoomableViewEvent.originalHeight) return { successful: false }; - props.onTransformWorklet?.(zoomableViewEvent); + onTransformWorklet?.(zoomableViewEvent); if (position) { - props.onStaticPinPositionMoveWorklet?.(position); + onStaticPinPositionMoveWorklet?.(position); runOnJS(debouncedOnStaticPinPositionChange)(position); } @@ -233,14 +277,11 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< 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) { - zoom.value = initialZoom.current; + if (!propZoomEnabled && initialZoom.value) { + zoom.value = initialZoom.value; } - }, [zoomEnabled]); + }, [propZoomEnabled]); useAnimatedReaction( _getZoomableViewEventObject, @@ -310,8 +351,7 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< runOnJS(scheduleLongPressTimeout)(e); - if (props.onPanResponderGrant) - runOnJS(props.onPanResponderGrant)(e, _getZoomableViewEventObject()); + runOnJS(onPanResponderGrant)(e, _getZoomableViewEventObject()); cancelAnimation(zoom); cancelAnimation(offsetX); @@ -329,16 +369,14 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< const _calcOffsetShiftSinceLastGestureState = (gestureCenterPoint: Vec2D) => { 'worklet'; - const { movementSensibility } = props; - let shift = null; - if (lastGestureCenterPosition.value && movementSensibility) { + if (lastGestureCenterPosition.value && movementSensibility.value) { const dx = gestureCenterPoint.x - lastGestureCenterPosition.value.x; const dy = gestureCenterPoint.y - lastGestureCenterPosition.value.y; - const shiftX = dx / zoom.value / movementSensibility; - const shiftY = dy / zoom.value / movementSensibility; + const shiftX = dx / zoom.value / movementSensibility.value; + const shiftY = dy / zoom.value / movementSensibility.value; shift = { x: shiftX, @@ -357,25 +395,10 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< const _handlePinching = (e: GestureTouchEvent) => { 'worklet'; - if (!props.zoomEnabled) return; - - const { - maxZoom, - minZoom, - pinchToZoomInSensitivity, - pinchToZoomOutSensitivity, - } = props; + if (!zoomEnabled.value) return; const distance = calcGestureTouchDistance(e); - // TODO this gets called way too often, we need to find a better way - // if ( - // props.onZoomBefore && - // props.onZoomBefore(e, _getZoomableViewEventObject()) - // ) { - // return; - // } - if (!distance) return; if (!lastGestureTouchDistance.value) return; @@ -386,8 +409,8 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< const pinchToZoomSensitivity = zoomGrowthFromLastGestureState < 1 - ? pinchToZoomOutSensitivity - : pinchToZoomInSensitivity; + ? pinchToZoomOutSensitivity.value + : pinchToZoomInSensitivity.value; if (pinchToZoomSensitivity == null) return; const deltaGrowth = zoomGrowthFromLastGestureState - 1; @@ -399,12 +422,12 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< 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); @@ -416,17 +439,17 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< 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 && runOnJS(setPinchDebugPoints)(e, zoomCenter); + debug && runOnJS(setPinchDebugPoints)(e, zoomCenter); const oldOffsetX = offsetX.value; const oldOffsetY = offsetY.value; @@ -460,10 +483,6 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< offsetX.value = newOffsetX; offsetY.value = newOffsetY; zoom.value = newScale; - - // TODO this gets called way too often, we need to find a better way - // if (props.onZoomAfter) - // runOnJS(props.onZoomAfter)(e, _getZoomableViewEventObject()); }; /** @@ -476,18 +495,8 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< const _setNewOffsetPosition = (newOffsetX: number, newOffsetY: number) => { 'worklet'; - const { onShiftingBefore, onShiftingAfter } = props; - - // TODO this gets called way too often, we need to find a better way - // if (onShiftingBefore?.(null, _getZoomableViewEventObject())) { - // return; - // } - offsetX.value = newOffsetX; offsetY.value = newOffsetY; - - // TODO this gets called way too often, we need to find a better way - // onShiftingAfter?.(null, _getZoomableViewEventObject()); }; /** @@ -501,8 +510,8 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< 'worklet'; // Skips shifting if panEnabled is false or disablePanOnInitialZoom is true and we're on the initial zoom level if ( - !props.panEnabled || - (props.disablePanOnInitialZoom && zoom.value === props.initialZoom) + !panEnabled.value || + (disablePanOnInitialZoom.value && zoom.value === initialZoom.value) ) { return; } @@ -515,7 +524,7 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< const newOffsetX = offsetX.value + shift.x; const newOffsetY = offsetY.value + shift.y; - if (props.debug) { + if (debug) { const x = e.allTouches[0].x; const y = e.allTouches[0].y; runOnJS(setDebugPoints)([{ x, y }]); @@ -542,8 +551,6 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< if (props.maxZoom && newZoomLevel > props.maxZoom) return false; if (props.minZoom && newZoomLevel < props.minZoom) return false; - props.onZoomBefore?.(null, _getZoomableViewEventObject()); - // == Trigger Pan Animation to preserve the zoom center while zooming == // See the "Zoom Animation Support" block more details zoomToDestination.value = zoomCenter; @@ -555,7 +562,6 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< // == Zoom Animation Ends == zoomToDestination.value = undefined; - props.onZoomAfter?.(null, _getZoomableViewEventObject()); }); return true; @@ -804,18 +810,15 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< runOnJS(clearLongPressTimeout)(); - if (props.onPanResponderEnd) - runOnJS(props.onPanResponderEnd)(e, _getZoomableViewEventObject()); + runOnJS(onPanResponderEnd)(e, _getZoomableViewEventObject()); if (gestureType.value === 'pinch') { - if (props.onZoomEnd) - runOnJS(props.onZoomEnd)(e, _getZoomableViewEventObject()); + runOnJS(onZoomEnd)(e, _getZoomableViewEventObject()); } else if (gestureType.value === 'shift') { - if (props.onShiftingEnd) - runOnJS(props.onShiftingEnd)(e, _getZoomableViewEventObject()); + runOnJS(onShiftingEnd)(e, _getZoomableViewEventObject()); } - if (props.staticPinPosition) { + if (staticPinPosition.value) { runOnJS(_updateStaticPin)(); } diff --git a/src/typings/index.ts b/src/typings/index.ts index 6510dad..6dc7560 100644 --- a/src/typings/index.ts +++ b/src/typings/index.ts @@ -25,7 +25,6 @@ export interface ReactNativeZoomableViewProps { initialOffsetY?: number; contentWidth?: number; contentHeight?: number; - panBoundaryPadding?: number; maxZoom?: number; minZoom?: number; doubleTapDelay?: number; @@ -56,26 +55,10 @@ export interface ReactNativeZoomableViewProps { event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent ) => void; - onShiftingBefore?: ( - event: GestureTouchEvent | null, - zoomableViewEventObject: ZoomableViewEvent - ) => boolean; - onShiftingAfter?: ( - event: GestureTouchEvent | null, - zoomableViewEventObject: ZoomableViewEvent - ) => boolean; onShiftingEnd?: ( event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent ) => void; - onZoomBefore?: ( - event: GestureTouchEvent | null, - zoomableViewEventObject: ZoomableViewEvent - ) => boolean | undefined; - onZoomAfter?: ( - event: GestureTouchEvent | null, - zoomableViewEventObject: ZoomableViewEvent - ) => void; onZoomEnd?: ( event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent From 77c9c80542eba4b444d9cd3578057ebfef1a7548 Mon Sep 17 00:00:00 2001 From: thomasvo Date: Wed, 24 Dec 2025 19:19:57 -0800 Subject: [PATCH 10/34] refactor: clean up unused imports and simplify StaticPin component --- example/App.tsx | 7 +- example/metro.config.js | 27 +- lib/commonjs/ReactNativeZoomableView.js | 820 ++++++++--------- lib/commonjs/ReactNativeZoomableView.js.map | 2 +- lib/commonjs/animations/index.js | 15 +- lib/commonjs/animations/index.js.map | 2 +- lib/commonjs/components/StaticPin.js | 31 +- lib/commonjs/components/StaticPin.js.map | 2 +- .../calcNewScaledOffsetForZoomCentering.js | 2 + ...calcNewScaledOffsetForZoomCentering.js.map | 2 +- lib/commonjs/helper/coordinateConversion.js | 17 +- .../helper/coordinateConversion.js.map | 2 +- lib/commonjs/helper/index.js | 30 +- lib/commonjs/helper/index.js.map | 2 +- lib/commonjs/hooks/useDebugPoints.js | 18 +- lib/commonjs/hooks/useDebugPoints.js.map | 2 +- lib/commonjs/hooks/useZoomSubject.js | 23 +- lib/commonjs/hooks/useZoomSubject.js.map | 2 +- lib/commonjs/typings/index.js | 8 - lib/commonjs/typings/index.js.map | 2 +- lib/module/ReactNativeZoomableView.js | 824 ++++++++---------- lib/module/ReactNativeZoomableView.js.map | 2 +- lib/module/animations/index.js | 13 +- lib/module/animations/index.js.map | 2 +- lib/module/components/StaticPin.js | 33 +- lib/module/components/StaticPin.js.map | 2 +- .../calcNewScaledOffsetForZoomCentering.js | 2 + ...calcNewScaledOffsetForZoomCentering.js.map | 2 +- lib/module/helper/coordinateConversion.js | 16 +- lib/module/helper/coordinateConversion.js.map | 2 +- lib/module/helper/index.js | 30 +- lib/module/helper/index.js.map | 2 +- lib/module/hooks/useDebugPoints.js | 18 +- lib/module/hooks/useDebugPoints.js.map | 2 +- lib/module/hooks/useZoomSubject.js | 25 +- lib/module/hooks/useZoomSubject.js.map | 2 +- lib/module/typings/index.js | 8 +- lib/module/typings/index.js.map | 2 +- .../ReactNativeZoomableView.d.ts.map | 2 +- lib/typescript/animations/index.d.ts | 4 +- lib/typescript/animations/index.d.ts.map | 2 +- lib/typescript/components/StaticPin.d.ts | 10 +- lib/typescript/components/StaticPin.d.ts.map | 2 +- ...lcNewScaledOffsetForZoomCentering.d.ts.map | 2 +- .../helper/coordinateConversion.d.ts | 3 +- .../helper/coordinateConversion.d.ts.map | 2 +- lib/typescript/helper/index.d.ts | 6 +- lib/typescript/helper/index.d.ts.map | 2 +- lib/typescript/hooks/useDebugPoints.d.ts | 9 +- lib/typescript/hooks/useDebugPoints.d.ts.map | 2 +- lib/typescript/hooks/useZoomSubject.d.ts | 10 +- lib/typescript/hooks/useZoomSubject.d.ts.map | 2 +- lib/typescript/typings/index.d.ts | 78 +- lib/typescript/typings/index.d.ts.map | 2 +- package.json | 3 +- src/ReactNativeZoomableView.tsx | 24 +- src/components/StaticPin.tsx | 56 +- src/helper/coordinateConversion.ts | 10 - src/helper/index.ts | 6 +- src/typings/index.ts | 2 - tsconfig.build.json | 6 +- 61 files changed, 962 insertions(+), 1286 deletions(-) diff --git a/example/App.tsx b/example/App.tsx index 26ebb47..5950d44 100644 --- a/example/App.tsx +++ b/example/App.tsx @@ -1,7 +1,7 @@ import { ReactNativeZoomableView } from '@openspacelabs/react-native-zoomable-view'; import { debounce } from 'lodash'; -import React, { useCallback, useRef, useState } from 'react'; -import { Button, Image, Modal, Text, View } from 'react-native'; +import React, { useCallback, useState } from 'react'; +import { Alert, Button, Image, Modal, Text, View } from 'react-native'; import Animated, { runOnJS, useAnimatedStyle, @@ -57,6 +57,9 @@ export default function App() { > { + Alert.alert('Long press detected'); + }} // Where to put the pin in the content view staticPinPosition={staticPinPosition} // Callback that returns the position of the pin diff --git a/example/metro.config.js b/example/metro.config.js index 57df371..b43babd 100644 --- a/example/metro.config.js +++ b/example/metro.config.js @@ -1,11 +1,11 @@ -const path = require("path"); -const escape = require("escape-string-regexp"); -const { getDefaultConfig } = require("@expo/metro-config"); // or require("expo/metro-config") +const path = require('path'); +const escape = require('escape-string-regexp'); +const { getDefaultConfig } = require('@expo/metro-config'); // or require("expo/metro-config") -const pak = require("../package.json"); -const root = path.resolve(__dirname, ".."); +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); // 1) Allow Metro to see the library source (outside example/) @@ -13,36 +13,33 @@ config.watchFolders = [root]; // 2) Prefer resolving deps from example/node_modules (avoid hoisted duplicates) config.resolver.disableHierarchicalLookup = true; -config.resolver.nodeModulesPaths = [path.resolve(__dirname, "node_modules")]; +config.resolver.nodeModulesPaths = [path.resolve(__dirname, 'node_modules')]; // 3) Ensure single versions of peerDependencies (block root/node_modules/) const peerBlockList = modules.map( - (m) => - new RegExp( - `^${escape(path.join(root, "node_modules", m))}(?:\\/.*)?$` - ) + (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 ?? []), + ...(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); + acc[name] = path.join(__dirname, 'node_modules', name); return acc; }, {}), // Alias the library itself to src - "@openspacelabs/react-native-zoomable-view": path.resolve(root, "src"), + '@openspacelabs/react-native-zoomable-view': path.resolve(root, '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" + 'react-native/Libraries/Image/AssetRegistry' ); module.exports = config; diff --git a/lib/commonjs/ReactNativeZoomableView.js b/lib/commonjs/ReactNativeZoomableView.js index dff3f89..071638a 100644 --- a/lib/commonjs/ReactNativeZoomableView.js +++ b/lib/commonjs/ReactNativeZoomableView.js @@ -7,6 +7,8 @@ exports.default = 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"); @@ -25,8 +27,6 @@ const ReactNativeZoomableView = (props, ref) => { measure: measureZoomSubject, originalWidth, originalHeight, - originalPageX, - originalPageY, originalX, originalY } = (0, _useZoomSubject.useZoomSubject)(); @@ -39,12 +39,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, @@ -66,40 +62,63 @@ const ReactNativeZoomableView = (props, ref) => { staticPinPosition: undefined, staticPinIcon: undefined, onStaticPinPositionChange: undefined, - onStaticPinPositionMove: undefined, + onStaticPinPositionMoveWorklet: undefined, disablePanOnInitialZoom: false }); const { + debug, staticPinIcon, children, visualTouchFeedbackEnabled, doubleTapDelay, - staticPinPosition, - onStaticPinLongPress, - onStaticPinPress, + staticPinPosition: propStaticPinPosition, + contentWidth: propContentWidth, + contentHeight: propContentHeight, + onTransformWorklet, + onStaticPinPositionMoveWorklet, + zoomEnabled: propZoomEnabled, + maxZoom: propMaxZoom, + minZoom: propMinZoom, + pinchToZoomInSensitivity: propPinchToZoomInSensitivity, + pinchToZoomOutSensitivity: propPinchToZoomOutSensitivity, + movementSensibility: propMovementSensibility, + panEnabled: propPanEnabled, + disablePanOnInitialZoom: propDisablePanOnInitialZoom, + initialZoom: propsInitialZoom, pinProps } = props; - const panAnim = (0, _react.useRef)(new _reactNative.Animated.ValueXY({ - x: 0, - y: 0 - })); - 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 offsetX = (0, _reactNativeReanimated.useSharedValue)(0); + const offsetY = (0, _reactNativeReanimated.useSharedValue)(0); + const zoom = (0, _reactNativeReanimated.useSharedValue)(1); + 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 movementSensibility = (0, _reactNativeReanimated.useDerivedValue)(() => propMovementSensibility); + const onPanResponderGrant = (0, _useLatestCallback.useLatestCallback)(props.onPanResponderGrant || (() => undefined)); + const onPanResponderEnd = (0, _useLatestCallback.useLatestCallback)(props.onPanResponderEnd || (() => 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 +126,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 +178,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); + onTransformWorklet?.(zoomableViewEvent); if (position) { - props.onStaticPinPositionMove?.(position); - debouncedOnStaticPinPositionChange(position); + onStaticPinPositionMoveWorklet?.(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 +272,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 && movementSensibility.value) { + const dx = gestureCenterPoint.x - lastGestureCenterPosition.value.x; + const dy = gestureCenterPoint.y - lastGestureCenterPosition.value.y; + const shiftX = dx / zoom.value / movementSensibility.value; + const shiftY = dy / zoom.value / movementSensibility.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 +360,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 +374,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 +414,31 @@ 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; + }); 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 +454,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 +463,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 +486,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 +541,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 +576,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 +589,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 +606,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 +617,7 @@ const ReactNativeZoomableView = (props, ref) => { moveBy: publicMoveBy, moveStaticPinTo: publicMoveStaticPinTo, get gestureStarted() { - return gestureStarted.current; + return gestureStarted.value; } })); @@ -687,28 +629,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,127 +659,132 @@ 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'; // 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; } - 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) => { + 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: [ + }).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); + stateManager.end(); + }).onFinalize(() => { + firstTouch.value = undefined; + }); + return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeGestureHandler.GestureHandlerRootView, { + children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector, { + gesture: gesture, + children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View // 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 - })] + , { + style: styles.container, + ref: zoomSubjectWrapperRef, + onLayout: measureZoomSubject, + children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, { + style: [ + // eslint-disable-next-line @typescript-eslint/no-use-before-define + styles.zoomSubject, props.style, (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 + }] + }; + })], + 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; diff --git a/lib/commonjs/ReactNativeZoomableView.js.map b/lib/commonjs/ReactNativeZoomableView.js.map index 4c3f9d1..934ecc7 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","_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","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","movementSensibility","doubleTapDelay","zoomStep","onLongPress","longPressDuration","contentWidth","contentHeight","visualTouchFeedbackEnabled","staticPinPosition","staticPinIcon","onStaticPinPositionChange","onStaticPinPositionMoveWorklet","disablePanOnInitialZoom","debug","children","propStaticPinPosition","propContentWidth","propContentHeight","onTransformWorklet","propZoomEnabled","propMaxZoom","propMinZoom","propPinchToZoomInSensitivity","propPinchToZoomOutSensitivity","propMovementSensibility","propPanEnabled","propDisablePanOnInitialZoom","propsInitialZoom","pinProps","offsetX","offsetY","zoom","lastGestureCenterPosition","lastGestureTouchDistance","gestureStarted","longPressTimeout","onTransformInvocationInitialized","singleTapTimeoutId","useRef","touches","doubleTapFirstTap","gestureType","useDerivedValue","onPanResponderGrant","useLatestCallback","onPanResponderEnd","onZoomEnd","onShiftingEnd","_getZoomableViewEventObject","overwriteObj","assign","zoomLevel","value","_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","jsx","GestureHandlerRootView","GestureDetector","jsxs","View","style","styles","container","zoomSubject","useAnimatedStyle","transform","scaleX","scaleY","translateX","translateY","map","AnimatedTouchFeedback","animationDuration","onAnimationDone","index","DebugTouchPoint","StaticPin","exports","StyleSheet","create","alignItems","flex","justifyContent","overflow","_default"],"sourceRoot":"../../src","sources":["ReactNativeZoomableView.tsx"],"mappings":"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","ignoreList":[]} diff --git a/lib/commonjs/animations/index.js b/lib/commonjs/animations/index.js index 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/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":";;;;;;;;;AAEO,MAAMA,2BAA8C,GAAAC,OAAA,CAAAD,2BAAA,GAAG;EAC5DE,OAAO,EAAE,CAAC;EACVC,OAAO,EAAE,CAAC;EACVC,SAAS,EAAE,CAAC;EACZC,aAAa,EAAE,CAAC;EAChBC,cAAc,EAAE,CAAC;EACjBC,aAAa,EAAE,CAAC;EAChBC,aAAa,EAAE;AACjB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,sBAAsBA,CACpCC,OAAe,EACfC,aAAqB,EAC0C;EAC/D,MAAM;IAAEC,KAAK,EAAEC,UAAU;IAAEC,MAAM,EAAEC;EAAY,CAAC,GAAGL,OAAO;EAC1D,MAAM;IAAEE,KAAK,EAAEI,SAAS;IAAEF,MAAM,EAAEG;EAAW,CAAC,GAAGN,aAAa;EAC9D,MAAMO,WAAW,GAAGL,UAAU,GAAGE,WAAW;EAC5C,MAAMI,UAAU,GAAGH,SAAS,GAAGC,UAAU;EAEzC,IAAIG,OAAO;EACX,IAAIF,WAAW,IAAIC,UAAU,EAAE;IAC7B;IACAC,OAAO,GAAG;MAAER,KAAK,EAAEI,SAAS;MAAEF,MAAM,EAAEE,SAAS,GAAGE;IAAY,CAAC;EACjE,CAAC,MAAM;IACL;IACAE,OAAO,GAAG;MAAER,KAAK,EAAEK,UAAU,GAAGC,WAAW;MAAEJ,MAAM,EAAEG;IAAW,CAAC;EACnE;EAEA,IAAII,KAAK,CAACD,OAAO,CAACN,MAAM,CAAC,EAAEM,OAAO,CAACN,MAAM,GAAGG,UAAU;EACtD,IAAII,KAAK,CAACD,OAAO,CAACR,KAAK,CAAC,EAAEQ,OAAO,CAACR,KAAK,GAAGI,SAAS;EAEnD,MAAMM,KAAK,GAAGT,UAAU,GACpBO,OAAO,CAACR,KAAK,GAAGC,UAAU,GAC1BO,OAAO,CAACN,MAAM,GAAGC,WAAW;EAEhC,IAAI,CAACQ,QAAQ,CAACD,KAAK,CAAC,EAAE,OAAO;IAAEE,IAAI,EAAE,IAAI;IAAEF,KAAK,EAAE;EAAK,CAAC;EAExD,OAAO;IACLE,IAAI,EAAEJ,OAAO;IACbE;EACF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASG,gCAAgCA,CAC9CC,gBAAwB,EACxBC,gBAAmC,EACnC;EACA,MAAM;IAAEzB,OAAO;IAAEC,OAAO;IAAEC,SAAS;IAAEC,aAAa;IAAEC;EAAe,CAAC,GAClEqB,gBAAgB;EAClB,OAAO;IACLC,CAAC,EACC1B,OAAO,GAAGE,SAAS,GACnBC,aAAa,GAAG,CAAC,GAChBqB,gBAAgB,CAACd,KAAK,GAAG,CAAC,GAAIR,SAAS;IAC1CyB,CAAC,EACC1B,OAAO,GAAGC,SAAS,GACnBE,cAAc,GAAG,CAAC,GACjBoB,gBAAgB,CAACZ,MAAM,GAAG,CAAC,GAAIV;EACpC,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS0B,+BAA+BA,CAAC;EAC9CC,gBAAgB;EAChBC,SAAS;EACTC;AAKF,CAAC,EAAgB;EACf,MAAM;IAAET,IAAI,EAAEU,cAAc;IAAEZ,KAAK,EAAEa;EAAgB,CAAC,GACpD1B,sBAAsB,CAACuB,SAAS,EAAE;IAChCpB,KAAK,EAAEqB,aAAa,CAAC5B,aAAa;IAClCS,MAAM,EAAEmB,aAAa,CAAC3B;EACxB,CAAC,CAAC;EAEJ,IAAI6B,eAAe,IAAI,IAAI,EAAE,OAAO,IAAI;EAExC,MAAMC,sBAAsB,GAAGX,gCAAgC,CAC7DS,cAAc,EACdD,aACF,CAAC;EAED,MAAMI,YAAY,GAAG;IACnBT,CAAC,EACC,CAACG,gBAAgB,CAACH,CAAC,GAAGQ,sBAAsB,CAACR,CAAC,IAC9CK,aAAa,CAAC7B,SAAS,GACvB+B,eAAe;IACjBN,CAAC,EACC,CAACE,gBAAgB,CAACF,CAAC,GAAGO,sBAAsB,CAACP,CAAC,IAC9CI,aAAa,CAAC7B,SAAS,GACvB+B;EACJ,CAAC;EAED,OAAOE,YAAY;AACrB","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..22f374f 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;EAChD,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/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..73addca 100644 --- a/lib/module/ReactNativeZoomableView.js +++ b/lib/module/ReactNativeZoomableView.js @@ -2,8 +2,10 @@ 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 { StyleSheet, 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'; @@ -20,8 +22,6 @@ const ReactNativeZoomableView = (props, ref) => { measure: measureZoomSubject, originalWidth, originalHeight, - originalPageX, - originalPageY, originalX, originalY } = useZoomSubject(); @@ -34,12 +34,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, @@ -61,40 +57,63 @@ const ReactNativeZoomableView = (props, ref) => { staticPinPosition: undefined, staticPinIcon: undefined, onStaticPinPositionChange: undefined, - onStaticPinPositionMove: undefined, + onStaticPinPositionMoveWorklet: undefined, disablePanOnInitialZoom: false }); const { + debug, staticPinIcon, children, visualTouchFeedbackEnabled, doubleTapDelay, - staticPinPosition, - onStaticPinLongPress, - onStaticPinPress, + staticPinPosition: propStaticPinPosition, + contentWidth: propContentWidth, + contentHeight: propContentHeight, + onTransformWorklet, + onStaticPinPositionMoveWorklet, + zoomEnabled: propZoomEnabled, + maxZoom: propMaxZoom, + minZoom: propMinZoom, + pinchToZoomInSensitivity: propPinchToZoomInSensitivity, + pinchToZoomOutSensitivity: propPinchToZoomOutSensitivity, + movementSensibility: propMovementSensibility, + 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(null); - const lastGestureTouchDistance = useRef(150); - const gestureType = useRef(); - const gestureStarted = useRef(false); + const offsetX = useSharedValue(0); + const offsetY = useSharedValue(0); + const zoom = useSharedValue(1); + 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 movementSensibility = useDerivedValue(() => propMovementSensibility); + const onPanResponderGrant = useLatestCallback(props.onPanResponderGrant || (() => undefined)); + const onPanResponderEnd = useLatestCallback(props.onPanResponderEnd || (() => 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 +121,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 +173,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); + onTransformWorklet?.(zoomableViewEvent); if (position) { - props.onStaticPinPositionMove?.(position); - debouncedOnStaticPinPositionChange(position); + onStaticPinPositionMoveWorklet?.(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 +267,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 && movementSensibility.value) { + const dx = gestureCenterPoint.x - lastGestureCenterPosition.value.x; + const dy = gestureCenterPoint.y - lastGestureCenterPosition.value.y; + const shiftX = dx / zoom.value / movementSensibility.value; + const shiftY = dy / zoom.value / movementSensibility.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 +355,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 +369,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 +409,31 @@ 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; + }); 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 +449,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 +458,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 +481,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 - }).start(() => { - _updateStaticPin(); - }); + }, done); + offsetY.value = withTiming(toY, { + duration: 200 + }, done); } props.onSingleTap?.(e, _getZoomableViewEventObject()); }, props.doubleTapDelay); } - }); + }; const publicMoveStaticPinTo = useLatestCallback((position, duration) => { const { staticPinPosition, @@ -590,28 +536,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 - }).start(); - } else { - panAnim.current.setValue({ - x: offsetX.current, - y: offsetY.current }); + offsetY.value = withTiming(newOffsetY, { + duration + }); + } else { + offsetX.value = newOffsetX; + offsetY.value = newOffsetY; } }); @@ -629,7 +571,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 +584,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 +601,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 +612,7 @@ const ReactNativeZoomableView = (props, ref) => { moveBy: publicMoveBy, moveStaticPinTo: publicMoveStaticPinTo, get gestureStarted() { - return gestureStarted.current; + return gestureStarted.value; } })); @@ -682,28 +624,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,127 +654,132 @@ 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'; // 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; } - 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) => { + 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: [ + }).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); + stateManager.end(); + }).onFinalize(() => { + firstTouch.value = undefined; + }); + return /*#__PURE__*/_jsx(GestureHandlerRootView, { + children: /*#__PURE__*/_jsx(GestureDetector, { + gesture: gesture, + children: /*#__PURE__*/_jsxs(View // 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 - })] + , { + style: styles.container, + ref: zoomSubjectWrapperRef, + onLayout: measureZoomSubject, + children: [/*#__PURE__*/_jsx(Animated.View, { + style: [ + // eslint-disable-next-line @typescript-eslint/no-use-before-define + styles.zoomSubject, props.style, 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 + }] + }; + })], + 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({ diff --git a/lib/module/ReactNativeZoomableView.js.map b/lib/module/ReactNativeZoomableView.js.map index e72f481..c541325 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","useImperativeHandle","useLayoutEffect","useMemo","useRef","useState","StyleSheet","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","jsx","_jsx","jsxs","_jsxs","ReactNativeZoomableView","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","movementSensibility","doubleTapDelay","zoomStep","onLongPress","longPressDuration","contentWidth","contentHeight","visualTouchFeedbackEnabled","staticPinPosition","staticPinIcon","onStaticPinPositionChange","onStaticPinPositionMoveWorklet","disablePanOnInitialZoom","debug","children","propStaticPinPosition","propContentWidth","propContentHeight","onTransformWorklet","propZoomEnabled","propMaxZoom","propMinZoom","propPinchToZoomInSensitivity","propPinchToZoomOutSensitivity","propMovementSensibility","propPanEnabled","propDisablePanOnInitialZoom","propsInitialZoom","pinProps","offsetX","offsetY","zoom","lastGestureCenterPosition","lastGestureTouchDistance","gestureStarted","longPressTimeout","onTransformInvocationInitialized","singleTapTimeoutId","touches","doubleTapFirstTap","gestureType","onPanResponderGrant","onPanResponderEnd","onZoomEnd","onShiftingEnd","_getZoomableViewEventObject","overwriteObj","Object","assign","zoomLevel","value","_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","style","styles","container","zoomSubject","transform","scaleX","scaleY","translateX","translateY","map","animationDuration","onAnimationDone","index","create","alignItems","flex","justifyContent","overflow"],"sourceRoot":"../../src","sources":["ReactNativeZoomableView.tsx"],"mappings":"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","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/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":";;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,sBAAsBA,CACpCC,OAAe,EACfC,aAAqB,EAC0C;EAC/D,SAAS;;EAET,MAAM;IAAEC,KAAK,EAAEC,UAAU;IAAEC,MAAM,EAAEC;EAAY,CAAC,GAAGL,OAAO;EAC1D,MAAM;IAAEE,KAAK,EAAEI,SAAS;IAAEF,MAAM,EAAEG;EAAW,CAAC,GAAGN,aAAa;EAC9D,MAAMO,WAAW,GAAGL,UAAU,GAAGE,WAAW;EAC5C,MAAMI,UAAU,GAAGH,SAAS,GAAGC,UAAU;EAEzC,IAAIG,OAAO;EACX,IAAIF,WAAW,IAAIC,UAAU,EAAE;IAC7B;IACAC,OAAO,GAAG;MAAER,KAAK,EAAEI,SAAS;MAAEF,MAAM,EAAEE,SAAS,GAAGE;IAAY,CAAC;EACjE,CAAC,MAAM;IACL;IACAE,OAAO,GAAG;MAAER,KAAK,EAAEK,UAAU,GAAGC,WAAW;MAAEJ,MAAM,EAAEG;IAAW,CAAC;EACnE;EAEA,IAAII,KAAK,CAACD,OAAO,CAACN,MAAM,CAAC,EAAEM,OAAO,CAACN,MAAM,GAAGG,UAAU;EACtD,IAAII,KAAK,CAACD,OAAO,CAACR,KAAK,CAAC,EAAEQ,OAAO,CAACR,KAAK,GAAGI,SAAS;EAEnD,MAAMM,KAAK,GAAGT,UAAU,GACpBO,OAAO,CAACR,KAAK,GAAGC,UAAU,GAC1BO,OAAO,CAACN,MAAM,GAAGC,WAAW;EAEhC,IAAI,CAACQ,QAAQ,CAACD,KAAK,CAAC,EAAE,OAAO;IAAEE,IAAI,EAAE,IAAI;IAAEF,KAAK,EAAE;EAAK,CAAC;EAExD,OAAO;IACLE,IAAI,EAAEJ,OAAO;IACbE;EACF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,gCAAgCA,CAC9CC,gBAAwB,EACxBC,gBAAmC,EACnC;EACA,SAAS;;EAET,MAAM;IAAEC,OAAO;IAAEC,OAAO;IAAEC,SAAS;IAAEC,aAAa;IAAEC;EAAe,CAAC,GAClEL,gBAAgB;EAClB,OAAO;IACLM,CAAC,EACCL,OAAO,GAAGE,SAAS,GACnBC,aAAa,GAAG,CAAC,GAChBL,gBAAgB,CAACd,KAAK,GAAG,CAAC,GAAIkB,SAAS;IAC1CI,CAAC,EACCL,OAAO,GAAGC,SAAS,GACnBE,cAAc,GAAG,CAAC,GACjBN,gBAAgB,CAACZ,MAAM,GAAG,CAAC,GAAIgB;EACpC,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASK,+BAA+BA,CAAC;EAC9CC,gBAAgB;EAChBC,SAAS;EACTC;AAKF,CAAC,EAAgB;EACf,SAAS;;EAET,MAAM;IAAEd,IAAI,EAAEe,cAAc;IAAEjB,KAAK,EAAEkB;EAAgB,CAAC,GACpD/B,sBAAsB,CAAC4B,SAAS,EAAE;IAChCzB,KAAK,EAAE0B,aAAa,CAACP,aAAa;IAClCjB,MAAM,EAAEwB,aAAa,CAACN;EACxB,CAAC,CAAC;EAEJ,IAAIQ,eAAe,IAAI,IAAI,EAAE,OAAO,IAAI;EAExC,MAAMC,sBAAsB,GAAGhB,gCAAgC,CAC7Dc,cAAc,EACdD,aACF,CAAC;EAED,MAAMI,YAAY,GAAG;IACnBT,CAAC,EACC,CAACG,gBAAgB,CAACH,CAAC,GAAGQ,sBAAsB,CAACR,CAAC,IAC9CK,aAAa,CAACR,SAAS,GACvBU,eAAe;IACjBN,CAAC,EACC,CAACE,gBAAgB,CAACF,CAAC,GAAGO,sBAAsB,CAACP,CAAC,IAC9CI,aAAa,CAACR,SAAS,GACvBU;EACJ,CAAC;EAED,OAAOE,YAAY;AACrB","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..e458789 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;EAChD,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/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.map b/lib/typescript/ReactNativeZoomableView.d.ts.map index 2d2a5b6..fffa1b1 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,OAAc,EACZ,wBAAwB,EAMzB,MAAM,OAAO,CAAC;AAiCf,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,CAq5B7B,CAAC;AAiBF,eAAe,uBAAuB,CAAC;AAEvC,OAAO,EAAE,uBAAuB,EAAE,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/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..015292c 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,CAS5E"} \ 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/typings/index.d.ts b/lib/typescript/typings/index.d.ts index 303e666..1bf85a8 100644 --- a/lib/typescript/typings/index.d.ts +++ b/lib/typescript/typings/index.d.ts @@ -1,19 +1,12 @@ 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, PanResponderGestureState, 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 interface ReactNativeZoomableViewProps { style?: ViewProps['style']; @@ -25,7 +18,6 @@ export interface ReactNativeZoomableViewProps { initialOffsetY?: number; contentWidth?: number; contentHeight?: number; - panBoundaryPadding?: number; maxZoom?: number; minZoom?: number; doubleTapDelay?: number; @@ -37,36 +29,28 @@ export interface ReactNativeZoomableViewProps { 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; + onTransformWorklet?: (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, zoomableViewEventObject: ZoomableViewEvent) => void; + onLongPress?: (event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent) => void; + onStartShouldSetPanResponder?: (event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent, baseComponentResult: boolean) => boolean; + onPanResponderGrant?: (event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent) => void; + onPanResponderEnd?: (event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent) => void; + onPanResponderMove?: (event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent) => boolean; + onPanResponderTerminate?: (event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent) => void; + onPanResponderTerminationRequest?: (event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent) => boolean; + onShouldBlockNativeResponder?: (event: GestureTouchEvent, zoomableViewEventObject: ZoomableViewEvent) => boolean; + onStartShouldSetPanResponderCapture?: (event: GestureTouchEvent, gestureState: PanResponderGestureState) => boolean; + onMoveShouldSetPanResponderCapture?: (event: GestureTouchEvent, gestureState: PanResponderGestureState) => boolean; staticPinPosition?: Vec2D; staticPinIcon?: React.ReactElement; onStaticPinPositionChange?: (position: Vec2D) => void; - onStaticPinPositionMove?: (position: Vec2D) => void; + onStaticPinPositionMoveWorklet?: (position: Vec2D) => void; pinProps?: ViewProps; } export interface Vec2D { @@ -81,28 +65,4 @@ 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; -} //# 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..8c42fd3 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":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EACL,QAAQ,EACR,qBAAqB,EACrB,iBAAiB,EACjB,wBAAwB,EACxB,SAAS,EACV,MAAM,cAAc,CAAC;AAEtB,oBAAY,cAAc;IACxB,QAAQ,aAAa;IACrB,UAAU,eAAe;IACzB,UAAU,eAAe;IACzB,WAAW,gBAAgB;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,4BAA4B;IAE3C,KAAK,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAC3B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAGlC,iBAAiB,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;IACnC,kBAAkB,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC;IAGtC,KAAK,CAAC,EAAE,OAAO,CAAC;IAGhB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,aAAa,CAAC,KAAK,IAAI,CAAC;IACnE,WAAW,CAAC,EAAE,CAAC,uBAAuB,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACnE,WAAW,CAAC,EAAE,CACZ,KAAK,EAAE,qBAAqB,EAC5B,uBAAuB,EAAE,iBAAiB,KACvC,IAAI,CAAC;IACV,iBAAiB,CAAC,EAAE,CAClB,KAAK,EAAE,qBAAqB,EAC5B,uBAAuB,EAAE,iBAAiB,KACvC,IAAI,CAAC;IACV,gBAAgB,CAAC,EAAE,CACjB,KAAK,EAAE,qBAAqB,EAC5B,uBAAuB,EAAE,iBAAiB,KACvC,IAAI,CAAC;IACV,gBAAgB,CAAC,EAAE,CACjB,KAAK,EAAE,qBAAqB,GAAG,IAAI,EACnC,YAAY,EAAE,wBAAwB,GAAG,IAAI,EAC7C,uBAAuB,EAAE,iBAAiB,KACvC,OAAO,CAAC;IACb,eAAe,CAAC,EAAE,CAChB,KAAK,EAAE,qBAAqB,GAAG,IAAI,EACnC,YAAY,EAAE,wBAAwB,GAAG,IAAI,EAC7C,uBAAuB,EAAE,iBAAiB,KACvC,OAAO,CAAC;IACb,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,qBAAqB,EAC5B,YAAY,EAAE,wBAAwB,EACtC,uBAAuB,EAAE,iBAAiB,KACvC,IAAI,CAAC;IACV,YAAY,CAAC,EAAE,CACb,KAAK,EAAE,qBAAqB,GAAG,IAAI,EACnC,YAAY,EAAE,wBAAwB,GAAG,IAAI,EAC7C,uBAAuB,EAAE,iBAAiB,KACvC,OAAO,GAAG,SAAS,CAAC;IACzB,WAAW,CAAC,EAAE,CACZ,KAAK,EAAE,qBAAqB,GAAG,IAAI,EACnC,YAAY,EAAE,wBAAwB,GAAG,IAAI,EAC7C,uBAAuB,EAAE,iBAAiB,KACvC,IAAI,CAAC;IACV,SAAS,CAAC,EAAE,CACV,KAAK,EAAE,qBAAqB,EAC5B,YAAY,EAAE,wBAAwB,EACtC,uBAAuB,EAAE,iBAAiB,KACvC,IAAI,CAAC;IACV,WAAW,CAAC,EAAE,CACZ,KAAK,EAAE,qBAAqB,EAC5B,YAAY,EAAE,wBAAwB,EACtC,uBAAuB,EAAE,iBAAiB,KACvC,IAAI,CAAC;IACV,4BAA4B,CAAC,EAAE,CAC7B,KAAK,EAAE,qBAAqB,EAC5B,YAAY,EAAE,wBAAwB,EACtC,uBAAuB,EAAE,iBAAiB,EAC1C,mBAAmB,EAAE,OAAO,KACzB,OAAO,CAAC;IACb,mBAAmB,CAAC,EAAE,CACpB,KAAK,EAAE,qBAAqB,EAC5B,YAAY,EAAE,wBAAwB,EACtC,uBAAuB,EAAE,iBAAiB,KACvC,IAAI,CAAC;IACV,iBAAiB,CAAC,EAAE,CAClB,KAAK,EAAE,qBAAqB,EAC5B,YAAY,EAAE,wBAAwB,EACtC,uBAAuB,EAAE,iBAAiB,KACvC,IAAI,CAAC;IACV,kBAAkB,CAAC,EAAE,CACnB,KAAK,EAAE,qBAAqB,EAC5B,YAAY,EAAE,wBAAwB,EACtC,uBAAuB,EAAE,iBAAiB,KACvC,OAAO,CAAC;IACb,uBAAuB,CAAC,EAAE,CACxB,KAAK,EAAE,qBAAqB,EAC5B,YAAY,EAAE,wBAAwB,EACtC,uBAAuB,EAAE,iBAAiB,KACvC,IAAI,CAAC;IACV,gCAAgC,CAAC,EAAE,CACjC,KAAK,EAAE,qBAAqB,EAC5B,YAAY,EAAE,wBAAwB,EACtC,uBAAuB,EAAE,iBAAiB,KACvC,OAAO,CAAC;IACb,4BAA4B,CAAC,EAAE,CAC7B,KAAK,EAAE,qBAAqB,EAC5B,YAAY,EAAE,wBAAwB,EACtC,uBAAuB,EAAE,iBAAiB,KACvC,OAAO,CAAC;IACb,mCAAmC,CAAC,EAAE,CACpC,KAAK,EAAE,qBAAqB,EAC5B,YAAY,EAAE,wBAAwB,KACnC,OAAO,CAAC;IACb,kCAAkC,CAAC,EAAE,CACnC,KAAK,EAAE,qBAAqB,EAC5B,YAAY,EAAE,wBAAwB,KACnC,OAAO,CAAC;IACb,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC1D,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC9D,iBAAiB,CAAC,EAAE,KAAK,CAAC;IAC1B,aAAa,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IACnC,yBAAyB,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAK,IAAI,CAAC;IACtD,uBAAuB,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAK,IAAI,CAAC;IACpD,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,KAAK;IACpB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAW,SAAQ,KAAK;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,4BAA4B;IAC3C,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,GAAG,KAAK,EAAE,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,wCACf,SAAQ,4BAA4B;IACpC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,CACR,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,wBAAwB,KACnC,IAAI,CAAC;IACV,SAAS,CAAC,EAAE,CAAC,YAAY,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAC7D,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAC/D,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAC/D,YAAY,CAAC,EAAE,CAAC,YAAY,EAAE,wBAAwB,KAAK,IAAI,CAAC;CACjE"} \ 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 f72f183..5348357 100644 --- a/package.json +++ b/package.json @@ -166,8 +166,7 @@ "simple-import-sort/exports": "error", "reanimated/js-function-in-worklet": "error", "reanimated/unsupported-syntax": "error", - "reanimated/no-multiple-animated-style-usages": "error", - "no-use-before-define": "error" + "reanimated/no-multiple-animated-style-usages": "error" }, "overrides": [ { diff --git a/src/ReactNativeZoomableView.tsx b/src/ReactNativeZoomableView.tsx index 7e80fb8..a2144e1 100644 --- a/src/ReactNativeZoomableView.tsx +++ b/src/ReactNativeZoomableView.tsx @@ -122,8 +122,6 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< panEnabled: propPanEnabled, disablePanOnInitialZoom: propDisablePanOnInitialZoom, initialZoom: propsInitialZoom, - onStaticPinLongPress, - onStaticPinPress, pinProps, } = props; @@ -963,19 +961,15 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< return ; })} - {/* TODO */} - {/*{staticPinPosition && false && (*/} - {/* */} - {/*)}*/} + {propStaticPinPosition && ( + + )} diff --git a/src/components/StaticPin.tsx b/src/components/StaticPin.tsx index 0b433a1..edfdbb3 100644 --- a/src/components/StaticPin.tsx +++ b/src/components/StaticPin.tsx @@ -1,14 +1,5 @@ import React from 'react'; -import { - Animated, - GestureResponderEvent, - Image, - PanResponder, - PanResponderGestureState, - StyleSheet, - View, - ViewProps, -} from 'react-native'; +import { Image, StyleSheet, View, ViewProps } from 'react-native'; import { Size2D } from '../typings'; @@ -16,26 +7,15 @@ 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 }, @@ -43,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/coordinateConversion.ts b/src/helper/coordinateConversion.ts index b0ac683..77ca90d 100644 --- a/src/helper/coordinateConversion.ts +++ b/src/helper/coordinateConversion.ts @@ -1,15 +1,5 @@ import { Size2D, Vec2D, ZoomableViewEvent } from '../typings'; -export const defaultTransformSubjectData: ZoomableViewEvent = { - 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 diff --git a/src/helper/index.ts b/src/helper/index.ts index 5793e54..07cc866 100644 --- a/src/helper/index.ts +++ b/src/helper/index.ts @@ -1,8 +1,4 @@ -import { - GestureTouchEvent, - GestureUpdateEvent, - PanGestureHandlerEventPayload, -} from 'react-native-gesture-handler'; +import { GestureTouchEvent } from 'react-native-gesture-handler'; import { Vec2D } from '../typings'; diff --git a/src/typings/index.ts b/src/typings/index.ts index 6dc7560..d8474fb 100644 --- a/src/typings/index.ts +++ b/src/typings/index.ts @@ -104,8 +104,6 @@ export interface ReactNativeZoomableViewProps { event: GestureTouchEvent, gestureState: PanResponderGestureState ) => boolean; - onStaticPinPress?: (event: GestureTouchEvent) => void; - onStaticPinLongPress?: (event: GestureTouchEvent) => void; staticPinPosition?: Vec2D; staticPinIcon?: React.ReactElement; onStaticPinPositionChange?: (position: Vec2D) => 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__/**"] } From d4fe8c058fca68d22f5deafe58ce7824f05ffd64 Mon Sep 17 00:00:00 2001 From: thomasvo Date: Wed, 24 Dec 2025 19:34:22 -0800 Subject: [PATCH 11/34] fix longPress getting called on pinch --- lib/commonjs/ReactNativeZoomableView.js | 19 +++++++++++-------- lib/commonjs/ReactNativeZoomableView.js.map | 2 +- lib/module/ReactNativeZoomableView.js | 19 +++++++++++-------- lib/module/ReactNativeZoomableView.js.map | 2 +- .../ReactNativeZoomableView.d.ts.map | 2 +- src/ReactNativeZoomableView.tsx | 13 ++++++++----- 6 files changed, 33 insertions(+), 24 deletions(-) diff --git a/lib/commonjs/ReactNativeZoomableView.js b/lib/commonjs/ReactNativeZoomableView.js index 071638a..3c8a140 100644 --- a/lib/commonjs/ReactNativeZoomableView.js +++ b/lib/commonjs/ReactNativeZoomableView.js @@ -675,7 +675,7 @@ const ReactNativeZoomableView = (props, ref) => { return true; } if (e.numberOfTouches === 2) { - (0, _reactNativeReanimated.runOnJS)(clearLongPressTimeout); + (0, _reactNativeReanimated.runOnJS)(clearLongPressTimeout)(); // change some measurement states when switching gesture to ensure a smooth transition if (gestureType.value !== 'pinch') { @@ -706,13 +706,16 @@ const ReactNativeZoomableView = (props, ref) => { }; const firstTouch = (0, _reactNativeReanimated.useSharedValue)(undefined); const gesture = _reactNativeGestureHandler.Gesture.Manual().onTouchesDown((e, stateManager) => { - stateManager.activate(); - stateManager.begin(); - firstTouch.value = { - x: e.allTouches[0].x, - y: e.allTouches[0].y - }; - _handlePanResponderGrant(e); + // 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); diff --git a/lib/commonjs/ReactNativeZoomableView.js.map b/lib/commonjs/ReactNativeZoomableView.js.map index 934ecc7..7191e73 100644 --- a/lib/commonjs/ReactNativeZoomableView.js.map +++ b/lib/commonjs/ReactNativeZoomableView.js.map @@ -1 +1 @@ -{"version":3,"names":["_lodash","require","_react","_interopRequireWildcard","_reactNative","_reactNativeGestureHandler","_reactNativeReanimated","_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","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","movementSensibility","doubleTapDelay","zoomStep","onLongPress","longPressDuration","contentWidth","contentHeight","visualTouchFeedbackEnabled","staticPinPosition","staticPinIcon","onStaticPinPositionChange","onStaticPinPositionMoveWorklet","disablePanOnInitialZoom","debug","children","propStaticPinPosition","propContentWidth","propContentHeight","onTransformWorklet","propZoomEnabled","propMaxZoom","propMinZoom","propPinchToZoomInSensitivity","propPinchToZoomOutSensitivity","propMovementSensibility","propPanEnabled","propDisablePanOnInitialZoom","propsInitialZoom","pinProps","offsetX","offsetY","zoom","lastGestureCenterPosition","lastGestureTouchDistance","gestureStarted","longPressTimeout","onTransformInvocationInitialized","singleTapTimeoutId","useRef","touches","doubleTapFirstTap","gestureType","useDerivedValue","onPanResponderGrant","useLatestCallback","onPanResponderEnd","onZoomEnd","onShiftingEnd","_getZoomableViewEventObject","overwriteObj","assign","zoomLevel","value","_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","jsx","GestureHandlerRootView","GestureDetector","jsxs","View","style","styles","container","zoomSubject","useAnimatedStyle","transform","scaleX","scaleY","translateX","translateY","map","AnimatedTouchFeedback","animationDuration","onAnimationDone","index","DebugTouchPoint","StaticPin","exports","StyleSheet","create","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","_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","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","movementSensibility","doubleTapDelay","zoomStep","onLongPress","longPressDuration","contentWidth","contentHeight","visualTouchFeedbackEnabled","staticPinPosition","staticPinIcon","onStaticPinPositionChange","onStaticPinPositionMoveWorklet","disablePanOnInitialZoom","debug","children","propStaticPinPosition","propContentWidth","propContentHeight","onTransformWorklet","propZoomEnabled","propMaxZoom","propMinZoom","propPinchToZoomInSensitivity","propPinchToZoomOutSensitivity","propMovementSensibility","propPanEnabled","propDisablePanOnInitialZoom","propsInitialZoom","pinProps","offsetX","offsetY","zoom","lastGestureCenterPosition","lastGestureTouchDistance","gestureStarted","longPressTimeout","onTransformInvocationInitialized","singleTapTimeoutId","useRef","touches","doubleTapFirstTap","gestureType","useDerivedValue","onPanResponderGrant","useLatestCallback","onPanResponderEnd","onZoomEnd","onShiftingEnd","_getZoomableViewEventObject","overwriteObj","assign","zoomLevel","value","_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","jsx","GestureHandlerRootView","GestureDetector","jsxs","View","style","styles","container","zoomSubject","useAnimatedStyle","transform","scaleX","scaleY","translateX","translateY","map","AnimatedTouchFeedback","animationDuration","onAnimationDone","index","DebugTouchPoint","StaticPin","exports","StyleSheet","create","alignItems","flex","justifyContent","overflow","_default"],"sourceRoot":"../../src","sources":["ReactNativeZoomableView.tsx"],"mappings":"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","ignoreList":[]} diff --git a/lib/module/ReactNativeZoomableView.js b/lib/module/ReactNativeZoomableView.js index 73addca..e10f0df 100644 --- a/lib/module/ReactNativeZoomableView.js +++ b/lib/module/ReactNativeZoomableView.js @@ -670,7 +670,7 @@ const ReactNativeZoomableView = (props, ref) => { return true; } if (e.numberOfTouches === 2) { - runOnJS(clearLongPressTimeout); + runOnJS(clearLongPressTimeout)(); // change some measurement states when switching gesture to ensure a smooth transition if (gestureType.value !== 'pinch') { @@ -701,13 +701,16 @@ const ReactNativeZoomableView = (props, ref) => { }; const firstTouch = useSharedValue(undefined); const gesture = Gesture.Manual().onTouchesDown((e, stateManager) => { - stateManager.activate(); - stateManager.begin(); - firstTouch.value = { - x: e.allTouches[0].x, - y: e.allTouches[0].y - }; - _handlePanResponderGrant(e); + // 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); diff --git a/lib/module/ReactNativeZoomableView.js.map b/lib/module/ReactNativeZoomableView.js.map index c541325..ab27d8c 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","StyleSheet","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","jsx","_jsx","jsxs","_jsxs","ReactNativeZoomableView","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","movementSensibility","doubleTapDelay","zoomStep","onLongPress","longPressDuration","contentWidth","contentHeight","visualTouchFeedbackEnabled","staticPinPosition","staticPinIcon","onStaticPinPositionChange","onStaticPinPositionMoveWorklet","disablePanOnInitialZoom","debug","children","propStaticPinPosition","propContentWidth","propContentHeight","onTransformWorklet","propZoomEnabled","propMaxZoom","propMinZoom","propPinchToZoomInSensitivity","propPinchToZoomOutSensitivity","propMovementSensibility","propPanEnabled","propDisablePanOnInitialZoom","propsInitialZoom","pinProps","offsetX","offsetY","zoom","lastGestureCenterPosition","lastGestureTouchDistance","gestureStarted","longPressTimeout","onTransformInvocationInitialized","singleTapTimeoutId","touches","doubleTapFirstTap","gestureType","onPanResponderGrant","onPanResponderEnd","onZoomEnd","onShiftingEnd","_getZoomableViewEventObject","overwriteObj","Object","assign","zoomLevel","value","_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","style","styles","container","zoomSubject","transform","scaleX","scaleY","translateX","translateY","map","animationDuration","onAnimationDone","index","create","alignItems","flex","justifyContent","overflow"],"sourceRoot":"../../src","sources":["ReactNativeZoomableView.tsx"],"mappings":";;AAAA,SAASA,QAAQ,EAAEC,QAAQ,QAAQ,QAAQ;AAC3C,OAAOC,KAAK,IAEVC,mBAAmB,EACnBC,eAAe,EACfC,OAAO,EACPC,MAAM,EACNC,QAAQ,QACH,OAAO;AACd,SAASC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAC/C,SACEC,OAAO,EACPC,eAAe,EACfC,sBAAsB,QAEjB,8BAA8B;AACrC,OAAOC,QAAQ,IACbC,eAAe,EACfC,WAAW,EACXC,OAAO,EACPC,mBAAmB,EACnBC,gBAAgB,EAChBC,eAAe,EACfC,cAAc,EACdC,UAAU,QACL,yBAAyB;AAEhC,SAASC,eAAe,QAAQ,cAAc;AAC9C,SAASC,qBAAqB,QAAQ,cAAc;AACpD,SAASC,SAAS,QAAQ,wBAAwB;AAClD,SAASC,eAAe,QAAQ,eAAe;AAC/C,SACEC,sBAAsB,EACtBC,wBAAwB,EACxBC,mCAAmC,QAC9B,UAAU;AACjB,SAASC,+BAA+B,QAAQ,+BAA+B;AAC/E,SAASC,eAAe,QAAQ,0BAA0B;AAC1D,SAASC,cAAc,QAAQ,wBAAwB;AACvD,SAASC,iBAAiB,QAAQ,2BAA2B;AAC7D,SAASC,cAAc,QAAQ,wBAAwB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAiBxD,MAAMC,uBAGL,GAAGA,CAACC,KAAK,EAAEC,GAAG,KAAK;EAClB,MAAM;IACJC,UAAU,EAAEC,qBAAqB;IACjCC,OAAO,EAAEC,kBAAkB;IAC3BC,aAAa;IACbC,cAAc;IACdC,SAAS;IACTC;EACF,CAAC,GAAGf,cAAc,CAAC,CAAC;EAEpB,MAAM,CAACgB,OAAO,EAAEC,UAAU,CAAC,GAAG3C,QAAQ,CAAC;IAAE4C,KAAK,EAAE,CAAC;IAAEC,MAAM,EAAE;EAAE,CAAC,CAAC;EAC/D,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAG/C,QAAQ,CAAe,EAAE,CAAC;EAElE,MAAM;IAAEgD,WAAW;IAAEC,cAAc;IAAEC;EAAoB,CAAC,GAAG1B,cAAc,CAAC,CAAC;EAE7E,MAAM2B,iCAAiC,GAAGtC,cAAc,CACtDuC,SACF,CAAC;EAEDpB,KAAK,GAAGtC,QAAQ,CAAC,CAAC,CAAC,EAAEsC,KAAK,EAAE;IAC1BqB,WAAW,EAAE,IAAI;IACjBC,UAAU,EAAE,IAAI;IAChBC,WAAW,EAAE,CAAC;IACdC,cAAc,EAAE,CAAC;IACjBC,cAAc,EAAE,CAAC;IACjBC,OAAO,EAAE,GAAG;IACZC,OAAO,EAAE,GAAG;IACZC,wBAAwB,EAAE,CAAC;IAC3BC,yBAAyB,EAAE,CAAC;IAC5BC,mBAAmB,EAAE,CAAC;IACtBC,cAAc,EAAE,GAAG;IACnBC,QAAQ,EAAE,GAAG;IACbC,WAAW,EAAEb,SAAS;IACtBc,iBAAiB,EAAE,GAAG;IACtBC,YAAY,EAAEf,SAAS;IACvBgB,aAAa,EAAEhB,SAAS;IACxBiB,0BAA0B,EAAE,IAAI;IAChCC,iBAAiB,EAAElB,SAAS;IAC5BmB,aAAa,EAAEnB,SAAS;IACxBoB,yBAAyB,EAAEpB,SAAS;IACpCqB,8BAA8B,EAAErB,SAAS;IACzCsB,uBAAuB,EAAE;EAC3B,CAAC,CAAC;EAEF,MAAM;IACJC,KAAK;IACLJ,aAAa;IACbK,QAAQ;IACRP,0BAA0B;IAC1BN,cAAc;IACdO,iBAAiB,EAAEO,qBAAqB;IACxCV,YAAY,EAAEW,gBAAgB;IAC9BV,aAAa,EAAEW,iBAAiB;IAChCC,kBAAkB;IAClBP,8BAA8B;IAC9BpB,WAAW,EAAE4B,eAAe;IAC5BvB,OAAO,EAAEwB,WAAW;IACpBvB,OAAO,EAAEwB,WAAW;IACpBvB,wBAAwB,EAAEwB,4BAA4B;IACtDvB,yBAAyB,EAAEwB,6BAA6B;IACxDvB,mBAAmB,EAAEwB,uBAAuB;IAC5ChC,UAAU,EAAEiC,cAAc;IAC1Bb,uBAAuB,EAAEc,2BAA2B;IACpDjC,WAAW,EAAEkC,gBAAgB;IAC7BC;EACF,CAAC,GAAG1D,KAAK;EAET,MAAM2D,OAAO,GAAG9E,cAAc,CAAC,CAAC,CAAC;EACjC,MAAM+E,OAAO,GAAG/E,cAAc,CAAC,CAAC,CAAC;EAEjC,MAAMgF,IAAI,GAAGhF,cAAc,CAAC,CAAC,CAAC;EAE9B,MAAMiF,yBAAyB,GAAGjF,cAAc,CAAe,IAAI,CAAC;EACpE,MAAMkF,wBAAwB,GAAGlF,cAAc,CAAgB,GAAG,CAAC;EACnE,MAAMmF,cAAc,GAAGnF,cAAc,CAAC,KAAK,CAAC;;EAE5C;AACF;AACA;EACE,MAAMoF,gBAAgB,GAAGpF,cAAc,CACrCuC,SACF,CAAC;EACD,MAAM8C,gCAAgC,GAAGrF,cAAc,CAAC,KAAK,CAAC;EAC9D,MAAMsF,kBAAkB,GAAGpG,MAAM,CAAiB,CAAC;EACnD,MAAMqG,OAAO,GAAGvF,cAAc,CAAe,EAAE,CAAC;EAChD,MAAMwF,iBAAiB,GAAGxF,cAAc,CAAyBuC,SAAS,CAAC;EAC3E,MAAMkD,WAAW,GAAGzF,cAAc,CAAgCuC,SAAS,CAAC;EAE5E,MAAMkB,iBAAiB,GAAG1D,eAAe,CAAC,MAAMiE,qBAAqB,CAAC;EACtE,MAAMV,YAAY,GAAGvD,eAAe,CAAC,MAAMkE,gBAAgB,CAAC;EAC5D,MAAMV,aAAa,GAAGxD,eAAe,CAAC,MAAMmE,iBAAiB,CAAC;EAC9D,MAAM1B,WAAW,GAAGzC,eAAe,CAAC,MAAMqE,eAAe,CAAC;EAC1D,MAAMvB,OAAO,GAAG9C,eAAe,CAAC,MAAMsE,WAAW,CAAC;EAClD,MAAMvB,OAAO,GAAG/C,eAAe,CAAC,MAAMuE,WAAW,CAAC;EAClD,MAAMvB,wBAAwB,GAAGhD,eAAe,CAC9C,MAAMwE,4BACR,CAAC;EACD,MAAMvB,yBAAyB,GAAGjD,eAAe,CAC/C,MAAMyE,6BACR,CAAC;EACD,MAAM/B,UAAU,GAAG1C,eAAe,CAAC,MAAM2E,cAAc,CAAC;EACxD,MAAMb,uBAAuB,GAAG9D,eAAe,CAC7C,MAAM4E,2BACR,CAAC;EACD,MAAMjC,WAAW,GAAG3C,eAAe,CAAC,MAAM6E,gBAAgB,CAAC;EAC3D,MAAM3B,mBAAmB,GAAGlD,eAAe,CAAC,MAAM0E,uBAAuB,CAAC;EAC1E,MAAMiB,mBAAmB,GAAG9E,iBAAiB,CAC3CO,KAAK,CAACuE,mBAAmB,KAAK,MAAMnD,SAAS,CAC/C,CAAC;EACD,MAAMoD,iBAAiB,GAAG/E,iBAAiB,CACzCO,KAAK,CAACwE,iBAAiB,KAAK,MAAMpD,SAAS,CAC7C,CAAC;EACD,MAAMqD,SAAS,GAAGhF,iBAAiB,CAACO,KAAK,CAACyE,SAAS,KAAK,MAAMrD,SAAS,CAAC,CAAC;EACzE,MAAMsD,aAAa,GAAGjF,iBAAiB,CACrCO,KAAK,CAAC0E,aAAa,KAAK,MAAMtD,SAAS,CACzC,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;EACE,MAAMuD,2BAA2B,GAAGA,CAClCC,YAAwC,GAAG,CAAC,CAAC,KACvB;IACtB,SAAS;;IAET,OAAOC,MAAM,CAACC,MAAM,CAClB;MACEC,SAAS,EAAElB,IAAI,CAACmB,KAAK;MACrBrB,OAAO,EAAEA,OAAO,CAACqB,KAAK;MACtBpB,OAAO,EAAEA,OAAO,CAACoB,KAAK;MACtBzE,cAAc,EAAEA,cAAc,CAACyE,KAAK;MACpC1E,aAAa,EAAEA,aAAa,CAAC0E;IAC/B,CAAC,EACDJ,YACF,CAAC;EACH,CAAC;EAED,MAAMK,kBAAkB,GAAGA,CAAA,KAAM;IAC/B,SAAS;;IAET,IAAI,CAAC3C,iBAAiB,CAAC0C,KAAK,EAAE;IAC9B,IAAI,CAAC7C,YAAY,CAAC6C,KAAK,IAAI,CAAC5C,aAAa,CAAC4C,KAAK,EAAE;IAEjD,OAAO1F,+BAA+B,CAAC;MACrC4F,gBAAgB,EAAE;QAChBC,CAAC,EAAE7C,iBAAiB,CAAC0C,KAAK,CAACG,CAAC;QAC5BC,CAAC,EAAE9C,iBAAiB,CAAC0C,KAAK,CAACI;MAC7B,CAAC;MACDC,SAAS,EAAE;QACTxE,MAAM,EAAEuB,aAAa,CAAC4C,KAAK;QAC3BpE,KAAK,EAAEuB,YAAY,CAAC6C;MACtB,CAAC;MACDM,aAAa,EAAEX,2BAA2B,CAAC;QACzChB,OAAO,EAAEA,OAAO,CAACqB,KAAK;QACtBpB,OAAO,EAAEA,OAAO,CAACoB,KAAK;QACtBD,SAAS,EAAElB,IAAI,CAACmB;MAClB,CAAC;IACH,CAAC,CAAC;EACJ,CAAC;EAED,MAAMO,gBAAgB,GAAG9F,iBAAiB,CAAC,MAAM;IAC/C,MAAM+F,QAAQ,GAAGP,kBAAkB,CAAC,CAAC;IACrC,IAAI,CAACO,QAAQ,EAAE;IACfxF,KAAK,CAACwC,yBAAyB,GAAGgD,QAAQ,CAAC;EAC7C,CAAC,CAAC;EAEF,MAAMC,SAAS,GAAGhG,iBAAiB,CAAEiG,KAAiB,IAAK;IACzDtB,OAAO,CAACY,KAAK,CAACW,IAAI,CAACD,KAAK,CAAC;IACzB3E,eAAe,CAAC,CAAC,GAAGqD,OAAO,CAACY,KAAK,CAAC,CAAC;EACrC,CAAC,CAAC;EAEF,MAAMY,YAAY,GAAGnG,iBAAiB,CAAEiG,KAAiB,IAAK;IAC5DtB,OAAO,CAACY,KAAK,CAACa,MAAM,CAACzB,OAAO,CAACY,KAAK,CAACc,OAAO,CAACJ,KAAK,CAAC,EAAE,CAAC,CAAC;IACrD3E,eAAe,CAAC,CAAC,GAAGqD,OAAO,CAACY,KAAK,CAAC,CAAC;EACrC,CAAC,CAAC;EAEF,MAAMxC,yBAAyB,GAAG/C,iBAAiB,CACjDO,KAAK,CAACwC,yBAAyB,KAAK,MAAMpB,SAAS,CACrD,CAAC;EAED,MAAM2E,kCAAkC,GAAGjI,OAAO,CAChD,MAAML,QAAQ,CAAC+E,yBAAyB,EAAE,GAAG,CAAC,EAC9C,EACF,CAAC;;EAED;AACF;AACA;AACA;EACE,MAAMwD,kBAAkB,GAAGA,CAAA,KAAM;IAC/B,SAAS;;IAET,MAAMC,iBAAiB,GAAGtB,2BAA2B,CAAC,CAAC;IACvD,MAAMa,QAAQ,GAAGP,kBAAkB,CAAC,CAAC;IAErC,IAAI,CAACgB,iBAAiB,CAAC3F,aAAa,IAAI,CAAC2F,iBAAiB,CAAC1F,cAAc,EACvE,OAAO;MAAE2F,UAAU,EAAE;IAAM,CAAC;IAE9BlD,kBAAkB,GAAGiD,iBAAiB,CAAC;IAEvC,IAAIT,QAAQ,EAAE;MACZ/C,8BAA8B,GAAG+C,QAAQ,CAAC;MAC1C/G,OAAO,CAACsH,kCAAkC,CAAC,CAACP,QAAQ,CAAC;IACvD;IAEA,OAAO;MAAEU,UAAU,EAAE;IAAK,CAAC;EAC7B,CAAC;EAEDrI,eAAe,CAAC,MAAM;IACpB,IAAImC,KAAK,CAACuB,WAAW,EAAEsC,IAAI,CAACmB,KAAK,GAAGhF,KAAK,CAACuB,WAAW;IACrD,IAAIvB,KAAK,CAACwB,cAAc,IAAI,IAAI,EAAEmC,OAAO,CAACqB,KAAK,GAAGhF,KAAK,CAACwB,cAAc;IACtE,IAAIxB,KAAK,CAACyB,cAAc,IAAI,IAAI,EAAEmC,OAAO,CAACoB,KAAK,GAAGhF,KAAK,CAACyB,cAAc;EACxE,CAAC,EAAE,EAAE,CAAC;EAEN5D,eAAe,CAAC,MAAM;IACpB,IAAI,CAACoF,eAAe,IAAI1B,WAAW,CAACyD,KAAK,EAAE;MACzCnB,IAAI,CAACmB,KAAK,GAAGzD,WAAW,CAACyD,KAAK;IAChC;EACF,CAAC,EAAE,CAAC/B,eAAe,CAAC,CAAC;EAErBvE,mBAAmB,CACjBiG,2BAA2B,EAC3B,MAAM;IACJ,IACE,CAACT,gCAAgC,CAACc,KAAK,IACvCgB,kBAAkB,CAAC,CAAC,CAACE,UAAU,EAC/B;MACAhC,gCAAgC,CAACc,KAAK,GAAG,IAAI;MAC7C;IACF;IAEA,IAAId,gCAAgC,CAACc,KAAK,EAAEgB,kBAAkB,CAAC,CAAC;EAClE,CAAC;EACD;EACA;EACA;EACA,EACF,CAAC;EAED,MAAMG,QAAQ,GAAG1G,iBAAiB,CAACO,KAAK,CAACmG,QAAQ,KAAK,MAAM/E,SAAS,CAAC,CAAC;;EAEvE;EACA1C,mBAAmB,CACjB,MAAM,CACJ6B,cAAc,CAACyE,KAAK,EACpB1E,aAAa,CAAC0E,KAAK,EACnBxE,SAAS,CAACwE,KAAK,EACfvE,SAAS,CAACuE,KAAK,CAChB,EACD,MAAM;IACJ;IACA;IACA;IACA,MAAMoB,MAAM,GAAG;MACbxF,KAAK,EAAEN,aAAa,CAAC0E,KAAK;MAC1BnE,MAAM,EAAEN,cAAc,CAACyE,KAAK;MAC5BG,CAAC,EAAE3E,SAAS,CAACwE,KAAK;MAClBI,CAAC,EAAE3E,SAAS,CAACuE;IACf,CAAC;IACDvG,OAAO,CAAC0H,QAAQ,CAAC,CAAC;MAAEE,WAAW,EAAE;QAAED;MAAO;IAAE,CAAC,CAAC;EAChD,CACF,CAAC;;EAED;EACAvI,eAAe,CAAC,MAAM;IACpB,IAAIqG,gCAAgC,CAACc,KAAK,EAAEgB,kBAAkB,CAAC,CAAC;EAClE,CAAC,EAAE,CAAChG,KAAK,CAACsC,iBAAiB,EAAE6C,CAAC,EAAEnF,KAAK,CAACsC,iBAAiB,EAAE8C,CAAC,CAAC,CAAC;EAE5D,MAAMkB,wBAAwB,GAAG7G,iBAAiB,CAAE8G,CAAoB,IAAK;IAC3E,IAAIvG,KAAK,CAACiC,WAAW,IAAIjC,KAAK,CAACkC,iBAAiB,EAAE;MAChD+B,gBAAgB,CAACe,KAAK,GAAGwB,UAAU,CAAC,MAAM;QACxCxG,KAAK,CAACiC,WAAW,GAAGsE,CAAC,EAAE5B,2BAA2B,CAAC,CAAC,CAAC;QACrDV,gBAAgB,CAACe,KAAK,GAAG5D,SAAS;MACpC,CAAC,EAAEpB,KAAK,CAACkC,iBAAiB,CAAC;IAC7B;EACF,CAAC,CAAC;EACF,MAAMuE,qBAAqB,GAAGhH,iBAAiB,CAAC,MAAM;IACpD,IAAIwE,gBAAgB,CAACe,KAAK,EAAE;MAC1B0B,YAAY,CAACzC,gBAAgB,CAACe,KAAK,CAAC;MACpCf,gBAAgB,CAACe,KAAK,GAAG5D,SAAS;IACpC;EACF,CAAC,CAAC;EAEF,MAAMuF,wBAAwB,GAAIJ,CAAoB,IAAK;IACzD,SAAS;;IAET9H,OAAO,CAAC6H,wBAAwB,CAAC,CAACC,CAAC,CAAC;IAEpC9H,OAAO,CAAC8F,mBAAmB,CAAC,CAACgC,CAAC,EAAE5B,2BAA2B,CAAC,CAAC,CAAC;IAE9DpG,eAAe,CAACsF,IAAI,CAAC;IACrBtF,eAAe,CAACoF,OAAO,CAAC;IACxBpF,eAAe,CAACqF,OAAO,CAAC;IACxBI,cAAc,CAACgB,KAAK,GAAG,IAAI;EAC7B,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACE,MAAM4B,qCAAqC,GAAIC,kBAAyB,IAAK;IAC3E,SAAS;;IAET,IAAIC,KAAK,GAAG,IAAI;IAEhB,IAAIhD,yBAAyB,CAACkB,KAAK,IAAIlD,mBAAmB,CAACkD,KAAK,EAAE;MAChE,MAAM+B,EAAE,GAAGF,kBAAkB,CAAC1B,CAAC,GAAGrB,yBAAyB,CAACkB,KAAK,CAACG,CAAC;MACnE,MAAM6B,EAAE,GAAGH,kBAAkB,CAACzB,CAAC,GAAGtB,yBAAyB,CAACkB,KAAK,CAACI,CAAC;MAEnE,MAAM6B,MAAM,GAAGF,EAAE,GAAGlD,IAAI,CAACmB,KAAK,GAAGlD,mBAAmB,CAACkD,KAAK;MAC1D,MAAMkC,MAAM,GAAGF,EAAE,GAAGnD,IAAI,CAACmB,KAAK,GAAGlD,mBAAmB,CAACkD,KAAK;MAE1D8B,KAAK,GAAG;QACN3B,CAAC,EAAE8B,MAAM;QACT7B,CAAC,EAAE8B;MACL,CAAC;IACH;IAEApD,yBAAyB,CAACkB,KAAK,GAAG6B,kBAAkB;IAEpD,OAAOC,KAAK;EACd,CAAC;;EAED;AACF;AACA;EACE,MAAMK,eAAe,GAAIZ,CAAoB,IAAK;IAChD,SAAS;;IAET,IAAI,CAAClF,WAAW,CAAC2D,KAAK,EAAE;IAExB,MAAMoC,QAAQ,GAAGhI,wBAAwB,CAACmH,CAAC,CAAC;IAE5C,IAAI,CAACa,QAAQ,EAAE;IACf,IAAI,CAACrD,wBAAwB,CAACiB,KAAK,EAAE;;IAErC;IACA,MAAMqC,8BAA8B,GAClCD,QAAQ,GAAGrD,wBAAwB,CAACiB,KAAK;IAC3CjB,wBAAwB,CAACiB,KAAK,GAAGoC,QAAQ;IAEzC,MAAME,sBAAsB,GAC1BD,8BAA8B,GAAG,CAAC,GAC9BxF,yBAAyB,CAACmD,KAAK,GAC/BpD,wBAAwB,CAACoD,KAAK;IAEpC,IAAIsC,sBAAsB,IAAI,IAAI,EAAE;IACpC,MAAMC,WAAW,GAAGF,8BAA8B,GAAG,CAAC;IACtD;IACA;IACA,MAAMG,gCAAgC,GACpCD,WAAW,IAAI,CAAC,GAAID,sBAAsB,GAAG,CAAC,GAAI,GAAG,CAAC;IAExD,IAAIG,YAAY,GAAG5D,IAAI,CAACmB,KAAK,IAAI,CAAC,GAAGwC,gCAAgC,CAAC;;IAEtE;IACA,IAAI9F,OAAO,CAACsD,KAAK,IAAI,IAAI,IAAIyC,YAAY,GAAG/F,OAAO,CAACsD,KAAK,EAAE;MACzDyC,YAAY,GAAG/F,OAAO,CAACsD,KAAK;IAC9B;IAEA,IAAIrD,OAAO,CAACqD,KAAK,IAAI,IAAI,IAAIyC,YAAY,GAAG9F,OAAO,CAACqD,KAAK,EAAE;MACzDyC,YAAY,GAAG9F,OAAO,CAACqD,KAAK;IAC9B;IAEA,MAAM6B,kBAAkB,GAAG1H,sBAAsB,CAACoH,CAAC,CAAC;IAEpD,IAAI,CAACM,kBAAkB,EAAE;IAEzB,IAAIa,UAAU,GAAG;MACfvC,CAAC,EAAE0B,kBAAkB,CAAC1B,CAAC;MACvBC,CAAC,EAAEyB,kBAAkB,CAACzB;IACxB,CAAC;IAED,IAAI9C,iBAAiB,CAAC0C,KAAK,EAAE;MAC3B;MACA;MACA0C,UAAU,GAAG;QACXvC,CAAC,EAAE7C,iBAAiB,CAAC0C,KAAK,CAACG,CAAC;QAC5BC,CAAC,EAAE9C,iBAAiB,CAAC0C,KAAK,CAACI;MAC7B,CAAC;IACH;;IAEA;IACAzC,KAAK,IAAIlE,OAAO,CAACyC,mBAAmB,CAAC,CAACqF,CAAC,EAAEmB,UAAU,CAAC;IAEpD,MAAMC,UAAU,GAAGhE,OAAO,CAACqB,KAAK;IAChC,MAAM4C,UAAU,GAAGhE,OAAO,CAACoB,KAAK;IAChC,MAAM6C,QAAQ,GAAGhE,IAAI,CAACmB,KAAK;IAC3B,MAAM8C,QAAQ,GAAGL,YAAY;IAE7B,IAAI,CAAClH,cAAc,CAACyE,KAAK,IAAI,CAAC1E,aAAa,CAAC0E,KAAK,EAAE;IAEnD,IAAI+C,UAAU,GAAG1I,mCAAmC,CAClDuI,UAAU,EACVrH,cAAc,CAACyE,KAAK,EACpB6C,QAAQ,EACRC,QAAQ,EACRJ,UAAU,CAACtC,CACb,CAAC;IACD,IAAI4C,UAAU,GAAG3I,mCAAmC,CAClDsI,UAAU,EACVrH,aAAa,CAAC0E,KAAK,EACnB6C,QAAQ,EACRC,QAAQ,EACRJ,UAAU,CAACvC,CACb,CAAC;IAED,MAAM8C,WAAW,GACfrB,qCAAqC,CAACC,kBAAkB,CAAC;IAC3D,IAAIoB,WAAW,EAAE;MACfD,UAAU,IAAIC,WAAW,CAAC9C,CAAC;MAC3B4C,UAAU,IAAIE,WAAW,CAAC7C,CAAC;IAC7B;IAEAzB,OAAO,CAACqB,KAAK,GAAGgD,UAAU;IAC1BpE,OAAO,CAACoB,KAAK,GAAG+C,UAAU;IAC1BlE,IAAI,CAACmB,KAAK,GAAG8C,QAAQ;EACvB,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACE,MAAMI,qBAAqB,GAAGA,CAACF,UAAkB,EAAED,UAAkB,KAAK;IACxE,SAAS;;IAETpE,OAAO,CAACqB,KAAK,GAAGgD,UAAU;IAC1BpE,OAAO,CAACoB,KAAK,GAAG+C,UAAU;EAC5B,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACE,MAAMI,eAAe,GAAI5B,CAAoB,IAAK;IAChD,SAAS;;IACT;IACA,IACE,CAACjF,UAAU,CAAC0D,KAAK,IAChBtC,uBAAuB,CAACsC,KAAK,IAAInB,IAAI,CAACmB,KAAK,KAAKzD,WAAW,CAACyD,KAAM,EACnE;MACA;IACF;IACA,MAAM8B,KAAK,GAAGF,qCAAqC,CAAC;MAClDzB,CAAC,EAAEoB,CAAC,CAAC6B,UAAU,CAAC,CAAC,CAAC,CAACjD,CAAC;MACpBC,CAAC,EAAEmB,CAAC,CAAC6B,UAAU,CAAC,CAAC,CAAC,CAAChD;IACrB,CAAC,CAAC;IACF,IAAI,CAAC0B,KAAK,EAAE;IAEZ,MAAMkB,UAAU,GAAGrE,OAAO,CAACqB,KAAK,GAAG8B,KAAK,CAAC3B,CAAC;IAC1C,MAAM4C,UAAU,GAAGnE,OAAO,CAACoB,KAAK,GAAG8B,KAAK,CAAC1B,CAAC;IAE1C,IAAIzC,KAAK,EAAE;MACT,MAAMwC,CAAC,GAAGoB,CAAC,CAAC6B,UAAU,CAAC,CAAC,CAAC,CAACjD,CAAC;MAC3B,MAAMC,CAAC,GAAGmB,CAAC,CAAC6B,UAAU,CAAC,CAAC,CAAC,CAAChD,CAAC;MAC3B3G,OAAO,CAACwC,cAAc,CAAC,CAAC,CAAC;QAAEkE,CAAC;QAAEC;MAAE,CAAC,CAAC,CAAC;IACrC;IAEA8C,qBAAqB,CAACF,UAAU,EAAED,UAAU,CAAC;EAC/C,CAAC;EAED,MAAMM,QAAQ,GAAGxJ,cAAc,CAAS,CAAC,CAAC;EAC1C,MAAMyJ,iBAAiB,GAAGzJ,cAAc,CAAoBuC,SAAS,CAAC;;EAEtE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMmH,YAAY,GAAG9I,iBAAiB,CACpC,CAACgI,YAAoB,EAAEC,UAAkB,KAAK;IAC5C,IAAI,CAAC1H,KAAK,CAACqB,WAAW,EAAE,OAAO,KAAK;IACpC,IAAIrB,KAAK,CAAC0B,OAAO,IAAI+F,YAAY,GAAGzH,KAAK,CAAC0B,OAAO,EAAE,OAAO,KAAK;IAC/D,IAAI1B,KAAK,CAAC2B,OAAO,IAAI8F,YAAY,GAAGzH,KAAK,CAAC2B,OAAO,EAAE,OAAO,KAAK;;IAE/D;IACA;IACA2G,iBAAiB,CAACtD,KAAK,GAAG0C,UAAU;IACpCW,QAAQ,CAACrD,KAAK,GAAGnB,IAAI,CAACmB,KAAK;;IAE3B;IACAnB,IAAI,CAACmB,KAAK,GAAGlG,UAAU,CAAC2I,YAAY,EAAE1I,eAAe,EAAE,MAAM;MAC3D,QAAQ;;MAER;MACAuJ,iBAAiB,CAACtD,KAAK,GAAG5D,SAAS;IACrC,CAAC,CAAC;IAEF,OAAO,IAAI;EACb,CACF,CAAC;;EAED;EACA;EACA1C,mBAAmB,CACjB,MAAMmF,IAAI,CAACmB,KAAK,EACfwD,OAAO,IAAK;IACX,IAAI,CAACF,iBAAiB,CAACtD,KAAK,EAAE;IAC9BrB,OAAO,CAACqB,KAAK,GAAG3F,mCAAmC,CACjDsE,OAAO,CAACqB,KAAK,EACb1E,aAAa,CAAC0E,KAAK,EACnBqD,QAAQ,CAACrD,KAAK,EACdwD,OAAO,EACPF,iBAAiB,CAACtD,KAAK,CAACG,CAC1B,CAAC;IACDvB,OAAO,CAACoB,KAAK,GAAG3F,mCAAmC,CACjDuE,OAAO,CAACoB,KAAK,EACbzE,cAAc,CAACyE,KAAK,EACpBqD,QAAQ,CAACrD,KAAK,EACdwD,OAAO,EACPF,iBAAiB,CAACtD,KAAK,CAACI,CAC1B,CAAC;IACDiD,QAAQ,CAACrD,KAAK,GAAGwD,OAAO;EAC1B,CACF,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACE,MAAMC,gBAAgB,GAAGhJ,iBAAiB,CAAE8G,CAAoB,IAAK;IACnE,MAAM;MAAEmC,iBAAiB;MAAEC,gBAAgB;MAAEC;IAAsB,CAAC,GAClE5I,KAAK;IAEP0I,iBAAiB,GAAGnC,CAAC,EAAE5B,2BAA2B,CAAC,CAAC,CAAC;IAErD,MAAMkE,YAAY,GAAGtJ,eAAe,CAAC;MACnCwF,SAAS,EAAElB,IAAI,CAACmB,KAAK;MACrBhD,QAAQ,EAAEhC,KAAK,CAACgC,QAAQ;MACxBN,OAAO,EAAE1B,KAAK,CAAC0B,OAAO;MACtBH,WAAW,EAAEvB,KAAK,CAACuB;IACrB,CAAC,CAAC;IACF,IAAIsH,YAAY,IAAI,IAAI,EAAE;;IAE1B;IACA,MAAMC,uBAAuB,GAAG;MAC9B3D,CAAC,EAAEoB,CAAC,CAAC6B,UAAU,CAAC,CAAC,CAAC,CAACjD,CAAC;MACpBC,CAAC,EAAEmB,CAAC,CAAC6B,UAAU,CAAC,CAAC,CAAC,CAAChD;IACrB,CAAC;;IAED;IACA,IAAIwD,qBAAqB,EAAE;MACzBE,uBAAuB,CAAC3D,CAAC,GAAG,CAAC;MAC7B2D,uBAAuB,CAAC1D,CAAC,GAAG,CAAC;IAC/B;IAEAmD,YAAY,CAACM,YAAY,EAAEC,uBAAuB,CAAC;IAEnDH,gBAAgB,GACdpC,CAAC,EACD5B,2BAA2B,CAAC;MAAEI,SAAS,EAAE8D;IAAa,CAAC,CACzD,CAAC;EACH,CAAC,CAAC;;EAEF;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAME,oBAAoB,GAAIxC,CAAoB,IAAK;IACrD,MAAMyC,GAAG,GAAGC,IAAI,CAACD,GAAG,CAAC,CAAC;IACtB,IACE7H,iCAAiC,CAAC6D,KAAK,IACvChF,KAAK,CAAC+B,cAAc,IACpBiH,GAAG,GAAG7H,iCAAiC,CAAC6D,KAAK,GAAGhF,KAAK,CAAC+B,cAAc,EACpE;MACAsC,iBAAiB,CAACW,KAAK,IACrBS,SAAS,CAAC;QACR,GAAGpB,iBAAiB,CAACW,KAAK;QAC1BkE,EAAE,EAAEF,GAAG,CAACG,QAAQ,CAAC,CAAC;QAClBC,WAAW,EAAE;MACf,CAAC,CAAC;MACJjF,kBAAkB,CAACkF,OAAO,IAAI3C,YAAY,CAACvC,kBAAkB,CAACkF,OAAO,CAAC;MACtE,OAAOlI,iCAAiC,CAAC6D,KAAK;MAC9C,OAAOb,kBAAkB,CAACkF,OAAO;MACjC,OAAOhF,iBAAiB,CAACW,KAAK;MAC9ByD,gBAAgB,CAAClC,CAAC,CAAC;IACrB,CAAC,MAAM;MACLpF,iCAAiC,CAAC6D,KAAK,GAAGgE,GAAG;MAC7C3E,iBAAiB,CAACW,KAAK,GAAG;QACxBkE,EAAE,EAAEF,GAAG,CAACG,QAAQ,CAAC,CAAC;QAClBhE,CAAC,EAAEoB,CAAC,CAAC6B,UAAU,CAAC,CAAC,CAAC,CAACjD,CAAC;QACpBC,CAAC,EAAEmB,CAAC,CAAC6B,UAAU,CAAC,CAAC,CAAC,CAAChD;MACrB,CAAC;MACDK,SAAS,CAACpB,iBAAiB,CAACW,KAAK,CAAC;MAElCb,kBAAkB,CAACkF,OAAO,GAAG7C,UAAU,CAAC,MAAM;QAC5C,OAAOrF,iCAAiC,CAAC6D,KAAK;QAC9C,OAAOb,kBAAkB,CAACkF,OAAO;;QAEjC;QACA,IAAIrJ,KAAK,CAACsC,iBAAiB,IAAI+B,iBAAiB,CAACW,KAAK,EAAE;UACtD,MAAMsE,IAAI,GAAGtJ,KAAK,CAACsC,iBAAiB,CAAC6C,CAAC,GAAGd,iBAAiB,CAACW,KAAK,CAACG,CAAC;UAClE,MAAMoE,IAAI,GAAGvJ,KAAK,CAACsC,iBAAiB,CAAC8C,CAAC,GAAGf,iBAAiB,CAACW,KAAK,CAACI,CAAC;UAElE,MAAMoE,GAAG,GAAG7F,OAAO,CAACqB,KAAK,GAAGsE,IAAI,GAAGzF,IAAI,CAACmB,KAAK;UAC7C,MAAMyE,GAAG,GAAG7F,OAAO,CAACoB,KAAK,GAAGuE,IAAI,GAAG1F,IAAI,CAACmB,KAAK;UAE7C,MAAM0E,cAAc,GAAGlL,WAAW,CAAC,CAAC,CAAC;UACrC,MAAMmL,IAAI,GAAGA,CAAA,KAAM;YACjB,SAAS;;YACT,IAAI,EAAED,cAAc,CAAC1E,KAAK,IAAI,CAAC,EAAEvG,OAAO,CAAC8G,gBAAgB,CAAC,CAAC,CAAC;UAC9D,CAAC;UAED5B,OAAO,CAACqB,KAAK,GAAGlG,UAAU,CAAC0K,GAAG,EAAE;YAAEI,QAAQ,EAAE;UAAI,CAAC,EAAED,IAAI,CAAC;UACxD/F,OAAO,CAACoB,KAAK,GAAGlG,UAAU,CAAC2K,GAAG,EAAE;YAAEG,QAAQ,EAAE;UAAI,CAAC,EAAED,IAAI,CAAC;QAC1D;QAEA3J,KAAK,CAAC6J,WAAW,GAAGtD,CAAC,EAAE5B,2BAA2B,CAAC,CAAC,CAAC;MACvD,CAAC,EAAE3E,KAAK,CAAC+B,cAAc,CAAC;IAC1B;EACF,CAAC;EAED,MAAM+H,qBAAqB,GAAGrK,iBAAiB,CAC7C,CAAC+F,QAAe,EAAEoE,QAAiB,KAAK;IACtC,MAAM;MAAEtH,iBAAiB;MAAEH,YAAY;MAAEC;IAAc,CAAC,GAAGpC,KAAK;IAEhE,IAAI,CAACsC,iBAAiB,EAAE;IACxB,IAAI,CAAChC,aAAa,CAAC0E,KAAK,IAAI,CAACzE,cAAc,CAACyE,KAAK,EAAE;IACnD,IAAI,CAAC7C,YAAY,IAAI,CAACC,aAAa,EAAE;;IAErC;IACA,MAAM2H,IAAI,GAAGzH,iBAAiB,CAAC6C,CAAC,GAAG7E,aAAa,CAAC0E,KAAK,GAAG,CAAC;IAC1D,MAAMgF,IAAI,GAAG1H,iBAAiB,CAAC8C,CAAC,GAAG7E,cAAc,CAACyE,KAAK,GAAG,CAAC;IAE3D,MAAMgD,UAAU,GAAG7F,YAAY,GAAG,CAAC,GAAGqD,QAAQ,CAACL,CAAC,GAAG4E,IAAI,GAAGlG,IAAI,CAACmB,KAAK;IACpE,MAAM+C,UAAU,GAAG3F,aAAa,GAAG,CAAC,GAAGoD,QAAQ,CAACJ,CAAC,GAAG4E,IAAI,GAAGnG,IAAI,CAACmB,KAAK;IAErE,IAAI4E,QAAQ,EAAE;MACZjG,OAAO,CAACqB,KAAK,GAAGlG,UAAU,CAACkJ,UAAU,EAAE;QAAE4B;MAAS,CAAC,CAAC;MACpDhG,OAAO,CAACoB,KAAK,GAAGlG,UAAU,CAACiJ,UAAU,EAAE;QAAE6B;MAAS,CAAC,CAAC;IACtD,CAAC,MAAM;MACLjG,OAAO,CAACqB,KAAK,GAAGgD,UAAU;MAC1BpE,OAAO,CAACoB,KAAK,GAAG+C,UAAU;IAC5B;EACF,CACF,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMkC,YAAY,GAAGxK,iBAAiB,CAAEyK,eAAuB,IAAK;IAClE;IACAA,eAAe,KAAKlK,KAAK,CAACgC,QAAQ,IAAI,CAAC;IACvC,OAAOuG,YAAY,CAAC1E,IAAI,CAACmB,KAAK,GAAGkF,eAAe,CAAC;EACnD,CAAC,CAAC;;EAEF;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMC,YAAY,GAAG1K,iBAAiB,CACpC,CAACuI,UAAkB,EAAED,UAAkB,KAAK;IAC1C,IAAI,CAACzH,aAAa,CAAC0E,KAAK,IAAI,CAACzE,cAAc,CAACyE,KAAK,EAAE;IAEnD,MAAMrB,OAAO,GAAG,CAACqE,UAAU,GAAG1H,aAAa,CAAC0E,KAAK,GAAG,CAAC,IAAInB,IAAI,CAACmB,KAAK;IACnE,MAAMpB,OAAO,GAAG,CAACmE,UAAU,GAAGxH,cAAc,CAACyE,KAAK,GAAG,CAAC,IAAInB,IAAI,CAACmB,KAAK;IAEpEkD,qBAAqB,CAAC,CAACvE,OAAO,EAAE,CAACC,OAAO,CAAC;EAC3C,CACF,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMwG,YAAY,GAAG3K,iBAAiB,CACpC,CAAC4K,aAAqB,EAAEC,aAAqB,KAAK;IAChD,MAAMtC,UAAU,GACd,CAACrE,OAAO,CAACqB,KAAK,GAAGnB,IAAI,CAACmB,KAAK,GAAGqF,aAAa,IAAIxG,IAAI,CAACmB,KAAK;IAC3D,MAAM+C,UAAU,GACd,CAACnE,OAAO,CAACoB,KAAK,GAAGnB,IAAI,CAACmB,KAAK,GAAGsF,aAAa,IAAIzG,IAAI,CAACmB,KAAK;IAE3DkD,qBAAqB,CAACF,UAAU,EAAED,UAAU,CAAC;EAC/C,CACF,CAAC;EAEDnK,mBAAmB,CAACqC,GAAG,EAAE,OAAO;IAC9BsK,MAAM,EAAEhC,YAAY;IACpBiC,MAAM,EAAEP,YAAY;IACpBQ,MAAM,EAAEN,YAAY;IACpBO,MAAM,EAAEN,YAAY;IACpBO,eAAe,EAAEb,qBAAqB;IACtC,IAAI9F,cAAcA,CAAA,EAAG;MACnB,OAAOA,cAAc,CAACgB,KAAK;IAC7B;EACF,CAAC,CAAC,CAAC;;EAEH;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAM4F,sBAAsB,GAAIrE,CAAoB,IAAK;IACvD,SAAS;;IAET,IAAI,CAACjC,WAAW,CAACU,KAAK,EAAE;MACtBvG,OAAO,CAACsK,oBAAoB,CAAC,CAACxC,CAAC,CAAC;IAClC;IAEA9H,OAAO,CAACwC,cAAc,CAAC,CAAC,EAAE,CAAC;IAE3B6C,yBAAyB,CAACkB,KAAK,GAAG,IAAI;IAEtCvG,OAAO,CAACgI,qBAAqB,CAAC,CAAC,CAAC;IAEhChI,OAAO,CAAC+F,iBAAiB,CAAC,CAAC+B,CAAC,EAAE5B,2BAA2B,CAAC,CAAC,CAAC;IAE5D,IAAIL,WAAW,CAACU,KAAK,KAAK,OAAO,EAAE;MACjCvG,OAAO,CAACgG,SAAS,CAAC,CAAC8B,CAAC,EAAE5B,2BAA2B,CAAC,CAAC,CAAC;IACtD,CAAC,MAAM,IAAIL,WAAW,CAACU,KAAK,KAAK,OAAO,EAAE;MACxCvG,OAAO,CAACiG,aAAa,CAAC,CAAC6B,CAAC,EAAE5B,2BAA2B,CAAC,CAAC,CAAC;IAC1D;IAEA,IAAIrC,iBAAiB,CAAC0C,KAAK,EAAE;MAC3BvG,OAAO,CAAC8G,gBAAgB,CAAC,CAAC,CAAC;IAC7B;IAEAjB,WAAW,CAACU,KAAK,GAAG5D,SAAS;IAC7B4C,cAAc,CAACgB,KAAK,GAAG,KAAK;EAC9B,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAM6F,uBAAuB,GAAGA,CAC9BtE,CAAoB,EACpBuE,YAAwC,KACrC;IACH,SAAS;;IAET;IACA;IACA,IAAIvE,CAAC,CAACwE,eAAe,IAAI,CAAC,EAAE;MAC1B,IAAI,CAAC/G,cAAc,CAACgB,KAAK,EAAE;QACzB2B,wBAAwB,CAACJ,CAAC,CAAC;MAC7B;IACF,CAAC,MAAM;MACL,IAAIvC,cAAc,CAACgB,KAAK,EAAE;QACxB4F,sBAAsB,CAACrE,CAAC,CAAC;MAC3B;MACA,OAAO,IAAI;IACb;IAEA,IAAIA,CAAC,CAACwE,eAAe,KAAK,CAAC,EAAE;MAC3BtM,OAAO,CAACgI,qBAAqB,CAAC;;MAE9B;MACA,IAAInC,WAAW,CAACU,KAAK,KAAK,OAAO,EAAE;QACjClB,yBAAyB,CAACkB,KAAK,GAAG7F,sBAAsB,CAACoH,CAAC,CAAC;QAC3DxC,wBAAwB,CAACiB,KAAK,GAAG5F,wBAAwB,CAACmH,CAAC,CAAC;MAC9D;MACAjC,WAAW,CAACU,KAAK,GAAG,OAAO;MAC3BmC,eAAe,CAACZ,CAAC,CAAC;IACpB,CAAC,MAAM,IAAIA,CAAC,CAACwE,eAAe,KAAK,CAAC,EAAE;MAClC,MAAM;QAAEhE,EAAE;QAAEC;MAAG,CAAC,GAAG8D,YAAY;MAE/B,IAAI7G,gBAAgB,CAACe,KAAK,KAAKgG,IAAI,CAACC,GAAG,CAAClE,EAAE,CAAC,GAAG,CAAC,IAAIiE,IAAI,CAACC,GAAG,CAACjE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;QACpEvI,OAAO,CAACgI,qBAAqB,CAAC,CAAC,CAAC;MAClC;;MAEA;MACA,IAAInC,WAAW,CAACU,KAAK,KAAK,OAAO,EAAE;QACjClB,yBAAyB,CAACkB,KAAK,GAAG7F,sBAAsB,CAACoH,CAAC,CAAC;MAC7D;MAEA,MAAM2E,cAAc,GAAGF,IAAI,CAACC,GAAG,CAAClE,EAAE,CAAC,GAAG,CAAC,IAAIiE,IAAI,CAACC,GAAG,CAACjE,EAAE,CAAC,GAAG,CAAC;MAC3D,IAAIkE,cAAc,EAAE;QAClB5G,WAAW,CAACU,KAAK,GAAG,OAAO;QAC3BmD,eAAe,CAAC5B,CAAC,CAAC;MACpB;IACF;EACF,CAAC;EAED,MAAM4E,UAAU,GAAGtM,cAAc,CAAoBuC,SAAS,CAAC;EAC/D,MAAMgK,OAAO,GAAGjN,OAAO,CAACkN,MAAM,CAAC,CAAC,CAC7BC,aAAa,CAAC,CAAC/E,CAAC,EAAEgF,YAAY,KAAK;IAClCA,YAAY,CAACC,QAAQ,CAAC,CAAC;IACvBD,YAAY,CAACE,KAAK,CAAC,CAAC;IACpBN,UAAU,CAACnG,KAAK,GAAG;MAAEG,CAAC,EAAEoB,CAAC,CAAC6B,UAAU,CAAC,CAAC,CAAC,CAACjD,CAAC;MAAEC,CAAC,EAAEmB,CAAC,CAAC6B,UAAU,CAAC,CAAC,CAAC,CAAChD;IAAE,CAAC;IACjEuB,wBAAwB,CAACJ,CAAC,CAAC;EAC7B,CAAC,CAAC,CACDmF,aAAa,CAAEnF,CAAC,IAAK;IACpB,MAAMQ,EAAE,GAAGR,CAAC,CAAC6B,UAAU,CAAC,CAAC,CAAC,CAACjD,CAAC,IAAIgG,UAAU,CAACnG,KAAK,EAAEG,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM6B,EAAE,GAAGT,CAAC,CAAC6B,UAAU,CAAC,CAAC,CAAC,CAAChD,CAAC,IAAI+F,UAAU,CAACnG,KAAK,EAAEI,CAAC,IAAI,CAAC,CAAC;IACzDyF,uBAAuB,CAACtE,CAAC,EAAE;MAAEQ,EAAE;MAAEC;IAAG,CAAC,CAAC;EACxC,CAAC,CAAC,CACD2E,WAAW,CAAC,CAACpF,CAAC,EAAEgF,YAAY,KAAK;IAChC;IACA,IAAIhF,CAAC,CAACwE,eAAe,KAAK,CAAC,EAAE;MAC3BH,sBAAsB,CAACrE,CAAC,CAAC;MACzBgF,YAAY,CAACK,GAAG,CAAC,CAAC;IACpB;EACF,CAAC,CAAC,CACDC,kBAAkB,CAAC,CAACtF,CAAC,EAAEgF,YAAY,KAAK;IACvCX,sBAAsB,CAACrE,CAAC,CAAC;IACzBgF,YAAY,CAACK,GAAG,CAAC,CAAC;EACpB,CAAC,CAAC,CACDE,UAAU,CAAC,MAAM;IAChBX,UAAU,CAACnG,KAAK,GAAG5D,SAAS;EAC9B,CAAC,CAAC;EAEJ,oBACExB,IAAA,CAACvB,sBAAsB;IAAAuE,QAAA,eACrBhD,IAAA,CAACxB,eAAe;MAACgN,OAAO,EAAEA,OAAQ;MAAAxI,QAAA,eAChC9C,KAAA,CAAC5B;MACC;MAAA;QACA6N,KAAK,EAAEC,MAAM,CAACC,SAAU;QACxBhM,GAAG,EAAEE,qBAAsB;QAC3BgG,QAAQ,EAAE9F,kBAAmB;QAAAuC,QAAA,gBAE7BhD,IAAA,CAACtB,QAAQ,CAACJ,IAAI;UACZ6N,KAAK,EAAE;UACL;UACAC,MAAM,CAACE,WAAW,EAClBlM,KAAK,CAAC+L,KAAK,EACXpN,gBAAgB,CAAC,MAAM;YACrB,OAAO;cACLwN,SAAS,EAAE;cACT;cACA;cACA;gBAAEC,MAAM,EAAEvI,IAAI,CAACmB;cAAM,CAAC,EACtB;gBAAEqH,MAAM,EAAExI,IAAI,CAACmB;cAAM,CAAC,EACtB;gBAAEsH,UAAU,EAAE3I,OAAO,CAACqB;cAAM,CAAC,EAC7B;gBAAEuH,UAAU,EAAE3I,OAAO,CAACoB;cAAM,CAAC;YAEjC,CAAC;UACH,CAAC,CAAC,CACF;UAAApC,QAAA,EAEDA;QAAQ,CACI,CAAC,EAEfP,0BAA0B,IACzBvB,YAAY,CAAC0L,GAAG,CACb9G,KAAK,IACJ3D,cAAc,iBACZnC,IAAA,CAACZ,qBAAqB;UACpBmG,CAAC,EAAEO,KAAK,CAACP,CAAE;UACXC,CAAC,EAAEM,KAAK,CAACN,CAAE;UAEXqH,iBAAiB,EAAE1K,cAAe;UAClC2K,eAAe,EAAEA,CAAA,KAAM;YACrB9G,YAAY,CAACF,KAAK,CAAC;UACrB;QAAE,GAJGA,KAAK,CAACwD,EAKZ,CAEP,CAAC,EAGFlI,WAAW,CAACwL,GAAG,CAAC,CAAC;UAAErH,CAAC;UAAEC;QAAE,CAAC,EAAEuH,KAAK,KAAK;UACpC,oBAAO/M,IAAA,CAACV,eAAe;YAAaiG,CAAC,EAAEA,CAAE;YAACC,CAAC,EAAEA;UAAE,GAAlBuH,KAAoB,CAAC;QACpD,CAAC,CAAC,EAED9J,qBAAqB,iBACpBjD,IAAA,CAACX,SAAS;UACRsD,aAAa,EAAEA,aAAc;UAC7BD,iBAAiB,EAAEO,qBAAsB;UACzCnC,OAAO,EAAEA,OAAQ;UACjBC,UAAU,EAAEA,UAAW;UACvB+C,QAAQ,EAAEA;QAAS,CACpB,CACF;MAAA,CACG;IAAC,CACQ;EAAC,CACI,CAAC;AAE7B,CAAC;AACD,MAAMsI,MAAM,GAAG/N,UAAU,CAAC2O,MAAM,CAAC;EAC/BX,SAAS,EAAE;IACTY,UAAU,EAAE,QAAQ;IACpBC,IAAI,EAAE,CAAC;IACPC,cAAc,EAAE,QAAQ;IACxBC,QAAQ,EAAE,QAAQ;IAClBxH,QAAQ,EAAE;EACZ,CAAC;EACD0G,WAAW,EAAE;IACXW,UAAU,EAAE,QAAQ;IACpBC,IAAI,EAAE,CAAC;IACPC,cAAc,EAAE,QAAQ;IACxBnM,KAAK,EAAE;EACT;AACF,CAAC,CAAC;AAEF,eAAeb,uBAAuB;AAEtC,SAASA,uBAAuB","ignoreList":[]} +{"version":3,"names":["debounce","defaults","React","useImperativeHandle","useLayoutEffect","useMemo","useRef","useState","StyleSheet","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","jsx","_jsx","jsxs","_jsxs","ReactNativeZoomableView","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","movementSensibility","doubleTapDelay","zoomStep","onLongPress","longPressDuration","contentWidth","contentHeight","visualTouchFeedbackEnabled","staticPinPosition","staticPinIcon","onStaticPinPositionChange","onStaticPinPositionMoveWorklet","disablePanOnInitialZoom","debug","children","propStaticPinPosition","propContentWidth","propContentHeight","onTransformWorklet","propZoomEnabled","propMaxZoom","propMinZoom","propPinchToZoomInSensitivity","propPinchToZoomOutSensitivity","propMovementSensibility","propPanEnabled","propDisablePanOnInitialZoom","propsInitialZoom","pinProps","offsetX","offsetY","zoom","lastGestureCenterPosition","lastGestureTouchDistance","gestureStarted","longPressTimeout","onTransformInvocationInitialized","singleTapTimeoutId","touches","doubleTapFirstTap","gestureType","onPanResponderGrant","onPanResponderEnd","onZoomEnd","onShiftingEnd","_getZoomableViewEventObject","overwriteObj","Object","assign","zoomLevel","value","_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","style","styles","container","zoomSubject","transform","scaleX","scaleY","translateX","translateY","map","animationDuration","onAnimationDone","index","create","alignItems","flex","justifyContent","overflow"],"sourceRoot":"../../src","sources":["ReactNativeZoomableView.tsx"],"mappings":"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","ignoreList":[]} diff --git a/lib/typescript/ReactNativeZoomableView.d.ts.map b/lib/typescript/ReactNativeZoomableView.d.ts.map index fffa1b1..97dad67 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;AAiCf,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,CAq5B7B,CAAC;AAiBF,eAAe,uBAAuB,CAAC;AAEvC,OAAO,EAAE,uBAAuB,EAAE,CAAC"} \ No newline at end of file +{"version":3,"file":"ReactNativeZoomableView.d.ts","sourceRoot":"","sources":["../../src/ReactNativeZoomableView.tsx"],"names":[],"mappings":"AACA,OAAc,EACZ,wBAAwB,EAMzB,MAAM,OAAO,CAAC;AAiCf,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,CAw5B7B,CAAC;AAiBF,eAAe,uBAAuB,CAAC;AAEvC,OAAO,EAAE,uBAAuB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/ReactNativeZoomableView.tsx b/src/ReactNativeZoomableView.tsx index a2144e1..d7328b5 100644 --- a/src/ReactNativeZoomableView.tsx +++ b/src/ReactNativeZoomableView.tsx @@ -852,7 +852,7 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< } if (e.numberOfTouches === 2) { - runOnJS(clearLongPressTimeout); + runOnJS(clearLongPressTimeout)(); // change some measurement states when switching gesture to ensure a smooth transition if (gestureType.value !== 'pinch') { @@ -884,10 +884,13 @@ const ReactNativeZoomableView: ForwardRefRenderFunction< const firstTouch = useSharedValue(undefined); const gesture = Gesture.Manual() .onTouchesDown((e, stateManager) => { - stateManager.activate(); - stateManager.begin(); - firstTouch.value = { x: e.allTouches[0].x, y: e.allTouches[0].y }; - _handlePanResponderGrant(e); + // 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); From 490ae19d93529e1907bf3c2e5b4ac6b3d5f6df7b Mon Sep 17 00:00:00 2001 From: thomasvo Date: Wed, 24 Dec 2025 19:43:02 -0800 Subject: [PATCH 12/34] add test case for modal mode --- example/App.tsx | 44 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/example/App.tsx b/example/App.tsx index 5950d44..63df3a2 100644 --- a/example/App.tsx +++ b/example/App.tsx @@ -1,7 +1,15 @@ import { ReactNativeZoomableView } from '@openspacelabs/react-native-zoomable-view'; import { debounce } from 'lodash'; -import React, { useCallback, useState } from 'react'; -import { Alert, Button, Image, Modal, Text, View } from 'react-native'; +import React, { ReactNode, useCallback, useState } from 'react'; +import { + Alert, + Button, + Image, + Modal, + Text, + View, + ViewProps, +} from 'react-native'; import Animated, { runOnJS, useAnimatedStyle, @@ -18,9 +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 scale = useSharedValue(1); const [showMarkers, setShowMarkers] = useState(true); + const [modal, setModal] = useState(false); const [size, setSize] = useState<{ width: number; height: number }>({ width: 0, height: 0, @@ -46,9 +69,11 @@ export default function App() { }; }); + const Wrapper = modal ? PageSheetModal : View; + return ( - - {/*ReactNativeZoomableView*/} + + ReactNativeZoomableView { @@ -105,6 +130,15 @@ export default function App() { setShowMarkers((value) => !value); }} /> - + +