diff --git a/jest.config.json b/jest.config.json
index f32fc8f..02d4c2a 100644
--- a/jest.config.json
+++ b/jest.config.json
@@ -3,5 +3,5 @@
"transform": {
"^.+\\.tsx?$": "ts-jest"
},
- "testRegex": "__tests__/.*spec\\.ts$"
+ "testRegex": "__tests__/.*spec\\.tsx?$"
}
diff --git a/migration-guide.md b/migration-guide.md
index c468265..d86649f 100644
--- a/migration-guide.md
+++ b/migration-guide.md
@@ -1,4 +1,53 @@
-## Migrating from 2.x.x
+# Migrating to 4.x.x
+
+## 🚨 Breaking Changes
+
+### `useAppColorScheme()` Initialization
+
+_NB: If you were not using dark mode, or were only observing the device's color scheme
+(which is the default and most common), you can ignore this section._
+
+The mechanism for opting-out of listening to device color scheme changes in order to
+_control color scheme manually_ from your app has changed in `v4.0.0`. First,
+`useAppColorScheme()` no longer takes a second parameter for initialization:
+
+```diff
+-const [colorScheme, ...] = useAppColorScheme(tw, `light`);
++const [colorScheme, ...] = useAppColorScheme(tw);
+```
+
+This means that `useAppColorScheme()` is now safe to use multiple times in your app,
+anywhere you need to read or modify the app color scheme. As part of this change the
+**initialization has moved** to `useDeviceContext()` (which should only ever be called
+once, at the root of the app):
+
+```diff
+useDeviceContext(tw, {
+- withDeviceColorScheme: false,
++ observeDeviceColorSchemeChanges: false,
++ initialColorScheme: "light",
+});
+```
+
+The value for `initialColorScheme` can be `"light"`, `"dark"`, or `"device"`. `device`
+means initialize to the _current_ color scheme of the device one time before the app
+assumes control.
+
+_Please note:_ there was a bug in `v3.x.x` when omitting the optional initialization param
+(now removed) passed to `useAppColorScheme()` that caused the color scheme to not be
+correctly initialized when the device was in **dark mode**. Version `4.x.x` fixes this
+issue, but the bugfix can result in an observable difference in your app's initialization
+for users whose devices are set to dark mode. If you want to replicate the former behavior
+before the bug was fixed, you should explicitly pass `"light"` for `initialColorScheme`
+when calling `useDeviceContext()`.
+
+## 💃 New Features
+
+The main `tw` object now exposes a `.memoBuster` string property, which can be useful for
+resolving some simple memoization re-render failure issues. See
+[here for more](./readme.md#memo-buster).
+
+# Migrating to 3.x.x
**Color renames**. In line with the
[upgrade guide](https://tailwindcss.com/docs/upgrade-guide#removed-color-aliases),
@@ -18,7 +67,7 @@ feature that would help your development, please
and include any libraries / hooks that could help someone in the community put a PR
together.
-## Migrating from 1.x.x
+# Migrating to 2.x.x
**1.** During the rewrite, the package name on npm was changed to `twrnc`. To remove the
old library and install v2, run:
diff --git a/package-lock.json b/package-lock.json
index 35549f8..9bc6d5c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,8 +14,9 @@
"devDependencies": {
"@babel/preset-typescript": "^7.23.3",
"@types/jest": "^29.5.11",
- "@types/react": "^18.2.45",
- "@types/react-native": "^0.72.8",
+ "@types/react": "^18.2.55",
+ "@types/react-native": "^0.73.0",
+ "@types/react-test-renderer": "^18.0.7",
"@types/tailwindcss": "^3.1.0",
"@typescript-eslint/eslint-plugin": "^6.15.0",
"@typescript-eslint/parser": "^6.15.0",
@@ -26,8 +27,9 @@
"jest": "^29.7.0",
"metro-react-native-babel-preset": "^0.66.2",
"prettier": "^3.1.1",
- "react": "^17.0.2",
- "react-native": "^0.73.1",
+ "react": "^18.2.0",
+ "react-native": "^0.73.4",
+ "react-test-renderer": "^18.2.0",
"ts-jest": "^29.1.1",
"typescript": "^5.3.3"
},
@@ -1104,21 +1106,6 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-block-scoped-functions": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz",
- "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
"node_modules/@babel/plugin-transform-block-scoping": {
"version": "7.15.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz",
@@ -1272,21 +1259,6 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-member-expression-literals": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz",
- "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
"node_modules/@babel/plugin-transform-modules-commonjs": {
"version": "7.23.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz",
@@ -1335,22 +1307,6 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-object-super": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz",
- "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-replace-supers": "^7.22.20"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
"node_modules/@babel/plugin-transform-parameters": {
"version": "7.23.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz",
@@ -1400,21 +1356,6 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-property-literals": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz",
- "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
"node_modules/@babel/plugin-transform-react-display-name": {
"version": "7.15.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.15.1.tgz",
@@ -1655,15 +1596,15 @@
}
},
"node_modules/@babel/register": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz",
- "integrity": "sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==",
+ "version": "7.23.7",
+ "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.23.7.tgz",
+ "integrity": "sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==",
"dev": true,
"dependencies": {
"clone-deep": "^4.0.1",
"find-cache-dir": "^2.0.0",
"make-dir": "^2.1.0",
- "pirates": "^4.0.5",
+ "pirates": "^4.0.6",
"source-map-support": "^0.5.16"
},
"engines": {
@@ -2408,20 +2349,20 @@
}
},
"node_modules/@react-native-community/cli": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-12.3.0.tgz",
- "integrity": "sha512-XeQohi2E+S2+MMSz97QcEZ/bWpi8sfKiQg35XuYeJkc32Til2g0b97jRpn0/+fV0BInHoG1CQYWwHA7opMsrHg==",
- "dev": true,
- "dependencies": {
- "@react-native-community/cli-clean": "12.3.0",
- "@react-native-community/cli-config": "12.3.0",
- "@react-native-community/cli-debugger-ui": "12.3.0",
- "@react-native-community/cli-doctor": "12.3.0",
- "@react-native-community/cli-hermes": "12.3.0",
- "@react-native-community/cli-plugin-metro": "12.3.0",
- "@react-native-community/cli-server-api": "12.3.0",
- "@react-native-community/cli-tools": "12.3.0",
- "@react-native-community/cli-types": "12.3.0",
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-12.3.2.tgz",
+ "integrity": "sha512-WgoUWwLDcf/G1Su2COUUVs3RzAwnV/vUTdISSpAUGgSc57mPabaAoUctKTnfYEhCnE3j02k3VtaVPwCAFRO3TQ==",
+ "dev": true,
+ "dependencies": {
+ "@react-native-community/cli-clean": "12.3.2",
+ "@react-native-community/cli-config": "12.3.2",
+ "@react-native-community/cli-debugger-ui": "12.3.2",
+ "@react-native-community/cli-doctor": "12.3.2",
+ "@react-native-community/cli-hermes": "12.3.2",
+ "@react-native-community/cli-plugin-metro": "12.3.2",
+ "@react-native-community/cli-server-api": "12.3.2",
+ "@react-native-community/cli-tools": "12.3.2",
+ "@react-native-community/cli-types": "12.3.2",
"chalk": "^4.1.2",
"commander": "^9.4.1",
"deepmerge": "^4.3.0",
@@ -2440,23 +2381,23 @@
}
},
"node_modules/@react-native-community/cli-clean": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-12.3.0.tgz",
- "integrity": "sha512-iAgLCOWYRGh9ukr+eVQnhkV/OqN3V2EGd/in33Ggn/Mj4uO6+oUncXFwB+yjlyaUNz6FfjudhIz09yYGSF+9sg==",
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-12.3.2.tgz",
+ "integrity": "sha512-90k2hCX0ddSFPT7EN7h5SZj0XZPXP0+y/++v262hssoey3nhurwF57NGWN0XAR0o9BSW7+mBfeInfabzDraO6A==",
"dev": true,
"dependencies": {
- "@react-native-community/cli-tools": "12.3.0",
+ "@react-native-community/cli-tools": "12.3.2",
"chalk": "^4.1.2",
"execa": "^5.0.0"
}
},
"node_modules/@react-native-community/cli-config": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-12.3.0.tgz",
- "integrity": "sha512-BrTn5ndFD9uOxO8kxBQ32EpbtOvAsQExGPI7SokdI4Zlve70FziLtTq91LTlTUgMq1InVZn/jJb3VIDk6BTInQ==",
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-12.3.2.tgz",
+ "integrity": "sha512-UUCzDjQgvAVL/57rL7eOuFUhd+d+6qfM7V8uOegQFeFEmSmvUUDLYoXpBa5vAK9JgQtSqMBJ1Shmwao+/oElxQ==",
"dev": true,
"dependencies": {
- "@react-native-community/cli-tools": "12.3.0",
+ "@react-native-community/cli-tools": "12.3.2",
"chalk": "^4.1.2",
"cosmiconfig": "^5.1.0",
"deepmerge": "^4.3.0",
@@ -2465,24 +2406,24 @@
}
},
"node_modules/@react-native-community/cli-debugger-ui": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-12.3.0.tgz",
- "integrity": "sha512-w3b0iwjQlk47GhZWHaeTG8kKH09NCMUJO729xSdMBXE8rlbm4kHpKbxQY9qKb6NlfWSJN4noGY+FkNZS2rRwnQ==",
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-12.3.2.tgz",
+ "integrity": "sha512-nSWQUL+51J682DlfcC1bjkUbQbGvHCC25jpqTwHIjmmVjYCX1uHuhPSqQKgPNdvtfOkrkACxczd7kVMmetxY2Q==",
"dev": true,
"dependencies": {
"serve-static": "^1.13.1"
}
},
"node_modules/@react-native-community/cli-doctor": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-12.3.0.tgz",
- "integrity": "sha512-BPCwNNesoQMkKsxB08Ayy6URgGQ8Kndv6mMhIvJSNdST3J1+x3ehBHXzG9B9Vfi+DrTKRb8lmEl/b/7VkDlPkA==",
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-12.3.2.tgz",
+ "integrity": "sha512-GrAabdY4qtBX49knHFvEAdLtCjkmndjTeqhYO6BhsbAeKOtspcLT/0WRgdLIaKODRa61ADNB3K5Zm4dU0QrZOg==",
"dev": true,
"dependencies": {
- "@react-native-community/cli-config": "12.3.0",
- "@react-native-community/cli-platform-android": "12.3.0",
- "@react-native-community/cli-platform-ios": "12.3.0",
- "@react-native-community/cli-tools": "12.3.0",
+ "@react-native-community/cli-config": "12.3.2",
+ "@react-native-community/cli-platform-android": "12.3.2",
+ "@react-native-community/cli-platform-ios": "12.3.2",
+ "@react-native-community/cli-tools": "12.3.2",
"chalk": "^4.1.2",
"command-exists": "^1.2.8",
"deepmerge": "^4.3.0",
@@ -2499,25 +2440,25 @@
}
},
"node_modules/@react-native-community/cli-hermes": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-12.3.0.tgz",
- "integrity": "sha512-G6FxpeZBO4AimKZwtWR3dpXRqTvsmEqlIkkxgwthdzn3LbVjDVIXKpVYU9PkR5cnT+KuAUxO0WwthrJ6Nmrrlg==",
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-12.3.2.tgz",
+ "integrity": "sha512-SL6F9O8ghp4ESBFH2YAPLtIN39jdnvGBKnK4FGKpDCjtB3DnUmDsGFlH46S+GGt5M6VzfG2eeKEOKf3pZ6jUzA==",
"dev": true,
"dependencies": {
- "@react-native-community/cli-platform-android": "12.3.0",
- "@react-native-community/cli-tools": "12.3.0",
+ "@react-native-community/cli-platform-android": "12.3.2",
+ "@react-native-community/cli-tools": "12.3.2",
"chalk": "^4.1.2",
"hermes-profile-transformer": "^0.0.6",
"ip": "^1.1.5"
}
},
"node_modules/@react-native-community/cli-platform-android": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-12.3.0.tgz",
- "integrity": "sha512-VU1NZw63+GLU2TnyQ919bEMThpHQ/oMFju9MCfrd3pyPJz4Sn+vc3NfnTDUVA5Z5yfLijFOkHIHr4vo/C9bjnw==",
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-12.3.2.tgz",
+ "integrity": "sha512-MZ5nO8yi/N+Fj2i9BJcJ9C/ez+9/Ir7lQt49DWRo9YDmzye66mYLr/P2l/qxsixllbbDi7BXrlLpxaEhMrDopg==",
"dev": true,
"dependencies": {
- "@react-native-community/cli-tools": "12.3.0",
+ "@react-native-community/cli-tools": "12.3.2",
"chalk": "^4.1.2",
"execa": "^5.0.0",
"fast-xml-parser": "^4.2.4",
@@ -2526,12 +2467,12 @@
}
},
"node_modules/@react-native-community/cli-platform-ios": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-12.3.0.tgz",
- "integrity": "sha512-H95Sgt3wT7L8V75V0syFJDtv4YgqK5zbu69ko4yrXGv8dv2EBi6qZP0VMmkqXDamoPm9/U7tDTdbcf26ctnLfg==",
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-12.3.2.tgz",
+ "integrity": "sha512-OcWEAbkev1IL6SUiQnM6DQdsvfsKZhRZtoBNSj9MfdmwotVZSOEZJ+IjZ1FR9ChvMWayO9ns/o8LgoQxr1ZXeg==",
"dev": true,
"dependencies": {
- "@react-native-community/cli-tools": "12.3.0",
+ "@react-native-community/cli-tools": "12.3.2",
"chalk": "^4.1.2",
"execa": "^5.0.0",
"fast-xml-parser": "^4.0.12",
@@ -2540,19 +2481,19 @@
}
},
"node_modules/@react-native-community/cli-plugin-metro": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-12.3.0.tgz",
- "integrity": "sha512-tYNHIYnNmxrBcsqbE2dAnLMzlKI3Cp1p1xUgTrNaOMsGPDN1epzNfa34n6Nps3iwKElSL7Js91CzYNqgTalucA==",
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-12.3.2.tgz",
+ "integrity": "sha512-FpFBwu+d2E7KRhYPTkKvQsWb2/JKsJv+t1tcqgQkn+oByhp+qGyXBobFB8/R3yYvRRDCSDhS+atWTJzk9TjM8g==",
"dev": true
},
"node_modules/@react-native-community/cli-server-api": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-12.3.0.tgz",
- "integrity": "sha512-Rode8NrdyByC+lBKHHn+/W8Zu0c+DajJvLmOWbe2WY/ECvnwcd9MHHbu92hlT2EQaJ9LbLhGrSbQE3cQy9EOCw==",
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-12.3.2.tgz",
+ "integrity": "sha512-iwa7EO9XFA/OjI5pPLLpI/6mFVqv8L73kNck3CNOJIUCCveGXBKK0VMyOkXaf/BYnihgQrXh+x5cxbDbggr7+Q==",
"dev": true,
"dependencies": {
- "@react-native-community/cli-debugger-ui": "12.3.0",
- "@react-native-community/cli-tools": "12.3.0",
+ "@react-native-community/cli-debugger-ui": "12.3.2",
+ "@react-native-community/cli-tools": "12.3.2",
"compression": "^1.7.1",
"connect": "^3.6.5",
"errorhandler": "^1.5.1",
@@ -2563,9 +2504,9 @@
}
},
"node_modules/@react-native-community/cli-tools": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-12.3.0.tgz",
- "integrity": "sha512-2GafnCr8D88VdClwnm9KZfkEb+lzVoFdr/7ybqhdeYM0Vnt/tr2N+fM1EQzwI1DpzXiBzTYemw8GjRq+Utcz2Q==",
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-12.3.2.tgz",
+ "integrity": "sha512-nDH7vuEicHI2TI0jac/DjT3fr977iWXRdgVAqPZFFczlbs7A8GQvEdGnZ1G8dqRUmg+kptw0e4hwczAOG89JzQ==",
"dev": true,
"dependencies": {
"appdirsjs": "^1.2.4",
@@ -2642,9 +2583,9 @@
}
},
"node_modules/@react-native-community/cli-types": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-12.3.0.tgz",
- "integrity": "sha512-MgOkmrXH4zsGxhte4YqKL7d+N8ZNEd3w1wo56MZlhu5WabwCJh87wYpU5T8vyfujFLYOFuFK5jjlcbs8F4/WDw==",
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-12.3.2.tgz",
+ "integrity": "sha512-9D0UEFqLW8JmS16mjHJxUJWX8E+zJddrHILSH8AJHZ0NNHv4u2DXKdb0wFLMobFxGNxPT+VSOjc60fGvXzWHog==",
"dev": true,
"dependencies": {
"joi": "^17.2.1"
@@ -2660,21 +2601,21 @@
}
},
"node_modules/@react-native/babel-plugin-codegen": {
- "version": "0.74.0",
- "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.0.tgz",
- "integrity": "sha512-xAM/eVSb5LBkKue3bDZgt76bdsGGzKeF/iEzUNbDTwRQrB3Q5GoceGNM/zVlF+z1xGAkr3jhL+ZyITZGSoIlgw==",
+ "version": "0.73.4",
+ "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.73.4.tgz",
+ "integrity": "sha512-XzRd8MJGo4Zc5KsphDHBYJzS1ryOHg8I2gOZDAUCGcwLFhdyGu1zBNDJYH2GFyDrInn9TzAbRIf3d4O+eltXQQ==",
"dev": true,
"dependencies": {
- "@react-native/codegen": "*"
+ "@react-native/codegen": "0.73.3"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@react-native/babel-preset": {
- "version": "0.74.0",
- "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.74.0.tgz",
- "integrity": "sha512-k+1aaYQeLn+GBmGA5Qs3NKI8uzhLvRRMML+pB/+43ZL6DvCklbuJ5KO5oqRRpF3KZ2t/VKUqqSichpXfFrXGjg==",
+ "version": "0.73.21",
+ "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.73.21.tgz",
+ "integrity": "sha512-WlFttNnySKQMeujN09fRmrdWqh46QyJluM5jdtDNrkl/2Hx6N4XeDUGhABvConeK95OidVO7sFFf7sNebVXogA==",
"dev": true,
"dependencies": {
"@babel/core": "^7.20.0",
@@ -2716,7 +2657,7 @@
"@babel/plugin-transform-typescript": "^7.5.0",
"@babel/plugin-transform-unicode-regex": "^7.0.0",
"@babel/template": "^7.0.0",
- "@react-native/babel-plugin-codegen": "*",
+ "@react-native/babel-plugin-codegen": "0.73.4",
"babel-plugin-transform-flow-enums": "^0.0.2",
"react-refresh": "^0.14.0"
},
@@ -2737,9 +2678,9 @@
}
},
"node_modules/@react-native/codegen": {
- "version": "0.73.2",
- "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.73.2.tgz",
- "integrity": "sha512-lfy8S7umhE3QLQG5ViC4wg5N1Z+E6RnaeIw8w1voroQsXXGPB72IBozh8dAHR3+ceTxIU0KX3A8OpJI8e1+HpQ==",
+ "version": "0.73.3",
+ "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.73.3.tgz",
+ "integrity": "sha512-sxslCAAb8kM06vGy9Jyh4TtvjhcP36k/rvj2QE2Jdhdm61KvfafCATSIsOfc0QvnduWFcpXUPvAVyYwuv7PYDg==",
"dev": true,
"dependencies": {
"@babel/parser": "^7.20.0",
@@ -2758,20 +2699,20 @@
}
},
"node_modules/@react-native/community-cli-plugin": {
- "version": "0.73.11",
- "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.73.11.tgz",
- "integrity": "sha512-s0bprwljKS1Al8wOKathDDmRyF+70CcNE2G/aqZ7+L0NoOE0Uxxx/5P2BxlM2Mfht7O33B4SeMNiPdE/FqIubQ==",
+ "version": "0.73.16",
+ "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.73.16.tgz",
+ "integrity": "sha512-eNH3v3qJJF6f0n/Dck90qfC9gVOR4coAXMTdYECO33GfgjTi+73vf/SBqlXw9HICH/RNZYGPM3wca4FRF7TYeQ==",
"dev": true,
"dependencies": {
- "@react-native-community/cli-server-api": "12.3.0",
- "@react-native-community/cli-tools": "12.3.0",
- "@react-native/dev-middleware": "^0.73.6",
- "@react-native/metro-babel-transformer": "^0.73.12",
+ "@react-native-community/cli-server-api": "12.3.2",
+ "@react-native-community/cli-tools": "12.3.2",
+ "@react-native/dev-middleware": "0.73.7",
+ "@react-native/metro-babel-transformer": "0.73.15",
"chalk": "^4.0.0",
"execa": "^5.1.1",
- "metro": "^0.80.0",
- "metro-config": "^0.80.0",
- "metro-core": "^0.80.0",
+ "metro": "^0.80.3",
+ "metro-config": "^0.80.3",
+ "metro-core": "^0.80.3",
"node-fetch": "^2.2.0",
"readline": "^1.3.0"
},
@@ -2789,13 +2730,13 @@
}
},
"node_modules/@react-native/dev-middleware": {
- "version": "0.73.6",
- "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.73.6.tgz",
- "integrity": "sha512-9SD7gIso+hO1Jy1Y/Glbd+JWQwyH7Xjnwebtkxdm5TMB51LQPjaGtMcwEigbIZyAtvoaDGmhWmudwbKpDlS+gA==",
+ "version": "0.73.7",
+ "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.73.7.tgz",
+ "integrity": "sha512-BZXpn+qKp/dNdr4+TkZxXDttfx8YobDh8MFHsMk9usouLm22pKgFIPkGBV0X8Do4LBkFNPGtrnsKkWk/yuUXKg==",
"dev": true,
"dependencies": {
"@isaacs/ttlcache": "^1.4.1",
- "@react-native/debugger-frontend": "^0.73.3",
+ "@react-native/debugger-frontend": "0.73.3",
"chrome-launcher": "^0.15.2",
"chromium-edge-launcher": "^1.0.0",
"connect": "^3.6.5",
@@ -2859,14 +2800,13 @@
}
},
"node_modules/@react-native/metro-babel-transformer": {
- "version": "0.73.12",
- "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.73.12.tgz",
- "integrity": "sha512-VmxN5aaoOprzDzUR+8c3XYhG0FoMOO6n0ToylCW6EeZCuf5RTY7HWVOhacabGoB1mHrWzJ0wWEsqX+eD4iFxoA==",
+ "version": "0.73.15",
+ "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.73.15.tgz",
+ "integrity": "sha512-LlkSGaXCz+xdxc9819plmpsl4P4gZndoFtpjN3GMBIu6f7TBV0GVbyJAU4GE8fuAWPVSVL5ArOcdkWKSbI1klw==",
"dev": true,
"dependencies": {
"@babel/core": "^7.20.0",
- "@react-native/babel-preset": "*",
- "babel-preset-fbjs": "^3.4.0",
+ "@react-native/babel-preset": "0.73.21",
"hermes-parser": "0.15.0",
"nullthrows": "^1.1.1"
},
@@ -2883,23 +2823,10 @@
"integrity": "sha512-bRBcb2T+I88aG74LMVHaKms2p/T8aQd8+BZ7LuuzXlRfog1bMWWn/C5i0HVuvW4RPtXQYgIlGiXVDy9Ir1So/w==",
"dev": true
},
- "node_modules/@react-native/virtualized-lists": {
- "version": "0.72.8",
- "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.72.8.tgz",
- "integrity": "sha512-J3Q4Bkuo99k7mu+jPS9gSUSgq+lLRSI/+ahXNwV92XgJ/8UgOTxu2LPwhJnBk/sQKxq7E8WkZBnBiozukQMqrw==",
- "dev": true,
- "dependencies": {
- "invariant": "^2.2.4",
- "nullthrows": "^1.1.1"
- },
- "peerDependencies": {
- "react-native": "*"
- }
- },
"node_modules/@sideway/address": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz",
- "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==",
+ "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,
"dependencies": {
"@hapi/hoek": "^9.0.0"
@@ -3082,9 +3009,9 @@
"dev": true
},
"node_modules/@types/react": {
- "version": "18.2.45",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.45.tgz",
- "integrity": "sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==",
+ "version": "18.2.55",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.55.tgz",
+ "integrity": "sha512-Y2Tz5P4yz23brwm2d7jNon39qoAtMMmalOQv6+fEFt1mT+FcM3D841wDpoUvFXhaYenuROCy3FZYqdTjM7qVyA==",
"dev": true,
"dependencies": {
"@types/prop-types": "*",
@@ -3093,12 +3020,21 @@
}
},
"node_modules/@types/react-native": {
- "version": "0.72.8",
- "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.72.8.tgz",
- "integrity": "sha512-St6xA7+EoHN5mEYfdWnfYt0e8u6k2FR0P9s2arYgakQGFgU1f9FlPrIEcj0X24pLCF5c5i3WVuLCUdiCYHmOoA==",
+ "version": "0.73.0",
+ "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.73.0.tgz",
+ "integrity": "sha512-6ZRPQrYM72qYKGWidEttRe6M5DZBEV5F+MHMHqd4TTYx0tfkcdrUFGdef6CCxY0jXU7wldvd/zA/b0A/kTeJmA==",
+ "deprecated": "This is a stub types definition. react-native provides its own type definitions, so you do not need this installed.",
+ "dev": true,
+ "dependencies": {
+ "react-native": "*"
+ }
+ },
+ "node_modules/@types/react-test-renderer": {
+ "version": "18.0.7",
+ "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-18.0.7.tgz",
+ "integrity": "sha512-1+ANPOWc6rB3IkSnElhjv6VLlKg2dSv/OWClUyZimbLsQyBn8Js9Vtdsi3UICJ2rIQ3k2la06dkB+C92QfhKmg==",
"dev": true,
"dependencies": {
- "@react-native/virtualized-lists": "^0.72.4",
"@types/react": "*"
}
},
@@ -3791,12 +3727,6 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/babel-plugin-syntax-trailing-function-commas": {
- "version": "7.0.0-beta.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz",
- "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==",
- "dev": true
- },
"node_modules/babel-plugin-transform-flow-enums": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz",
@@ -3829,44 +3759,6 @@
"@babel/core": "^7.0.0"
}
},
- "node_modules/babel-preset-fbjs": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz",
- "integrity": "sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==",
- "dev": true,
- "dependencies": {
- "@babel/plugin-proposal-class-properties": "^7.0.0",
- "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
- "@babel/plugin-syntax-class-properties": "^7.0.0",
- "@babel/plugin-syntax-flow": "^7.0.0",
- "@babel/plugin-syntax-jsx": "^7.0.0",
- "@babel/plugin-syntax-object-rest-spread": "^7.0.0",
- "@babel/plugin-transform-arrow-functions": "^7.0.0",
- "@babel/plugin-transform-block-scoped-functions": "^7.0.0",
- "@babel/plugin-transform-block-scoping": "^7.0.0",
- "@babel/plugin-transform-classes": "^7.0.0",
- "@babel/plugin-transform-computed-properties": "^7.0.0",
- "@babel/plugin-transform-destructuring": "^7.0.0",
- "@babel/plugin-transform-flow-strip-types": "^7.0.0",
- "@babel/plugin-transform-for-of": "^7.0.0",
- "@babel/plugin-transform-function-name": "^7.0.0",
- "@babel/plugin-transform-literals": "^7.0.0",
- "@babel/plugin-transform-member-expression-literals": "^7.0.0",
- "@babel/plugin-transform-modules-commonjs": "^7.0.0",
- "@babel/plugin-transform-object-super": "^7.0.0",
- "@babel/plugin-transform-parameters": "^7.0.0",
- "@babel/plugin-transform-property-literals": "^7.0.0",
- "@babel/plugin-transform-react-display-name": "^7.0.0",
- "@babel/plugin-transform-react-jsx": "^7.0.0",
- "@babel/plugin-transform-shorthand-properties": "^7.0.0",
- "@babel/plugin-transform-spread": "^7.0.0",
- "@babel/plugin-transform-template-literals": "^7.0.0",
- "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
"node_modules/babel-preset-jest": {
"version": "29.6.3",
"resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
@@ -4784,9 +4676,9 @@
}
},
"node_modules/envinfo": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz",
- "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==",
+ "version": "7.11.1",
+ "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.1.tgz",
+ "integrity": "sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==",
"dev": true,
"bin": {
"envinfo": "dist/cli.js"
@@ -5432,9 +5324,9 @@
"dev": true
},
"node_modules/fast-xml-parser": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.2.tgz",
- "integrity": "sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.4.tgz",
+ "integrity": "sha512-utnwm92SyozgA3hhH2I8qldf2lBqm6qHOICawRNRFu1qMe3+oqr+GcXjGqTmXTMGE5T4eC03kr/rlh5C1IRdZA==",
"dev": true,
"funding": [
{
@@ -6037,9 +5929,9 @@
}
},
"node_modules/image-size": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz",
- "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz",
+ "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==",
"dev": true,
"dependencies": {
"queue": "6.0.2"
@@ -6048,7 +5940,7 @@
"image-size": "bin/image-size.js"
},
"engines": {
- "node": ">=14.0.0"
+ "node": ">=16.x"
}
},
"node_modules/import-fresh": {
@@ -7524,14 +7416,14 @@
}
},
"node_modules/joi": {
- "version": "17.11.0",
- "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz",
- "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==",
+ "version": "17.12.1",
+ "resolved": "https://registry.npmjs.org/joi/-/joi-17.12.1.tgz",
+ "integrity": "sha512-vtxmq+Lsc5SlfqotnfVjlViWfOL9nt/avKNbKYizwf6gsCfq9NYY/ceYRMFD8XDdrjJ9abJyScWmhmIiy+XRtQ==",
"dev": true,
"dependencies": {
- "@hapi/hoek": "^9.0.0",
- "@hapi/topo": "^5.0.0",
- "@sideway/address": "^4.1.3",
+ "@hapi/hoek": "^9.3.0",
+ "@hapi/topo": "^5.1.0",
+ "@sideway/address": "^4.1.5",
"@sideway/formula": "^3.0.1",
"@sideway/pinpoint": "^2.0.0"
}
@@ -7991,9 +7883,9 @@
}
},
"node_modules/metro": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.2.tgz",
- "integrity": "sha512-iavBVpr3v4YD2XWUsL7peq/lUquX5KTH+dKc5Rw13XnDHDfoRgcMOmQjSn3xcFxP0R9P4uABML8YegAekoqjQg==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.5.tgz",
+ "integrity": "sha512-OE/CGbOgbi8BlTN1QqJgKOBaC27dS0JBQw473JcivrpgVnqIsluROA7AavEaTVUrB9wPUZvoNVDROn5uiM2jfw==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.0.0",
@@ -8011,25 +7903,24 @@
"denodeify": "^1.2.1",
"error-stack-parser": "^2.0.6",
"graceful-fs": "^4.2.4",
- "hermes-parser": "0.18.0",
+ "hermes-parser": "0.18.2",
"image-size": "^1.0.2",
"invariant": "^2.2.4",
"jest-worker": "^29.6.3",
"jsc-safe-url": "^0.2.2",
"lodash.throttle": "^4.1.1",
- "metro-babel-transformer": "0.80.2",
- "metro-cache": "0.80.2",
- "metro-cache-key": "0.80.2",
- "metro-config": "0.80.2",
- "metro-core": "0.80.2",
- "metro-file-map": "0.80.2",
- "metro-minify-terser": "0.80.2",
- "metro-resolver": "0.80.2",
- "metro-runtime": "0.80.2",
- "metro-source-map": "0.80.2",
- "metro-symbolicate": "0.80.2",
- "metro-transform-plugins": "0.80.2",
- "metro-transform-worker": "0.80.2",
+ "metro-babel-transformer": "0.80.5",
+ "metro-cache": "0.80.5",
+ "metro-cache-key": "0.80.5",
+ "metro-config": "0.80.5",
+ "metro-core": "0.80.5",
+ "metro-file-map": "0.80.5",
+ "metro-resolver": "0.80.5",
+ "metro-runtime": "0.80.5",
+ "metro-source-map": "0.80.5",
+ "metro-symbolicate": "0.80.5",
+ "metro-transform-plugins": "0.80.5",
+ "metro-transform-worker": "0.80.5",
"mime-types": "^2.1.27",
"node-fetch": "^2.2.0",
"nullthrows": "^1.1.1",
@@ -8049,13 +7940,13 @@
}
},
"node_modules/metro-babel-transformer": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.2.tgz",
- "integrity": "sha512-QR+HCD5rswoLVMZOU95dda0XmrT3dDnm+pq+ql/Q6RCDBY0BUS7Z1l1mN9jq/MRBy2QOW+IKKgSMTIC9Khtbpw==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.5.tgz",
+ "integrity": "sha512-sxH6hcWCorhTbk4kaShCWsadzu99WBL4Nvq4m/sDTbp32//iGuxtAnUK+ZV+6IEygr2u9Z0/4XoZ8Sbcl71MpA==",
"dev": true,
"dependencies": {
"@babel/core": "^7.20.0",
- "hermes-parser": "0.18.0",
+ "hermes-parser": "0.18.2",
"nullthrows": "^1.1.1"
},
"engines": {
@@ -8063,27 +7954,27 @@
}
},
"node_modules/metro-babel-transformer/node_modules/hermes-estree": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.18.0.tgz",
- "integrity": "sha512-WaIudIVKo5QWFqz1ta53HqSDuVxYST/MUuP9X7dqUpbHse3E2gzJq/7hEtgx84hh2XSNWN1AhYho3ThOA85uCA==",
+ "version": "0.18.2",
+ "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.18.2.tgz",
+ "integrity": "sha512-KoLsoWXJ5o81nit1wSyEZnWUGy9cBna9iYMZBR7skKh7okYAYKqQ9/OczwpMHn/cH0hKDyblulGsJ7FknlfVxQ==",
"dev": true
},
"node_modules/metro-babel-transformer/node_modules/hermes-parser": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.18.0.tgz",
- "integrity": "sha512-DIIM6vsy30BU5hNkOXh6MR2r4ZAxVhbfyTnmfo/rqUf3KySlNWn9fWiOcpuGAdDN2o5sdPCpu6cep3a23d1Klw==",
+ "version": "0.18.2",
+ "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.18.2.tgz",
+ "integrity": "sha512-1eQfvib+VPpgBZ2zYKQhpuOjw1tH+Emuib6QmjkJWJMhyjM8xnXMvA+76o9LhF0zOAJDZgPfQhg43cyXEyl5Ew==",
"dev": true,
"dependencies": {
- "hermes-estree": "0.18.0"
+ "hermes-estree": "0.18.2"
}
},
"node_modules/metro-cache": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.2.tgz",
- "integrity": "sha512-ELz2GcXLDyT5w4awaL+6bb3X6Eg6RS5CcQ5CcXAgCCFqBwRuTBHkztK1rLyp7IX76Xb2wlz7781T9H4CCtxD5w==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.5.tgz",
+ "integrity": "sha512-2u+dQ4PZwmC7eZo9uMBNhQQMig9f+w4QWBZwXCdVy/RYOHM0eObgGdMEOwODo73uxie82T9lWzxr3aZOZ+Nqtw==",
"dev": true,
"dependencies": {
- "metro-core": "0.80.2",
+ "metro-core": "0.80.5",
"rimraf": "^3.0.2"
},
"engines": {
@@ -8091,49 +7982,49 @@
}
},
"node_modules/metro-cache-key": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.2.tgz",
- "integrity": "sha512-ldNEFiq9COBZSZOBgyHvil4dtIWZsJahbByGDh6f5jPrkj9cBih1rGeo9ix+MLl7aVh2cA3hHQjyponQsfXcnQ==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.5.tgz",
+ "integrity": "sha512-fr3QLZUarsB3tRbVcmr34kCBsTHk0Sh9JXGvBY/w3b2lbre+Lq5gtgLyFElHPecGF7o4z1eK9r3ubxtScHWcbA==",
"dev": true,
"engines": {
"node": ">=18"
}
},
"node_modules/metro-config": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.2.tgz",
- "integrity": "sha512-3U7S3uakSwUyXp3E0V2mhLT+82EzIeBuOFav4mKNIq9dl9AW62x5o5e8q3bmyHwDWg+RZ8jIBkAURKrhS/eALw==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.5.tgz",
+ "integrity": "sha512-elqo/lwvF+VjZ1OPyvmW/9hSiGlmcqu+rQvDKw5F5WMX48ZC+ySTD1WcaD7e97pkgAlJHVYqZ98FCjRAYOAFRQ==",
"dev": true,
"dependencies": {
"connect": "^3.6.5",
"cosmiconfig": "^5.0.5",
"jest-validate": "^29.6.3",
- "metro": "0.80.2",
- "metro-cache": "0.80.2",
- "metro-core": "0.80.2",
- "metro-runtime": "0.80.2"
+ "metro": "0.80.5",
+ "metro-cache": "0.80.5",
+ "metro-core": "0.80.5",
+ "metro-runtime": "0.80.5"
},
"engines": {
"node": ">=18"
}
},
"node_modules/metro-core": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.2.tgz",
- "integrity": "sha512-RL1iHZlR+3tvrJIBE/W6YlwW7OH1ckcgCCEr7bxEqUTNRiraK2zTv2jJ4b7VS/Xftdzvungk8ls3FNem5MFrIw==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.5.tgz",
+ "integrity": "sha512-vkLuaBhnZxTVpaZO8ZJVEHzjaqSXpOdpAiztSZ+NDaYM6jEFgle3/XIbLW91jTSf2+T8Pj5yB1G7KuOX+BcVwg==",
"dev": true,
"dependencies": {
"lodash.throttle": "^4.1.1",
- "metro-resolver": "0.80.2"
+ "metro-resolver": "0.80.5"
},
"engines": {
"node": ">=18"
}
},
"node_modules/metro-file-map": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.2.tgz",
- "integrity": "sha512-/GiFdE5nhtvviDPANH9j3SE6VG4j2DaaKia+0gzyVYwP+6Kjc2oADj6FCGFOXDdCizqeqASUSgEsp+06D8+tXw==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.5.tgz",
+ "integrity": "sha512-bKCvJ05drjq6QhQxnDUt3I8x7bTcHo3IIKVobEr14BK++nmxFGn/BmFLRzVBlghM6an3gqwpNEYxS5qNc+VKcg==",
"dev": true,
"dependencies": {
"anymatch": "^3.0.3",
@@ -8170,9 +8061,9 @@
"dev": true
},
"node_modules/metro-minify-terser": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.2.tgz",
- "integrity": "sha512-+0lN1uJsFKke+RaZVZE3vxD8vVuGDiH/roiUzTIktof2rBtBmXJAx+TYjy1SZQN48eHot9CaAXZ6MfiSVJiPew==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.5.tgz",
+ "integrity": "sha512-S7oZLLcab6YXUT6jYFX/ZDMN7Fq6xBGGAG8liMFU1UljX6cTcEC2u+UIafYgCLrdVexp/+ClxrIetVPZ5LtL/g==",
"dev": true,
"dependencies": {
"terser": "^5.15.0"
@@ -8233,18 +8124,18 @@
}
},
"node_modules/metro-resolver": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.2.tgz",
- "integrity": "sha512-0OmCsmlcBQWkJXx0YoYRTS+ArRT888WcgmgjwoJVQm+xdMRKuu67ihyF8EOpeVgOzbeo0IxVjkNmbJWOfficjA==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.5.tgz",
+ "integrity": "sha512-haJ/Hveio3zv/Fr4eXVdKzjUeHHDogYok7OpRqPSXGhTXisNXB+sLN7CpcUrCddFRUDLnVaqQOYwhYsFndgUwA==",
"dev": true,
"engines": {
"node": ">=18"
}
},
"node_modules/metro-runtime": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.2.tgz",
- "integrity": "sha512-ruIlSEVnmJGbLnZIGf8/ra+qoD1Knft0R+5laUpp/KEGkD+GEr4XgP+5j5Uuq3v36qDLFTj1KXfQP5JVoeM8zw==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.5.tgz",
+ "integrity": "sha512-L0syTWJUdWzfUmKgkScr6fSBVTh6QDr8eKEkRtn40OBd8LPagrJGySBboWSgbyn9eIb4ayW3Y347HxgXBSAjmg==",
"dev": true,
"dependencies": {
"@babel/runtime": "^7.0.0"
@@ -8254,17 +8145,17 @@
}
},
"node_modules/metro-source-map": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.2.tgz",
- "integrity": "sha512-fM6RwYCJrwfqVk8Z1ApvJ3+Zz7fso38AszmAXqFDXziOC0AfmMCv/W9FosE9BY+y5QJ7YcvW0RIYLQhpCn+V9w==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.5.tgz",
+ "integrity": "sha512-DwSF4l03mKPNqCtyQ6K23I43qzU1BViAXnuH81eYWdHglP+sDlPpY+/7rUahXEo6qXEHXfAJgVoo1sirbXbmsQ==",
"dev": true,
"dependencies": {
"@babel/traverse": "^7.20.0",
"@babel/types": "^7.20.0",
"invariant": "^2.2.4",
- "metro-symbolicate": "0.80.2",
+ "metro-symbolicate": "0.80.5",
"nullthrows": "^1.1.1",
- "ob1": "0.80.2",
+ "ob1": "0.80.5",
"source-map": "^0.5.6",
"vlq": "^1.0.0"
},
@@ -8282,13 +8173,13 @@
}
},
"node_modules/metro-symbolicate": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.2.tgz",
- "integrity": "sha512-G/gJbl/XRGlgjAQSmZ5Rtym//7MSaE2Bj+28BBVqF6fse5y2kw9J7weNDfLjRfKDNaMUoC4mjc6TYjW7gPuGng==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.5.tgz",
+ "integrity": "sha512-IsM4mTYvmo9JvIqwEkCZ5+YeDVPST78Q17ZgljfLdHLSpIivOHp9oVoiwQ/YGbLx0xRHRIS/tKiXueWBnj3UWA==",
"dev": true,
"dependencies": {
"invariant": "^2.2.4",
- "metro-source-map": "0.80.2",
+ "metro-source-map": "0.80.5",
"nullthrows": "^1.1.1",
"source-map": "^0.5.6",
"through2": "^2.0.1",
@@ -8311,9 +8202,9 @@
}
},
"node_modules/metro-transform-plugins": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.2.tgz",
- "integrity": "sha512-edokA2lPM3zzJRa55ze2mzVHCUNeJs4CPPrntdVOnf2WkEO/snV4RIgQDVkxFgPc8nI4iLB8cwZZQvdvH3v8gA==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.5.tgz",
+ "integrity": "sha512-7IdlTqK/k5+qE3RvIU5QdCJUPk4tHWEqgVuYZu8exeW+s6qOJ66hGIJjXY/P7ccucqF+D4nsbAAW5unkoUdS6g==",
"dev": true,
"dependencies": {
"@babel/core": "^7.20.0",
@@ -8327,21 +8218,22 @@
}
},
"node_modules/metro-transform-worker": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.2.tgz",
- "integrity": "sha512-QtAntH+8AA06PDpXqM6/N42cvgw665TXp9mKKwrYL/d4lVemNNJte0CJ71KO4MmYQ5UvSDonwbTlOXJOnR8m6w==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.5.tgz",
+ "integrity": "sha512-Q1oM7hfP+RBgAtzRFBDjPhArELUJF8iRCZ8OidqCpYzQJVGuJZ7InSnIf3hn1JyqiUQwv2f1LXBO78i2rAjzyA==",
"dev": true,
"dependencies": {
"@babel/core": "^7.20.0",
"@babel/generator": "^7.20.0",
"@babel/parser": "^7.20.0",
"@babel/types": "^7.20.0",
- "metro": "0.80.2",
- "metro-babel-transformer": "0.80.2",
- "metro-cache": "0.80.2",
- "metro-cache-key": "0.80.2",
- "metro-source-map": "0.80.2",
- "metro-transform-plugins": "0.80.2",
+ "metro": "0.80.5",
+ "metro-babel-transformer": "0.80.5",
+ "metro-cache": "0.80.5",
+ "metro-cache-key": "0.80.5",
+ "metro-minify-terser": "0.80.5",
+ "metro-source-map": "0.80.5",
+ "metro-transform-plugins": "0.80.5",
"nullthrows": "^1.1.1"
},
"engines": {
@@ -8364,18 +8256,18 @@
}
},
"node_modules/metro/node_modules/hermes-estree": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.18.0.tgz",
- "integrity": "sha512-WaIudIVKo5QWFqz1ta53HqSDuVxYST/MUuP9X7dqUpbHse3E2gzJq/7hEtgx84hh2XSNWN1AhYho3ThOA85uCA==",
+ "version": "0.18.2",
+ "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.18.2.tgz",
+ "integrity": "sha512-KoLsoWXJ5o81nit1wSyEZnWUGy9cBna9iYMZBR7skKh7okYAYKqQ9/OczwpMHn/cH0hKDyblulGsJ7FknlfVxQ==",
"dev": true
},
"node_modules/metro/node_modules/hermes-parser": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.18.0.tgz",
- "integrity": "sha512-DIIM6vsy30BU5hNkOXh6MR2r4ZAxVhbfyTnmfo/rqUf3KySlNWn9fWiOcpuGAdDN2o5sdPCpu6cep3a23d1Klw==",
+ "version": "0.18.2",
+ "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.18.2.tgz",
+ "integrity": "sha512-1eQfvib+VPpgBZ2zYKQhpuOjw1tH+Emuib6QmjkJWJMhyjM8xnXMvA+76o9LhF0zOAJDZgPfQhg43cyXEyl5Ew==",
"dev": true,
"dependencies": {
- "hermes-estree": "0.18.0"
+ "hermes-estree": "0.18.2"
}
},
"node_modules/metro/node_modules/ms": {
@@ -8644,9 +8536,9 @@
"dev": true
},
"node_modules/ob1": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.2.tgz",
- "integrity": "sha512-dF78RVxoZjzSTfOWiZh6iaRtTrKyMhTiDtr/nDJOIN5hKj0pNjY7z/NueYCUH4EDgFmabv4r+WEihSu+qCI7Mg==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.5.tgz",
+ "integrity": "sha512-zYDMnnNrFi/1Tqh0vo3PE4p97Tpl9/4MP2k2ECvkbLOZzQuAYZJLTUYVLZb7hJhbhjT+JJxAwBGS8iu5hCSd1w==",
"dev": true,
"engines": {
"node": ">=18"
@@ -9387,13 +9279,12 @@
}
},
"node_modules/react": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz",
- "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==",
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
"dev": true,
"dependencies": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
+ "loose-envify": "^1.1.0"
},
"engines": {
"node": ">=0.10.0"
@@ -9416,26 +9307,27 @@
"dev": true
},
"node_modules/react-native": {
- "version": "0.73.1",
- "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.73.1.tgz",
- "integrity": "sha512-nLl9O2yKRh1nMXwsk4SUiD0ddd19RqlKgNU9AU8bTK/zD2xwnVOG56YK1/22SN67niWyoeG83vVg1eTk+S6ReA==",
+ "version": "0.73.4",
+ "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.73.4.tgz",
+ "integrity": "sha512-VtS+Yr6OOTIuJGDECIYWzNU8QpJjASQYvMtfa/Hvm/2/h5GdB6W9H9TOmh13x07Lj4AOhNMx3XSsz6TdrO4jIg==",
"dev": true,
"dependencies": {
"@jest/create-cache-key-function": "^29.6.3",
- "@react-native-community/cli": "12.3.0",
- "@react-native-community/cli-platform-android": "12.3.0",
- "@react-native-community/cli-platform-ios": "12.3.0",
- "@react-native/assets-registry": "^0.73.1",
- "@react-native/codegen": "^0.73.2",
- "@react-native/community-cli-plugin": "0.73.11",
- "@react-native/gradle-plugin": "^0.73.4",
- "@react-native/js-polyfills": "^0.73.1",
- "@react-native/normalize-colors": "^0.73.2",
- "@react-native/virtualized-lists": "^0.73.4",
+ "@react-native-community/cli": "12.3.2",
+ "@react-native-community/cli-platform-android": "12.3.2",
+ "@react-native-community/cli-platform-ios": "12.3.2",
+ "@react-native/assets-registry": "0.73.1",
+ "@react-native/codegen": "0.73.3",
+ "@react-native/community-cli-plugin": "0.73.16",
+ "@react-native/gradle-plugin": "0.73.4",
+ "@react-native/js-polyfills": "0.73.1",
+ "@react-native/normalize-colors": "0.73.2",
+ "@react-native/virtualized-lists": "0.73.4",
"abort-controller": "^3.0.0",
"anser": "^1.4.9",
"ansi-regex": "^5.0.0",
"base64-js": "^1.5.1",
+ "chalk": "^4.0.0",
"deprecated-react-native-prop-types": "^5.0.0",
"event-target-shim": "^5.0.1",
"flow-enums-runtime": "^0.0.6",
@@ -9443,8 +9335,8 @@
"jest-environment-node": "^29.6.3",
"jsc-android": "^250231.0.0",
"memoize-one": "^5.0.0",
- "metro-runtime": "^0.80.0",
- "metro-source-map": "^0.80.0",
+ "metro-runtime": "^0.80.3",
+ "metro-source-map": "^0.80.3",
"mkdirp": "^0.5.1",
"nullthrows": "^1.1.1",
"pretty-format": "^26.5.2",
@@ -9525,6 +9417,35 @@
"react": "^16.0.0 || ^17.0.0 || ^18.0.0"
}
},
+ "node_modules/react-test-renderer": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.2.0.tgz",
+ "integrity": "sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA==",
+ "dev": true,
+ "dependencies": {
+ "react-is": "^18.2.0",
+ "react-shallow-renderer": "^16.15.0",
+ "scheduler": "^0.23.0"
+ },
+ "peerDependencies": {
+ "react": "^18.2.0"
+ }
+ },
+ "node_modules/react-test-renderer/node_modules/react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ },
+ "node_modules/react-test-renderer/node_modules/scheduler": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "dev": true,
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
"node_modules/read-cache": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@@ -10590,9 +10511,9 @@
}
},
"node_modules/terser": {
- "version": "5.26.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz",
- "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==",
+ "version": "5.27.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz",
+ "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
@@ -12106,15 +12027,6 @@
"@babel/helper-remap-async-to-generator": "^7.22.20"
}
},
- "@babel/plugin-transform-block-scoped-functions": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz",
- "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.22.5"
- }
- },
"@babel/plugin-transform-block-scoping": {
"version": "7.15.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz",
@@ -12213,15 +12125,6 @@
"@babel/helper-plugin-utils": "^7.14.5"
}
},
- "@babel/plugin-transform-member-expression-literals": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz",
- "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.22.5"
- }
- },
"@babel/plugin-transform-modules-commonjs": {
"version": "7.23.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz",
@@ -12252,16 +12155,6 @@
"@babel/helper-plugin-utils": "^7.14.5"
}
},
- "@babel/plugin-transform-object-super": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz",
- "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-replace-supers": "^7.22.20"
- }
- },
"@babel/plugin-transform-parameters": {
"version": "7.23.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz",
@@ -12293,15 +12186,6 @@
"@babel/plugin-syntax-private-property-in-object": "^7.14.5"
}
},
- "@babel/plugin-transform-property-literals": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz",
- "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.22.5"
- }
- },
"@babel/plugin-transform-react-display-name": {
"version": "7.15.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.15.1.tgz",
@@ -12457,15 +12341,15 @@
}
},
"@babel/register": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz",
- "integrity": "sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==",
+ "version": "7.23.7",
+ "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.23.7.tgz",
+ "integrity": "sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==",
"dev": true,
"requires": {
"clone-deep": "^4.0.1",
"find-cache-dir": "^2.0.0",
"make-dir": "^2.1.0",
- "pirates": "^4.0.5",
+ "pirates": "^4.0.6",
"source-map-support": "^0.5.16"
}
},
@@ -13048,20 +12932,20 @@
}
},
"@react-native-community/cli": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-12.3.0.tgz",
- "integrity": "sha512-XeQohi2E+S2+MMSz97QcEZ/bWpi8sfKiQg35XuYeJkc32Til2g0b97jRpn0/+fV0BInHoG1CQYWwHA7opMsrHg==",
- "dev": true,
- "requires": {
- "@react-native-community/cli-clean": "12.3.0",
- "@react-native-community/cli-config": "12.3.0",
- "@react-native-community/cli-debugger-ui": "12.3.0",
- "@react-native-community/cli-doctor": "12.3.0",
- "@react-native-community/cli-hermes": "12.3.0",
- "@react-native-community/cli-plugin-metro": "12.3.0",
- "@react-native-community/cli-server-api": "12.3.0",
- "@react-native-community/cli-tools": "12.3.0",
- "@react-native-community/cli-types": "12.3.0",
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-12.3.2.tgz",
+ "integrity": "sha512-WgoUWwLDcf/G1Su2COUUVs3RzAwnV/vUTdISSpAUGgSc57mPabaAoUctKTnfYEhCnE3j02k3VtaVPwCAFRO3TQ==",
+ "dev": true,
+ "requires": {
+ "@react-native-community/cli-clean": "12.3.2",
+ "@react-native-community/cli-config": "12.3.2",
+ "@react-native-community/cli-debugger-ui": "12.3.2",
+ "@react-native-community/cli-doctor": "12.3.2",
+ "@react-native-community/cli-hermes": "12.3.2",
+ "@react-native-community/cli-plugin-metro": "12.3.2",
+ "@react-native-community/cli-server-api": "12.3.2",
+ "@react-native-community/cli-tools": "12.3.2",
+ "@react-native-community/cli-types": "12.3.2",
"chalk": "^4.1.2",
"commander": "^9.4.1",
"deepmerge": "^4.3.0",
@@ -13074,23 +12958,23 @@
}
},
"@react-native-community/cli-clean": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-12.3.0.tgz",
- "integrity": "sha512-iAgLCOWYRGh9ukr+eVQnhkV/OqN3V2EGd/in33Ggn/Mj4uO6+oUncXFwB+yjlyaUNz6FfjudhIz09yYGSF+9sg==",
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-12.3.2.tgz",
+ "integrity": "sha512-90k2hCX0ddSFPT7EN7h5SZj0XZPXP0+y/++v262hssoey3nhurwF57NGWN0XAR0o9BSW7+mBfeInfabzDraO6A==",
"dev": true,
"requires": {
- "@react-native-community/cli-tools": "12.3.0",
+ "@react-native-community/cli-tools": "12.3.2",
"chalk": "^4.1.2",
"execa": "^5.0.0"
}
},
"@react-native-community/cli-config": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-12.3.0.tgz",
- "integrity": "sha512-BrTn5ndFD9uOxO8kxBQ32EpbtOvAsQExGPI7SokdI4Zlve70FziLtTq91LTlTUgMq1InVZn/jJb3VIDk6BTInQ==",
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-12.3.2.tgz",
+ "integrity": "sha512-UUCzDjQgvAVL/57rL7eOuFUhd+d+6qfM7V8uOegQFeFEmSmvUUDLYoXpBa5vAK9JgQtSqMBJ1Shmwao+/oElxQ==",
"dev": true,
"requires": {
- "@react-native-community/cli-tools": "12.3.0",
+ "@react-native-community/cli-tools": "12.3.2",
"chalk": "^4.1.2",
"cosmiconfig": "^5.1.0",
"deepmerge": "^4.3.0",
@@ -13099,24 +12983,24 @@
}
},
"@react-native-community/cli-debugger-ui": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-12.3.0.tgz",
- "integrity": "sha512-w3b0iwjQlk47GhZWHaeTG8kKH09NCMUJO729xSdMBXE8rlbm4kHpKbxQY9qKb6NlfWSJN4noGY+FkNZS2rRwnQ==",
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-12.3.2.tgz",
+ "integrity": "sha512-nSWQUL+51J682DlfcC1bjkUbQbGvHCC25jpqTwHIjmmVjYCX1uHuhPSqQKgPNdvtfOkrkACxczd7kVMmetxY2Q==",
"dev": true,
"requires": {
"serve-static": "^1.13.1"
}
},
"@react-native-community/cli-doctor": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-12.3.0.tgz",
- "integrity": "sha512-BPCwNNesoQMkKsxB08Ayy6URgGQ8Kndv6mMhIvJSNdST3J1+x3ehBHXzG9B9Vfi+DrTKRb8lmEl/b/7VkDlPkA==",
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-12.3.2.tgz",
+ "integrity": "sha512-GrAabdY4qtBX49knHFvEAdLtCjkmndjTeqhYO6BhsbAeKOtspcLT/0WRgdLIaKODRa61ADNB3K5Zm4dU0QrZOg==",
"dev": true,
"requires": {
- "@react-native-community/cli-config": "12.3.0",
- "@react-native-community/cli-platform-android": "12.3.0",
- "@react-native-community/cli-platform-ios": "12.3.0",
- "@react-native-community/cli-tools": "12.3.0",
+ "@react-native-community/cli-config": "12.3.2",
+ "@react-native-community/cli-platform-android": "12.3.2",
+ "@react-native-community/cli-platform-ios": "12.3.2",
+ "@react-native-community/cli-tools": "12.3.2",
"chalk": "^4.1.2",
"command-exists": "^1.2.8",
"deepmerge": "^4.3.0",
@@ -13133,25 +13017,25 @@
}
},
"@react-native-community/cli-hermes": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-12.3.0.tgz",
- "integrity": "sha512-G6FxpeZBO4AimKZwtWR3dpXRqTvsmEqlIkkxgwthdzn3LbVjDVIXKpVYU9PkR5cnT+KuAUxO0WwthrJ6Nmrrlg==",
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-12.3.2.tgz",
+ "integrity": "sha512-SL6F9O8ghp4ESBFH2YAPLtIN39jdnvGBKnK4FGKpDCjtB3DnUmDsGFlH46S+GGt5M6VzfG2eeKEOKf3pZ6jUzA==",
"dev": true,
"requires": {
- "@react-native-community/cli-platform-android": "12.3.0",
- "@react-native-community/cli-tools": "12.3.0",
+ "@react-native-community/cli-platform-android": "12.3.2",
+ "@react-native-community/cli-tools": "12.3.2",
"chalk": "^4.1.2",
"hermes-profile-transformer": "^0.0.6",
"ip": "^1.1.5"
}
},
"@react-native-community/cli-platform-android": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-12.3.0.tgz",
- "integrity": "sha512-VU1NZw63+GLU2TnyQ919bEMThpHQ/oMFju9MCfrd3pyPJz4Sn+vc3NfnTDUVA5Z5yfLijFOkHIHr4vo/C9bjnw==",
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-12.3.2.tgz",
+ "integrity": "sha512-MZ5nO8yi/N+Fj2i9BJcJ9C/ez+9/Ir7lQt49DWRo9YDmzye66mYLr/P2l/qxsixllbbDi7BXrlLpxaEhMrDopg==",
"dev": true,
"requires": {
- "@react-native-community/cli-tools": "12.3.0",
+ "@react-native-community/cli-tools": "12.3.2",
"chalk": "^4.1.2",
"execa": "^5.0.0",
"fast-xml-parser": "^4.2.4",
@@ -13160,12 +13044,12 @@
}
},
"@react-native-community/cli-platform-ios": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-12.3.0.tgz",
- "integrity": "sha512-H95Sgt3wT7L8V75V0syFJDtv4YgqK5zbu69ko4yrXGv8dv2EBi6qZP0VMmkqXDamoPm9/U7tDTdbcf26ctnLfg==",
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-12.3.2.tgz",
+ "integrity": "sha512-OcWEAbkev1IL6SUiQnM6DQdsvfsKZhRZtoBNSj9MfdmwotVZSOEZJ+IjZ1FR9ChvMWayO9ns/o8LgoQxr1ZXeg==",
"dev": true,
"requires": {
- "@react-native-community/cli-tools": "12.3.0",
+ "@react-native-community/cli-tools": "12.3.2",
"chalk": "^4.1.2",
"execa": "^5.0.0",
"fast-xml-parser": "^4.0.12",
@@ -13174,19 +13058,19 @@
}
},
"@react-native-community/cli-plugin-metro": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-12.3.0.tgz",
- "integrity": "sha512-tYNHIYnNmxrBcsqbE2dAnLMzlKI3Cp1p1xUgTrNaOMsGPDN1epzNfa34n6Nps3iwKElSL7Js91CzYNqgTalucA==",
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-12.3.2.tgz",
+ "integrity": "sha512-FpFBwu+d2E7KRhYPTkKvQsWb2/JKsJv+t1tcqgQkn+oByhp+qGyXBobFB8/R3yYvRRDCSDhS+atWTJzk9TjM8g==",
"dev": true
},
"@react-native-community/cli-server-api": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-12.3.0.tgz",
- "integrity": "sha512-Rode8NrdyByC+lBKHHn+/W8Zu0c+DajJvLmOWbe2WY/ECvnwcd9MHHbu92hlT2EQaJ9LbLhGrSbQE3cQy9EOCw==",
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-12.3.2.tgz",
+ "integrity": "sha512-iwa7EO9XFA/OjI5pPLLpI/6mFVqv8L73kNck3CNOJIUCCveGXBKK0VMyOkXaf/BYnihgQrXh+x5cxbDbggr7+Q==",
"dev": true,
"requires": {
- "@react-native-community/cli-debugger-ui": "12.3.0",
- "@react-native-community/cli-tools": "12.3.0",
+ "@react-native-community/cli-debugger-ui": "12.3.2",
+ "@react-native-community/cli-tools": "12.3.2",
"compression": "^1.7.1",
"connect": "^3.6.5",
"errorhandler": "^1.5.1",
@@ -13197,9 +13081,9 @@
}
},
"@react-native-community/cli-tools": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-12.3.0.tgz",
- "integrity": "sha512-2GafnCr8D88VdClwnm9KZfkEb+lzVoFdr/7ybqhdeYM0Vnt/tr2N+fM1EQzwI1DpzXiBzTYemw8GjRq+Utcz2Q==",
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-12.3.2.tgz",
+ "integrity": "sha512-nDH7vuEicHI2TI0jac/DjT3fr977iWXRdgVAqPZFFczlbs7A8GQvEdGnZ1G8dqRUmg+kptw0e4hwczAOG89JzQ==",
"dev": true,
"requires": {
"appdirsjs": "^1.2.4",
@@ -13254,9 +13138,9 @@
}
},
"@react-native-community/cli-types": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-12.3.0.tgz",
- "integrity": "sha512-MgOkmrXH4zsGxhte4YqKL7d+N8ZNEd3w1wo56MZlhu5WabwCJh87wYpU5T8vyfujFLYOFuFK5jjlcbs8F4/WDw==",
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-12.3.2.tgz",
+ "integrity": "sha512-9D0UEFqLW8JmS16mjHJxUJWX8E+zJddrHILSH8AJHZ0NNHv4u2DXKdb0wFLMobFxGNxPT+VSOjc60fGvXzWHog==",
"dev": true,
"requires": {
"joi": "^17.2.1"
@@ -13269,18 +13153,18 @@
"dev": true
},
"@react-native/babel-plugin-codegen": {
- "version": "0.74.0",
- "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.0.tgz",
- "integrity": "sha512-xAM/eVSb5LBkKue3bDZgt76bdsGGzKeF/iEzUNbDTwRQrB3Q5GoceGNM/zVlF+z1xGAkr3jhL+ZyITZGSoIlgw==",
+ "version": "0.73.4",
+ "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.73.4.tgz",
+ "integrity": "sha512-XzRd8MJGo4Zc5KsphDHBYJzS1ryOHg8I2gOZDAUCGcwLFhdyGu1zBNDJYH2GFyDrInn9TzAbRIf3d4O+eltXQQ==",
"dev": true,
"requires": {
- "@react-native/codegen": "*"
+ "@react-native/codegen": "0.73.3"
}
},
"@react-native/babel-preset": {
- "version": "0.74.0",
- "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.74.0.tgz",
- "integrity": "sha512-k+1aaYQeLn+GBmGA5Qs3NKI8uzhLvRRMML+pB/+43ZL6DvCklbuJ5KO5oqRRpF3KZ2t/VKUqqSichpXfFrXGjg==",
+ "version": "0.73.21",
+ "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.73.21.tgz",
+ "integrity": "sha512-WlFttNnySKQMeujN09fRmrdWqh46QyJluM5jdtDNrkl/2Hx6N4XeDUGhABvConeK95OidVO7sFFf7sNebVXogA==",
"dev": true,
"requires": {
"@babel/core": "^7.20.0",
@@ -13322,7 +13206,7 @@
"@babel/plugin-transform-typescript": "^7.5.0",
"@babel/plugin-transform-unicode-regex": "^7.0.0",
"@babel/template": "^7.0.0",
- "@react-native/babel-plugin-codegen": "*",
+ "@react-native/babel-plugin-codegen": "0.73.4",
"babel-plugin-transform-flow-enums": "^0.0.2",
"react-refresh": "^0.14.0"
},
@@ -13336,9 +13220,9 @@
}
},
"@react-native/codegen": {
- "version": "0.73.2",
- "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.73.2.tgz",
- "integrity": "sha512-lfy8S7umhE3QLQG5ViC4wg5N1Z+E6RnaeIw8w1voroQsXXGPB72IBozh8dAHR3+ceTxIU0KX3A8OpJI8e1+HpQ==",
+ "version": "0.73.3",
+ "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.73.3.tgz",
+ "integrity": "sha512-sxslCAAb8kM06vGy9Jyh4TtvjhcP36k/rvj2QE2Jdhdm61KvfafCATSIsOfc0QvnduWFcpXUPvAVyYwuv7PYDg==",
"dev": true,
"requires": {
"@babel/parser": "^7.20.0",
@@ -13351,20 +13235,20 @@
}
},
"@react-native/community-cli-plugin": {
- "version": "0.73.11",
- "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.73.11.tgz",
- "integrity": "sha512-s0bprwljKS1Al8wOKathDDmRyF+70CcNE2G/aqZ7+L0NoOE0Uxxx/5P2BxlM2Mfht7O33B4SeMNiPdE/FqIubQ==",
+ "version": "0.73.16",
+ "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.73.16.tgz",
+ "integrity": "sha512-eNH3v3qJJF6f0n/Dck90qfC9gVOR4coAXMTdYECO33GfgjTi+73vf/SBqlXw9HICH/RNZYGPM3wca4FRF7TYeQ==",
"dev": true,
"requires": {
- "@react-native-community/cli-server-api": "12.3.0",
- "@react-native-community/cli-tools": "12.3.0",
- "@react-native/dev-middleware": "^0.73.6",
- "@react-native/metro-babel-transformer": "^0.73.12",
+ "@react-native-community/cli-server-api": "12.3.2",
+ "@react-native-community/cli-tools": "12.3.2",
+ "@react-native/dev-middleware": "0.73.7",
+ "@react-native/metro-babel-transformer": "0.73.15",
"chalk": "^4.0.0",
"execa": "^5.1.1",
- "metro": "^0.80.0",
- "metro-config": "^0.80.0",
- "metro-core": "^0.80.0",
+ "metro": "^0.80.3",
+ "metro-config": "^0.80.3",
+ "metro-core": "^0.80.3",
"node-fetch": "^2.2.0",
"readline": "^1.3.0"
}
@@ -13376,13 +13260,13 @@
"dev": true
},
"@react-native/dev-middleware": {
- "version": "0.73.6",
- "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.73.6.tgz",
- "integrity": "sha512-9SD7gIso+hO1Jy1Y/Glbd+JWQwyH7Xjnwebtkxdm5TMB51LQPjaGtMcwEigbIZyAtvoaDGmhWmudwbKpDlS+gA==",
+ "version": "0.73.7",
+ "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.73.7.tgz",
+ "integrity": "sha512-BZXpn+qKp/dNdr4+TkZxXDttfx8YobDh8MFHsMk9usouLm22pKgFIPkGBV0X8Do4LBkFNPGtrnsKkWk/yuUXKg==",
"dev": true,
"requires": {
"@isaacs/ttlcache": "^1.4.1",
- "@react-native/debugger-frontend": "^0.73.3",
+ "@react-native/debugger-frontend": "0.73.3",
"chrome-launcher": "^0.15.2",
"chromium-edge-launcher": "^1.0.0",
"connect": "^3.6.5",
@@ -13433,14 +13317,13 @@
"dev": true
},
"@react-native/metro-babel-transformer": {
- "version": "0.73.12",
- "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.73.12.tgz",
- "integrity": "sha512-VmxN5aaoOprzDzUR+8c3XYhG0FoMOO6n0ToylCW6EeZCuf5RTY7HWVOhacabGoB1mHrWzJ0wWEsqX+eD4iFxoA==",
+ "version": "0.73.15",
+ "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.73.15.tgz",
+ "integrity": "sha512-LlkSGaXCz+xdxc9819plmpsl4P4gZndoFtpjN3GMBIu6f7TBV0GVbyJAU4GE8fuAWPVSVL5ArOcdkWKSbI1klw==",
"dev": true,
"requires": {
"@babel/core": "^7.20.0",
- "@react-native/babel-preset": "*",
- "babel-preset-fbjs": "^3.4.0",
+ "@react-native/babel-preset": "0.73.21",
"hermes-parser": "0.15.0",
"nullthrows": "^1.1.1"
}
@@ -13451,20 +13334,10 @@
"integrity": "sha512-bRBcb2T+I88aG74LMVHaKms2p/T8aQd8+BZ7LuuzXlRfog1bMWWn/C5i0HVuvW4RPtXQYgIlGiXVDy9Ir1So/w==",
"dev": true
},
- "@react-native/virtualized-lists": {
- "version": "0.72.8",
- "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.72.8.tgz",
- "integrity": "sha512-J3Q4Bkuo99k7mu+jPS9gSUSgq+lLRSI/+ahXNwV92XgJ/8UgOTxu2LPwhJnBk/sQKxq7E8WkZBnBiozukQMqrw==",
- "dev": true,
- "requires": {
- "invariant": "^2.2.4",
- "nullthrows": "^1.1.1"
- }
- },
"@sideway/address": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz",
- "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==",
+ "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,
"requires": {
"@hapi/hoek": "^9.0.0"
@@ -13640,9 +13513,9 @@
"dev": true
},
"@types/react": {
- "version": "18.2.45",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.45.tgz",
- "integrity": "sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==",
+ "version": "18.2.55",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.55.tgz",
+ "integrity": "sha512-Y2Tz5P4yz23brwm2d7jNon39qoAtMMmalOQv6+fEFt1mT+FcM3D841wDpoUvFXhaYenuROCy3FZYqdTjM7qVyA==",
"dev": true,
"requires": {
"@types/prop-types": "*",
@@ -13651,12 +13524,20 @@
}
},
"@types/react-native": {
- "version": "0.72.8",
- "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.72.8.tgz",
- "integrity": "sha512-St6xA7+EoHN5mEYfdWnfYt0e8u6k2FR0P9s2arYgakQGFgU1f9FlPrIEcj0X24pLCF5c5i3WVuLCUdiCYHmOoA==",
+ "version": "0.73.0",
+ "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.73.0.tgz",
+ "integrity": "sha512-6ZRPQrYM72qYKGWidEttRe6M5DZBEV5F+MHMHqd4TTYx0tfkcdrUFGdef6CCxY0jXU7wldvd/zA/b0A/kTeJmA==",
+ "dev": true,
+ "requires": {
+ "react-native": "*"
+ }
+ },
+ "@types/react-test-renderer": {
+ "version": "18.0.7",
+ "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-18.0.7.tgz",
+ "integrity": "sha512-1+ANPOWc6rB3IkSnElhjv6VLlKg2dSv/OWClUyZimbLsQyBn8Js9Vtdsi3UICJ2rIQ3k2la06dkB+C92QfhKmg==",
"dev": true,
"requires": {
- "@react-native/virtualized-lists": "^0.72.4",
"@types/react": "*"
}
},
@@ -14145,12 +14026,6 @@
"@babel/helper-define-polyfill-provider": "^0.2.2"
}
},
- "babel-plugin-syntax-trailing-function-commas": {
- "version": "7.0.0-beta.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz",
- "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==",
- "dev": true
- },
"babel-plugin-transform-flow-enums": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz",
@@ -14180,41 +14055,6 @@
"@babel/plugin-syntax-top-level-await": "^7.8.3"
}
},
- "babel-preset-fbjs": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz",
- "integrity": "sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==",
- "dev": true,
- "requires": {
- "@babel/plugin-proposal-class-properties": "^7.0.0",
- "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
- "@babel/plugin-syntax-class-properties": "^7.0.0",
- "@babel/plugin-syntax-flow": "^7.0.0",
- "@babel/plugin-syntax-jsx": "^7.0.0",
- "@babel/plugin-syntax-object-rest-spread": "^7.0.0",
- "@babel/plugin-transform-arrow-functions": "^7.0.0",
- "@babel/plugin-transform-block-scoped-functions": "^7.0.0",
- "@babel/plugin-transform-block-scoping": "^7.0.0",
- "@babel/plugin-transform-classes": "^7.0.0",
- "@babel/plugin-transform-computed-properties": "^7.0.0",
- "@babel/plugin-transform-destructuring": "^7.0.0",
- "@babel/plugin-transform-flow-strip-types": "^7.0.0",
- "@babel/plugin-transform-for-of": "^7.0.0",
- "@babel/plugin-transform-function-name": "^7.0.0",
- "@babel/plugin-transform-literals": "^7.0.0",
- "@babel/plugin-transform-member-expression-literals": "^7.0.0",
- "@babel/plugin-transform-modules-commonjs": "^7.0.0",
- "@babel/plugin-transform-object-super": "^7.0.0",
- "@babel/plugin-transform-parameters": "^7.0.0",
- "@babel/plugin-transform-property-literals": "^7.0.0",
- "@babel/plugin-transform-react-display-name": "^7.0.0",
- "@babel/plugin-transform-react-jsx": "^7.0.0",
- "@babel/plugin-transform-shorthand-properties": "^7.0.0",
- "@babel/plugin-transform-spread": "^7.0.0",
- "@babel/plugin-transform-template-literals": "^7.0.0",
- "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0"
- }
- },
"babel-preset-jest": {
"version": "29.6.3",
"resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
@@ -14879,9 +14719,9 @@
"dev": true
},
"envinfo": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz",
- "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==",
+ "version": "7.11.1",
+ "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.1.tgz",
+ "integrity": "sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==",
"dev": true
},
"error-ex": {
@@ -15373,9 +15213,9 @@
"dev": true
},
"fast-xml-parser": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.2.tgz",
- "integrity": "sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.4.tgz",
+ "integrity": "sha512-utnwm92SyozgA3hhH2I8qldf2lBqm6qHOICawRNRFu1qMe3+oqr+GcXjGqTmXTMGE5T4eC03kr/rlh5C1IRdZA==",
"dev": true,
"requires": {
"strnum": "^1.0.5"
@@ -15806,9 +15646,9 @@
"dev": true
},
"image-size": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz",
- "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz",
+ "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==",
"dev": true,
"requires": {
"queue": "6.0.2"
@@ -16907,14 +16747,14 @@
"integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q=="
},
"joi": {
- "version": "17.11.0",
- "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz",
- "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==",
+ "version": "17.12.1",
+ "resolved": "https://registry.npmjs.org/joi/-/joi-17.12.1.tgz",
+ "integrity": "sha512-vtxmq+Lsc5SlfqotnfVjlViWfOL9nt/avKNbKYizwf6gsCfq9NYY/ceYRMFD8XDdrjJ9abJyScWmhmIiy+XRtQ==",
"dev": true,
"requires": {
- "@hapi/hoek": "^9.0.0",
- "@hapi/topo": "^5.0.0",
- "@sideway/address": "^4.1.3",
+ "@hapi/hoek": "^9.3.0",
+ "@hapi/topo": "^5.1.0",
+ "@sideway/address": "^4.1.5",
"@sideway/formula": "^3.0.1",
"@sideway/pinpoint": "^2.0.0"
}
@@ -17302,9 +17142,9 @@
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
},
"metro": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.2.tgz",
- "integrity": "sha512-iavBVpr3v4YD2XWUsL7peq/lUquX5KTH+dKc5Rw13XnDHDfoRgcMOmQjSn3xcFxP0R9P4uABML8YegAekoqjQg==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.5.tgz",
+ "integrity": "sha512-OE/CGbOgbi8BlTN1QqJgKOBaC27dS0JBQw473JcivrpgVnqIsluROA7AavEaTVUrB9wPUZvoNVDROn5uiM2jfw==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
@@ -17322,25 +17162,24 @@
"denodeify": "^1.2.1",
"error-stack-parser": "^2.0.6",
"graceful-fs": "^4.2.4",
- "hermes-parser": "0.18.0",
+ "hermes-parser": "0.18.2",
"image-size": "^1.0.2",
"invariant": "^2.2.4",
"jest-worker": "^29.6.3",
"jsc-safe-url": "^0.2.2",
"lodash.throttle": "^4.1.1",
- "metro-babel-transformer": "0.80.2",
- "metro-cache": "0.80.2",
- "metro-cache-key": "0.80.2",
- "metro-config": "0.80.2",
- "metro-core": "0.80.2",
- "metro-file-map": "0.80.2",
- "metro-minify-terser": "0.80.2",
- "metro-resolver": "0.80.2",
- "metro-runtime": "0.80.2",
- "metro-source-map": "0.80.2",
- "metro-symbolicate": "0.80.2",
- "metro-transform-plugins": "0.80.2",
- "metro-transform-worker": "0.80.2",
+ "metro-babel-transformer": "0.80.5",
+ "metro-cache": "0.80.5",
+ "metro-cache-key": "0.80.5",
+ "metro-config": "0.80.5",
+ "metro-core": "0.80.5",
+ "metro-file-map": "0.80.5",
+ "metro-resolver": "0.80.5",
+ "metro-runtime": "0.80.5",
+ "metro-source-map": "0.80.5",
+ "metro-symbolicate": "0.80.5",
+ "metro-transform-plugins": "0.80.5",
+ "metro-transform-worker": "0.80.5",
"mime-types": "^2.1.27",
"node-fetch": "^2.2.0",
"nullthrows": "^1.1.1",
@@ -17369,18 +17208,18 @@
}
},
"hermes-estree": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.18.0.tgz",
- "integrity": "sha512-WaIudIVKo5QWFqz1ta53HqSDuVxYST/MUuP9X7dqUpbHse3E2gzJq/7hEtgx84hh2XSNWN1AhYho3ThOA85uCA==",
+ "version": "0.18.2",
+ "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.18.2.tgz",
+ "integrity": "sha512-KoLsoWXJ5o81nit1wSyEZnWUGy9cBna9iYMZBR7skKh7okYAYKqQ9/OczwpMHn/cH0hKDyblulGsJ7FknlfVxQ==",
"dev": true
},
"hermes-parser": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.18.0.tgz",
- "integrity": "sha512-DIIM6vsy30BU5hNkOXh6MR2r4ZAxVhbfyTnmfo/rqUf3KySlNWn9fWiOcpuGAdDN2o5sdPCpu6cep3a23d1Klw==",
+ "version": "0.18.2",
+ "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.18.2.tgz",
+ "integrity": "sha512-1eQfvib+VPpgBZ2zYKQhpuOjw1tH+Emuib6QmjkJWJMhyjM8xnXMvA+76o9LhF0zOAJDZgPfQhg43cyXEyl5Ew==",
"dev": true,
"requires": {
- "hermes-estree": "0.18.0"
+ "hermes-estree": "0.18.2"
}
},
"ms": {
@@ -17407,78 +17246,78 @@
}
},
"metro-babel-transformer": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.2.tgz",
- "integrity": "sha512-QR+HCD5rswoLVMZOU95dda0XmrT3dDnm+pq+ql/Q6RCDBY0BUS7Z1l1mN9jq/MRBy2QOW+IKKgSMTIC9Khtbpw==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.5.tgz",
+ "integrity": "sha512-sxH6hcWCorhTbk4kaShCWsadzu99WBL4Nvq4m/sDTbp32//iGuxtAnUK+ZV+6IEygr2u9Z0/4XoZ8Sbcl71MpA==",
"dev": true,
"requires": {
"@babel/core": "^7.20.0",
- "hermes-parser": "0.18.0",
+ "hermes-parser": "0.18.2",
"nullthrows": "^1.1.1"
},
"dependencies": {
"hermes-estree": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.18.0.tgz",
- "integrity": "sha512-WaIudIVKo5QWFqz1ta53HqSDuVxYST/MUuP9X7dqUpbHse3E2gzJq/7hEtgx84hh2XSNWN1AhYho3ThOA85uCA==",
+ "version": "0.18.2",
+ "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.18.2.tgz",
+ "integrity": "sha512-KoLsoWXJ5o81nit1wSyEZnWUGy9cBna9iYMZBR7skKh7okYAYKqQ9/OczwpMHn/cH0hKDyblulGsJ7FknlfVxQ==",
"dev": true
},
"hermes-parser": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.18.0.tgz",
- "integrity": "sha512-DIIM6vsy30BU5hNkOXh6MR2r4ZAxVhbfyTnmfo/rqUf3KySlNWn9fWiOcpuGAdDN2o5sdPCpu6cep3a23d1Klw==",
+ "version": "0.18.2",
+ "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.18.2.tgz",
+ "integrity": "sha512-1eQfvib+VPpgBZ2zYKQhpuOjw1tH+Emuib6QmjkJWJMhyjM8xnXMvA+76o9LhF0zOAJDZgPfQhg43cyXEyl5Ew==",
"dev": true,
"requires": {
- "hermes-estree": "0.18.0"
+ "hermes-estree": "0.18.2"
}
}
}
},
"metro-cache": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.2.tgz",
- "integrity": "sha512-ELz2GcXLDyT5w4awaL+6bb3X6Eg6RS5CcQ5CcXAgCCFqBwRuTBHkztK1rLyp7IX76Xb2wlz7781T9H4CCtxD5w==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.5.tgz",
+ "integrity": "sha512-2u+dQ4PZwmC7eZo9uMBNhQQMig9f+w4QWBZwXCdVy/RYOHM0eObgGdMEOwODo73uxie82T9lWzxr3aZOZ+Nqtw==",
"dev": true,
"requires": {
- "metro-core": "0.80.2",
+ "metro-core": "0.80.5",
"rimraf": "^3.0.2"
}
},
"metro-cache-key": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.2.tgz",
- "integrity": "sha512-ldNEFiq9COBZSZOBgyHvil4dtIWZsJahbByGDh6f5jPrkj9cBih1rGeo9ix+MLl7aVh2cA3hHQjyponQsfXcnQ==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.5.tgz",
+ "integrity": "sha512-fr3QLZUarsB3tRbVcmr34kCBsTHk0Sh9JXGvBY/w3b2lbre+Lq5gtgLyFElHPecGF7o4z1eK9r3ubxtScHWcbA==",
"dev": true
},
"metro-config": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.2.tgz",
- "integrity": "sha512-3U7S3uakSwUyXp3E0V2mhLT+82EzIeBuOFav4mKNIq9dl9AW62x5o5e8q3bmyHwDWg+RZ8jIBkAURKrhS/eALw==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.5.tgz",
+ "integrity": "sha512-elqo/lwvF+VjZ1OPyvmW/9hSiGlmcqu+rQvDKw5F5WMX48ZC+ySTD1WcaD7e97pkgAlJHVYqZ98FCjRAYOAFRQ==",
"dev": true,
"requires": {
"connect": "^3.6.5",
"cosmiconfig": "^5.0.5",
"jest-validate": "^29.6.3",
- "metro": "0.80.2",
- "metro-cache": "0.80.2",
- "metro-core": "0.80.2",
- "metro-runtime": "0.80.2"
+ "metro": "0.80.5",
+ "metro-cache": "0.80.5",
+ "metro-core": "0.80.5",
+ "metro-runtime": "0.80.5"
}
},
"metro-core": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.2.tgz",
- "integrity": "sha512-RL1iHZlR+3tvrJIBE/W6YlwW7OH1ckcgCCEr7bxEqUTNRiraK2zTv2jJ4b7VS/Xftdzvungk8ls3FNem5MFrIw==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.5.tgz",
+ "integrity": "sha512-vkLuaBhnZxTVpaZO8ZJVEHzjaqSXpOdpAiztSZ+NDaYM6jEFgle3/XIbLW91jTSf2+T8Pj5yB1G7KuOX+BcVwg==",
"dev": true,
"requires": {
"lodash.throttle": "^4.1.1",
- "metro-resolver": "0.80.2"
+ "metro-resolver": "0.80.5"
}
},
"metro-file-map": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.2.tgz",
- "integrity": "sha512-/GiFdE5nhtvviDPANH9j3SE6VG4j2DaaKia+0gzyVYwP+6Kjc2oADj6FCGFOXDdCizqeqASUSgEsp+06D8+tXw==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.5.tgz",
+ "integrity": "sha512-bKCvJ05drjq6QhQxnDUt3I8x7bTcHo3IIKVobEr14BK++nmxFGn/BmFLRzVBlghM6an3gqwpNEYxS5qNc+VKcg==",
"dev": true,
"requires": {
"anymatch": "^3.0.3",
@@ -17512,9 +17351,9 @@
}
},
"metro-minify-terser": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.2.tgz",
- "integrity": "sha512-+0lN1uJsFKke+RaZVZE3vxD8vVuGDiH/roiUzTIktof2rBtBmXJAx+TYjy1SZQN48eHot9CaAXZ6MfiSVJiPew==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.5.tgz",
+ "integrity": "sha512-S7oZLLcab6YXUT6jYFX/ZDMN7Fq6xBGGAG8liMFU1UljX6cTcEC2u+UIafYgCLrdVexp/+ClxrIetVPZ5LtL/g==",
"dev": true,
"requires": {
"terser": "^5.15.0"
@@ -17569,32 +17408,32 @@
}
},
"metro-resolver": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.2.tgz",
- "integrity": "sha512-0OmCsmlcBQWkJXx0YoYRTS+ArRT888WcgmgjwoJVQm+xdMRKuu67ihyF8EOpeVgOzbeo0IxVjkNmbJWOfficjA==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.5.tgz",
+ "integrity": "sha512-haJ/Hveio3zv/Fr4eXVdKzjUeHHDogYok7OpRqPSXGhTXisNXB+sLN7CpcUrCddFRUDLnVaqQOYwhYsFndgUwA==",
"dev": true
},
"metro-runtime": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.2.tgz",
- "integrity": "sha512-ruIlSEVnmJGbLnZIGf8/ra+qoD1Knft0R+5laUpp/KEGkD+GEr4XgP+5j5Uuq3v36qDLFTj1KXfQP5JVoeM8zw==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.5.tgz",
+ "integrity": "sha512-L0syTWJUdWzfUmKgkScr6fSBVTh6QDr8eKEkRtn40OBd8LPagrJGySBboWSgbyn9eIb4ayW3Y347HxgXBSAjmg==",
"dev": true,
"requires": {
"@babel/runtime": "^7.0.0"
}
},
"metro-source-map": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.2.tgz",
- "integrity": "sha512-fM6RwYCJrwfqVk8Z1ApvJ3+Zz7fso38AszmAXqFDXziOC0AfmMCv/W9FosE9BY+y5QJ7YcvW0RIYLQhpCn+V9w==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.5.tgz",
+ "integrity": "sha512-DwSF4l03mKPNqCtyQ6K23I43qzU1BViAXnuH81eYWdHglP+sDlPpY+/7rUahXEo6qXEHXfAJgVoo1sirbXbmsQ==",
"dev": true,
"requires": {
"@babel/traverse": "^7.20.0",
"@babel/types": "^7.20.0",
"invariant": "^2.2.4",
- "metro-symbolicate": "0.80.2",
+ "metro-symbolicate": "0.80.5",
"nullthrows": "^1.1.1",
- "ob1": "0.80.2",
+ "ob1": "0.80.5",
"source-map": "^0.5.6",
"vlq": "^1.0.0"
},
@@ -17608,13 +17447,13 @@
}
},
"metro-symbolicate": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.2.tgz",
- "integrity": "sha512-G/gJbl/XRGlgjAQSmZ5Rtym//7MSaE2Bj+28BBVqF6fse5y2kw9J7weNDfLjRfKDNaMUoC4mjc6TYjW7gPuGng==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.5.tgz",
+ "integrity": "sha512-IsM4mTYvmo9JvIqwEkCZ5+YeDVPST78Q17ZgljfLdHLSpIivOHp9oVoiwQ/YGbLx0xRHRIS/tKiXueWBnj3UWA==",
"dev": true,
"requires": {
"invariant": "^2.2.4",
- "metro-source-map": "0.80.2",
+ "metro-source-map": "0.80.5",
"nullthrows": "^1.1.1",
"source-map": "^0.5.6",
"through2": "^2.0.1",
@@ -17630,9 +17469,9 @@
}
},
"metro-transform-plugins": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.2.tgz",
- "integrity": "sha512-edokA2lPM3zzJRa55ze2mzVHCUNeJs4CPPrntdVOnf2WkEO/snV4RIgQDVkxFgPc8nI4iLB8cwZZQvdvH3v8gA==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.5.tgz",
+ "integrity": "sha512-7IdlTqK/k5+qE3RvIU5QdCJUPk4tHWEqgVuYZu8exeW+s6qOJ66hGIJjXY/P7ccucqF+D4nsbAAW5unkoUdS6g==",
"dev": true,
"requires": {
"@babel/core": "^7.20.0",
@@ -17643,21 +17482,22 @@
}
},
"metro-transform-worker": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.2.tgz",
- "integrity": "sha512-QtAntH+8AA06PDpXqM6/N42cvgw665TXp9mKKwrYL/d4lVemNNJte0CJ71KO4MmYQ5UvSDonwbTlOXJOnR8m6w==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.5.tgz",
+ "integrity": "sha512-Q1oM7hfP+RBgAtzRFBDjPhArELUJF8iRCZ8OidqCpYzQJVGuJZ7InSnIf3hn1JyqiUQwv2f1LXBO78i2rAjzyA==",
"dev": true,
"requires": {
"@babel/core": "^7.20.0",
"@babel/generator": "^7.20.0",
"@babel/parser": "^7.20.0",
"@babel/types": "^7.20.0",
- "metro": "0.80.2",
- "metro-babel-transformer": "0.80.2",
- "metro-cache": "0.80.2",
- "metro-cache-key": "0.80.2",
- "metro-source-map": "0.80.2",
- "metro-transform-plugins": "0.80.2",
+ "metro": "0.80.5",
+ "metro-babel-transformer": "0.80.5",
+ "metro-cache": "0.80.5",
+ "metro-cache-key": "0.80.5",
+ "metro-minify-terser": "0.80.5",
+ "metro-source-map": "0.80.5",
+ "metro-transform-plugins": "0.80.5",
"nullthrows": "^1.1.1"
}
},
@@ -17828,9 +17668,9 @@
"dev": true
},
"ob1": {
- "version": "0.80.2",
- "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.2.tgz",
- "integrity": "sha512-dF78RVxoZjzSTfOWiZh6iaRtTrKyMhTiDtr/nDJOIN5hKj0pNjY7z/NueYCUH4EDgFmabv4r+WEihSu+qCI7Mg==",
+ "version": "0.80.5",
+ "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.5.tgz",
+ "integrity": "sha512-zYDMnnNrFi/1Tqh0vo3PE4p97Tpl9/4MP2k2ECvkbLOZzQuAYZJLTUYVLZb7hJhbhjT+JJxAwBGS8iu5hCSd1w==",
"dev": true
},
"object-assign": {
@@ -18334,13 +18174,12 @@
"dev": true
},
"react": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz",
- "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==",
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
"dev": true,
"requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
+ "loose-envify": "^1.1.0"
}
},
"react-devtools-core": {
@@ -18360,26 +18199,27 @@
"dev": true
},
"react-native": {
- "version": "0.73.1",
- "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.73.1.tgz",
- "integrity": "sha512-nLl9O2yKRh1nMXwsk4SUiD0ddd19RqlKgNU9AU8bTK/zD2xwnVOG56YK1/22SN67niWyoeG83vVg1eTk+S6ReA==",
+ "version": "0.73.4",
+ "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.73.4.tgz",
+ "integrity": "sha512-VtS+Yr6OOTIuJGDECIYWzNU8QpJjASQYvMtfa/Hvm/2/h5GdB6W9H9TOmh13x07Lj4AOhNMx3XSsz6TdrO4jIg==",
"dev": true,
"requires": {
"@jest/create-cache-key-function": "^29.6.3",
- "@react-native-community/cli": "12.3.0",
- "@react-native-community/cli-platform-android": "12.3.0",
- "@react-native-community/cli-platform-ios": "12.3.0",
- "@react-native/assets-registry": "^0.73.1",
- "@react-native/codegen": "^0.73.2",
- "@react-native/community-cli-plugin": "0.73.11",
- "@react-native/gradle-plugin": "^0.73.4",
- "@react-native/js-polyfills": "^0.73.1",
- "@react-native/normalize-colors": "^0.73.2",
- "@react-native/virtualized-lists": "^0.73.4",
+ "@react-native-community/cli": "12.3.2",
+ "@react-native-community/cli-platform-android": "12.3.2",
+ "@react-native-community/cli-platform-ios": "12.3.2",
+ "@react-native/assets-registry": "0.73.1",
+ "@react-native/codegen": "0.73.3",
+ "@react-native/community-cli-plugin": "0.73.16",
+ "@react-native/gradle-plugin": "0.73.4",
+ "@react-native/js-polyfills": "0.73.1",
+ "@react-native/normalize-colors": "0.73.2",
+ "@react-native/virtualized-lists": "0.73.4",
"abort-controller": "^3.0.0",
"anser": "^1.4.9",
"ansi-regex": "^5.0.0",
"base64-js": "^1.5.1",
+ "chalk": "^4.0.0",
"deprecated-react-native-prop-types": "^5.0.0",
"event-target-shim": "^5.0.1",
"flow-enums-runtime": "^0.0.6",
@@ -18387,8 +18227,8 @@
"jest-environment-node": "^29.6.3",
"jsc-android": "^250231.0.0",
"memoize-one": "^5.0.0",
- "metro-runtime": "^0.80.0",
- "metro-source-map": "^0.80.0",
+ "metro-runtime": "^0.80.3",
+ "metro-source-map": "^0.80.3",
"mkdirp": "^0.5.1",
"nullthrows": "^1.1.1",
"pretty-format": "^26.5.2",
@@ -18447,6 +18287,34 @@
"react-is": "^16.12.0 || ^17.0.0 || ^18.0.0"
}
},
+ "react-test-renderer": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.2.0.tgz",
+ "integrity": "sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA==",
+ "dev": true,
+ "requires": {
+ "react-is": "^18.2.0",
+ "react-shallow-renderer": "^16.15.0",
+ "scheduler": "^0.23.0"
+ },
+ "dependencies": {
+ "react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ },
+ "scheduler": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.1.0"
+ }
+ }
+ }
+ },
"read-cache": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@@ -19274,9 +19142,9 @@
"dev": true
},
"terser": {
- "version": "5.26.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz",
- "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==",
+ "version": "5.27.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz",
+ "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==",
"dev": true,
"requires": {
"@jridgewell/source-map": "^0.3.3",
diff --git a/package.json b/package.json
index 54a174a..2a5303e 100644
--- a/package.json
+++ b/package.json
@@ -51,8 +51,9 @@
"devDependencies": {
"@babel/preset-typescript": "^7.23.3",
"@types/jest": "^29.5.11",
- "@types/react": "^18.2.45",
- "@types/react-native": "^0.72.8",
+ "@types/react": "^18.2.55",
+ "@types/react-native": "^0.73.0",
+ "@types/react-test-renderer": "^18.0.7",
"@types/tailwindcss": "^3.1.0",
"@typescript-eslint/eslint-plugin": "^6.15.0",
"@typescript-eslint/parser": "^6.15.0",
@@ -63,8 +64,9 @@
"jest": "^29.7.0",
"metro-react-native-babel-preset": "^0.66.2",
"prettier": "^3.1.1",
- "react": "^17.0.2",
- "react-native": "^0.73.1",
+ "react": "^18.2.0",
+ "react-native": "^0.73.4",
+ "react-test-renderer": "^18.2.0",
"ts-jest": "^29.1.1",
"typescript": "^5.3.3"
},
diff --git a/readme.md b/readme.md
index fcdd497..4b06d81 100644
--- a/readme.md
+++ b/readme.md
@@ -54,6 +54,7 @@ const MyComponent = () => (
- [RN-Only Additions](#rn-only-additions)
- [JIT-style Arbitrary Values](#jit-style-arbitrary-values)
- [VS Code Intellisense](#vs-code-intellisense)
+- [Memo-Busting](#memo-busting)
- [Migrating from previous versions](#migrating-from-previous-versions)
- [Prior Art](#prior-art)
@@ -241,15 +242,19 @@ you'll need to configure things slightly differently:
import { useDeviceContext, useAppColorScheme } from 'twrnc';
export default function App() {
- // 1️⃣ opt OUT of listening to DEVICE color scheme events
- useDeviceContext(tw, { withDeviceColorScheme: false });
-
- // 2️⃣ use the `useAppColorScheme` hook to get a reference to the current color
- // scheme, with some functions to modify it (triggering re-renders) when you need to
+ useDeviceContext(tw, {
+ // 1️⃣ opt OUT of listening to DEVICE color scheme events
+ observeDeviceColorSchemeChanges: false
+ // 2️⃣ and supply an initial color scheme
+ initialColorScheme: `light`, // 'light' | 'dark' | 'device'
+ });
+
+ // 3️⃣ use the `useAppColorScheme` hook anywhere to get a reference to the current
+ // colorscheme, with functions to modify it (triggering re-renders) when you need
const [colorScheme, toggleColorScheme, setColorScheme] = useAppColorScheme(tw);
return (
- {/* 3️⃣ use one of the setter functions, like `toggleColorScheme` in your app */}
+ {/* 4️⃣ use one of the setter functions, like `toggleColorScheme` in your app */}
Switch Color Scheme
@@ -257,10 +262,6 @@ export default function App() {
}
```
-`useAppColorScheme()` accepts an optional second argument of an _initial value for the
-color scheme._ If not supplied, it will be initialized to the current system setting at
-the time the function is called.
-
## Customizing Breakpoints
You can **customize the breakpoints** in the same way as a
@@ -453,6 +454,26 @@ for VS Code.
More detailed instructions, including how to add snippets, are available
[here](https://github.com/jaredh159/tailwind-react-native-classnames/discussions/124).
+## Memo Busting
+
+If you're using device-context prefixes (like `dark:`, and `md:`), _memoized_ components
+can cause problems by preventing re-renders when the color scheme or window size changes.
+You may not be memoizing explicitly yourself as many third-party librarys (like
+`react-navigation`) memoizes its own components.
+
+In order to help with this problem, `twrnc` exposes a `.memoBuster` property on the `tw`
+object. This string property is meant to passed as a `key` prop to break memoization
+boundaries. It is stable (preventing re-renders) until something in the device context
+changes, at which point it deterministically updates:
+
+```tsx
+
+```
+
+> This is not a perfect solution for **all** memoization issues. For caveats and more
+> context, see
+> [#112](https://github.com/jaredh159/tailwind-react-native-classnames/issues/112).
+
## Migrating from Previous Versions
See [migration-guide.md](/migration-guide.md).
diff --git a/src/__tests__/color-scheme.spec.tsx b/src/__tests__/color-scheme.spec.tsx
new file mode 100644
index 0000000..115180a
--- /dev/null
+++ b/src/__tests__/color-scheme.spec.tsx
@@ -0,0 +1,61 @@
+import renderer from 'react-test-renderer';
+import rn from 'react-native';
+import { describe, it, expect } from '@jest/globals';
+import React from 'react';
+import type { TailwindFn } from '../';
+import { create, useDeviceContext, useAppColorScheme } from '../';
+
+jest.mock(`react-native`, () => ({
+ Platform: { OS: `ios` },
+ useColorScheme: () => `light`,
+ useWindowDimensions: () => ({ width: 320, height: 640, fontScale: 1, scale: 2 }),
+}));
+
+const Test: React.FC<{ tw: TailwindFn; initial: 'light' | 'dark' | 'device' }> = ({
+ tw,
+ initial,
+}) => {
+ useDeviceContext(tw, {
+ observeDeviceColorSchemeChanges: false,
+ initialColorScheme: initial,
+ });
+ const [colorScheme] = useAppColorScheme(tw);
+ return (
+ <>
+ {String(colorScheme)}
+ {tw.prefixMatch(`dark`) ? `match:dark` : `no-match:dark`}
+ >
+ );
+};
+
+describe(`useAppColorScheme()`, () => {
+ it(`should initialize to ambient color scheme, if no initializer`, () => {
+ rn.useColorScheme = () => `dark`;
+
+ let component = renderer.create();
+ expect(component.toJSON()).toEqual([`dark`, `match:dark`]);
+
+ rn.useColorScheme = () => `light`;
+ component = renderer.create();
+ expect(component.toJSON()).toEqual([`light`, `no-match:dark`]);
+
+ rn.useColorScheme = () => null;
+ component = renderer.create();
+ expect(component.toJSON()).toEqual([`null`, `no-match:dark`]);
+
+ rn.useColorScheme = () => undefined;
+ component = renderer.create();
+ expect(component.toJSON()).toEqual([`undefined`, `no-match:dark`]);
+ });
+
+ it(`should initialize to explicitly passed color scheme when initializer provided`, () => {
+ rn.useColorScheme = () => `dark`;
+
+ let component = renderer.create();
+ expect(component.toJSON()).toEqual([`light`, `no-match:dark`]);
+
+ rn.useColorScheme = () => `light`;
+ component = renderer.create();
+ expect(component.toJSON()).toEqual([`dark`, `match:dark`]);
+ });
+});
diff --git a/src/__tests__/memo-buster.spec.tsx b/src/__tests__/memo-buster.spec.tsx
new file mode 100644
index 0000000..140d2a4
--- /dev/null
+++ b/src/__tests__/memo-buster.spec.tsx
@@ -0,0 +1,71 @@
+import TestRenderer from 'react-test-renderer';
+import { TouchableOpacity, Text } from 'react-native';
+import { describe, it, expect } from '@jest/globals';
+import React from 'react';
+import { create, useDeviceContext, useAppColorScheme } from '../';
+
+describe(`memo busting`, () => {
+ let tw = create();
+ beforeEach(() => (tw = create()));
+
+ const MemoComponent: React.FC = React.memo(() => (
+ <>{tw.prefixMatch(`dark`) ? `memo:match:dark` : `memo:no-match:dark`}>
+ ));
+
+ const Component: React.FC<{ initial: 'light' | 'dark' | 'device' }> = ({ initial }) => {
+ useDeviceContext(tw, {
+ observeDeviceColorSchemeChanges: false,
+ initialColorScheme: initial,
+ });
+ const [, toggleColorScheme] = useAppColorScheme(tw);
+ return (
+ <>
+ toggleColorScheme()}>
+ toggle scheme
+
+ {tw.prefixMatch(`dark`) ? `match:dark` : `no-match:dark`}
+
+
+ >
+ );
+ };
+
+ it(`breaks memoization properly, starting "light"`, () => {
+ const renderer = TestRenderer.create();
+ expect(assertArray(renderer.toJSON()).slice(1)).toEqual([
+ `no-match:dark`,
+ `memo:no-match:dark`,
+ `memo:no-match:dark`,
+ ]);
+ TestRenderer.act(() => {
+ renderer.root.findByType(TouchableOpacity).props.onPress();
+ });
+ expect(assertArray(renderer.toJSON()).slice(1)).toEqual([
+ `match:dark`,
+ `memo:no-match:dark`, // <-- memo not busted
+ `memo:match:dark`, // <-- memo busted
+ ]);
+ });
+
+ it(`breaks memoization properly, starting "dark"`, () => {
+ const renderer = TestRenderer.create();
+ expect(assertArray(renderer.toJSON()).slice(1)).toEqual([
+ `match:dark`,
+ `memo:match:dark`,
+ `memo:match:dark`,
+ ]);
+ TestRenderer.act(() => {
+ renderer.root.findByType(TouchableOpacity).props.onPress();
+ });
+ expect(assertArray(renderer.toJSON()).slice(1)).toEqual([
+ `no-match:dark`,
+ `memo:match:dark`, // <-- memo not busted
+ `memo:no-match:dark`, // <-- memo busted
+ ]);
+ });
+});
+
+function assertArray(value: T | T[]): T[] {
+ if (!Array.isArray(value)) throw new Error(`expected array, got ${value}`);
+ return value;
+}
diff --git a/src/create.ts b/src/create.ts
index e3e2a8b..6e1aa56 100644
--- a/src/create.ts
+++ b/src/create.ts
@@ -40,10 +40,10 @@ export function create(customConfig: TwConfig, platform: Platform): TailwindFn {
function deriveCacheGroup(): string {
return (
[
+ device.colorScheme === `dark` ? `dark` : false,
device.windowDimensions ? `w${device.windowDimensions.width}` : false,
device.windowDimensions ? `h${device.windowDimensions.height}` : false,
device.fontScale ? `fs${device.fontScale}` : false,
- device.colorScheme === `dark` ? `dark` : false,
device.pixelDensity === 2 ? `retina` : false,
]
.filter(Boolean)
@@ -51,12 +51,28 @@ export function create(customConfig: TwConfig, platform: Platform): TailwindFn {
);
}
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
+ const tailwindFn = (strings: TemplateStringsArray, ...values: (string | number)[]) => {
+ let str = ``;
+ strings.forEach((string, i) => {
+ str += string + (values[i] ?? ``);
+ });
+ return style(str);
+ };
+
const contextCaches: Record = {};
let cache = new Cache();
+ tailwindFn.memoBuster = ``;
configureCache();
+ // get back to cjs
+ // probably need to implement the check for if isset
+ // in order to not be a breaking change
+ // also, in this branch, add _unstableUpdateContext func
+
function configureCache(): void {
const cacheGroup = deriveCacheGroup();
+ tailwindFn.memoBuster = `twrnc-memobuster-key--${cacheGroup}`;
const existing = contextCaches[cacheGroup];
if (existing) {
cache = existing;
@@ -159,15 +175,6 @@ export function create(customConfig: TwConfig, platform: Platform): TailwindFn {
: undefined;
}
- // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
- const tailwindFn = (strings: TemplateStringsArray, ...values: (string | number)[]) => {
- let str = ``;
- strings.forEach((string, i) => {
- str += string + (values[i] ?? ``);
- });
- return style(str);
- };
-
tailwindFn.style = style;
tailwindFn.color = color;
@@ -204,6 +211,23 @@ export function create(customConfig: TwConfig, platform: Platform): TailwindFn {
configureCache();
};
+ tailwindFn.getColorScheme = () => device.colorScheme;
+
+ tailwindFn.updateDeviceContext = (
+ window: { width: number; height: number },
+ fontScale: number,
+ pixelDensity: 1 | 2,
+ colorScheme: RnColorScheme | 'skip',
+ ) => {
+ device.windowDimensions = window;
+ device.fontScale = fontScale;
+ device.pixelDensity = pixelDensity;
+ if (colorScheme !== `skip`) {
+ device.colorScheme = colorScheme;
+ }
+ configureCache();
+ };
+
return tailwindFn;
}
diff --git a/src/hooks.ts b/src/hooks.ts
index dc4b4fd..5e007ba 100644
--- a/src/hooks.ts
+++ b/src/hooks.ts
@@ -1,36 +1,41 @@
import { useState } from 'react';
-import { useColorScheme, useWindowDimensions, Appearance } from 'react-native';
+import { useColorScheme, useWindowDimensions } from 'react-native';
import type { TailwindFn, RnColorScheme } from './types';
-type Options = {
- withDeviceColorScheme: boolean;
+type AppOptions = {
+ observeDeviceColorSchemeChanges: false;
+ initialColorScheme: 'device' | 'light' | 'dark';
};
-export function useDeviceContext(
- tw: TailwindFn,
- opts: Options = { withDeviceColorScheme: true },
-): void {
+export function useDeviceContext(tw: TailwindFn, appOptions?: AppOptions): void {
+ const deviceColorScheme = useColorScheme();
+ useState(() => {
+ // (mis?)use `useState` initializer fn to initialize appColorScheme only ONCE
+ if (appOptions) {
+ const initial = appOptions.initialColorScheme;
+ tw.setColorScheme(initial === `device` ? deviceColorScheme : initial);
+ if (`withDeviceColorScheme` in appOptions) {
+ console.error(MIGRATION_ERR); // eslint-disable-line no-console
+ }
+ }
+ });
const window = useWindowDimensions();
- tw.setWindowDimensions(window);
- tw.setFontScale(window.fontScale);
- tw.setPixelDensity(window.scale === 1 ? 1 : 2);
- const colorScheme = useColorScheme();
- if (opts.withDeviceColorScheme) {
- tw.setColorScheme(colorScheme);
- }
+ tw.updateDeviceContext(
+ window,
+ window.fontScale,
+ window.scale === 1 ? 1 : 2,
+ appOptions ? `skip` : deviceColorScheme,
+ );
}
export function useAppColorScheme(
tw: TailwindFn,
- initialValue?: RnColorScheme,
): [
colorScheme: RnColorScheme,
toggleColorScheme: () => void,
setColorScheme: (colorScheme: RnColorScheme) => void,
] {
- const [colorScheme, setColorScheme] = useState(
- initialValue ?? Appearance.getColorScheme(),
- );
+ const [colorScheme, setColorScheme] = useState(tw.getColorScheme());
return [
colorScheme,
() => {
@@ -44,3 +49,5 @@ export function useAppColorScheme(
},
];
}
+
+const MIGRATION_ERR = `\`withDeviceColorScheme\` has been changed to \`observeDeviceColorSchemeChanges\` in twrnc@4.0.0 -- see migration-guide.md for more details`;
diff --git a/src/types.ts b/src/types.ts
index b474121..86be1a0 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -5,10 +5,39 @@ export interface TailwindFn {
style: (...inputs: ClassInput[]) => Style;
color: (color: string) => string | undefined;
prefixMatch: (...prefixes: string[]) => boolean;
+ memoBuster: string;
+
+ // NB: @see https://www.typescriptlang.org/tsconfig#stripInternal
+
+ /**
+ * @internal
+ */
setWindowDimensions: (dimensions: { width: number; height: number }) => unknown;
+ /**
+ * @internal
+ */
setFontScale: (fontScale: number) => unknown;
+ /**
+ * @internal
+ */
setPixelDensity: (pixelDensity: 1 | 2) => unknown;
+ /**
+ * @internal
+ */
setColorScheme: (colorScheme: RnColorScheme) => unknown;
+ /**
+ * @internal
+ */
+ getColorScheme: () => RnColorScheme;
+ /**
+ * @internal
+ */
+ updateDeviceContext: (
+ dimensions: { width: number; height: number },
+ fontScale: number,
+ pixelDensity: 1 | 2,
+ colorScheme: RnColorScheme | 'skip',
+ ) => unknown;
}
export type ClassInput =
diff --git a/tsconfig.json b/tsconfig.json
index 30fe818..18f9982 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -10,7 +10,9 @@
"lib": ["ES2019"],
"target": "ES2019",
"declaration": true,
- "moduleResolution": "node"
+ "moduleResolution": "node",
+ "jsx": "react",
+ "stripInternal": true
},
"exclude": ["./dist", "**/*.spec.ts"]
}