From a07da49f2a295a160d3eb3c0902e3067a194e96c Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Sat, 11 Oct 2025 11:17:06 +0500 Subject: [PATCH 01/56] use Pressable instead of TouchableOpacity --- app/components/button.tsx | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/app/components/button.tsx b/app/components/button.tsx index a287ca0..119c032 100644 --- a/app/components/button.tsx +++ b/app/components/button.tsx @@ -1,14 +1,13 @@ -import {Text, TextStyle, TouchableOpacity} from 'react-native'; -import {TouchableOpacityProps} from 'react-native-gesture-handler'; +import { Pressable, PressableProps, StyleProp, Text, TextStyle, ViewStyle } from 'react-native'; export function Button( - props: TouchableOpacityProps & { + props: PressableProps & { btnTitleStyle?: TextStyle; title: string; }, ) { return ( - , ]}> {props.title} - + ); } From c98a453e69326f1a401e508cb78eed0c7ca2256b Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Sat, 11 Oct 2025 11:17:32 +0500 Subject: [PATCH 02/56] update dependencies --- example/package-lock.json | 508 ++++++++++++++++++++------------------ example/package.json | 1 + package-lock.json | 65 +++++ package.json | 20 +- 4 files changed, 344 insertions(+), 250 deletions(-) diff --git a/example/package-lock.json b/example/package-lock.json index bcd5dcf..a632ffa 100644 --- a/example/package-lock.json +++ b/example/package-lock.json @@ -14,6 +14,7 @@ "react-native": "0.81.1", "react-native-gesture-handler": "^2.28.0", "react-native-navigation-bar-color": "^2.0.2", + "react-native-reanimated": "^3.19.2", "react-native-safe-area-context": "^5.6.1" }, "devDependencies": { @@ -145,7 +146,6 @@ "version": "7.27.3", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", - "devOptional": true, "license": "MIT", "dependencies": { "@babel/types": "^7.27.3" @@ -174,7 +174,6 @@ "version": "7.28.3", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz", "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==", - "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", @@ -196,7 +195,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", - "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", @@ -214,7 +212,7 @@ "version": "0.6.5", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.2", @@ -240,7 +238,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", - "devOptional": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", @@ -284,7 +281,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", - "devOptional": true, "license": "MIT", "dependencies": { "@babel/types": "^7.27.1" @@ -306,7 +302,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", @@ -324,7 +320,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", - "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-member-expression-to-functions": "^7.27.1", @@ -342,7 +337,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", - "devOptional": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", @@ -383,7 +377,7 @@ "version": "7.28.3", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.27.2", @@ -510,7 +504,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.27.1.tgz", "integrity": "sha512-hjlsMBl1aJc5lp8MoCDEZCiYzlgdRAShOjAfRw6X+GlpLpUPU7c3XNLsKFZbQk/1cRzBlJ7CXg3xJAJMrFa1Uw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -590,7 +584,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -603,7 +597,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.27.1.tgz", "integrity": "sha512-eBC/3KSekshx19+N40MzjWqJd7KTEdOoLesAfa4IDFI8eRz5a47i5Oszus6zG/cwIXN63YhgLOMSSNJx49sENg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -619,7 +613,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.27.1.tgz", "integrity": "sha512-p9OkPbZ5G7UT1MofwYFigGebnrzGJacoBSQM0/6bi/PUMVE+qlWDD/OalvQKbwgQzU6dl0xAv6r4X7Jme0RYxA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -690,7 +684,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", - "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -808,7 +801,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", - "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -841,7 +833,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", - "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -857,7 +848,7 @@ "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -875,7 +866,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", @@ -909,7 +900,7 @@ "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.0.tgz", "integrity": "sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -925,7 +916,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", - "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.27.1", @@ -959,7 +949,6 @@ "version": "7.28.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.3.tgz", "integrity": "sha512-DoEWC5SuxuARF2KdKmGUq3ghfPMO6ZzR12Dnp5gubwbeWJo4dbNWXJPVlwvh4Zlq6Z7YVvL8VFxeSOJgjsx4Sg==", - "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", @@ -980,7 +969,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -997,7 +986,7 @@ "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz", "integrity": "sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1129,7 +1118,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.27.1.tgz", "integrity": "sha512-G5eDKsu50udECw7DL2AcsysXiQyB7Nfg521t2OAJ4tbfTJ27doHLeF/vlI1NZGlLdbb/v+ibvtL1YBQqYOwJGg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1146,7 +1135,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1163,7 +1152,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.1", @@ -1197,7 +1186,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1213,7 +1202,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1262,7 +1251,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", - "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", @@ -1315,7 +1303,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", @@ -1348,7 +1336,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", - "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1364,7 +1351,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1380,7 +1367,7 @@ "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz", "integrity": "sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.2", @@ -1417,7 +1404,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1433,7 +1420,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", - "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1450,7 +1436,7 @@ "version": "7.27.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1466,7 +1452,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.27.1", @@ -1483,7 +1469,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", @@ -1517,7 +1503,7 @@ "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1533,7 +1519,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", @@ -1553,7 +1539,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1569,7 +1555,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1585,7 +1571,7 @@ "version": "7.28.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.3.tgz", "integrity": "sha512-K3/M/a4+ESb5LEldjQb+XSrpY0nF+ZBFlTCbSnKaYAMfD8v33O6PMs4uYnOk19HlcsI8WMu3McdFPTiQHF/1/A==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1634,7 +1620,7 @@ "version": "7.28.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.3.tgz", "integrity": "sha512-Y6ab1kGqZ0u42Zv/4a7l0l72n9DKP/MKoKWaUSBylrhNZO2prYuqFOLbn5aW5SIFXwSH93yfjbgllL8lxuGKLg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", @@ -1655,7 +1641,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", - "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1671,7 +1656,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1688,7 +1673,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1704,7 +1689,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1736,7 +1720,6 @@ "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz", "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==", - "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", @@ -1789,7 +1772,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", - "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", @@ -1919,6 +1901,25 @@ "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/@babel/preset-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", + "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/runtime": { "version": "7.28.3", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.3.tgz", @@ -2115,14 +2116,14 @@ "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause" }, "node_modules/@hapi/topo": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0" @@ -2665,7 +2666,7 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", @@ -2679,7 +2680,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -2689,7 +2690,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -2703,7 +2704,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-20.0.0.tgz", "integrity": "sha512-/cMnGl5V1rqnbElY1Fvga1vfw0d3bnqiJLx2+2oh7l9ulnXfVRWb5tU2kgBqiMxuDOKA+DQoifC9q/tvkj5K2w==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-clean": "20.0.0", @@ -2733,7 +2734,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-20.0.0.tgz", "integrity": "sha512-YmdNRcT+Dp8lC7CfxSDIfPMbVPEXVFzBH62VZNbYGxjyakqAvoQUFTYPgM2AyFusAr4wDFbDOsEv88gCDwR3ig==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-tools": "20.0.0", @@ -2746,7 +2747,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-20.0.0.tgz", "integrity": "sha512-5Ky9ceYuDqG62VIIpbOmkg8Lybj2fUjf/5wK4UO107uRqejBgNgKsbGnIZgEhREcaSEOkujWrroJ9gweueLfBg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-tools": "20.0.0", @@ -2761,7 +2762,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-android/-/cli-config-android-20.0.0.tgz", "integrity": "sha512-asv60qYCnL1v0QFWcG9r1zckeFlKG+14GGNyPXY72Eea7RX5Cxdx8Pb6fIPKroWH1HEWjYH9KKHksMSnf9FMKw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-tools": "20.0.0", @@ -2774,7 +2775,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-apple/-/cli-config-apple-20.0.0.tgz", "integrity": "sha512-PS1gNOdpeQ6w7dVu1zi++E+ix2D0ZkGC2SQP6Y/Qp002wG4se56esLXItYiiLrJkhH21P28fXdmYvTEkjSm9/Q==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-tools": "20.0.0", @@ -2787,7 +2788,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-20.0.0.tgz", "integrity": "sha512-cPHspi59+Fy41FDVxt62ZWoicCZ1o34k8LAl64NVSY0lwPl+CEi78jipXJhtfkVqSTetloA8zexa/vSAcJy57Q==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-config": "20.0.0", @@ -2811,7 +2812,7 @@ "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "devOptional": true, + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -2824,7 +2825,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-20.0.0.tgz", "integrity": "sha512-th3ji1GRcV6ACelgC0wJtt9daDZ+63/52KTwL39xXGoqczFjml4qERK90/ppcXU0Ilgq55ANF8Pr+UotQ2AB/A==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-config-android": "20.0.0", @@ -2838,7 +2839,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-20.0.0.tgz", "integrity": "sha512-rZZCnAjUHN1XBgiWTAMwEKpbVTO4IHBSecdd1VxJFeTZ7WjmstqA6L/HXcnueBgxrzTCRqvkRIyEQXxC1OfhGw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-config-apple": "20.0.0", @@ -2852,7 +2853,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-20.0.0.tgz", "integrity": "sha512-Z35M+4gUJgtS4WqgpKU9/XYur70nmj3Q65c9USyTq6v/7YJ4VmBkmhC9BticPs6wuQ9Jcv0NyVCY0Wmh6kMMYw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-platform-apple": "20.0.0" @@ -2862,7 +2863,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-20.0.0.tgz", "integrity": "sha512-Ves21bXtjUK3tQbtqw/NdzpMW1vR2HvYCkUQ/MXKrJcPjgJnXQpSnTqHXz6ZdBlMbbwLJXOhSPiYzxb5/v4CDg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-tools": "20.0.0", @@ -2881,7 +2882,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-20.0.0.tgz", "integrity": "sha512-akSZGxr1IajJ8n0YCwQoA3DI0HttJ0WB7M3nVpb0lOM+rJpsBN7WG5Ft+8ozb6HyIPX+O+lLeYazxn5VNG/Xhw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@vscode/sudo-prompt": "^9.0.0", @@ -2900,7 +2901,7 @@ "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "devOptional": true, + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -2913,7 +2914,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-20.0.0.tgz", "integrity": "sha512-7J4hzGWOPTBV1d30Pf2NidV+bfCWpjfCOiGO3HUhz1fH4MvBM0FbbBmE9LE5NnMz7M8XSRSi68ZGYQXgLBB2Qw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "joi": "^17.2.1" @@ -2923,7 +2924,7 @@ "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "devOptional": true, + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -2945,7 +2946,7 @@ "version": "0.81.1", "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.81.1.tgz", "integrity": "sha512-cxYq78YePcIX2871UiEItG7ibk+GeXRr7A3ZR2DN4fZ7X4An/734DwLVop/CcHpK3Ycr0Re8FKEVTcJRiVb1zg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.25.3", @@ -2959,7 +2960,7 @@ "version": "0.81.1", "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.81.1.tgz", "integrity": "sha512-dCxb4AdaoLZipfKNEpO70WK7cxbTsq62dzK2EuFta65WJO/K7+sMoF8V6P0MKfCaHwj/1Va2rp/LKtHd9ttPVw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", @@ -3197,7 +3198,7 @@ "version": "0.81.1", "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.81.1.tgz", "integrity": "sha512-QtqvzZwlnenRbX4iRqR/gf/x0AGJIu21OBjQI83qScxiSczm7cwL765HCYVSmTUtypI+XZ/irqDC9KOtMjqPZw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", @@ -3216,7 +3217,7 @@ "version": "0.81.1", "resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.81.1.tgz", "integrity": "sha512-SP3zZz9sqA14GzUevd8TasAntB4TkceruNNQUIMzHQRB4FXz19YaFK3VjXwmwJzuCl71El8wMTYlYpOlZ68hww==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@react-native/js-polyfills": "0.81.1", @@ -3307,7 +3308,7 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0" @@ -3317,14 +3318,14 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause" }, "node_modules/@sideway/pinpoint": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause" }, "node_modules/@sinclair/typebox": { @@ -3462,7 +3463,7 @@ "version": "19.1.12", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.12.tgz", "integrity": "sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "csstype": "^3.0.2" @@ -3736,7 +3737,7 @@ "version": "9.3.1", "resolved": "https://registry.npmjs.org/@vscode/sudo-prompt/-/sudo-prompt-9.3.1.tgz", "integrity": "sha512-9ORTwwS74VaTn38tNbQhsA5U44zkJfcb0BdTSyyG6frP4e8KMtHuTXYmwefe5dpL8XB1aGSIVTaLjD3BbWb5iA==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/abort-controller": { @@ -3860,7 +3861,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "colorette": "^1.0.7", @@ -3872,7 +3873,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -3882,7 +3883,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^4.1.0" @@ -3932,14 +3933,14 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "devOptional": true, + "dev": true, "license": "Python-2.0" }, "node_modules/array-buffer-byte-length": { @@ -4100,7 +4101,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -4210,7 +4211,7 @@ "version": "0.4.14", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.27.7", @@ -4225,7 +4226,7 @@ "version": "0.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.5", @@ -4239,7 +4240,7 @@ "version": "0.6.5", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.5" @@ -4261,7 +4262,7 @@ "version": "0.0.2", "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/plugin-syntax-flow": "^7.12.1" @@ -4339,7 +4340,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "buffer": "^5.5.0", @@ -4351,7 +4352,7 @@ "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -4376,7 +4377,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -4386,7 +4387,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/brace-expansion": { @@ -4456,7 +4457,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "devOptional": true, + "dev": true, "funding": [ { "type": "github", @@ -4487,7 +4488,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -4516,7 +4517,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -4530,7 +4531,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -4580,7 +4581,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -4723,7 +4724,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" @@ -4736,7 +4737,7 @@ "version": "2.9.2", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -4763,7 +4764,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.8" @@ -4809,21 +4810,21 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/command-exists": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/commander": { "version": "9.5.0", "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": "^12.20.0 || >=14" @@ -4833,7 +4834,7 @@ "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "mime-db": ">= 1.43.0 < 2" @@ -4846,7 +4847,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -4865,7 +4866,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -4875,7 +4876,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/concat-map": { @@ -4918,7 +4919,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -4934,7 +4935,7 @@ "version": "3.45.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.45.1.tgz", "integrity": "sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "browserslist": "^4.25.3" @@ -4948,7 +4949,7 @@ "version": "9.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "env-paths": "^2.2.1", @@ -4997,7 +4998,7 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -5012,7 +5013,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/data-view-buffer": { @@ -5073,7 +5074,7 @@ "version": "1.11.18", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.18.tgz", "integrity": "sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/debug": { @@ -5097,7 +5098,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -5129,7 +5130,7 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -5139,7 +5140,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "clone": "^1.0.2" @@ -5253,7 +5254,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -5308,7 +5309,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5318,7 +5319,7 @@ "version": "7.14.0", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", - "devOptional": true, + "dev": true, "license": "MIT", "bin": { "envinfo": "dist/cli.js" @@ -5349,7 +5350,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "accepts": "~1.3.7", @@ -5432,7 +5433,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -5442,7 +5443,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -5480,7 +5481,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -6159,7 +6160,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", @@ -6222,7 +6223,7 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -6239,7 +6240,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -6265,7 +6266,7 @@ "version": "4.5.3", "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz", "integrity": "sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==", - "devOptional": true, + "dev": true, "funding": [ { "type": "github", @@ -6284,7 +6285,7 @@ "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -6373,7 +6374,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "locate-path": "^6.0.0", @@ -6443,7 +6444,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -6478,7 +6479,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "devOptional": true, + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6537,7 +6538,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -6571,7 +6572,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -6585,7 +6586,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -6726,7 +6727,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -6803,7 +6804,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -6832,7 +6833,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -6920,7 +6921,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=10.17.0" @@ -6930,7 +6931,7 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -6943,7 +6944,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "devOptional": true, + "dev": true, "funding": [ { "type": "github", @@ -6989,7 +6990,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -7166,7 +7167,7 @@ "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -7241,7 +7242,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -7267,7 +7268,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -7306,7 +7307,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -7319,7 +7320,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7439,7 +7440,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7503,7 +7504,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -7562,7 +7563,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -7579,7 +7580,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "devOptional": true, + "dev": true, "license": "ISC" }, "node_modules/istanbul-lib-coverage": { @@ -8272,7 +8273,7 @@ "version": "17.13.3", "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.3.0", @@ -8292,7 +8293,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -8336,7 +8337,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/json-schema-traverse": { @@ -8369,7 +8370,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "devOptional": true, + "dev": true, "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" @@ -8405,7 +8406,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -8415,7 +8416,7 @@ "version": "2.11.1", "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.11.1.tgz", "integrity": "sha512-SEET7oNfgSaB6Ym0jufAdCeo3meJVeCaaDyzRygy0xsp2BFKCprcfHljTq4QkzTLUxEKkFK6OK4811YM2oSrRg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "picocolors": "^1.1.1", @@ -8474,14 +8475,14 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "p-locate": "^5.0.0" @@ -8504,7 +8505,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/lodash.merge": { @@ -8524,7 +8525,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.0", @@ -8541,7 +8542,7 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-fragments": "^0.2.1", @@ -8556,7 +8557,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -8568,7 +8569,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "locate-path": "^5.0.0", @@ -8582,7 +8583,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "p-locate": "^4.1.0" @@ -8595,7 +8596,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "p-try": "^2.0.0" @@ -8611,7 +8612,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "p-limit": "^2.2.0" @@ -8624,7 +8625,7 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -8639,14 +8640,14 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "devOptional": true, + "dev": true, "license": "ISC" }, "node_modules/logkitty/node_modules/yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "cliui": "^6.0.0", @@ -8669,7 +8670,7 @@ "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "camelcase": "^5.0.0", @@ -8748,7 +8749,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -8758,7 +8759,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -8780,7 +8781,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -9198,7 +9199,7 @@ "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "devOptional": true, + "dev": true, "license": "MIT", "bin": { "mime": "cli.js" @@ -9211,7 +9212,7 @@ "version": "1.54.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -9242,7 +9243,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -9293,7 +9294,7 @@ "version": "0.6.4", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -9303,7 +9304,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/nocache/-/nocache-3.0.4.tgz", "integrity": "sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=12.0.0" @@ -9325,7 +9326,7 @@ "version": "1.15.0", "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -9348,7 +9349,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.0.0" @@ -9389,7 +9390,7 @@ "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -9499,7 +9500,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -9518,7 +9519,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" @@ -9534,7 +9535,7 @@ "version": "6.4.0", "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "is-wsl": "^1.1.0" @@ -9565,7 +9566,7 @@ "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "bl": "^4.1.0", @@ -9607,7 +9608,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" @@ -9623,7 +9624,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "p-limit": "^3.0.2" @@ -9648,7 +9649,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -9661,7 +9662,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", @@ -9707,7 +9708,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -9717,7 +9718,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/path-type": { @@ -9901,7 +9902,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "kleur": "^3.0.3", @@ -9961,7 +9962,7 @@ "version": "6.13.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" @@ -9986,7 +9987,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "devOptional": true, + "dev": true, "funding": [ { "type": "github", @@ -10016,7 +10017,7 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -10146,12 +10147,47 @@ "react-native": "*" } }, + "node_modules/react-native-is-edge-to-edge": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/react-native-is-edge-to-edge/-/react-native-is-edge-to-edge-1.1.7.tgz", + "integrity": "sha512-EH6i7E8epJGIcu7KpfXYXiV2JFIYITtq+rVS8uEb+92naMRBdxhTuS8Wn2Q7j9sqyO0B+Xbaaf9VdipIAmGW4w==", + "license": "MIT", + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, "node_modules/react-native-navigation-bar-color": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/react-native-navigation-bar-color/-/react-native-navigation-bar-color-2.0.2.tgz", "integrity": "sha512-ZmpLWRocyme1au11e5ZuecMS/UCi57nlzgnioi03Q6ERMbeUOqqbWgNBaNB7SsCeqBV6fZPjo3+A64zEIpzw4w==", "license": "MIT" }, + "node_modules/react-native-reanimated": { + "version": "3.19.2", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.19.2.tgz", + "integrity": "sha512-RpnmoNwmR4y2kyGcAtGUG31mbPtR4E0Q73dFa9jhoKFBecaHEHxz0/oWL0H+zuEy7dLxR8oslGGlu6+fcCMm+g==", + "license": "MIT", + "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-is-edge-to-edge": "1.1.7" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0", + "react": "*", + "react-native": "*" + } + }, "node_modules/react-native-safe-area-context": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-5.6.1.tgz", @@ -10217,7 +10253,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -10255,14 +10291,12 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "devOptional": true, "license": "MIT" }, "node_modules/regenerate-unicode-properties": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", - "devOptional": true, "license": "MIT", "dependencies": { "regenerate": "^1.4.2" @@ -10302,7 +10336,6 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", - "devOptional": true, "license": "MIT", "dependencies": { "regenerate": "^1.4.2", @@ -10320,14 +10353,12 @@ "version": "0.8.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", - "devOptional": true, "license": "MIT" }, "node_modules/regjsparser": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", - "devOptional": true, "license": "BSD-2-Clause", "dependencies": { "jsesc": "~3.0.2" @@ -10340,7 +10371,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "devOptional": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -10362,14 +10392,14 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "devOptional": true, + "dev": true, "license": "ISC" }, "node_modules/resolve": { "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "is-core-module": "^2.16.0", @@ -10413,7 +10443,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -10433,7 +10463,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "onetime": "^5.1.0", @@ -10447,7 +10477,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -10474,7 +10504,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "devOptional": true, + "dev": true, "funding": [ { "type": "github", @@ -10518,7 +10548,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "devOptional": true, + "dev": true, "funding": [ { "type": "github", @@ -10574,7 +10604,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/scheduler": { @@ -10689,7 +10719,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "devOptional": true, + "dev": true, "license": "ISC" }, "node_modules/set-function-length": { @@ -10751,7 +10781,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -10764,7 +10794,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -10786,7 +10816,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -10806,7 +10836,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -10823,7 +10853,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -10842,7 +10872,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -10868,7 +10898,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/slash": { @@ -10884,7 +10914,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^3.2.0", @@ -10899,7 +10929,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^1.9.0" @@ -10912,7 +10942,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "1.1.3" @@ -10922,7 +10952,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/source-map": { @@ -11026,7 +11056,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -11200,7 +11230,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -11223,7 +11253,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", - "devOptional": true, + "dev": true, "funding": [ { "type": "github", @@ -11248,7 +11278,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -11442,7 +11472,7 @@ "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "media-typer": "0.3.0", @@ -11573,7 +11603,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", - "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -11583,7 +11612,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "devOptional": true, "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", @@ -11597,7 +11625,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", - "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -11607,7 +11634,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -11617,7 +11643,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 4.0.0" @@ -11676,7 +11702,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/utils-merge": { @@ -11707,7 +11733,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -11732,7 +11758,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "defaults": "^1.0.3" @@ -11748,7 +11774,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -11831,7 +11857,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "devOptional": true, + "dev": true, "license": "ISC" }, "node_modules/which-typed-array": { @@ -11930,7 +11956,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", - "devOptional": true, + "dev": true, "license": "ISC", "bin": { "yaml": "bin.mjs" @@ -11970,7 +11996,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=10" diff --git a/example/package.json b/example/package.json index 6a72d1c..ce21333 100644 --- a/example/package.json +++ b/example/package.json @@ -15,6 +15,7 @@ "@react-native/new-app-screen": "0.81.1", "react-native-safe-area-context": "^5.6.1", "react-native-gesture-handler": "^2.28.0", + "react-native-reanimated": "^3.19.2", "react-native-navigation-bar-color": "^2.0.2", "@shopify/flash-list": "^2.0.3" }, diff --git a/package-lock.json b/package-lock.json index 037e57a..7f66bae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,6 +34,7 @@ "react": "19.1.0", "react-native": "0.81.1", "react-native-gesture-handler": "^2.28.0", + "react-native-reanimated": "^3.19.2", "react-native-safe-area-context": "5.6.1", "react-test-renderer": "19.1.0", "typedoc": "^0.23.10", @@ -2009,6 +2010,26 @@ "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/@babel/preset-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", + "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/runtime": { "version": "7.28.4", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", @@ -13238,6 +13259,50 @@ "react-native": "*" } }, + "node_modules/react-native-is-edge-to-edge": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/react-native-is-edge-to-edge/-/react-native-is-edge-to-edge-1.1.7.tgz", + "integrity": "sha512-EH6i7E8epJGIcu7KpfXYXiV2JFIYITtq+rVS8uEb+92naMRBdxhTuS8Wn2Q7j9sqyO0B+Xbaaf9VdipIAmGW4w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-reanimated": { + "version": "3.19.2", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.19.2.tgz", + "integrity": "sha512-RpnmoNwmR4y2kyGcAtGUG31mbPtR4E0Q73dFa9jhoKFBecaHEHxz0/oWL0H+zuEy7dLxR8oslGGlu6+fcCMm+g==", + "dev": true, + "license": "MIT", + "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-is-edge-to-edge": "1.1.7" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0", + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-reanimated/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, "node_modules/react-native-safe-area-context": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-5.6.1.tgz", diff --git a/package.json b/package.json index e874097..cca8cac 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,8 @@ "peerDependencies": { "react-native": "*", "react-native-gesture-handler": "*", - "react-native-safe-area-context": "*" + "react-native-safe-area-context": "*", + "react-native-reanimated": "*" }, "devDependencies": { "@babel/core": "^7.25.2", @@ -50,30 +51,31 @@ "@react-native-community/cli": "20.0.0", "@react-native-community/cli-platform-android": "20.0.0", "@react-native-community/cli-platform-ios": "20.0.0", + "@react-native-community/eslint-config": "^3.2.0", "@react-native/babel-preset": "0.81.1", "@react-native/eslint-config": "0.81.1", "@react-native/metro-config": "0.81.1", "@react-native/typescript-config": "0.81.1", + "@shopify/flash-list": "^2.0.3", "@types/jest": "^29.5.13", "@types/react": "^19.1.0", "@types/react-test-renderer": "^19.1.0", - "eslint": "^9.36.0", - "jest": "^29.6.3", - "prettier": "3.6.2", - "react-test-renderer": "19.1.0", - "typescript": "^5.8.3", - "@react-native-community/eslint-config": "^3.2.0", - "@shopify/flash-list": "^2.0.3", "@typescript-eslint/eslint-plugin": "^5.29.0", "@typescript-eslint/parser": "^5.29.0", "babel-jest": "^26.6.3", + "eslint": "^9.36.0", + "jest": "^29.6.3", "metro-react-native-babel-preset": "^0.70.3", + "prettier": "3.6.2", "react": "19.1.0", "react-native": "0.81.1", "react-native-gesture-handler": "^2.28.0", + "react-native-reanimated": "^3.19.2", + "react-native-safe-area-context": "5.6.1", + "react-test-renderer": "19.1.0", "typedoc": "^0.23.10", "typedoc-plugin-markdown": "^3.13.4", - "react-native-safe-area-context": "5.6.1" + "typescript": "^5.8.3" }, "directories": { "example": "example" From d50833c183d6e6092d17c78cf386b5ac3d052535 Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Sat, 11 Oct 2025 11:37:47 +0500 Subject: [PATCH 03/56] Use react-native-safe-area-insets library to get insets --- src/index.tsx | 212 ++++---------------------------------------------- src/types.ts | 4 + 2 files changed, 21 insertions(+), 195 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 34c6d7e..7ee057e 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -7,12 +7,10 @@ import React, { useImperativeHandle, useMemo, useRef, - useState, } from 'react'; import { Animated, BackHandler, - Dimensions, Easing, GestureResponderEvent, Keyboard, @@ -22,10 +20,9 @@ import { NativeEventSubscription, PanResponder, Platform, - SafeAreaView, - StatusBar, StyleSheet, TouchableOpacity, + useWindowDimensions, View, } from 'react-native'; import { @@ -33,6 +30,7 @@ import { PanGestureHandler, PanGestureHandlerProps, } from 'react-native-gesture-handler'; +import {useSafeAreaInsets} from 'react-native-safe-area-context'; import { DraggableNodes, DraggableNodesContext, @@ -66,10 +64,6 @@ import {styles} from './styles'; import type {ActionSheetProps, ActionSheetRef} from './types'; import {getElevation, SUPPORTED_ORIENTATIONS} from './utils'; -const EVENTS_INTERNAL = { - safeAreaLayout: 'safeAreaLayout', -}; - export default forwardRef( function ActionSheet( { @@ -94,7 +88,6 @@ export default forwardRef( keyboardHandlerEnabled = true, ExtraOverlayComponent, payload, - safeAreaInsets, routes, initialRoute, onBeforeShow, @@ -102,6 +95,7 @@ export default forwardRef( onBeforeClose, enableGesturesInScrollView = true, disableDragBeyondMinimumSnapPoint, + useBottomSafeAreaPadding = true, ...props }, ref, @@ -112,34 +106,11 @@ export default forwardRef( : snapPoints; const initialValue = useRef(-1); const actionSheetHeight = useRef(0); - const safeAreaPaddings = useRef<{ - top: number; - left: number; - right: number; - bottom: number; - }>( - safeAreaInsets || { - top: 0, - left: 0, - bottom: 0, - right: 0, - }, - ); - + const insets = useSafeAreaInsets(); const internalEventManager = React.useMemo(() => new EventManager(), []); const currentContext = useProviderContext(); const currentSnapIndex = useRef(initialSnapIndex); const sheetRef = useSheetRef(); - const dimensionsRef = useRef<{ - width: number; - height: number; - portrait: boolean; - paddingBottom?: number; - }>({ - width: 0, - height: 0, - portrait: true, - }); const minTranslateValue = useRef(0); const keyboardWasVisible = useRef(false); const prevKeyboardHeight = useRef(0); @@ -160,31 +131,11 @@ export default forwardRef( const closing = useRef(false); const draggableNodes = useRef([]); const sheetLayoutRef = useRef(null); - const [dimensions, setDimensions] = useState<{ - width: number; - height: number; - portrait: boolean; - paddingBottom?: number; - }>({ - width: Dimensions.get('window').width, - height: 0, - portrait: true, - paddingBottom: props?.useBottomSafeAreaPadding ? 25 : 0, - }); - const rootViewLayoutEventValues = useRef<{ - timer?: NodeJS.Timeout; - sub?: {unsubscribe: () => void}; - firstEventFired?: boolean; - layouTimer?: NodeJS.Timeout; - resizing?: boolean; - }>({}); - + const dimensions = useWindowDimensions(); + const dimensionsRef = useRef(dimensions); + dimensionsRef.current = dimensions; const containerStyle = StyleSheet.flatten(props.containerStyle); - if (safeAreaInsets) { - safeAreaPaddings.current = safeAreaInsets; - } - const {visible, setVisible} = useSheetManager({ id: sheetId, onHide: data => { @@ -360,8 +311,8 @@ export default forwardRef( if (lock.current) return; const correctedHeight = keyboard.keyboardShown ? dimensionsRef.current.height - - (keyboard.keyboardHeight + safeAreaPaddings.current.bottom) - : dimensionsRef.current.height - safeAreaPaddings.current.bottom; + (keyboard.keyboardHeight + insets.bottom) + : dimensionsRef.current.height - insets.bottom; if (actionSheetHeight.current >= correctedHeight - 1) { if (value.value < 100) { @@ -394,7 +345,6 @@ export default forwardRef( const onSheetLayout = React.useCallback( (event: LayoutChangeEvent) => { sheetLayoutRef.current = {...event.nativeEvent.layout}; - if (rootViewLayoutEventValues.current.resizing) return; if (closing.current) return; const rootViewHeight = dimensionsRef.current?.height; @@ -403,8 +353,7 @@ export default forwardRef( ? dimensionsRef.current.height : event.nativeEvent.layout.height; minTranslateValue.current = - rootViewHeight - - (actionSheetHeight.current + safeAreaPaddings.current.bottom); + rootViewHeight - (actionSheetHeight.current + insets.bottom); if (initialValue.current < 0) { animations.translateY.setValue(rootViewHeight * 1.1); @@ -439,7 +388,7 @@ export default forwardRef( if (keyboard.keyboardShown) { minTranslateValue.current = minTranslateValue.current - - (keyboard.keyboardHeight + safeAreaPaddings.current.bottom); + (keyboard.keyboardHeight + insets.bottom); keyboardWasVisible.current = true; prevKeyboardHeight.current = keyboard.keyboardHeight; @@ -471,76 +420,6 @@ export default forwardRef( ], ); - const onRootViewLayout = React.useCallback( - (event: LayoutChangeEvent) => { - if (keyboard.keyboardShown && !isModal) { - return; - } - - rootViewLayoutEventValues.current.resizing = true; - - let rootViewHeight = event.nativeEvent.layout.height; - let rootViewWidth = event.nativeEvent.layout.width; - - rootViewLayoutEventValues.current.sub?.unsubscribe(); - rootViewLayoutEventValues.current.sub = internalEventManager.subscribe( - EVENTS_INTERNAL.safeAreaLayout, - () => { - rootViewLayoutEventValues.current.sub?.unsubscribe(); - const safeMarginFromTop = - Platform.OS === 'ios' - ? safeAreaPaddings.current.top < 20 - ? 20 - : safeAreaPaddings.current.top - : StatusBar.currentHeight || 0; - - let height = rootViewHeight - safeMarginFromTop; - let width = rootViewWidth; - - dimensionsRef.current = { - width: width, - height: height, - portrait: width < height, - }; - - setDimensions({...dimensionsRef.current}); - rootViewLayoutEventValues.current.resizing = false; - - if (sheetLayoutRef.current) { - onSheetLayout({ - nativeEvent: { - layout: sheetLayoutRef.current, - }, - } as any); - } - }, - ); - - clearTimeout(rootViewLayoutEventValues.current.timer); - clearTimeout(rootViewLayoutEventValues.current.layouTimer); - - if ( - safeAreaPaddings.current.top !== undefined || - Platform.OS !== 'ios' - ) { - rootViewLayoutEventValues.current.layouTimer = setTimeout( - () => { - internalEventManager.publish(EVENTS_INTERNAL.safeAreaLayout); - }, - Platform.OS === 'ios' || - rootViewLayoutEventValues.current.firstEventFired - ? 0 - : 300, - ); - } - - if (!rootViewLayoutEventValues.current?.firstEventFired) { - rootViewLayoutEventValues.current.firstEventFired = true; - } - }, - [keyboard.keyboardShown, isModal, internalEventManager, onSheetLayout], - ); - const hideSheet = React.useCallback( (vy?: number, data?: any, isSheetManagerOrRef?: boolean) => { if (hiding.current) return; @@ -1368,8 +1247,8 @@ export default forwardRef( zIndex: zIndex ? zIndex : sheetId - ? getZIndexFromStack(sheetId, currentContext) - : 999, + ? getZIndexFromStack(sheetId, currentContext) + : 999, width: '100%', height: '100%', }, @@ -1419,60 +1298,6 @@ export default forwardRef( return ( <> - {Platform.OS === 'ios' && !safeAreaInsets ? ( - { - let height = event.nativeEvent.layout.height; - - if (height !== undefined) { - safeAreaPaddings.current.top = height; - clearTimeout(rootViewLayoutEventValues.current.timer); - rootViewLayoutEventValues.current.timer = setTimeout(() => { - internalEventManager.publish(EVENTS_INTERNAL.safeAreaLayout); - }, 0); - } - }} - style={{ - position: 'absolute', - width: 1, - height: 0, - top: 0, - left: 0, - backgroundColor: 'transparent', - }}> - - - ) : null} - - {Platform.OS === 'ios' && !safeAreaInsets ? ( - { - let height = event.nativeEvent.layout.height; - - if (height !== undefined) { - safeAreaPaddings.current.bottom = height; - clearTimeout(rootViewLayoutEventValues.current.timer); - rootViewLayoutEventValues.current.timer = setTimeout(() => { - internalEventManager.publish(EVENTS_INTERNAL.safeAreaLayout); - }, 0); - } - }} - style={{ - position: 'absolute', - width: 1, - height: 1, - bottom: 0, - left: 0, - backgroundColor: 'transparent', - }}> - - - ) : null} - {visible ? ( ( ( activeOpacity={defaultOverlayOpacity} testID={props.testIDs?.backdrop} style={{ - height: - dimensions.height + - (safeAreaPaddings.current.top || 0) + - 100, + height: dimensions.height + insets.top + 100, width: '100%', position: 'absolute', backgroundColor: overlayColor, @@ -1544,8 +1365,9 @@ export default forwardRef( maxHeight: dimensions.height, paddingBottom: keyboard.keyboardShown ? keyboard.keyboardHeight || 0 - : safeAreaPaddings.current.bottom, - //zIndex: 10, + : useBottomSafeAreaPadding + ? insets.bottom + : 0, transform: [ { translateY: animations.translateY, diff --git a/src/types.ts b/src/types.ts index 9e9cc7a..e26cb38 100644 --- a/src/types.ts +++ b/src/types.ts @@ -318,6 +318,8 @@ export type ActionSheetProps = { /** * Apply padding to bottom based on device safe area insets. + * + * @default true */ useBottomSafeAreaPadding?: boolean; @@ -355,6 +357,8 @@ export type ActionSheetProps = { * Default safeArea insets provided through a library such as * react-native-safe-area-insets. This also helps in giving a tiny boost * in performance as the sheet does not have to calculate insets anymore. + * + * @deprecated Insets are used internally by default through react-native-safe-area-insets. This prop is no-op. */ safeAreaInsets?: {top: number; left: number; right: number; bottom: number}; /** From 6d8602e41ead16854a2192aa6a5e13107ce4ccae Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Sat, 11 Oct 2025 11:42:35 +0500 Subject: [PATCH 04/56] minor cleanup --- src/index.tsx | 80 ++++++++++++++++++++++-------------------------- src/provider.tsx | 9 +++--- 2 files changed, 40 insertions(+), 49 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 7ee057e..b82338a 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -396,9 +396,7 @@ export default forwardRef( keyboardWasVisible.current = false; } opacityAnimation(1); - setTimeout(() => { - returnAnimation(); - }, 1); + returnAnimation(); if (initialValue.current > 100) { if (lock.current) return; @@ -429,50 +427,44 @@ export default forwardRef( } hiding.current = true; onBeforeClose?.((data || payloadRef.current || data) as never); - setTimeout(() => { - if (closable) { - closing.current = true; - Keyboard.dismiss(); - animationListeners.current.translateY && - animations.translateY.removeListener( - animationListeners.current.translateY, - ); - animationListeners.current.translateY = undefined; - } - hideAnimation(vy, ({finished}) => { - if (finished) { - if (closable || isSheetManagerOrRef) { - setVisible(false); - if (props.onClose) { - props.onClose?.( - (data || payloadRef.current || data) as never, - ); - hiding.current = false; - } - hardwareBackPressEvent.current?.remove(); - if (sheetId) { - SheetManager.remove(sheetId, currentContext); - hiding.current = false; - actionSheetEventManager.publish( - `onclose_${sheetId}`, - data || payloadRef.current || data, - currentContext, - ); - } else { - hiding.current = false; - } - currentSnapIndex.current = initialSnapIndex; - closing.current = false; - setTimeout(() => { - keyboard.reset(); - }); + if (closable) { + closing.current = true; + Keyboard.dismiss(); + animationListeners.current.translateY && + animations.translateY.removeListener( + animationListeners.current.translateY, + ); + animationListeners.current.translateY = undefined; + } + hideAnimation(vy, ({finished}) => { + if (finished) { + if (closable || isSheetManagerOrRef) { + setVisible(false); + if (props.onClose) { + props.onClose?.((data || payloadRef.current || data) as never); + hiding.current = false; + } + hardwareBackPressEvent.current?.remove(); + if (sheetId) { + SheetManager.remove(sheetId, currentContext); + hiding.current = false; + actionSheetEventManager.publish( + `onclose_${sheetId}`, + data || payloadRef.current || data, + currentContext, + ); } else { - animations.opacity.setValue(1); - returnAnimation(); + hiding.current = false; } + currentSnapIndex.current = initialSnapIndex; + closing.current = false; + keyboard.reset(); + } else { + animations.opacity.setValue(1); + returnAnimation(); } - }); - }, 1); + } + }); if (Platform.OS === 'web') { document.body.style.overflowY = 'auto'; document.documentElement.style.overflowY = 'auto'; diff --git a/src/provider.tsx b/src/provider.tsx index 96b52a4..b2a2938 100644 --- a/src/provider.tsx +++ b/src/provider.tsx @@ -1,17 +1,16 @@ /* eslint-disable curly */ import React, { createContext, - MutableRefObject, ReactNode, RefObject, useContext, useEffect, useReducer, useRef, - useState, + useState } from 'react'; -import {actionSheetEventManager} from './eventmanager'; -import {ActionSheetRef, Sheets} from './types'; +import { actionSheetEventManager } from './eventmanager'; +import { ActionSheetRef, Sheets } from './types'; export const providerRegistryStack: string[] = []; @@ -136,7 +135,7 @@ export const useSheetIDContext = () => useContext(SheetIDContext); export function useSheetRef( _id?: SheetId | (string & {}), ) { - return useContext(SheetRefContext) as MutableRefObject< + return useContext(SheetRefContext) as RefObject< ActionSheetRef >; } From fe078acc8769ddedff976616b8daf63f999e372c Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Sat, 11 Oct 2025 11:48:05 +0500 Subject: [PATCH 05/56] enable edgeToEdge in example app --- example/android/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/android/gradle.properties b/example/android/gradle.properties index 9afe615..a6de6f6 100644 --- a/example/android/gradle.properties +++ b/example/android/gradle.properties @@ -41,4 +41,4 @@ hermesEnabled=true # Use this property to enable edge-to-edge display support. # This allows your app to draw behind system bars for an immersive UI. # Note: Only works with ReactActivity and should not be used with custom Activity. -edgeToEdgeEnabled=false +edgeToEdgeEnabled=true From 3e5340d9c28fecdddc1617dce4524a0adf1278c7 Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Tue, 14 Oct 2025 11:09:31 +0500 Subject: [PATCH 06/56] add support for scrolling nodes in with new gesture handler --- app/examples/scrollview.tsx | 26 +- src/hooks/use-scroll-handlers.ts | 97 ++-- src/index.tsx | 788 +++++++++++-------------------- src/utils.ts | 6 + src/views/FlatList.tsx | 2 - src/views/ScrollView.tsx | 17 +- tsconfig.json | 3 +- 7 files changed, 344 insertions(+), 595 deletions(-) diff --git a/app/examples/scrollview.tsx b/app/examples/scrollview.tsx index e34f6fb..4879998 100644 --- a/app/examples/scrollview.tsx +++ b/app/examples/scrollview.tsx @@ -1,7 +1,7 @@ import React, {useCallback} from 'react'; import {Text, View} from 'react-native'; import ActionSheet, {ScrollView} from 'react-native-actions-sheet'; -import {TextInput} from 'react-native-gesture-handler'; +import {RefreshControl} from 'react-native-gesture-handler'; function ScrollViewSheet() { const vegetableNamesWithEmoji = [ @@ -39,26 +39,28 @@ function ScrollViewSheet() { const renderItem = useCallback( (item, index) => ( - + }}> + {item} + ), [], ); return ( - + (options?: DraggableNodeOptions) { * ``` */ export function useScrollHandlers(options?: DraggableNodeOptions) { - const [_render, setRender] = useState(false); + const [_render, _setRender] = useState(false); const {nodeRef, gestureContext, offset, layout} = useDraggable(options); const timer = useRef(null); const subscription = useRef(null); @@ -112,7 +117,7 @@ export function useScrollHandlers(options?: DraggableNodeOptions) { py, }; }, - [layout], + [], ); const measureAndLayout = React.useCallback(() => { @@ -122,61 +127,51 @@ export function useScrollHandlers(options?: DraggableNodeOptions) { if (Platform.OS == 'web') { if (!ref) return; const rect = (ref as HTMLDivElement).getBoundingClientRect(); - (ref as HTMLDivElement).style.overflow = "auto"; + (ref as HTMLDivElement).style.overflow = 'auto'; onMeasure(rect.x, rect.y, rect.width, rect.height, rect.left, rect.top); } else { - ref?.measure?.(onMeasure); + (ref as NativeMethods)?.measure?.(onMeasure); } - }, 300); + }, 100); }, [nodeRef, onMeasure]); - useEffect(() => { - if (Platform.OS === 'web' || !gestureContext.ref) return; - const interval = setInterval(() => { - // Trigger a rerender when gestureContext gets populated. - if (gestureContext.ref.current) { - clearInterval(interval); - setRender(true); - } - }, 10); - }, [gestureContext.ref]); - - const memoizedProps = React.useMemo(() => { - return { - ref: nodeRef, - simultaneousHandlers: gestureContext.ref, - onScroll: (event: NativeSyntheticEvent) => { - const {x, y} = event.nativeEvent.contentOffset; - const maxOffsetX = - event.nativeEvent.contentSize.width - layout.current.w; - const maxOffsetY = - event.nativeEvent.contentSize.height - layout.current.h; + // useEffect(() => { + // setTimeout(() => { + // setRender(true); + // }, 300); + // }, []); - offset.current = { - x: x === maxOffsetX || x > maxOffsetX - 5 ? ScrollState.END : x, - y: y === maxOffsetY || y > maxOffsetY - 5 ? ScrollState.END : y, - }; - }, - scrollEventThrottle: 1, - onLayout: () => { + const onLayout = React.useCallback(() => { + measureAndLayout(); + subscription.current?.unsubscribe(); + subscription.current = gestureContext.eventManager.subscribe( + 'onoffsetchange', + () => { measureAndLayout(); - subscription.current?.unsubscribe(); - subscription.current = gestureContext.eventManager.subscribe( - 'onoffsetchange', - () => { - measureAndLayout(); - }, - ); }, - }; - }, [ - gestureContext.eventManager, - gestureContext.ref, - layout, - measureAndLayout, - nodeRef, - offset, - ]); + ); + }, []); + + const onScroll = React.useCallback( + (event: NativeSyntheticEvent) => { + const {x, y} = event.nativeEvent.contentOffset; + const maxOffsetX = event.nativeEvent.contentSize.width - layout.current.w; + const maxOffsetY = + event.nativeEvent.contentSize.height - layout.current.h; + + offset.current = { + x: x === maxOffsetX || x > maxOffsetX - 5 ? ScrollState.END : x, + y: y === maxOffsetY || y > maxOffsetY - 5 ? ScrollState.END : y, + }; + }, + [], + ); - return memoizedProps; + return { + ref: nodeRef, + simultaneousHandlers: [gestureContext.ref], + onScroll, + scrollEventThrottle: 1, + onLayout, + }; } diff --git a/src/index.tsx b/src/index.tsx index b82338a..270e943 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -18,7 +18,6 @@ import { LayoutRectangle, Modal, NativeEventSubscription, - PanResponder, Platform, StyleSheet, TouchableOpacity, @@ -26,9 +25,10 @@ import { View, } from 'react-native'; import { + Gesture, + GestureDetector, GestureHandlerRootView, - PanGestureHandler, - PanGestureHandlerProps, + GestureType, } from 'react-native-gesture-handler'; import {useSafeAreaInsets} from 'react-native-safe-area-context'; import { @@ -45,7 +45,7 @@ import { RouterParamsContext, useRouter, } from './hooks/use-router'; -import {resolveScrollRef, ScrollState} from './hooks/use-scroll-handlers'; +import {resolveScrollRef} from './hooks/use-scroll-handlers'; import useSheetManager from './hooks/use-sheet-manager'; import {useKeyboard} from './hooks/useKeyboard'; import { @@ -55,14 +55,10 @@ import { useSheetPayload, useSheetRef, } from './provider'; -import { - getZIndexFromStack, - isRenderedOnTop, - SheetManager, -} from './sheetmanager'; +import {getZIndexFromStack, SheetManager} from './sheetmanager'; import {styles} from './styles'; import type {ActionSheetProps, ActionSheetRef} from './types'; -import {getElevation, SUPPORTED_ORIENTATIONS} from './utils'; +import {debug, getElevation, SUPPORTED_ORIENTATIONS} from './utils'; export default forwardRef( function ActionSheet( @@ -127,7 +123,7 @@ export default forwardRef( const hiding = useRef(false); const payloadRef = useRef(payload); const sheetPayload = useSheetPayload(); - const panHandlerRef = useRef(null); + const panGestureRef = useRef(undefined); const closing = useRef(false); const draggableNodes = useRef([]); const sheetLayoutRef = useRef(null); @@ -561,6 +557,14 @@ export default forwardRef( nextSnapPoint = snapPoints[(nextSnapIndex = i)]; break; } + + if (i === 0 && getCurrentPosition() > getNextPosition(i)) { + if (closable) { + initialValue.current = dimensionsRef.current.height * 1.3; + hideSheet(vy); + return; + } + } } if (nextSnapPoint < 0) { @@ -568,6 +572,7 @@ export default forwardRef( returnAnimation(vy); return; } + console.log('snap backk...', nextSnapIndex); currentSnapIndex.current = nextSnapIndex; initialValue.current = getNextPosition(currentSnapIndex.current); returnAnimation(vy); @@ -592,20 +597,28 @@ export default forwardRef( } const getActiveDraggableNodes = React.useCallback( - (absoluteX: number, absoluteY: number) => { + (absoluteX: number, absoluteY: number, returnAllNodes?: boolean) => { if (draggableNodes.current?.length === 0) return []; - const activeNodes = []; + const activeNodes: { + rectWithBoundary: LayoutRect; + node: NodesRef['0']; + }[] = []; for (let node of draggableNodes.current) { const rect = getRectBoundary(node.rect.current); if (rect.boundryX === 0 && rect.boundryY === 0) continue; - if ( + if (returnAllNodes) { + activeNodes.push({ + rectWithBoundary: rect, + node: node, + }); + } else if ( absoluteX > rect.px && absoluteY > rect.py && absoluteX < rect.boundryX && absoluteY < rect.boundryY ) { activeNodes.push({ - rectWithBoundry: rect, + rectWithBoundary: rect, node: node, }); } @@ -615,470 +628,213 @@ export default forwardRef( [], ); - const panHandlers: PanGestureHandlerProps = React.useMemo(() => { - let velocity = 0; + function scrollable(value: boolean) { + if (Platform.OS === 'ios') return; + for (let i = 0; i < draggableNodes.current.length; i++) { + const node = draggableNodes.current[i]; + const scrollRef = resolveScrollRef(node.ref); + scrollRef?.setNativeProps({ + scrollEnabled: value, + pointerEvents: value ? 'auto' : 'none', + }); + } + } + + const panGesture = React.useMemo(() => { let prevDeltaY = 0; - let offsets: number[] = []; - let lockGesture = false; - let gestureEventCounter = 0; - let isScrollingGesture = false; let deltaYOnGestureStart = 0; + let velocity = 0; let start: { x: number; y: number; }; + let oldValue = 0; + let isRefreshing = false; + return Gesture.Pan() + .withRef(panGestureRef) + .onChange(event => { + if (!gestureEnabled) return; + let blockPan = false; + let deltaY = event.translationY; + let isSwipingDown = prevDeltaY < deltaY; + + debug('is swiping down', {isSwipingDown, prevDeltaY, deltaY}); + + prevDeltaY = deltaY; + + if (!start) { + start = { + x: event.absoluteX, + y: event.absoluteY, + }; + } - function scrollable(value: boolean) { - if (Platform.OS === 'ios') return; - for (let i = 0; i < draggableNodes.current.length; i++) { - const node = draggableNodes.current[i]; - const scrollRef = resolveScrollRef(node.ref); - scrollRef?.setNativeProps({ - scrollEnabled: value, - }); - } - } - - return Platform.OS === 'web' - ? {enabled: false} - : ({ - onBegan: () => { - if (Platform.OS === 'android') { - scrollable(false); - } - }, - onGestureEvent(event) { - if (sheetId && !isRenderedOnTop(sheetId, currentContext)) return; - - const gesture = event.nativeEvent; - let deltaY = gesture.translationY; - const swipingDown = prevDeltaY < deltaY; + const isFullOpen = getCurrentPosition() === 0; - prevDeltaY = deltaY; + const activeDraggableNodes = getActiveDraggableNodes( + start.x, + start.y, + !isFullOpen || (isFullOpen && !isSwipingDown), + ); - if (!start) { - start = { - x: event.nativeEvent.absoluteX, - y: event.nativeEvent.absoluteY, - }; - } - const activeDraggableNodes = getActiveDraggableNodes( - start.x, - start.y, - ); - const isFullOpen = getCurrentPosition() === 0; - let blockSwipeGesture = false; - - if (activeDraggableNodes.length > 0) { - if (isFullOpen) { - if (swipingDown) { - for (const node of activeDraggableNodes) { - if (!node.node.offset.current) continue; - const {y} = node.node.offset.current; - if (y === ScrollState.END) { - blockSwipeGesture = true; - continue; - } - if (y < 1 && node.node.handlerConfig.hasRefreshControl) { - // Refresh Control will work in to 15% area of the DraggableNode. - const refreshControlBounds = - node.rectWithBoundry.py + - node.rectWithBoundry.h * - node.node.handlerConfig.refreshControlBoundary; - if (!refreshControlBounds) continue; - if ( - event.nativeEvent.absoluteY < refreshControlBounds - ) { - lockGesture = true; - blockSwipeGesture = false; - continue; - } else { - blockSwipeGesture = false; - continue; - } - } + debug('swipe direction', isSwipingDown ? 'down' : 'up'); + debug('active nodes', activeDraggableNodes.length); + //@ts-ignore + if (activeDraggableNodes.length > 0 && !isRefreshing) { + const nodeIsScrolling = activeDraggableNodes.some( + node => node.node.offset.current.y !== 0, + ); - if (y > 1) { - blockSwipeGesture = true; - continue; - } - } - } else { - for (const node of activeDraggableNodes) { - if (!node.node.offset.current) continue; - const {y} = node.node.offset.current; - - // Swiping up - // 1. Scroll if the scroll container has not reached end - // 2. Don't scroll if sheet has not reached the top - if ( - // Scroll has not reached end - y !== ScrollState.END - ) { - blockSwipeGesture = true; - continue; - } - } - } - } - } + /** + * Draggable nodes handling cases: + * + * 1. Sheet not fully open, swiping up, scrolling: false panning: true (will transition to scrolling once sheet reaches top position) + * 2. Sheet fully open, swiping up, scrolling: true, panning: false + * 3. Sheet not fully open, swiping down, scrolling: false, panning: true + * 4. Sheet fully open, scroll offset > 0, scrolling: true, panning: false will transition into scrolling: false, panning: true, once scroll reaches offset=0 + * 5. Add support for pull to refresh + */ + + // 1. Sheet not fully open, swiping up, scrolling: false panning: true (will transition to scrolling once sheet reaches top position) + + if (!isFullOpen && !isSwipingDown) { + scrollable(false); + debug('not full open, swiping up, scroll', false); + blockPan = false; + } - gestureEventCounter++; - if (isFullOpen && (blockSwipeGesture || lockGesture)) { - isScrollingGesture = true; + // 2. Sheet fully open, swiping up, scrolling: true, panning: false + if (isFullOpen && !isSwipingDown) { + scrollable(true); + debug('full open, swiping up, scroll', true); + blockPan = true; + } + // 3. Sheet not fully open, swiping down, scrolling: false, panning: true + if (!isFullOpen && isSwipingDown) { + if (nodeIsScrolling) { scrollable(true); - return; - } - - const startY = - event.nativeEvent.y - event.nativeEvent.translationY; - if (!enableGesturesInScrollView && startY > 100) { - return; - } - - if (gestureEventCounter < 2) { - return; - } - - if (swipingDown || !isFullOpen) { - if (Platform.OS === 'ios') { - for (let i = 0; i < draggableNodes.current.length; i++) { - const node = draggableNodes.current[i]; - const scrollRef = resolveScrollRef(node.ref); - if (!offsets[i] || node.offset.current?.y === 0) { - offsets[i] = node.offset.current?.y || 0; - } - scrollRef.scrollTo({ - x: 0, - y: offsets[i], - animated: false, - }); - } - } - } - - if (!isFullOpen) { - isScrollingGesture = false; - blockSwipeGesture = false; - } - - if (isScrollingGesture && !swipingDown) { - return scrollable(true); - } else { - scrollable(false); - } - - isScrollingGesture = false; - - if (!deltaYOnGestureStart) { - deltaYOnGestureStart = deltaY; - } - deltaY = deltaY - deltaYOnGestureStart; - - const value = initialValue.current + deltaY; - - velocity = 1; - - const correctedValue = - //@ts-ignore - value <= minTranslateValue.current - ? //@ts-ignore - minTranslateValue.current - value - : //@ts-ignore - value; - - if ( - //@ts-ignore - correctedValue / overdrawFactor >= overdrawSize && - deltaY <= 0 - ) { - return; - } - - const minSnapPoint = getNextPosition(0); - const translateYValue = - value <= minTranslateValue.current - ? overdrawEnabled - ? minTranslateValue.current - - correctedValue / overdrawFactor - : minTranslateValue.current - : value; - - if (!closable && disableDragBeyondMinimumSnapPoint) { - animations.translateY.setValue( - translateYValue >= minSnapPoint - ? minSnapPoint - : translateYValue, + blockPan = true; + debug( + 'not full open, swiping down, scroll on active node', + true, ); } else { - animations.translateY.setValue(translateYValue); - } - }, - failOffsetX: [-20, 20], - activeOffsetY: [-5, 5], - onEnded() { - deltaYOnGestureStart = 0; - offsets = []; - start = undefined; - isScrollingGesture = false; - gestureEventCounter = 0; - lockGesture = false; - const isMovingUp = getCurrentPosition() < initialValue.current; - - // When finger is lifted, we enable scrolling on all - // scrollable nodes again - scrollable(true); - - if ( - (!isMovingUp && - getCurrentPosition() < initialValue.current + springOffset) || - (isMovingUp && - getCurrentPosition() > initialValue.current - springOffset) - ) { - returnAnimation(1); - velocity = 0; - return; + scrollable(false); + debug('not full open, swiping down, scroll', false); + blockPan = false; } + } - if (!isMovingUp) { - snapBackward(velocity); + // 4. Sheet fully open, scroll offset > 0, scrolling: true, panning: false will transition into scrolling: false, panning: true, once scroll reaches offset=0 + if (isFullOpen && isSwipingDown) { + if (nodeIsScrolling) { + scrollable(true); + debug('full open, swiping down, scroll on active node', true); + blockPan = true; } else { - snapForward(velocity); - } - velocity = 0; - }, - enabled: gestureEnabled, - } as PanGestureHandlerProps); - }, [ - animations.translateY, - closable, - currentContext, - disableDragBeyondMinimumSnapPoint, - enableGesturesInScrollView, - gestureEnabled, - getActiveDraggableNodes, - getCurrentPosition, - getNextPosition, - overdrawEnabled, - overdrawFactor, - overdrawSize, - returnAnimation, - sheetId, - snapBackward, - snapForward, - springOffset, - ]); - - const handlers = React.useMemo(() => { - let prevDeltaY = 0; - let lockGesture = false; - let offsets: number[] = []; - let start: {x: number; y: number} | undefined; - let deltaYOnGestureStart = 0; - - return !gestureEnabled || Platform.OS !== 'web' - ? {panHandlers: {}} - : PanResponder.create({ - onMoveShouldSetPanResponder: (_event, gesture) => { - if (sheetId && !isRenderedOnTop(sheetId, currentContext)) - return false; - let vy = gesture.vy < 0 ? gesture.vy * -1 : gesture.vy; - let vx = gesture.vx < 0 ? gesture.vx * -1 : gesture.vx; - if (vy < 0.05 || vx > 0.05) { - return false; - } - - const activeDraggableNodes = getActiveDraggableNodes( - _event.nativeEvent.pageX, - _event.nativeEvent.pageY, - ); - for (let node of activeDraggableNodes) { - const scrollRef = resolveScrollRef(node.node.ref); - offsets.push((scrollRef as HTMLDivElement).scrollTop); - } - return true; - }, - onStartShouldSetPanResponder: (_event, _gesture) => { - if (sheetId && !isRenderedOnTop(sheetId, currentContext)) - return false; - const activeDraggableNodes = getActiveDraggableNodes( - _event.nativeEvent.pageX, - _event.nativeEvent.pageY, - ); - for (let node of activeDraggableNodes) { - const scrollRef = resolveScrollRef(node.node.ref); - offsets.push((scrollRef as HTMLDivElement).scrollTop); - } - return true; - }, - onPanResponderMove: (_event, gesture) => { - let deltaY = gesture.dy; - const swipingDown = prevDeltaY < deltaY; - prevDeltaY = deltaY; - const isFullOpen = getCurrentPosition() === 0; - let blockSwipeGesture = false; - if (!start) { - start = { - x: _event.nativeEvent.pageX, - y: _event.nativeEvent.pageY, - }; - } - const activeDraggableNodes = getActiveDraggableNodes( - start.x, - start.y, - ); - - if (activeDraggableNodes.length > 0) { - if (isFullOpen) { - if (swipingDown) { - for (let i = 0; i < activeDraggableNodes.length; i++) { - const node = activeDraggableNodes[i]; - if (!node.node.offset.current) continue; - const {y} = node.node.offset.current; - if (y === ScrollState.END) { - blockSwipeGesture = true; - const scrollRef = resolveScrollRef(node.node.ref); - offsets[i] = (scrollRef as HTMLDivElement).scrollTop; - continue; - } - if ( - y === 0 && - node.node.handlerConfig.hasRefreshControl - ) { - // Refresh Control will work in to 15% area of the DraggableNode. - const refreshControlBounds = - node.rectWithBoundry.py + - node.rectWithBoundry.h * - node.node.handlerConfig.refreshControlBoundary; - if (!refreshControlBounds) continue; - if (_event.nativeEvent.pageY < refreshControlBounds) { - lockGesture = true; - blockSwipeGesture = false; - continue; - } else { - blockSwipeGesture = false; - continue; - } - } - if (y > 5) { - blockSwipeGesture = true; - const scrollRef = resolveScrollRef(node.node.ref); - offsets[i] = (scrollRef as HTMLDivElement).scrollTop; - - continue; - } - } - } else { - for (let i = 0; i < activeDraggableNodes.length; i++) { - const node = activeDraggableNodes[i]; - if (!node.node.offset.current) continue; - const {y} = node.node.offset.current; - if (y > -1) { - blockSwipeGesture = true; - continue; + const hasRefreshControl = activeDraggableNodes.some( + node => node.node.handlerConfig.hasRefreshControl, + ); + if (hasRefreshControl) { + for (const node of activeDraggableNodes) { + if (node.node.handlerConfig.hasRefreshControl) { + // Refresh Control will work in to 15% area of the DraggableNode. + const refreshControlBounds = + node.rectWithBoundary.py + + node.rectWithBoundary.h * + node.node.handlerConfig.refreshControlBoundary; + + if (!refreshControlBounds) continue; + if (event.absoluteY < refreshControlBounds) { + scrollable(true); + blockPan = true; + isRefreshing = true; } } } } else { - for (let i = 0; i < activeDraggableNodes.length; i++) { - const node = activeDraggableNodes[i]; - const scrollRef = resolveScrollRef(node.node.ref); - (scrollRef as HTMLDivElement).scrollTop = offsets[i]; - } + scrollable(false); + blockPan = false; } } - if (blockSwipeGesture || lockGesture) { - return; - } + } + } else { + blockPan = false; + } - const startY = gesture.moveY - gesture.dy; - if (!enableGesturesInScrollView && startY > 100) { - return; - } + if (isRefreshing) { + blockPan = true; + scrollable(true); + } - if (!deltaYOnGestureStart) { - deltaYOnGestureStart = deltaY; - } + let value = oldValue; + if (!deltaYOnGestureStart) { + deltaYOnGestureStart = deltaY; + } + deltaY = deltaY - deltaYOnGestureStart; + if (!blockPan) { + value = initialValue.current + deltaY; + oldValue = value; + } - deltaY = deltaY - deltaYOnGestureStart; + debug('value', { + initialValue: initialValue.current, + deltaY, + value, + }); - const value = initialValue.current + deltaY; - const correctedValue = - //@ts-ignore - value <= minTranslateValue.current - ? //@ts-ignore - minTranslateValue.current - value - : //@ts-ignore - value; - if ( - //@ts-ignore - correctedValue / overdrawFactor >= overdrawSize && - gesture.dy <= 0 - ) { - return; - } + velocity = 1; + const correctedValue = + value <= minTranslateValue.current + ? minTranslateValue.current - value + : value; - const minSnapPoint = getNextPosition(0); - const translateYValue = - value <= minTranslateValue.current - ? overdrawEnabled - ? minTranslateValue.current - - correctedValue / overdrawFactor - : minTranslateValue.current - : value; - - if (!closable && disableDragBeyondMinimumSnapPoint) { - animations.translateY.setValue( - translateYValue >= minSnapPoint - ? minSnapPoint - : translateYValue, - ); - } else { - animations.translateY.setValue(translateYValue); - } - }, - onPanResponderEnd: (_event, gesture) => { - start = undefined; - offsets = []; - prevDeltaY = 0; - deltaYOnGestureStart = 0; - const isMovingUp = getCurrentPosition() < initialValue.current; - if ( - (!isMovingUp && - getCurrentPosition() < initialValue.current + springOffset) || - (isMovingUp && - getCurrentPosition() > initialValue.current - springOffset) - ) { - returnAnimation(gesture.vy); - return; - } + if (correctedValue / overdrawFactor >= overdrawSize && deltaY <= 0) { + return; + } - if (!isMovingUp) { - snapBackward(gesture.vy); - } else { - snapForward(gesture.vy); - } - }, - }); - }, [ - gestureEnabled, - sheetId, - currentContext, - getActiveDraggableNodes, - getCurrentPosition, - enableGesturesInScrollView, - overdrawFactor, - overdrawSize, - getNextPosition, - overdrawEnabled, - closable, - disableDragBeyondMinimumSnapPoint, - animations.translateY, - springOffset, - returnAnimation, - snapBackward, - snapForward, - ]); + const minSnapPoint = getNextPosition(0); + const translateYValue = + value <= minTranslateValue.current + ? overdrawEnabled + ? minTranslateValue.current - correctedValue / overdrawFactor + : minTranslateValue.current + : value; + + if (!closable && disableDragBeyondMinimumSnapPoint) { + animations.translateY.setValue( + translateYValue >= minSnapPoint ? minSnapPoint : translateYValue, + ); + } else { + animations.translateY.setValue(translateYValue); + } + }) + .onEnd(() => { + if (!gestureEnabled) return; + deltaYOnGestureStart = 0; + const isMovingUp = getCurrentPosition() < initialValue.current; + + if ( + (!isMovingUp && + getCurrentPosition() < initialValue.current + springOffset) || + (isMovingUp && + getCurrentPosition() > initialValue.current - springOffset) + ) { + returnAnimation(1); + velocity = 0; + debug('return animation....', 'returning'); + return; + } + + if (!isMovingUp) { + console.log('snap back...'); + snapBackward(velocity); + } else { + snapForward(velocity); + } + velocity = 0; + }); + }, [gestureEnabled]); const onTouch = (event: GestureResponderEvent) => { onTouchBackdrop?.(event); @@ -1284,7 +1040,7 @@ export default forwardRef( ); const context = { - ref: panHandlerRef, + ref: panGestureRef, eventManager: internalEventManager, }; @@ -1366,76 +1122,70 @@ export default forwardRef( }, ], }}> - {dimensions.height === 0 ? null : ( - - - {drawUnderStatusBar ? ( + + + {drawUnderStatusBar ? ( + + ) : null} + {gestureEnabled || props.headerAlwaysVisible ? ( + props.CustomHeaderComponent ? ( + props.CustomHeaderComponent + ) : ( - ) : null} - {gestureEnabled || props.headerAlwaysVisible ? ( - props.CustomHeaderComponent ? ( - props.CustomHeaderComponent - ) : ( - - ) - ) : null} - - - {router?.hasRoutes() ? ( - - {router?.stack.map(renderRoute)} - - ) : ( - props?.children - )} - - - - )} + ) + ) : null} + + + {router?.hasRoutes() ? ( + + {router?.stack.map(renderRoute)} + + ) : ( + props?.children + )} + + + {overdrawEnabled ? ( => new Promise(resolve => { setTimeout(() => { diff --git a/src/views/FlatList.tsx b/src/views/FlatList.tsx index 4fe80d1..807a474 100644 --- a/src/views/FlatList.tsx +++ b/src/views/FlatList.tsx @@ -37,12 +37,10 @@ function $FlatList( {...props} {...handlers} onScroll={event => { - handlers.onScroll(event); props.onScroll?.(event); }} bounces={false} onLayout={event => { - handlers.onLayout(); props.onLayout?.(event); }} scrollEventThrottle={1} diff --git a/src/views/ScrollView.tsx b/src/views/ScrollView.tsx index 6ac9ef2..1f05960 100644 --- a/src/views/ScrollView.tsx +++ b/src/views/ScrollView.tsx @@ -1,8 +1,5 @@ /* eslint-disable curly */ -import React, { - RefObject, - useImperativeHandle -} from 'react'; +import React, {RefObject, useImperativeHandle} from 'react'; import { Platform, ScrollView as RNScrollView, @@ -12,7 +9,7 @@ import { NativeViewGestureHandlerProps, ScrollView as RNGHScrollView, } from 'react-native-gesture-handler'; -import { useScrollHandlers } from '../hooks/use-scroll-handlers'; +import {useScrollHandlers} from '../hooks/use-scroll-handlers'; type Props = ScrollViewProps & Partial & React.RefAttributes & { @@ -24,6 +21,8 @@ type Props = ScrollViewProps & refreshControlGestureArea?: number; }; +const ScrollComponent = Platform.OS === 'web' ? RNScrollView : RNGHScrollView; + function $ScrollView( props: Props, ref: React.ForwardedRef>, @@ -34,11 +33,12 @@ function $ScrollView( }); useImperativeHandle(ref, () => handlers.ref); - const ScrollComponent = Platform.OS === 'web' ? RNScrollView : RNGHScrollView; return ( { handlers.onScroll(event); props.onScroll?.(event); @@ -48,13 +48,10 @@ function $ScrollView( props.onLayout?.(event); }} bounces={false} - scrollEventThrottle={1} /> ); } - - export const ScrollView = React.forwardRef( $ScrollView, ) as unknown as typeof RNScrollView; diff --git a/tsconfig.json b/tsconfig.json index cfae635..2e90f02 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -20,7 +20,8 @@ "resolveJsonModule": true, "skipLibCheck": true, "strict": false, - "allowJs": true + "allowJs": true, + "incremental": false }, "exclude": ["./example", "./expo-example", "./dist", "./docs", "./assets"] } From 114a6d425891c620383c8ab43ad312db9f04325b Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Tue, 14 Oct 2025 11:33:09 +0500 Subject: [PATCH 07/56] fix edgeToEdge enabled sheet height --- src/index.tsx | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 270e943..39f93d9 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -307,9 +307,8 @@ export default forwardRef( if (lock.current) return; const correctedHeight = keyboard.keyboardShown ? dimensionsRef.current.height - - (keyboard.keyboardHeight + insets.bottom) - : dimensionsRef.current.height - insets.bottom; - + (keyboard.keyboardHeight + insets.bottom + insets.top) + : dimensionsRef.current.height - (insets.bottom + insets.top); if (actionSheetHeight.current >= correctedHeight - 1) { if (value.value < 100) { animations.underlayTranslateY.setValue( @@ -349,7 +348,8 @@ export default forwardRef( ? dimensionsRef.current.height : event.nativeEvent.layout.height; minTranslateValue.current = - rootViewHeight - (actionSheetHeight.current + insets.bottom); + rootViewHeight - + (actionSheetHeight.current + insets.bottom + insets.top); if (initialValue.current < 0) { animations.translateY.setValue(rootViewHeight * 1.1); @@ -384,7 +384,7 @@ export default forwardRef( if (keyboard.keyboardShown) { minTranslateValue.current = minTranslateValue.current - - (keyboard.keyboardHeight + insets.bottom); + (keyboard.keyboardHeight + insets.bottom + insets.bottom); keyboardWasVisible.current = true; prevKeyboardHeight.current = keyboard.keyboardHeight; @@ -1044,6 +1044,8 @@ export default forwardRef( eventManager: internalEventManager, }; + console.log(insets); + return ( <> {visible ? ( @@ -1067,6 +1069,7 @@ export default forwardRef( opacity: animations.opacity, width: '100%', justifyContent: 'flex-end', + height: dimensions.height, transform: [ { translateY: animations.keyboardTranslate, @@ -1109,8 +1112,8 @@ export default forwardRef( typeof elevation === 'number' ? elevation : 5, ), flex: undefined, - height: dimensions.height, - maxHeight: dimensions.height, + height: dimensions.height - insets.top, + maxHeight: dimensions.height - insets.top, paddingBottom: keyboard.keyboardShown ? keyboard.keyboardHeight || 0 : useBottomSafeAreaPadding @@ -1175,6 +1178,8 @@ export default forwardRef( {router?.hasRoutes() ? ( From e61e9178f14d5cfa652c16398e63d098ad5d1e69 Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Wed, 15 Oct 2025 10:41:03 +0500 Subject: [PATCH 08/56] feat: migrate to reanimated --- example/babel.config.js | 3 + example/metro.config.js | 12 +- src/hooks/use-router.ts | 24 +- src/index.tsx | 711 +++++++++++++++++++--------------------- src/types.ts | 18 +- 5 files changed, 370 insertions(+), 398 deletions(-) diff --git a/example/babel.config.js b/example/babel.config.js index f7b3da3..05919db 100644 --- a/example/babel.config.js +++ b/example/babel.config.js @@ -1,3 +1,6 @@ module.exports = { presets: ['module:@react-native/babel-preset'], + plugins: [ + 'react-native-reanimated/plugin', + ], }; diff --git a/example/metro.config.js b/example/metro.config.js index 8fe98ae..792fd26 100644 --- a/example/metro.config.js +++ b/example/metro.config.js @@ -1,6 +1,9 @@ const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config'); const path = require('path'); const moduleRoot = path.resolve(__dirname, '..'); +const { + wrapWithReanimatedMetroConfig, +} = require('react-native-reanimated/metro-config'); /** * Metro configuration @@ -9,15 +12,15 @@ const moduleRoot = path.resolve(__dirname, '..'); * @type {import('metro-config').MetroConfig} */ const config = { - watchFolders: [moduleRoot, path.join(__dirname, '../app'),], + watchFolders: [moduleRoot, path.join(__dirname, '../app')], resolver: { extraNodeModules: { react: path.resolve(__dirname, 'node_modules/react'), 'react-native': path.resolve(__dirname, 'node_modules/react-native'), 'react-native-actions-sheet': path.resolve(__dirname, '../'), + 'react-native-reanimated': path.resolve(__dirname, 'node_modules/react-native-reanimated') }, resolveRequest: (context, moduleName, platform) => { - if (moduleName === 'react-native-safe-area-context') { return { filePath: path.resolve( @@ -49,6 +52,7 @@ const config = { new RegExp(`${moduleRoot}/node_modules/react-native/.*`), new RegExp(`${moduleRoot}/node_modules/react-native-gesture-handler`), new RegExp(`${moduleRoot}/node_modules/react-native-safe-area-context`), + new RegExp(`${moduleRoot}/node_modules/react-native-reanimated`), ], }, transformer: { @@ -61,4 +65,6 @@ const config = { }, }; -module.exports = mergeConfig(getDefaultConfig(__dirname), config); +module.exports = wrapWithReanimatedMetroConfig( + mergeConfig(getDefaultConfig(__dirname), config), +); diff --git a/src/hooks/use-router.ts b/src/hooks/use-router.ts index 5dc1527..436e315 100644 --- a/src/hooks/use-router.ts +++ b/src/hooks/use-router.ts @@ -1,6 +1,6 @@ import {createContext, useCallback, useContext, useState} from 'react'; -import {Animated} from 'react-native'; import {Sheets, ActionSheetRef} from '../types'; +import {SharedValue, withTiming} from 'react-native-reanimated'; export type RouteDefinition = T; @@ -83,20 +83,17 @@ export const useRouter = ({ getRef?: () => ActionSheetRef; onNavigate?: (route: string) => void; onNavigateBack?: (route: string) => void; - routeOpacity: Animated.Value; + routeOpacity: SharedValue; }): Router => { const [stack, setStack] = useState([]); const currentRoute: Route | undefined = stack?.[stack.length - 1]; const animate = useCallback( - (snap = 0, opacity = 0, delay = 0) => { + (snap = 0, opacity = 0, _delay = 0) => { getRef?.().snapToRelativeOffset(snap); - Animated.timing(routeOpacity, { - toValue: opacity, + routeOpacity.value = withTiming(opacity, { duration: 150, - useNativeDriver: true, - delay: delay, - }).start(); + }); }, [getRef, routeOpacity], ); @@ -138,11 +135,9 @@ export const useRouter = ({ } else { setStack([routes[0]]); } - Animated.timing(routeOpacity, { - toValue: 1, + routeOpacity.value = withTiming(1, { duration: 150, - useNativeDriver: true, - }).start(); + }); }; const goBack = (name?: string, snap?: number) => { @@ -228,7 +223,10 @@ export function useSheetRouteParams< SheetId extends keyof Sheets = never, RouteKey extends keyof Sheets[SheetId]['routes'] = never, //@ts-ignore ->(id?: SheetId | (string & {}), routeKey?: RouteKey | (string & {})): Sheets[SheetId]['routes'][RouteKey] { +>( + _id?: SheetId | (string & {}), + _routeKey?: RouteKey | (string & {}), +): Sheets[SheetId]['routes'][RouteKey] { const context = useContext(RouterParamsContext); return context; } diff --git a/src/index.tsx b/src/index.tsx index 39f93d9..ff517d5 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -5,13 +5,11 @@ import React, { useCallback, useEffect, useImperativeHandle, - useMemo, useRef, + useState, } from 'react'; import { - Animated, BackHandler, - Easing, GestureResponderEvent, Keyboard, LayoutChangeEvent, @@ -21,7 +19,6 @@ import { Platform, StyleSheet, TouchableOpacity, - useWindowDimensions, View, } from 'react-native'; import { @@ -30,6 +27,14 @@ import { GestureHandlerRootView, GestureType, } from 'react-native-gesture-handler'; +import Animated, { + Easing, + runOnJS, + runOnUI, + useSharedValue, + withSpring, + withTiming, +} from 'react-native-reanimated'; import {useSafeAreaInsets} from 'react-native-safe-area-context'; import { DraggableNodes, @@ -58,7 +63,7 @@ import { import {getZIndexFromStack, SheetManager} from './sheetmanager'; import {styles} from './styles'; import type {ActionSheetProps, ActionSheetRef} from './types'; -import {debug, getElevation, SUPPORTED_ORIENTATIONS} from './utils'; +import {getElevation, SUPPORTED_ORIENTATIONS} from './utils'; export default forwardRef( function ActionSheet( @@ -109,6 +114,7 @@ export default forwardRef( const sheetRef = useSheetRef(); const minTranslateValue = useRef(0); const keyboardWasVisible = useRef(false); + const animationListenerId = 266786; const prevKeyboardHeight = useRef(0); const id = useSheetIDContext(); const sheetId = props.id || id; @@ -126,8 +132,10 @@ export default forwardRef( const panGestureRef = useRef(undefined); const closing = useRef(false); const draggableNodes = useRef([]); - const sheetLayoutRef = useRef(null); - const dimensions = useWindowDimensions(); + const [dimensions, setDimensions] = useState({ + width: -1, + height: -1, + }); const dimensionsRef = useRef(dimensions); dimensionsRef.current = dimensions; const containerStyle = StyleSheet.flatten(props.containerStyle); @@ -150,27 +158,19 @@ export default forwardRef( } }, }); - const animations = useMemo( - () => ({ - opacity: new Animated.Value(0), - translateY: new Animated.Value(0), - underlayTranslateY: new Animated.Value(100), - keyboardTranslate: new Animated.Value(0), - routeOpacity: new Animated.Value(0), - }), - [], - ); - const animationListeners = useRef<{ - translateY?: string; - }>({}); + const opacity = useSharedValue(0); + const translateY = useSharedValue(0); + const underlayTranslateY = useSharedValue(100); + const keyboardTranslate = useSharedValue(0); + const routeOpacity = useSharedValue(0); const router = useRouter({ routes: routes, getRef: () => getRef(), initialRoute: initialRoute as string, onNavigate: props.onNavigate, onNavigateBack: props.onNavigateBack, - routeOpacity: animations.routeOpacity, + routeOpacity: routeOpacity, }); const routerRef = useRef(router); payloadRef.current = payload; @@ -192,91 +192,65 @@ export default forwardRef( prevSnapIndex.current = currentSnapIndex.current; props.onSnapIndexChange?.(currentSnapIndex.current); } - // eslint-disable-next-line react-hooks/exhaustive-deps }, [props.onSnapIndexChange]); - const returnAnimation = React.useCallback( - (velocity?: number) => { + const moveSheetWithAnimation = React.useCallback( + (velocity?: number, value?: number, min?: number) => { + let initial = value || initialValue.current; + let minTranslate = min || minTranslateValue.current; if (!animated) { - animations.translateY.setValue(initialValue.current); + translateY.value = initial; return; } - const config = props.openAnimationConfig; - const correctedValue = - initialValue.current > minTranslateValue.current - ? initialValue.current - : 0; + const config = props.openAnimationConfig; + const correctedValue = initial > minTranslate ? initial : 0; notifyOffsetChange(correctedValue as number); - - if (!config) { - Animated.spring(animations.translateY, { - toValue: initialValue.current, - useNativeDriver: true, - friction: 8, - ...config, + translateY.value = withSpring( + initial, + config || { velocity: typeof velocity !== 'number' ? undefined : velocity, - }).start(); - } else { - Animated.spring(animations.translateY, { - toValue: initialValue.current, - useNativeDriver: true, - ...config, - velocity: typeof velocity !== 'number' ? undefined : velocity, - }).start(); - } + damping: 16, + }, + ); notifySnapIndexChanged(); }, - // eslint-disable-next-line react-hooks/exhaustive-deps [animated, props.openAnimationConfig], ); - const opacityAnimation = React.useCallback( - (opacity: number) => { - Animated.timing(animations.opacity, { - duration: 150, - easing: Easing.in(Easing.ease), - toValue: opacity, - useNativeDriver: true, - }).start(); - }, - // eslint-disable-next-line react-hooks/exhaustive-deps - [], - ); + const animationSheetOpacity = React.useCallback((value: number) => { + opacity.value = withTiming(value, { + duration: 150, + easing: Easing.in(Easing.ease), + }); + }, []); - const hideAnimation = React.useCallback( - (vy?: number, callback?: ({finished}: {finished: boolean}) => void) => { + const hideSheetWithAnimation = React.useCallback( + (vy?: number, callback?: () => void) => { if (!animated) { - callback?.({finished: true}); + callback?.(); return; } const config = props.closeAnimationConfig; - opacityAnimation(0); - const animation = Animated.spring(animations.translateY, { - velocity: typeof vy !== 'number' ? 3.0 : vy + 1, - toValue: dimensionsRef.current.height * 1.3, - useNativeDriver: true, - ...config, - }); - animation.start(); - setTimeout(() => { - animation.stop(); - callback?.({finished: true}); - }, 150); + animationSheetOpacity(0); + translateY.value = withTiming( + dimensionsRef.current.height * 1.3, + config || { + velocity: typeof vy !== 'number' ? 3.0 : vy + 1, + duration: 200, + }, + ); + setTimeout(callback, 150); }, - // eslint-disable-next-line react-hooks/exhaustive-deps - [animated, opacityAnimation, props.closeAnimationConfig], + [animated, animationSheetOpacity, props.closeAnimationConfig], ); const getCurrentPosition = React.useCallback(() => { - //@ts-ignore - return animations.translateY._value <= minTranslateValue.current + 5 + return translateY.value <= minTranslateValue.current + 5 ? 0 - : //@ts-ignore - (animations.translateY._value as number); - // eslint-disable-next-line react-hooks/exhaustive-deps + : (translateY.value as number); }, []); const getNextPosition = React.useCallback( @@ -295,12 +269,11 @@ export default forwardRef( isModal && !props?.backgroundInteractionEnabled ? Modal : Animated.View; useEffect(() => { - let animationListener; if (drawUnderStatusBar || props.onChange) { - animationListener = animations.translateY.addListener(value => { + const onValueChange = (value: number) => { const correctedValue = - value.value > minTranslateValue.current - ? value.value - minTranslateValue.current + value > minTranslateValue.current + ? value - minTranslateValue.current : 0; props?.onChange?.(correctedValue, actionSheetHeight.current); if (drawUnderStatusBar) { @@ -310,65 +283,71 @@ export default forwardRef( (keyboard.keyboardHeight + insets.bottom + insets.top) : dimensionsRef.current.height - (insets.bottom + insets.top); if (actionSheetHeight.current >= correctedHeight - 1) { - if (value.value < 100) { - animations.underlayTranslateY.setValue( - Math.max(value.value - 20, -20), - ); + if (value < 100) { + underlayTranslateY.value = Math.max(value - 20, -20); } else { - //@ts-ignore - if (animations.underlayTranslateY._value !== 100) { - animations.underlayTranslateY.setValue(100); + if (underlayTranslateY.value !== 100) { + underlayTranslateY.value = 100; } } } else { - //@ts-ignore - if (animations.underlayTranslateY._value !== 100) { - animations.underlayTranslateY.setValue(100); + if (underlayTranslateY.value !== 100) { + underlayTranslateY.value = 100; } } } - }); + }; + runOnUI(() => { + translateY.addListener(animationListenerId, value => { + runOnJS(onValueChange)(value); + }); + })(); } - animationListeners.current.translateY = animationListener; return () => { - animationListener && - animations.translateY.removeListener(animationListener); + runOnUI((animationListener: number) => { + translateY.removeListener(animationListener); + })(animationListenerId); }; - // eslint-disable-next-line react-hooks/exhaustive-deps }, [props?.id, keyboard.keyboardShown, keyboard.keyboardHeight]); const onSheetLayout = React.useCallback( - (event: LayoutChangeEvent) => { - sheetLayoutRef.current = {...event.nativeEvent.layout}; + async (event: LayoutChangeEvent) => { + const sheetHeight = event.nativeEvent.layout.height; + if (dimensionsRef.current.height === -1) { + return; + } + // await waitAsync(10); if (closing.current) return; const rootViewHeight = dimensionsRef.current?.height; actionSheetHeight.current = - event.nativeEvent.layout.height > dimensionsRef.current.height + sheetHeight > dimensionsRef.current.height ? dimensionsRef.current.height - : event.nativeEvent.layout.height; - minTranslateValue.current = - rootViewHeight - - (actionSheetHeight.current + insets.bottom + insets.top); + : sheetHeight; + + let minTranslate = 0; + let initial = initialValue.current; - if (initialValue.current < 0) { - animations.translateY.setValue(rootViewHeight * 1.1); + minTranslate = rootViewHeight - actionSheetHeight.current; + if (initial === -1) { + translateY.value = rootViewHeight * 1.1; } + const nextInitialValue = actionSheetHeight.current + - minTranslateValue.current - + minTranslate - (actionSheetHeight.current * snapPoints[currentSnapIndex.current]) / 100; - initialValue.current = + initial = (keyboard.keyboardShown || keyboardWasVisible.current) && - initialValue.current <= nextInitialValue && - initialValue.current >= minTranslateValue.current - ? initialValue.current + initial <= nextInitialValue && + initial >= minTranslate + ? initial : nextInitialValue; const sheetBottomEdgePosition = - initialValue.current + + initial + (actionSheetHeight.current * snapPoints[currentSnapIndex.current]) / 100; @@ -376,27 +355,28 @@ export default forwardRef( sheetBottomEdgePosition - (dimensionsRef.current?.height - keyboard.keyboardHeight); - initialValue.current = + initial = sheetPositionWithKeyboard > 0 - ? initialValue.current - sheetPositionWithKeyboard - : initialValue.current; + ? initial - sheetPositionWithKeyboard + : initial; if (keyboard.keyboardShown) { - minTranslateValue.current = - minTranslateValue.current - - (keyboard.keyboardHeight + insets.bottom + insets.bottom); - + minTranslate = minTranslate - keyboard.keyboardHeight; keyboardWasVisible.current = true; prevKeyboardHeight.current = keyboard.keyboardHeight; } else { keyboardWasVisible.current = false; } - opacityAnimation(1); - returnAnimation(); - if (initialValue.current > 100) { + minTranslateValue.current = minTranslate; + initialValue.current = initial; + + animationSheetOpacity(1); + moveSheetWithAnimation(undefined, initial, minTranslate); + + if (initial > 100) { if (lock.current) return; - animations.underlayTranslateY.setValue(100); + underlayTranslateY.value = 100; } if (Platform.OS === 'web') { document.body.style.overflowY = 'hidden'; @@ -407,10 +387,10 @@ export default forwardRef( snapPoints, keyboard.keyboardShown, keyboard.keyboardHeight, - opacityAnimation, - animations.translateY, - animations.underlayTranslateY, - returnAnimation, + animationSheetOpacity, + translateY, + underlayTranslateY, + moveSheetWithAnimation, ], ); @@ -418,7 +398,7 @@ export default forwardRef( (vy?: number, data?: any, isSheetManagerOrRef?: boolean) => { if (hiding.current) return; if (!closable && !isSheetManagerOrRef) { - returnAnimation(vy); + moveSheetWithAnimation(vy); return; } hiding.current = true; @@ -426,39 +406,34 @@ export default forwardRef( if (closable) { closing.current = true; Keyboard.dismiss(); - animationListeners.current.translateY && - animations.translateY.removeListener( - animationListeners.current.translateY, - ); - animationListeners.current.translateY = undefined; + // translateY.removeListener(245); } - hideAnimation(vy, ({finished}) => { - if (finished) { - if (closable || isSheetManagerOrRef) { - setVisible(false); - if (props.onClose) { - props.onClose?.((data || payloadRef.current || data) as never); - hiding.current = false; - } - hardwareBackPressEvent.current?.remove(); - if (sheetId) { - SheetManager.remove(sheetId, currentContext); - hiding.current = false; - actionSheetEventManager.publish( - `onclose_${sheetId}`, - data || payloadRef.current || data, - currentContext, - ); - } else { - hiding.current = false; - } - currentSnapIndex.current = initialSnapIndex; - closing.current = false; - keyboard.reset(); + hideSheetWithAnimation(vy, () => { + if (closable || isSheetManagerOrRef) { + setVisible(false); + if (props.onClose) { + props.onClose?.((data || payloadRef.current || data) as never); + hiding.current = false; + } + hardwareBackPressEvent.current?.remove(); + if (sheetId) { + SheetManager.remove(sheetId, currentContext); + hiding.current = false; + actionSheetEventManager.publish( + `onclose_${sheetId}`, + data || payloadRef.current || data, + currentContext, + ); } else { - animations.opacity.setValue(1); - returnAnimation(); + hiding.current = false; } + currentSnapIndex.current = initialSnapIndex; + closing.current = false; + initialValue.current = -1; + keyboard.reset(); + } else { + opacity.value = 1; + moveSheetWithAnimation(); } }); if (Platform.OS === 'web') { @@ -466,12 +441,11 @@ export default forwardRef( document.documentElement.style.overflowY = 'auto'; } }, - // eslint-disable-next-line react-hooks/exhaustive-deps [ closable, - hideAnimation, + hideSheetWithAnimation, props.onClose, - returnAnimation, + moveSheetWithAnimation, setVisible, keyboard, ], @@ -505,8 +479,9 @@ export default forwardRef( const snapForward = React.useCallback( (vy: number) => { if (currentSnapIndex.current === snapPoints.length - 1) { - initialValue.current = getNextPosition(currentSnapIndex.current); - returnAnimation(vy); + const next = getNextPosition(currentSnapIndex.current); + moveSheetWithAnimation(vy, next); + initialValue.current = next; return; } let nextSnapPoint = 0; @@ -524,15 +499,15 @@ export default forwardRef( if (nextSnapPoint > 100) { console.warn('Snap points should range between 0 to 100.'); - returnAnimation(vy); + moveSheetWithAnimation(vy); return; } currentSnapIndex.current = nextSnapIndex; - initialValue.current = getNextPosition(currentSnapIndex.current); - - returnAnimation(vy); + const next = getNextPosition(currentSnapIndex.current); + initialValue.current = next; + moveSheetWithAnimation(vy, next); }, - [getCurrentPosition, getNextPosition, returnAnimation, snapPoints], + [getCurrentPosition, getNextPosition, moveSheetWithAnimation, snapPoints], ); /** * Snap towards the bottom @@ -542,10 +517,11 @@ export default forwardRef( if (currentSnapIndex.current === 0) { if (closable) { initialValue.current = dimensionsRef.current.height * 1.3; - hideSheet(vy); + setTimeout(() => hideSheet(vy)); } else { - initialValue.current = getNextPosition(currentSnapIndex.current); - returnAnimation(vy); + const next = getNextPosition(currentSnapIndex.current); + moveSheetWithAnimation(vy, next); + initialValue.current = next; } return; } @@ -569,20 +545,20 @@ export default forwardRef( if (nextSnapPoint < 0) { console.warn('Snap points should range between 0 to 100.'); - returnAnimation(vy); + moveSheetWithAnimation(vy); return; } - console.log('snap backk...', nextSnapIndex); currentSnapIndex.current = nextSnapIndex; - initialValue.current = getNextPosition(currentSnapIndex.current); - returnAnimation(vy); + const next = getNextPosition(currentSnapIndex.current); + initialValue.current = next; + moveSheetWithAnimation(vy); }, [ closable, getCurrentPosition, getNextPosition, hideSheet, - returnAnimation, + moveSheetWithAnimation, snapPoints, ], ); @@ -592,7 +568,6 @@ export default forwardRef( const {w, h, px, py} = rect; return {...rect, boundryX: px + w, boundryY: py + h}; } - return {w: 0, h: 0, px: 0, py: 0, x: 0, y: 0, boundryX: 0, boundryY: 0}; } @@ -650,189 +625,179 @@ export default forwardRef( }; let oldValue = 0; let isRefreshing = false; - return Gesture.Pan() - .withRef(panGestureRef) - .onChange(event => { - if (!gestureEnabled) return; - let blockPan = false; - let deltaY = event.translationY; - let isSwipingDown = prevDeltaY < deltaY; - debug('is swiping down', {isSwipingDown, prevDeltaY, deltaY}); + const onChangeJs = (translationY, absoluteX, absoluteY) => { + if (!gestureEnabled) return; + let blockPan = false; + let deltaY = translationY; + let isSwipingDown = prevDeltaY < deltaY; - prevDeltaY = deltaY; + prevDeltaY = deltaY; - if (!start) { - start = { - x: event.absoluteX, - y: event.absoluteY, - }; - } + if (!start) { + start = { + x: absoluteX, + y: absoluteY, + }; + } + + const isFullOpen = + translateY.value <= minTranslateValue.current + 5 + ? 0 + : (translateY.value as number); - const isFullOpen = getCurrentPosition() === 0; + const activeDraggableNodes = getActiveDraggableNodes( + start.x, + start.y, + !isFullOpen || (isFullOpen && !isSwipingDown), + ); - const activeDraggableNodes = getActiveDraggableNodes( - start.x, - start.y, - !isFullOpen || (isFullOpen && !isSwipingDown), + if (activeDraggableNodes.length > 0 && !isRefreshing) { + const nodeIsScrolling = activeDraggableNodes.some( + node => node.node.offset.current.y !== 0, ); - debug('swipe direction', isSwipingDown ? 'down' : 'up'); - debug('active nodes', activeDraggableNodes.length); - //@ts-ignore - if (activeDraggableNodes.length > 0 && !isRefreshing) { - const nodeIsScrolling = activeDraggableNodes.some( - node => node.node.offset.current.y !== 0, - ); + /** + * Draggable nodes handling cases: + * + * 1. Sheet not fully open, swiping up, scrolling: false panning: true (will transition to scrolling once sheet reaches top position) + * 2. Sheet fully open, swiping up, scrolling: true, panning: false + * 3. Sheet not fully open, swiping down, scrolling: false, panning: true + * 4. Sheet fully open, scroll offset > 0, scrolling: true, panning: false will transition into scrolling: false, panning: true, once scroll reaches offset=0 + * 5. Add support for pull to refresh + */ - /** - * Draggable nodes handling cases: - * - * 1. Sheet not fully open, swiping up, scrolling: false panning: true (will transition to scrolling once sheet reaches top position) - * 2. Sheet fully open, swiping up, scrolling: true, panning: false - * 3. Sheet not fully open, swiping down, scrolling: false, panning: true - * 4. Sheet fully open, scroll offset > 0, scrolling: true, panning: false will transition into scrolling: false, panning: true, once scroll reaches offset=0 - * 5. Add support for pull to refresh - */ + // 1. Sheet not fully open, swiping up, scrolling: false panning: true (will transition to scrolling once sheet reaches top position) - // 1. Sheet not fully open, swiping up, scrolling: false panning: true (will transition to scrolling once sheet reaches top position) + if (!isFullOpen && !isSwipingDown) { + scrollable(false); + blockPan = false; + } - if (!isFullOpen && !isSwipingDown) { + // 2. Sheet fully open, swiping up, scrolling: true, panning: false + if (isFullOpen && !isSwipingDown) { + scrollable(true); + blockPan = true; + } + // 3. Sheet not fully open, swiping down, scrolling: false, panning: true + if (!isFullOpen && isSwipingDown) { + if (nodeIsScrolling) { + scrollable(true); + blockPan = true; + } else { scrollable(false); - debug('not full open, swiping up, scroll', false); blockPan = false; } + } - // 2. Sheet fully open, swiping up, scrolling: true, panning: false - if (isFullOpen && !isSwipingDown) { + // 4. Sheet fully open, scroll offset > 0, scrolling: true, panning: false will transition into scrolling: false, panning: true, once scroll reaches offset=0 + if (isFullOpen && isSwipingDown) { + if (nodeIsScrolling) { scrollable(true); - debug('full open, swiping up, scroll', true); blockPan = true; - } - // 3. Sheet not fully open, swiping down, scrolling: false, panning: true - if (!isFullOpen && isSwipingDown) { - if (nodeIsScrolling) { - scrollable(true); - blockPan = true; - debug( - 'not full open, swiping down, scroll on active node', - true, - ); - } else { - scrollable(false); - debug('not full open, swiping down, scroll', false); - blockPan = false; - } - } - - // 4. Sheet fully open, scroll offset > 0, scrolling: true, panning: false will transition into scrolling: false, panning: true, once scroll reaches offset=0 - if (isFullOpen && isSwipingDown) { - if (nodeIsScrolling) { - scrollable(true); - debug('full open, swiping down, scroll on active node', true); - blockPan = true; - } else { - const hasRefreshControl = activeDraggableNodes.some( - node => node.node.handlerConfig.hasRefreshControl, - ); - if (hasRefreshControl) { - for (const node of activeDraggableNodes) { - if (node.node.handlerConfig.hasRefreshControl) { - // Refresh Control will work in to 15% area of the DraggableNode. - const refreshControlBounds = - node.rectWithBoundary.py + - node.rectWithBoundary.h * - node.node.handlerConfig.refreshControlBoundary; - - if (!refreshControlBounds) continue; - if (event.absoluteY < refreshControlBounds) { - scrollable(true); - blockPan = true; - isRefreshing = true; - } + } else { + const hasRefreshControl = activeDraggableNodes.some( + node => node.node.handlerConfig.hasRefreshControl, + ); + if (hasRefreshControl) { + for (const node of activeDraggableNodes) { + if (node.node.handlerConfig.hasRefreshControl) { + // Refresh Control will work in to 15% area of the DraggableNode. + const refreshControlBounds = + node.rectWithBoundary.py + + node.rectWithBoundary.h * + node.node.handlerConfig.refreshControlBoundary; + + if (!refreshControlBounds) continue; + if (absoluteY < refreshControlBounds) { + scrollable(true); + blockPan = true; + isRefreshing = true; } } - } else { - scrollable(false); - blockPan = false; } + } else { + scrollable(false); + blockPan = false; } } - } else { - blockPan = false; } + } else { + blockPan = false; + } - if (isRefreshing) { - blockPan = true; - scrollable(true); - } + if (isRefreshing) { + blockPan = true; + scrollable(true); + } - let value = oldValue; - if (!deltaYOnGestureStart) { - deltaYOnGestureStart = deltaY; - } - deltaY = deltaY - deltaYOnGestureStart; - if (!blockPan) { - value = initialValue.current + deltaY; - oldValue = value; - } + let value = oldValue; + if (!deltaYOnGestureStart) { + deltaYOnGestureStart = deltaY; + } + deltaY = deltaY - deltaYOnGestureStart; + if (!blockPan) { + value = initialValue.current + deltaY; + oldValue = value; + } - debug('value', { - initialValue: initialValue.current, - deltaY, - value, - }); + velocity = 1; + const correctedValue = + value <= minTranslateValue.current + ? minTranslateValue.current - value + : value; - velocity = 1; - const correctedValue = - value <= minTranslateValue.current - ? minTranslateValue.current - value - : value; + if (correctedValue / overdrawFactor >= overdrawSize && deltaY <= 0) { + return; + } - if (correctedValue / overdrawFactor >= overdrawSize && deltaY <= 0) { - return; - } + const minSnapPoint = getNextPosition(0); + const translateYValue = + value <= minTranslateValue.current + ? overdrawEnabled + ? minTranslateValue.current - correctedValue / overdrawFactor + : minTranslateValue.current + : value; + + if (!closable && disableDragBeyondMinimumSnapPoint) { + translateY.value = + translateYValue >= minSnapPoint ? minSnapPoint : translateYValue; + } else { + translateY.value = translateYValue; + } + }; + const onEndJs = () => { + if (!gestureEnabled) return; + deltaYOnGestureStart = 0; + const isMovingUp = getCurrentPosition() < initialValue.current; + + if ( + (!isMovingUp && + getCurrentPosition() < initialValue.current + springOffset) || + (isMovingUp && + getCurrentPosition() > initialValue.current - springOffset) + ) { + moveSheetWithAnimation(1); + velocity = 0; + return; + } - const minSnapPoint = getNextPosition(0); - const translateYValue = - value <= minTranslateValue.current - ? overdrawEnabled - ? minTranslateValue.current - correctedValue / overdrawFactor - : minTranslateValue.current - : value; - - if (!closable && disableDragBeyondMinimumSnapPoint) { - animations.translateY.setValue( - translateYValue >= minSnapPoint ? minSnapPoint : translateYValue, - ); - } else { - animations.translateY.setValue(translateYValue); - } + if (!isMovingUp) { + snapBackward(velocity); + } else { + snapForward(velocity); + } + velocity = 0; + }; + + return Gesture.Pan() + .withRef(panGestureRef) + .onChange(event => { + const {absoluteX, absoluteY, translationY} = event; + runOnJS(onChangeJs)(translationY, absoluteX, absoluteY); }) .onEnd(() => { - if (!gestureEnabled) return; - deltaYOnGestureStart = 0; - const isMovingUp = getCurrentPosition() < initialValue.current; - - if ( - (!isMovingUp && - getCurrentPosition() < initialValue.current + springOffset) || - (isMovingUp && - getCurrentPosition() > initialValue.current - springOffset) - ) { - returnAnimation(1); - velocity = 0; - debug('return animation....', 'returning'); - return; - } - - if (!isMovingUp) { - console.log('snap back...'); - snapBackward(velocity); - } else { - snapForward(velocity); - } - velocity = 0; + runOnJS(onEndJs)(); }); }, [gestureEnabled]); @@ -872,11 +837,12 @@ export default forwardRef( actionSheetHeight.current + minTranslateValue.current - (actionSheetHeight.current * offset) / 100; - Animated.spring(animations.translateY, { - toValue: initialValue.current, - useNativeDriver: true, - ...props.openAnimationConfig, - }).start(); + setTimeout(() => { + translateY.value = withSpring( + initialValue.current, + props.openAnimationConfig || {duration: 300}, + ); + }); }, snapToRelativeOffset: (offset: number) => { if (offset === 0) { @@ -891,22 +857,24 @@ export default forwardRef( getRef().snapToOffset(100); return; } - Animated.spring(animations.translateY, { - toValue: initialValue.current, - useNativeDriver: true, - ...props.openAnimationConfig, - }).start(); + setTimeout(() => { + translateY.value = withSpring( + initialValue.current, + props.openAnimationConfig || {duration: 300}, + ); + }); }, snapToIndex: (index: number) => { if (index > snapPoints.length || index < 0) return; currentSnapIndex.current = index; initialValue.current = getNextPosition(index); - Animated.spring(animations.translateY, { - toValue: initialValue.current, - useNativeDriver: true, - ...props.openAnimationConfig, - }).start(); + setTimeout(() => { + translateY.value = withSpring( + initialValue.current, + props.openAnimationConfig || {duration: 300}, + ); + }); notifySnapIndexChanged(); }, handleChildScrollEnd: () => { @@ -915,7 +883,6 @@ export default forwardRef( ); }, modifyGesturesForLayout: (_id, layout, scrollOffset) => { - //@ts-ignore gestureBoundaries.current[_id] = { ...layout, scrollOffset: scrollOffset, @@ -934,7 +901,7 @@ export default forwardRef( onBeforeShow, setVisible, hideSheet, - animations.translateY, + translateY, props.openAnimationConfig, snapPoints.length, getNextPosition, @@ -1024,7 +991,7 @@ export default forwardRef( style={{ display: route.name !== router.currentRoute?.name ? 'none' : 'flex', - opacity: animations.routeOpacity, + opacity: routeOpacity, }}> ( ); }, - [animations.routeOpacity, router, sheetPayload], + [routeOpacity, router, sheetPayload], ); const context = { @@ -1044,8 +1011,6 @@ export default forwardRef( eventManager: internalEventManager, }; - console.log(insets); - return ( <> {visible ? ( @@ -1059,6 +1024,12 @@ export default forwardRef( { + setDimensions({ + width: event.nativeEvent.layout.width, + height: event.nativeEvent.layout.height, + }); + }} ref={rootViewContainerRef} pointerEvents={ props?.backgroundInteractionEnabled ? 'box-none' : 'auto' @@ -1066,13 +1037,12 @@ export default forwardRef( style={[ styles.parentContainer, { - opacity: animations.opacity, + opacity: opacity, width: '100%', justifyContent: 'flex-end', - height: dimensions.height, transform: [ { - translateY: animations.keyboardTranslate, + translateY: keyboardTranslate, }, ], }, @@ -1112,16 +1082,11 @@ export default forwardRef( typeof elevation === 'number' ? elevation : 5, ), flex: undefined, - height: dimensions.height - insets.top, - maxHeight: dimensions.height - insets.top, - paddingBottom: keyboard.keyboardShown - ? keyboard.keyboardHeight || 0 - : useBottomSafeAreaPadding - ? insets.bottom - : 0, + height: dimensions.height, + maxHeight: dimensions.height, transform: [ { - translateY: animations.translateY, + translateY: translateY, }, ], }}> @@ -1135,12 +1100,20 @@ export default forwardRef( { borderTopRightRadius: 10, borderTopLeftRadius: 10, + borderWidth: 2, + paddingBottom: keyboard.keyboardShown + ? keyboard.keyboardHeight || 0 + : useBottomSafeAreaPadding + ? insets.bottom + : 0, }, props.containerStyle, { maxHeight: keyboard.keyboardShown - ? dimensions.height - keyboard.keyboardHeight - : dimensions.height, + ? dimensions.height - + insets.top - + keyboard.keyboardHeight + : dimensions.height - insets.top, marginTop: keyboard.keyboardShown ? 0.5 : 0, }, ]}> @@ -1159,7 +1132,7 @@ export default forwardRef( containerStyle?.borderRadius || 10, transform: [ { - translateY: animations.underlayTranslateY, + translateY: underlayTranslateY, }, ], }} @@ -1178,8 +1151,6 @@ export default forwardRef( {router?.hasRoutes() ? ( diff --git a/src/types.ts b/src/types.ts index e26cb38..57b81ea 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,14 +1,14 @@ import React from 'react'; import { - Animated, GestureResponderEvent, LayoutRectangle, - TouchableOpacityProps, - ViewStyle, StyleProp, + TouchableOpacityProps, + ViewStyle } from 'react-native'; +import { SpringConfig } from 'react-native-reanimated/lib/typescript/animation/springUtils'; import EventManager from './eventmanager'; -import {Route} from './hooks/use-router'; +import { Route } from './hooks/use-router'; export interface Sheets {} @@ -121,17 +121,11 @@ export type ActionSheetProps = { /** * The open animation is a spring animation. You can modify it using the config below. */ - openAnimationConfig?: Omit< - Omit, - 'useNativeDriver' - >; + openAnimationConfig?: SpringConfig; /** * The open animation is a spring animation. You can modify it by providing a custom config. */ - closeAnimationConfig?: Omit< - Omit, - 'useNativeDriver' - >; + closeAnimationConfig?: SpringConfig; /** * Provide snap points ranging from 0 to 100. ActionSheet will snap between these points. If no snap points * are provided, the default is a single snap point set to `100` which means that the sheet will be opened From 39f6258ca4cac4665d3488cdaf900042beeafff9 Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Wed, 15 Oct 2025 12:20:47 +0500 Subject: [PATCH 09/56] fix keyboard and onChange, drawUndersStatusbar props --- src/index.tsx | 67 +++++++++++++++++++++++++-------------------------- src/styles.ts | 2 +- src/types.ts | 18 ++++++++------ 3 files changed, 44 insertions(+), 43 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index ff517d5..549f3ca 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -31,6 +31,7 @@ import Animated, { Easing, runOnJS, runOnUI, + useAnimatedReaction, useSharedValue, withSpring, withTiming, @@ -115,7 +116,6 @@ export default forwardRef( const minTranslateValue = useRef(0); const keyboardWasVisible = useRef(false); const animationListenerId = 266786; - const prevKeyboardHeight = useRef(0); const id = useSheetIDContext(); const sheetId = props.id || id; const lock = useRef(false); @@ -270,26 +270,30 @@ export default forwardRef( useEffect(() => { if (drawUnderStatusBar || props.onChange) { + let prevPercentage = 0; const onValueChange = (value: number) => { const correctedValue = value > minTranslateValue.current ? value - minTranslateValue.current : 0; - props?.onChange?.(correctedValue, actionSheetHeight.current); + + const percentage = + ((actionSheetHeight.current - correctedValue) / + actionSheetHeight.current) * + 100; + + const rounded = Math.round(percentage); + if (rounded !== prevPercentage && rounded > -1) { + prevPercentage = rounded; + props.onChange?.(Math.round(percentage)); + } + if (drawUnderStatusBar) { - if (lock.current) return; - const correctedHeight = keyboard.keyboardShown - ? dimensionsRef.current.height - - (keyboard.keyboardHeight + insets.bottom + insets.top) - : dimensionsRef.current.height - (insets.bottom + insets.top); - if (actionSheetHeight.current >= correctedHeight - 1) { - if (value < 100) { - underlayTranslateY.value = Math.max(value - 20, -20); - } else { - if (underlayTranslateY.value !== 100) { - underlayTranslateY.value = 100; - } - } + if (percentage > 85) { + const distanceFromTop = 100 - percentage; + underlayTranslateY.value = Math.max( + (actionSheetHeight.current / 100) * distanceFromTop, + ); } else { if (underlayTranslateY.value !== 100) { underlayTranslateY.value = 100; @@ -308,10 +312,16 @@ export default forwardRef( translateY.removeListener(animationListener); })(animationListenerId); }; - }, [props?.id, keyboard.keyboardShown, keyboard.keyboardHeight]); + }, [ + props?.id, + keyboard.keyboardShown, + keyboard.keyboardHeight, + dimensions, + ]); const onSheetLayout = React.useCallback( async (event: LayoutChangeEvent) => { + console.log('onsheetlayout', event.nativeEvent.layout); const sheetHeight = event.nativeEvent.layout.height; if (dimensionsRef.current.height === -1) { return; @@ -355,18 +365,9 @@ export default forwardRef( sheetBottomEdgePosition - (dimensionsRef.current?.height - keyboard.keyboardHeight); - initial = - sheetPositionWithKeyboard > 0 - ? initial - sheetPositionWithKeyboard - : initial; - - if (keyboard.keyboardShown) { - minTranslate = minTranslate - keyboard.keyboardHeight; - keyboardWasVisible.current = true; - prevKeyboardHeight.current = keyboard.keyboardHeight; - } else { - keyboardWasVisible.current = false; - } + initial = keyboard.keyboardShown + ? initial - sheetPositionWithKeyboard + : initial; minTranslateValue.current = minTranslate; initialValue.current = initial; @@ -375,7 +376,6 @@ export default forwardRef( moveSheetWithAnimation(undefined, initial, minTranslate); if (initial > 100) { - if (lock.current) return; underlayTranslateY.value = 100; } if (Platform.OS === 'web') { @@ -1025,6 +1025,7 @@ export default forwardRef( { + console.log('root layout', event.nativeEvent.layout); setDimensions({ width: event.nativeEvent.layout.width, height: event.nativeEvent.layout.height, @@ -1101,11 +1102,9 @@ export default forwardRef( borderTopRightRadius: 10, borderTopLeftRadius: 10, borderWidth: 2, - paddingBottom: keyboard.keyboardShown - ? keyboard.keyboardHeight || 0 - : useBottomSafeAreaPadding - ? insets.bottom - : 0, + paddingBottom: useBottomSafeAreaPadding + ? insets.bottom + : 0, }, props.containerStyle, { diff --git a/src/styles.ts b/src/styles.ts index ab8b968..5a084d8 100644 --- a/src/styles.ts +++ b/src/styles.ts @@ -13,7 +13,7 @@ export const styles = StyleSheet.create({ }, indicator: { height: 6, - width: 45, + width: 120, borderRadius: 100, backgroundColor: "#f0f0f0", marginVertical: 5, diff --git a/src/types.ts b/src/types.ts index 57b81ea..c8c7c57 100644 --- a/src/types.ts +++ b/src/types.ts @@ -4,11 +4,11 @@ import { LayoutRectangle, StyleProp, TouchableOpacityProps, - ViewStyle + ViewStyle, } from 'react-native'; -import { SpringConfig } from 'react-native-reanimated/lib/typescript/animation/springUtils'; +import {SpringConfig} from 'react-native-reanimated/lib/typescript/animation/springUtils'; import EventManager from './eventmanager'; -import { Route } from './hooks/use-router'; +import {Route} from './hooks/use-router'; export interface Sheets {} @@ -312,7 +312,7 @@ export type ActionSheetProps = { /** * Apply padding to bottom based on device safe area insets. - * + * * @default true */ useBottomSafeAreaPadding?: boolean; @@ -338,12 +338,14 @@ export type ActionSheetProps = { onOpen?: () => void; /** - * Event called when the position of the ActionSheet changes. When the `position` value is 0, it means that the ActionSheet has reached top. + * Event called when the position of the ActionSheet changes. + * + * @param {number} percentage Sheet visible on the screen in percentage. */ - onChange?: (position: number, height: number) => void; + onChange?: (position: number) => void; /** - * additional props to pass to the backdrop element. Useful for adding custom accessibility props. + * Additional props to pass to the backdrop element. Useful for adding custom accessibility props. */ backdropProps?: Partial; @@ -351,7 +353,7 @@ export type ActionSheetProps = { * Default safeArea insets provided through a library such as * react-native-safe-area-insets. This also helps in giving a tiny boost * in performance as the sheet does not have to calculate insets anymore. - * + * * @deprecated Insets are used internally by default through react-native-safe-area-insets. This prop is no-op. */ safeAreaInsets?: {top: number; left: number; right: number; bottom: number}; From e2ab60665d49776e2163929ab6f0f3a110a92633 Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Wed, 15 Oct 2025 12:21:49 +0500 Subject: [PATCH 10/56] cleanup --- src/index.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 549f3ca..9f9b586 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -31,7 +31,6 @@ import Animated, { Easing, runOnJS, runOnUI, - useAnimatedReaction, useSharedValue, withSpring, withTiming, @@ -118,7 +117,6 @@ export default forwardRef( const animationListenerId = 266786; const id = useSheetIDContext(); const sheetId = props.id || id; - const lock = useRef(false); const panViewRef = useRef(null); const rootViewContainerRef = useRef(null); const gestureBoundaries = useRef<{ From 2f1a0f3a739ef924357a34ba480b36b729a3edb3 Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Wed, 15 Oct 2025 12:34:30 +0500 Subject: [PATCH 11/56] cleanup --- src/index.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 9f9b586..07cb644 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -279,7 +279,7 @@ export default forwardRef( ((actionSheetHeight.current - correctedValue) / actionSheetHeight.current) * 100; - + const rounded = Math.round(percentage); if (rounded !== prevPercentage && rounded > -1) { prevPercentage = rounded; @@ -1099,7 +1099,6 @@ export default forwardRef( { borderTopRightRadius: 10, borderTopLeftRadius: 10, - borderWidth: 2, paddingBottom: useBottomSafeAreaPadding ? insets.bottom : 0, From 587339bcaa76b91153282897e2365e7e469d4afb Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Thu, 16 Oct 2025 08:48:31 +0500 Subject: [PATCH 12/56] minor fixes --- src/index.tsx | 116 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 69 insertions(+), 47 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 07cb644..0271320 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -159,7 +159,7 @@ export default forwardRef( const opacity = useSharedValue(0); const translateY = useSharedValue(0); - const underlayTranslateY = useSharedValue(100); + const underlayTranslateY = useSharedValue(130); const keyboardTranslate = useSharedValue(0); const routeOpacity = useSharedValue(0); const router = useRouter({ @@ -209,7 +209,7 @@ export default forwardRef( initial, config || { velocity: typeof velocity !== 'number' ? undefined : velocity, - damping: 16, + dampingRatio: 0.7, }, ); @@ -293,8 +293,8 @@ export default forwardRef( (actionSheetHeight.current / 100) * distanceFromTop, ); } else { - if (underlayTranslateY.value !== 100) { - underlayTranslateY.value = 100; + if (underlayTranslateY.value !== 130) { + underlayTranslateY.value = 130; } } } @@ -319,7 +319,6 @@ export default forwardRef( const onSheetLayout = React.useCallback( async (event: LayoutChangeEvent) => { - console.log('onsheetlayout', event.nativeEvent.layout); const sheetHeight = event.nativeEvent.layout.height; if (dimensionsRef.current.height === -1) { return; @@ -337,6 +336,7 @@ export default forwardRef( let initial = initialValue.current; minTranslate = rootViewHeight - actionSheetHeight.current; + if (initial === -1) { translateY.value = rootViewHeight * 1.1; } @@ -367,14 +367,18 @@ export default forwardRef( ? initial - sheetPositionWithKeyboard : initial; + if (keyboard.keyboardShown) { + minTranslate = minTranslate - keyboard.keyboardHeight; + } + minTranslateValue.current = minTranslate; initialValue.current = initial; animationSheetOpacity(1); moveSheetWithAnimation(undefined, initial, minTranslate); - if (initial > 100) { - underlayTranslateY.value = 100; + if (initial > 130) { + underlayTranslateY.value = 130; } if (Platform.OS === 'web') { document.body.style.overflowY = 'hidden'; @@ -601,18 +605,6 @@ export default forwardRef( [], ); - function scrollable(value: boolean) { - if (Platform.OS === 'ios') return; - for (let i = 0; i < draggableNodes.current.length; i++) { - const node = draggableNodes.current[i]; - const scrollRef = resolveScrollRef(node.ref); - scrollRef?.setNativeProps({ - scrollEnabled: value, - pointerEvents: value ? 'auto' : 'none', - }); - } - } - const panGesture = React.useMemo(() => { let prevDeltaY = 0; let deltaYOnGestureStart = 0; @@ -623,10 +615,40 @@ export default forwardRef( }; let oldValue = 0; let isRefreshing = false; + const offsets: number[] = []; + + function scrollable(value: boolean) { + for (let i = 0; i < draggableNodes.current.length; i++) { + const node = draggableNodes.current[i]; + const scrollRef = resolveScrollRef(node.ref); + if (Platform.OS === 'ios') { + if (!value) { + if (!offsets[i] || node.offset.current?.y === 0) { + offsets[i] = node.offset.current?.y || 0; + } + scrollRef.scrollTo({ + x: 0, + y: offsets[i], + animated: false, + }); + } else { + offsets[i] = node.offset.current?.y || 0; + } + } else { + scrollRef?.setNativeProps({ + scrollEnabled: value, + pointerEvents: value ? 'auto' : 'none', + }); + } + } + + } + + + let blockPan = false; const onChangeJs = (translationY, absoluteX, absoluteY) => { if (!gestureEnabled) return; - let blockPan = false; let deltaY = translationY; let isSwipingDown = prevDeltaY < deltaY; @@ -639,10 +661,7 @@ export default forwardRef( }; } - const isFullOpen = - translateY.value <= minTranslateValue.current + 5 - ? 0 - : (translateY.value as number); + const isFullOpen = getCurrentPosition() === 0; const activeDraggableNodes = getActiveDraggableNodes( start.x, @@ -666,10 +685,13 @@ export default forwardRef( */ // 1. Sheet not fully open, swiping up, scrolling: false panning: true (will transition to scrolling once sheet reaches top position) - if (!isFullOpen && !isSwipingDown) { scrollable(false); + if (blockPan) { + deltaYOnGestureStart = prevDeltaY; + } blockPan = false; + } // 2. Sheet fully open, swiping up, scrolling: true, panning: false @@ -684,6 +706,9 @@ export default forwardRef( blockPan = true; } else { scrollable(false); + if (blockPan) { + deltaYOnGestureStart = prevDeltaY; + } blockPan = false; } } @@ -716,6 +741,9 @@ export default forwardRef( } } else { scrollable(false); + if (blockPan) { + deltaYOnGestureStart = prevDeltaY; + } blockPan = false; } } @@ -739,6 +767,8 @@ export default forwardRef( oldValue = value; } + console.log(deltaY, 'deltaY'); + velocity = 1; const correctedValue = value <= minTranslateValue.current @@ -835,12 +865,10 @@ export default forwardRef( actionSheetHeight.current + minTranslateValue.current - (actionSheetHeight.current * offset) / 100; - setTimeout(() => { - translateY.value = withSpring( - initialValue.current, - props.openAnimationConfig || {duration: 300}, - ); - }); + translateY.value = withSpring( + initialValue.current, + props.openAnimationConfig || {dampingRatio: 0.7}, + ); }, snapToRelativeOffset: (offset: number) => { if (offset === 0) { @@ -855,24 +883,19 @@ export default forwardRef( getRef().snapToOffset(100); return; } - setTimeout(() => { - translateY.value = withSpring( - initialValue.current, - props.openAnimationConfig || {duration: 300}, - ); - }); + translateY.value = withSpring( + initialValue.current, + props.openAnimationConfig || {dampingRatio: 0.7}, + ); }, snapToIndex: (index: number) => { if (index > snapPoints.length || index < 0) return; currentSnapIndex.current = index; initialValue.current = getNextPosition(index); - - setTimeout(() => { - translateY.value = withSpring( - initialValue.current, - props.openAnimationConfig || {duration: 300}, - ); - }); + translateY.value = withSpring( + initialValue.current, + props.openAnimationConfig || {dampingRatio: 0.7}, + ); notifySnapIndexChanged(); }, handleChildScrollEnd: () => { @@ -1023,7 +1046,6 @@ export default forwardRef( { - console.log('root layout', event.nativeEvent.layout); setDimensions({ width: event.nativeEvent.layout.width, height: event.nativeEvent.layout.height, @@ -1116,9 +1138,9 @@ export default forwardRef( {drawUnderStatusBar ? ( Date: Thu, 16 Oct 2025 08:48:56 +0500 Subject: [PATCH 13/56] fix ios example --- example/ios/Podfile.lock | 2835 +++++++++++++++++ example/ios/example.xcodeproj/project.pbxproj | 7 + .../contents.xcworkspacedata | 10 + example/ios/example/Info.plist | 3 +- 4 files changed, 2854 insertions(+), 1 deletion(-) create mode 100644 example/ios/Podfile.lock create mode 100644 example/ios/example.xcworkspace/contents.xcworkspacedata diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock new file mode 100644 index 0000000..9a7ac0e --- /dev/null +++ b/example/ios/Podfile.lock @@ -0,0 +1,2835 @@ +PODS: + - boost (1.84.0) + - DoubleConversion (1.1.6) + - fast_float (8.0.0) + - FBLazyVector (0.81.1) + - fmt (11.0.2) + - glog (0.3.5) + - hermes-engine (0.81.1): + - hermes-engine/Pre-built (= 0.81.1) + - hermes-engine/Pre-built (0.81.1) + - RCT-Folly (2024.11.18.00): + - boost + - DoubleConversion + - fast_float (= 8.0.0) + - fmt (= 11.0.2) + - glog + - RCT-Folly/Default (= 2024.11.18.00) + - RCT-Folly/Default (2024.11.18.00): + - boost + - DoubleConversion + - fast_float (= 8.0.0) + - fmt (= 11.0.2) + - glog + - RCT-Folly/Fabric (2024.11.18.00): + - boost + - DoubleConversion + - fast_float (= 8.0.0) + - fmt (= 11.0.2) + - glog + - RCTDeprecation (0.81.1) + - RCTRequired (0.81.1) + - RCTTypeSafety (0.81.1): + - FBLazyVector (= 0.81.1) + - RCTRequired (= 0.81.1) + - React-Core (= 0.81.1) + - React (0.81.1): + - React-Core (= 0.81.1) + - React-Core/DevSupport (= 0.81.1) + - React-Core/RCTWebSocket (= 0.81.1) + - React-RCTActionSheet (= 0.81.1) + - React-RCTAnimation (= 0.81.1) + - React-RCTBlob (= 0.81.1) + - React-RCTImage (= 0.81.1) + - React-RCTLinking (= 0.81.1) + - React-RCTNetwork (= 0.81.1) + - React-RCTSettings (= 0.81.1) + - React-RCTText (= 0.81.1) + - React-RCTVibration (= 0.81.1) + - React-callinvoker (0.81.1) + - React-Core (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default (= 0.81.1) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/CoreModulesHeaders (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/Default (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/DevSupport (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default (= 0.81.1) + - React-Core/RCTWebSocket (= 0.81.1) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTActionSheetHeaders (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTAnimationHeaders (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTBlobHeaders (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTImageHeaders (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTLinkingHeaders (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTNetworkHeaders (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTSettingsHeaders (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTTextHeaders (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTVibrationHeaders (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTWebSocket (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default (= 0.81.1) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-CoreModules (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - RCTTypeSafety (= 0.81.1) + - React-Core/CoreModulesHeaders (= 0.81.1) + - React-jsi (= 0.81.1) + - React-jsinspector + - React-jsinspectorcdp + - React-jsinspectortracing + - React-NativeModulesApple + - React-RCTBlob + - React-RCTFBReactNativeSpec + - React-RCTImage (= 0.81.1) + - React-runtimeexecutor + - ReactCommon + - SocketRocket + - React-cxxreact (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker (= 0.81.1) + - React-debug (= 0.81.1) + - React-jsi (= 0.81.1) + - React-jsinspector + - React-jsinspectorcdp + - React-jsinspectortracing + - React-logger (= 0.81.1) + - React-perflogger (= 0.81.1) + - React-runtimeexecutor + - React-timing (= 0.81.1) + - SocketRocket + - React-debug (0.81.1) + - React-defaultsnativemodule (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-domnativemodule + - React-featureflagsnativemodule + - React-idlecallbacksnativemodule + - React-jsi + - React-jsiexecutor + - React-microtasksnativemodule + - React-RCTFBReactNativeSpec + - SocketRocket + - React-domnativemodule (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-Fabric + - React-Fabric/bridging + - React-FabricComponents + - React-graphics + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - React-runtimeexecutor + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-Fabric (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/animations (= 0.81.1) + - React-Fabric/attributedstring (= 0.81.1) + - React-Fabric/bridging (= 0.81.1) + - React-Fabric/componentregistry (= 0.81.1) + - React-Fabric/componentregistrynative (= 0.81.1) + - React-Fabric/components (= 0.81.1) + - React-Fabric/consistency (= 0.81.1) + - React-Fabric/core (= 0.81.1) + - React-Fabric/dom (= 0.81.1) + - React-Fabric/imagemanager (= 0.81.1) + - React-Fabric/leakchecker (= 0.81.1) + - React-Fabric/mounting (= 0.81.1) + - React-Fabric/observers (= 0.81.1) + - React-Fabric/scheduler (= 0.81.1) + - React-Fabric/telemetry (= 0.81.1) + - React-Fabric/templateprocessor (= 0.81.1) + - React-Fabric/uimanager (= 0.81.1) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/animations (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/attributedstring (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/bridging (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/componentregistry (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/componentregistrynative (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/components (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/components/legacyviewmanagerinterop (= 0.81.1) + - React-Fabric/components/root (= 0.81.1) + - React-Fabric/components/scrollview (= 0.81.1) + - React-Fabric/components/view (= 0.81.1) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/components/legacyviewmanagerinterop (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/components/root (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/components/scrollview (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/components/view (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-renderercss + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-Fabric/consistency (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/core (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/dom (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/imagemanager (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/leakchecker (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/mounting (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/observers (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/observers/events (= 0.81.1) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/observers/events (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/scheduler (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/observers/events + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-performancetimeline + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/telemetry (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/templateprocessor (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/uimanager (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/uimanager/consistency (= 0.81.1) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererconsistency + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/uimanager/consistency (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererconsistency + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-FabricComponents (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-FabricComponents/components (= 0.81.1) + - React-FabricComponents/textlayoutmanager (= 0.81.1) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-FabricComponents/components/inputaccessory (= 0.81.1) + - React-FabricComponents/components/iostextinput (= 0.81.1) + - React-FabricComponents/components/modal (= 0.81.1) + - React-FabricComponents/components/rncore (= 0.81.1) + - React-FabricComponents/components/safeareaview (= 0.81.1) + - React-FabricComponents/components/scrollview (= 0.81.1) + - React-FabricComponents/components/switch (= 0.81.1) + - React-FabricComponents/components/text (= 0.81.1) + - React-FabricComponents/components/textinput (= 0.81.1) + - React-FabricComponents/components/unimplementedview (= 0.81.1) + - React-FabricComponents/components/virtualview (= 0.81.1) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/inputaccessory (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/iostextinput (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/modal (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/rncore (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/safeareaview (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/scrollview (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/switch (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/text (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/textinput (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/unimplementedview (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/virtualview (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/textlayoutmanager (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricImage (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired (= 0.81.1) + - RCTTypeSafety (= 0.81.1) + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-jsiexecutor (= 0.81.1) + - React-logger + - React-rendererdebug + - React-utils + - ReactCommon + - SocketRocket + - Yoga + - React-featureflags (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - SocketRocket + - React-featureflagsnativemodule (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-featureflags + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - ReactCommon/turbomodule/core + - SocketRocket + - React-graphics (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-jsi + - React-jsiexecutor + - React-utils + - SocketRocket + - React-hermes (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-cxxreact (= 0.81.1) + - React-jsi + - React-jsiexecutor (= 0.81.1) + - React-jsinspector + - React-jsinspectorcdp + - React-jsinspectortracing + - React-perflogger (= 0.81.1) + - React-runtimeexecutor + - SocketRocket + - React-idlecallbacksnativemodule (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - React-runtimeexecutor + - React-runtimescheduler + - ReactCommon/turbomodule/core + - SocketRocket + - React-ImageManager (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-Core/Default + - React-debug + - React-Fabric + - React-graphics + - React-rendererdebug + - React-utils + - SocketRocket + - React-jserrorhandler (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-cxxreact + - React-debug + - React-featureflags + - React-jsi + - ReactCommon/turbomodule/bridging + - SocketRocket + - React-jsi (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - SocketRocket + - React-jsiexecutor (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-cxxreact (= 0.81.1) + - React-jsi (= 0.81.1) + - React-jsinspector + - React-jsinspectorcdp + - React-jsinspectortracing + - React-perflogger (= 0.81.1) + - React-runtimeexecutor + - SocketRocket + - React-jsinspector (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-featureflags + - React-jsi + - React-jsinspectorcdp + - React-jsinspectornetwork + - React-jsinspectortracing + - React-oscompat + - React-perflogger (= 0.81.1) + - React-runtimeexecutor + - SocketRocket + - React-jsinspectorcdp (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - SocketRocket + - React-jsinspectornetwork (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-featureflags + - React-jsinspectorcdp + - React-performancetimeline + - React-timing + - SocketRocket + - React-jsinspectortracing (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-oscompat + - React-timing + - SocketRocket + - React-jsitooling (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-cxxreact (= 0.81.1) + - React-jsi (= 0.81.1) + - React-jsinspector + - React-jsinspectorcdp + - React-jsinspectortracing + - React-runtimeexecutor + - SocketRocket + - React-jsitracing (0.81.1): + - React-jsi + - React-logger (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - SocketRocket + - React-Mapbuffer (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-debug + - SocketRocket + - React-microtasksnativemodule (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - ReactCommon/turbomodule/core + - SocketRocket + - react-native-safe-area-context (5.6.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - react-native-safe-area-context/common (= 5.6.1) + - react-native-safe-area-context/fabric (= 5.6.1) + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - react-native-safe-area-context/common (5.6.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - react-native-safe-area-context/fabric (5.6.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - react-native-safe-area-context/common + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-NativeModulesApple (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker + - React-Core + - React-cxxreact + - React-featureflags + - React-jsi + - React-jsinspector + - React-jsinspectorcdp + - React-runtimeexecutor + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - SocketRocket + - React-oscompat (0.81.1) + - React-perflogger (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - SocketRocket + - React-performancetimeline (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-featureflags + - React-jsinspectortracing + - React-perflogger + - React-timing + - SocketRocket + - React-RCTActionSheet (0.81.1): + - React-Core/RCTActionSheetHeaders (= 0.81.1) + - React-RCTAnimation (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - RCTTypeSafety + - React-Core/RCTAnimationHeaders + - React-featureflags + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - SocketRocket + - React-RCTAppDelegate (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-CoreModules + - React-debug + - React-defaultsnativemodule + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-jsitooling + - React-NativeModulesApple + - React-RCTFabric + - React-RCTFBReactNativeSpec + - React-RCTImage + - React-RCTNetwork + - React-RCTRuntime + - React-rendererdebug + - React-RuntimeApple + - React-RuntimeCore + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon + - SocketRocket + - React-RCTBlob (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-Core/RCTBlobHeaders + - React-Core/RCTWebSocket + - React-jsi + - React-jsinspector + - React-jsinspectorcdp + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - React-RCTNetwork + - ReactCommon + - SocketRocket + - React-RCTFabric (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-Core + - React-debug + - React-Fabric + - React-FabricComponents + - React-FabricImage + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-jsinspector + - React-jsinspectorcdp + - React-jsinspectornetwork + - React-jsinspectortracing + - React-performancetimeline + - React-RCTAnimation + - React-RCTFBReactNativeSpec + - React-RCTImage + - React-RCTText + - React-rendererconsistency + - React-renderercss + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-RCTFBReactNativeSpec (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec/components (= 0.81.1) + - ReactCommon + - SocketRocket + - React-RCTFBReactNativeSpec/components (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-NativeModulesApple + - React-rendererdebug + - React-utils + - ReactCommon + - SocketRocket + - Yoga + - React-RCTImage (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - RCTTypeSafety + - React-Core/RCTImageHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - React-RCTNetwork + - ReactCommon + - SocketRocket + - React-RCTLinking (0.81.1): + - React-Core/RCTLinkingHeaders (= 0.81.1) + - React-jsi (= 0.81.1) + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - ReactCommon/turbomodule/core (= 0.81.1) + - React-RCTNetwork (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - RCTTypeSafety + - React-Core/RCTNetworkHeaders + - React-featureflags + - React-jsi + - React-jsinspectorcdp + - React-jsinspectornetwork + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - SocketRocket + - React-RCTRuntime (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-Core + - React-jsi + - React-jsinspector + - React-jsinspectorcdp + - React-jsinspectortracing + - React-jsitooling + - React-RuntimeApple + - React-RuntimeCore + - React-runtimeexecutor + - React-RuntimeHermes + - SocketRocket + - React-RCTSettings (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - RCTTypeSafety + - React-Core/RCTSettingsHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - SocketRocket + - React-RCTText (0.81.1): + - React-Core/RCTTextHeaders (= 0.81.1) + - Yoga + - React-RCTVibration (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-Core/RCTVibrationHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - SocketRocket + - React-rendererconsistency (0.81.1) + - React-renderercss (0.81.1): + - React-debug + - React-utils + - React-rendererdebug (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-debug + - SocketRocket + - React-RuntimeApple (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker + - React-Core/Default + - React-CoreModules + - React-cxxreact + - React-featureflags + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsitooling + - React-Mapbuffer + - React-NativeModulesApple + - React-RCTFabric + - React-RCTFBReactNativeSpec + - React-RuntimeCore + - React-runtimeexecutor + - React-RuntimeHermes + - React-runtimescheduler + - React-utils + - SocketRocket + - React-RuntimeCore (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-cxxreact + - React-Fabric + - React-featureflags + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsitooling + - React-performancetimeline + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - React-runtimeexecutor (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-debug + - React-featureflags + - React-jsi (= 0.81.1) + - React-utils + - SocketRocket + - React-RuntimeHermes (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-featureflags + - React-hermes + - React-jsi + - React-jsinspector + - React-jsinspectorcdp + - React-jsinspectortracing + - React-jsitooling + - React-jsitracing + - React-RuntimeCore + - React-runtimeexecutor + - React-utils + - SocketRocket + - React-runtimescheduler (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker + - React-cxxreact + - React-debug + - React-featureflags + - React-jsi + - React-jsinspectortracing + - React-performancetimeline + - React-rendererconsistency + - React-rendererdebug + - React-runtimeexecutor + - React-timing + - React-utils + - SocketRocket + - React-timing (0.81.1): + - React-debug + - React-utils (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-debug + - React-jsi (= 0.81.1) + - SocketRocket + - ReactAppDependencyProvider (0.81.1): + - ReactCodegen + - ReactCodegen (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-FabricImage + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-NativeModulesApple + - React-RCTAppDelegate + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - SocketRocket + - ReactCommon (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - ReactCommon/turbomodule (= 0.81.1) + - SocketRocket + - ReactCommon/turbomodule (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker (= 0.81.1) + - React-cxxreact (= 0.81.1) + - React-jsi (= 0.81.1) + - React-logger (= 0.81.1) + - React-perflogger (= 0.81.1) + - ReactCommon/turbomodule/bridging (= 0.81.1) + - ReactCommon/turbomodule/core (= 0.81.1) + - SocketRocket + - ReactCommon/turbomodule/bridging (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker (= 0.81.1) + - React-cxxreact (= 0.81.1) + - React-jsi (= 0.81.1) + - React-logger (= 0.81.1) + - React-perflogger (= 0.81.1) + - SocketRocket + - ReactCommon/turbomodule/core (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker (= 0.81.1) + - React-cxxreact (= 0.81.1) + - React-debug (= 0.81.1) + - React-featureflags (= 0.81.1) + - React-jsi (= 0.81.1) + - React-logger (= 0.81.1) + - React-perflogger (= 0.81.1) + - React-utils (= 0.81.1) + - SocketRocket + - RNGestureHandler (2.28.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - RNReanimated (3.19.2): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNReanimated/reanimated (= 3.19.2) + - RNReanimated/worklets (= 3.19.2) + - SocketRocket + - Yoga + - RNReanimated/reanimated (3.19.2): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNReanimated/reanimated/apple (= 3.19.2) + - SocketRocket + - Yoga + - RNReanimated/reanimated/apple (3.19.2): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - RNReanimated/worklets (3.19.2): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNReanimated/worklets/apple (= 3.19.2) + - SocketRocket + - Yoga + - RNReanimated/worklets/apple (3.19.2): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - SocketRocket (0.7.1) + - Yoga (0.0.0) + +DEPENDENCIES: + - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) + - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) + - fast_float (from `../node_modules/react-native/third-party-podspecs/fast_float.podspec`) + - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) + - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) + - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) + - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) + - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) + - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) + - RCTRequired (from `../node_modules/react-native/Libraries/Required`) + - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) + - React (from `../node_modules/react-native/`) + - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) + - React-Core (from `../node_modules/react-native/`) + - React-Core/RCTWebSocket (from `../node_modules/react-native/`) + - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) + - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) + - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`) + - React-defaultsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/defaults`) + - React-domnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/dom`) + - React-Fabric (from `../node_modules/react-native/ReactCommon`) + - React-FabricComponents (from `../node_modules/react-native/ReactCommon`) + - React-FabricImage (from `../node_modules/react-native/ReactCommon`) + - React-featureflags (from `../node_modules/react-native/ReactCommon/react/featureflags`) + - React-featureflagsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/featureflags`) + - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`) + - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) + - React-idlecallbacksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks`) + - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`) + - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`) + - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) + - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) + - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`) + - React-jsinspectorcdp (from `../node_modules/react-native/ReactCommon/jsinspector-modern/cdp`) + - React-jsinspectornetwork (from `../node_modules/react-native/ReactCommon/jsinspector-modern/network`) + - React-jsinspectortracing (from `../node_modules/react-native/ReactCommon/jsinspector-modern/tracing`) + - React-jsitooling (from `../node_modules/react-native/ReactCommon/jsitooling`) + - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`) + - React-logger (from `../node_modules/react-native/ReactCommon/logger`) + - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) + - React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) + - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) + - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) + - React-oscompat (from `../node_modules/react-native/ReactCommon/oscompat`) + - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) + - React-performancetimeline (from `../node_modules/react-native/ReactCommon/react/performance/timeline`) + - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) + - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) + - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`) + - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) + - React-RCTFabric (from `../node_modules/react-native/React`) + - React-RCTFBReactNativeSpec (from `../node_modules/react-native/React`) + - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) + - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) + - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) + - React-RCTRuntime (from `../node_modules/react-native/React/Runtime`) + - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) + - React-RCTText (from `../node_modules/react-native/Libraries/Text`) + - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) + - React-rendererconsistency (from `../node_modules/react-native/ReactCommon/react/renderer/consistency`) + - React-renderercss (from `../node_modules/react-native/ReactCommon/react/renderer/css`) + - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`) + - React-RuntimeApple (from `../node_modules/react-native/ReactCommon/react/runtime/platform/ios`) + - React-RuntimeCore (from `../node_modules/react-native/ReactCommon/react/runtime`) + - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) + - React-RuntimeHermes (from `../node_modules/react-native/ReactCommon/react/runtime`) + - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) + - React-timing (from `../node_modules/react-native/ReactCommon/react/timing`) + - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) + - ReactAppDependencyProvider (from `build/generated/ios`) + - ReactCodegen (from `build/generated/ios`) + - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) + - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) + - RNReanimated (from `../node_modules/react-native-reanimated`) + - SocketRocket (~> 0.7.1) + - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) + +SPEC REPOS: + trunk: + - SocketRocket + +EXTERNAL SOURCES: + boost: + :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" + DoubleConversion: + :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" + fast_float: + :podspec: "../node_modules/react-native/third-party-podspecs/fast_float.podspec" + FBLazyVector: + :path: "../node_modules/react-native/Libraries/FBLazyVector" + fmt: + :podspec: "../node_modules/react-native/third-party-podspecs/fmt.podspec" + glog: + :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" + hermes-engine: + :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" + :tag: hermes-2025-07-07-RNv0.81.0-e0fc67142ec0763c6b6153ca2bf96df815539782 + RCT-Folly: + :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" + RCTDeprecation: + :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" + RCTRequired: + :path: "../node_modules/react-native/Libraries/Required" + RCTTypeSafety: + :path: "../node_modules/react-native/Libraries/TypeSafety" + React: + :path: "../node_modules/react-native/" + React-callinvoker: + :path: "../node_modules/react-native/ReactCommon/callinvoker" + React-Core: + :path: "../node_modules/react-native/" + React-CoreModules: + :path: "../node_modules/react-native/React/CoreModules" + React-cxxreact: + :path: "../node_modules/react-native/ReactCommon/cxxreact" + React-debug: + :path: "../node_modules/react-native/ReactCommon/react/debug" + React-defaultsnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/defaults" + React-domnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/dom" + React-Fabric: + :path: "../node_modules/react-native/ReactCommon" + React-FabricComponents: + :path: "../node_modules/react-native/ReactCommon" + React-FabricImage: + :path: "../node_modules/react-native/ReactCommon" + React-featureflags: + :path: "../node_modules/react-native/ReactCommon/react/featureflags" + React-featureflagsnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/featureflags" + React-graphics: + :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics" + React-hermes: + :path: "../node_modules/react-native/ReactCommon/hermes" + React-idlecallbacksnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks" + React-ImageManager: + :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios" + React-jserrorhandler: + :path: "../node_modules/react-native/ReactCommon/jserrorhandler" + React-jsi: + :path: "../node_modules/react-native/ReactCommon/jsi" + React-jsiexecutor: + :path: "../node_modules/react-native/ReactCommon/jsiexecutor" + React-jsinspector: + :path: "../node_modules/react-native/ReactCommon/jsinspector-modern" + React-jsinspectorcdp: + :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/cdp" + React-jsinspectornetwork: + :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/network" + React-jsinspectortracing: + :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/tracing" + React-jsitooling: + :path: "../node_modules/react-native/ReactCommon/jsitooling" + React-jsitracing: + :path: "../node_modules/react-native/ReactCommon/hermes/executor/" + React-logger: + :path: "../node_modules/react-native/ReactCommon/logger" + React-Mapbuffer: + :path: "../node_modules/react-native/ReactCommon" + React-microtasksnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/microtasks" + react-native-safe-area-context: + :path: "../node_modules/react-native-safe-area-context" + React-NativeModulesApple: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" + React-oscompat: + :path: "../node_modules/react-native/ReactCommon/oscompat" + React-perflogger: + :path: "../node_modules/react-native/ReactCommon/reactperflogger" + React-performancetimeline: + :path: "../node_modules/react-native/ReactCommon/react/performance/timeline" + React-RCTActionSheet: + :path: "../node_modules/react-native/Libraries/ActionSheetIOS" + React-RCTAnimation: + :path: "../node_modules/react-native/Libraries/NativeAnimation" + React-RCTAppDelegate: + :path: "../node_modules/react-native/Libraries/AppDelegate" + React-RCTBlob: + :path: "../node_modules/react-native/Libraries/Blob" + React-RCTFabric: + :path: "../node_modules/react-native/React" + React-RCTFBReactNativeSpec: + :path: "../node_modules/react-native/React" + React-RCTImage: + :path: "../node_modules/react-native/Libraries/Image" + React-RCTLinking: + :path: "../node_modules/react-native/Libraries/LinkingIOS" + React-RCTNetwork: + :path: "../node_modules/react-native/Libraries/Network" + React-RCTRuntime: + :path: "../node_modules/react-native/React/Runtime" + React-RCTSettings: + :path: "../node_modules/react-native/Libraries/Settings" + React-RCTText: + :path: "../node_modules/react-native/Libraries/Text" + React-RCTVibration: + :path: "../node_modules/react-native/Libraries/Vibration" + React-rendererconsistency: + :path: "../node_modules/react-native/ReactCommon/react/renderer/consistency" + React-renderercss: + :path: "../node_modules/react-native/ReactCommon/react/renderer/css" + React-rendererdebug: + :path: "../node_modules/react-native/ReactCommon/react/renderer/debug" + React-RuntimeApple: + :path: "../node_modules/react-native/ReactCommon/react/runtime/platform/ios" + React-RuntimeCore: + :path: "../node_modules/react-native/ReactCommon/react/runtime" + React-runtimeexecutor: + :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" + React-RuntimeHermes: + :path: "../node_modules/react-native/ReactCommon/react/runtime" + React-runtimescheduler: + :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" + React-timing: + :path: "../node_modules/react-native/ReactCommon/react/timing" + React-utils: + :path: "../node_modules/react-native/ReactCommon/react/utils" + ReactAppDependencyProvider: + :path: build/generated/ios + ReactCodegen: + :path: build/generated/ios + ReactCommon: + :path: "../node_modules/react-native/ReactCommon" + RNGestureHandler: + :path: "../node_modules/react-native-gesture-handler" + RNReanimated: + :path: "../node_modules/react-native-reanimated" + Yoga: + :path: "../node_modules/react-native/ReactCommon/yoga" + +SPEC CHECKSUMS: + boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 + DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb + fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 + FBLazyVector: b8f1312d48447cca7b4abc21ed155db14742bd03 + fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd + glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 + hermes-engine: 4f8246b1f6d79f625e0d99472d1f3a71da4d28ca + RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 + RCTDeprecation: c4b9e2fd0ab200e3af72b013ed6113187c607077 + RCTRequired: e97dd5dafc1db8094e63bc5031e0371f092ae92a + RCTTypeSafety: 720403058b7c1380c6a3ae5706981d6362962c89 + React: f1486d005993b0af01943af1850d3d4f3b597545 + React-callinvoker: 133f69368c8559e744efa345223625d412f5dfbe + React-Core: 559823921b4f294c2840fa8238ca958a29ddc211 + React-CoreModules: c41e7bbfabbc420783bb926f45837a0d5e53341e + React-cxxreact: 9cb9fa738274a1b36b97ede09c8a6717dec1a20b + React-debug: e01581e1589f329e61c95b332bf7f4969b10564b + React-defaultsnativemodule: bbb39447caa6b6cf9405fa0099f828c083640faa + React-domnativemodule: 03744d12b6d56d098531a933730bf1d4cb79bdfb + React-Fabric: 530b3993a12a96e8a7cdb9f0ef48e605277b572e + React-FabricComponents: 271ec2a9b2c00ac66fd6d1fd24e9e964d907751d + React-FabricImage: d0af66e976dbab7f8b81e36dd369fc70727d2695 + React-featureflags: 269704c8eff86e0485c9d384e286350fcda6eb70 + React-featureflagsnativemodule: db1e5d88a912fb08a5ece33fcf64e1b732da8467 + React-graphics: b19d03a01b0722b4dc82f47acb56dc3ed41937e7 + React-hermes: 811606c0aca5a3f9c6fa8e4994e02ca8f677e68e + React-idlecallbacksnativemodule: 3a3df629cd50046c7e4354f9025aefe8f2c84601 + React-ImageManager: 0d53866c63132791e37bb2373f93044fdef14aa3 + React-jserrorhandler: d5700d6ab7162fd575287502a3c5d601d98e7f09 + React-jsi: ece95417fedbed0e7153a855cb8342b7c72ab75e + React-jsiexecutor: 2b0bb644b533df2f5c0cd6ade9a4560d0bf1dd84 + React-jsinspector: 0c160f8510a8852bdf2dac12f0b1949efc18200b + React-jsinspectorcdp: f4b84409f453f61ddd8614ad45139bc594ec6bb5 + React-jsinspectornetwork: 8f2f0ca8c871ca19b571f426002c0012e7fb2aee + React-jsinspectortracing: 33f6b977eb8a4bc1e3d1a4b948809aca083143f9 + React-jsitooling: 2c61529b589e17229a9f0a4a4fc35aa7ad495850 + React-jsitracing: 838a7b0c013c4aff7d382d7fdc78cf442013ba1d + React-logger: 7aef4d74123e5e3d267e5af1fbf5135b5a0d8381 + React-Mapbuffer: 91e0eab42a6ae7f3e34091a126d70fc53bd3823e + React-microtasksnativemodule: 1ead4fe154df3b1ba34b5a9e35ef3c4bdfa72ccb + react-native-safe-area-context: c6e2edd1c1da07bdce287fa9d9e60c5f7b514616 + React-NativeModulesApple: eff2eba56030eb0d107b1642b8f853bc36a833ac + React-oscompat: b12c633e9c00f1f99467b1e0e0b8038895dae436 + React-perflogger: 58d12c4e5df1403030c97b9c621375c312cca454 + React-performancetimeline: 0ee0a3236c77a4ee6d8a6189089e41e4003d292e + React-RCTActionSheet: 3f741a3712653611a6bfc5abceb8260af9d0b218 + React-RCTAnimation: 408ad69ea136e99a463dd33eadecc29e586b3d72 + React-RCTAppDelegate: f03b46e80b8a3dbfa84b35abfe123e02f3ceef83 + React-RCTBlob: bd42e92a00ad22eaab92ffe5c137e7a2f725887a + React-RCTFabric: b99ab638c73cf2d57b886eafdbfb2e4909b0eb9a + React-RCTFBReactNativeSpec: 7ad9aba0e0655e3f29be0a1c3fd4a888fab04dcf + React-RCTImage: 0f1c74f7cd20027f8c34976a211b35d4263a0add + React-RCTLinking: 6d7dfc3a74110df56c3a73cc7626bf4415656542 + React-RCTNetwork: 6a25d8645a80d5b86098675ca39bf8fcf1afa08b + React-RCTRuntime: 38bfe9766565ae3293ca230bc51c9c020a8bc98a + React-RCTSettings: 651d9ae2cdd32f547ad0d225a2c13886d6ad2358 + React-RCTText: 9bc66cd288478e23195e01f5cb45eba79986b2b4 + React-RCTVibration: 371226f5667a00c76d792dcdb5c2e0fcbcde0c3b + React-rendererconsistency: a05f6c37f9389c53213d1e28798e441fa6fbdbcd + React-renderercss: 6e4febfa014b0f53bc171a62b0f713ddbdbb9860 + React-rendererdebug: e94bf27b9d55ef2795caa8e43aa92abc4a373b8b + React-RuntimeApple: 723be5159519eba1cd92449acb29436d21571b82 + React-RuntimeCore: f58eb0f01065c9d27d91de10b2e4ab4c76d83b0e + React-runtimeexecutor: f615ec8742d0b5820170f7c8b4d2c7cb75d93ac9 + React-RuntimeHermes: fddb258e03d330d1132bb19e78fe51ac2f3f41ac + React-runtimescheduler: e92a31460e654ced8587debeec37553315e1b6a5 + React-timing: 97ada2c47b4c5932e7f773c7d239c52b90d6ca68 + React-utils: f0949d247a46b4c09f03e5a3cb1167602d0b729a + ReactAppDependencyProvider: 3eb9096cb139eb433965693bbe541d96eb3d3ec9 + ReactCodegen: 4d203eddf6f977caa324640a20f92e70408d648b + ReactCommon: ce5d4226dfaf9d5dacbef57b4528819e39d3a120 + RNGestureHandler: 3a73f098d74712952870e948b3d9cf7b6cae9961 + RNReanimated: 8865d48ea5db7fdef79bf9147b844273649deda8 + SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 + Yoga: 11c9686a21e2cd82a094a723649d9f4507200fb0 + +PODFILE CHECKSUM: a5de45e2350a9515567a6e18ca8ceea718b48523 + +COCOAPODS: 1.16.2 diff --git a/example/ios/example.xcodeproj/project.pbxproj b/example/ios/example.xcodeproj/project.pbxproj index cf987ca..9f590da 100644 --- a/example/ios/example.xcodeproj/project.pbxproj +++ b/example/ios/example.xcodeproj/project.pbxproj @@ -11,6 +11,7 @@ 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 761780ED2CA45674006654EE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761780EC2CA45674006654EE /* AppDelegate.swift */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; + E11B73F5BD7C7D93D3A7281A /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -159,6 +160,7 @@ files = ( 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */, 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, + E11B73F5BD7C7D93D3A7281A /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -374,7 +376,10 @@ "-DFOLLY_CFG_NO_COROUTINES=1", "-DFOLLY_HAVE_CLOCK_GETTIME=1", ); + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; + USE_HERMES = true; }; name = Debug; }; @@ -439,7 +444,9 @@ "-DFOLLY_CFG_NO_COROUTINES=1", "-DFOLLY_HAVE_CLOCK_GETTIME=1", ); + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; + USE_HERMES = true; VALIDATE_PRODUCT = YES; }; name = Release; diff --git a/example/ios/example.xcworkspace/contents.xcworkspacedata b/example/ios/example.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..7f5c3aa --- /dev/null +++ b/example/ios/example.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/example/ios/example/Info.plist b/example/ios/example/Info.plist index 3241dd1..19b0100 100644 --- a/example/ios/example/Info.plist +++ b/example/ios/example/Info.plist @@ -26,7 +26,6 @@ NSAppTransportSecurity - NSAllowsArbitraryLoads NSAllowsLocalNetworking @@ -34,6 +33,8 @@ NSLocationWhenInUseUsageDescription + RCTNewArchEnabled + UILaunchStoryboardName LaunchScreen UIRequiredDeviceCapabilities From fcd3611ac4ed74f9b70dbcae63c9f414f8f0b1fe Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Thu, 16 Oct 2025 08:56:36 +0500 Subject: [PATCH 14/56] release v10.0.0-alpha.1 --- .npmignore | 1 + README.md | 7 +------ package.json | 2 +- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/.npmignore b/.npmignore index 2eed458..0281d96 100644 --- a/.npmignore +++ b/.npmignore @@ -24,4 +24,5 @@ tsconfig.json .github/ .prettierrc.js .eslintrc.js +package-lock.json diff --git a/README.md b/README.md index 818e7d7..00c51d6 100644 --- a/README.md +++ b/README.md @@ -23,18 +23,13 @@ Check out the [installation](https://rnas.vercel.app/installation) section of ou Check out our dedicated documentation page for info about this library, it's features, API reference and more: [https://rnas.vercel.app](https://rnas.vercel.app) -## Migrating from v0.7.0 +## Migrating from v0.9.x The new version of ActionSheet introduces some **breaking changes**. Please read through the [migration guide](https://rnas.vercel.app/guides/migrate) and take the necessary steps. ## Examples The source code for the example (showcase) app is under the example/ directory. If you want to play with the ActionSheet but don't feel like trying it on a real app, you can run the [example snack](https://snack.expo.dev/@ammarahmed/github.com-ammarahm-ed-react-native-actions-sheet:expo-example). - -## Documentation for v0.7.0 & older - -You can find the docs in [v0.7.0 branch](https://github.com/ammarahm-ed/react-native-actions-sheet/tree/v0.7.0) - ## Consider supporting with a ⭐️ [star on GitHub](https://github.com/ammarahm-ed/react-native-actions-sheet/) If you are using the library in one of your projects, consider supporting with a star. It takes a lot of time and effort to keep this maintained and address issues and bugs. Thank you. diff --git a/package.json b/package.json index cca8cac..6b17fb3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-actions-sheet", - "version": "0.9.7", + "version": "10.0.0-alpha.1", "description": "A Cross Platform(Android & iOS) ActionSheet with a robust and flexible api, native performance and zero dependency code for react native. Create anything you want inside ActionSheet.", "main": "./dist/index.js", "types": "./dist/index.d.ts", From 2ec5de47556d44370a6441b99eaf57ab7cf8c7ea Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Thu, 16 Oct 2025 14:02:29 +0500 Subject: [PATCH 15/56] minor fixes --- src/index.tsx | 300 ++++++++++++++++++++++++++------------------------ 1 file changed, 155 insertions(+), 145 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 0271320..a8d9211 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -209,7 +209,7 @@ export default forwardRef( initial, config || { velocity: typeof velocity !== 'number' ? undefined : velocity, - dampingRatio: 0.7, + damping: 150, }, ); @@ -286,17 +286,21 @@ export default forwardRef( props.onChange?.(Math.round(percentage)); } + const percentScreenCovered = + (actionSheetHeight.current / + (dimensionsRef.current.height - insets.top)) * + 100; if (drawUnderStatusBar) { - if (percentage > 85) { - const distanceFromTop = 100 - percentage; + if (percentage > 85 && percentScreenCovered > 99) { + var distanceFromTop = 100 - percentage; underlayTranslateY.value = Math.max( (actionSheetHeight.current / 100) * distanceFromTop, ); } else { - if (underlayTranslateY.value !== 130) { - underlayTranslateY.value = 130; - } + underlayTranslateY.value = 130; } + } else { + underlayTranslateY.value = 130; } }; runOnUI(() => { @@ -641,11 +645,9 @@ export default forwardRef( }); } } - } - - let blockPan = false; + let blockPan = false; const onChangeJs = (translationY, absoluteX, absoluteY) => { if (!gestureEnabled) return; @@ -691,7 +693,6 @@ export default forwardRef( deltaYOnGestureStart = prevDeltaY; } blockPan = false; - } // 2. Sheet fully open, swiping up, scrolling: true, panning: false @@ -706,9 +707,9 @@ export default forwardRef( blockPan = true; } else { scrollable(false); - if (blockPan) { - deltaYOnGestureStart = prevDeltaY; - } + if (blockPan) { + deltaYOnGestureStart = prevDeltaY; + } blockPan = false; } } @@ -741,9 +742,9 @@ export default forwardRef( } } else { scrollable(false); - if (blockPan) { - deltaYOnGestureStart = prevDeltaY; - } + if (blockPan) { + deltaYOnGestureStart = prevDeltaY; + } blockPan = false; } } @@ -867,7 +868,7 @@ export default forwardRef( (actionSheetHeight.current * offset) / 100; translateY.value = withSpring( initialValue.current, - props.openAnimationConfig || {dampingRatio: 0.7}, + props.openAnimationConfig || {damping: 150}, ); }, snapToRelativeOffset: (offset: number) => { @@ -885,7 +886,7 @@ export default forwardRef( } translateY.value = withSpring( initialValue.current, - props.openAnimationConfig || {dampingRatio: 0.7}, + props.openAnimationConfig || {damping: 150}, ); }, snapToIndex: (index: number) => { @@ -894,7 +895,7 @@ export default forwardRef( initialValue.current = getNextPosition(index); translateY.value = withSpring( initialValue.current, - props.openAnimationConfig || {dampingRatio: 0.7}, + props.openAnimationConfig || {damping: 150}, ); notifySnapIndexChanged(); }, @@ -1046,6 +1047,7 @@ export default forwardRef( { + if (event.nativeEvent.layout.height < 10) return; setDimensions({ width: event.nativeEvent.layout.width, height: event.nativeEvent.layout.height, @@ -1068,140 +1070,148 @@ export default forwardRef( ], }, ]}> - {!props?.backgroundInteractionEnabled ? ( - + {!props?.backgroundInteractionEnabled ? ( + + ) : null} + + - ) : null} - - - - - {drawUnderStatusBar ? ( - - ) : null} - {gestureEnabled || props.headerAlwaysVisible ? ( - props.CustomHeaderComponent ? ( - props.CustomHeaderComponent - ) : ( + ], + }}> + + + {drawUnderStatusBar ? ( - ) - ) : null} - - + ) + ) : null} + + + {router?.hasRoutes() ? ( + + {router?.stack.map(renderRoute)} + + ) : ( + props?.children + )} + + + + + {overdrawEnabled ? ( + - {router?.hasRoutes() ? ( - - {router?.stack.map(renderRoute)} - - ) : ( - props?.children - )} - - - - - {overdrawEnabled ? ( - + ) : null} + + + {ExtraOverlayComponent} + {props.withNestedSheetProvider} + {sheetId ? ( + ) : null} - - - {ExtraOverlayComponent} - {props.withNestedSheetProvider} - {sheetId ? ( - - ) : null} + From 1c8581b95eec0c06c01312d939768735852b8735 Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Thu, 16 Oct 2025 14:23:07 +0500 Subject: [PATCH 16/56] fix animation config --- src/index.tsx | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index a8d9211..4d9a5a0 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -35,7 +35,7 @@ import Animated, { withSpring, withTiming, } from 'react-native-reanimated'; -import {useSafeAreaInsets} from 'react-native-safe-area-context'; +import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { DraggableNodes, DraggableNodesContext, @@ -43,16 +43,16 @@ import { NodesRef, PanGestureRefContext, } from './context'; -import EventManager, {actionSheetEventManager} from './eventmanager'; +import EventManager, { actionSheetEventManager } from './eventmanager'; import { Route, RouterContext, RouterParamsContext, useRouter, } from './hooks/use-router'; -import {resolveScrollRef} from './hooks/use-scroll-handlers'; +import { resolveScrollRef } from './hooks/use-scroll-handlers'; import useSheetManager from './hooks/use-sheet-manager'; -import {useKeyboard} from './hooks/useKeyboard'; +import { useKeyboard } from './hooks/useKeyboard'; import { SheetProvider, useProviderContext, @@ -60,10 +60,10 @@ import { useSheetPayload, useSheetRef, } from './provider'; -import {getZIndexFromStack, SheetManager} from './sheetmanager'; -import {styles} from './styles'; -import type {ActionSheetProps, ActionSheetRef} from './types'; -import {getElevation, SUPPORTED_ORIENTATIONS} from './utils'; +import { getZIndexFromStack, SheetManager } from './sheetmanager'; +import { styles } from './styles'; +import type { ActionSheetProps, ActionSheetRef } from './types'; +import { getElevation, SUPPORTED_ORIENTATIONS } from './utils'; export default forwardRef( function ActionSheet( @@ -97,6 +97,7 @@ export default forwardRef( enableGesturesInScrollView = true, disableDragBeyondMinimumSnapPoint, useBottomSafeAreaPadding = true, + openAnimationConfig = {damping: 120, stiffness: 900,mass: 7 }, ...props }, ref, @@ -201,21 +202,18 @@ export default forwardRef( return; } - const config = props.openAnimationConfig; + const config = openAnimationConfig; const correctedValue = initial > minTranslate ? initial : 0; notifyOffsetChange(correctedValue as number); - translateY.value = withSpring( - initial, - config || { - velocity: typeof velocity !== 'number' ? undefined : velocity, - damping: 150, - }, - ); + translateY.value = withSpring(initial, { + ...config, + velocity: typeof velocity !== 'number' ? undefined : velocity, + }); notifySnapIndexChanged(); }, - [animated, props.openAnimationConfig], + [animated, openAnimationConfig], ); const animationSheetOpacity = React.useCallback((value: number) => { @@ -868,7 +866,7 @@ export default forwardRef( (actionSheetHeight.current * offset) / 100; translateY.value = withSpring( initialValue.current, - props.openAnimationConfig || {damping: 150}, + openAnimationConfig, ); }, snapToRelativeOffset: (offset: number) => { @@ -886,7 +884,7 @@ export default forwardRef( } translateY.value = withSpring( initialValue.current, - props.openAnimationConfig || {damping: 150}, + openAnimationConfig, ); }, snapToIndex: (index: number) => { @@ -895,7 +893,7 @@ export default forwardRef( initialValue.current = getNextPosition(index); translateY.value = withSpring( initialValue.current, - props.openAnimationConfig || {damping: 150}, + openAnimationConfig, ); notifySnapIndexChanged(); }, @@ -924,7 +922,7 @@ export default forwardRef( setVisible, hideSheet, translateY, - props.openAnimationConfig, + openAnimationConfig, snapPoints.length, getNextPosition, notifySnapIndexChanged, From fa00e4ad356551219d862a725336f62f82beccf0 Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Thu, 16 Oct 2025 14:33:26 +0500 Subject: [PATCH 17/56] cleanup --- src/index.tsx | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 4d9a5a0..9968813 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -35,7 +35,7 @@ import Animated, { withSpring, withTiming, } from 'react-native-reanimated'; -import { useSafeAreaInsets } from 'react-native-safe-area-context'; +import {useSafeAreaInsets} from 'react-native-safe-area-context'; import { DraggableNodes, DraggableNodesContext, @@ -43,16 +43,16 @@ import { NodesRef, PanGestureRefContext, } from './context'; -import EventManager, { actionSheetEventManager } from './eventmanager'; +import EventManager, {actionSheetEventManager} from './eventmanager'; import { Route, RouterContext, RouterParamsContext, useRouter, } from './hooks/use-router'; -import { resolveScrollRef } from './hooks/use-scroll-handlers'; +import {resolveScrollRef} from './hooks/use-scroll-handlers'; import useSheetManager from './hooks/use-sheet-manager'; -import { useKeyboard } from './hooks/useKeyboard'; +import {useKeyboard} from './hooks/useKeyboard'; import { SheetProvider, useProviderContext, @@ -60,10 +60,10 @@ import { useSheetPayload, useSheetRef, } from './provider'; -import { getZIndexFromStack, SheetManager } from './sheetmanager'; -import { styles } from './styles'; -import type { ActionSheetProps, ActionSheetRef } from './types'; -import { getElevation, SUPPORTED_ORIENTATIONS } from './utils'; +import {getZIndexFromStack, SheetManager} from './sheetmanager'; +import {styles} from './styles'; +import type {ActionSheetProps, ActionSheetRef} from './types'; +import {getElevation, SUPPORTED_ORIENTATIONS} from './utils'; export default forwardRef( function ActionSheet( @@ -97,7 +97,7 @@ export default forwardRef( enableGesturesInScrollView = true, disableDragBeyondMinimumSnapPoint, useBottomSafeAreaPadding = true, - openAnimationConfig = {damping: 120, stiffness: 900,mass: 7 }, + openAnimationConfig = {damping: 120, stiffness: 900, mass: 7}, ...props }, ref, @@ -1108,7 +1108,6 @@ export default forwardRef( flex: undefined, height: dimensions.height, maxHeight: dimensions.height, - opacity: !dimensions.height ? 0 : 1, transform: [ { translateY: translateY, From 2346fda8d5eb35027ed80422f20b4b0164c760d7 Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Thu, 16 Oct 2025 19:15:27 +0500 Subject: [PATCH 18/56] fix scrollview handling --- src/index.tsx | 296 +++++++++++++++++++++++++------------------------- 1 file changed, 149 insertions(+), 147 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 9968813..1734547 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -639,7 +639,6 @@ export default forwardRef( } else { scrollRef?.setNativeProps({ scrollEnabled: value, - pointerEvents: value ? 'auto' : 'none', }); } } @@ -647,184 +646,187 @@ export default forwardRef( let blockPan = false; - const onChangeJs = (translationY, absoluteX, absoluteY) => { - if (!gestureEnabled) return; - let deltaY = translationY; - let isSwipingDown = prevDeltaY < deltaY; - - prevDeltaY = deltaY; + return Gesture.Pan() + .withRef(panGestureRef) + .onChange(event => { + const {absoluteX, absoluteY, translationY} = event; + if (!gestureEnabled) return; + let deltaY = translationY; + let isSwipingDown = prevDeltaY < deltaY; - if (!start) { - start = { - x: absoluteX, - y: absoluteY, - }; - } + prevDeltaY = deltaY; - const isFullOpen = getCurrentPosition() === 0; + if (!start) { + start = { + x: absoluteX, + y: absoluteY, + }; + } - const activeDraggableNodes = getActiveDraggableNodes( - start.x, - start.y, - !isFullOpen || (isFullOpen && !isSwipingDown), - ); + const isFullOpen = getCurrentPosition() === 0; - if (activeDraggableNodes.length > 0 && !isRefreshing) { - const nodeIsScrolling = activeDraggableNodes.some( - node => node.node.offset.current.y !== 0, + const activeDraggableNodes = getActiveDraggableNodes( + start.x, + start.y, + !isFullOpen || (isFullOpen && !isSwipingDown), ); - /** - * Draggable nodes handling cases: - * - * 1. Sheet not fully open, swiping up, scrolling: false panning: true (will transition to scrolling once sheet reaches top position) - * 2. Sheet fully open, swiping up, scrolling: true, panning: false - * 3. Sheet not fully open, swiping down, scrolling: false, panning: true - * 4. Sheet fully open, scroll offset > 0, scrolling: true, panning: false will transition into scrolling: false, panning: true, once scroll reaches offset=0 - * 5. Add support for pull to refresh - */ - - // 1. Sheet not fully open, swiping up, scrolling: false panning: true (will transition to scrolling once sheet reaches top position) - if (!isFullOpen && !isSwipingDown) { - scrollable(false); - if (blockPan) { - deltaYOnGestureStart = prevDeltaY; - } - blockPan = false; - } - - // 2. Sheet fully open, swiping up, scrolling: true, panning: false - if (isFullOpen && !isSwipingDown) { - scrollable(true); - blockPan = true; - } - // 3. Sheet not fully open, swiping down, scrolling: false, panning: true - if (!isFullOpen && isSwipingDown) { - if (nodeIsScrolling) { - scrollable(true); - blockPan = true; - } else { + if (activeDraggableNodes.length > 0 && !isRefreshing) { + const nodeIsScrolling = activeDraggableNodes.some( + node => node.node.offset.current.y !== 0, + ); + + console.log(nodeIsScrolling); + + /** + * Draggable nodes handling cases: + * + * 1. Sheet not fully open, swiping up, scrolling: false panning: true (will transition to scrolling once sheet reaches top position) + * 2. Sheet fully open, swiping up, scrolling: true, panning: false + * 3. Sheet not fully open, swiping down, scrolling: false, panning: true + * 4. Sheet fully open, scroll offset > 0, scrolling: true, panning: false will transition into scrolling: false, panning: true, once scroll reaches offset=0 + * 5. Add support for pull to refresh + */ + + // 1. Sheet not fully open, swiping up, scrolling: false panning: true (will transition to scrolling once sheet reaches top position) + if (!isFullOpen && !isSwipingDown) { scrollable(false); if (blockPan) { - deltaYOnGestureStart = prevDeltaY; + deltaYOnGestureStart = deltaY; } blockPan = false; } - } - // 4. Sheet fully open, scroll offset > 0, scrolling: true, panning: false will transition into scrolling: false, panning: true, once scroll reaches offset=0 - if (isFullOpen && isSwipingDown) { - if (nodeIsScrolling) { + // 2. Sheet fully open, swiping up, scrolling: true, panning: false + if (isFullOpen && !isSwipingDown) { scrollable(true); blockPan = true; - } else { - const hasRefreshControl = activeDraggableNodes.some( - node => node.node.handlerConfig.hasRefreshControl, - ); - if (hasRefreshControl) { - for (const node of activeDraggableNodes) { - if (node.node.handlerConfig.hasRefreshControl) { - // Refresh Control will work in to 15% area of the DraggableNode. - const refreshControlBounds = - node.rectWithBoundary.py + - node.rectWithBoundary.h * - node.node.handlerConfig.refreshControlBoundary; - - if (!refreshControlBounds) continue; - if (absoluteY < refreshControlBounds) { - scrollable(true); - blockPan = true; - isRefreshing = true; - } - } - } + } + // 3. Sheet not fully open, swiping down, scrolling: false, panning: true + if (!isFullOpen && isSwipingDown) { + if (nodeIsScrolling) { + scrollable(true); + blockPan = true; } else { scrollable(false); if (blockPan) { - deltaYOnGestureStart = prevDeltaY; + // deltaYOnGestureStart = deltaY; } blockPan = false; } } + + // 4. Sheet fully open, scroll offset > 0, scrolling: true, panning: false will transition into scrolling: false, panning: true, once scroll reaches offset=0 + if (isFullOpen && isSwipingDown) { + if (nodeIsScrolling) { + scrollable(true); + blockPan = true; + } else { + const hasRefreshControl = activeDraggableNodes.some( + node => node.node.handlerConfig.hasRefreshControl, + ); + if (hasRefreshControl) { + for (const node of activeDraggableNodes) { + if (node.node.handlerConfig.hasRefreshControl) { + // Refresh Control will work in to 15% area of the DraggableNode. + const refreshControlBounds = + node.rectWithBoundary.py + + node.rectWithBoundary.h * + node.node.handlerConfig.refreshControlBoundary; + + if (!refreshControlBounds) continue; + if (absoluteY < refreshControlBounds) { + scrollable(true); + blockPan = true; + isRefreshing = true; + } + } + } + } else { + scrollable(false); + if (blockPan) { + deltaYOnGestureStart = deltaY; + } + blockPan = false; + } + } + } + } else { + blockPan = false; } - } else { - blockPan = false; - } - if (isRefreshing) { - blockPan = true; - scrollable(true); - } + if (isRefreshing) { + blockPan = true; + scrollable(true); + } - let value = oldValue; - if (!deltaYOnGestureStart) { - deltaYOnGestureStart = deltaY; - } - deltaY = deltaY - deltaYOnGestureStart; - if (!blockPan) { - value = initialValue.current + deltaY; - oldValue = value; - } + let value = oldValue; + if (!deltaYOnGestureStart) { + deltaYOnGestureStart = deltaY; + } - console.log(deltaY, 'deltaY'); + console.log(deltaY, deltaYOnGestureStart); - velocity = 1; - const correctedValue = - value <= minTranslateValue.current - ? minTranslateValue.current - value - : value; + deltaY = deltaY - deltaYOnGestureStart; + if (!blockPan) { + value = initialValue.current + deltaY; + oldValue = value; + } - if (correctedValue / overdrawFactor >= overdrawSize && deltaY <= 0) { - return; - } + console.log(value); - const minSnapPoint = getNextPosition(0); - const translateYValue = - value <= minTranslateValue.current - ? overdrawEnabled - ? minTranslateValue.current - correctedValue / overdrawFactor - : minTranslateValue.current - : value; - - if (!closable && disableDragBeyondMinimumSnapPoint) { - translateY.value = - translateYValue >= minSnapPoint ? minSnapPoint : translateYValue; - } else { - translateY.value = translateYValue; - } - }; - const onEndJs = () => { - if (!gestureEnabled) return; - deltaYOnGestureStart = 0; - const isMovingUp = getCurrentPosition() < initialValue.current; - - if ( - (!isMovingUp && - getCurrentPosition() < initialValue.current + springOffset) || - (isMovingUp && - getCurrentPosition() > initialValue.current - springOffset) - ) { - moveSheetWithAnimation(1); - velocity = 0; - return; - } + velocity = 1; + const correctedValue = + value <= minTranslateValue.current + ? minTranslateValue.current - value + : value; - if (!isMovingUp) { - snapBackward(velocity); - } else { - snapForward(velocity); - } - velocity = 0; - }; + if (correctedValue / overdrawFactor >= overdrawSize && deltaY <= 0) { + return; + } - return Gesture.Pan() - .withRef(panGestureRef) - .onChange(event => { - const {absoluteX, absoluteY, translationY} = event; - runOnJS(onChangeJs)(translationY, absoluteX, absoluteY); + const minSnapPoint = getNextPosition(0); + const translateYValue = + value <= minTranslateValue.current + ? overdrawEnabled + ? minTranslateValue.current - correctedValue / overdrawFactor + : minTranslateValue.current + : value; + + if (!closable && disableDragBeyondMinimumSnapPoint) { + translateY.value = + translateYValue >= minSnapPoint ? minSnapPoint : translateYValue; + } else { + translateY.value = translateYValue; + } }) + .runOnJS(true) + .activeOffsetY([-5, 5]) + .failOffsetX([-5, 5]) .onEnd(() => { - runOnJS(onEndJs)(); + if (!gestureEnabled) return; + deltaYOnGestureStart = 0; + const isMovingUp = getCurrentPosition() < initialValue.current; + + scrollable(true); + + if ( + (!isMovingUp && + getCurrentPosition() < initialValue.current + springOffset) || + (isMovingUp && + getCurrentPosition() > initialValue.current - springOffset) + ) { + moveSheetWithAnimation(1); + velocity = 0; + return; + } + + if (!isMovingUp) { + snapBackward(velocity); + } else { + snapForward(velocity); + } + velocity = 0; }); }, [gestureEnabled]); From 0ecbc7ad678b3f7a8f706576c17bfd27fe9dc1b5 Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Thu, 16 Oct 2025 19:15:39 +0500 Subject: [PATCH 19/56] remove FlashList --- app/examples/flashlist.tsx | 6 +- app/tsconfig.json | 1 - example/package-lock.json | 424 ++++++++++++++++++------------------- example/tsconfig.json | 1 - package.json | 2 +- src/views/FlashList.tsx | 67 ------ tsconfig.json | 2 +- 7 files changed, 217 insertions(+), 286 deletions(-) delete mode 100644 src/views/FlashList.tsx diff --git a/app/examples/flashlist.tsx b/app/examples/flashlist.tsx index e12fdb8..b56ed9c 100644 --- a/app/examples/flashlist.tsx +++ b/app/examples/flashlist.tsx @@ -1,7 +1,7 @@ import React, {useCallback} from 'react'; import {Text, View} from 'react-native'; -import ActionSheet from 'react-native-actions-sheet'; -import {FlashList} from 'react-native-actions-sheet/dist/src/views/FlashList'; +import ActionSheet, { ScrollView } from 'react-native-actions-sheet'; +import {FlashList} from '@shopify/flash-list'; function FlashListSheet() { const vegetableNamesWithEmoji = [ @@ -101,7 +101,7 @@ function FlashListSheet() { }}> = 8" @@ -2690,7 +2690,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -2704,7 +2704,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-20.0.0.tgz", "integrity": "sha512-/cMnGl5V1rqnbElY1Fvga1vfw0d3bnqiJLx2+2oh7l9ulnXfVRWb5tU2kgBqiMxuDOKA+DQoifC9q/tvkj5K2w==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@react-native-community/cli-clean": "20.0.0", @@ -2734,7 +2734,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-20.0.0.tgz", "integrity": "sha512-YmdNRcT+Dp8lC7CfxSDIfPMbVPEXVFzBH62VZNbYGxjyakqAvoQUFTYPgM2AyFusAr4wDFbDOsEv88gCDwR3ig==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@react-native-community/cli-tools": "20.0.0", @@ -2747,7 +2747,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-20.0.0.tgz", "integrity": "sha512-5Ky9ceYuDqG62VIIpbOmkg8Lybj2fUjf/5wK4UO107uRqejBgNgKsbGnIZgEhREcaSEOkujWrroJ9gweueLfBg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@react-native-community/cli-tools": "20.0.0", @@ -2762,7 +2762,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-android/-/cli-config-android-20.0.0.tgz", "integrity": "sha512-asv60qYCnL1v0QFWcG9r1zckeFlKG+14GGNyPXY72Eea7RX5Cxdx8Pb6fIPKroWH1HEWjYH9KKHksMSnf9FMKw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@react-native-community/cli-tools": "20.0.0", @@ -2775,7 +2775,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-apple/-/cli-config-apple-20.0.0.tgz", "integrity": "sha512-PS1gNOdpeQ6w7dVu1zi++E+ix2D0ZkGC2SQP6Y/Qp002wG4se56esLXItYiiLrJkhH21P28fXdmYvTEkjSm9/Q==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@react-native-community/cli-tools": "20.0.0", @@ -2788,7 +2788,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-20.0.0.tgz", "integrity": "sha512-cPHspi59+Fy41FDVxt62ZWoicCZ1o34k8LAl64NVSY0lwPl+CEi78jipXJhtfkVqSTetloA8zexa/vSAcJy57Q==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@react-native-community/cli-config": "20.0.0", @@ -2812,7 +2812,7 @@ "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, + "devOptional": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -2825,7 +2825,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-20.0.0.tgz", "integrity": "sha512-th3ji1GRcV6ACelgC0wJtt9daDZ+63/52KTwL39xXGoqczFjml4qERK90/ppcXU0Ilgq55ANF8Pr+UotQ2AB/A==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@react-native-community/cli-config-android": "20.0.0", @@ -2839,7 +2839,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-20.0.0.tgz", "integrity": "sha512-rZZCnAjUHN1XBgiWTAMwEKpbVTO4IHBSecdd1VxJFeTZ7WjmstqA6L/HXcnueBgxrzTCRqvkRIyEQXxC1OfhGw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@react-native-community/cli-config-apple": "20.0.0", @@ -2853,7 +2853,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-20.0.0.tgz", "integrity": "sha512-Z35M+4gUJgtS4WqgpKU9/XYur70nmj3Q65c9USyTq6v/7YJ4VmBkmhC9BticPs6wuQ9Jcv0NyVCY0Wmh6kMMYw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@react-native-community/cli-platform-apple": "20.0.0" @@ -2863,7 +2863,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-20.0.0.tgz", "integrity": "sha512-Ves21bXtjUK3tQbtqw/NdzpMW1vR2HvYCkUQ/MXKrJcPjgJnXQpSnTqHXz6ZdBlMbbwLJXOhSPiYzxb5/v4CDg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@react-native-community/cli-tools": "20.0.0", @@ -2882,7 +2882,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-20.0.0.tgz", "integrity": "sha512-akSZGxr1IajJ8n0YCwQoA3DI0HttJ0WB7M3nVpb0lOM+rJpsBN7WG5Ft+8ozb6HyIPX+O+lLeYazxn5VNG/Xhw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@vscode/sudo-prompt": "^9.0.0", @@ -2901,7 +2901,7 @@ "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, + "devOptional": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -2914,7 +2914,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-20.0.0.tgz", "integrity": "sha512-7J4hzGWOPTBV1d30Pf2NidV+bfCWpjfCOiGO3HUhz1fH4MvBM0FbbBmE9LE5NnMz7M8XSRSi68ZGYQXgLBB2Qw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "joi": "^17.2.1" @@ -2924,7 +2924,7 @@ "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, + "devOptional": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -2946,7 +2946,7 @@ "version": "0.81.1", "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.81.1.tgz", "integrity": "sha512-cxYq78YePcIX2871UiEItG7ibk+GeXRr7A3ZR2DN4fZ7X4An/734DwLVop/CcHpK3Ycr0Re8FKEVTcJRiVb1zg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.25.3", @@ -2960,7 +2960,7 @@ "version": "0.81.1", "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.81.1.tgz", "integrity": "sha512-dCxb4AdaoLZipfKNEpO70WK7cxbTsq62dzK2EuFta65WJO/K7+sMoF8V6P0MKfCaHwj/1Va2rp/LKtHd9ttPVw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", @@ -3198,7 +3198,7 @@ "version": "0.81.1", "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.81.1.tgz", "integrity": "sha512-QtqvzZwlnenRbX4iRqR/gf/x0AGJIu21OBjQI83qScxiSczm7cwL765HCYVSmTUtypI+XZ/irqDC9KOtMjqPZw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", @@ -3217,7 +3217,7 @@ "version": "0.81.1", "resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.81.1.tgz", "integrity": "sha512-SP3zZz9sqA14GzUevd8TasAntB4TkceruNNQUIMzHQRB4FXz19YaFK3VjXwmwJzuCl71El8wMTYlYpOlZ68hww==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@react-native/js-polyfills": "0.81.1", @@ -3308,7 +3308,7 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0" @@ -3318,14 +3318,14 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause" }, "node_modules/@sideway/pinpoint": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause" }, "node_modules/@sinclair/typebox": { @@ -3463,7 +3463,7 @@ "version": "19.1.12", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.12.tgz", "integrity": "sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "csstype": "^3.0.2" @@ -3737,7 +3737,7 @@ "version": "9.3.1", "resolved": "https://registry.npmjs.org/@vscode/sudo-prompt/-/sudo-prompt-9.3.1.tgz", "integrity": "sha512-9ORTwwS74VaTn38tNbQhsA5U44zkJfcb0BdTSyyG6frP4e8KMtHuTXYmwefe5dpL8XB1aGSIVTaLjD3BbWb5iA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/abort-controller": { @@ -3861,7 +3861,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "colorette": "^1.0.7", @@ -3873,7 +3873,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" @@ -3883,7 +3883,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-regex": "^4.1.0" @@ -3933,14 +3933,14 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, + "devOptional": true, "license": "Python-2.0" }, "node_modules/array-buffer-byte-length": { @@ -4101,7 +4101,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -4211,7 +4211,7 @@ "version": "0.4.14", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.27.7", @@ -4226,7 +4226,7 @@ "version": "0.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.5", @@ -4240,7 +4240,7 @@ "version": "0.6.5", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.5" @@ -4262,7 +4262,7 @@ "version": "0.0.2", "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/plugin-syntax-flow": "^7.12.1" @@ -4340,7 +4340,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "buffer": "^5.5.0", @@ -4352,7 +4352,7 @@ "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -4377,7 +4377,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -4387,7 +4387,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/brace-expansion": { @@ -4457,7 +4457,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -4488,7 +4488,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -4517,7 +4517,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -4531,7 +4531,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -4581,7 +4581,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" @@ -4724,7 +4724,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" @@ -4737,7 +4737,7 @@ "version": "2.9.2", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" @@ -4764,7 +4764,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.8" @@ -4810,21 +4810,21 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/command-exists": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/commander": { "version": "9.5.0", "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": "^12.20.0 || >=14" @@ -4834,7 +4834,7 @@ "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "mime-db": ">= 1.43.0 < 2" @@ -4847,7 +4847,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -4866,7 +4866,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -4876,7 +4876,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/concat-map": { @@ -4919,7 +4919,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -4935,7 +4935,7 @@ "version": "3.45.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.45.1.tgz", "integrity": "sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "browserslist": "^4.25.3" @@ -4949,7 +4949,7 @@ "version": "9.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "env-paths": "^2.2.1", @@ -4998,7 +4998,7 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -5013,7 +5013,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/data-view-buffer": { @@ -5074,7 +5074,7 @@ "version": "1.11.18", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.18.tgz", "integrity": "sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/debug": { @@ -5098,7 +5098,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -5130,7 +5130,7 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -5140,7 +5140,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "clone": "^1.0.2" @@ -5254,7 +5254,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -5309,7 +5309,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" @@ -5319,7 +5319,7 @@ "version": "7.14.0", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", - "dev": true, + "devOptional": true, "license": "MIT", "bin": { "envinfo": "dist/cli.js" @@ -5350,7 +5350,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "accepts": "~1.3.7", @@ -5433,7 +5433,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -5443,7 +5443,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -5481,7 +5481,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -6160,7 +6160,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", @@ -6223,7 +6223,7 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -6240,7 +6240,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -6266,7 +6266,7 @@ "version": "4.5.3", "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz", "integrity": "sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -6285,7 +6285,7 @@ "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -6374,7 +6374,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "locate-path": "^6.0.0", @@ -6444,7 +6444,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -6479,7 +6479,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, + "devOptional": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6538,7 +6538,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -6572,7 +6572,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -6586,7 +6586,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=10" @@ -6727,7 +6727,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -6804,7 +6804,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -6833,7 +6833,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -6921,7 +6921,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "engines": { "node": ">=10.17.0" @@ -6931,7 +6931,7 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -6944,7 +6944,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -6990,7 +6990,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -7167,7 +7167,7 @@ "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -7242,7 +7242,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -7268,7 +7268,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -7307,7 +7307,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -7320,7 +7320,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -7440,7 +7440,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -7504,7 +7504,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=10" @@ -7563,7 +7563,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -7580,7 +7580,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/istanbul-lib-coverage": { @@ -8273,7 +8273,7 @@ "version": "17.13.3", "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.3.0", @@ -8293,7 +8293,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -8337,7 +8337,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/json-schema-traverse": { @@ -8370,7 +8370,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, + "devOptional": true, "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" @@ -8406,7 +8406,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" @@ -8416,7 +8416,7 @@ "version": "2.11.1", "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.11.1.tgz", "integrity": "sha512-SEET7oNfgSaB6Ym0jufAdCeo3meJVeCaaDyzRygy0xsp2BFKCprcfHljTq4QkzTLUxEKkFK6OK4811YM2oSrRg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "picocolors": "^1.1.1", @@ -8475,14 +8475,14 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "p-locate": "^5.0.0" @@ -8505,7 +8505,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/lodash.merge": { @@ -8525,7 +8525,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "chalk": "^4.1.0", @@ -8542,7 +8542,7 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-fragments": "^0.2.1", @@ -8557,7 +8557,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -8569,7 +8569,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "locate-path": "^5.0.0", @@ -8583,7 +8583,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "p-locate": "^4.1.0" @@ -8596,7 +8596,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "p-try": "^2.0.0" @@ -8612,7 +8612,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "p-limit": "^2.2.0" @@ -8625,7 +8625,7 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -8640,14 +8640,14 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/logkitty/node_modules/yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "cliui": "^6.0.0", @@ -8670,7 +8670,7 @@ "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "camelcase": "^5.0.0", @@ -8749,7 +8749,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -8759,7 +8759,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -8781,7 +8781,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 8" @@ -9199,7 +9199,7 @@ "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, + "devOptional": true, "license": "MIT", "bin": { "mime": "cli.js" @@ -9212,7 +9212,7 @@ "version": "1.54.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -9243,7 +9243,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" @@ -9294,7 +9294,7 @@ "version": "0.6.4", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -9304,7 +9304,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/nocache/-/nocache-3.0.4.tgz", "integrity": "sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=12.0.0" @@ -9326,7 +9326,7 @@ "version": "1.15.0", "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -9349,7 +9349,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "path-key": "^3.0.0" @@ -9390,7 +9390,7 @@ "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -9500,7 +9500,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -9519,7 +9519,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" @@ -9535,7 +9535,7 @@ "version": "6.4.0", "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "is-wsl": "^1.1.0" @@ -9566,7 +9566,7 @@ "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "bl": "^4.1.0", @@ -9608,7 +9608,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" @@ -9624,7 +9624,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "p-limit": "^3.0.2" @@ -9649,7 +9649,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -9662,7 +9662,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", @@ -9708,7 +9708,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -9718,7 +9718,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/path-type": { @@ -9902,7 +9902,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "kleur": "^3.0.3", @@ -9962,7 +9962,7 @@ "version": "6.13.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" @@ -9987,7 +9987,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -10017,7 +10017,7 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -10253,7 +10253,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -10392,14 +10392,14 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/resolve": { "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "is-core-module": "^2.16.0", @@ -10443,7 +10443,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -10463,7 +10463,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "onetime": "^5.1.0", @@ -10477,7 +10477,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -10504,7 +10504,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -10548,7 +10548,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -10604,7 +10604,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/scheduler": { @@ -10719,7 +10719,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/set-function-length": { @@ -10781,7 +10781,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -10794,7 +10794,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -10816,7 +10816,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -10836,7 +10836,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -10853,7 +10853,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -10872,7 +10872,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -10898,7 +10898,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/slash": { @@ -10914,7 +10914,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^3.2.0", @@ -10929,7 +10929,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^1.9.0" @@ -10942,7 +10942,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-name": "1.1.3" @@ -10952,7 +10952,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/source-map": { @@ -11056,7 +11056,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -11230,7 +11230,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" @@ -11253,7 +11253,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -11278,7 +11278,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -11472,7 +11472,7 @@ "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "media-typer": "0.3.0", @@ -11643,7 +11643,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 4.0.0" @@ -11702,7 +11702,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/utils-merge": { @@ -11733,7 +11733,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -11758,7 +11758,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "defaults": "^1.0.3" @@ -11774,7 +11774,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -11857,7 +11857,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/which-typed-array": { @@ -11956,7 +11956,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", - "dev": true, + "devOptional": true, "license": "ISC", "bin": { "yaml": "bin.mjs" @@ -11996,7 +11996,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=10" diff --git a/example/tsconfig.json b/example/tsconfig.json index 0e0e3a9..f185b1c 100644 --- a/example/tsconfig.json +++ b/example/tsconfig.json @@ -6,7 +6,6 @@ "esModuleInterop": true, "paths": { "react-native-actions-sheet": ["../"], - "react-native-actions-sheet/dist/src/views/FlashList": ["../dist/src/views/FlashList"] } } } diff --git a/package.json b/package.json index 6b17fb3..b4981d8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-actions-sheet", - "version": "10.0.0-alpha.1", + "version": "10.0.0-alpha.2", "description": "A Cross Platform(Android & iOS) ActionSheet with a robust and flexible api, native performance and zero dependency code for react native. Create anything you want inside ActionSheet.", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/src/views/FlashList.tsx b/src/views/FlashList.tsx deleted file mode 100644 index 3000173..0000000 --- a/src/views/FlashList.tsx +++ /dev/null @@ -1,67 +0,0 @@ -/* eslint-disable curly */ -import { - FlashList as SPFlashList, - FlashListRef, - FlashListProps, -} from '@shopify/flash-list'; -import React from 'react'; -import {ScrollView as RNScrollView} from 'react-native'; -import {NativeViewGestureHandlerProps} from 'react-native-gesture-handler'; -import {ScrollView as SheetScrollView} from './ScrollView'; -type Props = FlashListProps & - Partial & - React.RefAttributes & { - /** - * By default refresh control gesture will work in top 15% area of the ScrollView. You can set a different value here. - * - * Accepts a value between 0-1. - */ - refreshControlGestureArea?: number; - }; - -function $FlashList( - props: Props, - ref: React.ForwardedRef>, -) { - return ( - - ); -} - -export const FlashList = React.forwardRef( - $FlashList, -) as unknown as typeof SPFlashList; - -type MasonaryProps = FlashListProps & - Partial & - React.RefAttributes & { - /** - * By default refresh control gesture will work in top 15% area of the ScrollView. You can set a different value here. - * - * Accepts a value between 0-1. - */ - refreshControlGestureArea?: number; - }; - -function $MasonaryFlashList( - props: MasonaryProps, - ref: React.ForwardedRef, -) { - return ( - - ); -} - -export const MasonaryFlashList = React.forwardRef( - $MasonaryFlashList, -) as unknown as typeof SPFlashList; diff --git a/tsconfig.json b/tsconfig.json index 2e90f02..78cd12a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,5 @@ { - "include": ["index.ts", "src/views/FlashList.tsx"], + "include": ["index.ts"], "compilerOptions": { "baseUrl": "./", "jsx": "react-native", From 3dca965606f60e43d0fc11b92334753739021424 Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Thu, 16 Oct 2025 19:51:45 +0500 Subject: [PATCH 20/56] fix router animations --- src/hooks/use-router.ts | 8 +++----- src/index.tsx | 6 ------ 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/src/hooks/use-router.ts b/src/hooks/use-router.ts index 436e315..67c0e6f 100644 --- a/src/hooks/use-router.ts +++ b/src/hooks/use-router.ts @@ -117,9 +117,9 @@ export const useRouter = ({ return [...nextStack, {...next, params: params || next.params}]; } onNavigate?.(next.name); - animate(0, 1, 150); return [...state, {...next, params: params || next.params}]; }); + setTimeout(() => animate(0, 1, 150)); }, 100); }, [animate, routes, onNavigate], @@ -148,7 +148,6 @@ export const useRouter = ({ const next = routes?.find(route => route.name === name); if (state.length === 1) { close(); - animate(0, 1); return state; } @@ -157,7 +156,6 @@ export const useRouter = ({ nextStack.pop(); if (currentRoute) { onNavigateBack?.(nextStack[nextStack.length - 1]?.name); - animate(0, 1, 150); } return nextStack; } @@ -166,13 +164,13 @@ export const useRouter = ({ const nextStack = [...state]; nextStack.splice(currentIndex); onNavigateBack?.(nextStack[nextStack.length - 1]?.name); - animate(0, 1, 150); return [...nextStack, next]; } - animate(0, 1, 150); + onNavigateBack?.(next.name); return [...stack, next]; }); + setTimeout(() => animate(0, 1, 150)); }, 100); }; diff --git a/src/index.tsx b/src/index.tsx index 1734547..0275a37 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -676,8 +676,6 @@ export default forwardRef( node => node.node.offset.current.y !== 0, ); - console.log(nodeIsScrolling); - /** * Draggable nodes handling cases: * @@ -765,16 +763,12 @@ export default forwardRef( deltaYOnGestureStart = deltaY; } - console.log(deltaY, deltaYOnGestureStart); - deltaY = deltaY - deltaYOnGestureStart; if (!blockPan) { value = initialValue.current + deltaY; oldValue = value; } - console.log(value); - velocity = 1; const correctedValue = value <= minTranslateValue.current From 5dfbbfc60d4dbd8db93f35a14fb0931b60674d32 Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Fri, 31 Oct 2025 12:20:31 +0500 Subject: [PATCH 21/56] fix flatlist and scrollview --- src/views/FlatList.tsx | 43 +++++++++++++++------------------------- src/views/ScrollView.tsx | 19 +++++++----------- 2 files changed, 23 insertions(+), 39 deletions(-) diff --git a/src/views/FlatList.tsx b/src/views/FlatList.tsx index 807a474..7ddcb63 100644 --- a/src/views/FlatList.tsx +++ b/src/views/FlatList.tsx @@ -1,17 +1,10 @@ /* eslint-disable curly */ -import React, { - RefObject, - useImperativeHandle -} from 'react'; -import { FlatListProps, Platform, FlatList as RNFlatList } from 'react-native'; -import { - NativeViewGestureHandlerProps, - FlatList as RNGHFlatList, -} from 'react-native-gesture-handler'; -import { useScrollHandlers } from '../hooks/use-scroll-handlers'; +import React, {RefObject, useImperativeHandle} from 'react'; +import {FlatList as RNGHFlatList} from 'react-native-gesture-handler'; +import {useScrollHandlers} from '../hooks/use-scroll-handlers'; +import {FlatListProps} from 'react-native'; type Props = FlatListProps & - Partial & - React.RefAttributes & { + React.RefAttributes & { /** * By default refresh control gesture will work in top 15% area of the ScrollView. You can set a different value here. * @@ -20,34 +13,30 @@ type Props = FlatListProps & refreshControlGestureArea?: number; }; -function $FlatList( - props: Props, - ref: React.ForwardedRef>, -) { - const handlers = useScrollHandlers({ +function $FlatList(props: Props, ref: RefObject) { + const handlers = useScrollHandlers({ hasRefreshControl: !!props.refreshControl, refreshControlBoundary: props.refreshControlGestureArea || 0.15, }); - useImperativeHandle(ref, () => handlers.ref); - const ScrollComponent = Platform.OS === 'web' ? RNFlatList : RNGHFlatList; + useImperativeHandle(ref, () => handlers.ref.current); return ( - //@ts-ignore - { + handlers.onScroll(event); props.onScroll?.(event); }} - bounces={false} onLayout={event => { + handlers.onLayout(); props.onLayout?.(event); }} - scrollEventThrottle={1} + bounces={false} /> ); } -export const FlatList = React.forwardRef( - $FlatList, -) as unknown as typeof RNFlatList; +export const FlatList = React.forwardRef($FlatList); diff --git a/src/views/ScrollView.tsx b/src/views/ScrollView.tsx index 1f05960..fd3e805 100644 --- a/src/views/ScrollView.tsx +++ b/src/views/ScrollView.tsx @@ -1,17 +1,14 @@ /* eslint-disable curly */ -import React, {RefObject, useImperativeHandle} from 'react'; +import React, { RefObject, useImperativeHandle } from 'react'; import { - Platform, ScrollView as RNScrollView, - ScrollViewProps, + ScrollViewProps } from 'react-native'; import { - NativeViewGestureHandlerProps, - ScrollView as RNGHScrollView, + ScrollView as RNGHScrollView } from 'react-native-gesture-handler'; -import {useScrollHandlers} from '../hooks/use-scroll-handlers'; +import { useScrollHandlers } from '../hooks/use-scroll-handlers'; type Props = ScrollViewProps & - Partial & React.RefAttributes & { /** * By default refresh control gesture will work in top 15% area of the ScrollView. You can set a different value here. @@ -21,20 +18,18 @@ type Props = ScrollViewProps & refreshControlGestureArea?: number; }; -const ScrollComponent = Platform.OS === 'web' ? RNScrollView : RNGHScrollView; - function $ScrollView( props: Props, - ref: React.ForwardedRef>, + ref: RefObject, ) { const handlers = useScrollHandlers({ hasRefreshControl: !!props.refreshControl, refreshControlBoundary: props.refreshControlGestureArea || 0.15, }); - useImperativeHandle(ref, () => handlers.ref); + useImperativeHandle(ref, () => handlers.ref.current); return ( - Date: Fri, 31 Oct 2025 12:27:57 +0500 Subject: [PATCH 22/56] fix: hideAll does not hide all sheets in focus --- src/hooks/use-sheet-manager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/use-sheet-manager.ts b/src/hooks/use-sheet-manager.ts index 45709eb..07f6d93 100644 --- a/src/hooks/use-sheet-manager.ts +++ b/src/hooks/use-sheet-manager.ts @@ -32,7 +32,7 @@ const useSheetManager = ({ }, ), actionSheetEventManager.subscribe(`hide_${id}`, (data: any, context) => { - if (currentContext !== context) return; + if (context && currentContext !== context) return; onHide?.(data); }), ]; From 53f4b0d6f969ce7fd3387f026d13fcae4901ed47 Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Fri, 31 Oct 2025 14:25:13 +0500 Subject: [PATCH 23/56] mobile: fix scroll inside action sheet --- src/index.tsx | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 0275a37..1957bd9 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -62,7 +62,7 @@ import { } from './provider'; import {getZIndexFromStack, SheetManager} from './sheetmanager'; import {styles} from './styles'; -import type {ActionSheetProps, ActionSheetRef} from './types'; +import {ActionSheetProps, ActionSheetRef} from './types'; import {getElevation, SUPPORTED_ORIENTATIONS} from './utils'; export default forwardRef( @@ -689,9 +689,9 @@ export default forwardRef( // 1. Sheet not fully open, swiping up, scrolling: false panning: true (will transition to scrolling once sheet reaches top position) if (!isFullOpen && !isSwipingDown) { scrollable(false); - if (blockPan) { - deltaYOnGestureStart = deltaY; - } + // if (blockPan) { + // deltaYOnGestureStart = deltaY; + // } blockPan = false; } @@ -707,9 +707,9 @@ export default forwardRef( blockPan = true; } else { scrollable(false); - if (blockPan) { - // deltaYOnGestureStart = deltaY; - } + // if (blockPan) { + // // deltaYOnGestureStart = deltaY; + // } blockPan = false; } } @@ -720,6 +720,9 @@ export default forwardRef( scrollable(true); blockPan = true; } else { + if (!deltaYOnGestureStart && deltaY > 0) { + deltaYOnGestureStart = deltaY; + } const hasRefreshControl = activeDraggableNodes.some( node => node.node.handlerConfig.hasRefreshControl, ); @@ -742,9 +745,6 @@ export default forwardRef( } } else { scrollable(false); - if (blockPan) { - deltaYOnGestureStart = deltaY; - } blockPan = false; } } @@ -759,9 +759,6 @@ export default forwardRef( } let value = oldValue; - if (!deltaYOnGestureStart) { - deltaYOnGestureStart = deltaY; - } deltaY = deltaY - deltaYOnGestureStart; if (!blockPan) { @@ -769,6 +766,8 @@ export default forwardRef( oldValue = value; } + if (blockPan) return; + velocity = 1; const correctedValue = value <= minTranslateValue.current From f49a0b9d03a161ec0b6efe4e70dcec4890430f19 Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Fri, 31 Oct 2025 14:25:27 +0500 Subject: [PATCH 24/56] update snap-me action sheet --- app/examples/snap-me.tsx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/app/examples/snap-me.tsx b/app/examples/snap-me.tsx index a176d5a..b77ca61 100644 --- a/app/examples/snap-me.tsx +++ b/app/examples/snap-me.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { Text, View } from 'react-native'; -import ActionSheet, { useSheetRef } from 'react-native-actions-sheet'; +import ActionSheet, { SheetManager, useSheetRef } from 'react-native-actions-sheet'; import { Button } from '../components/button'; const SnapMe = () => { @@ -43,6 +43,17 @@ const SnapMe = () => { width: 250, }} /> + +