From 38eec73399893c4c73ccc84ad9fd04d3b947dd76 Mon Sep 17 00:00:00 2001 From: FleetAdmiralJakob Date: Sun, 19 Jul 2026 11:31:08 +0200 Subject: [PATCH 1/7] Upgrade Expo to SDK 57 and fix Android compatibility --- app.config.ts | 1 + package.json | 58 +- .../@react-native__gradle-plugin@0.86.0.patch | 13 + patches/README.md | 144 ++ ...ct-native-keyboard-controller@1.21.9.patch | 71 + pnpm-lock.yaml | 1446 ++++++++--------- pnpm-workspace.yaml | 6 +- src/lib/theme.ts | 6 +- 8 files changed, 955 insertions(+), 790 deletions(-) create mode 100644 patches/@react-native__gradle-plugin@0.86.0.patch create mode 100644 patches/react-native-keyboard-controller@1.21.9.patch diff --git a/app.config.ts b/app.config.ts index b4b3d262..df3981ae 100644 --- a/app.config.ts +++ b/app.config.ts @@ -75,6 +75,7 @@ const config: ExpoConfig = { }, plugins: [ "expo-router", + "expo-status-bar", "@clerk/expo", [ "expo-notifications", diff --git a/package.json b/package.json index 34722cad..3f916965 100644 --- a/package.json +++ b/package.json @@ -38,9 +38,9 @@ }, "dependencies": { "@ai-sdk/google-vertex": "^4.0.112", - "@clerk/expo": "^3.5.2", - "@expo/metro-runtime": "~56.0.15", - "@expo/ui": "~56.0.18", + "@clerk/expo": "^3.7.8", + "@expo/metro-runtime": "~57.0.6", + "@expo/ui": "~57.0.7", "@gilhrpenner/convex-files-control": "^0.5.3", "@gorhom/bottom-sheet": "^5.2.14", "@hugeicons/core-free-icons": "^4.1.1", @@ -52,42 +52,42 @@ "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "convex": "^1.41.0", - "expo": "~56.0.12", - "expo-application": "~56.0.3", - "expo-constants": "^56.0.18", - "expo-crypto": "^56.0.4", - "expo-dev-client": "~56.0.20", - "expo-device": "^56.0.4", - "expo-document-picker": "~56.0.4", - "expo-file-system": "~56.0.8", - "expo-font": "~56.0.7", - "expo-image-picker": "~56.0.18", - "expo-linear-gradient": "~56.0.4", - "expo-linking": "^56.0.14", - "expo-localization": "~56.0.6", - "expo-notifications": "~56.0.18", - "expo-router": "^56.2.11", - "expo-secure-store": "~56.0.4", - "expo-splash-screen": "~56.0.10", - "expo-status-bar": "~56.0.4", - "expo-system-ui": "~56.0.5", - "expo-updates": "~56.0.19", + "expo": "~57.0.7", + "expo-application": "~57.0.2", + "expo-constants": "^57.0.6", + "expo-crypto": "^57.0.1", + "expo-dev-client": "~57.0.7", + "expo-device": "^57.0.1", + "expo-document-picker": "~57.0.1", + "expo-file-system": "~57.0.1", + "expo-font": "~57.0.1", + "expo-image-picker": "~57.0.5", + "expo-linear-gradient": "~57.0.1", + "expo-linking": "^57.0.3", + "expo-localization": "~57.0.1", + "expo-notifications": "~57.0.6", + "expo-router": "^57.0.7", + "expo-secure-store": "~57.0.1", + "expo-splash-screen": "~57.0.4", + "expo-status-bar": "~57.0.1", + "expo-system-ui": "~57.0.1", + "expo-updates": "~57.0.8", "nativewind": "^4.2.3", "officeparser": "^6.1.0", "posthog-react-native": "^4.50.0", "react": "19.2.3", "react-dom": "19.2.3", - "react-native": "0.85.3", + "react-native": "0.86.0", "react-native-css-interop": "^0.2.3", - "react-native-gesture-handler": "^2.31.2", - "react-native-keyboard-controller": "1.21.6", + "react-native-gesture-handler": "^2.32.0", + "react-native-keyboard-controller": "1.21.9", "react-native-nitro-modules": "^0.35.10", "react-native-nitro-speech": "0.4.8", - "react-native-reanimated": "^4.3.1", + "react-native-reanimated": "^4.5.0", "react-native-safe-area-context": "^5.7.0", "react-native-screens": "^4.25.2", "react-native-svg": "^15.15.4", - "react-native-worklets": "0.8.3", + "react-native-worklets": "0.10.0", "tailwind-merge": "^3.5.0", "tailwindcss": "^3.4.1", "tailwindcss-animate": "^1.0.7", @@ -101,7 +101,7 @@ "@edge-runtime/vm": "^5.0.0", "@types/node": "^25.6.0", "@types/react": "~19.2.14", - "babel-preset-expo": "~56.0.10", + "babel-preset-expo": "~57.0.3", "convex-test": "^0.0.53", "eslint": "^10.3.0", "eslint-plugin-react-hooks": "^7.1.1", diff --git a/patches/@react-native__gradle-plugin@0.86.0.patch b/patches/@react-native__gradle-plugin@0.86.0.patch new file mode 100644 index 00000000..3afab856 --- /dev/null +++ b/patches/@react-native__gradle-plugin@0.86.0.patch @@ -0,0 +1,13 @@ +diff --git a/settings.gradle.kts b/settings.gradle.kts +index 14f1e9c2063ef10ca3f2ecbb2336b8a4aacfcc9c..74834849f556d5ce1f94e7154b5fd38161ac255a 100644 +--- a/settings.gradle.kts ++++ b/settings.gradle.kts +@@ -13,8 +13,6 @@ pluginManagement { + } + } + +-plugins { id("org.gradle.toolchains.foojay-resolver-convention").version("1.0.0") } +- + include( + ":react-native-gradle-plugin", + ":settings-plugin", diff --git a/patches/README.md b/patches/README.md index 7ee7b650..f19ea960 100644 --- a/patches/README.md +++ b/patches/README.md @@ -7,6 +7,150 @@ When a patched package is installed, pnpm applies the matching `.patch` file to the package contents in `node_modules`. Keep each patch documented here so future dependency updates can decide whether the patch is still needed. +## `@react-native__gradle-plugin@0.86.0.patch` + +### Why This Patch Exists + +Expo SDK 57 upgrades React Native from 0.85 to 0.86. The React Native 0.86 +Gradle plugin applies `org.gradle.toolchains.foojay-resolver-convention` from +its Kotlin `settings.gradle.kts` so Gradle can provision a matching JDK. + +On Windows, Gradle 9.3.1 can miscompile that settings script before plugin +resolution and report `Unresolved reference 'plugins'` and `Unresolved +reference 'id'`. The failure reproduces when the React Native Gradle plugin is +built by itself, before Dayova's Android project or native modules are +configured. The same Windows failure shape is recorded in +[gradle/gradle#36323](https://github.com/gradle/gradle/issues/36323). + +Dayova already requires JDK 17 for Android development and EAS Android build +images provide the required JDK, so automatic Foojay toolchain provisioning is +not needed for this project. + +### What The Patch Changes + +The patch removes only the Foojay settings plugin block from +`@react-native/gradle-plugin/settings.gradle.kts`. It does not change React +Native's application Gradle plugin, settings plugin, autolinking, codegen, or +native compilation behavior. + +Developers must keep a compatible JDK configured through `JAVA_HOME`; for SDK +57 Android development in this repo, use JDK 17. + +### How To Verify + +After installing dependencies, run a clean Android build on Windows: + +```powershell +pnpm install +cd android +.\gradlew.bat clean :app:assembleDebug +``` + +Expected result: Gradle configures `com.facebook.react.settings`, Expo +autolinking, and the app's native modules without failing in React Native's +`settings.gradle.kts`. + +Then run the normal project checks: + +```sh +pnpm check +pnpm test +npx expo-doctor +``` + +### How To Update Or Remove + +Recheck the patch whenever Expo changes the React Native 0.86 patch version or +upgrades React Native. Remove it when the upstream Gradle/React Native +combination configures successfully on Windows without the patch. + +Removal checklist: + +1. Delete `patches/@react-native__gradle-plugin@0.86.0.patch`. +2. Remove its entry from `patchedDependencies` in `pnpm-workspace.yaml`. +3. Run `pnpm install`. +4. Run the clean Android build and normal checks above on Windows. + +If the workaround is still required for a new React Native Gradle plugin +version, regenerate it with: + +```sh +pnpm patch @react-native/gradle-plugin@ +# Remove only the Foojay `plugins` block from settings.gradle.kts. +pnpm patch-commit "" +``` + +## `react-native-keyboard-controller@1.21.9.patch` + +### Why This Patch Exists + +Expo SDK 57's recommended `react-native-keyboard-controller` version supports +React Native 0.86, but opening a React Native `Modal` on Android logs an +unhandled Fabric soft exception: + +```text +Fabric View [-1] does not have SurfaceId associated with it +``` + +`ModalAttachedWatcher` installs a keyboard callback on the Android dialog's +decor view. `FocusedInputObserver` then asks React Native for the surface ID of +that native decor view, which is not part of a Fabric surface. The warning was +reproduced on a Pixel 9 running Android 16 whenever Dayova opened its create +type bottom modal. The modal remained visible, but the observer initialized +with an invalid surface ID. + +### What The Patch Changes + +`KeyboardAnimationCallback` now accepts an explicit surface ID and passes it to +`FocusedInputObserver`. The normal non-modal path keeps the package's existing +surface lookup. For a modal, `ModalAttachedWatcher` supplies the surface ID from +the Fabric `topShow` event that caused the callback to be installed, rather than +trying to infer a surface from the dialog's native window hierarchy. + +The patch changes only Android surface-ID plumbing. It does not alter keyboard +animation, focused-input tracking, modal layout, or iOS behavior. + +### How To Verify + +Build and install the Android debug app, clear Logcat, and open a Dayova bottom +modal such as the create-type picker: + +```powershell +cd android +.\gradlew.bat :app:assembleDebug +adb install -r app\build\outputs\apk\debug\app-debug.apk +adb logcat -c +# Open the modal on the device. +adb logcat -d | Select-String 'UIManagerHelper|Fabric View' +``` + +Expected result: the modal opens normally and Logcat contains no +`UIManagerHelper` surface-ID soft exception. Also focus an input and confirm +that keyboard avoidance still works. + +### How To Update Or Remove + +Recheck this patch whenever `react-native-keyboard-controller` is upgraded. +Remove it when the package resolves modal keyboard events against a +React-managed surface, or otherwise avoids querying a surface ID from the +dialog decor view. + +Removal checklist: + +1. Delete `patches/react-native-keyboard-controller@1.21.9.patch`. +2. Remove its entry from `patchedDependencies` in `pnpm-workspace.yaml`. +3. Run `pnpm install`. +4. Rebuild Android and repeat the modal Logcat verification above. + +If the workaround is still required for a new package version, regenerate it +with: + +```sh +pnpm patch react-native-keyboard-controller@ +# Pass the modal show event's surface ID into the callback and observer. +pnpm patch-commit "" +``` + ## `nativewind@4.2.3.patch` ### Why This Patch Exists diff --git a/patches/react-native-keyboard-controller@1.21.9.patch b/patches/react-native-keyboard-controller@1.21.9.patch new file mode 100644 index 00000000..db1cccc7 --- /dev/null +++ b/patches/react-native-keyboard-controller@1.21.9.patch @@ -0,0 +1,71 @@ +diff --git a/android/src/main/java/com/reactnativekeyboardcontroller/listeners/FocusedInputObserver.kt b/android/src/main/java/com/reactnativekeyboardcontroller/listeners/FocusedInputObserver.kt +index 4de762dae05587ab8e6562fd583e8ec35d8aafda..02494863733af4f42c6a843672ad6bbea1b5bb51 100644 +--- a/android/src/main/java/com/reactnativekeyboardcontroller/listeners/FocusedInputObserver.kt ++++ b/android/src/main/java/com/reactnativekeyboardcontroller/listeners/FocusedInputObserver.kt +@@ -7,7 +7,6 @@ import android.view.ViewTreeObserver.OnGlobalFocusChangeListener + import android.widget.EditText + import com.facebook.react.bridge.Arguments + import com.facebook.react.uimanager.ThemedReactContext +-import com.facebook.react.uimanager.UIManagerHelper + import com.facebook.react.views.view.ReactViewGroup + import com.reactnativekeyboardcontroller.events.FocusedInputLayoutChangedEvent + import com.reactnativekeyboardcontroller.events.FocusedInputLayoutChangedEventData +@@ -41,10 +40,8 @@ class FocusedInputObserver( + val view: View, + private val eventPropagationView: ReactViewGroup, + private val context: ThemedReactContext?, ++ private val surfaceId: Int, + ) { +- // constructor variables +- private val surfaceId = UIManagerHelper.getSurfaceId(view) +- + // state variables + private var lastFocusedInput: EditText? = null + private var lastEventDispatched: FocusedInputLayoutChangedEventData = noFocusedInputEvent +diff --git a/android/src/main/java/com/reactnativekeyboardcontroller/listeners/KeyboardAnimationCallback.kt b/android/src/main/java/com/reactnativekeyboardcontroller/listeners/KeyboardAnimationCallback.kt +index ef37c24dbd82b8cf70bf09fe349a6f15f0408296..0a3bd8b929dcc0585c67e77d93752d48069484a6 100644 +--- a/android/src/main/java/com/reactnativekeyboardcontroller/listeners/KeyboardAnimationCallback.kt ++++ b/android/src/main/java/com/reactnativekeyboardcontroller/listeners/KeyboardAnimationCallback.kt +@@ -58,11 +58,10 @@ class KeyboardAnimationCallback( + val view: View, + val context: ThemedReactContext?, + private val config: KeyboardAnimationCallbackConfig, ++ private val surfaceId: Int = UIManagerHelper.getSurfaceId(eventPropagationView), + ) : WindowInsetsAnimationCompat.Callback(config.dispatchMode), + OnApplyWindowInsetsListener, + Suspendable { +- private val surfaceId = UIManagerHelper.getSurfaceId(eventPropagationView) +- + // state variables + private var persistentKeyboardHeight = 0.0 + private var prevKeyboardHeight = 0.0 +@@ -126,7 +125,13 @@ class KeyboardAnimationCallback( + " same WindowInsetsCompat.Type values" + } + +- layoutObserver = FocusedInputObserver(view = view, eventPropagationView = eventPropagationView, context = context) ++ layoutObserver = ++ FocusedInputObserver( ++ view = view, ++ eventPropagationView = eventPropagationView, ++ context = context, ++ surfaceId = surfaceId, ++ ) + view.viewTreeObserver.addOnGlobalFocusChangeListener(focusListener) + } + +diff --git a/android/src/main/java/com/reactnativekeyboardcontroller/modal/ModalAttachedWatcher.kt b/android/src/main/java/com/reactnativekeyboardcontroller/modal/ModalAttachedWatcher.kt +index a00689bbf20c95fb690b5f7d061881fbd0fbc056..de0b4e53a5b4184b3b55a104ef67e8d74d0ae3d9 100644 +--- a/android/src/main/java/com/reactnativekeyboardcontroller/modal/ModalAttachedWatcher.kt ++++ b/android/src/main/java/com/reactnativekeyboardcontroller/modal/ModalAttachedWatcher.kt +@@ -60,6 +60,10 @@ class ModalAttachedWatcher( + eventPropagationView = view, + context = reactContext, + config = config, ++ // The dialog decor view is not Fabric-managed. Reuse the surface that ++ // emitted the modal show event instead of trying to infer it from the ++ // modal window hierarchy. ++ surfaceId = event.surfaceId, + ) + + rootView.addView(eventView) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2c81f0ba..bd549b46 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,12 +5,18 @@ settings: excludeLinksFromLockfile: false patchedDependencies: + '@react-native/gradle-plugin@0.86.0': + hash: c4be299b024e0521f7718edfd55a4375b38c856911b0ac83ea7ec59939555ed0 + path: patches/@react-native__gradle-plugin@0.86.0.patch nativewind@4.2.3: hash: c2045c72c9abacb9347d92d0e80f014cb462e8ea3af0d1b237b7ea467ce26449 path: patches/nativewind@4.2.3.patch oxc-parser@0.130.0: hash: 94ef07f41312654af2c6505f501f15ebb2e6f7f959449d6ed08c7dfdec525a58 path: patches/oxc-parser@0.130.0.patch + react-native-keyboard-controller@1.21.9: + hash: 1cd17f55cdd7d16ec356e3827388305c05115f1ecd38a234cd1d0e1e05d66f73 + path: patches/react-native-keyboard-controller@1.21.9.patch importers: @@ -20,32 +26,32 @@ importers: specifier: ^4.0.112 version: 4.0.118(zod@4.4.2) '@clerk/expo': - specifier: ^3.5.2 - version: 3.5.2(@types/react@19.2.14)(bs58@6.0.0)(expo-constants@56.0.18)(expo-crypto@56.0.4(expo@56.0.12))(expo-secure-store@56.0.4(expo@56.0.12))(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3)(zod@4.4.2) + specifier: ^3.7.8 + version: 3.7.8(@types/react@19.2.14)(bs58@6.0.0)(expo-constants@57.0.6)(expo-crypto@57.0.1(expo@57.0.7))(expo-secure-store@57.0.1(expo@57.0.7))(expo@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3)(zod@4.4.2) '@expo/metro-runtime': - specifier: ~56.0.15 - version: 56.0.15(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + specifier: ~57.0.6 + version: 57.0.6(expo@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) '@expo/ui': - specifier: ~56.0.18 - version: 56.0.18(@babel/core@7.29.0)(@types/react@19.2.14)(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + specifier: ~57.0.7 + version: 57.0.7(@babel/core@7.29.0)(@types/react@19.2.14)(expo@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) '@gilhrpenner/convex-files-control': specifier: ^0.5.3 - version: 0.5.3(@standard-schema/spec@1.1.0)(convex@1.41.0(@clerk/react@6.10.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(react@19.2.3)(typescript@6.0.3)(zod@4.4.2) + version: 0.5.3(@standard-schema/spec@1.1.0)(convex@1.41.0(@clerk/react@6.12.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(react@19.2.3)(typescript@6.0.3)(zod@4.4.2) '@gorhom/bottom-sheet': specifier: ^5.2.14 - version: 5.2.14(@types/react@19.2.14)(react-native-gesture-handler@2.31.2(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + version: 5.2.14(@types/react@19.2.14)(react-native-gesture-handler@2.32.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-reanimated@4.5.0(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) '@hugeicons/core-free-icons': specifier: ^4.1.1 version: 4.1.1 '@hugeicons/react-native': specifier: ^1.0.13 - version: 1.0.13(react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + version: 1.0.13(react-native-svg@15.15.4(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) '@rn-primitives/portal': specifier: ^1.4.0 - version: 1.4.0(@types/react@19.2.14)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + version: 1.4.0(@types/react@19.2.14)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) '@rn-primitives/slot': specifier: ^1.4.0 - version: 1.4.0(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + version: 1.4.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) '@t3-oss/env-core': specifier: ^0.13.11 version: 0.13.11(typescript@6.0.3)(zod@4.4.2) @@ -60,76 +66,76 @@ importers: version: 2.1.1 convex: specifier: ^1.41.0 - version: 1.41.0(@clerk/react@6.10.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) + version: 1.41.0(@clerk/react@6.12.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) expo: - specifier: ~56.0.12 - version: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + specifier: ~57.0.7 + version: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) expo-application: - specifier: ~56.0.3 - version: 56.0.3(expo@56.0.12) + specifier: ~57.0.2 + version: 57.0.2(expo@57.0.7) expo-constants: - specifier: ^56.0.18 - version: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) + specifier: ^57.0.6 + version: 57.0.6(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) expo-crypto: - specifier: ^56.0.4 - version: 56.0.4(expo@56.0.12) + specifier: ^57.0.1 + version: 57.0.1(expo@57.0.7) expo-dev-client: - specifier: ~56.0.20 - version: 56.0.20(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) + specifier: ~57.0.7 + version: 57.0.7(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) expo-device: - specifier: ^56.0.4 - version: 56.0.4(expo@56.0.12) + specifier: ^57.0.1 + version: 57.0.1(expo@57.0.7) expo-document-picker: - specifier: ~56.0.4 - version: 56.0.4(expo@56.0.12) + specifier: ~57.0.1 + version: 57.0.1(expo@57.0.7) expo-file-system: - specifier: ~56.0.8 - version: 56.0.8(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) + specifier: ~57.0.1 + version: 57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) expo-font: - specifier: ~56.0.7 - version: 56.0.7(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + specifier: ~57.0.1 + version: 57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) expo-image-picker: - specifier: ~56.0.18 - version: 56.0.18(expo@56.0.12) + specifier: ~57.0.5 + version: 57.0.5(expo@57.0.7) expo-linear-gradient: - specifier: ~56.0.4 - version: 56.0.4(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + specifier: ~57.0.1 + version: 57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) expo-linking: - specifier: ^56.0.14 - version: 56.0.14(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + specifier: ^57.0.3 + version: 57.0.3(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) expo-localization: - specifier: ~56.0.6 - version: 56.0.6(expo@56.0.12)(react@19.2.3) + specifier: ~57.0.1 + version: 57.0.1(expo@57.0.7)(react@19.2.3) expo-notifications: - specifier: ~56.0.18 - version: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + specifier: ~57.0.6 + version: 57.0.6(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) expo-router: - specifier: ^56.2.11 - version: 56.2.11(b3885dfdbc0bd246424088dea0719f34) + specifier: ^57.0.7 + version: 57.0.7(5993d0f0b9c2956fadb365268fdfb956) expo-secure-store: - specifier: ~56.0.4 - version: 56.0.4(expo@56.0.12) + specifier: ~57.0.1 + version: 57.0.1(expo@57.0.7) expo-splash-screen: - specifier: ~56.0.10 - version: 56.0.10(expo@56.0.12)(typescript@6.0.3) + specifier: ~57.0.4 + version: 57.0.4(expo@57.0.7)(typescript@6.0.3) expo-status-bar: - specifier: ~56.0.4 - version: 56.0.4(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + specifier: ~57.0.1 + version: 57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) expo-system-ui: - specifier: ~56.0.5 - version: 56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) + specifier: ~57.0.1 + version: 57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) expo-updates: - specifier: ~56.0.19 - version: 56.0.19(expo-dev-client@56.0.20(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)))(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + specifier: ~57.0.8 + version: 57.0.8(expo-dev-client@57.0.7(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)))(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) nativewind: specifier: ^4.2.3 - version: 4.2.3(patch_hash=c2045c72c9abacb9347d92d0e80f014cb462e8ea3af0d1b237b7ea467ce26449)(react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-safe-area-context@5.7.0(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(tailwindcss@3.4.1) + version: 4.2.3(patch_hash=c2045c72c9abacb9347d92d0e80f014cb462e8ea3af0d1b237b7ea467ce26449)(react-native-reanimated@4.5.0(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-safe-area-context@5.7.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(tailwindcss@3.4.1) officeparser: specifier: ^6.1.0 version: 6.1.1 posthog-react-native: specifier: ^4.50.0 - version: 4.50.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)))(expo-application@56.0.3(expo@56.0.12))(expo-device@56.0.4(expo@56.0.12))(expo-file-system@56.0.8(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)))(expo-localization@56.0.6(expo@56.0.12)(react@19.2.3))(react-native-safe-area-context@5.7.0(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)) + version: 4.50.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)))(expo-application@57.0.2(expo@57.0.7))(expo-device@57.0.1(expo@57.0.7))(expo-file-system@57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)))(expo-localization@57.0.1(expo@57.0.7)(react@19.2.3))(react-native-safe-area-context@5.7.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)) react: specifier: 19.2.3 version: 19.2.3 @@ -137,38 +143,38 @@ importers: specifier: 19.2.3 version: 19.2.3(react@19.2.3) react-native: - specifier: 0.85.3 - version: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + specifier: 0.86.0 + version: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) react-native-css-interop: specifier: ^0.2.3 - version: 0.2.3(react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-safe-area-context@5.7.0(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(tailwindcss@3.4.1) + version: 0.2.3(react-native-reanimated@4.5.0(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-safe-area-context@5.7.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(tailwindcss@3.4.1) react-native-gesture-handler: - specifier: ^2.31.2 - version: 2.31.2(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + specifier: ^2.32.0 + version: 2.32.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react-native-keyboard-controller: - specifier: 1.21.6 - version: 1.21.6(react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + specifier: 1.21.9 + version: 1.21.9(patch_hash=1cd17f55cdd7d16ec356e3827388305c05115f1ecd38a234cd1d0e1e05d66f73)(react-native-reanimated@4.5.0(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react-native-nitro-modules: specifier: ^0.35.10 - version: 0.35.10(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + version: 0.35.10(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react-native-nitro-speech: specifier: 0.4.8 - version: 0.4.8(react-native-nitro-modules@0.35.10(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + version: 0.4.8(react-native-nitro-modules@0.35.10(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react-native-reanimated: - specifier: ^4.3.1 - version: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + specifier: ^4.5.0 + version: 4.5.0(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react-native-safe-area-context: specifier: ^5.7.0 - version: 5.7.0(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + version: 5.7.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react-native-screens: specifier: ^4.25.2 - version: 4.25.2(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + version: 4.25.2(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react-native-svg: specifier: ^15.15.4 - version: 15.15.4(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + version: 15.15.4(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react-native-worklets: - specifier: 0.8.3 - version: 0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + specifier: 0.10.0 + version: 0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) tailwind-merge: specifier: ^3.5.0 version: 3.5.0 @@ -193,7 +199,7 @@ importers: version: 2.4.14 '@convex-dev/eslint-plugin': specifier: ^2.0.0 - version: 2.0.0(convex@1.41.0(@clerk/react@6.10.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + version: 2.0.0(convex@1.41.0(@clerk/react@6.12.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) '@edge-runtime/vm': specifier: ^5.0.0 version: 5.0.0 @@ -204,11 +210,11 @@ importers: specifier: ~19.2.14 version: 19.2.14 babel-preset-expo: - specifier: ~56.0.10 - version: 56.0.10(@babel/core@7.29.0)(@babel/runtime@7.29.2)(expo@56.0.12)(react-refresh@0.14.2) + specifier: ~57.0.3 + version: 57.0.3(@babel/core@7.29.0)(@babel/runtime@7.29.2)(expo@57.0.7)(react-refresh@0.14.2) convex-test: specifier: ^0.0.53 - version: 0.0.53(convex@1.41.0(@clerk/react@6.10.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)) + version: 0.0.53(convex@1.41.0(@clerk/react@6.12.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)) eslint: specifier: ^10.3.0 version: 10.3.0(jiti@2.7.0) @@ -226,7 +232,7 @@ importers: version: 1.2.2 react-native-svg-transformer: specifier: ^1.5.3 - version: 1.5.3(react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(typescript@6.0.3) + version: 1.5.3(react-native-svg@15.15.4(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(typescript@6.0.3) typescript: specifier: ~6.0.3 version: 6.0.3 @@ -893,16 +899,16 @@ packages: '@borewit/text-codec@0.2.2': resolution: {integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==} - '@clerk/clerk-js@6.20.0': - resolution: {integrity: sha512-Bdcqkq+IzbpYxoAt6jDfapS4I+lPvYl3VOrp31A+c/X44DhQyRwfNszg2d1wf59+pxngxJwElDvGNmiOqln9fA==} + '@clerk/clerk-js@6.25.5': + resolution: {integrity: sha512-RcMZLAj3nKJd4cVGdPFGmUjaLN4JlY1eLrQOmnP9z8Z7vX8Y3YXhIpD/M2KHvh4N5UNpArkjYOOzsIfUqfn/HA==} engines: {node: '>=20.9.0'} - '@clerk/expo@3.5.2': - resolution: {integrity: sha512-fOC32iEKTqTtMmXKjRZDnUw8vQkHeO+UBJE7XtePu1lcX5wV1SYQWrStXO8ZrhPfnLj/1DwRzd/o/iZ02p4H/w==} + '@clerk/expo@3.7.8': + resolution: {integrity: sha512-kfMlD/myFLcmbKUOHcekx7EFSuoUFbLmLgqQKMZFE6dwRXu2etsKoAV622c4j0Nbgubf+qwJId8eoS4vikRNGw==} engines: {node: '>=20.9.0'} peerDependencies: '@clerk/expo-passkeys': '>=0.0.6' - expo: '>=53 <57' + expo: '>=53 <58' expo-apple-authentication: '>=7.0.0' expo-auth-session: '>=5' expo-constants: '>=12' @@ -933,15 +939,15 @@ packages: react-dom: optional: true - '@clerk/react@6.10.4': - resolution: {integrity: sha512-KGZVd4XK+ocYTYphuJwrq7GTRXVz5Pl5E2BhM2E+xx21t/mSOrSS8m2xAHdOzIbekSXnhjPAwhJW2belFjRpcg==} + '@clerk/react@6.12.5': + resolution: {integrity: sha512-sPO67Ikeh+r9Mu0jEinEHlkmzYf0VSCGHNIf4ueCHT1H6+wDzrXZS08uFB3Tv4jd6IZJdXSEXDr51NAn+86Jiw==} engines: {node: '>=20.9.0'} peerDependencies: react: ^18.0.0 || ~19.0.3 || ~19.1.4 || ~19.2.3 || ~19.3.0-0 react-dom: ^18.0.0 || ~19.0.3 || ~19.1.4 || ~19.2.3 || ~19.3.0-0 - '@clerk/shared@4.20.0': - resolution: {integrity: sha512-5t3YEnjwEwaect59N0Ycb5aDBbVGe3hICmy21X+n00IR1skmSTXPmPk/67bTktgEbGHxot2RGqhQbi2bFQV6AA==} + '@clerk/shared@4.25.5': + resolution: {integrity: sha512-pb+pA+88OACHSuE0JhsnV7Qzl1j9UhI9KrXivS831x1BJOtNYORnDqRg3xss2SPFcC46clE9S5QqkRQqv1lSsg==} engines: {node: '>=20.9.0'} peerDependencies: react: ^18.0.0 || ~19.0.3 || ~19.1.4 || ~19.2.3 || ~19.3.0-0 @@ -1175,8 +1181,8 @@ packages: '@expo-google-fonts/material-symbols@0.4.36': resolution: {integrity: sha512-hFIN8h99qUid9OppB9Sj18sUQib2O0I9c0soBmgb932Kz+20pAaGe/PRH6NdAqm8/DdOs+Hwx8A4Fqn9ZNadhg==} - '@expo/cli@56.1.16': - resolution: {integrity: sha512-VBQn0mqAwc67b9Cn0RVXyeodghomAx5xGRhA/bXaQzuxDjMQk0zIOb6pXMZX7yiIwJW66UZt/zQiJNSv6aWJYw==} + '@expo/cli@57.0.9': + resolution: {integrity: sha512-41z9z68SynNXasZOjuT1si5Sq5OKL6SLf40ZjikbtZgDuvBO8HaUsaDzsJ0c1UZJ3N+vMzYCc1JUIDyRkVBjkA==} hasBin: true peerDependencies: expo: '*' @@ -1191,26 +1197,20 @@ packages: '@expo/code-signing-certificates@0.0.6': resolution: {integrity: sha512-iNe0puxwBNEcuua9gmTGzq+SuMDa0iATai1FlFTMHJ/vUmKvN/V//drXoLJkVb5i5H3iE/n/qIJxyoBnXouD0w==} - '@expo/config-plugins@56.0.8': - resolution: {integrity: sha512-phTuyBhgVLfqUHMjQkAfRtbyoY6yTxoKja1awtpVnEkoJDxPJuXx1KX5uvq1eZtt4bJQ08OBJ6P95INqRSHpRg==} + '@expo/config-plugins@57.0.5': + resolution: {integrity: sha512-xhUGgzpFWRghDUH98+Wl4RDakYhTsbyMg6aOYiBjRzPO/THH8tKMw3vlksgFYlU2PkiAdABJN3tNPf5qmvOQhA==} - '@expo/config-plugins@56.0.9': - resolution: {integrity: sha512-/6a/S9USwx8OC9tGjHxbviLFiBHyueN3aoNWMLvWDEJoZ1CIVW800ZBzwXq/FYNK2qzcN1LxFmQtzD1zeFQKNA==} + '@expo/config-types@57.0.2': + resolution: {integrity: sha512-ewW08OonrcRIsRKIlFvvcmmafE5zemb1ocu3HkNwtVPyRtj2w42pZCAkMIROYpcVBaPnc3mDT9UZDzwXWC3i6g==} - '@expo/config-types@56.0.5': - resolution: {integrity: sha512-GsAHO/MwW9ZRdgnmyfRXqVGLCP/zejD6rWnp5OROp8mBGRObKm4HfrjlUyT1skjMwCj1OrURx9ZfIc6yeBAkIA==} - - '@expo/config-types@56.0.6': - resolution: {integrity: sha512-4Y6Aum5J4Re5NnxGVofRNe1aDwUBOmWhQYkynZsqzRtX/zEA1ADUeyHXuEckv9YD9djiyT7bKtLt5gKL3mA6VQ==} - - '@expo/config@56.0.9': - resolution: {integrity: sha512-/lqFeWGSrhpKJVP8tTN8LjuoIe8u8q2w7FzBL0C+wHgl+WM8l1qUIEYWy/sMvsG/NbpUIUsDHJRhQvOkU58eIw==} + '@expo/config@57.0.5': + resolution: {integrity: sha512-XqveHQzr6PTqHGnv6NVVZ1CFgB/TgR2mKtHsJA/gYS/76pe2cP1yK/O820xGW2RTnDGTmyhOdagmK6khcN46vg==} '@expo/devcert@1.2.1': resolution: {integrity: sha512-qC4eaxmKMTmJC2ahwyui6ud8f3W60Ss7pMkpBq40Hu3zyiAaugPXnZ24145U7K36qO9UHdZUVxsCvIpz2RYYCA==} - '@expo/devtools@56.0.2': - resolution: {integrity: sha512-ANl4kPdbe0/HQYWkDEN79S6bQhI+i/ZCnPxuC853pPsB4svhINC7Ku9lmGOKPsUUWWnrHg1spkDGQBZ4sD6JxQ==} + '@expo/devtools@57.0.1': + resolution: {integrity: sha512-GyUf+wFNkbttaX0jR7MZa9bm77U0IrLg6d2AjpxdyoXw/w4abHoXG0oFufwLMgP9zLTd5+Ct4X/ffNUTnlzZgg==} peerDependencies: react: '*' react-native: '*' @@ -1220,56 +1220,56 @@ packages: react-native: optional: true - '@expo/dom-webview@56.0.5': - resolution: {integrity: sha512-UIEJxkLg6cHqofKrpWpkn9E6ApxVRtCgZhZkARPr9VV7rBVloJgeroTHs31YgU/JpbI5lLQOnfOlGo54W6C2Ew==} + '@expo/dom-webview@57.0.1': + resolution: {integrity: sha512-lAKsME4SAq+8sf56oN0DX5TBYyruupoRxbWbD2xf9RnKY8y6x8eb9LCE5pxSN0qyWdqnp+0wmyWzDkKboThKAw==} peerDependencies: expo: '*' react: '*' react-native: '*' - '@expo/env@2.3.0': - resolution: {integrity: sha512-9HnnIbzwTTdbwSjNLXTk0fPm9ZwMJ7c1/31tsni8HZ8Q62KzYCyspahH+V365vg5J6lr001DzNwBxVWSaYCQLg==} + '@expo/env@2.4.2': + resolution: {integrity: sha512-28pqaEqwnmLduZ00Pq9HkSzE5wbj1MTwp5/n8nm8rD8MCjR9eUnVOwmNksPI3Be2ReAPO/DbPn1puy0mvoocsQ==} engines: {node: '>=20.12.0'} - '@expo/expo-modules-macros-plugin@0.2.2': - resolution: {integrity: sha512-4IMzPDIo/VOXREQjsJtliSfqYVZvfzU2SLFS/9sKMWF848S8CHx+e/E+Vf0TcMvpWCCKX5umyqxb13KJJ+YUzg==} + '@expo/expo-modules-macros-plugin@0.6.1': + resolution: {integrity: sha512-cpsLZE4rqkc1Y3eZTkxB98jrqY1YXgetmtxFt8q89jBRmk3quRuk1BZo+VcnCSObZardjg99r1k5xijEMONFGA==} - '@expo/fingerprint@0.19.4': - resolution: {integrity: sha512-PsowRlO8+S7JlO8go7yhNEXp7sqlsWDE2AlCwoss7zH0dcajXFo74Fy0KdXEc4UXK7kKoHD37oDgsZ8aHSLr7A==} + '@expo/fingerprint@0.20.5': + resolution: {integrity: sha512-XCDfmbkTpTsYVq1xvvUJvXjfFQs2Hj+icQACBrc6BZmA91YPr2H3uw8sUX13d+1ij6E8lgVCtsK9jh3J2cN/SQ==} hasBin: true - '@expo/image-utils@0.10.1': - resolution: {integrity: sha512-YDeefvmYdihS7Wp3ESDUVnOgOSWmj2Cczm9lVNDdm4MqQLdAKm/LPYg83HtFQPfefRlAxyHrQR/O9kIXN9C1Wg==} + '@expo/image-utils@0.11.3': + resolution: {integrity: sha512-yMVjkndhXm9mct0uMq+ndxqT6FgAnhucdUfmXuQ6V6uE021GOiYCACO+KZ0MB4vearPSvbWTGfi32QQr2qocfQ==} - '@expo/inline-modules@0.0.12': - resolution: {integrity: sha512-SNIZr/HWfIQPTZBwmukItxpc7ws1SgMUywYq1dnQvDknQDjJcuWAasIRFUjsK15yQ1xb4G5CP7VHtbN3V4lENg==} + '@expo/inline-modules@0.1.3': + resolution: {integrity: sha512-eHSxWYfgq65mP3Qz8PclVjUkSrDIlGl3va9U7PMcTpGItOvee/i0ZzGinH5A25oARR5ouD64eESBKwtT/CwdHg==} - '@expo/json-file@10.2.0': - resolution: {integrity: sha512-S6XzKe3R9GQeHiUPXc3xJjOv2VJhOEwFYf7xdC2z2cUqt3kZJ9mSO877sNQloVdnW/SUCtPY3bexlM7nwq+CAQ==} + '@expo/json-file@11.0.1': + resolution: {integrity: sha512-zxHWj4MKKMAL29ZQSY/Fssx4Thluk40JmuGNaeS078wy/NhlFhnVi+rHHunulE3xJAJ0CM73m8VK2+GkF9eRwQ==} - '@expo/local-build-cache-provider@56.0.8': - resolution: {integrity: sha512-UsuXwpNi57MNhzZ3be4XThc8xW6nzk3Wu37s1+2qcfZGeJcMLKDFfwO6n8YXeIiGlCsOi0Ee1rsTdgjrKt/YJQ==} + '@expo/local-build-cache-provider@57.0.4': + resolution: {integrity: sha512-B/cI73shkLSYBYuFyh+zCbS+WhqJgawWPW4MPdMiNLJKv9RmV4dv1FGjsidiIiG2k4kYKerBDLK4bLbC7qERQQ==} - '@expo/log-box@56.0.13': - resolution: {integrity: sha512-QWRZSpWPyjkDLVQio4R7oAzg/Av2MOt/DciFkfjr8qQ3qxGVn1Rt1oHP/80hvcWDcHFV7N6PqpyxRXw6nbxzKQ==} + '@expo/log-box@57.0.1': + resolution: {integrity: sha512-fuVNHhOerdRWtpq27gD6JTSVYESsfRu+SMdrNCWxW+gFnusS6dGKfx3lKGBZ4ZkMNiLWn8maBHo39YKzJNXFYQ==} peerDependencies: expo: '*' react: '*' react-native: '*' - '@expo/metro-config@56.0.14': - resolution: {integrity: sha512-O3CIHruaTJhswPAf/nf3i8QQ3f2jl+mEwSea1eb3khuplabdy/wTQz+JvHN8VGUFyg7JKwUGU1QfO6T3JiSQqA==} + '@expo/metro-config@57.0.6': + resolution: {integrity: sha512-liXA9axM3aykAdil4qdHOYKmQqTDdXYkAoT3Eny+SQEo3btERJCbOk8VH48/G0sVbXCj82AbSS8s3XNEQNqbDQ==} peerDependencies: expo: '*' peerDependenciesMeta: expo: optional: true - '@expo/metro-file-map@56.0.3': - resolution: {integrity: sha512-5OGW3z8LgEYgMJOR7F3pC8llFLkb1fVqwAewbCl6S4Vkha8AFQMwOjT+9Wbka+V4rmpljpGqOnMhF4xZbD961w==} + '@expo/metro-file-map@57.0.1': + resolution: {integrity: sha512-8JXfVstZN7QnP4NianZZnlTVboOWR0sG8trUDNajOjnbGlPln29vponXM84tY+3tAHapz5/TxE53L0ixUwqPtA==} - '@expo/metro-runtime@56.0.15': - resolution: {integrity: sha512-WIWeVsL6kCSB57oYZdUA4MTkH7c67UFMIjdNoQzKXwxZYwBFE/xL2cGPDC3z8RWt0femzJTVxAVZUOW/hiqRzA==} + '@expo/metro-runtime@57.0.6': + resolution: {integrity: sha512-x/lAtmPBkZGI3YrGirKQ77Ybmd2N4wI6zHE5v1Top08xiYPH28aUTNAu4vf3MBrf4MYnq7327Nj20hzIgzlRmw==} peerDependencies: expo: '*' react: '*' @@ -1282,36 +1282,36 @@ packages: '@expo/metro@56.0.0': resolution: {integrity: sha512-5gIgQHtEpjjvsjKfVtIv23a98LLRV0/y07PDShEwYSytAMlE3FSF8RHXqtHc1sUJL6dn7hnuIBpIbrLXXuVi0A==} - '@expo/osascript@2.6.0': - resolution: {integrity: sha512-QvqDBlJXa8CS2vRORJ4wEflY1m0vVI07uSJdIRgBrLxRPBcsrXxrtU7+wXRXMqfq9zLwNP9XbvRsXF2omoDylg==} + '@expo/osascript@2.7.1': + resolution: {integrity: sha512-Zn03EX6In7ts2lPUW2ESUSkEhEWQN1qqsiXjadtZMJOuZRkMiAg1ZQHuvz9DjByDWNJ2pBwAGyrts9lj9k389g==} engines: {node: '>=12'} - '@expo/package-manager@1.12.1': - resolution: {integrity: sha512-fQLiFAcFRWF53mtuLK32SUJQ1ahhrTcBZPZPedYTiUT5ha5FF+UO6bPtCc0Y/hgj0/m3HCGBAuSHjbg2kI9oPQ==} + '@expo/package-manager@1.13.1': + resolution: {integrity: sha512-y/K+CaYYpZpNGZhSX4HyLT/vyIunFjNfyoxNysPBCefeLKI/VCx6f9LNPzrxayr3rCYO5bl9O8H+HRQK265Nkg==} - '@expo/plist@0.7.0': - resolution: {integrity: sha512-vrpryU1GoqSIRNqRB2D3IjXDmzNYfiQpEF6AH/xknlD7eiYmEDt3mb26V7cLcedcPG8PY/1xWHdBXVQJfEAh6Q==} + '@expo/plist@0.8.1': + resolution: {integrity: sha512-3gTReGIUm0oRaMClsAJYxBnVPCl6fVpsl8HS+DTVxDhW4GyVyxg9E/Znm3BvcHtUJ51RJJI14pC1wvrNilCRHw==} - '@expo/prebuild-config@56.0.16': - resolution: {integrity: sha512-ce9ENfPWO4WUWUVQz0OaqL3KYZ7YofP8O35ncnn7CHCaKwQ7BqxcCGJbh+qvP1UjlWeNB3CjHPrXXJ3bnZwlJw==} + '@expo/prebuild-config@57.0.8': + resolution: {integrity: sha512-NQjRuTLvxUnggK57pKTHLtzS8YYtjrQSGYu+CjgWaO8lNlqdoBbvHrxGYtc9tBuOI3xVPaTfuIvjikxX1r+UhQ==} - '@expo/require-utils@56.1.3': - resolution: {integrity: sha512-KyLeOn/zzQSvuPpV5YhB/FPKnpQytno4luN918bGdPDssLBoS3N/0UbC3W0rJAn9kSFu+XpfR81eABRVsSdfgQ==} + '@expo/require-utils@57.0.3': + resolution: {integrity: sha512-ns05X1K8tM+Qtzp6dNloUFOopSdh3J+HC61BtOR8WHhgtPFyX8TKuO2diqZUqVg9K8yfkWug7g8tBS0qRniSTA==} peerDependencies: typescript: ^5.0.0 || ^5.0.0-0 || ^6.0.0 peerDependenciesMeta: typescript: optional: true - '@expo/router-server@56.0.14': - resolution: {integrity: sha512-2UCTtZfcq1ZPgp3wk8/+sq9DvFI9UxrPr1jcEKMAF2DGAJLosnpc8GWNNg2hkjt6SHUOdFHIPxujWPYyho2y3A==} + '@expo/router-server@57.0.3': + resolution: {integrity: sha512-gkboMZUv+eAK4XSBGSIQ6at3dSa/QYARm+8PKj8pMEhGnt08vgcXpWAW5rYJMoLukaDD/bUDX/JU2Iz1Azwziw==} peerDependencies: - '@expo/metro-runtime': ^56.0.15 + '@expo/metro-runtime': ^57.0.5 expo: '*' - expo-constants: ^56.0.18 - expo-font: ^56.0.6 + expo-constants: ^57.0.5 + expo-font: ^57.0.1 expo-router: '*' - expo-server: ^56.0.5 + expo-server: ^57.0.1 react: '*' react-dom: '*' react-server-dom-webpack: ~19.0.1 || ~19.1.2 || ~19.2.1 @@ -1325,8 +1325,8 @@ packages: react-server-dom-webpack: optional: true - '@expo/schema-utils@56.0.1': - resolution: {integrity: sha512-CZ/+mYbQmWeOnkCGlWy9K+lFxbJSMFY7+TqBZcKzBSTU5Q7IGRvn/sOG3TdNjIdLPmbA8xe7R/c3UUQ28R9i9w==} + '@expo/schema-utils@57.0.2': + resolution: {integrity: sha512-fMu/jyN0l1Wzv7XkeWR4IYCx1M8ryui3FdBNGrWwbRgJ7EhxXxK8E2jxP2W3pbgUwUY0V3hG8+GyfCZwny+Lxw==} '@expo/sdk-runtime-versions@1.0.0': resolution: {integrity: sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==} @@ -1338,23 +1338,20 @@ packages: '@expo/sudo-prompt@9.3.2': resolution: {integrity: sha512-HHQigo3rQWKMDzYDLkubN5WQOYXJJE2eNqIQC2axC2iO3mHdwnIR7FgZVvHWtBwAdzBgAP0ECp8KqS8TiMKvgw==} - '@expo/ui@56.0.18': - resolution: {integrity: sha512-2XgH5obigGtXm8zlb/V3g87NSiIcBcJ1xoQOEQYPoExL1DCNsHzaIecTh1XG/f/45ardo4OZNJwpbfYJ9X3qrQ==} + '@expo/ui@57.0.7': + resolution: {integrity: sha512-WqRVabl8VpHf3+YLHVjUy7PMIuXXI6DG88Vgmavro7Nd8Ks13h9sEJH/RLSCaJE2daVnqzEKY1v797BibuY9aw==} peerDependencies: '@babel/core': '*' expo: '*' react: '*' react-dom: '*' react-native: '*' - react-native-reanimated: '*' react-native-worklets: '*' peerDependenciesMeta: '@babel/core': optional: true react-dom: optional: true - react-native-reanimated: - optional: true react-native-worklets: optional: true @@ -2031,62 +2028,62 @@ packages: react: '>=16' react-native: '>=0.57' - '@react-native/assets-registry@0.85.3': - resolution: {integrity: sha512-u9ZiYP23vA2IFtdFQFmetzSmk6SM0xgKIoiOsr1hXNHjHaLhOm+/Ph1ud57wX6+Dbwdzx8coJgnzSKL3W21PCg==} + '@react-native/assets-registry@0.86.0': + resolution: {integrity: sha512-nIaXbm2jX1OTYp0qbviJ3O6KZivoE8z3BnhUQ2LsqfZSWRoOK/n1qsiAr6oALiNKWnXY3j2KPwtYORnZzp8xew==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - '@react-native/babel-plugin-codegen@0.85.3': - resolution: {integrity: sha512-Wc94zGfeFG8Njf9SHMPfYZP04kjigkOps6F1TYTvd7ZVXuGxqseCDgxc50LWcOhOCLypI9n3oVVqz81C3p44ZA==} + '@react-native/babel-plugin-codegen@0.86.0': + resolution: {integrity: sha512-qdsABWNW7uTll90l4Vh03gjeyu3WVDi2CyiiyvYGMRDcoYbjbQi6df3BMAm9lQI2yslZ1T14LlDDAsgTwNxplA==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - '@react-native/codegen@0.85.3': - resolution: {integrity: sha512-/JkS1lGLyzBWP1FbgDwaqEf7qShIC6pUC1M0a/YMAd/v4iqR24MRkQWe7jkYvcBQ2LpEhs5NGE9InhxSv21zCA==} + '@react-native/codegen@0.86.0': + resolution: {integrity: sha512-uTs9DBo3+/lUqinsGZK0FKJRBVClrwMXoZToaDxE1Q2SL2e55vs2GwyZfIKzPl5uJnbu4PfFMIp0/mLXLWUMuA==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} peerDependencies: '@babel/core': '*' - '@react-native/community-cli-plugin@0.85.3': - resolution: {integrity: sha512-fs85dmbIqNmtzEixDb0g+q6R3Vt4H9eAt8/inIZdDKfjN76+sUJA2r1nxODQ76bU23MrIbz8sI7KFBPaWk/zQw==} + '@react-native/community-cli-plugin@0.86.0': + resolution: {integrity: sha512-Jv8p1ebEPfTzs8gmrjsdT2XMXFfeAg45Pman+XPLFGaSeGAZkutRFRyX9Cs9aGTSOyIA9YPJ6vDNb1ayTf1FKQ==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} peerDependencies: '@react-native-community/cli': '*' - '@react-native/metro-config': 0.85.3 + '@react-native/metro-config': 0.86.0 peerDependenciesMeta: '@react-native-community/cli': optional: true '@react-native/metro-config': optional: true - '@react-native/debugger-frontend@0.85.3': - resolution: {integrity: sha512-uAu7rM5o/Np1zgp6fi5zM1sP1aB8DcS7DdOLcj/TkSutOAjkMqqd2lWt1/+3S7qXexRHVK5XcP+o3VXo4L/V0A==} + '@react-native/debugger-frontend@0.86.0': + resolution: {integrity: sha512-7Mb3nDfyJeys+ELF75Ageu7VKERlnIMoO+aNPoXqTXvz+b41L6l2CqMyLpDHxkBSlenij6gEepPNgaIyWHbJZw==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - '@react-native/debugger-shell@0.85.3': - resolution: {integrity: sha512-/jRAaT9boiCttIcEwS02WPwYkUihqsjSaK/TMtHz05vT6uMgac9PaQt5kzBQLIABv5aEIa5gtrMmKVz49MjkjQ==} + '@react-native/debugger-shell@0.86.0': + resolution: {integrity: sha512-Y0zEkZzLz8ou6o/VLml1A31X/rMgc6DRjwxwzPMa94qRTMY070WeBCNTITQo4kKTBAUgbxh07oXPQqp0Tpja8w==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - '@react-native/dev-middleware@0.85.3': - resolution: {integrity: sha512-JYzBiT4A8w+KQt+dOD5v+ti+tDrGoPnsSTuApq3Ls4RB5sfWbDlYMyz3dbc8qBIHz9tv0sQ5+eOu6Xwqzr5AQA==} + '@react-native/dev-middleware@0.86.0': + resolution: {integrity: sha512-20pTO6yTybmvXvro520H6C7jydIQnLKOl5qFtVEcHSdFrY63r3OGei+Rx9bILgSRmH6jgnfEcijcMx7pwWuQtw==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - '@react-native/gradle-plugin@0.85.3': - resolution: {integrity: sha512-39dY2j50Q1pntejzwt3XL7vwXtrj8jcIfHq6E+gyu3jzYxZJVvMkMutQ39vSg6zinIQOX36oQDhidXUbCXzgoA==} + '@react-native/gradle-plugin@0.86.0': + resolution: {integrity: sha512-a1RcfaEDqWExCGfCwadIxt4l8FvKYgFqeMf2uzeKyAOnb+vTGNIeCvifFL2MqvgaeYxlER437HbMIajGcuJ1pQ==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - '@react-native/js-polyfills@0.85.3': - resolution: {integrity: sha512-U2+aMshIXf1uFn77tpBb/xhHWB9vkVrMpt7kkucAugF8hJKYTDGB587X7WwelHduK2KBfhl4giSv0rzZGoef9A==} + '@react-native/js-polyfills@0.86.0': + resolution: {integrity: sha512-zYy/Cjd1VTnZ2iCNaG9bDF9C3l2ntESiPRscjIlI5FKugu6aeTwsDSv1aI8Bc4Kp3vEdoVg+UQhLAhE4svREaQ==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - '@react-native/normalize-colors@0.85.3': - resolution: {integrity: sha512-hj0PScZEhIbcOvQV5yMKX3ha4XEIOy/SVE1Rrpp0beW0dpNLOgSC7KDxGewmDnIHK9YdQUXGY9eMEfShUMIaZw==} + '@react-native/normalize-colors@0.86.0': + resolution: {integrity: sha512-kG0wfCGghUKlfxkJyyHCDVutWVYWK7/DG58ojA/4v9EfulgF+osuSQmlbNb3rcKX58qutm7JcldSeVLgGFha9g==} - '@react-native/virtualized-lists@0.85.3': - resolution: {integrity: sha512-dsCjI//OIPEUJMyNHp4l7zNLVjCx7bcaRUceOCkU+IB17hkbtbGWvi7HjGFSzy7FJGmS/MOlcfpb72xXiy1Oig==} + '@react-native/virtualized-lists@0.86.0': + resolution: {integrity: sha512-4/ZLXdf/OSpPDVO0AsQ1SJdRIzt5t9BNQ46QwGgxvX7/cirYR5k8KXctNGGgW8lQo2gZChEfY2zFCZg9nM/jiw==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} peerDependencies: '@types/react': ^19.2.0 react: '*' - react-native: 0.85.3 + react-native: 0.86.0 peerDependenciesMeta: '@types/react': optional: true @@ -2928,6 +2925,11 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} + agent-cli-detector@0.1.3: + resolution: {integrity: sha512-XjBe6lT5sK9xhAn0ToFvdwicsaGvzZkax1iviPnL8sFFYHoagnTTn2E4YTFiyM956iqkOkFcgcWCiER0kkShbQ==} + engines: {node: '>=18.18'} + hasBin: true + ai@6.0.174: resolution: {integrity: sha512-bTrfLUWHWtkjzWyCY4bmyuk4Qvmj4S4NSNsXyNSVVqkmftQNtxRj7dzUoMeQDBBwlJO6fC7m2Q/lNOPqQQfAGA==} engines: {node: '>=18'} @@ -3026,33 +3028,21 @@ packages: babel-plugin-react-native-web@0.21.2: resolution: {integrity: sha512-SPD0J6qjJn8231i0HZhlAGH6NORe+QvRSQM2mwQEzJ2Fb3E4ruWTiiicPlHjmeWShDXLcvoorOCXjeR7k/lyWA==} - babel-plugin-syntax-hermes-parser@0.33.3: - resolution: {integrity: sha512-/Z9xYdaJ1lC0pT9do6TqCqhOSLfZ5Ot8D5za1p+feEfWYupCOfGbhhEXN9r2ZgJtDNUNRw/Z+T2CvAGKBqtqWA==} + babel-plugin-syntax-hermes-parser@0.36.0: + resolution: {integrity: sha512-LhD0xdoedDw7ansQgXbB2DADLZIK/LRXuWNBPuVzMc5S2WK5GyT89tCM+cQzxFGO0mGyLK6D5TrVOJJzAoDy8Q==} + + babel-plugin-syntax-hermes-parser@0.36.1: + resolution: {integrity: sha512-ycduwJbvdvIMmVvlAZqGggS+pm5Eu4Bk9pcV9Sm2Z4PJNRVsKkv0g7vHj+LeuC1gHTeF67sJXFOq61IlqCa2hA==} babel-plugin-transform-flow-enums@0.0.2: resolution: {integrity: sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==} - babel-preset-expo@56.0.10: - resolution: {integrity: sha512-oFhmoN/DWpArCGEA6GlJiMYF8RhgNg2VtnYC7GzEgq+TpPUG1Eef+EaIH8x+59piagjZNi7IqPVMbwxXKYlQpA==} - peerDependencies: - '@babel/runtime': ^7.20.0 - expo: '*' - expo-widgets: ^56.0.11 - react-refresh: '>=0.14.0 <1.0.0' - peerDependenciesMeta: - '@babel/runtime': - optional: true - expo: - optional: true - expo-widgets: - optional: true - - babel-preset-expo@56.0.15: - resolution: {integrity: sha512-0MqbQoM6nBUbKvgu2xJ4VixZnUTGTq3HB2WwvOikdO4CiPxbQ+wGA25fOoHHSni5iEFW39wy6y1ookTWlq3wVw==} + babel-preset-expo@57.0.3: + resolution: {integrity: sha512-JuTLwC4dt30GF3L8sY7EBwh5iD7L3dSWumfg+i99bFK2SIXWyfn01UHxu+azfKXFU/ufim9oUt9KUoJ9AvyOPA==} peerDependencies: '@babel/runtime': ^7.20.0 expo: '*' - expo-widgets: ^56.0.18 + expo-widgets: ^57.0.5 react-refresh: '>=0.14.0 <1.0.0' peerDependenciesMeta: '@babel/runtime': @@ -3637,161 +3627,161 @@ packages: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} - expo-application@56.0.3: - resolution: {integrity: sha512-DdGGPlMuM6cSTeKhbvh6OeLr2O/+EI5BHKYrD+Do8sJPYgLwzGrgESELfyjJCpEhFzT+TgKIdmLmWXhNUQnHiw==} + expo-application@57.0.2: + resolution: {integrity: sha512-q31YwcXyymviAmdrtDfAg3Dld4VMxLCNAfgMHip7vZpPX4lzF/AfwsywqBJUAjQnJknzaNAkzqvMVjO5XmKYDA==} peerDependencies: expo: '*' - expo-asset@56.0.17: - resolution: {integrity: sha512-GFN5j+8SPkyv0nfsiFHewmdB/D0tL237TsBE/gSfFOFy/J3a52py7IulcSqkA3sQE/u/UlD5BmvP5ssS4//nUg==} + expo-asset@57.0.6: + resolution: {integrity: sha512-n3Yb1VxcP+BMRTyC4R1x2It4+m5EDkNXiVCHGWbnIREQUUkMs2Yeul7D5qfFWAYtIn2Z3hbGMndwU6Az1FPSEg==} peerDependencies: expo: '*' react: '*' react-native: '*' - expo-constants@56.0.18: - resolution: {integrity: sha512-8AMtbDGl/WVPnWlmbpGmvcdnNCy9E4PFnwdVwj600vljkMDPSxcAcjw8GVXEPk3PpZ+ngTqsrkltWyj0UKYAxw==} + expo-constants@57.0.6: + resolution: {integrity: sha512-OV+4XUshdO18TKNlo1cxUkXeJWgUOPgalvl8ofmc7kmPPHoyfz2hGJ94tyY/RND/GG5RREE+me9YHClNEzo+Ow==} peerDependencies: expo: '*' react-native: '*' - expo-crypto@56.0.4: - resolution: {integrity: sha512-fRNEhoXRXgAWBpe3/hq5X+KXTit3OZqdiAGts1YvNEUHQb+H5591mpPac0Yw+sZg9pXcrjRnzo5AxvZaENpc7g==} + expo-crypto@57.0.1: + resolution: {integrity: sha512-xwegXQw3ATgeL1ZuqbSNrGzOeG+zNeh6Z6DSJk825Qpa3TEQQ1kG3ioE1p3g/SNF373BAVz2iBKUTSytlIbBRA==} peerDependencies: expo: '*' - expo-dev-client@56.0.20: - resolution: {integrity: sha512-KebW4r8HhIiRrPzs6ZqVhp/so8buyglAO1h4No0Ibr5C2XRnlIoGWCN4zC6rW7IsI3iKUXcofLAQV9OjoxjiwQ==} + expo-dev-client@57.0.7: + resolution: {integrity: sha512-Xj4KEzPuzpQO2JyWpue2wfSYgQgmP9y9MSsfapmBycCAqh55KN2hKeTRUhs7GuwfEgTsUvSsk8aqa6Sr8nG+UQ==} peerDependencies: expo: '*' - expo-dev-launcher@56.0.20: - resolution: {integrity: sha512-cTuC3GkPl9CTwO3CKnVmEm9qoQ0WairhwvTh6qMlg+zr/QU/tdiU++uDBX67hf9+FuxQOkWGp5khFNosT+0cIg==} + expo-dev-launcher@57.0.7: + resolution: {integrity: sha512-BWitJkzWhRBUIPUjk36AWA0R9P4rKD5YFINeAAuUto27g6/cHcEmWQvd2EVMV/e2bX310yURTsb8VheMVwtQTw==} peerDependencies: expo: '*' react-native: '*' - expo-dev-menu-interface@56.0.1: - resolution: {integrity: sha512-odATx0ZL/Kis10sKSBiKiGQxAB6coSi/KQtKcMhnQVNno6FkRh5/4e5BqcEvpq2rNMTiQp4ytNAQHtdwbPXvGA==} + expo-dev-menu-interface@57.0.0: + resolution: {integrity: sha512-F47VdzOHYc19FhI/jBgctpO8a5UskTIxG6a1E5t3W5gF8VImuvBQffdXXfLHhsuCl7dS3v3U0R45cleeVXO1Zg==} peerDependencies: expo: '*' - expo-dev-menu@56.0.17: - resolution: {integrity: sha512-OofRkOOZnaDriSav3JDN4NP2lsLt2eOa/Ryptr5nMD62SwnFyK4R6n6PkPVaDU3LSsZqndAJHmN6inS+oziayQ==} + expo-dev-menu@57.0.7: + resolution: {integrity: sha512-9Dv7PumsVhdRYrPAeSJEiPHnJsr/Q1TlQ4fqMfxYdS4YkOx/Oi5LWOPZ+kW6KhIDYoCYVBo5H6ey9tROGlsO2Q==} peerDependencies: expo: '*' react-native: '*' - expo-device@56.0.4: - resolution: {integrity: sha512-ucVcGPkvBrl2QHuy7XcYex2Y6BETvJ6TREutZrwLGUDnlvbpKS8KfQoNZOpvkyo5Nmm9RrasYQ0CrXmBHho2mg==} + expo-device@57.0.1: + resolution: {integrity: sha512-jyEMDUticH+dhcL3GHa2aiifOvGXJsmb3oVT2R2q4i8bN7Bddy61+NkpMmuS2VAZrvoLQwf0TJJ/1vi1ukvutA==} peerDependencies: expo: '*' - expo-document-picker@56.0.4: - resolution: {integrity: sha512-75Apf74XNkYYohObIH19VZw42xpe0gmEnPccuzGXKVAzlvTYCfibSgW17F+6vt4paOfZEnAoZ1QFZM6dmaujRA==} + expo-document-picker@57.0.1: + resolution: {integrity: sha512-qBwM5oxDZ3I9kwFD3pUE1oK/WNv9artoEKO6UpqhQgNRr0XA1ALRVWYjkF4+ge9lUNDRehjTm/jenINkzqg84g==} peerDependencies: expo: '*' - expo-eas-client@56.0.1: - resolution: {integrity: sha512-r8h0ZIExacCrSRgY+ARfhMvFqosLHLJt1L7jyhvabfr1DN/ZDKDsYbovss2tzkpEUZGxZ3BPcB5epCwUsBBdOA==} + expo-eas-client@57.0.1: + resolution: {integrity: sha512-4w51+zsl/ziUHQMJgLgUdgsNhRPAwHBfySpPB1hpWU21X74QS9T4SqDftaRnrDagn/DfcrXUMJvHbDQUxLPJNA==} - expo-file-system@56.0.8: - resolution: {integrity: sha512-NrH41/8snGIBSbYicwVLB4txPdgCATd7ZYhMAGS3YJZ9GbnduhlAoV4/YCbGayjrbpE9bJb/6wegPL/zmvRMnQ==} + expo-file-system@57.0.1: + resolution: {integrity: sha512-w7/ERvQFrGP2apTO9lDtZ+O6JQIhfakL7+Xqzh+rfMO9B4LB4qwrz+YvLgir8KFRVX64JHBnRuYBVLY1oQZcqw==} peerDependencies: expo: '*' react-native: '*' - expo-font@56.0.7: - resolution: {integrity: sha512-hpU/vRwPzsby9lPGkA4blDqLIIXYzoWnCZHr6PxvcWbY/uPObAiyhh6q+e0WYsB65SthK+PLH95jEnVag7fwEg==} + expo-font@57.0.1: + resolution: {integrity: sha512-QyS9L1Kh9sKJg4gfU6rdbpxpmH+DyzBX8z6jVvXMUDoqLr1GqmkO/Wu379KCXjL///kWbhpNlbi7AgBuj4VdIQ==} peerDependencies: expo: '*' react: '*' react-native: '*' - expo-glass-effect@56.0.4: - resolution: {integrity: sha512-xI9rXtDwi7RW82uAlfyaXO6+k21ApWJ2tHAWYqPr/FjfmZbKsgNJ4Q0iZzGPCwboqjTGxaRZ61SZxBl8hDt5iA==} + expo-glass-effect@57.0.1: + resolution: {integrity: sha512-m/n8maxqNcHk6ZDhuqXBfD5Kt1Iz3M8xykVgdB0iSCIXvF70IqWXmQhX8Psswhrp8eZ+3r0mAD0Jh/2gFA3QaA==} peerDependencies: expo: '*' react: '*' react-native: '*' - expo-image-loader@56.0.3: - resolution: {integrity: sha512-JgUo4fUeU1ZC+z8iBFj8v7yoGQnZrLbOVPyNE+DWVrld55F2F6R1ck+rmdm/8TNWLz1LhNQfD7c3XYP1ZikxXA==} + expo-image-loader@57.0.1: + resolution: {integrity: sha512-uhrZKLT/cTl2mXyR28kPpVkS5O+PK9N1QA/07IFM4f5T4g0lTW1JHT3NEWwEEsGFldPmVX4j7LwUVVZxE+woug==} peerDependencies: expo: '*' - expo-image-picker@56.0.18: - resolution: {integrity: sha512-sCjQ8M27bhGUv2vUavIE+uWdYo79b2D7Q5h9B66BSDZ+Rd8YyLVSf7vYGfIzQ7nMVoENZ6c4xo/JiDkEeQ9iTg==} + expo-image-picker@57.0.5: + resolution: {integrity: sha512-Cj4UtIbVyZn8Q4KPvTTqcwCcd0YKA0yzQgEllBByFKurAZmyLCq9VhWMNyjdvfcDzWg8IeEi20fFIDD4YKBoQA==} peerDependencies: expo: '*' - expo-json-utils@56.0.0: - resolution: {integrity: sha512-lUqyv9aIGDbYTQ5Nux2FnH2/Dz0w5uJ8Pr080eS0StXi2jr5OmuMNErpzUnpfnYOU55xKotd4AHv68PfV/ludg==} + expo-json-utils@57.0.1: + resolution: {integrity: sha512-cgTe1NqzQdYs/WN+3nIY5IZg8s0pb0xaTUbhYvxQDn137GbwRfHoGM2se3m3Vsl4Qu+B9G4RPEK5WJDEU2Do7g==} - expo-keep-awake@56.0.3: - resolution: {integrity: sha512-CLMJXtEiMKknD3Rpm8CRwE6ZJUzu2yCEmRk1sgfHAJ1zIbuEWY3dpPDubtsnuzWm+2k6Sru+yaFbYsvPWmTiBA==} + expo-keep-awake@57.0.1: + resolution: {integrity: sha512-28lkFImeXTS+bhAjuCFV7w7tW5bXg27BJVrxv+nC/nyYa86qEa0oFeHwqol6ha5k4pdVDQgBF09GM4A1k76Ssg==} peerDependencies: expo: '*' react: '*' - expo-linear-gradient@56.0.4: - resolution: {integrity: sha512-KUp1dNSRtuMyiExhf6FJf5YUtmw2cRaPytl10HQi7isj5Yac38udmD55T2tglNYTZlvgT5+oflpyFoH15hmOcw==} + expo-linear-gradient@57.0.1: + resolution: {integrity: sha512-CpS8eMqoIWcHVGKV66zbDvzotCw9qYp3f8CuI9N+h1LaO0tMLUzBpkhAKePUsXlpN3yolYlHFSPkfVZ/uSh+iA==} peerDependencies: expo: '*' react: '*' react-native: '*' - expo-linking@56.0.14: - resolution: {integrity: sha512-IvVQHWC+Cj4fK5qD3iEVYqpU2a4rLW0IpAAlGJ4MH+H1fyZiHh3eN6qg2WmoclOEPfYATSuEa+dQT6wfgVpXlQ==} + expo-linking@57.0.3: + resolution: {integrity: sha512-uF5PFfIQ0cjEGijzFuN8gU5eLqWs6BgS29Zp4ddP79XPMobZmS6qzdGyCOZTnZz3UWR17rFAJst1UntuZg9/6Q==} peerDependencies: react: '*' react-native: '*' - expo-localization@56.0.6: - resolution: {integrity: sha512-zzBVoUFHCVNBywcxGsspoZeIXebihOo/AnmQYE4jMv8gHCSKlLNFT+ft+0+mWcZCMs9necvUs8S8TDonAu/xBA==} + expo-localization@57.0.1: + resolution: {integrity: sha512-8Ffl4UTbOsQeGT0v5fxMbyPHyPMPnhSPDFQJa8p9rjJrthFoAtNi+fL6Ssmrvf1/7dmPq1mVY52MEt0TMEfgjA==} peerDependencies: expo: '*' react: '*' - expo-manifests@56.0.4: - resolution: {integrity: sha512-Fokawl2UkiExIF0bqGoblRFA8lYpROVD+EpvDwSW4LgqQyPwNua1gLSgHZjdl5GsVugfRMMWE3LHaibDyX93hw==} + expo-manifests@57.0.1: + resolution: {integrity: sha512-qB/mDG2dYdl+EvUeQuqP8KFYCFgFCQjJYdWIHo8SFBgDzMYmdF286DFY2M1M9Okr99wkb5M4tgA3aCcwv3aEQA==} peerDependencies: expo: '*' - expo-modules-autolinking@56.0.16: - resolution: {integrity: sha512-9JnL4N46P8ubDpDIfWolDn7nxU2j1rY67xY/dNVuyH0m+HG+r/JI16VYtjIf4COpZtEuFo4D3h3MBeFzGucMnw==} + expo-modules-autolinking@57.0.8: + resolution: {integrity: sha512-YBDgbJHlhhhr3JaKErW6znsIL8zQsh206LaDpWrLHV/WluRwhYfZuF/fhkVN7b/DsRxIu0UeCPExaEPMxlC2Hw==} hasBin: true - expo-modules-core@56.0.17: - resolution: {integrity: sha512-5J8whnT7Ccp+BrFClLmpF76omBqn95VZExroTm01Dgjm4vpty1Rb7U3we+ZUceNHtRd07Lw30u7FNfDgIhEbRQ==} + expo-modules-core@57.0.6: + resolution: {integrity: sha512-hePwOh2+i+EpWrVnv95sQeQ0OD5PYuEuIhmglVLzQVaVBV3zHcRvLAc1rV8ROqUL6YtAQUXjPkoSx1ly2ZdTuQ==} peerDependencies: react: '*' react-native: '*' - react-native-worklets: ^0.7.4 || ^0.8.0 + react-native-worklets: ^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0 peerDependenciesMeta: react-native-worklets: optional: true - expo-modules-jsi@56.0.10: - resolution: {integrity: sha512-fHZcFpYO/o62GYa6fJyAQJZcAShzhoN0iMMDzbr7vD3ewET6e1vAlTonbEakN9F0VHEgBFJ4NREy87uwVcpCuA==} + expo-modules-jsi@57.0.3: + resolution: {integrity: sha512-B+iXJCC5OIXjFKkLLSY2DZ8BGS+hC3PBTrALpV43pHqhXqqZrRH3uTEylZgsoKQO8N8tjmjAua2ucTFHtr1o0w==} peerDependencies: react-native: '*' - expo-notifications@56.0.18: - resolution: {integrity: sha512-HHnrwyCLC5srFojcHYS2KskbNroy9o2fwPKdyhjrdjjrBu4sNRKm4LepcuZjDy98cZKEm89WIPW8O45vut8Rgw==} + expo-notifications@57.0.6: + resolution: {integrity: sha512-eRzJrcJiaIPTGnI916WZ0NL6vzNDE6WeOdvyDzwSPQrYsoinPZSp0f8hudLrE54crysyAO/rdrOrmJBXsx9w4g==} peerDependencies: expo: '*' react: '*' react-native: '*' - expo-router@56.2.11: - resolution: {integrity: sha512-08DBTrKv3QanOc9u1JNxSEChW9c/qNFbQ0dO28OLvufWWfdSRkSdHmh365D2FgoZg1qaOzZPCDuL3tM6nGSfkQ==} + expo-router@57.0.7: + resolution: {integrity: sha512-2CLsLlcvvf3zGgHPJRTOrCPVK1l97gLGDTEbGAFcZ379ipGvfWfz9tiOWqCN3uGcl70blVUjEw8WyuvIfsfH6A==} peerDependencies: - '@expo/metro-runtime': ^56.0.15 + '@expo/metro-runtime': ^57.0.6 '@testing-library/react-native': '>= 13.2.0' expo: '*' - expo-constants: ^56.0.18 - expo-linking: ^56.0.14 + expo-constants: ^57.0.6 + expo-linking: ^57.0.3 react: '*' react-dom: '*' react-native: '*' @@ -3815,40 +3805,40 @@ packages: react-server-dom-webpack: optional: true - expo-secure-store@56.0.4: - resolution: {integrity: sha512-hjEi/gmpdFFJ9lYbdp3k3p/WchV7Gi0Qt8jt/m/0WJadqQrskafHAlDxbZkII1cN3Yd7zp9Lvkeq3UfGhSwirQ==} + expo-secure-store@57.0.1: + resolution: {integrity: sha512-tLa1VmSadOq19mA/dwkl99RbHyjLE0T1qqBYMY3/OsguZTI+rlrDy/DDJjupqlVtmr95hD7o1pYqx5aL+B4YMA==} peerDependencies: expo: '*' - expo-server@56.0.5: - resolution: {integrity: sha512-SmM2p2g3Jrktpiazcst+OxhjSzOHXKAY4BPURHYHXvApzzoybMmrNF4IEZ8DKZ145BhSe4ydAmlEFCRTsdtgUQ==} + expo-server@57.0.1: + resolution: {integrity: sha512-sBfVDH6dmKVHZxqUxbfkzS00PZELMZt1IpnHKxcOTMZtR/t7CtRAFrbXcisG+EyzeqHSVDacZT+1tbYfZt5D8w==} engines: {node: '>=20.16.0'} - expo-splash-screen@56.0.10: - resolution: {integrity: sha512-vDIlo8hzt9HlCZQ0kSY66v83D1WEXOJbVMeyPDfXDu9tbDdPMNUyDpi4WGJXikAjxnAKfbt5Mv5NnEbxINy+VA==} + expo-splash-screen@57.0.4: + resolution: {integrity: sha512-AspaOA5VZUl8yXb/BQORrRdOs0f7F/IgmvKNdCFaUDuz4X+j/4bPkkyssARFKwC5A5IQ3g7QS/Ve1XxDiDZ38Q==} peerDependencies: expo: '*' - expo-status-bar@56.0.4: - resolution: {integrity: sha512-IGs/fDfkHXofy2ZQrGiXayhFK04HB85FZXorhcEhDZEcqASKgSqpak+HwUtAaR0MeTJwWyHNF7I6VmVbbp8EcA==} + expo-status-bar@57.0.1: + resolution: {integrity: sha512-Xwaq1gAoVRWx5dPG5VhT5RSbnI9OilhZnO5qoPBnUaBAa5VzRzfdS8q0/bsPt0jR2DKLtGuP0bQ6efMJ4RIMDg==} peerDependencies: expo: '*' react: '*' react-native: '*' - expo-structured-headers@56.0.0: - resolution: {integrity: sha512-Yv4x+SQxNnMQm4nu8NFfzx197YaDhdYH2N0u7tGErwWTmH9Tm1SAhqo7bLbBWLC9kf7W+kdzTshLU9rTiCXWGw==} + expo-structured-headers@57.0.0: + resolution: {integrity: sha512-//t9UNPbJSEysc2x4VKJG/u7Osvv5DYJWsET5bqt/B+qcD1by/JXvSQzX3Q/YAgA96xFPontrz6OAPLbO4JKEA==} - expo-symbols@56.0.6: - resolution: {integrity: sha512-BrA81DjcNafdj7gXVhdrExb9LtUiSVyOf/NavyMmDAHgHMY1GqeR5cnn1PSAZeYKnSgQhee/H89XUpAxtog5hg==} + expo-symbols@57.0.1: + resolution: {integrity: sha512-8Zf+a83OywV0vf1NUtSKpNqKcULmO0GTI+zfFnGYl7SLDH9FjL5RcEZoy6CHvCgq2KDrQF21pl3r7Tb4ItPscw==} peerDependencies: expo: '*' expo-font: '*' react: '*' react-native: '*' - expo-system-ui@56.0.5: - resolution: {integrity: sha512-n1MmnUArV4cc3gVed9fGtluPme00PE9axKVx+NHbKxHFMam5l4GcOI7PxbYKFNx8o7WA1LRD7eLW33agmZrxGg==} + expo-system-ui@57.0.1: + resolution: {integrity: sha512-r8a6Jk2suL0vI7Uq4iKJab5Eesk8dkB56Q6HksVNkzuAExV0axoikQwZv8aAyHGbu2VHp0artB0N1/PQDLSgBg==} peerDependencies: expo: '*' react-native: '*' @@ -3857,13 +3847,13 @@ packages: react-native-web: optional: true - expo-updates-interface@56.0.2: - resolution: {integrity: sha512-eWTwSZ9y8vrULG2oBn2TQSSIwBGSq/TxGJ3jY6tuVS2FWH/ASRIiKs3zkUZTRoC3ZuV2alz0mUClYV7nNrFx8g==} + expo-updates-interface@57.0.1: + resolution: {integrity: sha512-+LUWwJ0gf/TEKMVdQAw/Gjih4dvrk+URgy24X9qEGKuuMDZqjBRm9T4yQyBVALGL5TTdPUaB6ILxx3lshm3pwQ==} peerDependencies: expo: '*' - expo-updates@56.0.19: - resolution: {integrity: sha512-tTSPYO5h8wDA6a+wQ2v/SRdnOdz29x0npGHCv+4Ev31Fz5r05Ii1Wgfh3BlTXNz8mikMReDsZCf6YN71YeQKpw==} + expo-updates@57.0.8: + resolution: {integrity: sha512-vHQYneTGoPZbA/3dtQlfrWQMyRjqO4t0g2K97Z3VX0K8GSTcANzTPe1MDYncGf7cU/nBIShgWXx7qSbLICEVdQ==} hasBin: true peerDependencies: expo: '*' @@ -3874,8 +3864,8 @@ packages: expo-dev-client: optional: true - expo@56.0.12: - resolution: {integrity: sha512-FxgdI/Yqva6iJOThZIHfvxlKPxs4EC4uScUnEswwSArR/Fj9k430O13R590LcOQTsdNsjIs+GBHwjfoAY6vmAQ==} + expo@57.0.7: + resolution: {integrity: sha512-PJdE0EjoX878OqClmsigVKdT0jCNOAQDRLcvFkeBakxaVyEDhjcQ8baKq2YysYH2g0YNB1rEIpHUiKtluO918A==} hasBin: true peerDependencies: '@expo/metro-runtime': '*' @@ -4084,27 +4074,33 @@ packages: resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} engines: {node: '>= 0.4'} - hermes-compiler@250829098.0.10: - resolution: {integrity: sha512-TcRlZ0/TlyfJqquRFAWoyElVNnkdYRi/sEp4/Qy8/GYxjg8j2cS9D4MjuaQ+qimkmLN7AmO+44IznRf06mAr0w==} + hermes-compiler@250829098.0.14: + resolution: {integrity: sha512-5meXwsZxgiqFaJjNzwjzI9IyUkuGGBisu+z9BvQWmGVpjH6nz11hgqkyxe4dl8UAdyIV4lTbz91+Dlnjz0VxqA==} hermes-estree@0.25.1: resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} - hermes-estree@0.33.3: - resolution: {integrity: sha512-6kzYZHCk8Fy1Uc+t3HGYyJn3OL4aeqKLTyina4UFtWl8I0kSL7OmKThaiX+Uh2f8nGw3mo4Ifxg0M5Zk3/Oeqg==} - hermes-estree@0.35.0: resolution: {integrity: sha512-xVx5Opwy8Oo1I5yGpVRhCvWL/iV3M+ylksSKVNlxxD90cpDpR/AR1jLYqK8HWihm065a6UI3HeyAmYzwS8NOOg==} + hermes-estree@0.36.0: + resolution: {integrity: sha512-A1+8zn5oss2CFP7pKsOaxorQG6FNIz1WU1VDqruLPPZl3LVgeE2C5xfFg8Ow6/Ow4mSslLLtYP1J3n38eKyW9w==} + + hermes-estree@0.36.1: + resolution: {integrity: sha512-guv1nQ6IJ7S83NRFPWc3SA7IBZrdNC9kapwOq6uXvF4wP+sDCgjzQbKPCoyYmoyZRzztF/n/c36l/rccCZSiCw==} + hermes-parser@0.25.1: resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} - hermes-parser@0.33.3: - resolution: {integrity: sha512-Yg3HgaG4CqgyowtYjX/FsnPAuZdHOqSMtnbpylbptsQ9nwwSKsy6uRWcGO5RK0EqiX12q8HvDWKgeAVajRO5DA==} - hermes-parser@0.35.0: resolution: {integrity: sha512-9JLjeHxBx8T4CAsydZR49PNZUaix+WpQJwu9p2010lu+7Kwl6D/7wYFFJxoz+aXkaaClp9Zfg6W6/zVlSJORaA==} + hermes-parser@0.36.0: + resolution: {integrity: sha512-GdpwMmH5x6IpC1cijvcvYnlPB60Mh6kTSF/NFdYV/j56gYdi+0RIakYs+eqOV+bbO0SW7mgVVGSsTJxyPQfo3w==} + + hermes-parser@0.36.1: + resolution: {integrity: sha512-GApNk4zLHi2UWoWZZkx7LNCOSzLSc5lB55pZ/PhK7ycFeg7u5LcF88p/WbpIi1XUDtE0MpHE3uRR3u3KB7TjSQ==} + hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} @@ -5133,8 +5129,8 @@ packages: react-native-gesture-handler: '>= 2.0.0' react-native-reanimated: '>= 2.0.0' - react-native-gesture-handler@2.31.2: - resolution: {integrity: sha512-rw5q74i2AfS7YGYdbxQDhOU7xqgY6WRM1132/CCm3erqjblhECZDZFHIm0tteHoC9ih24wogVBVVzcTBQtZ+5A==} + react-native-gesture-handler@2.32.0: + resolution: {integrity: sha512-uYIMOKlKENORq2SABE+jIjbPU+h5I/sQKcq2v16zRq848nwEp1fWRVwML4QWqijc8UcXJC25o54S8GQd4Mf2OA==} peerDependencies: react: '*' react-native: '*' @@ -5145,8 +5141,8 @@ packages: react: '*' react-native: '*' - react-native-keyboard-controller@1.21.6: - resolution: {integrity: sha512-nAXCmar/W8Gn4iQV7O5fAVuTh57JszCsqTS+cfR95WFOLR/AfbwfPz/+sWyz/q2SOIe2VpyQzq6hzYiwErhqqw==} + react-native-keyboard-controller@1.21.9: + resolution: {integrity: sha512-+TkkFldht4+AXBQeDy1hLE7iqiW8/NkY/ekhcFsKIiRdI9qC5JDzx0TfAg1iYZB2IeOXppmURIy2jFCUjOcV1w==} peerDependencies: react: '*' react-native: '*' @@ -5166,12 +5162,12 @@ packages: react-native: '*' react-native-nitro-modules: '*' - react-native-reanimated@4.3.1: - resolution: {integrity: sha512-KhGsS0YkCA+gusgyzlf9hnqzVPIR398KTpqXyqq/+yYJJPAvyEEPKcxlB0xtOOXSMrR2A9uRKVARVQhZwrOh+Q==} + react-native-reanimated@4.5.0: + resolution: {integrity: sha512-+iPfvK34PKKYP/p/4TaBliFkbfvjGDIvXuiiaxvISP5ip7sWegvlacwU/uAV6zNDSSmX0tDyER7PurPMKGDipA==} peerDependencies: react: '*' - react-native: 0.81 - 0.85 - react-native-worklets: 0.8.x + react-native: 0.83 - 0.86 + react-native-worklets: 0.10.x react-native-safe-area-context@5.7.0: resolution: {integrity: sha512-/9/MtQz8ODphjsLdZ+GZAIcC/RtoqW9EeShf7Uvnfgm/pzYrJ75y3PV/J1wuAV1T5Dye5ygq4EAW20RoBq0ABQ==} @@ -5202,20 +5198,20 @@ packages: peerDependencies: react-native: '*' - react-native-worklets@0.8.3: - resolution: {integrity: sha512-oCBJROyLU7yG/1R8s0INMflygTH71bx+5XcYkH0CM938TlhSoVbiunE1WVW5FZa51vwYqfLie/IXMX2s1Kh3eg==} + react-native-worklets@0.10.0: + resolution: {integrity: sha512-JhE6IxDf6iabC0qu3+TAKA4v9RlluXmoIngPQX7/QUByf75lfrsHZ6/dQhyjEWnp1EEQiwzz8Cpew140ZcewDw==} peerDependencies: '@babel/core': '*' '@react-native/metro-config': '*' react: '*' - react-native: 0.81 - 0.85 + react-native: 0.83 - 0.86 - react-native@0.85.3: - resolution: {integrity: sha512-HN/fGC+3nZVcDNcw7gfbM/DuqZAvI9Mz+/SxuhODaua4JY0BPzhfTzWXRyTR4mRgMHmShTPpH2PYMTxvZrsdZA==} + react-native@0.86.0: + resolution: {integrity: sha512-17ALh/dd6AO4pgOVmOO5Axll5PbErEo3XFyLokyzW6usyi+OShIEPwUW26wLPlhVifgSOIfECCH0WN+0IqtJ1w==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} hasBin: true peerDependencies: - '@react-native/jest-preset': 0.85.3 + '@react-native/jest-preset': 0.86.0 '@types/react': ^19.1.1 react: ^19.2.3 peerDependenciesMeta: @@ -7092,13 +7088,13 @@ snapshots: '@borewit/text-codec@0.2.2': {} - '@clerk/clerk-js@6.20.0(@types/react@19.2.14)(bs58@6.0.0)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3)(zod@4.4.2)': + '@clerk/clerk-js@6.25.5(@types/react@19.2.14)(bs58@6.0.0)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3)(zod@4.4.2)': dependencies: '@base-org/account': 2.0.1(@types/react@19.2.14)(react@19.2.3)(typescript@6.0.3)(zod@4.4.2) - '@clerk/shared': 4.20.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@clerk/shared': 4.25.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@coinbase/wallet-sdk': 4.3.7(typescript@6.0.3)(zod@4.4.2) '@solana/wallet-adapter-base': 0.9.27 - '@solana/wallet-adapter-react': 0.15.39(bs58@6.0.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + '@solana/wallet-adapter-react': 0.15.39(bs58@6.0.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) '@solana/wallet-standard': 1.1.4(@solana/wallet-adapter-base@0.9.27)(bs58@6.0.0)(react@19.2.3) '@stripe/stripe-js': 5.6.0 '@swc/helpers': 0.5.21 @@ -7126,21 +7122,21 @@ snapshots: - utf-8-validate - zod - '@clerk/expo@3.5.2(@types/react@19.2.14)(bs58@6.0.0)(expo-constants@56.0.18)(expo-crypto@56.0.4(expo@56.0.12))(expo-secure-store@56.0.4(expo@56.0.12))(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3)(zod@4.4.2)': + '@clerk/expo@3.7.8(@types/react@19.2.14)(bs58@6.0.0)(expo-constants@57.0.6)(expo-crypto@57.0.1(expo@57.0.7))(expo-secure-store@57.0.1(expo@57.0.7))(expo@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3)(zod@4.4.2)': dependencies: - '@clerk/clerk-js': 6.20.0(@types/react@19.2.14)(bs58@6.0.0)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3)(zod@4.4.2) - '@clerk/react': 6.10.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@clerk/shared': 4.20.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@clerk/clerk-js': 6.25.5(@types/react@19.2.14)(bs58@6.0.0)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3)(zod@4.4.2) + '@clerk/react': 6.12.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@clerk/shared': 4.25.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3) base-64: 1.0.0 - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - react-native-url-polyfill: 2.0.0(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native-url-polyfill: 2.0.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) tslib: 2.8.1 optionalDependencies: - expo-constants: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) - expo-crypto: 56.0.4(expo@56.0.12) - expo-secure-store: 56.0.4(expo@56.0.12) + expo-constants: 57.0.6(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) + expo-crypto: 57.0.1(expo@57.0.7) + expo-secure-store: 57.0.1(expo@57.0.7) react-dom: 19.2.3(react@19.2.3) transitivePeerDependencies: - '@solana/web3.js' @@ -7154,14 +7150,14 @@ snapshots: - utf-8-validate - zod - '@clerk/react@6.10.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@clerk/react@6.12.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: - '@clerk/shared': 4.20.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@clerk/shared': 4.25.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: 19.2.3 react-dom: 19.2.3(react@19.2.3) tslib: 2.8.1 - '@clerk/shared@4.20.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@clerk/shared@4.25.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@tanstack/query-core': 5.100.11 dequal: 2.0.3 @@ -7184,15 +7180,15 @@ snapshots: - utf-8-validate - zod - '@convex-dev/action-retrier@0.3.0(convex@1.41.0(@clerk/react@6.10.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))': + '@convex-dev/action-retrier@0.3.0(convex@1.41.0(@clerk/react@6.12.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))': dependencies: - convex: 1.41.0(@clerk/react@6.10.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) + convex: 1.41.0(@clerk/react@6.12.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) - '@convex-dev/eslint-plugin@2.0.0(convex@1.41.0(@clerk/react@6.10.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)': + '@convex-dev/eslint-plugin@2.0.0(convex@1.41.0(@clerk/react@6.12.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@typescript-eslint/types': 8.58.2 '@typescript-eslint/utils': 8.58.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) - convex: 1.41.0(@clerk/react@6.10.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) + convex: 1.41.0(@clerk/react@6.12.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) transitivePeerDependencies: - eslint - supports-color @@ -7334,32 +7330,33 @@ snapshots: '@expo-google-fonts/material-symbols@0.4.36': {} - '@expo/cli@56.1.16(@expo/metro-runtime@56.0.15)(expo-constants@56.0.18)(expo-font@56.0.7)(expo-router@56.2.11)(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3)': + '@expo/cli@57.0.9(@expo/metro-runtime@57.0.6)(expo-constants@57.0.6)(expo-font@57.0.1)(expo-router@57.0.7)(expo@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3)': dependencies: '@expo/code-signing-certificates': 0.0.6 - '@expo/config': 56.0.9(typescript@6.0.3) - '@expo/config-plugins': 56.0.9(typescript@6.0.3) + '@expo/config': 57.0.5(typescript@6.0.3) + '@expo/config-plugins': 57.0.5(typescript@6.0.3) '@expo/devcert': 1.2.1 - '@expo/env': 2.3.0 - '@expo/image-utils': 0.10.1(typescript@6.0.3) - '@expo/inline-modules': 0.0.12(typescript@6.0.3) - '@expo/json-file': 10.2.0 - '@expo/log-box': 56.0.13(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + '@expo/env': 2.4.2 + '@expo/image-utils': 0.11.3(typescript@6.0.3) + '@expo/inline-modules': 0.1.3(typescript@6.0.3) + '@expo/json-file': 11.0.1 + '@expo/log-box': 57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) '@expo/metro': 56.0.0 - '@expo/metro-config': 56.0.14(expo@56.0.12)(typescript@6.0.3) - '@expo/metro-file-map': 56.0.3 - '@expo/osascript': 2.6.0 - '@expo/package-manager': 1.12.1 - '@expo/plist': 0.7.0 - '@expo/prebuild-config': 56.0.16(typescript@6.0.3) - '@expo/require-utils': 56.1.3(typescript@6.0.3) - '@expo/router-server': 56.0.14(@expo/metro-runtime@56.0.15)(expo-constants@56.0.18)(expo-font@56.0.7)(expo-router@56.2.11)(expo-server@56.0.5)(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@expo/schema-utils': 56.0.1 + '@expo/metro-config': 57.0.6(expo@57.0.7)(typescript@6.0.3) + '@expo/metro-file-map': 57.0.1 + '@expo/osascript': 2.7.1 + '@expo/package-manager': 1.13.1 + '@expo/plist': 0.8.1 + '@expo/prebuild-config': 57.0.8(typescript@6.0.3) + '@expo/require-utils': 57.0.3(typescript@6.0.3) + '@expo/router-server': 57.0.3(@expo/metro-runtime@57.0.6)(expo-constants@57.0.6)(expo-font@57.0.1)(expo-router@57.0.7)(expo-server@57.0.1)(expo@57.0.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@expo/schema-utils': 57.0.2 '@expo/spawn-async': 1.8.0 '@expo/ws-tunnel': 2.0.0(ws@8.20.1) '@expo/xcpretty': 4.4.4 - '@react-native/dev-middleware': 0.85.3 + '@react-native/dev-middleware': 0.86.0 accepts: 1.3.8 + agent-cli-detector: 0.1.3 arg: 5.0.2 bplist-creator: 0.1.0 bplist-parser: 0.3.2 @@ -7369,8 +7366,8 @@ snapshots: connect: 3.7.0 debug: 4.4.3 dnssd-advertise: 1.1.4 - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - expo-server: 56.0.5 + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo-server: 57.0.1 fetch-nodeshim: 0.4.10 getenv: 2.0.0 glob: 13.0.6 @@ -7395,8 +7392,8 @@ snapshots: ws: 8.20.1 zod: 3.25.76 optionalDependencies: - expo-router: 56.2.11(b3885dfdbc0bd246424088dea0719f34) - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + expo-router: 57.0.7(5993d0f0b9c2956fadb365268fdfb956) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) transitivePeerDependencies: - '@expo/metro-runtime' - bufferutil @@ -7413,31 +7410,12 @@ snapshots: dependencies: node-forge: 1.4.0 - '@expo/config-plugins@56.0.8(typescript@6.0.3)': - dependencies: - '@expo/config-types': 56.0.5 - '@expo/json-file': 10.2.0 - '@expo/plist': 0.7.0 - '@expo/require-utils': 56.1.3(typescript@6.0.3) - '@expo/sdk-runtime-versions': 1.0.0 - chalk: 4.1.2 - debug: 4.4.3 - getenv: 2.0.0 - glob: 13.0.6 - semver: 7.7.4 - slugify: 1.6.9 - xcode: 3.0.1 - xml2js: 0.6.0 - transitivePeerDependencies: - - supports-color - - typescript - - '@expo/config-plugins@56.0.9(typescript@6.0.3)': + '@expo/config-plugins@57.0.5(typescript@6.0.3)': dependencies: - '@expo/config-types': 56.0.6 - '@expo/json-file': 10.2.0 - '@expo/plist': 0.7.0 - '@expo/require-utils': 56.1.3(typescript@6.0.3) + '@expo/config-types': 57.0.2 + '@expo/json-file': 11.0.1 + '@expo/plist': 0.8.1 + '@expo/require-utils': 57.0.3(typescript@6.0.3) '@expo/sdk-runtime-versions': 1.0.0 chalk: 4.1.2 debug: 4.4.3 @@ -7451,16 +7429,14 @@ snapshots: - supports-color - typescript - '@expo/config-types@56.0.5': {} + '@expo/config-types@57.0.2': {} - '@expo/config-types@56.0.6': {} - - '@expo/config@56.0.9(typescript@6.0.3)': + '@expo/config@57.0.5(typescript@6.0.3)': dependencies: - '@expo/config-plugins': 56.0.9(typescript@6.0.3) - '@expo/config-types': 56.0.6 - '@expo/json-file': 10.2.0 - '@expo/require-utils': 56.1.3(typescript@6.0.3) + '@expo/config-plugins': 57.0.5(typescript@6.0.3) + '@expo/config-types': 57.0.2 + '@expo/json-file': 11.0.1 + '@expo/require-utils': 57.0.3(typescript@6.0.3) deepmerge: 4.3.1 getenv: 2.0.0 glob: 13.0.6 @@ -7478,20 +7454,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/devtools@56.0.2(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': + '@expo/devtools@57.0.1(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': dependencies: chalk: 4.1.2 optionalDependencies: react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - '@expo/dom-webview@56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': + '@expo/dom-webview@57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': dependencies: - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - '@expo/env@2.3.0': + '@expo/env@2.4.2': dependencies: chalk: 4.1.2 debug: 4.4.3 @@ -7499,11 +7475,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/expo-modules-macros-plugin@0.2.2': {} + '@expo/expo-modules-macros-plugin@0.6.1': {} - '@expo/fingerprint@0.19.4': + '@expo/fingerprint@0.20.5': dependencies: - '@expo/env': 2.3.0 + '@expo/env': 2.4.2 '@expo/spawn-async': 1.8.0 arg: 5.0.2 chalk: 4.1.2 @@ -7517,9 +7493,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/image-utils@0.10.1(typescript@6.0.3)': + '@expo/image-utils@0.11.3(typescript@6.0.3)': dependencies: - '@expo/require-utils': 56.1.3(typescript@6.0.3) + '@expo/require-utils': 57.0.3(typescript@6.0.3) '@expo/spawn-async': 1.8.0 chalk: 4.1.2 getenv: 2.0.0 @@ -7530,45 +7506,45 @@ snapshots: - supports-color - typescript - '@expo/inline-modules@0.0.12(typescript@6.0.3)': + '@expo/inline-modules@0.1.3(typescript@6.0.3)': dependencies: - '@expo/config-plugins': 56.0.9(typescript@6.0.3) + '@expo/config-plugins': 57.0.5(typescript@6.0.3) transitivePeerDependencies: - supports-color - typescript - '@expo/json-file@10.2.0': + '@expo/json-file@11.0.1': dependencies: '@babel/code-frame': 7.29.0 json5: 2.2.3 - '@expo/local-build-cache-provider@56.0.8(typescript@6.0.3)': + '@expo/local-build-cache-provider@57.0.4(typescript@6.0.3)': dependencies: - '@expo/config': 56.0.9(typescript@6.0.3) + '@expo/config': 57.0.5(typescript@6.0.3) chalk: 4.1.2 transitivePeerDependencies: - supports-color - typescript - '@expo/log-box@56.0.13(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': + '@expo/log-box@57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': dependencies: - '@expo/dom-webview': 56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + '@expo/dom-webview': 57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) anser: 1.4.10 - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) stacktrace-parser: 0.1.11 - '@expo/metro-config@56.0.14(expo@56.0.12)(typescript@6.0.3)': + '@expo/metro-config@57.0.6(expo@57.0.7)(typescript@6.0.3)': dependencies: '@babel/code-frame': 7.29.0 '@babel/core': 7.29.0 '@babel/generator': 7.29.1 - '@expo/config': 56.0.9(typescript@6.0.3) - '@expo/env': 2.3.0 - '@expo/json-file': 10.2.0 + '@expo/config': 57.0.5(typescript@6.0.3) + '@expo/env': 2.4.2 + '@expo/json-file': 11.0.1 '@expo/metro': 56.0.0 - '@expo/require-utils': 56.1.3(typescript@6.0.3) + '@expo/require-utils': 57.0.3(typescript@6.0.3) '@expo/spawn-async': 1.8.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/remapping': 2.3.5 @@ -7578,21 +7554,21 @@ snapshots: debug: 4.4.3 getenv: 2.0.0 glob: 13.0.6 - hermes-parser: 0.33.3 + hermes-parser: 0.36.1 jsc-safe-url: 0.2.4 lightningcss: 1.32.0 picomatch: 4.0.4 postcss: 8.5.15 resolve-from: 5.0.0 optionalDependencies: - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) transitivePeerDependencies: - bufferutil - supports-color - typescript - utf-8-validate - '@expo/metro-file-map@56.0.3': + '@expo/metro-file-map@57.0.1': dependencies: debug: 4.4.3 fb-watchman: 2.0.2 @@ -7603,14 +7579,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/metro-runtime@56.0.15(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': + '@expo/metro-runtime@57.0.6(expo@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': dependencies: - '@expo/log-box': 56.0.13(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + '@expo/log-box': 57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) anser: 1.4.10 - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) pretty-format: 29.7.0 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) stacktrace-parser: 0.1.11 whatwg-fetch: 3.6.20 optionalDependencies: @@ -7637,42 +7613,42 @@ snapshots: - supports-color - utf-8-validate - '@expo/osascript@2.6.0': + '@expo/osascript@2.7.1': dependencies: '@expo/spawn-async': 1.8.0 - '@expo/package-manager@1.12.1': + '@expo/package-manager@1.13.1': dependencies: - '@expo/json-file': 10.2.0 + '@expo/json-file': 11.0.1 '@expo/spawn-async': 1.8.0 chalk: 4.1.2 npm-package-arg: 11.0.3 ora: 3.4.0 resolve-workspace-root: 2.0.1 - '@expo/plist@0.7.0': + '@expo/plist@0.8.1': dependencies: '@xmldom/xmldom': 0.8.12 base64-js: 1.5.1 xmlbuilder: 15.1.1 - '@expo/prebuild-config@56.0.16(typescript@6.0.3)': + '@expo/prebuild-config@57.0.8(typescript@6.0.3)': dependencies: - '@expo/config': 56.0.9(typescript@6.0.3) - '@expo/config-plugins': 56.0.9(typescript@6.0.3) - '@expo/config-types': 56.0.6 - '@expo/image-utils': 0.10.1(typescript@6.0.3) - '@expo/json-file': 10.2.0 - '@react-native/normalize-colors': 0.85.3 + '@expo/config': 57.0.5(typescript@6.0.3) + '@expo/config-plugins': 57.0.5(typescript@6.0.3) + '@expo/config-types': 57.0.2 + '@expo/image-utils': 0.11.3(typescript@6.0.3) + '@expo/json-file': 11.0.1 + '@react-native/normalize-colors': 0.86.0 debug: 4.4.3 - expo-modules-autolinking: 56.0.16(typescript@6.0.3) + expo-modules-autolinking: 57.0.8(typescript@6.0.3) resolve-from: 5.0.0 semver: 7.7.4 transitivePeerDependencies: - supports-color - typescript - '@expo/require-utils@56.1.3(typescript@6.0.3)': + '@expo/require-utils@57.0.3(typescript@6.0.3)': dependencies: '@babel/code-frame': 7.29.0 '@babel/core': 7.29.0 @@ -7682,22 +7658,22 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/router-server@56.0.14(@expo/metro-runtime@56.0.15)(expo-constants@56.0.18)(expo-font@56.0.7)(expo-router@56.2.11)(expo-server@56.0.5)(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@expo/router-server@57.0.3(@expo/metro-runtime@57.0.6)(expo-constants@57.0.6)(expo-font@57.0.1)(expo-router@57.0.7)(expo-server@57.0.1)(expo@57.0.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: debug: 4.4.3 - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - expo-constants: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) - expo-font: 56.0.7(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - expo-server: 56.0.5 + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo-constants: 57.0.6(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) + expo-font: 57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + expo-server: 57.0.1 react: 19.2.3 optionalDependencies: - '@expo/metro-runtime': 56.0.15(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - expo-router: 56.2.11(b3885dfdbc0bd246424088dea0719f34) + '@expo/metro-runtime': 57.0.6(expo@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + expo-router: 57.0.7(5993d0f0b9c2956fadb365268fdfb956) react-dom: 19.2.3(react@19.2.3) transitivePeerDependencies: - supports-color - '@expo/schema-utils@56.0.1': {} + '@expo/schema-utils@57.0.2': {} '@expo/sdk-runtime-versions@1.0.0': {} @@ -7707,18 +7683,17 @@ snapshots: '@expo/sudo-prompt@9.3.2': {} - '@expo/ui@56.0.18(@babel/core@7.29.0)(@types/react@19.2.14)(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': + '@expo/ui@57.0.7(@babel/core@7.29.0)(@types/react@19.2.14)(expo@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': dependencies: - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) sf-symbols-typescript: 2.2.0 vaul: 1.1.2(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) optionalDependencies: '@babel/core': 7.29.0 react-dom: 19.2.3(react@19.2.3) - react-native-reanimated: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-worklets: 0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native-worklets: 0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) transitivePeerDependencies: - '@types/react' - '@types/react-dom' @@ -7733,14 +7708,14 @@ snapshots: chalk: 4.1.2 js-yaml: 4.1.1 - '@gilhrpenner/convex-files-control@0.5.3(@standard-schema/spec@1.1.0)(convex@1.41.0(@clerk/react@6.10.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(react@19.2.3)(typescript@6.0.3)(zod@4.4.2)': + '@gilhrpenner/convex-files-control@0.5.3(@standard-schema/spec@1.1.0)(convex@1.41.0(@clerk/react@6.12.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(react@19.2.3)(typescript@6.0.3)(zod@4.4.2)': dependencies: '@aws-crypto/sha256-js': 5.2.0 '@aws-sdk/client-s3': 3.1037.0 '@aws-sdk/s3-request-presigner': 3.1037.0 - '@convex-dev/action-retrier': 0.3.0(convex@1.41.0(@clerk/react@6.10.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)) - convex: 1.41.0(@clerk/react@6.10.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) - convex-helpers: 0.1.115(@standard-schema/spec@1.1.0)(convex@1.41.0(@clerk/react@6.10.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(react@19.2.3)(typescript@6.0.3)(zod@4.4.2) + '@convex-dev/action-retrier': 0.3.0(convex@1.41.0(@clerk/react@6.12.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)) + convex: 1.41.0(@clerk/react@6.12.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) + convex-helpers: 0.1.115(@standard-schema/spec@1.1.0)(convex@1.41.0(@clerk/react@6.12.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(react@19.2.3)(typescript@6.0.3)(zod@4.4.2) react: 19.2.3 transitivePeerDependencies: - '@standard-schema/spec' @@ -7749,30 +7724,30 @@ snapshots: - typescript - zod - '@gorhom/bottom-sheet@5.2.14(@types/react@19.2.14)(react-native-gesture-handler@2.31.2(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': + '@gorhom/bottom-sheet@5.2.14(@types/react@19.2.14)(react-native-gesture-handler@2.32.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-reanimated@4.5.0(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': dependencies: - '@gorhom/portal': 1.0.14(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + '@gorhom/portal': 1.0.14(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) invariant: 2.2.4 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - react-native-gesture-handler: 2.31.2(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-reanimated: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native-gesture-handler: 2.32.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native-reanimated: 4.5.0(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) optionalDependencies: '@types/react': 19.2.14 - '@gorhom/portal@1.0.14(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': + '@gorhom/portal@1.0.14(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': dependencies: nanoid: 3.3.11 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) '@hugeicons/core-free-icons@4.1.1': {} - '@hugeicons/react-native@1.0.13(react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': + '@hugeicons/react-native@1.0.13(react-native-svg@15.15.4(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': dependencies: react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - react-native-svg: 15.15.4(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native-svg: 15.15.4(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) '@humanfs/core@0.19.2': dependencies: @@ -8238,40 +8213,40 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 - '@react-native-async-storage/async-storage@1.24.0(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))': + '@react-native-async-storage/async-storage@1.24.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))': dependencies: merge-options: 3.0.4 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) optional: true - '@react-native-masked-view/masked-view@0.3.2(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': + '@react-native-masked-view/masked-view@0.3.2(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': dependencies: react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - '@react-native/assets-registry@0.85.3': {} + '@react-native/assets-registry@0.86.0': {} - '@react-native/babel-plugin-codegen@0.85.3(@babel/core@7.29.0)': + '@react-native/babel-plugin-codegen@0.86.0(@babel/core@7.29.0)': dependencies: '@babel/traverse': 7.29.0 - '@react-native/codegen': 0.85.3(@babel/core@7.29.0) + '@react-native/codegen': 0.86.0(@babel/core@7.29.0) transitivePeerDependencies: - '@babel/core' - supports-color - '@react-native/codegen@0.85.3(@babel/core@7.29.0)': + '@react-native/codegen@0.86.0(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/parser': 7.29.3 - hermes-parser: 0.33.3 + hermes-parser: 0.36.0 invariant: 2.2.4 nullthrows: 1.1.1 tinyglobby: 0.2.16 yargs: 17.7.2 - '@react-native/community-cli-plugin@0.85.3': + '@react-native/community-cli-plugin@0.86.0': dependencies: - '@react-native/dev-middleware': 0.85.3 + '@react-native/dev-middleware': 0.86.0 debug: 4.4.3 invariant: 2.2.4 metro: 0.84.4 @@ -8283,9 +8258,9 @@ snapshots: - supports-color - utf-8-validate - '@react-native/debugger-frontend@0.85.3': {} + '@react-native/debugger-frontend@0.86.0': {} - '@react-native/debugger-shell@0.85.3': + '@react-native/debugger-shell@0.86.0': dependencies: cross-spawn: 7.0.6 debug: 4.4.3 @@ -8293,11 +8268,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@react-native/dev-middleware@0.85.3': + '@react-native/dev-middleware@0.86.0': dependencies: '@isaacs/ttlcache': 1.4.1 - '@react-native/debugger-frontend': 0.85.3 - '@react-native/debugger-shell': 0.85.3 + '@react-native/debugger-frontend': 0.86.0 + '@react-native/debugger-shell': 0.86.0 chrome-launcher: 0.15.2 chromium-edge-launcher: 0.3.0 connect: 3.7.0 @@ -8312,37 +8287,37 @@ snapshots: - supports-color - utf-8-validate - '@react-native/gradle-plugin@0.85.3': {} + '@react-native/gradle-plugin@0.86.0(patch_hash=c4be299b024e0521f7718edfd55a4375b38c856911b0ac83ea7ec59939555ed0)': {} - '@react-native/js-polyfills@0.85.3': {} + '@react-native/js-polyfills@0.86.0': {} - '@react-native/normalize-colors@0.85.3': {} + '@react-native/normalize-colors@0.86.0': {} - '@react-native/virtualized-lists@0.85.3(@types/react@19.2.14)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': + '@react-native/virtualized-lists@0.86.0(@types/react@19.2.14)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) optionalDependencies: '@types/react': 19.2.14 - '@rn-primitives/portal@1.4.0(@types/react@19.2.14)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': + '@rn-primitives/portal@1.4.0(@types/react@19.2.14)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': dependencies: react: 19.2.3 zustand: 5.0.12(@types/react@19.2.14)(react@19.2.3) optionalDependencies: - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) transitivePeerDependencies: - '@types/react' - immer - use-sync-external-store - '@rn-primitives/slot@1.4.0(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': + '@rn-primitives/slot@1.4.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': dependencies: react: 19.2.3 optionalDependencies: - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) '@rolldown/binding-android-arm64@1.0.2': optional: true @@ -8743,9 +8718,9 @@ snapshots: dependencies: tslib: 2.8.1 - '@solana-mobile/mobile-wallet-adapter-protocol-web3js@2.2.8(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(typescript@6.0.3)': + '@solana-mobile/mobile-wallet-adapter-protocol-web3js@2.2.8(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(typescript@6.0.3)': dependencies: - '@solana-mobile/mobile-wallet-adapter-protocol': 2.2.8(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(typescript@6.0.3) + '@solana-mobile/mobile-wallet-adapter-protocol': 2.2.8(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(typescript@6.0.3) bs58: 6.0.0 js-base64: 3.7.8 transitivePeerDependencies: @@ -8753,39 +8728,39 @@ snapshots: - react-native - typescript - '@solana-mobile/mobile-wallet-adapter-protocol@2.2.8(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(typescript@6.0.3)': + '@solana-mobile/mobile-wallet-adapter-protocol@2.2.8(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(typescript@6.0.3)': dependencies: '@solana/codecs-strings': 6.9.0(typescript@6.0.3) '@solana/wallet-standard-features': 1.3.0 '@solana/wallet-standard-util': 1.1.2 '@wallet-standard/core': 1.1.1 js-base64: 3.7.8 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript - '@solana-mobile/wallet-adapter-mobile@2.2.8(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(typescript@6.0.3)': + '@solana-mobile/wallet-adapter-mobile@2.2.8(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(typescript@6.0.3)': dependencies: - '@solana-mobile/mobile-wallet-adapter-protocol': 2.2.8(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(typescript@6.0.3) - '@solana-mobile/mobile-wallet-adapter-protocol-web3js': 2.2.8(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(typescript@6.0.3) - '@solana-mobile/wallet-standard-mobile': 0.5.2(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(typescript@6.0.3) + '@solana-mobile/mobile-wallet-adapter-protocol': 2.2.8(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(typescript@6.0.3) + '@solana-mobile/mobile-wallet-adapter-protocol-web3js': 2.2.8(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(typescript@6.0.3) + '@solana-mobile/wallet-standard-mobile': 0.5.2(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(typescript@6.0.3) '@solana/wallet-adapter-base': 0.9.27 '@solana/wallet-standard-features': 1.3.0 '@wallet-standard/core': 1.1.1 bs58: 6.0.0 js-base64: 3.7.8 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) tslib: 2.8.1 optionalDependencies: - '@react-native-async-storage/async-storage': 1.24.0(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) + '@react-native-async-storage/async-storage': 1.24.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript - '@solana-mobile/wallet-standard-mobile@0.5.2(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(typescript@6.0.3)': + '@solana-mobile/wallet-standard-mobile@0.5.2(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(typescript@6.0.3)': dependencies: - '@solana-mobile/mobile-wallet-adapter-protocol': 2.2.8(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(typescript@6.0.3) + '@solana-mobile/mobile-wallet-adapter-protocol': 2.2.8(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(typescript@6.0.3) '@solana/wallet-standard-chains': 1.1.1 '@solana/wallet-standard-features': 1.3.0 '@wallet-standard/base': 1.1.0 @@ -8796,7 +8771,7 @@ snapshots: qrcode: 1.5.4 tslib: 2.8.1 optionalDependencies: - '@react-native-async-storage/async-storage': 1.24.0(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) + '@react-native-async-storage/async-storage': 1.24.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) transitivePeerDependencies: - fastestsmallesttextencoderdecoder - react-native @@ -8837,9 +8812,9 @@ snapshots: '@wallet-standard/features': 1.1.0 eventemitter3: 5.0.4 - '@solana/wallet-adapter-react@0.15.39(bs58@6.0.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3)': + '@solana/wallet-adapter-react@0.15.39(bs58@6.0.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3)': dependencies: - '@solana-mobile/wallet-adapter-mobile': 2.2.8(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(typescript@6.0.3) + '@solana-mobile/wallet-adapter-mobile': 2.2.8(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(typescript@6.0.3) '@solana/wallet-adapter-base': 0.9.27 '@solana/wallet-standard-wallet-adapter-react': 1.1.4(@solana/wallet-adapter-base@0.9.27)(bs58@6.0.0)(react@19.2.3) react: 19.2.3 @@ -9331,6 +9306,8 @@ snapshots: agent-base@7.1.4: {} + agent-cli-detector@0.1.3: {} + ai@6.0.174(zod@4.4.2): dependencies: '@ai-sdk/gateway': 3.0.109(zod@4.4.2) @@ -9425,69 +9402,21 @@ snapshots: babel-plugin-react-native-web@0.21.2: {} - babel-plugin-syntax-hermes-parser@0.33.3: + babel-plugin-syntax-hermes-parser@0.36.0: dependencies: - hermes-parser: 0.33.3 + hermes-parser: 0.36.0 - babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.29.0): + babel-plugin-syntax-hermes-parser@0.36.1: dependencies: - '@babel/plugin-syntax-flow': 7.28.6(@babel/core@7.29.0) - transitivePeerDependencies: - - '@babel/core' + hermes-parser: 0.36.1 - babel-preset-expo@56.0.10(@babel/core@7.29.0)(@babel/runtime@7.29.2)(expo@56.0.12)(react-refresh@0.14.2): + babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.29.0): dependencies: - '@babel/generator': 7.29.1 - '@babel/helper-module-imports': 7.28.6 - '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-syntax-export-default-from': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) - '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.0) - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0) - '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) - '@react-native/babel-plugin-codegen': 0.85.3(@babel/core@7.29.0) - babel-plugin-react-compiler: 1.0.0 - babel-plugin-react-native-web: 0.21.2 - babel-plugin-syntax-hermes-parser: 0.33.3 - babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.29.0) - debug: 4.4.3 - react-refresh: 0.14.2 - optionalDependencies: - '@babel/runtime': 7.29.2 - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + '@babel/plugin-syntax-flow': 7.28.6(@babel/core@7.29.0) transitivePeerDependencies: - '@babel/core' - - supports-color - babel-preset-expo@56.0.15(@babel/core@7.29.0)(@babel/runtime@7.29.2)(expo@56.0.12)(react-refresh@0.14.2): + babel-preset-expo@57.0.3(@babel/core@7.29.0)(@babel/runtime@7.29.2)(expo@57.0.7)(react-refresh@0.14.2): dependencies: '@babel/generator': 7.29.1 '@babel/helper-module-imports': 7.28.6 @@ -9525,16 +9454,16 @@ snapshots: '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0) '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) - '@react-native/babel-plugin-codegen': 0.85.3(@babel/core@7.29.0) + '@react-native/babel-plugin-codegen': 0.86.0(@babel/core@7.29.0) babel-plugin-react-compiler: 1.0.0 babel-plugin-react-native-web: 0.21.2 - babel-plugin-syntax-hermes-parser: 0.33.3 + babel-plugin-syntax-hermes-parser: 0.36.1 babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.29.0) debug: 4.4.3 react-refresh: 0.14.2 optionalDependencies: '@babel/runtime': 7.29.2 - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) transitivePeerDependencies: - '@babel/core' - supports-color @@ -9770,26 +9699,26 @@ snapshots: convert-source-map@2.0.0: {} - convex-helpers@0.1.115(@standard-schema/spec@1.1.0)(convex@1.41.0(@clerk/react@6.10.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(react@19.2.3)(typescript@6.0.3)(zod@4.4.2): + convex-helpers@0.1.115(@standard-schema/spec@1.1.0)(convex@1.41.0(@clerk/react@6.12.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(react@19.2.3)(typescript@6.0.3)(zod@4.4.2): dependencies: - convex: 1.41.0(@clerk/react@6.10.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) + convex: 1.41.0(@clerk/react@6.12.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) optionalDependencies: '@standard-schema/spec': 1.1.0 react: 19.2.3 typescript: 6.0.3 zod: 4.4.2 - convex-test@0.0.53(convex@1.41.0(@clerk/react@6.10.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)): + convex-test@0.0.53(convex@1.41.0(@clerk/react@6.12.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)): dependencies: - convex: 1.41.0(@clerk/react@6.10.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) + convex: 1.41.0(@clerk/react@6.12.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) - convex@1.41.0(@clerk/react@6.10.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3): + convex@1.41.0(@clerk/react@6.12.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3): dependencies: esbuild: 0.27.0 prettier: 3.8.3 ws: 8.20.1 optionalDependencies: - '@clerk/react': 6.10.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@clerk/react': 6.12.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: 19.2.3 transitivePeerDependencies: - bufferutil @@ -10084,137 +10013,137 @@ snapshots: expect-type@1.3.0: {} - expo-application@56.0.3(expo@56.0.12): + expo-application@57.0.2(expo@57.0.7): dependencies: - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - expo-asset@56.0.17(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3): + expo-asset@57.0.6(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3): dependencies: - '@expo/image-utils': 0.10.1(typescript@6.0.3) - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - expo-constants: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) + '@expo/image-utils': 0.11.3(typescript@6.0.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo-constants: 57.0.6(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) transitivePeerDependencies: - supports-color - typescript - expo-constants@56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)): + expo-constants@57.0.6(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)): dependencies: - '@expo/env': 2.3.0 - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + '@expo/env': 2.4.2 + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) transitivePeerDependencies: - supports-color - expo-crypto@56.0.4(expo@56.0.12): + expo-crypto@57.0.1(expo@57.0.7): dependencies: - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - expo-dev-client@56.0.20(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)): + expo-dev-client@57.0.7(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)): dependencies: - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - expo-dev-launcher: 56.0.20(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) - expo-dev-menu: 56.0.17(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) - expo-dev-menu-interface: 56.0.1(expo@56.0.12) - expo-manifests: 56.0.4(expo@56.0.12) - expo-updates-interface: 56.0.2(expo@56.0.12) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo-dev-launcher: 57.0.7(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) + expo-dev-menu: 57.0.7(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) + expo-dev-menu-interface: 57.0.0(expo@57.0.7) + expo-manifests: 57.0.1(expo@57.0.7) + expo-updates-interface: 57.0.1(expo@57.0.7) transitivePeerDependencies: - react-native - expo-dev-launcher@56.0.20(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)): + expo-dev-launcher@57.0.7(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)): dependencies: - '@expo/schema-utils': 56.0.1 - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - expo-dev-menu: 56.0.17(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) - expo-manifests: 56.0.4(expo@56.0.12) - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + '@expo/schema-utils': 57.0.2 + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo-dev-menu: 57.0.7(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) + expo-manifests: 57.0.1(expo@57.0.7) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - expo-dev-menu-interface@56.0.1(expo@56.0.12): + expo-dev-menu-interface@57.0.0(expo@57.0.7): dependencies: - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - expo-dev-menu@56.0.17(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)): + expo-dev-menu@57.0.7(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)): dependencies: - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - expo-dev-menu-interface: 56.0.1(expo@56.0.12) - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo-dev-menu-interface: 57.0.0(expo@57.0.7) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - expo-device@56.0.4(expo@56.0.12): + expo-device@57.0.1(expo@57.0.7): dependencies: - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) ua-parser-js: 0.7.41 - expo-document-picker@56.0.4(expo@56.0.12): + expo-document-picker@57.0.1(expo@57.0.7): dependencies: - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - expo-eas-client@56.0.1: {} + expo-eas-client@57.0.1: {} - expo-file-system@56.0.8(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)): + expo-file-system@57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)): dependencies: - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - expo-font@56.0.7(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + expo-font@57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) fontfaceobserver: 2.3.0 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - expo-glass-effect@56.0.4(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + expo-glass-effect@57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - expo-image-loader@56.0.3(expo@56.0.12): + expo-image-loader@57.0.1(expo@57.0.7): dependencies: - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - expo-image-picker@56.0.18(expo@56.0.12): + expo-image-picker@57.0.5(expo@57.0.7): dependencies: - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - expo-image-loader: 56.0.3(expo@56.0.12) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo-image-loader: 57.0.1(expo@57.0.7) - expo-json-utils@56.0.0: {} + expo-json-utils@57.0.1: {} - expo-keep-awake@56.0.3(expo@56.0.12)(react@19.2.3): + expo-keep-awake@57.0.1(expo@57.0.7)(react@19.2.3): dependencies: - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) react: 19.2.3 - expo-linear-gradient@56.0.4(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + expo-linear-gradient@57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - expo-linking@56.0.14(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + expo-linking@57.0.3(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: - expo-constants: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) + expo-constants: 57.0.6(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) invariant: 2.2.4 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) transitivePeerDependencies: - expo - supports-color - expo-localization@56.0.6(expo@56.0.12)(react@19.2.3): + expo-localization@57.0.1(expo@57.0.7)(react@19.2.3): dependencies: - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) react: 19.2.3 rtl-detect: 1.1.2 - expo-manifests@56.0.4(expo@56.0.12): + expo-manifests@57.0.1(expo@57.0.7): dependencies: - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - expo-json-utils: 56.0.0 + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo-json-utils: 57.0.1 - expo-modules-autolinking@56.0.16(typescript@6.0.3): + expo-modules-autolinking@57.0.8(typescript@6.0.3): dependencies: - '@expo/require-utils': 56.1.3(typescript@6.0.3) + '@expo/require-utils': 57.0.3(typescript@6.0.3) '@expo/spawn-async': 1.8.0 chalk: 4.1.2 commander: 7.2.0 @@ -10222,55 +10151,55 @@ snapshots: - supports-color - typescript - expo-modules-core@56.0.17(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + expo-modules-core@57.0.6(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: - '@expo/expo-modules-macros-plugin': 0.2.2 - expo-modules-jsi: 56.0.10(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) + '@expo/expo-modules-macros-plugin': 0.6.1 + expo-modules-jsi: 57.0.3(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) invariant: 2.2.4 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) optionalDependencies: - react-native-worklets: 0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native-worklets: 0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - expo-modules-jsi@56.0.10(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)): + expo-modules-jsi@57.0.3(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)): dependencies: - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - expo-notifications@56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3): + expo-notifications@57.0.6(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3): dependencies: - '@expo/image-utils': 0.10.1(typescript@6.0.3) + '@expo/image-utils': 0.11.3(typescript@6.0.3) abort-controller: 3.0.0 badgin: 1.2.3 - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - expo-application: 56.0.3(expo@56.0.12) - expo-constants: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo-application: 57.0.2(expo@57.0.7) + expo-constants: 57.0.6(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) transitivePeerDependencies: - supports-color - typescript - expo-router@56.2.11(b3885dfdbc0bd246424088dea0719f34): + expo-router@57.0.7(5993d0f0b9c2956fadb365268fdfb956): dependencies: - '@expo/log-box': 56.0.13(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - '@expo/metro-runtime': 56.0.15(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - '@expo/schema-utils': 56.0.1 - '@expo/ui': 56.0.18(@babel/core@7.29.0)(@types/react@19.2.14)(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + '@expo/log-box': 57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + '@expo/metro-runtime': 57.0.6(expo@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + '@expo/schema-utils': 57.0.2 + '@expo/ui': 57.0.7(@babel/core@7.29.0)(@types/react@19.2.14)(expo@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.3) '@radix-ui/react-tabs': 1.1.13(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-native-masked-view/masked-view': 0.3.2(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + '@react-native-masked-view/masked-view': 0.3.2(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) '@testing-library/jest-dom': 6.9.1 '@testing-library/user-event': 14.6.1 client-only: 0.0.1 color: 4.2.3 debug: 4.4.3 escape-string-regexp: 4.0.0 - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - expo-constants: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) - expo-glass-effect: 56.0.4(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - expo-linking: 56.0.14(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - expo-server: 56.0.5 - expo-symbols: 56.0.6(expo-font@56.0.7)(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo-constants: 57.0.6(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) + expo-glass-effect: 57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + expo-linking: 57.0.3(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + expo-server: 57.0.1 + expo-symbols: 57.0.1(expo-font@57.0.1)(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) fast-deep-equal: 3.1.3 invariant: 2.2.4 nanoid: 3.3.12 @@ -10278,10 +10207,10 @@ snapshots: react: 19.2.3 react-fast-compare: 3.2.2 react-is: 19.2.5 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - react-native-drawer-layout: 4.2.4(react-native-gesture-handler@2.31.2(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-safe-area-context: 5.7.0(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-screens: 4.25.2(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native-drawer-layout: 4.2.4(react-native-gesture-handler@2.32.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-reanimated@4.5.0(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native-safe-area-context: 5.7.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native-screens: 4.25.2(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) server-only: 0.0.1 sf-symbols-typescript: 2.2.0 shallowequal: 1.1.0 @@ -10289,8 +10218,8 @@ snapshots: vaul: 1.1.2(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) optionalDependencies: react-dom: 19.2.3(react@19.2.3) - react-native-gesture-handler: 2.31.2(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-reanimated: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native-gesture-handler: 2.32.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native-reanimated: 4.5.0(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) transitivePeerDependencies: - '@babel/core' - '@testing-library/dom' @@ -10300,106 +10229,106 @@ snapshots: - react-native-worklets - supports-color - expo-secure-store@56.0.4(expo@56.0.12): + expo-secure-store@57.0.1(expo@57.0.7): dependencies: - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - expo-server@56.0.5: {} + expo-server@57.0.1: {} - expo-splash-screen@56.0.10(expo@56.0.12)(typescript@6.0.3): + expo-splash-screen@57.0.4(expo@57.0.7)(typescript@6.0.3): dependencies: - '@expo/config-plugins': 56.0.8(typescript@6.0.3) - '@expo/image-utils': 0.10.1(typescript@6.0.3) - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + '@expo/config-plugins': 57.0.5(typescript@6.0.3) + '@expo/image-utils': 0.11.3(typescript@6.0.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) xml2js: 0.6.0 transitivePeerDependencies: - supports-color - typescript - expo-status-bar@56.0.4(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + expo-status-bar@57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - expo-structured-headers@56.0.0: {} + expo-structured-headers@57.0.0: {} - expo-symbols@56.0.6(expo-font@56.0.7)(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + expo-symbols@57.0.1(expo-font@57.0.1)(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: '@expo-google-fonts/material-symbols': 0.4.36 - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - expo-font: 56.0.7(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo-font: 57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) sf-symbols-typescript: 2.2.0 - expo-system-ui@56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)): + expo-system-ui@57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)): dependencies: - '@react-native/normalize-colors': 0.85.3 + '@react-native/normalize-colors': 0.86.0 debug: 4.4.3 - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) transitivePeerDependencies: - supports-color - expo-updates-interface@56.0.2(expo@56.0.12): + expo-updates-interface@57.0.1(expo@57.0.7): dependencies: - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - expo-updates@56.0.19(expo-dev-client@56.0.20(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)))(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + expo-updates@57.0.8(expo-dev-client@57.0.7(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)))(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: '@expo/code-signing-certificates': 0.0.6 - '@expo/plist': 0.7.0 + '@expo/plist': 0.8.1 '@expo/spawn-async': 1.8.0 arg: 4.1.0 chalk: 4.1.2 debug: 4.4.3 - expo: 56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - expo-eas-client: 56.0.1 - expo-manifests: 56.0.4(expo@56.0.12) - expo-structured-headers: 56.0.0 - expo-updates-interface: 56.0.2(expo@56.0.12) + expo: 57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo-eas-client: 57.0.1 + expo-manifests: 57.0.1(expo@57.0.7) + expo-structured-headers: 57.0.0 + expo-updates-interface: 57.0.1(expo@57.0.7) getenv: 2.0.0 glob: 13.0.6 ignore: 5.3.2 nullthrows: 1.1.1 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) resolve-from: 5.0.0 optionalDependencies: - expo-dev-client: 56.0.20(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) + expo-dev-client: 57.0.7(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) transitivePeerDependencies: - supports-color - expo@56.0.12(@babel/core@7.29.0)(@expo/metro-runtime@56.0.15)(expo-router@56.2.11)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3): + expo@57.0.7(@babel/core@7.29.0)(@expo/metro-runtime@57.0.6)(expo-router@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3): dependencies: '@babel/runtime': 7.29.2 - '@expo/cli': 56.1.16(@expo/metro-runtime@56.0.15)(expo-constants@56.0.18)(expo-font@56.0.7)(expo-router@56.2.11)(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - '@expo/config': 56.0.9(typescript@6.0.3) - '@expo/config-plugins': 56.0.9(typescript@6.0.3) - '@expo/devtools': 56.0.2(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - '@expo/dom-webview': 56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - '@expo/fingerprint': 0.19.4 - '@expo/local-build-cache-provider': 56.0.8(typescript@6.0.3) - '@expo/log-box': 56.0.13(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + '@expo/cli': 57.0.9(@expo/metro-runtime@57.0.6)(expo-constants@57.0.6)(expo-font@57.0.1)(expo-router@57.0.7)(expo@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + '@expo/config': 57.0.5(typescript@6.0.3) + '@expo/config-plugins': 57.0.5(typescript@6.0.3) + '@expo/devtools': 57.0.1(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + '@expo/dom-webview': 57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + '@expo/fingerprint': 0.20.5 + '@expo/local-build-cache-provider': 57.0.4(typescript@6.0.3) + '@expo/log-box': 57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) '@expo/metro': 56.0.0 - '@expo/metro-config': 56.0.14(expo@56.0.12)(typescript@6.0.3) + '@expo/metro-config': 57.0.6(expo@57.0.7)(typescript@6.0.3) '@ungap/structured-clone': 1.3.0 - babel-preset-expo: 56.0.15(@babel/core@7.29.0)(@babel/runtime@7.29.2)(expo@56.0.12)(react-refresh@0.14.2) - expo-asset: 56.0.17(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - expo-constants: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) - expo-file-system: 56.0.8(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) - expo-font: 56.0.7(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - expo-keep-awake: 56.0.3(expo@56.0.12)(react@19.2.3) - expo-modules-autolinking: 56.0.16(typescript@6.0.3) - expo-modules-core: 56.0.17(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + babel-preset-expo: 57.0.3(@babel/core@7.29.0)(@babel/runtime@7.29.2)(expo@57.0.7)(react-refresh@0.14.2) + expo-asset: 57.0.6(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + expo-constants: 57.0.6(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) + expo-file-system: 57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) + expo-font: 57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + expo-keep-awake: 57.0.1(expo@57.0.7)(react@19.2.3) + expo-modules-autolinking: 57.0.8(typescript@6.0.3) + expo-modules-core: 57.0.6(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) pretty-format: 29.7.0 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) react-refresh: 0.14.2 whatwg-url-minimum: 0.1.2 optionalDependencies: - '@expo/metro-runtime': 56.0.15(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + '@expo/metro-runtime': 57.0.6(expo@57.0.7)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react-dom: 19.2.3(react@19.2.3) transitivePeerDependencies: - '@babel/core' @@ -10604,26 +10533,32 @@ snapshots: dependencies: function-bind: 1.1.2 - hermes-compiler@250829098.0.10: {} + hermes-compiler@250829098.0.14: {} hermes-estree@0.25.1: {} - hermes-estree@0.33.3: {} - hermes-estree@0.35.0: {} + hermes-estree@0.36.0: {} + + hermes-estree@0.36.1: {} + hermes-parser@0.25.1: dependencies: hermes-estree: 0.25.1 - hermes-parser@0.33.3: - dependencies: - hermes-estree: 0.33.3 - hermes-parser@0.35.0: dependencies: hermes-estree: 0.35.0 + hermes-parser@0.36.0: + dependencies: + hermes-estree: 0.36.0 + + hermes-parser@0.36.1: + dependencies: + hermes-estree: 0.36.1 + hoist-non-react-statics@3.3.2: dependencies: react-is: 16.13.1 @@ -11221,11 +11156,11 @@ snapshots: nanoid@3.3.12: {} - nativewind@4.2.3(patch_hash=c2045c72c9abacb9347d92d0e80f014cb462e8ea3af0d1b237b7ea467ce26449)(react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-safe-area-context@5.7.0(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(tailwindcss@3.4.1): + nativewind@4.2.3(patch_hash=c2045c72c9abacb9347d92d0e80f014cb462e8ea3af0d1b237b7ea467ce26449)(react-native-reanimated@4.5.0(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-safe-area-context@5.7.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(tailwindcss@3.4.1): dependencies: comment-json: 4.6.2 debug: 4.4.3 - react-native-css-interop: 0.2.3(react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-safe-area-context@5.7.0(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(tailwindcss@3.4.1) + react-native-css-interop: 0.2.3(react-native-reanimated@4.5.0(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-safe-area-context@5.7.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(tailwindcss@3.4.1) tailwindcss: 3.4.1 transitivePeerDependencies: - react @@ -11565,18 +11500,18 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - posthog-react-native@4.50.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)))(expo-application@56.0.3(expo@56.0.12))(expo-device@56.0.4(expo@56.0.12))(expo-file-system@56.0.8(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)))(expo-localization@56.0.6(expo@56.0.12)(react@19.2.3))(react-native-safe-area-context@5.7.0(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)): + posthog-react-native@4.50.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)))(expo-application@57.0.2(expo@57.0.7))(expo-device@57.0.1(expo@57.0.7))(expo-file-system@57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)))(expo-localization@57.0.1(expo@57.0.7)(react@19.2.3))(react-native-safe-area-context@5.7.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)): dependencies: '@posthog/core': 1.36.0 '@posthog/types': 1.391.0 optionalDependencies: - '@react-native-async-storage/async-storage': 1.24.0(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) - expo-application: 56.0.3(expo@56.0.12) - expo-device: 56.0.4(expo@56.0.12) - expo-file-system: 56.0.8(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) - expo-localization: 56.0.6(expo@56.0.12)(react@19.2.3) - react-native-safe-area-context: 5.7.0(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-svg: 15.15.4(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + '@react-native-async-storage/async-storage': 1.24.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) + expo-application: 57.0.2(expo@57.0.7) + expo-device: 57.0.1(expo@57.0.7) + expo-file-system: 57.0.1(expo@57.0.7)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)) + expo-localization: 57.0.1(expo@57.0.7)(react@19.2.3) + react-native-safe-area-context: 5.7.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native-svg: 15.15.4(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) preact@10.24.2: {} @@ -11653,7 +11588,7 @@ snapshots: react-is@19.2.5: {} - react-native-css-interop@0.2.3(react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-safe-area-context@5.7.0(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(tailwindcss@3.4.1): + react-native-css-interop@0.2.3(react-native-reanimated@4.5.0(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-safe-area-context@5.7.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)(tailwindcss@3.4.1): dependencies: '@babel/helper-module-imports': 7.28.6 '@babel/traverse': 7.29.0 @@ -11661,103 +11596,103 @@ snapshots: debug: 4.4.3 lightningcss: 1.27.0 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - react-native-reanimated: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native-reanimated: 4.5.0(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) semver: 7.7.4 tailwindcss: 3.4.1 optionalDependencies: - react-native-safe-area-context: 5.7.0(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-svg: 15.15.4(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native-safe-area-context: 5.7.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native-svg: 15.15.4(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) transitivePeerDependencies: - supports-color - react-native-drawer-layout@4.2.4(react-native-gesture-handler@2.31.2(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + react-native-drawer-layout@4.2.4(react-native-gesture-handler@2.32.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-reanimated@4.5.0(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: color: 4.2.3 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - react-native-gesture-handler: 2.31.2(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-reanimated: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native-gesture-handler: 2.32.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native-reanimated: 4.5.0(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) use-latest-callback: 0.2.6(react@19.2.3) - react-native-gesture-handler@2.31.2(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + react-native-gesture-handler@2.32.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: '@egjs/hammerjs': 2.0.17 '@types/react-test-renderer': 19.1.0 hoist-non-react-statics: 3.3.2 invariant: 2.2.4 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - react-native-is-edge-to-edge@1.3.1(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + react-native-is-edge-to-edge@1.3.1(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - react-native-keyboard-controller@1.21.6(react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + react-native-keyboard-controller@1.21.9(patch_hash=1cd17f55cdd7d16ec356e3827388305c05115f1ecd38a234cd1d0e1e05d66f73)(react-native-reanimated@4.5.0(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - react-native-is-edge-to-edge: 1.3.1(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-reanimated: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native-is-edge-to-edge: 1.3.1(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native-reanimated: 4.5.0(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-nitro-modules@0.35.10(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + react-native-nitro-modules@0.35.10(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - react-native-nitro-speech@0.4.8(react-native-nitro-modules@0.35.10(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + react-native-nitro-speech@0.4.8(react-native-nitro-modules@0.35.10(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - react-native-nitro-modules: 0.35.10(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native-nitro-modules: 0.35.10(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + react-native-reanimated@4.5.0(react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - react-native-is-edge-to-edge: 1.3.1(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-worklets: 0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native-is-edge-to-edge: 1.3.1(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native-worklets: 0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) semver: 7.7.4 - react-native-safe-area-context@5.7.0(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + react-native-safe-area-context@5.7.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - react-native-screens@4.25.2(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + react-native-screens@4.25.2(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: react: 19.2.3 react-freeze: 1.0.4(react@19.2.3) - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) warn-once: 0.1.1 - react-native-svg-transformer@1.5.3(react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(typescript@6.0.3): + react-native-svg-transformer@1.5.3(react-native-svg@15.15.4(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(typescript@6.0.3): dependencies: '@svgr/core': 8.1.0(typescript@6.0.3) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@6.0.3)) '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@6.0.3))(typescript@6.0.3) path-dirname: 1.0.2 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) - react-native-svg: 15.15.4(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native-svg: 15.15.4(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) transitivePeerDependencies: - supports-color - typescript - react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + react-native-svg@15.15.4(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: css-select: 5.2.2 css-tree: 1.1.3 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) warn-once: 0.1.1 - react-native-url-polyfill@2.0.0(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)): + react-native-url-polyfill@2.0.0(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3)): dependencies: - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) whatwg-url-without-unicode: 8.0.0-3 - react-native-worklets@0.8.3(@babel/core@7.29.0)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + react-native-worklets@0.10.0(@babel/core@7.29.0)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0) @@ -11769,30 +11704,31 @@ snapshots: '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.29.0) '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0) '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) + '@babel/types': 7.29.0 convert-source-map: 2.0.0 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) + react-native: 0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3) semver: 7.7.4 transitivePeerDependencies: - supports-color - react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3): + react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3): dependencies: - '@react-native/assets-registry': 0.85.3 - '@react-native/codegen': 0.85.3(@babel/core@7.29.0) - '@react-native/community-cli-plugin': 0.85.3 - '@react-native/gradle-plugin': 0.85.3 - '@react-native/js-polyfills': 0.85.3 - '@react-native/normalize-colors': 0.85.3 - '@react-native/virtualized-lists': 0.85.3(@types/react@19.2.14)(react-native@0.85.3(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + '@react-native/assets-registry': 0.86.0 + '@react-native/codegen': 0.86.0(@babel/core@7.29.0) + '@react-native/community-cli-plugin': 0.86.0 + '@react-native/gradle-plugin': 0.86.0(patch_hash=c4be299b024e0521f7718edfd55a4375b38c856911b0ac83ea7ec59939555ed0) + '@react-native/js-polyfills': 0.86.0 + '@react-native/normalize-colors': 0.86.0 + '@react-native/virtualized-lists': 0.86.0(@types/react@19.2.14)(react-native@0.86.0(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 - babel-plugin-syntax-hermes-parser: 0.33.3 + babel-plugin-syntax-hermes-parser: 0.36.0 base64-js: 1.5.1 commander: 12.1.0 flow-enums-runtime: 0.0.6 - hermes-compiler: 250829098.0.10 + hermes-compiler: 250829098.0.14 invariant: 2.2.4 memoize-one: 5.2.1 metro-runtime: 0.84.4 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 25c2a074..c845854b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,10 +1,10 @@ allowBuilds: - esbuild: true - "@clerk/shared": false + '@clerk/shared': false browser-tabs-lock: false bufferutil: false core-js: false dtrace-provider: false + esbuild: true msgpackr-extract: false tesseract.js: false utf-8-validate: false @@ -13,5 +13,7 @@ onlyBuiltDependencies: - esbuild patchedDependencies: + '@react-native/gradle-plugin@0.86.0': patches/@react-native__gradle-plugin@0.86.0.patch nativewind@4.2.3: patches/nativewind@4.2.3.patch oxc-parser@0.130.0: patches/oxc-parser@0.130.0.patch + react-native-keyboard-controller@1.21.9: patches/react-native-keyboard-controller@1.21.9.patch diff --git a/src/lib/theme.ts b/src/lib/theme.ts index 585c6771..e17dc04f 100644 --- a/src/lib/theme.ts +++ b/src/lib/theme.ts @@ -25,7 +25,7 @@ import { type ThemePreference, } from "~/lib/theme-preference"; -export type DayovaThemeColors = { +type DayovaThemeColors = { [Key in keyof typeof DAYOVA_DESIGN_SYSTEM.colors]: string; }; @@ -58,7 +58,7 @@ const DARK_COLORS = { path4: "#A7AAB4", } satisfies DayovaThemeColors; -export const DAYOVA_THEME_COLORS = { +const DAYOVA_THEME_COLORS = { light: LIGHT_COLORS, dark: DARK_COLORS, } as const; @@ -90,8 +90,6 @@ export const NAV_THEMES: Record = { }, }; -export const NAV_THEME: Theme = NAV_THEMES.light; - type ThemeContextValue = { colors: (typeof DAYOVA_THEME_COLORS)[ResolvedTheme]; isDark: boolean; From 86364a1d3643a2643efb0506c98014adc5a8f729 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20R=C3=B6ssner?= Date: Sun, 19 Jul 2026 19:41:41 +0200 Subject: [PATCH 2/7] Validate and fix Expo 57 on iOS --- app.config.ts | 2 +- docs/bottom-sheets.md | 2 +- modules/dayova-system-appearance/LICENSE | 21 +++ .../expo-module.config.json | 6 + modules/dayova-system-appearance/index.ts | 2 + .../ios/DayovaSystemAppearance.podspec | 20 +++ .../ios/DayovaSystemAppearanceModule.swift | 122 ++++++++++++++++++ .../src/DayovaSystemAppearance.types.ts | 9 ++ .../src/DayovaSystemAppearanceModule.ts | 14 ++ src/app/_layout.tsx | 74 ++++++----- src/components/analytics-identity.tsx | 1 + src/features/auth/dayova-auth-flow.tsx | 5 +- src/lib/analytics.ts | 36 +++--- src/lib/system-color-scheme.ios.ts | 20 +++ src/lib/system-color-scheme.ts | 6 + src/lib/theme-css.test.ts | 32 +++++ src/lib/theme-variables.ts | 77 +++++++++++ src/lib/theme.ts | 27 ++-- 18 files changed, 409 insertions(+), 67 deletions(-) create mode 100644 modules/dayova-system-appearance/LICENSE create mode 100644 modules/dayova-system-appearance/expo-module.config.json create mode 100644 modules/dayova-system-appearance/index.ts create mode 100644 modules/dayova-system-appearance/ios/DayovaSystemAppearance.podspec create mode 100644 modules/dayova-system-appearance/ios/DayovaSystemAppearanceModule.swift create mode 100644 modules/dayova-system-appearance/src/DayovaSystemAppearance.types.ts create mode 100644 modules/dayova-system-appearance/src/DayovaSystemAppearanceModule.ts create mode 100644 src/lib/system-color-scheme.ios.ts create mode 100644 src/lib/system-color-scheme.ts create mode 100644 src/lib/theme-variables.ts diff --git a/app.config.ts b/app.config.ts index df3981ae..833a8191 100644 --- a/app.config.ts +++ b/app.config.ts @@ -43,7 +43,7 @@ const config: ExpoConfig = { orientation: "portrait", platforms: ["ios", "android"], icon: DAYOVA_LOGO, - userInterfaceStyle: "light", + userInterfaceStyle: "automatic", experiments: { reactCompiler: true, }, diff --git a/docs/bottom-sheets.md b/docs/bottom-sheets.md index e6ffa6af..e84eb748 100644 --- a/docs/bottom-sheets.md +++ b/docs/bottom-sheets.md @@ -27,7 +27,7 @@ inner list scrolling. That is the behavior the picker sheets need. Sources: -- Expo UI BottomSheet docs: https://docs.expo.dev/versions/v56.0.0/sdk/ui/drop-in-replacements/bottomsheet/ +- Expo UI BottomSheet docs: https://docs.expo.dev/versions/v57.0.0/sdk/ui/drop-in-replacements/bottomsheet/ - Gorhom Bottom Sheet docs: https://gorhom.dev/react-native-bottom-sheet/ ## What would need to change before switching back to Expo UI? diff --git a/modules/dayova-system-appearance/LICENSE b/modules/dayova-system-appearance/LICENSE new file mode 100644 index 00000000..30b20e3b --- /dev/null +++ b/modules/dayova-system-appearance/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015-present 650 Industries, Inc. (aka Expo) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/modules/dayova-system-appearance/expo-module.config.json b/modules/dayova-system-appearance/expo-module.config.json new file mode 100644 index 00000000..7381b46d --- /dev/null +++ b/modules/dayova-system-appearance/expo-module.config.json @@ -0,0 +1,6 @@ +{ + "platforms": ["ios"], + "apple": { + "modules": ["DayovaSystemAppearanceModule"] + } +} diff --git a/modules/dayova-system-appearance/index.ts b/modules/dayova-system-appearance/index.ts new file mode 100644 index 00000000..c7f886fe --- /dev/null +++ b/modules/dayova-system-appearance/index.ts @@ -0,0 +1,2 @@ +export { default } from "./src/DayovaSystemAppearanceModule"; +export * from "./src/DayovaSystemAppearance.types"; diff --git a/modules/dayova-system-appearance/ios/DayovaSystemAppearance.podspec b/modules/dayova-system-appearance/ios/DayovaSystemAppearance.podspec new file mode 100644 index 00000000..b692305e --- /dev/null +++ b/modules/dayova-system-appearance/ios/DayovaSystemAppearance.podspec @@ -0,0 +1,20 @@ +Pod::Spec.new do |s| + s.name = 'DayovaSystemAppearance' + s.version = '1.0.0' + s.summary = 'Reports the active iOS interface style to Dayova.' + s.description = 'Bridges the key UIWindow trait collection to JavaScript.' + s.author = '' + s.homepage = 'https://docs.expo.dev/modules/' + s.platforms = { :ios => '17.0' } + s.source = { git: '' } + s.static_framework = true + + s.dependency 'ExpoModulesCore' + + # Swift/Objective-C compatibility + s.pod_target_xcconfig = { + 'DEFINES_MODULE' => 'YES', + } + + s.source_files = "**/*.{h,m,mm,swift,hpp,cpp}" +end diff --git a/modules/dayova-system-appearance/ios/DayovaSystemAppearanceModule.swift b/modules/dayova-system-appearance/ios/DayovaSystemAppearanceModule.swift new file mode 100644 index 00000000..9a2da7f0 --- /dev/null +++ b/modules/dayova-system-appearance/ios/DayovaSystemAppearanceModule.swift @@ -0,0 +1,122 @@ +import ExpoModulesCore +import UIKit + +public class DayovaSystemAppearanceModule: Module { + private var observerView: AppearanceObserverView? + + public func definition() -> ModuleDefinition { + Name("DayovaSystemAppearance") + + Events("onChange") + + Function("getColorScheme") { () -> String in + return Self.readColorSchemeOnMainQueue() + } + + OnStartObserving("onChange") { [weak self] in + DispatchQueue.main.async { + self?.installObserver() + } + } + + OnStopObserving("onChange") { [weak self] in + DispatchQueue.main.async { + self?.removeObserver() + } + } + + OnAppBecomesActive { [weak self] in + self?.emitCurrentColorScheme() + } + + OnDestroy { [weak self] in + guard let observerView = self?.observerView else { return } + self?.observerView = nil + DispatchQueue.main.async { + observerView.removeFromSuperview() + } + } + } + + private static func activeWindow() -> UIWindow? { + let windows = UIApplication.shared.connectedScenes + .compactMap { $0 as? UIWindowScene } + .flatMap(\.windows) + + return windows.first(where: \.isKeyWindow) ?? windows.first + } + + private static func currentColorScheme() -> String { + let style = activeWindow()?.traitCollection.userInterfaceStyle + ?? UITraitCollection.current.userInterfaceStyle + return style == .dark ? "dark" : "light" + } + + private static func readColorSchemeOnMainQueue() -> String { + if Thread.isMainThread { + return currentColorScheme() + } + + return DispatchQueue.main.sync { + currentColorScheme() + } + } + + private func installObserver() { + removeObserver() + + guard let window = Self.activeWindow() else { return } + let view = AppearanceObserverView() + view.isUserInteractionEnabled = false + view.onColorSchemeChange = { [weak self] colorScheme in + self?.sendEvent("onChange", ["colorScheme": colorScheme]) + } + window.addSubview(view) + observerView = view + emitCurrentColorScheme() + } + + private func removeObserver() { + observerView?.removeFromSuperview() + observerView = nil + } + + private func emitCurrentColorScheme() { + let emit: () -> Void = { [weak self] in + guard let self else { return } + self.sendEvent("onChange", [ + "colorScheme": Self.currentColorScheme() + ]) + } + + if Thread.isMainThread { + emit() + } else { + DispatchQueue.main.async { + emit() + } + } + } +} + +private final class AppearanceObserverView: UIView { + var onColorSchemeChange: ((String) -> Void)? + + override init(frame: CGRect) { + super.init(frame: frame) + + registerForTraitChanges([UITraitUserInterfaceStyle.self]) { + (view: AppearanceObserverView, previousTraitCollection: UITraitCollection) in + guard view.traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) else { + return + } + + view.onColorSchemeChange?( + view.traitCollection.userInterfaceStyle == .dark ? "dark" : "light") + } + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} diff --git a/modules/dayova-system-appearance/src/DayovaSystemAppearance.types.ts b/modules/dayova-system-appearance/src/DayovaSystemAppearance.types.ts new file mode 100644 index 00000000..f34c2768 --- /dev/null +++ b/modules/dayova-system-appearance/src/DayovaSystemAppearance.types.ts @@ -0,0 +1,9 @@ +export type DayovaSystemAppearanceModuleEvents = { + onChange: (event: ColorSchemeChangeEvent) => void; +}; + +export type SystemColorScheme = "light" | "dark"; + +type ColorSchemeChangeEvent = { + colorScheme: SystemColorScheme; +}; diff --git a/modules/dayova-system-appearance/src/DayovaSystemAppearanceModule.ts b/modules/dayova-system-appearance/src/DayovaSystemAppearanceModule.ts new file mode 100644 index 00000000..f96a0a48 --- /dev/null +++ b/modules/dayova-system-appearance/src/DayovaSystemAppearanceModule.ts @@ -0,0 +1,14 @@ +import { NativeModule, requireNativeModule } from "expo"; + +import type { + DayovaSystemAppearanceModuleEvents, + SystemColorScheme, +} from "./DayovaSystemAppearance.types"; + +declare class DayovaSystemAppearanceModule extends NativeModule { + getColorScheme(): SystemColorScheme; +} + +export default requireNativeModule( + "DayovaSystemAppearance", +); diff --git a/src/app/_layout.tsx b/src/app/_layout.tsx index 92dca577..8dfbd4a1 100644 --- a/src/app/_layout.tsx +++ b/src/app/_layout.tsx @@ -5,7 +5,6 @@ import { BottomSheetModalProvider } from "@gorhom/bottom-sheet"; import { PortalHost } from "@rn-primitives/portal"; import { ConvexReactClient } from "convex/react"; import { ConvexProviderWithClerk } from "convex/react-clerk"; -import * as SystemUI from "expo-system-ui"; import { Stack, usePathname, @@ -13,8 +12,10 @@ import { useRouter, } from "expo-router"; import { ThemeProvider } from "expo-router/react-navigation"; +import * as SystemUI from "expo-system-ui"; +import { vars } from "nativewind"; import { PostHogProvider } from "posthog-react-native"; -import { useEffect } from "react"; +import { useEffect, useMemo } from "react"; import { Text, View, type ViewStyle } from "react-native"; import { GestureHandlerRootView } from "react-native-gesture-handler"; import { KeyboardProvider } from "react-native-keyboard-controller"; @@ -29,6 +30,7 @@ import { } from "~/lib/analytics-core"; import { env, missingPublicRuntimeConfig } from "~/lib/runtime-config"; import { DayovaThemeProvider, NAV_THEMES, useDayovaTheme } from "~/lib/theme"; +import { DARK_THEME_VARIABLES } from "~/lib/theme-variables"; const convexUrl = env.EXPO_PUBLIC_CONVEX_URL?.trim(); const convex = convexUrl ? new ConvexReactClient(convexUrl) : null; @@ -107,6 +109,10 @@ export default function RootLayout() { function RootProviders({ convexClient }: { convexClient: ConvexReactClient }) { const { colors, resolvedTheme } = useDayovaTheme(); + const themeVariables = useMemo( + () => (resolvedTheme === "dark" ? vars(DARK_THEME_VARIABLES) : undefined), + [resolvedTheme], + ); useEffect(() => { void SystemUI.setBackgroundColorAsync(colors.background); @@ -114,38 +120,42 @@ function RootProviders({ convexClient }: { convexClient: ConvexReactClient }) { return ( - - - + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + ); } diff --git a/src/components/analytics-identity.tsx b/src/components/analytics-identity.tsx index 3a18c2c8..9628e349 100644 --- a/src/components/analytics-identity.tsx +++ b/src/components/analytics-identity.tsx @@ -57,6 +57,7 @@ export function AnalyticsIdentity() { const returnCaptureKey = `${user.clerkId}:${localDayKey}`; if ( !isConvexAuthenticated || + !convexUser || returnCaptureKeyRef.current === returnCaptureKey ) { return; diff --git a/src/features/auth/dayova-auth-flow.tsx b/src/features/auth/dayova-auth-flow.tsx index e8cde370..b7742c00 100644 --- a/src/features/auth/dayova-auth-flow.tsx +++ b/src/features/auth/dayova-auth-flow.tsx @@ -1233,7 +1233,6 @@ function QuestionStepView({ > - {options.map((option, index) => { + {options.map((option) => { const selected = hasListValue(value, option.label); const Icon = option.icon; return ( onToggle(option)} diff --git a/src/lib/analytics.ts b/src/lib/analytics.ts index 0673117a..683b522b 100644 --- a/src/lib/analytics.ts +++ b/src/lib/analytics.ts @@ -1,4 +1,4 @@ -import { useMutation } from "convex/react"; +import { useMutation, useQuery } from "convex/react"; import { usePostHog } from "posthog-react-native"; import { useCallback } from "react"; import { api } from "#convex/_generated/api"; @@ -14,7 +14,11 @@ import type { AnalyticsProperties } from "~/lib/analytics-core"; export function useValidationAnalytics() { const posthog = usePostHog(); - const { user } = useAuth(); + const { user, isConvexAuthenticated } = useAuth(); + const convexUser = useQuery( + api.users.getMe, + user && isConvexAuthenticated ? {} : "skip", + ); const markActivity = useMutation(api.validationAnalytics.markActivity); const clerkId = user?.clerkId; @@ -25,18 +29,20 @@ export function useValidationAnalytics() { ) => { if (!isPostHogConfigured || !clerkId) return; - let validationStudentCode: string | null = null; - try { - const activity = await markActivity({ - localDayKey: getDayKey(new Date()), - }); - validationStudentCode = activity.validationStudentCode; - } catch (error) { - logDiagnosticError("Failed to mark validation activity.", error, { - source: "analytics.markActivity", - level: "warn", - metadata: { eventName }, - }); + let validationStudentCode = convexUser?.validationStudentCode ?? null; + if (convexUser) { + try { + const activity = await markActivity({ + localDayKey: getDayKey(new Date()), + }); + validationStudentCode = activity.validationStudentCode; + } catch (error) { + logDiagnosticError("Failed to mark validation activity.", error, { + source: "analytics.markActivity", + level: "warn", + metadata: { eventName }, + }); + } } captureValidationEvent(posthog, eventName, clerkId, { @@ -46,7 +52,7 @@ export function useValidationAnalytics() { : {}), }); }, - [clerkId, markActivity, posthog], + [clerkId, convexUser, markActivity, posthog], ); return { capture }; diff --git a/src/lib/system-color-scheme.ios.ts b/src/lib/system-color-scheme.ios.ts new file mode 100644 index 00000000..4d91e569 --- /dev/null +++ b/src/lib/system-color-scheme.ios.ts @@ -0,0 +1,20 @@ +import { useEffect, useState } from "react"; +import type { ResolvedTheme } from "~/lib/theme-preference"; +import DayovaSystemAppearance from "../../modules/dayova-system-appearance"; + +export function useSystemColorScheme(): ResolvedTheme { + const [colorScheme, setColorScheme] = useState(() => + DayovaSystemAppearance.getColorScheme(), + ); + + useEffect(() => { + const subscription = DayovaSystemAppearance.addListener( + "onChange", + (event) => setColorScheme(event.colorScheme), + ); + + return () => subscription.remove(); + }, []); + + return colorScheme; +} diff --git a/src/lib/system-color-scheme.ts b/src/lib/system-color-scheme.ts new file mode 100644 index 00000000..9a4c2787 --- /dev/null +++ b/src/lib/system-color-scheme.ts @@ -0,0 +1,6 @@ +import { useColorScheme } from "react-native"; +import type { ResolvedTheme } from "~/lib/theme-preference"; + +export function useSystemColorScheme(): ResolvedTheme { + return useColorScheme() === "dark" ? "dark" : "light"; +} diff --git a/src/lib/theme-css.test.ts b/src/lib/theme-css.test.ts index 054c3bc9..0134c7ee 100644 --- a/src/lib/theme-css.test.ts +++ b/src/lib/theme-css.test.ts @@ -1,8 +1,11 @@ import { readFileSync } from "node:fs"; import { resolve } from "node:path"; import { describe, expect, test } from "vitest"; +import { DARK_THEME_VARIABLES } from "./theme-variables"; const GLOBAL_CSS_PATH = resolve(process.cwd(), "src/global.css"); +const APP_CONFIG_PATH = resolve(process.cwd(), "app.config.ts"); +const THEME_PROVIDER_PATH = resolve(process.cwd(), "src/lib/theme.ts"); describe("theme CSS", () => { test("declares dark variables on the NativeWind root selector", () => { @@ -11,4 +14,33 @@ describe("theme CSS", () => { expect(css).toContain(".dark:root"); expect(css).not.toContain("\n\t.dark {\n"); }); + + test("keeps the native runtime dark variables synchronized with CSS", () => { + const css = readFileSync(GLOBAL_CSS_PATH, "utf8"); + const darkRoot = css.match(/\.dark:root\s*\{([\s\S]*?)\n\t\}/)?.[1]; + expect(darkRoot).toBeDefined(); + + const cssVariables = Object.fromEntries( + [...(darkRoot ?? "").matchAll(/(--[\w-]+):\s*([^;]+);/g)].map( + ([, name, value]) => [name, value], + ), + ); + + expect(DARK_THEME_VARIABLES).toEqual(cssVariables); + }); + + test("allows native light and dark appearance changes", () => { + const appConfig = readFileSync(APP_CONFIG_PATH, "utf8"); + + expect(appConfig).toMatch(/userInterfaceStyle:\s*"automatic"/); + }); + + test("resolves the system preference from the native appearance", () => { + const themeProvider = readFileSync(THEME_PROVIDER_PATH, "utf8"); + + expect(themeProvider).toContain( + 'import { useSystemColorScheme } from "~/lib/system-color-scheme"', + ); + expect(themeProvider).toContain("setColorScheme(preference)"); + }); }); diff --git a/src/lib/theme-variables.ts b/src/lib/theme-variables.ts new file mode 100644 index 00000000..a4e1c8b7 --- /dev/null +++ b/src/lib/theme-variables.ts @@ -0,0 +1,77 @@ +/** + * NativeWind's global root-variable observers do not currently invalidate + * already-mounted Fabric views after an Appearance override on React Native + * 0.86. Applying the dark variables through a root View keeps descendants in + * React's variable context while preserving the CSS declarations for web. + * + * Keep these values synchronized with `.dark:root` in global.css. + */ +export const DARK_THEME_VARIABLES = { + "--background": "250 10% 8%", + "--text": "36 15% 92%", + "--secondary-text": "220 12% 68%", + "--card": "248 10% 13%", + "--popover": "248 10% 13%", + "--surface": "248 10% 13%", + "--primary": "196.2 100% 50%", + "--primary-strong": "198.3 100% 58%", + "--button-neutral": "0 0% 100%", + "--secondary": "279.9 68% 66%", + "--muted": "247 10% 18%", + "--accent": "196.2 100% 18%", + "--destructive": "3.2 100% 66%", + "--success": "135.1 58.6% 56%", + "--success-subtle": "142 45% 15%", + "--wrong": "35.1 100% 58%", + "--wrong-subtle": "33 70% 16%", + "--info": "48.1 100% 58%", + "--info-subtle": "50 65% 15%", + "--system": "196.2 100% 50%", + "--system-subtle": "204 62% 16%", + "--theorie": "240.9 61% 68%", + "--theorie-subtle": "246 35% 18%", + "--ueben": "279.9 68% 66%", + "--ueben-subtle": "280 34% 18%", + "--praxis": "177.3 100% 45%", + "--praxis-subtle": "176 45% 15%", + "--hausaufgabe": "313 24.5% 70%", + "--hausaufgabe-subtle": "313 22% 18%", + "--border": "224 12% 24%", + "--input": "224 12% 24%", + "--ring": "196.2 100% 50%", + "--chart-1": "196.2 100% 50%", + "--chart-2": "279.9 68% 66%", + "--chart-3": "135.1 58.6% 56%", + "--chart-4": "35.1 100% 58%", + "--chart-5": "var(--text)", + "--light-1": "0 0% 100%", + "--light-2": "247 10% 18%", + "--light-3": "247 10% 21%", + "--path-1": "224 12% 24%", + "--path-2": "224 12% 24%", + "--path-3": "220 12% 62%", + "--path-4": "220 12% 68%", + "--path-5": "198.3 100% 58%", + "--path-6": "196.2 100% 50%", + "--path-7": "193.3 100% 65.5%", + "--black-100": "36 15% 92%", + "--black-90": "36 12% 84%", + "--black-80": "36 10% 76%", + "--black-70": "220 12% 68%", + "--black-60": "220 11% 59%", + "--black-50": "220 10% 50%", + "--black-40": "224 10% 41%", + "--black-30": "224 11% 32%", + "--black-20": "224 12% 24%", + "--black-10": "248 10% 18%", + "--white-100": "0 0% 100%", + "--white-90": "36 15% 92%", + "--white-80": "36 12% 84%", + "--white-70": "36 10% 76%", + "--white-60": "220 12% 68%", + "--white-50": "220 11% 59%", + "--white-40": "220 10% 50%", + "--white-30": "224 10% 41%", + "--white-20": "224 11% 32%", + "--white-10": "224 12% 24%", +} as const; diff --git a/src/lib/theme.ts b/src/lib/theme.ts index e17dc04f..4cfd6f6f 100644 --- a/src/lib/theme.ts +++ b/src/lib/theme.ts @@ -17,11 +17,12 @@ import { } from "react"; import { Platform } from "react-native"; import { DAYOVA_DESIGN_SYSTEM } from "~/lib/design-system"; +import { useSystemColorScheme } from "~/lib/system-color-scheme"; import { isThemePreference, + type ResolvedTheme, resolveThemePreference, THEME_STORAGE_KEY, - type ResolvedTheme, type ThemePreference, } from "~/lib/theme-preference"; @@ -121,10 +122,10 @@ async function writeStoredThemePreference(preference: ThemePreference) { } function DayovaThemeProvider({ children }: { children: ReactNode }) { - const { colorScheme, setColorScheme } = useNativeWindColorScheme(); + const { setColorScheme } = useNativeWindColorScheme(); + const systemTheme = useSystemColorScheme(); const [preference, setPreferenceState] = useState("system"); const [isLoaded, setIsLoaded] = useState(false); - const systemTheme = colorScheme === "dark" ? "dark" : "light"; const resolvedTheme = resolveThemePreference(preference, systemTheme); const colors = DAYOVA_THEME_COLORS[resolvedTheme]; @@ -137,11 +138,9 @@ function DayovaThemeProvider({ children }: { children: ReactNode }) { const nextPreference = storedPreference ?? "system"; setPreferenceState(nextPreference); - setColorScheme(nextPreference); }) .catch((error: unknown) => { console.warn("Unable to load Dayova theme preference", error); - setColorScheme("system"); }) .finally(() => { if (isActive) setIsLoaded(true); @@ -150,16 +149,16 @@ function DayovaThemeProvider({ children }: { children: ReactNode }) { return () => { isActive = false; }; - }, [setColorScheme]); + }, []); - const setPreference = useCallback( - async (nextPreference: ThemePreference) => { - setPreferenceState(nextPreference); - setColorScheme(nextPreference); - await writeStoredThemePreference(nextPreference); - }, - [setColorScheme], - ); + useEffect(() => { + setColorScheme(preference); + }, [preference, setColorScheme]); + + const setPreference = useCallback(async (nextPreference: ThemePreference) => { + setPreferenceState(nextPreference); + await writeStoredThemePreference(nextPreference); + }, []); const value = useMemo( () => ({ From 687970c557bbcd815f3a56140871850d8bf7ae3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20R=C3=B6ssner?= Date: Sun, 19 Jul 2026 21:51:25 +0200 Subject: [PATCH 3/7] Fix iOS appearance synchronization --- .../ios/DayovaSystemAppearance.podspec | 1 + .../ios/DayovaSystemAppearanceModule.swift | 15 +++++++++++++++ src/app/_layout.tsx | 4 ++-- src/lib/analytics.ts | 5 +++-- src/lib/theme-css.test.ts | 7 +++++-- src/lib/theme.ts | 10 +++++----- 6 files changed, 31 insertions(+), 11 deletions(-) diff --git a/modules/dayova-system-appearance/ios/DayovaSystemAppearance.podspec b/modules/dayova-system-appearance/ios/DayovaSystemAppearance.podspec index b692305e..77f7ef92 100644 --- a/modules/dayova-system-appearance/ios/DayovaSystemAppearance.podspec +++ b/modules/dayova-system-appearance/ios/DayovaSystemAppearance.podspec @@ -10,6 +10,7 @@ Pod::Spec.new do |s| s.static_framework = true s.dependency 'ExpoModulesCore' + s.dependency 'React-Core' # Swift/Objective-C compatibility s.pod_target_xcconfig = { diff --git a/modules/dayova-system-appearance/ios/DayovaSystemAppearanceModule.swift b/modules/dayova-system-appearance/ios/DayovaSystemAppearanceModule.swift index 9a2da7f0..c1f5d3a5 100644 --- a/modules/dayova-system-appearance/ios/DayovaSystemAppearanceModule.swift +++ b/modules/dayova-system-appearance/ios/DayovaSystemAppearanceModule.swift @@ -1,4 +1,5 @@ import ExpoModulesCore +import React import UIKit public class DayovaSystemAppearanceModule: Module { @@ -9,6 +10,13 @@ public class DayovaSystemAppearanceModule: Module { Events("onChange") + OnCreate { + DispatchQueue.main.async { + RCTUseKeyWindowForSystemStyle(true) + Self.notifyReactNativeAppearance() + } + } + Function("getColorScheme") { () -> String in return Self.readColorSchemeOnMainQueue() } @@ -52,6 +60,12 @@ public class DayovaSystemAppearanceModule: Module { return style == .dark ? "dark" : "light" } + fileprivate static func notifyReactNativeAppearance() { + NotificationCenter.default.post( + name: Notification.Name("RCTUserInterfaceStyleDidChangeNotification"), + object: nil) + } + private static func readColorSchemeOnMainQueue() -> String { if Thread.isMainThread { return currentColorScheme() @@ -84,6 +98,7 @@ public class DayovaSystemAppearanceModule: Module { private func emitCurrentColorScheme() { let emit: () -> Void = { [weak self] in guard let self else { return } + Self.notifyReactNativeAppearance() self.sendEvent("onChange", [ "colorScheme": Self.currentColorScheme() ]) diff --git a/src/app/_layout.tsx b/src/app/_layout.tsx index 8dfbd4a1..274412ee 100644 --- a/src/app/_layout.tsx +++ b/src/app/_layout.tsx @@ -110,7 +110,7 @@ export default function RootLayout() { function RootProviders({ convexClient }: { convexClient: ConvexReactClient }) { const { colors, resolvedTheme } = useDayovaTheme(); const themeVariables = useMemo( - () => (resolvedTheme === "dark" ? vars(DARK_THEME_VARIABLES) : undefined), + () => vars(resolvedTheme === "dark" ? DARK_THEME_VARIABLES : {}), [resolvedTheme], ); @@ -120,7 +120,7 @@ function RootProviders({ convexClient }: { convexClient: ConvexReactClient }) { return ( - + { test("keeps the native runtime dark variables synchronized with CSS", () => { const css = readFileSync(GLOBAL_CSS_PATH, "utf8"); - const darkRoot = css.match(/\.dark:root\s*\{([\s\S]*?)\n\t\}/)?.[1]; + const darkRoot = css.match(/\.dark:root\s*\{([^}]+)\}/)?.[1]; expect(darkRoot).toBeDefined(); const cssVariables = Object.fromEntries( @@ -41,6 +41,9 @@ describe("theme CSS", () => { expect(themeProvider).toContain( 'import { useSystemColorScheme } from "~/lib/system-color-scheme"', ); - expect(themeProvider).toContain("setColorScheme(preference)"); + expect(themeProvider).not.toContain("useNativeWindColorScheme"); + expect(themeProvider).toContain( + "Appearance.setColorScheme(nativePreference)", + ); }); }); diff --git a/src/lib/theme.ts b/src/lib/theme.ts index 4cfd6f6f..f3b2dee0 100644 --- a/src/lib/theme.ts +++ b/src/lib/theme.ts @@ -4,7 +4,6 @@ import { type Theme, } from "expo-router/react-navigation"; import * as SecureStore from "expo-secure-store"; -import { useColorScheme as useNativeWindColorScheme } from "nativewind"; import { createContext, createElement, @@ -15,7 +14,7 @@ import { useMemo, useState, } from "react"; -import { Platform } from "react-native"; +import { Appearance, Platform } from "react-native"; import { DAYOVA_DESIGN_SYSTEM } from "~/lib/design-system"; import { useSystemColorScheme } from "~/lib/system-color-scheme"; import { @@ -122,7 +121,6 @@ async function writeStoredThemePreference(preference: ThemePreference) { } function DayovaThemeProvider({ children }: { children: ReactNode }) { - const { setColorScheme } = useNativeWindColorScheme(); const systemTheme = useSystemColorScheme(); const [preference, setPreferenceState] = useState("system"); const [isLoaded, setIsLoaded] = useState(false); @@ -152,8 +150,10 @@ function DayovaThemeProvider({ children }: { children: ReactNode }) { }, []); useEffect(() => { - setColorScheme(preference); - }, [preference, setColorScheme]); + const nativePreference = + preference === "system" ? "unspecified" : preference; + Appearance.setColorScheme(nativePreference); + }, [preference]); const setPreference = useCallback(async (nextPreference: ThemePreference) => { setPreferenceState(nextPreference); From 73834a8a8293317fc3d1f18066bfa45aa4ff0189 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20R=C3=B6ssner?= Date: Mon, 20 Jul 2026 14:01:18 +0200 Subject: [PATCH 4/7] Preserve Expo iOS baseline in appearance module --- docs/contexts/platform/CONTEXT.md | 12 +++++++ .../ios/DayovaSystemAppearance.podspec | 3 +- .../ios/DayovaSystemAppearanceModule.swift | 30 +++++++++++++---- src/lib/ios-appearance-module.test.ts | 32 +++++++++++++++++++ 4 files changed, 70 insertions(+), 7 deletions(-) create mode 100644 src/lib/ios-appearance-module.test.ts diff --git a/docs/contexts/platform/CONTEXT.md b/docs/contexts/platform/CONTEXT.md index c429ec54..5c619928 100644 --- a/docs/contexts/platform/CONTEXT.md +++ b/docs/contexts/platform/CONTEXT.md @@ -66,3 +66,15 @@ prebuild, keep it in sync too: checks the generated native plist when it exists. Run it before an iOS release build so App Store Connect does not reject the uploaded bundle for missing purpose strings. + +## iOS Deployment Target + +Dayova currently requires iOS 17.0 because the native Clerk Expo SDK requires +it. The `@clerk/expo` config plugin writes that target to the generated Xcode +project and `Podfile.properties.json` during prebuild. This requirement predates +the Expo SDK 57 upgrade even though Expo SDK 57 itself supports iOS 16.4 and +newer. + +Keep Dayova-owned native modules compatible with Expo's 16.4 baseline unless a +higher target is intentional and documented. Re-evaluate the app-wide iOS 17.0 +minimum when Clerk lowers its native SDK requirement or Clerk is replaced. diff --git a/modules/dayova-system-appearance/ios/DayovaSystemAppearance.podspec b/modules/dayova-system-appearance/ios/DayovaSystemAppearance.podspec index 77f7ef92..3d3ef150 100644 --- a/modules/dayova-system-appearance/ios/DayovaSystemAppearance.podspec +++ b/modules/dayova-system-appearance/ios/DayovaSystemAppearance.podspec @@ -5,7 +5,8 @@ Pod::Spec.new do |s| s.description = 'Bridges the key UIWindow trait collection to JavaScript.' s.author = '' s.homepage = 'https://docs.expo.dev/modules/' - s.platforms = { :ios => '17.0' } + # Match Expo SDK 57's baseline; the app may have a higher target because of other pods. + s.platforms = { :ios => '16.4' } s.source = { git: '' } s.static_framework = true diff --git a/modules/dayova-system-appearance/ios/DayovaSystemAppearanceModule.swift b/modules/dayova-system-appearance/ios/DayovaSystemAppearanceModule.swift index c1f5d3a5..091f0573 100644 --- a/modules/dayova-system-appearance/ios/DayovaSystemAppearanceModule.swift +++ b/modules/dayova-system-appearance/ios/DayovaSystemAppearanceModule.swift @@ -120,18 +120,36 @@ private final class AppearanceObserverView: UIView { override init(frame: CGRect) { super.init(frame: frame) - registerForTraitChanges([UITraitUserInterfaceStyle.self]) { - (view: AppearanceObserverView, previousTraitCollection: UITraitCollection) in - guard view.traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) else { - return + if #available(iOS 17.0, *) { + registerForTraitChanges([UITraitUserInterfaceStyle.self]) { + (view: AppearanceObserverView, previousTraitCollection: UITraitCollection) in + view.emitColorSchemeIfChanged(from: previousTraitCollection) } + } + } - view.onColorSchemeChange?( - view.traitCollection.userInterfaceStyle == .dark ? "dark" : "light") + override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { + super.traitCollectionDidChange(previousTraitCollection) + + if #available(iOS 17.0, *) { + return } + + emitColorSchemeIfChanged(from: previousTraitCollection) } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } + + private func emitColorSchemeIfChanged(from previousTraitCollection: UITraitCollection?) { + guard let previousTraitCollection, + traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) + else { + return + } + + onColorSchemeChange?( + traitCollection.userInterfaceStyle == .dark ? "dark" : "light") + } } diff --git a/src/lib/ios-appearance-module.test.ts b/src/lib/ios-appearance-module.test.ts new file mode 100644 index 00000000..c06515ca --- /dev/null +++ b/src/lib/ios-appearance-module.test.ts @@ -0,0 +1,32 @@ +import { readFileSync } from "node:fs"; +import { resolve } from "node:path"; +import { describe, expect, test } from "vitest"; + +const IOS_MODULE_PATH = resolve( + process.cwd(), + "modules/dayova-system-appearance/ios/DayovaSystemAppearanceModule.swift", +); +const IOS_PODSPEC_PATH = resolve( + process.cwd(), + "modules/dayova-system-appearance/ios/DayovaSystemAppearance.podspec", +); + +describe("iOS system appearance module", () => { + test("does not raise Expo SDK 57's iOS 16.4 support floor", () => { + const podspec = readFileSync(IOS_PODSPEC_PATH, "utf8"); + + expect(podspec).toMatch(/s\.platforms\s*=\s*\{\s*:ios\s*=>\s*'16\.4'\s*\}/); + }); + + test("uses the iOS 17 trait API with an older-iOS fallback", () => { + const module = readFileSync(IOS_MODULE_PATH, "utf8"); + const availabilityCheck = module.indexOf("if #available(iOS 17.0, *)"); + const traitRegistration = module.indexOf("registerForTraitChanges"); + + expect(availabilityCheck).toBeGreaterThanOrEqual(0); + expect(traitRegistration).toBeGreaterThan(availabilityCheck); + expect(module).toContain( + "override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?)", + ); + }); +}); From b94afeaf2c2a11db2bbd9c85c1b524baf3b13632 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20R=C3=B6ssner?= Date: Mon, 20 Jul 2026 14:18:48 +0200 Subject: [PATCH 5/7] Document iOS appearance module --- CONTEXT-MAP.md | 1 + docs/contexts/mobile-app/CONTEXT.md | 3 + docs/contexts/platform/CONTEXT.md | 4 + modules/dayova-system-appearance/README.md | 505 +++++++++++++++++++++ 4 files changed, 513 insertions(+) create mode 100644 modules/dayova-system-appearance/README.md diff --git a/CONTEXT-MAP.md b/CONTEXT-MAP.md index d4cc3fb5..39693d3f 100644 --- a/CONTEXT-MAP.md +++ b/CONTEXT-MAP.md @@ -19,6 +19,7 @@ Confluence is the current cross-functional documentation hub for Dayova. The loc - Bottom sheets: `docs/bottom-sheets.md` - Styling: `docs/styling.md` - Package patches: `patches/README.md` +- iOS system appearance module: `modules/dayova-system-appearance/README.md` ## ADRs diff --git a/docs/contexts/mobile-app/CONTEXT.md b/docs/contexts/mobile-app/CONTEXT.md index 984c3faf..1153bba0 100644 --- a/docs/contexts/mobile-app/CONTEXT.md +++ b/docs/contexts/mobile-app/CONTEXT.md @@ -14,6 +14,9 @@ _Avoid_: Called by client, Server Error, raw stack trace - `docs/bottom-sheets.md` - `docs/styling.md` +- `modules/dayova-system-appearance/README.md` for the iOS appearance bridge, + its rationale, native contract, alternatives, validation matrix, and removal + criteria. - `patches/README.md` for patched package behavior that affects Expo/Metro builds, including the NativeWind release-build patch. diff --git a/docs/contexts/platform/CONTEXT.md b/docs/contexts/platform/CONTEXT.md index 5c619928..ed62ff5a 100644 --- a/docs/contexts/platform/CONTEXT.md +++ b/docs/contexts/platform/CONTEXT.md @@ -78,3 +78,7 @@ newer. Keep Dayova-owned native modules compatible with Expo's 16.4 baseline unless a higher target is intentional and documented. Re-evaluate the app-wide iOS 17.0 minimum when Clerk lowers its native SDK requirement or Clerk is replaced. + +See `modules/dayova-system-appearance/README.md` for the appearance module's +runtime design, React Native coupling, compatibility policy, test matrix, and +removal criteria. diff --git a/modules/dayova-system-appearance/README.md b/modules/dayova-system-appearance/README.md new file mode 100644 index 00000000..c17d70f8 --- /dev/null +++ b/modules/dayova-system-appearance/README.md @@ -0,0 +1,505 @@ +# Dayova System Appearance + +`dayova-system-appearance` is a local, iOS-only Expo module that reports the +resolved appearance of Dayova's active `UIWindow` to JavaScript and emits an +event when that appearance changes. + +It is a narrow compatibility layer for the appearance synchronization problem +observed while validating the Expo SDK 57 / React Native 0.86 upgrade. It is +not Dayova's theme system, it is not a reusable public package, and it should be +removed when the standard React Native appearance path is reliable for Dayova +again. + +| Property | Value | +| --- | --- | +| Status | Active compatibility workaround | +| Scope | Dayova iOS application only | +| Introduced | PR #300, commit `86364a1` | +| Current native baseline | Expo SDK 57, React Native 0.86, module target iOS 16.4 | +| Review trigger | Every Expo SDK, React Native, or minimum-iOS upgrade | +| Exit condition | React Native's public appearance API passes the complete Dayova iOS validation matrix without this module | + +## Executive summary + +Dayova supports three user preferences: Light, System, and Dark. The app needs +one resolved `"light" | "dark"` value to keep all of these layers aligned: + +- NativeWind variables and mounted Fabric views +- React Navigation colors +- Dayova's JavaScript theme context +- UIKit controls and native sheets +- the status bar and root background + +The standard solution is Expo's `userInterfaceStyle: "automatic"` together +with React Native's `Appearance` / `useColorScheme`. During native validation +of React Native 0.86 on the installed iOS 26.5 simulator, React Native's +appearance value was stale during cold launch and live system appearance +changes even though the key `UIWindow` had the correct UIKit trait. Depending +on the stale value made different layers of the app disagree about the current +theme. + +This module closes that gap by reading the key window's +`traitCollection.userInterfaceStyle` directly, observing that trait on a view +attached to the window, and exposing the result through a small Expo Modules +API. It also nudges React Native's native `RCTAppearance` implementation to +resolve appearance from the key window during initialization and foreground +resumption. + +The problem was observed on a specific upgraded native stack. The existence of +this workaround should not be interpreted as a claim that every React Native +0.86 application, iOS version, or simulator has the same problem. + +## Origin and decision record + +The module evolved through three commits on the Expo SDK 57 upgrade branch: + +1. `86364a1` introduced the local module after native iOS validation found that + React Native's appearance value was stale while the active UIKit window had + already adopted the correct style. The app config changed from a fixed Light + style to `automatic`, and the iOS application hook began reading the native + window through this module. +2. `687970c` enabled React Native's key-window appearance mode and refreshed + `RCTAppearance` during creation and foreground activation. It also replaced + the NativeWind preference setter with React Native's public + `Appearance.setColorScheme` API so app-level overrides and UIKit use the same + native mechanism. +3. `73834a8` made the module independently compatible with Expo SDK 57's iOS + 16.4 baseline by gating the iOS 17 trait-registration API and adding the + older-iOS callback fallback. + +Native validation was performed on the installed iOS 26.5 simulator. The final +module compiled with an `arm64-apple-ios16.4-simulator` target in Debug and an +optimized Release build, but no iOS 16.4 runtime was installed. See +"Known limitations and risks" for the distinction between compile and runtime +coverage. + +## What was diagnosed + +React Native 0.86's pinned iOS source keeps a cached color scheme in +`RCTAppearance`. It updates that cache when it receives +`RCTUserInterfaceStyleDidChangeNotification`. Its native color-scheme resolver +can use either the trait collection supplied with a notification or the key +window's trait collection when key-window mode is enabled. + +The workaround deliberately selects the second behavior and refreshes the +notification at lifecycle points where the stale value was observed. The +Dayova-specific event does not rely on that cache at all; it reads and observes +the active window directly. + +This source-level explanation shows why the workaround changes Dayova's +behavior. It is not proof of a universal upstream defect, and the validation +did not reduce the issue to a minimal standalone React Native reproduction. +That is why the module is documented as a local compatibility layer rather +than a permanent correction to React Native. + +## Why a native module is necessary + +JavaScript can normally read the native color scheme through React Native: + +```ts +import { useColorScheme } from "react-native"; +``` + +That hook subscribes to React Native's native `Appearance` module. It does not +independently inspect the active UIKit window. NativeWind's color-scheme hook +also ultimately uses the React Native appearance APIs on native platforms. +When the React Native value is stale, adding another JavaScript wrapper around +it preserves the same stale source. + +The value that behaved correctly during the iOS investigation was the active +window's UIKit trait. Reading and observing `UIWindow.traitCollection` requires +native iOS code, so some form of native bridge was required if Dayova was to +retain its System preference and react immediately to live changes. + +The local Expo Modules API was chosen because it provides: + +- a typed native-module contract; +- listener-aware setup and cleanup hooks; +- an app-foreground lifecycle hook; +- automatic discovery from the repository's `modules/` directory; +- CocoaPods integration without hand-editing the generated Xcode project; and +- a small implementation that remains owned by Dayova rather than a fork of a + general-purpose theming library. + +## Scope and non-goals + +The module is responsible for: + +- synchronously returning the resolved appearance of the active iOS window; +- emitting `onChange` when that window changes between light and dark; +- refreshing the value when the app becomes active; +- making React Native resolve system appearance from the key window; and +- installing and removing its UIKit observer with the JavaScript listener + lifecycle. + +The module is deliberately **not** responsible for: + +- storing the learner's Light, System, or Dark preference; +- deciding which preference wins; +- setting Dayova colors, CSS variables, or NativeWind variables; +- configuring React Navigation or the status bar; +- changing the device's system-wide appearance; +- Android or web appearance handling; or +- publishing a standalone npm package. + +Those responsibilities remain in the application layer: + +- [`src/lib/theme-preference.ts`](../../src/lib/theme-preference.ts) defines and + resolves the preference model. +- [`src/lib/theme.ts`](../../src/lib/theme.ts) stores the preference and applies + the app-level native override with `Appearance.setColorScheme`. +- [`src/lib/system-color-scheme.ios.ts`](../../src/lib/system-color-scheme.ios.ts) + adapts this module to the application. +- [`src/lib/system-color-scheme.ts`](../../src/lib/system-color-scheme.ts) keeps + Android and other platforms on React Native's standard `useColorScheme` path. +- [`src/app/_layout.tsx`](../../src/app/_layout.tsx) applies resolved NativeWind + variables and native root background behavior. +- [`src/components/ui/themed-status-bar.tsx`](../../src/components/ui/themed-status-bar.tsx) + derives status-bar content color from the Dayova theme context. + +## Data flow + +```mermaid +flowchart LR + OS["System appearance"] --> Window["Active UIWindow trait"] + Preference["Dayova Light / System / Dark preference"] --> Override["Appearance.setColorScheme"] + Override --> Window + Window --> Observer["AppearanceObserverView"] + Observer --> Module["DayovaSystemAppearance onChange"] + Module --> Hook["useSystemColorScheme (iOS)"] + Hook --> Provider["DayovaThemeProvider"] + Provider --> Consumers["NativeWind, navigation, status bar, root UI"] +``` + +When the preference is `"system"`, the theme provider passes `"unspecified"` +to `Appearance.setColorScheme`, which removes the app-level override and lets +the window follow iOS. Light and Dark set explicit app-level overrides. Either +path ultimately changes the window trait observed by this module. + +The module also has a secondary synchronization path for React Native itself: + +1. On module creation, it enables React Native's key-window appearance mode + through `RCTUseKeyWindowForSystemStyle(true)`. +2. It posts `RCTUserInterfaceStyleDidChangeNotification` after creation and + whenever the app becomes active. +3. React Native's `RCTAppearance` handles that notification and re-resolves its + value from the key window. + +The Dayova-specific `onChange` event remains the authoritative input for the +iOS application hook. React Native's own hosting views can also post their +normal appearance notifications during live trait changes. + +## JavaScript API + +The native contract intentionally has one method and one event. + +### `getColorScheme()` + +```ts +getColorScheme(): "light" | "dark"; +``` + +Returns the current appearance of the active iOS window synchronously. UIKit +access is performed on the main queue. If there is no active window, the module +falls back to `UITraitCollection.current`. Any non-dark value is normalized to +`"light"`, so consumers never need to handle `null` or `"unspecified"`. + +### `onChange` + +```ts +type ColorSchemeChangeEvent = { + colorScheme: "light" | "dark"; +}; +``` + +Subscribe with the Expo Modules listener API: + +```ts +const subscription = DayovaSystemAppearance.addListener( + "onChange", + ({ colorScheme }) => { + // Update an idempotent appearance state consumer. + }, +); + +subscription.remove(); +``` + +Application code should normally use `useSystemColorScheme` from +[`src/lib/system-color-scheme`](../../src/lib/system-color-scheme.ts) rather +than importing this module directly. The platform-specific file keeps this +iOS-only native dependency out of Android and web bundles. + +The module provides no setter. Theme overrides belong to React Native's public +`Appearance.setColorScheme` API and the Dayova theme provider. + +## Native implementation + +### Active-window selection + +`activeWindow()` gathers the windows from connected `UIWindowScene` instances, +then selects the key window and falls back to the first available window. This +matches Dayova's current single-window application model. + +If Dayova later supports multiple simultaneous scenes, this selection policy +must be revisited. A process-wide "first key window" may not represent the +scene containing the React surface that requested the value. + +### Trait observation + +The module installs a non-interactive `AppearanceObserverView` as a child of +the active window when the first `onChange` listener attaches. Attaching the +view to the real window gives it the same trait environment as the app UI. + +The observer compares color appearance before emitting. Unrelated trait +changes, such as size-class changes, do not produce a Dayova appearance event. + +The implementation uses the API appropriate for the deployment target: + +- iOS 17 and newer use `registerForTraitChanges`, scoped specifically to + `UITraitUserInterfaceStyle`. +- iOS 16.4 through 16.x use `traitCollectionDidChange` and perform the same + color-appearance comparison. + +Apple deprecated `traitCollectionDidChange` in favor of trait registration on +newer iOS versions, which is why the fallback is availability-gated rather +than used everywhere. + +### Listener and app lifecycle + +- `OnStartObserving("onChange")` installs the view and immediately emits the + current value. +- `OnStopObserving("onChange")` removes the view after the final listener is + removed. +- `OnAppBecomesActive` emits the current value and refreshes React Native's + appearance state. This covers a system change made while Dayova was in the + background. +- `OnDestroy` removes the observer view and releases the reference. + +Appearance events can repeat around initialization or foreground activation. +Consumers must treat them as state updates, not one-time commands. + +All UIKit work is marshalled to the main queue. The synchronous getter checks +whether it is already on the main thread before using `DispatchQueue.main.sync` +to avoid self-deadlock. + +### React Native coupling + +The module depends on `React-Core` for `RCTUseKeyWindowForSystemStyle` and the +`RCTUserInterfaceStyleDidChangeNotification` behavior. These are native React +Native implementation surfaces, not part of the documented JavaScript +`Appearance` contract. They are the most upgrade-sensitive part of the module. + +Do not assume that a successful Swift compile alone proves this synchronization +still works after a React Native upgrade. Confirm the relevant declarations and +notification handling in the installed React Native source, then repeat the +runtime appearance matrix below. + +## Expo registration and native-project generation + +This is a local Expo module. `expo-module.config.json` declares the iOS platform +and the `DayovaSystemAppearanceModule` Swift class. Expo Autolinking discovers +local modules from `./modules` by default and exposes the pod to CocoaPods when +the iOS project is generated or synchronized. + +There is no manual registration in `AppDelegate`, no custom config plugin, and +no checked-in Xcode-project edit. The repository uses Expo continuous native +generation, so native changes must remain expressible through the module, +podspec, Expo configuration, and installed packages. + +After changing native code, rebuild the native app. Reloading Metro is not +enough, and the module is not available in Expo Go. + +The module podspec targets iOS 16.4 to match Expo SDK 57's support baseline. +The generated Dayova application currently targets iOS 17 because +`@clerk/expo` independently requires and writes iOS 17 during prebuild. The +module does not cause that app-wide minimum. + +## Alternatives and trade-offs + +The repository history establishes that the standard React Native and +NativeWind paths were used before this module. The other options below document +the design space evaluated for maintenance purposes; they should not be read as +a claim that every option was prototyped during the original validation. + +| Option | Status | Assessment | +| --- | --- | --- | +| React Native `useColorScheme` / `Appearance.addChangeListener` only | Used and preferred when reliable | This is the normal solution and remains the non-iOS path. It was insufficient on the validated React Native 0.86 iOS stack because its value was stale. The module should be removed when this path passes Dayova's matrix again. | +| NativeWind `useColorScheme` | Used before the workaround | NativeWind delegates to native appearance APIs. It cannot provide an independent source when React Native's appearance value is stale. Its initialization-sensitive setter was also replaced with the public `Appearance.setColorScheme` call. | +| Expo `userInterfaceStyle: "automatic"` | Implemented and required | This configures the native app to support both styles. It is a prerequisite, not a replacement for correct runtime observation. Without it, iOS can remain fixed to the configured style. | +| `expo-system-ui` | Already used for root background behavior | It can manage system/root UI presentation, but it is not an independent live key-window appearance event source for the Dayova theme provider. | +| Refresh only on app foreground | Not selected | This would repair some background/resume cases but would miss a live system change while Dayova remains foregrounded. | +| Poll the appearance value | Not selected | Polling adds latency and continual work. Polling React Native would still poll the stale value; polling UIKit would still require native code. | +| Remove the System preference or force a fixed theme | Not selected | This avoids system observation by removing existing product behavior. It is a larger user-facing regression than the small bridge. | +| Patch React Native or edit generated iOS files | Not selected | A package patch or generated-project edit would have a wider blast radius and a heavier upgrade burden. A local module keeps the workaround isolated and compatible with native regeneration, although its React Native synchronization calls still require upgrade review. | +| AppDelegate/config-plugin integration | Not selected | An app lifecycle subscriber can refresh on activation, but live trait observation still needs a UIKit trait environment and a JavaScript bridge. It adds app-global wiring without removing the core native requirement. | +| `DynamicColorIOS` or platform semantic colors | Not sufficient for this app | Dynamic native colors can adapt without JavaScript, but Dayova also has custom tokens, navigation themes, NativeWind variables, and application logic that require a resolved theme value. | +| Upstream React Native fix | Preferred long-term outcome | Once the public React Native API is verified to return and publish the active key-window appearance across Dayova's supported iOS matrix, this module should be deleted rather than expanded. No upstream issue or patch is recorded by this repository yet. | + +## Known limitations and risks + +- **React Native implementation coupling:** The key-window function and native + notification behavior can change without a JavaScript API deprecation. +- **Single-window assumption:** The active-window lookup is not scene-specific. +- **Observer installation timing:** Installation requires a window to exist + when the first listener attaches. The current hook mounts inside the running + app UI; a future earlier consumer must verify this assumption. +- **Normalized result:** The API intentionally collapses unknown or unspecified + UIKit values to `"light"`. +- **Duplicate state events:** Initialization, trait change, and foreground + refreshes can report the same value. Current React state consumers are + idempotent. +- **Runtime coverage:** The module compiles with an iOS 16.4 deployment target, + but the app's Clerk dependency currently prevents an end-to-end iOS 16.4 + launch. Compatibility at that OS floor is therefore compile-validated, not + runtime-validated. +- **No Android implementation:** The observed defect and workaround are iOS + specific. Android continues to use the standard React Native hook. + +## Validation + +### Automated checks + +Run the focused structural regression tests: + +```sh +pnpm test src/lib/ios-appearance-module.test.ts +``` + +They guard the Expo iOS 16.4 module floor and the iOS 17 availability/fallback +split. They do not replace a native runtime test. + +Confirm Expo can discover the module: + +```sh +pnpm exec expo-modules-autolinking resolve --platform apple +``` + +The output must include: + +- package `dayova-system-appearance`; +- pod `DayovaSystemAppearance`; and +- class `DayovaSystemAppearanceModule`. + +For changes that affect native behavior, also run the repository validation +suite and regenerate/synchronize iOS through the established Expo workflow: + +```sh +pnpm install --frozen-lockfile +pnpm check +pnpm test +pnpm check:unused +npx --yes expo-doctor@latest +pnpm exec expo install --check +pnpm exec expo prebuild --platform ios +``` + +Use `expo prebuild --clean` only for an intentional clean CNG verification +after confirming that the working tree and Expo configuration contain every +native customization that must be preserved. + +### Native smoke-test matrix + +At minimum, validate a current iPhone simulator in both Debug and a +production-style Release build: + +1. Cold-launch with iOS already set to Light, then already set to Dark. +2. Select Dayova Light, Dark, and System and confirm the complete app changes. +3. With System selected and Dayova foregrounded, change iOS Light to Dark and + back without restarting the app. +4. Background Dayova, change the system appearance, and foreground it again. +5. Check the root background, status bar, React Navigation chrome, NativeWind + surfaces, native controls, sheets, and modals for agreement. +6. Confirm that Release cold-launches from its embedded bundle without Metro. +7. Inspect logs for a missing native module, JavaScript exception, Fabric + warning, appearance-loop symptom, or React Native native-symbol failure. + +If an unlocked physical iPhone is already connected and signing is already +configured, repeat the appearance cases there without changing credentials or +provisioning. + +## Troubleshooting + +### `Cannot find native module 'DayovaSystemAppearance'` + +The JavaScript bundle is newer than the installed native binary, autolinking +did not discover the module, or the app is running in Expo Go. Resolve the +module with Expo Autolinking, synchronize the iOS project, install pods, and +rebuild the app. A Metro reload cannot add native code to an existing binary. + +### The app launches in the wrong theme + +Check, in order: + +1. [`app.config.ts`](../../app.config.ts) still sets + `userInterfaceStyle: "automatic"`. +2. The stored Dayova preference is the expected Light, System, or Dark value. +3. System mode passes `"unspecified"` to `Appearance.setColorScheme`. +4. `getColorScheme()` matches the active window trait. +5. The iOS `onChange` subscription is attached. +6. NativeWind variables and navigation colors use the same resolved theme. + +### Live changes work, but background/resume is stale + +Verify `OnAppBecomesActive` still runs and emits after the active window has +adopted its new trait. Inspect whether an Expo or React Native upgrade changed +the lifecycle callback ordering before adding delays or polling. + +### A React Native upgrade removes a native symbol + +Do not mechanically replace the symbol. First determine whether upstream +`Appearance` now passes the native smoke-test matrix without this module. If it +does, remove the workaround. If it does not, inspect the new `RCTAppearance` +implementation and choose the smallest supported integration point. + +## Maintenance and removal criteria + +Review this module on every Expo SDK, React Native, or minimum-iOS upgrade. + +Keep it only while the public React Native appearance path fails Dayova's iOS +matrix. A removal experiment is successful when all of the following are true: + +1. Replace the iOS-specific hook with the standard React Native + `useColorScheme` implementation. +2. Remove the module's key-window flag and native notification behavior. +3. Pass cold launch, live Light/Dark changes, explicit app overrides, and + background/foreground restoration in Debug and Release. +4. Confirm NativeWind, React Navigation, the root background, native controls, + and status bar stay synchronized. +5. Test every supported iOS major version available to the team, including the + minimum runtime when dependencies permit it. + +After that proof, remove: + +- `modules/dayova-system-appearance/`; +- `src/lib/system-color-scheme.ios.ts`; +- `src/lib/ios-appearance-module.test.ts`; and +- references to the workaround in the platform and mobile-app documentation. + +Keep `userInterfaceStyle: "automatic"`, the Dayova preference model, and the +public `Appearance.setColorScheme` integration; they are normal theme-system +behavior, not part of this workaround. + +## File map + +| File | Purpose | +| --- | --- | +| [`expo-module.config.json`](./expo-module.config.json) | Declares iOS support and registers the Swift module for Expo Autolinking. | +| [`ios/DayovaSystemAppearance.podspec`](./ios/DayovaSystemAppearance.podspec) | Defines the local CocoaPod, dependencies, sources, and iOS 16.4 module target. | +| [`ios/DayovaSystemAppearanceModule.swift`](./ios/DayovaSystemAppearanceModule.swift) | Reads the key window, observes UIKit traits, emits events, and refreshes React Native appearance state. | +| [`src/DayovaSystemAppearance.types.ts`](./src/DayovaSystemAppearance.types.ts) | Defines the public event and color-scheme types. | +| [`src/DayovaSystemAppearanceModule.ts`](./src/DayovaSystemAppearanceModule.ts) | Loads and types the native Expo module. | +| [`index.ts`](./index.ts) | Exposes the local module's TypeScript entry point. | +| [`src/lib/system-color-scheme.ios.ts`](../../src/lib/system-color-scheme.ios.ts) | Application adapter that turns the native getter/event into a React hook. | +| [`src/lib/ios-appearance-module.test.ts`](../../src/lib/ios-appearance-module.test.ts) | Guards deployment-target and API-availability invariants. | + +## Primary references + +- [Expo color themes](https://docs.expo.dev/develop/user-interface/color-themes/) +- [React Native Appearance](https://reactnative.dev/docs/appearance) +- [React Native useColorScheme](https://reactnative.dev/docs/usecolorscheme) +- [Expo local modules](https://docs.expo.dev/more/create-expo-module/) +- [Expo Autolinking](https://docs.expo.dev/modules/autolinking/) +- [Expo module configuration](https://docs.expo.dev/modules/module-config/) +- [Apple: registerForTraitChanges](https://developer.apple.com/documentation/uikit/uitraitchangeobservable-67e94/registerfortraitchanges%28_%3Ahandler%3A%29) +- [Apple: adapting when traits change](https://developer.apple.com/documentation/uikit/adapting-your-app-when-traits-change) From 5a23c04e03dcfb48d094d6da4f5f1a0dfd79fbfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20R=C3=B6ssner?= Date: Mon, 20 Jul 2026 15:12:28 +0200 Subject: [PATCH 6/7] Address appearance documentation review --- CONTEXT-MAP.md | 2 + docs/contexts/mobile-app/CONTEXT.md | 4 +- ...-use-local-ios-system-appearance-bridge.md | 152 ++++++++++++++++++ modules/dayova-system-appearance/README.md | 90 ++--------- src/lib/ios-appearance-module.test.ts | 53 +++++- 5 files changed, 218 insertions(+), 83 deletions(-) create mode 100644 docs/contexts/mobile-app/adr/0001-use-local-ios-system-appearance-bridge.md diff --git a/CONTEXT-MAP.md b/CONTEXT-MAP.md index 39693d3f..d90ff36d 100644 --- a/CONTEXT-MAP.md +++ b/CONTEXT-MAP.md @@ -25,5 +25,7 @@ Confluence is the current cross-functional documentation hub for Dayova. The loc - System-wide decisions: `docs/adr/` - Context-specific decisions may live in `docs/contexts//adr/`. +- iOS system appearance bridge: + `docs/contexts/mobile-app/adr/0001-use-local-ios-system-appearance-bridge.md` If a listed context file does not exist yet, proceed with code exploration and mention any domain assumptions that materially affect the work. diff --git a/docs/contexts/mobile-app/CONTEXT.md b/docs/contexts/mobile-app/CONTEXT.md index 1153bba0..c2c825e5 100644 --- a/docs/contexts/mobile-app/CONTEXT.md +++ b/docs/contexts/mobile-app/CONTEXT.md @@ -15,8 +15,10 @@ _Avoid_: Called by client, Server Error, raw stack trace - `docs/bottom-sheets.md` - `docs/styling.md` - `modules/dayova-system-appearance/README.md` for the iOS appearance bridge, - its rationale, native contract, alternatives, validation matrix, and removal + native contract, operational guidance, validation matrix, and removal criteria. +- `docs/contexts/mobile-app/adr/0001-use-local-ios-system-appearance-bridge.md` + for the bridge decision, history, alternatives, and consequences. - `patches/README.md` for patched package behavior that affects Expo/Metro builds, including the NativeWind release-build patch. diff --git a/docs/contexts/mobile-app/adr/0001-use-local-ios-system-appearance-bridge.md b/docs/contexts/mobile-app/adr/0001-use-local-ios-system-appearance-bridge.md new file mode 100644 index 00000000..2a5447d4 --- /dev/null +++ b/docs/contexts/mobile-app/adr/0001-use-local-ios-system-appearance-bridge.md @@ -0,0 +1,152 @@ +# ADR: Use a Local iOS System-Appearance Bridge + +- Status: Accepted as a temporary compatibility workaround +- Date: 2026-07-19 +- Delivery: [PR #300](https://github.com/Dayova/dayova-mvp/pull/300) +- Operational documentation: + [`modules/dayova-system-appearance/README.md`](../../../../modules/dayova-system-appearance/README.md) + +## Context + +Dayova supports Light, System, and Dark appearance preferences. One resolved +`"light" | "dark"` value must keep Dayova's JavaScript theme context, +NativeWind variables, React Navigation colors, UIKit controls, native sheets, +root background, and status bar synchronized. + +The standard solution is Expo's `userInterfaceStyle: "automatic"` together +with React Native's public `Appearance` or `useColorScheme` APIs. During native +validation of the Expo SDK 57 / React Native 0.86 upgrade on the installed iOS +26.5 simulator, React Native's appearance value was stale during cold launch +and live system appearance changes while the active `UIWindow` had already +adopted the correct UIKit trait. Depending only on the cached React Native value +made different app layers disagree about the current theme. + +React Native 0.86's pinned iOS source keeps a cached color scheme in +`RCTAppearance`. It refreshes that cache when it receives +`RCTUserInterfaceStyleDidChangeNotification`. Its native resolver can use either +the trait collection supplied with a notification or the key window's trait +collection when key-window mode is enabled. + +That source behavior explains why the selected workaround changes Dayova's +result. It does not prove a universal React Native 0.86 defect. The investigation +did not produce a minimal standalone React Native reproduction, and the issue +was observed on one upgraded native stack. + +## Decision + +Use a local, iOS-only Expo module named `DayovaSystemAppearance` as a narrow +compatibility layer. + +The module: + +- reads `traitCollection.userInterfaceStyle` from Dayova's active key window; +- attaches a non-interactive UIKit view to that window to observe live trait + changes; +- exposes a synchronous `getColorScheme(): "light" | "dark"` method and an + `onChange` event; +- refreshes the value when the app becomes active; +- enables React Native's key-window appearance mode and refreshes + `RCTAppearance` during module creation and foreground activation; +- is discovered through Expo Autolinking rather than hand-edited into the + generated Xcode project; and +- remains private to Dayova instead of becoming a published general-purpose + package. + +The application layer continues to own preference persistence, theme +resolution, NativeWind variables, navigation colors, root background, and +status-bar styling. Android and web continue to use React Native's standard +`useColorScheme` path. + +The module pod targets iOS 16.4 to preserve Expo SDK 57's module baseline. The +generated Dayova application still targets iOS 17 because `@clerk/expo` +independently requires and writes that target. This module does not establish +the app-wide minimum. + +## Decision History + +1. `86364a1` introduced the module after the stale React Native appearance value + was observed. The app config changed from fixed Light to `automatic`, and the + iOS application hook began reading the key window through the module. +2. `687970c` enabled React Native's key-window appearance mode, added native + appearance refreshes during creation and activation, and replaced the + NativeWind preference setter with React Native's public + `Appearance.setColorScheme` API. +3. `73834a8` restored the module's independent iOS 16.4 compatibility by gating + the iOS 17 trait-registration API and retaining the older-iOS callback. + +Native validation ran on an iOS 26.5 simulator. Debug and optimized Release +compiled the module for `arm64-apple-ios16.4-simulator`, but no iOS 16.4 runtime +was installed. The minimum OS therefore has compile coverage, not end-to-end +runtime coverage. + +## Alternatives Considered + +Repository history establishes that the standard React Native and NativeWind +paths were actually used before the local module. The remaining entries record +the design space evaluated for maintenance; they are not claims that every +option was prototyped during the original investigation. + +| Option | Status | Assessment | +| --- | --- | --- | +| React Native `useColorScheme` / `Appearance.addChangeListener` only | Used and preferred when reliable | This remains the normal non-iOS path. It was insufficient on the validated React Native 0.86 iOS stack because its value was stale. It is the desired replacement when it passes Dayova's matrix. | +| NativeWind `useColorScheme` | Used before the workaround | NativeWind delegates to native appearance APIs, so it was not an independent source when React Native's value was stale. Its preference setter was replaced with the public `Appearance.setColorScheme` call. | +| Expo `userInterfaceStyle: "automatic"` | Implemented and required | This configures the native app to support both styles. It is a prerequisite rather than a replacement for correct runtime observation. | +| `expo-system-ui` | Already used for root background behavior | It manages system/root presentation but is not an independent live key-window appearance source for the Dayova theme provider. | +| Refresh only on app foreground | Rejected | It would repair some resume cases but miss live system changes while Dayova remains foregrounded. | +| Poll the appearance value | Rejected | Polling adds work and latency. Polling React Native preserves the stale source; polling UIKit still requires native code. | +| Remove System or force a fixed theme | Rejected | It avoids observation by removing an existing product capability and is a larger user-facing regression than the bridge. | +| Patch React Native or edit generated iOS files | Rejected | Either has a wider blast radius and a heavier upgrade burden. A local module isolates the workaround and survives continuous native generation, although its React Native coupling still needs upgrade review. | +| AppDelegate/config-plugin integration | Rejected | An app lifecycle subscriber can refresh on activation, but live observation still requires a UIKit trait environment and a JavaScript bridge. It adds app-global wiring without eliminating the native requirement. | +| `DynamicColorIOS` or semantic platform colors | Insufficient | Dynamic native colors can adapt independently, but Dayova's custom tokens, navigation themes, NativeWind variables, and application logic still need a resolved theme value. | +| Upstream React Native fix | Preferred long-term outcome | Remove the module once the public React Native path reliably returns and publishes Dayova's active key-window appearance across the supported iOS matrix. No upstream issue or patch is recorded by this repository yet. | + +## Consequences + +Positive consequences: + +- Dayova has one direct iOS source for the active window appearance. +- Live system changes, app overrides, and foreground restoration can keep theme + consumers synchronized. +- The workaround is isolated in one local module and one platform adapter. +- Native regeneration requires no manual Xcode edits. + +Costs and risks: + +- The module uses `RCTUseKeyWindowForSystemStyle` and native React appearance + notification behavior, which are not part of the documented JavaScript API + contract and may change during upgrades. +- Active-window lookup assumes Dayova's current single-window app model. +- Observer installation requires a window when the first listener attaches. +- Initialization, trait changes, and foreground refreshes can emit duplicate + state values, so consumers must remain idempotent. +- The module's iOS 16.4 compatibility is compile-tested but cannot be launched + at that floor while Clerk requires the app to target iOS 17. + +## Validation and Removal + +The module README owns the operational build, smoke-test, troubleshooting, and +maintenance instructions. Source-shape tests protect a few implementation +markers, but only native Debug/Release builds and runtime smoke tests validate +UIKit behavior. + +Review this decision on every Expo SDK, React Native, or minimum-iOS upgrade. +Remove the bridge when React Native's public appearance path passes all of these +without the module: + +1. cold launch in Light and Dark; +2. live system Light/Dark changes with Dayova foregrounded; +3. Dayova's explicit Light, System, and Dark overrides; +4. background/foreground appearance restoration; +5. synchronized NativeWind, navigation, root, native-control, sheet, and status + bar appearance; and +6. Debug and embedded-bundle Release execution across the supported iOS matrix. + +## Primary References + +- [Expo color themes](https://docs.expo.dev/develop/user-interface/color-themes/) +- [React Native Appearance](https://reactnative.dev/docs/appearance) +- [React Native useColorScheme](https://reactnative.dev/docs/usecolorscheme) +- [Expo local modules](https://docs.expo.dev/more/create-expo-module/) +- [Expo Autolinking](https://docs.expo.dev/modules/autolinking/) +- [Apple: registerForTraitChanges](https://developer.apple.com/documentation/uikit/uitraitchangeobservable-67e94/registerfortraitchanges%28_%3Ahandler%3A%29) +- [Apple: adapting when traits change](https://developer.apple.com/documentation/uikit/adapting-your-app-when-traits-change) diff --git a/modules/dayova-system-appearance/README.md b/modules/dayova-system-appearance/README.md index c17d70f8..60737fa2 100644 --- a/modules/dayova-system-appearance/README.md +++ b/modules/dayova-system-appearance/README.md @@ -14,10 +14,10 @@ again. | --- | --- | | Status | Active compatibility workaround | | Scope | Dayova iOS application only | -| Introduced | PR #300, commit `86364a1` | | Current native baseline | Expo SDK 57, React Native 0.86, module target iOS 16.4 | | Review trigger | Every Expo SDK, React Native, or minimum-iOS upgrade | | Exit condition | React Native's public appearance API passes the complete Dayova iOS validation matrix without this module | +| Decision record | [`docs/contexts/mobile-app/adr/0001-use-local-ios-system-appearance-bridge.md`](../../docs/contexts/mobile-app/adr/0001-use-local-ios-system-appearance-bridge.md) | ## Executive summary @@ -49,48 +49,9 @@ The problem was observed on a specific upgraded native stack. The existence of this workaround should not be interpreted as a claim that every React Native 0.86 application, iOS version, or simulator has the same problem. -## Origin and decision record - -The module evolved through three commits on the Expo SDK 57 upgrade branch: - -1. `86364a1` introduced the local module after native iOS validation found that - React Native's appearance value was stale while the active UIKit window had - already adopted the correct style. The app config changed from a fixed Light - style to `automatic`, and the iOS application hook began reading the native - window through this module. -2. `687970c` enabled React Native's key-window appearance mode and refreshed - `RCTAppearance` during creation and foreground activation. It also replaced - the NativeWind preference setter with React Native's public - `Appearance.setColorScheme` API so app-level overrides and UIKit use the same - native mechanism. -3. `73834a8` made the module independently compatible with Expo SDK 57's iOS - 16.4 baseline by gating the iOS 17 trait-registration API and adding the - older-iOS callback fallback. - -Native validation was performed on the installed iOS 26.5 simulator. The final -module compiled with an `arm64-apple-ios16.4-simulator` target in Debug and an -optimized Release build, but no iOS 16.4 runtime was installed. See -"Known limitations and risks" for the distinction between compile and runtime -coverage. - -## What was diagnosed - -React Native 0.86's pinned iOS source keeps a cached color scheme in -`RCTAppearance`. It updates that cache when it receives -`RCTUserInterfaceStyleDidChangeNotification`. Its native color-scheme resolver -can use either the trait collection supplied with a notification or the key -window's trait collection when key-window mode is enabled. - -The workaround deliberately selects the second behavior and refreshes the -notification at lifecycle points where the stale value was observed. The -Dayova-specific event does not rely on that cache at all; it reads and observes -the active window directly. - -This source-level explanation shows why the workaround changes Dayova's -behavior. It is not proof of a universal upstream defect, and the validation -did not reduce the issue to a minimal standalone React Native reproduction. -That is why the module is documented as a local compatibility layer rather -than a permanent correction to React Native. +The architecture rationale, source-level diagnosis, decision history, +alternatives, and consequences live in the +[mobile-app ADR](../../docs/contexts/mobile-app/adr/0001-use-local-ios-system-appearance-bridge.md). ## Why a native module is necessary @@ -111,16 +72,6 @@ window's UIKit trait. Reading and observing `UIWindow.traitCollection` requires native iOS code, so some form of native bridge was required if Dayova was to retain its System preference and react immediately to live changes. -The local Expo Modules API was chosen because it provides: - -- a typed native-module contract; -- listener-aware setup and cleanup hooks; -- an app-foreground lifecycle hook; -- automatic discovery from the repository's `modules/` directory; -- CocoaPods integration without hand-editing the generated Xcode project; and -- a small implementation that remains owned by Dayova rather than a fork of a - general-purpose theming library. - ## Scope and non-goals The module is responsible for: @@ -315,27 +266,6 @@ The generated Dayova application currently targets iOS 17 because `@clerk/expo` independently requires and writes iOS 17 during prebuild. The module does not cause that app-wide minimum. -## Alternatives and trade-offs - -The repository history establishes that the standard React Native and -NativeWind paths were used before this module. The other options below document -the design space evaluated for maintenance purposes; they should not be read as -a claim that every option was prototyped during the original validation. - -| Option | Status | Assessment | -| --- | --- | --- | -| React Native `useColorScheme` / `Appearance.addChangeListener` only | Used and preferred when reliable | This is the normal solution and remains the non-iOS path. It was insufficient on the validated React Native 0.86 iOS stack because its value was stale. The module should be removed when this path passes Dayova's matrix again. | -| NativeWind `useColorScheme` | Used before the workaround | NativeWind delegates to native appearance APIs. It cannot provide an independent source when React Native's appearance value is stale. Its initialization-sensitive setter was also replaced with the public `Appearance.setColorScheme` call. | -| Expo `userInterfaceStyle: "automatic"` | Implemented and required | This configures the native app to support both styles. It is a prerequisite, not a replacement for correct runtime observation. Without it, iOS can remain fixed to the configured style. | -| `expo-system-ui` | Already used for root background behavior | It can manage system/root UI presentation, but it is not an independent live key-window appearance event source for the Dayova theme provider. | -| Refresh only on app foreground | Not selected | This would repair some background/resume cases but would miss a live system change while Dayova remains foregrounded. | -| Poll the appearance value | Not selected | Polling adds latency and continual work. Polling React Native would still poll the stale value; polling UIKit would still require native code. | -| Remove the System preference or force a fixed theme | Not selected | This avoids system observation by removing existing product behavior. It is a larger user-facing regression than the small bridge. | -| Patch React Native or edit generated iOS files | Not selected | A package patch or generated-project edit would have a wider blast radius and a heavier upgrade burden. A local module keeps the workaround isolated and compatible with native regeneration, although its React Native synchronization calls still require upgrade review. | -| AppDelegate/config-plugin integration | Not selected | An app lifecycle subscriber can refresh on activation, but live trait observation still needs a UIKit trait environment and a JavaScript bridge. It adds app-global wiring without removing the core native requirement. | -| `DynamicColorIOS` or platform semantic colors | Not sufficient for this app | Dynamic native colors can adapt without JavaScript, but Dayova also has custom tokens, navigation themes, NativeWind variables, and application logic that require a resolved theme value. | -| Upstream React Native fix | Preferred long-term outcome | Once the public React Native API is verified to return and publish the active key-window appearance across Dayova's supported iOS matrix, this module should be deleted rather than expanded. No upstream issue or patch is recorded by this repository yet. | - ## Known limitations and risks - **React Native implementation coupling:** The key-window function and native @@ -360,14 +290,17 @@ a claim that every option was prototyped during the original validation. ### Automated checks -Run the focused structural regression tests: +Run the focused source-shape regression tests: ```sh pnpm test src/lib/ios-appearance-module.test.ts ``` -They guard the Expo iOS 16.4 module floor and the iOS 17 availability/fallback -split. They do not replace a native runtime test. +These tests only assert that the podspec contains the iOS 16.4 target and that +the Swift source retains the expected modern and legacy observer markers and +control-flow order. They do not compile Swift, execute UIKit, prove callback +reachability, or validate event delivery. Native Debug/Release builds and the +runtime smoke-test matrix remain the behavioral evidence. Confirm Expo can discover the module: @@ -476,6 +409,9 @@ After that proof, remove: - `src/lib/ios-appearance-module.test.ts`; and - references to the workaround in the platform and mobile-app documentation. +Mark the mobile-app ADR as Superseded with the replacement evidence; retain the +ADR as historical decision context. + Keep `userInterfaceStyle: "automatic"`, the Dayova preference model, and the public `Appearance.setColorScheme` integration; they are normal theme-system behavior, not part of this workaround. diff --git a/src/lib/ios-appearance-module.test.ts b/src/lib/ios-appearance-module.test.ts index c06515ca..95ac68f5 100644 --- a/src/lib/ios-appearance-module.test.ts +++ b/src/lib/ios-appearance-module.test.ts @@ -11,22 +11,65 @@ const IOS_PODSPEC_PATH = resolve( "modules/dayova-system-appearance/ios/DayovaSystemAppearance.podspec", ); +function sectionBetween( + source: string, + startMarker: string, + endMarker: string, +) { + const startIndex = source.indexOf(startMarker); + const endIndex = source.indexOf(endMarker, startIndex + startMarker.length); + + expect(startIndex).toBeGreaterThanOrEqual(0); + expect(endIndex).toBeGreaterThan(startIndex); + + return source.slice(startIndex, endIndex); +} + describe("iOS system appearance module", () => { - test("does not raise Expo SDK 57's iOS 16.4 support floor", () => { + test("pins the module to Expo SDK 57's iOS 16.4 support floor", () => { const podspec = readFileSync(IOS_PODSPEC_PATH, "utf8"); expect(podspec).toMatch(/s\.platforms\s*=\s*\{\s*:ios\s*=>\s*'16\.4'\s*\}/); }); - test("uses the iOS 17 trait API with an older-iOS fallback", () => { + test("keeps the iOS 17 registration behind its availability marker", () => { const module = readFileSync(IOS_MODULE_PATH, "utf8"); - const availabilityCheck = module.indexOf("if #available(iOS 17.0, *)"); - const traitRegistration = module.indexOf("registerForTraitChanges"); + const initializer = sectionBetween( + module, + "override init(frame: CGRect)", + "override func traitCollectionDidChange", + ); + const availabilityCheck = initializer.indexOf("if #available(iOS 17.0, *)"); + const traitRegistration = initializer.indexOf("registerForTraitChanges"); + const sharedHandlerCall = initializer.indexOf( + "view.emitColorSchemeIfChanged(from: previousTraitCollection)", + ); expect(availabilityCheck).toBeGreaterThanOrEqual(0); expect(traitRegistration).toBeGreaterThan(availabilityCheck); - expect(module).toContain( + expect(sharedHandlerCall).toBeGreaterThan(traitRegistration); + }); + + test("keeps the pre-iOS 17 callback guard and shared-handler call in order", () => { + const module = readFileSync(IOS_MODULE_PATH, "utf8"); + const legacyCallback = sectionBetween( + module, "override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?)", + "required init?(coder: NSCoder)", + ); + const availabilityCheck = legacyCallback.indexOf( + "if #available(iOS 17.0, *)", + ); + const modernIosReturn = legacyCallback.indexOf("return", availabilityCheck); + const sharedHandlerCall = legacyCallback.indexOf( + "emitColorSchemeIfChanged(from: previousTraitCollection)", ); + + expect(legacyCallback).toContain( + "super.traitCollectionDidChange(previousTraitCollection)", + ); + expect(availabilityCheck).toBeGreaterThanOrEqual(0); + expect(modernIosReturn).toBeGreaterThan(availabilityCheck); + expect(sharedHandlerCall).toBeGreaterThan(modernIosReturn); }); }); From 8a52c3dc61276239d4be28438ce7a0762cdcb917 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20R=C3=B6ssner?= Date: Mon, 20 Jul 2026 15:34:19 +0200 Subject: [PATCH 7/7] Fix mobile documentation paths --- docs/contexts/mobile-app/CONTEXT.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/contexts/mobile-app/CONTEXT.md b/docs/contexts/mobile-app/CONTEXT.md index c2c825e5..38889bbb 100644 --- a/docs/contexts/mobile-app/CONTEXT.md +++ b/docs/contexts/mobile-app/CONTEXT.md @@ -14,10 +14,10 @@ _Avoid_: Called by client, Server Error, raw stack trace - `docs/bottom-sheets.md` - `docs/styling.md` -- `modules/dayova-system-appearance/README.md` for the iOS appearance bridge, +- `../../../modules/dayova-system-appearance/README.md` for the iOS appearance bridge, native contract, operational guidance, validation matrix, and removal criteria. -- `docs/contexts/mobile-app/adr/0001-use-local-ios-system-appearance-bridge.md` +- `adr/0001-use-local-ios-system-appearance-bridge.md` for the bridge decision, history, alternatives, and consequences. - `patches/README.md` for patched package behavior that affects Expo/Metro builds, including the NativeWind release-build patch.