diff --git a/README.md b/README.md index c5fa25d..6362e12 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,27 @@ npm install react-native-device-info > > For device info, install either `expo-device` or `react-native-device-info` — at least one is required. If your project already uses one of them, no extra installation is needed. +### Bare React Native CLI (without Expo) + +Detour's peer dependencies are Expo Modules (they ship native code). In a bare React Native CLI project, add Expo Modules once and point Metro at `expo/metro-config`: + +```sh +npx install-expo-modules@latest +npx expo install --fix +``` + +```js +// metro.config.js +const { getDefaultConfig } = require("expo/metro-config"); +const { mergeConfig } = require("@react-native/metro-config"); + +module.exports = mergeConfig(getDefaultConfig(__dirname), {}); +``` + +Then rebuild — `DetourProvider` and the hooks work exactly as in the Expo examples. + +See [Expo Modules setup](https://detour.swmansion.com/docs/sdk/react-native/sdk-installation#expo-modules-setup-react-native-cli) for the full walkthrough, and [build issues](https://detour.swmansion.com/docs/sdk/react-native/testing#bare-react-native-cli-build-issues) if you hit setup errors. + ## Usage Mount `DetourProvider` at the root of your app and configure it with your credentials. How you consume the resolved link depends on your navigation library. diff --git a/examples/expo-bare/README.md b/examples/expo-bare/README.md index 75d8d15..701632e 100644 --- a/examples/expo-bare/README.md +++ b/examples/expo-bare/README.md @@ -1,58 +1,129 @@ # Detour Expo Bare Example -This example demonstrates a simple integration of `@swmansion/react-native-detour` in a React Native app. +The most minimal integration of [`@swmansion/react-native-detour`](https://detour.swmansion.com/docs/sdk/react-native/sdk-installation) — no router, no navigation library. `DetourProvider` is initialized with SDK config and a single screen renders the raw `useDetourContext()` state. No router or navigation. -## Scenario represented +Use this as a quick SDK smoke test or as a base before adding your own routing. -- `DetourProvider` is initialized with SDK config. -- A single screen consumes `useDetourContext()`. -- No router/navigation integration is implemented here. -- The example is focused on exposing Detour link state. +**Related examples:** -## What this example is for +- [`examples/expo-router`](../expo-router) — minimal Expo Router integration +- [`examples/expo-router-advanced`](../expo-router-advanced) — auth-gated Expo Router flow +- [`examples/react-navigation`](../react-navigation) — minimal React Navigation integration -- Quick SDK smoke test in isolation. -- Verifying provider setup and context values. -- Base starting point before adding your own navigation/deep-link routing logic. +## Test flow -If you need more complex routing flows with a specific navigation library, check out the following examples: +Launch the app — once the startup check completes, `isLinkProcessed` turns `true`. With no pending link, `type`, `url`, and `route` are empty. -- `examples/expo-router` -- `examples/expo-router-advanced` -- `examples/react-navigation` +Trigger a Universal/App link (see [Triggering links](#triggering-links)) — `type`, `url`, and `route` populate with the resolved link data. -## Test flow +To test the **deferred** case: follow the [Deferred deep link](#triggering-links) setup before installing. The deferred check only runs once - the SDK writes a persistent flag on first launch, so subsequent launches skip it. Reinstalling is needed to re-trigger the deferred path. + +A **custom-scheme** link (`detour-expo-bare://details`) populates the same `type`, `url`, and `route` fields (with `type: scheme`) — see [Triggering links](#triggering-links). + +
+Resolved Detour link state +
+ +> _**Resolved link state**. The screen after a Detour link is resolved with `isLinkProcessed: true` and `type`, `url`, and `route` filled in._ + +## Set up Detour + +You need a Detour account to register this app and generate its credentials. [Sign up](https://godetour.dev/auth/signup) and open the [Detour Dashboard](https://godetour.dev). If you run into issues during setup, the [Dashboard Walkthrough](https://detour.swmansion.com/docs/Fundamentals/dashboard) covers each step in detail. + +### 1. Register the app + +Create an organization and add a new app. Detour assigns it a base link URL of the form `https://.godetour.link/` visible in **Link settings** section. + +> In **Link settings**, the dashboard asks for a fallback Redirect URL to mark setup as complete. It only controls where **web** traffic lands — it has no effect on the deferred or Universal/App link flows these examples test, so it can be left empty or filled with a placeholder URL for local development. For production, see [Full app configuration](https://detour.swmansion.com/docs/Fundamentals/getting-started#4-complete-app-configuration). + +→ [Dashboard › Apps](https://detour.swmansion.com/docs/Fundamentals/dashboard#apps) + + +
+ Detour Dashboard organization creator + Detour Dashboard app creator +
+Detour Dashboard app link details +
+ +> **Dashboard**. _Create an organization (top-left), create a new app (top-right), and use the generated link (marked with red) in Link settings (bottom)._ + + +### 2. Configure the platforms + +Open **App configuration** and fill in the platform details: + +- **iOS:** set Bundle ID to `detourreactnative.expobare` and provide Team ID and App Store ID. The **Team ID must be your real Apple Developer Team ID** — the one the build is signed with (`DEVELOPMENT_TEAM` in Xcode › Signing & Capabilities, also shown under [Apple Developer › Membership](https://developer.apple.com/account)). A placeholder or mismatched Team ID makes the Universal link open in Safari instead of the app. The App Store ID can stay a placeholder for local development. +- **Android:** set package name to `detourreactnative.expobare` and add a SHA-256 certificate fingerprint. The **fingerprint must match the keystore that signs the build** — a wrong value makes Android open the App link in the browser instead of the app. For local development (`npx expo run:android`), use the **local debug keystore** fingerprint. See [Testing Android App Links](https://detour.swmansion.com/docs/sdk/react-native/testing#testing-android-app-links) for more info. + +The dashboard generates the `associatedDomains` and intent-filter snippets to paste into `app.json` ([below](#configuring-appjson)). + +> For a production integration, fill all fields with real values. See [App configuration](https://detour.swmansion.com/docs/Fundamentals/getting-started#app-configuration) for full guidance. + +→ [Dashboard › App configuration](https://detour.swmansion.com/docs/Fundamentals/dashboard#app-configuration) + +Detour Dashboard App configuration +
+ +> **Dashboard › App configuration**. _iOS and Android filled configurations with generated integration code snippets ready to copy._ -1. Start the app on iOS/Android. -2. Confirm the app renders and `isLinkProcessed` is `false`. -3. Trigger a Detour link. -4. Confirm `isLinkProcessed` flips to `true` and `type`, `url`, and `route` fields are populated on screen. +### 3. Copy your credentials + +Open **API configuration** and copy your `appID` and publishable `apiKey` into this example's `.env`. + +→ [Dashboard › API configuration](https://detour.swmansion.com/docs/Fundamentals/dashboard#api-configuration-and-key-security) + +Detour Dashboard API configuration +
+ +> **Dashboard › API configuration**. _The API configuration panel with `appID` and the publishable `apiKey` ready to copy._ ## Configuring app.json -After registering your app in the [Detour Dashboard](https://godetour.dev), replace the placeholders in `app.json` with values from the **API configuration** section: +Replace the placeholders in `app.json` with the values from the dashboard's [App configuration](https://detour.swmansion.com/docs/Fundamentals/dashboard#app-configuration) section: - `` — your organization slug - `` — the path prefix assigned to your app ```json "ios": { - "bundleIdentifier": ".godetour.link"] }, "android": { - "package": "", + // ... "intentFilters": [{ - "data": [{ "host": ".godetour.link", "pathPrefix": "/" }] + // ... + "data": [{ "scheme": "https", "host": ".godetour.link", "pathPrefix": "/" }] }] } ``` -These same values go into the simulator commands in the section below. +> **Universal Links not opening the app?** Add `?mode=developer` to the `associatedDomains` entry: `"applinks:.godetour.link?mode=developer"`. This bypasses Apple's CDN and fetches the AASA file directly from your domain on every launch instead of relying on a potentially stale cached version. Requires **Settings → Developer → Associated Domains Development** to be enabled on the device and a development-signed build. Remove it before submitting to TestFlight or the App Store. + +These same values go into the simulator commands in the next section. ## Triggering links -**Universal / App link** — open a Detour HTTPS link: +
+Deferred deep link + +Follow these steps to test the deferred flow: + +1. Uninstall the app or clear its data to start from a clean state. +2. Open a Detour link in the device's mobile browser. +3. Install and launch the app — the SDK resolves the link automatically. + +> **Note:** On Android, the install referrer is typically unavailable in development builds, so deferred matching falls back to probabilistic signals (IP, device fingerprint) only. See [Limitations & Known Issues](https://detour.swmansion.com/docs/Architecture/architecture-limitations). + +Alternatively on iOS, you can also copy the link to your clipboard before uninstalling — the SDK reads the clipboard on first launch (`shouldUseClipboard: true`), so you can skip the browser step. It simulates a link clicked before the app was installed. + +
+ +
+Universal / App link + +Open a Detour link directly from the terminal: ```sh # iOS simulator @@ -62,17 +133,38 @@ xcrun simctl openurl booted "https://.godetour.link//" adb shell am start -a android.intent.action.VIEW -d "https://.godetour.link//" ``` -**Deferred link** — simulates a link clicked before the app was installed: +Alternatively, paste the link into Notes or Messages on the device and tap it — this uses the same OS routing path a real user would. -1. Copy a Detour link URL from the Dashboard to your clipboard. -2. Kill or uninstall the app. -3. Relaunch — the SDK reads the clipboard on startup and resolves the link automatically. +
+ +
+Custom scheme + +```sh +# iOS simulator +npx uri-scheme open "detour-expo-bare://details" --ios + +# Android emulator +npx uri-scheme open "detour-expo-bare://details" --android +``` + +
+ +For more cases and gotchas, see [Testing & Troubleshooting](https://detour.swmansion.com/docs/sdk/react-native/testing). ## Quick start - Install dependencies from the repo root: `pnpm install` -- Configure this app in Detour Dashboard: `https://godetour.dev` using identifiers from `app.json` (for example `ios.bundleIdentifier`, `android.package`). -- Use values from Dashboard from "API configuration" section to fill `.env` and update `app.json` with generated integration code. +- Configure this app in the [Detour Dashboard](https://godetour.dev) using identifiers from `app.json` (for example `ios.bundleIdentifier`, `android.package`). +- Use the values from the dashboard's [API configuration](https://detour.swmansion.com/docs/Fundamentals/dashboard#api-configuration-and-key-security) section to fill `.env` and update `app.json` with the generated integration code. - Run prebuild for this example: `pnpm prebuild` - Start the example: `pnpm start` - Run on device/simulator: `pnpm ios` or `pnpm android` + +## See also + +- [SDK Usage](https://detour.swmansion.com/docs/sdk/react-native/sdk-usage) — how to integrate Detour with your navigation library +- [API Reference](https://detour.swmansion.com/docs/sdk/react-native/api-reference) — full type and method reference +- [`examples/expo-router`](../expo-router) — minimal Expo Router integration +- [`examples/expo-router-advanced`](../expo-router-advanced) — auth-gated Expo Router flow +- [`examples/react-navigation`](../react-navigation) — minimal React Navigation integration diff --git a/examples/expo-bare/assets/screenshots/app-resolved.png b/examples/expo-bare/assets/screenshots/app-resolved.png new file mode 100644 index 0000000..985d96a Binary files /dev/null and b/examples/expo-bare/assets/screenshots/app-resolved.png differ diff --git a/examples/expo-bare/assets/screenshots/dashboard-api-configuration.png b/examples/expo-bare/assets/screenshots/dashboard-api-configuration.png new file mode 100644 index 0000000..3ce0505 Binary files /dev/null and b/examples/expo-bare/assets/screenshots/dashboard-api-configuration.png differ diff --git a/examples/expo-bare/assets/screenshots/dashboard-app-configuration.png b/examples/expo-bare/assets/screenshots/dashboard-app-configuration.png new file mode 100644 index 0000000..4697ced Binary files /dev/null and b/examples/expo-bare/assets/screenshots/dashboard-app-configuration.png differ diff --git a/examples/expo-bare/assets/screenshots/dashboard-create-app-a.png b/examples/expo-bare/assets/screenshots/dashboard-create-app-a.png new file mode 100644 index 0000000..a3995d0 Binary files /dev/null and b/examples/expo-bare/assets/screenshots/dashboard-create-app-a.png differ diff --git a/examples/expo-bare/assets/screenshots/dashboard-create-app-b.png b/examples/expo-bare/assets/screenshots/dashboard-create-app-b.png new file mode 100644 index 0000000..ed23388 Binary files /dev/null and b/examples/expo-bare/assets/screenshots/dashboard-create-app-b.png differ diff --git a/examples/expo-bare/assets/screenshots/dashboard-create-app-c.png b/examples/expo-bare/assets/screenshots/dashboard-create-app-c.png new file mode 100644 index 0000000..26adc7f Binary files /dev/null and b/examples/expo-bare/assets/screenshots/dashboard-create-app-c.png differ diff --git a/examples/expo-bare/src/Screen.tsx b/examples/expo-bare/src/Screen.tsx index 5ac5a08..db6dbba 100644 --- a/examples/expo-bare/src/Screen.tsx +++ b/examples/expo-bare/src/Screen.tsx @@ -39,22 +39,16 @@ export const Screen = () => { - Universal / App Link - - Open a Detour link in the browser — iOS/Android will launch the app. Test with the - simulator using: - - npx uri-scheme open {`"detour-expo-bare://"`} --ios - Deferred Link - Copy a Detour link to your clipboard, then kill and relaunch the app. Because{" "} - shouldUseClipboard is enabled, Detour reads the - clipboard on startup and resolves the pending link automatically. + Uninstall the app or clear its data, open a Detour link in the mobile browser, then + install and launch — the SDK resolves the link automatically. + https://<your-org>.godetour.link/<hash>/ + + Universal / App Link - Make sure Copy link feature enabled is turned on in - App Configuration in the Detour panel. + Open in browser or paste into Notes/Messages and tap — iOS/Android will launch the app. https://<your-org>.godetour.link/<hash>/ diff --git a/examples/expo-router-advanced/README.md b/examples/expo-router-advanced/README.md index cd4a665..e435ac9 100644 --- a/examples/expo-router-advanced/README.md +++ b/examples/expo-router-advanced/README.md @@ -1,58 +1,147 @@ # Detour Expo Router Example (Advanced) -This example simulates a gated flow where a deep link is handled only after the user signs in. -For a minimal setup, see `examples/expo-router`. +An auth-gated [Expo Router](https://docs.expo.dev/router/introduction/) flow where an incoming deep link is held until the user signs in and clears first-launch onboarding, then replayed at the target screen. Navigation is driven entirely by `useDetourGate` in the root layout — it waits until Detour finishes processing, then routes on auth and onboarding state. -## Scenario represented +**Related examples:** -- Two entry points: - - `/` when the user is signed out. - - `/home` when the user is signed in. -- A Detour deep link can arrive at any time. -- If the user is not signed in, the link is stored as a pending route and Detour context is cleared. -- Once the user signs in, the app redirects to the pending deep link. +- [`examples/expo-router`](../expo-router) — minimal Expo Router integration +- [`examples/expo-router-native-intent`](../expo-router-native-intent) — route directly via `+native-intent` -## Native intent handling +
+
+ Sign-in screen with a Detour link pending + First-launch onboarding screen + Details screen reached after the pending link is replayed +
+
-This example uses `src/app/+native-intent.tsx` to intercept Detour domains -and any other URL-like paths before Expo Router routing +> _**Auth-gated flow**. A Detour link arrives while signed out, so the app waits on the sign-in screen (left) → after signing in, a first-time user goes through onboarding (center) → the pending link is replayed and the app lands on Details (right)._ ## Test flow -1. Start the app on iOS/Android. -2. You land on `/` (signed out). -3. Trigger a Detour universal link to `/details` (or any route) while signed out. - - The link is captured, context is cleared, and the app stays on `/`. - - You should see the pending route displayed on the screen. -4. Tap **Sign in**. -5. The app should now redirect to the deep link route. -6. Return to `/home` - the link should NOT trigger again. +**Deferred link** + +1. Follow the [Deferred deep link](#triggering-links) setup to register a pre-install click, then install and launch the app signed out. The deferred match runs only on this fresh first launch. +2. You land on `/sign-in` — Detour has matched the click and is holding the link in context, so a **Link pending** banner appears. +3. Tap **Sign in**, then tap **Get Started** on the onboarding screen (shown on the first launch). +4. The held link is replayed and the app lands on `/details`, with the forwarded params visible. +5. Switch back to the tabs — the same link does **not** trigger again (the gate already cleared it). + +**Universal / App link** + +Same flow as above but don't need to reinstall — the link arrives at runtime. While signed out (tap **Logout** to get there), trigger a Detour link to `/details` (see [Triggering links](#triggering-links)). On later launches the onboarding step is skipped. + +**Custom scheme** + +Same runtime flow as the Universal / App link, just opened through the app's custom scheme. Trigger the custom-scheme URL (see [Triggering links](#triggering-links)) — it's held through the auth gate and replayed to `/details` the same way. + +## Set up Detour + +You need a Detour account to register this app and generate its credentials. [Sign up](https://godetour.dev/auth/signup) and open the [Detour Dashboard](https://godetour.dev). If you run into issues during setup, the [Dashboard Walkthrough](https://detour.swmansion.com/docs/Fundamentals/dashboard) covers each step in detail. + +### 1. Register the app + +Create an organization and add a new app. Detour assigns it a base link URL of the form `https://.godetour.link/` visible in **Link settings** section. + +> In **Link settings**, the dashboard asks for a fallback Redirect URL to mark setup as complete. It only controls where **web** traffic lands — it has no effect on the deferred or Universal/App link flows these examples test, so it can be left empty or filled with a placeholder URL for local development. For production, see [Full app configuration](https://detour.swmansion.com/docs/Fundamentals/getting-started#4-complete-app-configuration). + +→ [Dashboard › Apps](https://detour.swmansion.com/docs/Fundamentals/dashboard#apps) + +
+ Detour Dashboard organization creator + Detour Dashboard app creator +
+Detour Dashboard app link details +
+ +> **Dashboard**. _Create an organization (top-left), create a new app (top-right), and use the generated link (marked with red) in Link settings (bottom)._ + +### 2. Configure the platforms + +Open **App configuration** and fill in the platform details: + +- **iOS:** set Bundle ID to `detourreactnative.exporouteradvanced` and provide Team ID and App Store ID. The **Team ID must be your real Apple Developer Team ID** — the one the build is signed with (`DEVELOPMENT_TEAM` in Xcode › Signing & Capabilities, also shown under [Apple Developer › Membership](https://developer.apple.com/account)). A placeholder or mismatched Team ID makes the Universal link open in Safari instead of the app. The App Store ID can stay a placeholder for local development. +- **Android:** set package name to `detourreactnative.exporouteradvanced` and add a SHA-256 certificate fingerprint. The **fingerprint must match the keystore that signs the build** — a wrong value makes Android open the App link in the browser instead of the app. For local development (`npx expo run:android`), use the **local debug keystore** fingerprint. See [Testing Android App Links](https://detour.swmansion.com/docs/sdk/react-native/testing#testing-android-app-links) for more info. + +The dashboard generates the `associatedDomains` and intent-filter snippets to paste into `app.json` ([below](#configuring-appjson)). + +> For a production integration, fill all fields with real values. See [App configuration](https://detour.swmansion.com/docs/Fundamentals/getting-started#app-configuration) for full guidance. + +→ [Dashboard › App configuration](https://detour.swmansion.com/docs/Fundamentals/dashboard#app-configuration) + +Detour Dashboard App configuration +
+ +> **Dashboard › App configuration**. _iOS and Android filled configurations with generated integration code snippets ready to copy._ + +### 3. Copy your credentials + +Open **API configuration** and copy your `appID` and publishable `apiKey` into this example's `.env`. + +→ [Dashboard › API configuration](https://detour.swmansion.com/docs/Fundamentals/dashboard#api-configuration-and-key-security) + +Detour Dashboard API configuration +
+ +> **Dashboard › API configuration**. _The API configuration panel with `appID` and the publishable `apiKey` ready to copy._ + +### 4. (Optional) Tune deferred-link matching + +Because the deferred case is central here, you may want to review the **Matching** settings (threshold and time window) that control how a pre-install click is paired with the first launch. + +→ [Matching](https://detour.swmansion.com/docs/Architecture/matching) + +Detour Dashboard Matching configuration +
+ +> **Dashboard › Link Settings › Matching**. _The matching panel showing confidence threshold and time-window controls alongside match statistics._ ## Configuring app.json -After registering your app in the [Detour Dashboard](https://godetour.dev), replace the placeholders in `app.json` with values from the **API configuration** section: +Replace the placeholders in `app.json` with the values from the dashboard's [App configuration](https://detour.swmansion.com/docs/Fundamentals/dashboard#app-configuration) section: - `` — your organization slug - `` — the path prefix assigned to your app ```json "ios": { - "bundleIdentifier": ".godetour.link"] }, "android": { - "package": "", + // ... "intentFilters": [{ - "data": [{ "host": ".godetour.link", "pathPrefix": "/" }] + // ... + "data": [{ "scheme": "https", "host": ".godetour.link", "pathPrefix": "/" }] }] } ``` -These same values go into the simulator commands in the section below. +> **Universal Links not opening the app?** Add `?mode=developer` to the `associatedDomains` entry: `"applinks:.godetour.link?mode=developer"`. This bypasses Apple's CDN and fetches the AASA file directly from your domain on every launch instead of relying on a potentially stale cached version. Requires **Settings → Developer → Associated Domains Development** to be enabled on the device and a development-signed build. Remove it before submitting to TestFlight or the App Store. + +These same values go into the simulator commands in the next section. ## Triggering links -**Universal / App link** — open a Detour HTTPS link: +
+Deferred deep link + +Follow these steps to test the deferred flow: + +1. Uninstall the app or clear its data to start from a clean state. +2. Open a Detour link in the device's mobile browser. +3. Install and launch the app — the SDK resolves the link automatically. + +> **Note:** On Android, the install referrer is typically unavailable in development builds, so deferred matching falls back to probabilistic signals (IP, device fingerprint) only. See [Limitations & Known Issues](https://detour.swmansion.com/docs/Architecture/architecture-limitations). + +Alternatively on iOS, you can also copy the link to your clipboard before uninstalling — the SDK reads the clipboard on first launch (`shouldUseClipboard: true`), so you can skip the browser step. It simulates a link clicked before the app was installed. + +
+ +
+Universal / App link + +Open a Detour link directly from the terminal: ```sh # iOS simulator @@ -62,27 +151,37 @@ xcrun simctl openurl booted "https://.godetour.link//de adb shell am start -a android.intent.action.VIEW -d "https://.godetour.link//details" ``` -**Deferred link** — simulates a link clicked before the app was installed: +Alternatively, paste the link into Notes or Messages on the device and tap it — this uses the same OS routing path a real user would. -1. Copy a Detour link URL from the Dashboard to your clipboard. -2. Kill or uninstall the app. -3. Relaunch — the SDK reads the clipboard on startup and resolves the link automatically. +
-**Custom scheme**: +
+Custom scheme ```sh # iOS simulator -npx uri-scheme open "detour-expo-router-advanced://app/anything" --ios +npx uri-scheme open "detour-expo-router-advanced://(app)/details" --ios # Android emulator -npx uri-scheme open "detour-expo-router-advanced://app/anything" --android +npx uri-scheme open "detour-expo-router-advanced://(app)/details" --android ``` +
+ +For more cases and gotchas, see [Testing & Troubleshooting](https://detour.swmansion.com/docs/sdk/react-native/testing). + ## Quick start - Install dependencies from the repo root: `pnpm install` -- Configure this app in Detour Dashboard: `https://godetour.dev` using identifiers from `app.json` (for example `ios.bundleIdentifier`, `android.package`). -- Use values from Dashboard from "API configuration" section to fill `.env` and update `app.json` with generated integration code. +- Configure this app in the [Detour Dashboard](https://godetour.dev) using identifiers from `app.json` (for example `ios.bundleIdentifier`, `android.package`). +- Use the values from the dashboard's [API configuration](https://detour.swmansion.com/docs/Fundamentals/dashboard#api-configuration-and-key-security) section to fill `.env` and update `app.json` with the generated integration code. - Run prebuild for this example: `pnpm prebuild` - Start the example: `pnpm start` - Run on device/simulator: `pnpm ios` or `pnpm android` + +## See also + +- [SDK Usage](https://detour.swmansion.com/docs/sdk/react-native/sdk-usage) — how to integrate Detour with your navigation library +- [API Reference](https://detour.swmansion.com/docs/sdk/react-native/api-reference) — full type and method reference +- [`examples/expo-router`](../expo-router) — minimal Expo Router integration +- [`examples/expo-router-native-intent`](../expo-router-native-intent) — route directly via `+native-intent` diff --git a/examples/expo-router-advanced/app.json b/examples/expo-router-advanced/app.json index 2730d32..f65ce43 100644 --- a/examples/expo-router-advanced/app.json +++ b/examples/expo-router-advanced/app.json @@ -8,13 +8,13 @@ "newArchEnabled": true, "scheme": "detour-expo-router-advanced", "ios": { - "bundleIdentifier": "com.swmansion.privatemind", + "bundleIdentifier": "detourreactnative.exporouteradvanced", "supportsTablet": true, "icon": "./assets/detour-logo.png", - "associatedDomains": ["applinks:privatemind.godetour.link"] + "associatedDomains": ["applinks:.godetour.link"] }, "android": { - "package": "com.swmansion.privatemind", + "package": "detourreactnative.exporouteradvanced", "adaptiveIcon": { "foregroundImage": "./assets/detour-logo.png", "backgroundColor": "#0C1221" @@ -27,8 +27,8 @@ "data": [ { "scheme": "https", - "host": "privatemind.godetour.link", - "pathPrefix": "/SneWQjYDGD" + "host": ".godetour.link", + "pathPrefix": "/" } ], "category": ["BROWSABLE", "DEFAULT"] diff --git a/examples/expo-router-advanced/assets/screenshots/app-details.png b/examples/expo-router-advanced/assets/screenshots/app-details.png new file mode 100644 index 0000000..aca99d1 Binary files /dev/null and b/examples/expo-router-advanced/assets/screenshots/app-details.png differ diff --git a/examples/expo-router-advanced/assets/screenshots/app-onboarding.png b/examples/expo-router-advanced/assets/screenshots/app-onboarding.png new file mode 100644 index 0000000..932ee52 Binary files /dev/null and b/examples/expo-router-advanced/assets/screenshots/app-onboarding.png differ diff --git a/examples/expo-router-advanced/assets/screenshots/app-sign-in.png b/examples/expo-router-advanced/assets/screenshots/app-sign-in.png new file mode 100644 index 0000000..f6361ed Binary files /dev/null and b/examples/expo-router-advanced/assets/screenshots/app-sign-in.png differ diff --git a/examples/expo-router-advanced/assets/screenshots/dashboard-api-configuration.png b/examples/expo-router-advanced/assets/screenshots/dashboard-api-configuration.png new file mode 100644 index 0000000..2819be4 Binary files /dev/null and b/examples/expo-router-advanced/assets/screenshots/dashboard-api-configuration.png differ diff --git a/examples/expo-router-advanced/assets/screenshots/dashboard-app-configuration.png b/examples/expo-router-advanced/assets/screenshots/dashboard-app-configuration.png new file mode 100644 index 0000000..b3f1c9f Binary files /dev/null and b/examples/expo-router-advanced/assets/screenshots/dashboard-app-configuration.png differ diff --git a/examples/expo-router-advanced/assets/screenshots/dashboard-create-app-a.png b/examples/expo-router-advanced/assets/screenshots/dashboard-create-app-a.png new file mode 100644 index 0000000..a3995d0 Binary files /dev/null and b/examples/expo-router-advanced/assets/screenshots/dashboard-create-app-a.png differ diff --git a/examples/expo-router-advanced/assets/screenshots/dashboard-create-app-b.png b/examples/expo-router-advanced/assets/screenshots/dashboard-create-app-b.png new file mode 100644 index 0000000..eb8969e Binary files /dev/null and b/examples/expo-router-advanced/assets/screenshots/dashboard-create-app-b.png differ diff --git a/examples/expo-router-advanced/assets/screenshots/dashboard-create-app-c.png b/examples/expo-router-advanced/assets/screenshots/dashboard-create-app-c.png new file mode 100644 index 0000000..9aeee7f Binary files /dev/null and b/examples/expo-router-advanced/assets/screenshots/dashboard-create-app-c.png differ diff --git a/examples/expo-router-advanced/assets/screenshots/dashboard-matching.png b/examples/expo-router-advanced/assets/screenshots/dashboard-matching.png new file mode 100644 index 0000000..92fbf03 Binary files /dev/null and b/examples/expo-router-advanced/assets/screenshots/dashboard-matching.png differ diff --git a/examples/expo-router-advanced/src/LinkTestingCard.tsx b/examples/expo-router-advanced/src/LinkTestingCard.tsx new file mode 100644 index 0000000..3c7adf4 --- /dev/null +++ b/examples/expo-router-advanced/src/LinkTestingCard.tsx @@ -0,0 +1,48 @@ +import { Platform, Text, View } from "react-native"; + +import { styles } from "./styles"; + +type LinkTestingCardProps = { + title: string; +}; + +// Shared testing guide rendered by the onboarding screen and every main tab, +// so the instructions stay identical everywhere. The Detour link is shown once +// up top because both the Deferred and Universal / App flows use it. +export function LinkTestingCard({ title }: LinkTestingCardProps) { + return ( + + {title} + + Add credentials from the Detour panel to .env before + testing. + + + + + Detour link + https://<org>.godetour.link/<hash>/(app)/details + + Deferred Link + + Uninstall the app, open a Detour link in the mobile browser, then install and launch. Once + you authenticate, Detour picks up the pending link and navigates automatically. + + + Universal / App Link + + With the app installed, trigger the Detour link. You can do it by visiting it in the + browser, pasting and tapping it in Notes / Messages app or using a terminal command. + + + Custom Scheme + + A custom-scheme URL launches the app and is also routed through the gate: + + + npx uri-scheme open {`"detour-expo-router-advanced://(app)/details"`}{" "} + {Platform.OS === "android" ? "--android" : "--ios"} + + + ); +} diff --git a/examples/expo-router-advanced/src/app/(app)/(tabs)/explore.tsx b/examples/expo-router-advanced/src/app/(app)/(tabs)/explore.tsx index c58b642..d613196 100644 --- a/examples/expo-router-advanced/src/app/(app)/(tabs)/explore.tsx +++ b/examples/expo-router-advanced/src/app/(app)/(tabs)/explore.tsx @@ -2,6 +2,7 @@ import { Pressable, ScrollView, Text, View } from "react-native"; import { Link } from "expo-router"; +import { LinkTestingCard } from "../../../LinkTestingCard"; import { useAuth } from "../../../auth"; import { colors, styles } from "../../../styles"; @@ -11,43 +12,7 @@ export default function ExploreScreen() { return ( - - Explore - - Add credentials from the Detour panel to .env before - testing. - - - - - Universal / App Link - - Open a godetour.link URL in the browser — Detour - resolves it and navigates to the Details screen. - - - https://<your-org>.godetour.link/<hash>/(app)/details - - - Custom Scheme - - This example also handles custom scheme links alongside Detour. Opening a non-Detour URL - redirects to the Third-party screen. Test with the simulator: - - - npx uri-scheme open {`"detour-expo-router-advanced://app"`} --ios - - - Deferred Link + Auth Gate - - Copy a Detour link, sign out, then relaunch. The link survives sign-in —{" "} - useDetourGate picks it up once authenticated. - - - Make sure Copy link feature enabled is turned on in - App Configuration in the Detour panel. - - + diff --git a/examples/expo-router-advanced/src/app/(app)/(tabs)/index.tsx b/examples/expo-router-advanced/src/app/(app)/(tabs)/index.tsx index aa05138..0448be5 100644 --- a/examples/expo-router-advanced/src/app/(app)/(tabs)/index.tsx +++ b/examples/expo-router-advanced/src/app/(app)/(tabs)/index.tsx @@ -2,6 +2,7 @@ import { Pressable, ScrollView, Text, View } from "react-native"; import { Link } from "expo-router"; +import { LinkTestingCard } from "../../../LinkTestingCard"; import { useAuth } from "../../../auth"; import { colors, styles } from "../../../styles"; @@ -11,43 +12,7 @@ export default function HomeScreen() { return ( - - Detour Example - - Add credentials from the Detour panel to .env before - testing. - - - - - Universal / App Link - - Open a godetour.link URL in the browser — Detour - resolves it and navigates to the Details screen. - - - https://<your-org>.godetour.link/<hash>/(app)/details - - - Custom Scheme - - This example also handles custom scheme links alongside Detour. Opening a non-Detour URL - redirects to the Third-party screen. Test with the simulator: - - - npx uri-scheme open {`"detour-expo-router-advanced://app"`} --ios - - - Deferred Link + Auth Gate - - Copy a Detour link, sign out, then relaunch. The link survives sign-in —{" "} - useDetourGate picks it up once authenticated. - - - Make sure Copy link feature enabled is turned on in - App Configuration in the Detour panel. - - + diff --git a/examples/expo-router-advanced/src/app/(app)/(tabs)/settings.tsx b/examples/expo-router-advanced/src/app/(app)/(tabs)/settings.tsx index df0d722..bdbd22a 100644 --- a/examples/expo-router-advanced/src/app/(app)/(tabs)/settings.tsx +++ b/examples/expo-router-advanced/src/app/(app)/(tabs)/settings.tsx @@ -2,6 +2,7 @@ import { Pressable, ScrollView, Text, View } from "react-native"; import { Link } from "expo-router"; +import { LinkTestingCard } from "../../../LinkTestingCard"; import { useAuth } from "../../../auth"; import { colors, styles } from "../../../styles"; @@ -11,43 +12,7 @@ export default function SettingsScreen() { return ( - - Settings - - Add credentials from the Detour panel to .env before - testing. - - - - - Universal / App Link - - Open a godetour.link URL in the browser — Detour - resolves it and navigates to the Details screen. - - - https://<your-org>.godetour.link/<hash>/(app)/details - - - Custom Scheme - - This example also handles custom scheme links alongside Detour. Opening a non-Detour URL - redirects to the Third-party screen. Test with the simulator: - - - npx uri-scheme open {`"detour-expo-router-advanced://app"`} --ios - - - Deferred Link + Auth Gate - - Copy a Detour link, sign out, then relaunch. The link survives sign-in —{" "} - useDetourGate picks it up once authenticated. - - - Make sure Copy link feature enabled is turned on in - App Configuration in the Detour panel. - - + diff --git a/examples/expo-router-advanced/src/app/(app)/onboarding.tsx b/examples/expo-router-advanced/src/app/(app)/onboarding.tsx index 04ac368..cb18c50 100644 --- a/examples/expo-router-advanced/src/app/(app)/onboarding.tsx +++ b/examples/expo-router-advanced/src/app/(app)/onboarding.tsx @@ -1,9 +1,10 @@ -import { Pressable, ScrollView, Text, View } from "react-native"; +import { Pressable, ScrollView, Text } from "react-native"; import { useRouter } from "expo-router"; import { useDetourContext } from "@swmansion/react-native-detour"; +import { LinkTestingCard } from "../../LinkTestingCard"; import { useAuth } from "../../auth"; import { colors, styles } from "../../styles"; @@ -26,45 +27,7 @@ export default function OnboardingScreen() { style={{ flex: 1, backgroundColor: colors.background }} contentContainerStyle={styles.scrollContent} > - - Test Detour Links - - Add credentials from the Detour panel to .env before - testing. - - - - - Universal / App Link - - Open a godetour.link URL in the browser — Detour - resolves it and navigates to the Details screen. - - - https://<your-org>.godetour.link/<hash>/(app)/details - - - Custom Scheme - - This example also handles custom scheme links alongside Detour. Opening a non-Detour URL - redirects to the Third-party screen. Test with the simulator: - - - npx uri-scheme open {`"detour-expo-router-advanced://app"`} --ios - - - Deferred Link + Auth Gate - - Copy a Detour link to your clipboard, sign out, then relaunch. The deferred link will - survive the sign-in flow — once you authenticate,{" "} - useDetourGate picks it back up and navigates - automatically. - - - Make sure Copy link feature enabled is turned on in App - Configuration in the Detour panel. - - + + {link && ( + + Link pending + A Detour link is waiting — sign in to continue. + + )} + Welcome back Sign in to continue to the app. diff --git a/examples/expo-router-advanced/src/styles.ts b/examples/expo-router-advanced/src/styles.ts index 2236923..344402d 100644 --- a/examples/expo-router-advanced/src/styles.ts +++ b/examples/expo-router-advanced/src/styles.ts @@ -125,4 +125,8 @@ export const styles = StyleSheet.create({ fontSize: 14, color: colors.subtle, }, + banner: { + marginBottom: 16, + borderColor: colors.accent, + }, }); diff --git a/examples/expo-router-native-intent/README.md b/examples/expo-router-native-intent/README.md index b758e48..4efbbac 100644 --- a/examples/expo-router-native-intent/README.md +++ b/examples/expo-router-native-intent/README.md @@ -1,60 +1,132 @@ # Detour Expo Router Native Intent Example -This example demonstrates the **new Expo Router native-intent API** from `@swmansion/react-native-detour/expo-router`. +Demonstrates the Expo Router **native-intent API** from [`@swmansion/react-native-detour/expo-router`](https://detour.swmansion.com/docs/sdk/react-native/sdk-usage). Unlike the [minimal Expo Router example](../expo-router), this app resolves Detour links inside `+native-intent.tsx`, so Expo Router receives the final route directly — without the temporary fallback-route jump. -## What this example shows +This app uses `createDetourNativeIntentHandler` in **resolve mode**: -Unlike the basic `examples/expo-router` setup, this app uses `createDetourNativeIntentHandler` in **resolve mode**: +- handler resolves Detour short links, and maps them to Expo Router paths via `mapToRoute`. +- with `linkProcessingMode: 'deferred-only'` enabled in Detour config, native-intent handles runtime links and `DetourProvider` only processes deferred ones. -- `src/app/+native-intent.tsx` - - calls `createDetourNativeIntentHandler(...)` with `config` (`apiKey`, `appID`), - - resolves Detour short links inside native intent, - - maps resolved URLs to Expo Router paths via `mapToRoute`. -- `src/app/_layout.tsx` - - uses `linkProcessingMode: 'deferred-only'` in `DetourProvider`, - - prevents double handling of runtime/initial links (native-intent already handles them), - - keeps deferred deep-link handling in the hook. +Expo Router receives the final route directly, without a fallback-route jump. For the full handler API and configuration options, see the [Expo Router helper reference](https://detour.swmansion.com/docs/sdk/react-native/api-reference#expo-router-helper). -Result: when a universal/app link is opened, Expo Router receives the final route directly (without temporary fallback route jump). +**Related examples:** -## Related examples - -- `examples/expo-router`: minimal integration. -- `examples/expo-router-advanced`: auth-gated routing flow. +- [`examples/expo-router`](../expo-router) — minimal Expo Router integration +- [`examples/expo-router-advanced`](../expo-router-advanced) — auth-gated routing flow ## Test flow -1. Start the app on iOS/Android. -2. You land on `/`. -3. Trigger a Detour universal link (normal or short) that should resolve to `/details`. -4. Native intent resolves/maps the link and routes directly to `/details`. -5. Return to `/` - the same link should not trigger again in the current session. +1. Start the app — you land on `/`. +2. Trigger a Detour link (see [Triggering links](#triggering-links)) — native intent resolves and maps it, routing directly to `/details` without a fallback-route jump. +3. Return to `/` — the same link should **not** trigger again. + +To test the **deferred** case: follow the [Deferred deep link](#triggering-links) setup before installing. `DetourProvider` resolves it on cold start and navigates directly to the target screen. + +A **custom-scheme** link (`detour-expo-router-native-intent://details`) is routed the same way by native intent — see [Triggering links](#triggering-links). + +
+ Detour Dashboard organization creator + Detour Dashboard app creator +
+ +> _**App flow**. Initial screen and the `/details` screen reached via native-intent resolution, with the resolved path and any forwarded params visible (Universal link flow)._ + +## Set up Detour + +You need a Detour account to register this app and generate its credentials. [Sign up](https://godetour.dev/auth/signup) and open the [Detour Dashboard](https://godetour.dev). If you run into issues during setup, the [Dashboard Walkthrough](https://detour.swmansion.com/docs/Fundamentals/dashboard) covers each step in detail. + +### 1. Register the app + +Create an organization and add a new app. Detour assigns it a base link URL of the form `https://.godetour.link/` visible in **Link settings** section. + +> In **Link settings**, the dashboard asks for a fallback Redirect URL to mark setup as complete. It only controls where **web** traffic lands — it has no effect on the deferred or Universal/App link flows these examples test, so it can be left empty or filled with a placeholder URL for local development. For production, see [Full app configuration](https://detour.swmansion.com/docs/Fundamentals/getting-started#4-complete-app-configuration). + +→ [Dashboard › Apps](https://detour.swmansion.com/docs/Fundamentals/dashboard#apps) + +
+ Detour Dashboard organization creator + Detour Dashboard app creator +
+Detour Dashboard app link details +
+ +> **Dashboard**. _Create an organization (top-left), create a new app (top-right), and use the generated link (marked with red) in Link settings (bottom)._ + +### 2. Configure the platforms + +Open **App configuration** and fill in the platform details: + +- **iOS:** set Bundle ID to `detourreactnative.exporouternativeintent` and provide Team ID and App Store ID. The **Team ID must be your real Apple Developer Team ID** — the one the build is signed with (`DEVELOPMENT_TEAM` in Xcode › Signing & Capabilities, also shown under [Apple Developer › Membership](https://developer.apple.com/account)). A placeholder or mismatched Team ID makes the Universal link open in Safari instead of the app. The App Store ID can stay a placeholder for local development. +- **Android:** set package name to `detourreactnative.exporouternativeintent` and add a SHA-256 certificate fingerprint. The **fingerprint must match the keystore that signs the build** — a wrong value makes Android open the App link in the browser instead of the app. For local development (`npx expo run:android`), use the **local debug keystore** fingerprint. See [Testing Android App Links](https://detour.swmansion.com/docs/sdk/react-native/testing#testing-android-app-links) for more info. + +The dashboard generates the `associatedDomains` and intent-filter snippets to paste into `app.json` ([below](#configuring-appjson)). + +> For a production integration, fill all fields with real values. See [App configuration](https://detour.swmansion.com/docs/Fundamentals/getting-started#app-configuration) for full guidance. + +→ [Dashboard › App configuration](https://detour.swmansion.com/docs/Fundamentals/dashboard#app-configuration) + +Detour Dashboard App configuration +
+ +> **Dashboard › App configuration**. _iOS and Android filled configurations with generated integration code snippets ready to copy._ + +### 3. Copy your credentials + +Open **API configuration** and copy your `appID` and publishable `apiKey` into this example's `.env` — these are the values `+native-intent.tsx` passes to `createDetourNativeIntentHandler`. + +→ [Dashboard › API configuration](https://detour.swmansion.com/docs/Fundamentals/dashboard#api-configuration-and-key-security) + +Detour Dashboard API configuration +
+ +> **Dashboard › API configuration**. _The API configuration panel with `appID` and the publishable `apiKey` ready to copy._ ## Configuring app.json -After registering your app in the [Detour Dashboard](https://godetour.dev), replace the placeholders in `app.json` with values from the **API configuration** section: +Replace the placeholders in `app.json` with the values from the dashboard's [App configuration](https://detour.swmansion.com/docs/Fundamentals/dashboard#app-configuration) section: - `` — your organization slug - `` — the path prefix assigned to your app ```json "ios": { - "bundleIdentifier": ".godetour.link"] }, "android": { - "package": "", + // ... "intentFilters": [{ - "data": [{ "host": ".godetour.link", "pathPrefix": "/" }] + // ... + "data": [{ "scheme": "https", "host": ".godetour.link", "pathPrefix": "/" }] }] } ``` -These same values go into the simulator commands in the section below. +> **Universal Links not opening the app?** Add `?mode=developer` to the `associatedDomains` entry: `"applinks:.godetour.link?mode=developer"`. This bypasses Apple's CDN and fetches the AASA file directly from your domain on every launch instead of relying on a potentially stale cached version. Requires **Settings → Developer → Associated Domains Development** to be enabled on the device and a development-signed build. Remove it before submitting to TestFlight or the App Store. + +These same values go into the simulator commands in the next section. ## Triggering links -**Universal / App link** — open a Detour HTTPS link: +
+Deferred deep link + +Follow these steps to test the deferred flow: + +1. Uninstall the app or clear its data to start from a clean state. +2. Open a Detour link in the device's mobile browser. +3. Install and launch the app — the SDK resolves the link automatically. + +> **Note:** On Android, the install referrer is typically unavailable in development builds, so deferred matching falls back to probabilistic signals (IP, device fingerprint) only. See [Limitations & Known Issues](https://detour.swmansion.com/docs/Architecture/architecture-limitations). + +Alternatively on iOS, you can also copy the link to your clipboard before uninstalling — the SDK reads the clipboard on first launch (`shouldUseClipboard: true`), so you can skip the browser step. It simulates a link clicked before the app was installed. + +
+ +
+Universal / App link + +Open a Detour link directly from the terminal: ```sh # iOS simulator @@ -64,17 +136,38 @@ xcrun simctl openurl booted "https://.godetour.link//de adb shell am start -a android.intent.action.VIEW -d "https://.godetour.link//details" ``` -**Deferred link** — simulates a link clicked before the app was installed: +Alternatively, paste the link into Notes or Messages on the device and tap it — this uses the same OS routing path a real user would. -1. Copy a Detour link URL from the Dashboard to your clipboard. -2. Kill or uninstall the app. -3. Relaunch — the SDK reads the clipboard on startup and resolves the link automatically. +
+ +
+Custom scheme + +```sh +# iOS simulator +npx uri-scheme open "detour-expo-router-native-intent://details" --ios + +# Android emulator +npx uri-scheme open "detour-expo-router-native-intent://details" --android +``` + +
+ +For more cases and gotchas, see [Testing & Troubleshooting](https://detour.swmansion.com/docs/sdk/react-native/testing). ## Quick start - Install dependencies from the repo root: `pnpm install` -- Configure this app in Detour Dashboard: `https://godetour.dev` using identifiers from `app.json` (for example `ios.bundleIdentifier`, `android.package`). -- Use values from Dashboard from "API configuration" section to fill `.env` and update `app.json` with generated integration code. +- Configure this app in the [Detour Dashboard](https://godetour.dev) using identifiers from `app.json` (for example `ios.bundleIdentifier`, `android.package`). +- Use the values from the dashboard's [API configuration](https://detour.swmansion.com/docs/Fundamentals/dashboard#api-configuration-and-key-security) section to fill `.env` and update `app.json` with the generated integration code. - Run prebuild for this example: `pnpm prebuild` - Start the example: `pnpm start` - Run on device/simulator: `pnpm ios` or `pnpm android` + +## See also + +- [SDK Usage](https://detour.swmansion.com/docs/sdk/react-native/sdk-usage) — how to integrate Detour with your navigation library +- [Click Handling & Redirect Flow](https://detour.swmansion.com/docs/Fundamentals/dashboard#links-behavior-runtime-flow) — how Detour resolves a link at runtime +- [API Reference](https://detour.swmansion.com/docs/sdk/react-native/api-reference) — full type and method reference +- [`examples/expo-router`](../expo-router) — minimal Expo Router integration +- [`examples/expo-router-advanced`](../expo-router-advanced) — auth-gated routing flow diff --git a/examples/expo-router-native-intent/assets/screenshots/app-flow-a.png b/examples/expo-router-native-intent/assets/screenshots/app-flow-a.png new file mode 100644 index 0000000..6b6e58b Binary files /dev/null and b/examples/expo-router-native-intent/assets/screenshots/app-flow-a.png differ diff --git a/examples/expo-router-native-intent/assets/screenshots/app-flow-b.png b/examples/expo-router-native-intent/assets/screenshots/app-flow-b.png new file mode 100644 index 0000000..dbfc999 Binary files /dev/null and b/examples/expo-router-native-intent/assets/screenshots/app-flow-b.png differ diff --git a/examples/expo-router-native-intent/assets/screenshots/dashboard-api-configuration.png b/examples/expo-router-native-intent/assets/screenshots/dashboard-api-configuration.png new file mode 100644 index 0000000..aacdca7 Binary files /dev/null and b/examples/expo-router-native-intent/assets/screenshots/dashboard-api-configuration.png differ diff --git a/examples/expo-router-native-intent/assets/screenshots/dashboard-app-configuration.png b/examples/expo-router-native-intent/assets/screenshots/dashboard-app-configuration.png new file mode 100644 index 0000000..a4a3c34 Binary files /dev/null and b/examples/expo-router-native-intent/assets/screenshots/dashboard-app-configuration.png differ diff --git a/examples/expo-router-native-intent/assets/screenshots/dashboard-create-app-a.png b/examples/expo-router-native-intent/assets/screenshots/dashboard-create-app-a.png new file mode 100644 index 0000000..a3995d0 Binary files /dev/null and b/examples/expo-router-native-intent/assets/screenshots/dashboard-create-app-a.png differ diff --git a/examples/expo-router-native-intent/assets/screenshots/dashboard-create-app-b.png b/examples/expo-router-native-intent/assets/screenshots/dashboard-create-app-b.png new file mode 100644 index 0000000..a260b6a Binary files /dev/null and b/examples/expo-router-native-intent/assets/screenshots/dashboard-create-app-b.png differ diff --git a/examples/expo-router-native-intent/assets/screenshots/dashboard-create-app-c.png b/examples/expo-router-native-intent/assets/screenshots/dashboard-create-app-c.png new file mode 100644 index 0000000..d293f00 Binary files /dev/null and b/examples/expo-router-native-intent/assets/screenshots/dashboard-create-app-c.png differ diff --git a/examples/expo-router-native-intent/src/app/index.tsx b/examples/expo-router-native-intent/src/app/index.tsx index a1149ac..54a8255 100644 --- a/examples/expo-router-native-intent/src/app/index.tsx +++ b/examples/expo-router-native-intent/src/app/index.tsx @@ -28,26 +28,21 @@ export default function HomeScreen() { - Universal / App Link + Deferred Link - Open a godetour.link URL in the browser — Detour - resolves it in +native-intent via{" "} - mapToRoute, which strips the hash and routes directly - to the target screen without a fallback jump. + Uninstall the app or clear its data, open a Detour link in the mobile browser, then + install and launch — the SDK resolves the link automatically. https://<your-org>.godetour.link/<hash>/details - Deferred Link - - Copy a Detour link to your clipboard, then kill and relaunch the app. Because{" "} - shouldUseClipboard is enabled, Detour reads the - clipboard on startup and resolves the pending link automatically. - + Universal / App Link - Make sure Copy link feature enabled is turned on in - App Configuration in the Detour panel. + Open a godetour.link URL in the browser or paste into + Notes/Messages and tap — Detour resolves it in{" "} + +native-intent and routes directly to the target + screen. https://<your-org>.godetour.link/<hash>/details diff --git a/examples/expo-router/README.md b/examples/expo-router/README.md index 2d0c2c0..c936042 100644 --- a/examples/expo-router/README.md +++ b/examples/expo-router/README.md @@ -1,48 +1,127 @@ # Detour Expo Router Example -This is the minimal, recommended starting point for integrating `@swmansion/react-native-detour` with Expo Router. +The minimal, recommended starting point for integrating [`@swmansion/react-native-detour`](https://detour.swmansion.com/docs/sdk/react-native/sdk-installation) with [Expo Router](https://docs.expo.dev/router/introduction/). Detour resolves the incoming link — deferred, Universal/App, or custom scheme — and hands Expo Router the destination route, so deep linking works with almost no routing code of your own. -## Scenario represented +Under the hood, `DetourProvider` (in `app/_layout.tsx`) exposes the resolved link through `useDetourContext`, which navigates to it; a thin `app/+native-intent.tsx` lets `createDetourNativeIntentHandler` intercept Detour links before Expo Router routes them. -- `DetourProvider` is initialized in `_layout.tsx` with SDK config. -- `useDetourContext` drives navigation: when a link is processed, the app navigates directly to `link.pathname`. -- `+native-intent.tsx` uses `createDetourNativeIntentHandler` as a pass-through to intercept Detour domains before Expo Router routing. -- Deferred links are resolved via clipboard (`shouldUseClipboard: true`). -- If `.env` credentials are missing, a `SetupRequired` screen is shown instead. +**Related examples:** + +- [`examples/expo-router-native-intent`](../expo-router-native-intent) — route directly via `+native-intent` +- [`examples/expo-router-advanced`](../expo-router-advanced) — auth-gated routing flow ## Test flow -1. Start the app on iOS/Android. -2. You land on `/`. -3. Trigger a Detour universal link resolving to `/details`. -4. The app navigates directly to the `/details` screen. -5. Go back to `/` — the same link should NOT trigger again. +1. Start the app — you land on `/`. +2. Trigger a Detour link to `/details` (see [Triggering links](#triggering-links)) — the app navigates directly to `/details`. +3. Go back to `/` — the same link should **not** trigger again. + +To test the **deferred** case: follow the [Deferred deep link](#triggering-links) setup before installing. On first launch the SDK resolves it on cold start and navigates directly to `/details`. + +A **custom-scheme** link (`detour-expo-router://details`) resolves the same way and lands on `/details` — see [Triggering links](#triggering-links). + +
+ Detour Dashboard organization creator + Detour Dashboard app creator +
+ +> _**App flow**. Initial screen and the `/details` screen reached via the Detour link, with forwarded query params visible (deferred link flow)._ + +## Set up Detour + +You need a Detour account to register this app and generate its credentials. [Sign up](https://godetour.dev/auth/signup) and open the [Detour Dashboard](https://godetour.dev). If you run into issues during setup, the [Dashboard Walkthrough](https://detour.swmansion.com/docs/Fundamentals/dashboard) covers each step in detail. + +### 1. Register the app + +Create an organization and add a new app. Detour assigns it a base link URL of the form `https://.godetour.link/` visible in **Link settings** section. + +> In **Link settings**, the dashboard asks for a fallback Redirect URL to mark setup as complete. It only controls where **web** traffic lands — it has no effect on the deferred or Universal/App link flows these examples test, so it can be left empty or filled with a placeholder URL for local development. For production, see [Full app configuration](https://detour.swmansion.com/docs/Fundamentals/getting-started#4-complete-app-configuration). + +→ [Dashboard › Apps](https://detour.swmansion.com/docs/Fundamentals/dashboard#apps) + +
+ Detour Dashboard organization creator + Detour Dashboard app creator +
+Detour Dashboard app link details +
+ +> **Dashboard**. _Create an organization (top-left), create a new app (top-right), and use the generated link (marked with red) in Link settings (bottom)._ + +### 2. Configure the platforms + +Open **App configuration** and fill in the platform details: + +- **iOS:** set Bundle ID to `detourreactnative.exporouter` and provide Team ID and App Store ID. The **Team ID must be your real Apple Developer Team ID** — the one the build is signed with (`DEVELOPMENT_TEAM` in Xcode › Signing & Capabilities, also shown under [Apple Developer › Membership](https://developer.apple.com/account)). A placeholder or mismatched Team ID makes the Universal link open in Safari instead of the app. The App Store ID can stay a placeholder for local development. +- **Android:** set package name to `detourreactnative.exporouter` and add a SHA-256 certificate fingerprint. The **fingerprint must match the keystore that signs the build** — a wrong value makes Android open the App link in the browser instead of the app. For local development (`npx expo run:android`), use the **local debug keystore** fingerprint. See [Testing Android App Links](https://detour.swmansion.com/docs/sdk/react-native/testing#testing-android-app-links) for more info. + +The dashboard generates the `associatedDomains` and intent-filter snippets to paste into `app.json` ([below](#configuring-appjson)). + +> For a production integration, fill all fields with real values. See [App configuration](https://detour.swmansion.com/docs/Fundamentals/getting-started#app-configuration) for full guidance. + +→ [Dashboard › App configuration](https://detour.swmansion.com/docs/Fundamentals/dashboard#app-configuration) + +Detour Dashboard App configuration +
+ +> **Dashboard › App configuration**. _iOS and Android filled configurations with generated integration code snippets ready to copy._ + +### 3. Copy your credentials + +Open **API configuration** and copy your `appID` and publishable `apiKey` into this example's `.env`. + +→ [Dashboard › API configuration](https://detour.swmansion.com/docs/Fundamentals/dashboard#api-configuration-and-key-security) + +Detour Dashboard API configuration +
+ +> **Dashboard › API configuration**. _The API configuration panel with `appID` and the publishable `apiKey` ready to copy._ ## Configuring app.json -After registering your app in the [Detour Dashboard](https://godetour.dev), replace the placeholders in `app.json` with values from the **API configuration** section: +Replace the placeholders in `app.json` with the values from the dashboard's [App configuration](https://detour.swmansion.com/docs/Fundamentals/dashboard#app-configuration) section: - `` — your organization slug - `` — the path prefix assigned to your app ```json "ios": { - "bundleIdentifier": ".godetour.link"] }, "android": { - "package": "", + // ... "intentFilters": [{ - "data": [{ "host": ".godetour.link", "pathPrefix": "/" }] + // ... + "data": [{ "scheme": "https", "host": ".godetour.link", "pathPrefix": "/" }] }] } ``` -These same values go into the simulator commands in the section below. +> **Universal Links not opening the app?** Add `?mode=developer` to the `associatedDomains` entry: `"applinks:.godetour.link?mode=developer"`. This bypasses Apple's CDN and fetches the AASA file directly from your domain on every launch instead of relying on a potentially stale cached version. Requires **Settings → Developer → Associated Domains Development** to be enabled on the device and a development-signed build. Remove it before submitting to TestFlight or the App Store. + +These same values go into the simulator commands in the next section. ## Triggering links -**Universal / App link** — open a Detour HTTPS link: +
+Deferred deep link + +Follow these steps to test the deferred flow: + +1. Uninstall the app or clear its data to start from a clean state. +2. Open a Detour link in the device's mobile browser. +3. Install and launch the app — the SDK resolves the link automatically. + +> **Note:** On Android, the install referrer is typically unavailable in development builds, so deferred matching falls back to probabilistic signals (IP, device fingerprint) only. See [Limitations & Known Issues](https://detour.swmansion.com/docs/Architecture/architecture-limitations). + +Alternatively on iOS, you can also copy the link to your clipboard before uninstalling — the SDK reads the clipboard on first launch (`shouldUseClipboard: true`), so you can skip the browser step. It simulates a link clicked before the app was installed. + +
+ +
+Universal / App link + +Open a Detour link directly from the terminal: ```sh # iOS simulator @@ -52,17 +131,37 @@ xcrun simctl openurl booted "https://.godetour.link//de adb shell am start -a android.intent.action.VIEW -d "https://.godetour.link//details" ``` -**Deferred link** — simulates a link clicked before the app was installed: +Alternatively, paste the link into Notes or Messages on the device and tap it — this uses the same OS routing path a real user would. -1. Copy a Detour link URL from the Dashboard to your clipboard. -2. Kill or uninstall the app. -3. Relaunch — the SDK reads the clipboard on startup and resolves the link automatically. +
+ +
+Custom scheme + +```sh +# iOS simulator +npx uri-scheme open "detour-expo-router://details" --ios + +# Android emulator +npx uri-scheme open "detour-expo-router://details" --android +``` + +
+ +For more cases and gotchas, see [Testing & Troubleshooting](https://detour.swmansion.com/docs/sdk/react-native/testing). ## Quick start - Install dependencies from the repo root: `pnpm install` -- Configure this app in Detour Dashboard: `https://godetour.dev` using identifiers from `app.json` (for example `ios.bundleIdentifier`, `android.package`). -- Use values from Dashboard from "API configuration" section to fill `.env` and update `app.json` with generated integration code. +- Configure this app in the [Detour Dashboard](https://godetour.dev) using identifiers from `app.json` (for example `ios.bundleIdentifier`, `android.package`). +- Use the values from the dashboard's [API configuration](https://detour.swmansion.com/docs/Fundamentals/dashboard#api-configuration-and-key-security) section to fill `.env` and update `app.json` with the generated integration code. - Run prebuild for this example: `pnpm prebuild` - Start the example: `pnpm start` - Run on device/simulator: `pnpm ios` or `pnpm android` + +## See also + +- [SDK Usage](https://detour.swmansion.com/docs/sdk/react-native/sdk-usage) — how to integrate Detour with your navigation library +- [API Reference](https://detour.swmansion.com/docs/sdk/react-native/api-reference) — full type and method reference +- [`examples/expo-router-native-intent`](../expo-router-native-intent) — route directly via `+native-intent` +- [`examples/expo-router-advanced`](../expo-router-advanced) — auth-gated routing flow diff --git a/examples/expo-router/assets/screenshots/app-resolved-a.png b/examples/expo-router/assets/screenshots/app-resolved-a.png new file mode 100644 index 0000000..9c88c68 Binary files /dev/null and b/examples/expo-router/assets/screenshots/app-resolved-a.png differ diff --git a/examples/expo-router/assets/screenshots/app-resolved-b.png b/examples/expo-router/assets/screenshots/app-resolved-b.png new file mode 100644 index 0000000..ce9a8f4 Binary files /dev/null and b/examples/expo-router/assets/screenshots/app-resolved-b.png differ diff --git a/examples/expo-router/assets/screenshots/dashboard-api-configuration.png b/examples/expo-router/assets/screenshots/dashboard-api-configuration.png new file mode 100644 index 0000000..d2538fc Binary files /dev/null and b/examples/expo-router/assets/screenshots/dashboard-api-configuration.png differ diff --git a/examples/expo-router/assets/screenshots/dashboard-app-configuration.png b/examples/expo-router/assets/screenshots/dashboard-app-configuration.png new file mode 100644 index 0000000..2ed1a9b Binary files /dev/null and b/examples/expo-router/assets/screenshots/dashboard-app-configuration.png differ diff --git a/examples/expo-router/assets/screenshots/dashboard-create-app-a.png b/examples/expo-router/assets/screenshots/dashboard-create-app-a.png new file mode 100644 index 0000000..a3995d0 Binary files /dev/null and b/examples/expo-router/assets/screenshots/dashboard-create-app-a.png differ diff --git a/examples/expo-router/assets/screenshots/dashboard-create-app-b.png b/examples/expo-router/assets/screenshots/dashboard-create-app-b.png new file mode 100644 index 0000000..24977d8 Binary files /dev/null and b/examples/expo-router/assets/screenshots/dashboard-create-app-b.png differ diff --git a/examples/expo-router/assets/screenshots/dashboard-create-app-c.png b/examples/expo-router/assets/screenshots/dashboard-create-app-c.png new file mode 100644 index 0000000..b1f6c4d Binary files /dev/null and b/examples/expo-router/assets/screenshots/dashboard-create-app-c.png differ diff --git a/examples/expo-router/src/app/index.tsx b/examples/expo-router/src/app/index.tsx index d19a128..b9e754f 100644 --- a/examples/expo-router/src/app/index.tsx +++ b/examples/expo-router/src/app/index.tsx @@ -28,24 +28,19 @@ export default function HomeScreen() { - Universal / App Link + Deferred Link - Open a Detour link in the browser — iOS/Android will launch the app and Detour will - navigate to the target route. Test with the simulator using: + Uninstall the app or clear its data, open a Detour link in the mobile browser, then + install and launch — the SDK resolves the link automatically. - npx uri-scheme open {`"detour-expo-router://details"`} --ios + https://<your-org>.godetour.link/<hash>/details - Deferred Link - - Copy a Detour link to your clipboard, then kill and relaunch the app. Because{" "} - shouldUseClipboard is enabled, Detour reads the - clipboard on startup and resolves the pending link automatically. - + Universal / App Link - Make sure Copy link feature enabled is turned on in - App Configuration in the Detour panel. + Open in browser or paste into Notes/Messages and tap — iOS/Android will launch the app + and Detour navigates to the target route. https://<your-org>.godetour.link/<hash>/details diff --git a/examples/react-navigation-advanced/README.md b/examples/react-navigation-advanced/README.md index 17933db..f798f7d 100644 --- a/examples/react-navigation-advanced/README.md +++ b/examples/react-navigation-advanced/README.md @@ -1,68 +1,181 @@ # Detour React Navigation Example (Advanced) -This example demonstrates an auth-gated React Navigation app with Detour integration. +An auth-gated [React Navigation](https://reactnavigation.org/) app with [`@swmansion/react-native-detour`](https://detour.swmansion.com/docs/sdk/react-native/sdk-installation). A deep link can arrive at any point in the `SignIn → Onboarding → Tabs` flow; React Navigation remembers it and replays it once the target screen becomes reachable. -## Scenario represented +
+
+ Sign-in screen with a Detour link pending + First-launch onboarding screen + Details screen reached after the pending link is replayed +
+
-- Auth flow with conditional screen rendering in a single stack (React Navigation standard pattern). -- Screens: `SignIn` → `Onboarding` (once per install) → `Tabs` (Home, Explore, Settings) + `Details`. -- React Navigation linking uses the SDK adapter API as the URL source: - - `Detour.getInitialURL()` - - `Detour.addEventListener("url", ({ url }) => ...)` -- The navigator opts into `UNSTABLE_routeNamesChangeBehavior="lastUnhandled"` so React Navigation remembers a deep link that hits a screen which is not currently rendered and replays it once that screen becomes part of the navigator. -- Detour processes all link types (universal / app links, custom scheme, deferred) and the app maps routes via React Navigation linking config. +> _**Auth-gated flow**. A Detour link arrives while signed out, so the app waits on the sign-in screen (left) → after signing in, a first-time user goes through onboarding (center) → the pending link is replayed and the app lands on Details (right)._ + +- Screen flow: `SignIn` → `Onboarding` (once per install) → `Tabs` (Home, Explore, Settings) + `Details`. +- Detour feeds URLs via `Detour.getInitialURL()` and `Detour.addEventListener("url", ...)`. +- `UNSTABLE_routeNamesChangeBehavior="lastUnhandled"` makes React Navigation remember an unresolvable deep link and replay it once the target screen becomes renderable. +- All link types handled: Universal/App links, custom scheme, and deferred. + +**Related examples:** + +- [`examples/react-navigation`](../react-navigation) — minimal React Navigation integration ## Auth-gated deferred link behavior +
+How a link survives sign-in and onboarding + - If a deferred link arrives and the user is not signed in, the splash hides and `SignIn` is shown. React Navigation parses the URL, finds `Details` is not currently rendered, and marks the action as the last unhandled one. - After sign-in, the rendered screen set changes. If onboarding has not been completed yet, `Onboarding` is shown — `Details` is still not rendered, so the pending link stays remembered. - After onboarding, `Details` becomes part of the rendered stack. React Navigation retries the unhandled action and navigates to `Details` (or falls through to `NotFound`). > **Note:** `UNSTABLE_routeNamesChangeBehavior="lastUnhandled"` is not deep-link-specific. It also captures other unhandled navigation actions — for example a manual `navigation.navigate(...)` call or an `initialState` pointing at a screen that isn't currently rendered — and replays them once that screen becomes part of the navigator. See the React Navigation docs for the full behavior. -### Expected dev-only warning +
+ +
+Expected dev-only warning When the link arrives while the target screen isn't rendered yet (e.g. on `SignIn`), React Navigation logs a development-only warning. This is the dispatch attempt against the current (signed-out) navigator state. `UNSTABLE_routeNamesChangeBehavior="lastUnhandled"` then stashes the action and replays it once `Details` is part of the rendered stack. The message is stripped in production builds. +
+ Reference docs: -- https://reactnavigation.org/docs/deep-linking?config=static#integrating-with-other-tools -- https://reactnavigation.org/docs/auth-flow (see `UNSTABLE_routeNamesChangeBehavior`) + +→ [React Navigation deep linking](https://reactnavigation.org/docs/deep-linking?config=static#integrating-with-other-tools) + +→ [React Navigation auth flow](https://reactnavigation.org/docs/auth-flow) (see `UNSTABLE_routeNamesChangeBehavior`) ## Test flow -1. Start the app on iOS/Android. -2. You land on `SignIn` (or `Tabs` if already signed in). -3. Trigger a Detour universal link resolving to `/details`. -4. The app navigates to the `Details` screen. -5. Go back — the same link should NOT trigger again. +**Deferred link** + +1. Follow the [Deferred deep link](#triggering-links) setup to register a pre-install click, then install and launch the app signed out. The deferred match runs only on this fresh first launch. +2. You land on `SignIn` — Detour has matched the click and is holding the link, so a **Link pending** banner appears. +3. Tap **Sign in**, then tap **Get Started** on the onboarding screen (shown on the first launch). +4. React Navigation replays the held link once `Details` becomes reachable, so the app lands on `Details` with the forwarded params visible. +5. Go back — the same link does **not** trigger again. + +**Universal / App link** + +Same flow as above but don't need to reinstall — the link arrives at runtime. While signed out (tap **Logout** to get there), trigger a Detour link to `/details` (see [Triggering links](#triggering-links)). On later launches the onboarding step is skipped. + +**Custom scheme** + +Same runtime flow as the Universal / App link, just opened through the app's custom scheme. Trigger the custom-scheme URL (see [Triggering links](#triggering-links)) — it's held through the auth gate and replayed to `Details` the same way. + +## Set up Detour + +You need a Detour account to register this app and generate its credentials. [Sign up](https://godetour.dev/auth/signup) and open the [Detour Dashboard](https://godetour.dev). If you run into issues during setup, the [Dashboard Walkthrough](https://detour.swmansion.com/docs/Fundamentals/dashboard) covers each step in detail. + +### 1. Register the app + +Create an organization and add a new app. Detour assigns it a base link URL of the form `https://.godetour.link/` visible in **Link settings** section. + +> In **Link settings**, the dashboard asks for a fallback Redirect URL to mark setup as complete. It only controls where **web** traffic lands — it has no effect on the deferred or Universal/App link flows these examples test, so it can be left empty or filled with a placeholder URL for local development. For production, see [Full app configuration](https://detour.swmansion.com/docs/Fundamentals/getting-started#4-complete-app-configuration). + +→ [Dashboard › Apps](https://detour.swmansion.com/docs/Fundamentals/dashboard#apps) + +
+ Detour Dashboard organization creator + Detour Dashboard app creator +
+Detour Dashboard app link details +
+ +> **Dashboard**. _Create an organization (top-left), create a new app (top-right), and use the generated link (marked with red) in Link settings (bottom)._ + + +### 2. Configure the platforms + +Open **App configuration** and fill in the platform details: + +- **iOS:** set Bundle ID to `detourreactnative.reactnavigationadvanced` and provide Team ID and App Store ID. The **Team ID must be your real Apple Developer Team ID** — the one the build is signed with (`DEVELOPMENT_TEAM` in Xcode › Signing & Capabilities, also shown under [Apple Developer › Membership](https://developer.apple.com/account)). A placeholder or mismatched Team ID makes the Universal link open in Safari instead of the app. The App Store ID can stay a placeholder for local development. +- **Android:** set package name to `detourreactnative.reactnavigationadvanced` and add a SHA-256 certificate fingerprint. The **fingerprint must match the keystore that signs the build** — a wrong value makes Android open the App link in the browser instead of the app. For local development (`npx expo run:android`), use the **local debug keystore** fingerprint. See [Testing Android App Links](https://detour.swmansion.com/docs/sdk/react-native/testing#testing-android-app-links) for more info. + +The dashboard generates the `associatedDomains` and intent-filter snippets to paste into `app.json` ([below](#configuring-appjson)). + +> For a production integration, fill all fields with real values. See [App configuration](https://detour.swmansion.com/docs/Fundamentals/getting-started#app-configuration) for full guidance. + +→ [Dashboard › App configuration](https://detour.swmansion.com/docs/Fundamentals/dashboard#app-configuration) + +Detour Dashboard App configuration +
+ +> **Dashboard › App configuration**. _iOS and Android filled configurations with generated integration code snippets ready to copy._ + + +### 3. Copy your credentials + +Open **API configuration** and copy your `appID` and publishable `apiKey` into this example's `.env`. + +→ [Dashboard › API configuration](https://detour.swmansion.com/docs/Fundamentals/dashboard#api-configuration-and-key-security) + +Detour Dashboard API configuration +
+ +> **Dashboard › API configuration**. _The API configuration panel with `appID` and the publishable `apiKey` ready to copy._ + +### 4. (Optional) Tune deferred-link matching + +Because this example exercises the deferred case through a multi-step gate, you may want to review the **Matching** settings (threshold and time window) that control how a pre-install click is paired with the first launch. + +→ [Matching](https://detour.swmansion.com/docs/Architecture/matching) + +Detour Dashboard Matching configuration +
+ +> **Dashboard › Link Settings › Matching**. _The matching panel showing confidence threshold and time-window controls alongside match statistics._ ## Configuring app.json -After registering your app in the [Detour Dashboard](https://godetour.dev), replace the placeholders in `app.json` with values from the **API configuration** section: +Replace the placeholders in `app.json` with the values from the dashboard's [App configuration](https://detour.swmansion.com/docs/Fundamentals/dashboard#app-configuration) section: - `` — your organization slug - `` — the path prefix assigned to your app ```json "ios": { - "bundleIdentifier": ".godetour.link"] }, "android": { - "package": "", + // ... "intentFilters": [{ - "data": [{ "host": ".godetour.link", "pathPrefix": "/" }] + // ... + "data": [{ "scheme": "https", "host": ".godetour.link", "pathPrefix": "/" }] }] } ``` -These same values go into the simulator commands in the section below. +> **Universal Links not opening the app?** Add `?mode=developer` to the `associatedDomains` entry: `"applinks:.godetour.link?mode=developer"`. This bypasses Apple's CDN and fetches the AASA file directly from your domain on every launch instead of relying on a potentially stale cached version. Requires **Settings → Developer → Associated Domains Development** to be enabled on the device and a development-signed build. Remove it before submitting to TestFlight or the App Store. + +These same values go into the simulator commands in the next section. ## Triggering links -**Universal / App link** — open a Detour HTTPS link: +
+Deferred deep link + +Follow these steps to test the deferred flow: + +1. Uninstall the app or clear its data to start from a clean state. +2. Open a Detour link in the device's mobile browser. +3. Install and launch the app — the SDK resolves the link automatically. + +> **Note:** On Android, the install referrer is typically unavailable in development builds, so deferred matching falls back to probabilistic signals (IP, device fingerprint) only. See [Limitations & Known Issues](https://detour.swmansion.com/docs/Architecture/architecture-limitations). + +Alternatively on iOS, you can also copy the link to your clipboard before uninstalling — the SDK reads the clipboard on first launch (`shouldUseClipboard: true`), so you can skip the browser step. It simulates a link clicked before the app was installed. + +
+ +
+Universal / App link + +Open a Detour link directly from the terminal: ```sh # iOS simulator @@ -72,13 +185,12 @@ xcrun simctl openurl booted "https://.godetour.link//de adb shell am start -a android.intent.action.VIEW -d "https://.godetour.link//details" ``` -**Deferred link** — simulates a link clicked before the app was installed: +Alternatively, paste the link into Notes or Messages on the device and tap it — this uses the same OS routing path a real user would. -1. Copy a Detour link URL from the Dashboard to your clipboard. -2. Kill or uninstall the app. -3. Relaunch — the SDK reads the clipboard on startup and resolves the link automatically. +
-**Custom scheme**: +
+Custom scheme ```sh # iOS simulator @@ -88,11 +200,22 @@ npx uri-scheme open "detour-react-navigation-advanced://details" --ios npx uri-scheme open "detour-react-navigation-advanced://details" --android ``` +
+ +For more cases and gotchas, see [Testing & Troubleshooting](https://detour.swmansion.com/docs/sdk/react-native/testing). + ## Quick start - Install dependencies from the repo root: `pnpm install` -- Configure this app in Detour Dashboard: `https://godetour.dev` using identifiers from `app.json` (for example `ios.bundleIdentifier`, `android.package`). -- Use values from Dashboard from "API configuration" section to fill `.env` and update `app.json` with generated integration code. +- Configure this app in the [Detour Dashboard](https://godetour.dev) using identifiers from `app.json` (for example `ios.bundleIdentifier`, `android.package`). +- Use the values from the dashboard's [API configuration](https://detour.swmansion.com/docs/Fundamentals/dashboard#api-configuration-and-key-security) section to fill `.env` and update `app.json` with the generated integration code. - Run prebuild for this example: `pnpm prebuild` - Start the example: `pnpm start` - Run on device/simulator: `pnpm ios` or `pnpm android` + +## See also + +- [Deferred deep linking blog series](https://swmansion.com/blog/integrating-deferred-deep-linking-in-react-native-apps-1/) — background on the technique +- [SDK Usage](https://detour.swmansion.com/docs/sdk/react-native/sdk-usage) — how to integrate Detour with your navigation library +- [API Reference](https://detour.swmansion.com/docs/sdk/react-native/api-reference) — full type and method reference +- [`examples/react-navigation`](../react-navigation) — minimal React Navigation integration diff --git a/examples/react-navigation-advanced/assets/screenshots/app-details.png b/examples/react-navigation-advanced/assets/screenshots/app-details.png new file mode 100644 index 0000000..770aadd Binary files /dev/null and b/examples/react-navigation-advanced/assets/screenshots/app-details.png differ diff --git a/examples/react-navigation-advanced/assets/screenshots/app-onboarding.png b/examples/react-navigation-advanced/assets/screenshots/app-onboarding.png new file mode 100644 index 0000000..611e955 Binary files /dev/null and b/examples/react-navigation-advanced/assets/screenshots/app-onboarding.png differ diff --git a/examples/react-navigation-advanced/assets/screenshots/app-sign-in.png b/examples/react-navigation-advanced/assets/screenshots/app-sign-in.png new file mode 100644 index 0000000..152916f Binary files /dev/null and b/examples/react-navigation-advanced/assets/screenshots/app-sign-in.png differ diff --git a/examples/react-navigation-advanced/assets/screenshots/dashboard-api-configuration.png b/examples/react-navigation-advanced/assets/screenshots/dashboard-api-configuration.png new file mode 100644 index 0000000..9b1b5aa Binary files /dev/null and b/examples/react-navigation-advanced/assets/screenshots/dashboard-api-configuration.png differ diff --git a/examples/react-navigation-advanced/assets/screenshots/dashboard-app-configuration.png b/examples/react-navigation-advanced/assets/screenshots/dashboard-app-configuration.png new file mode 100644 index 0000000..ddafffe Binary files /dev/null and b/examples/react-navigation-advanced/assets/screenshots/dashboard-app-configuration.png differ diff --git a/examples/react-navigation-advanced/assets/screenshots/dashboard-create-app-a.png b/examples/react-navigation-advanced/assets/screenshots/dashboard-create-app-a.png new file mode 100644 index 0000000..a3995d0 Binary files /dev/null and b/examples/react-navigation-advanced/assets/screenshots/dashboard-create-app-a.png differ diff --git a/examples/react-navigation-advanced/assets/screenshots/dashboard-create-app-b.png b/examples/react-navigation-advanced/assets/screenshots/dashboard-create-app-b.png new file mode 100644 index 0000000..0a36a0c Binary files /dev/null and b/examples/react-navigation-advanced/assets/screenshots/dashboard-create-app-b.png differ diff --git a/examples/react-navigation-advanced/assets/screenshots/dashboard-create-app-c.png b/examples/react-navigation-advanced/assets/screenshots/dashboard-create-app-c.png new file mode 100644 index 0000000..00bf53c Binary files /dev/null and b/examples/react-navigation-advanced/assets/screenshots/dashboard-create-app-c.png differ diff --git a/examples/react-navigation-advanced/assets/screenshots/dashboard-matching.png b/examples/react-navigation-advanced/assets/screenshots/dashboard-matching.png new file mode 100644 index 0000000..e42f80b Binary files /dev/null and b/examples/react-navigation-advanced/assets/screenshots/dashboard-matching.png differ diff --git a/examples/react-navigation-advanced/src/LinkTestingCard.tsx b/examples/react-navigation-advanced/src/LinkTestingCard.tsx new file mode 100644 index 0000000..01dfba4 --- /dev/null +++ b/examples/react-navigation-advanced/src/LinkTestingCard.tsx @@ -0,0 +1,49 @@ +import { Platform, Text, View } from "react-native"; + +import { styles } from "./styles"; + +type LinkTestingCardProps = { + title: string; +}; + +// Shared testing guide rendered by the onboarding screen and every main tab, +// so the instructions stay identical everywhere. The Detour link is shown once +// up top because both the Deferred and Universal / App flows use it. +export function LinkTestingCard({ title }: LinkTestingCardProps) { + return ( + + {title} + + Add credentials from the Detour panel to .env before + testing. + + + + + Detour link + https://<org>.godetour.link/<hash>/details + + Deferred Link + + Uninstall the app, open a Detour link in the mobile browser, then reinstall and launch. Sign + in and complete onboarding — React Navigation replays the link once it can reach{" "} + Details. + + + Universal / App Link + + With the app installed, trigger the Detour link. You can do it by visiting it in the + browser, pasting and tapping it in Notes / Messages app or using a terminal command. + + + Custom Scheme + + A custom-scheme URL launches the app and is routed by React Navigation: + + + npx uri-scheme open {`"detour-react-navigation-advanced://details"`}{" "} + {Platform.OS === "android" ? "--android" : "--ios"} + + + ); +} diff --git a/examples/react-navigation-advanced/src/navigation/screens/Explore.tsx b/examples/react-navigation-advanced/src/navigation/screens/Explore.tsx index 48b1c11..2e641fd 100644 --- a/examples/react-navigation-advanced/src/navigation/screens/Explore.tsx +++ b/examples/react-navigation-advanced/src/navigation/screens/Explore.tsx @@ -3,6 +3,7 @@ import { Pressable, ScrollView, Text, View } from "react-native"; import { useNavigation } from "@react-navigation/native"; import type { NativeStackNavigationProp } from "@react-navigation/native-stack"; +import { LinkTestingCard } from "../../LinkTestingCard"; import { useAuth } from "../../auth"; import { colors, styles } from "../../styles"; import type { RootStackParamList } from "../index"; @@ -14,43 +15,7 @@ export function Explore() { return ( - - Explore - - Add credentials from the Detour panel to .env before - testing. - - - - - Universal / App Link - - Open a godetour.link URL in the browser — Detour - resolves it and navigates to the Details screen. - - - https://<your-org>.godetour.link/<hash>/details - - - Custom Scheme - - This example also handles custom scheme links. Opening a non-Detour URL redirects to the - Third-party screen. Test with the simulator: - - - npx uri-scheme open {`"detour-react-navigation-advanced://app"`} --ios - - - Deferred Link + Auth Gate - - Copy a Detour link, sign out, then relaunch. The link survives the sign-in flow — you'll - land on the Details screen once you complete sign-in and onboarding. - - - Make sure Copy link feature enabled is turned on in - App Configuration in the Detour panel. - - + diff --git a/examples/react-navigation-advanced/src/navigation/screens/Home.tsx b/examples/react-navigation-advanced/src/navigation/screens/Home.tsx index 3c5f144..a1c9b61 100644 --- a/examples/react-navigation-advanced/src/navigation/screens/Home.tsx +++ b/examples/react-navigation-advanced/src/navigation/screens/Home.tsx @@ -3,6 +3,7 @@ import { Pressable, ScrollView, Text, View } from "react-native"; import { useNavigation } from "@react-navigation/native"; import type { NativeStackNavigationProp } from "@react-navigation/native-stack"; +import { LinkTestingCard } from "../../LinkTestingCard"; import { useAuth } from "../../auth"; import { colors, styles } from "../../styles"; import type { RootStackParamList } from "../index"; @@ -14,43 +15,7 @@ export function Home() { return ( - - Detour Example - - Add credentials from the Detour panel to .env before - testing. - - - - - Universal / App Link - - Open a godetour.link URL in the browser — Detour - resolves it and navigates to the Details screen. - - - https://<your-org>.godetour.link/<hash>/details - - - Custom Scheme - - This example also handles custom scheme links. Opening a non-Detour URL redirects to the - Third-party screen. Test with the simulator: - - - npx uri-scheme open {`"detour-react-navigation-advanced://app"`} --ios - - - Deferred Link + Auth Gate - - Copy a Detour link, sign out, then relaunch. The link survives the sign-in flow — you'll - land on the Details screen once you complete sign-in and onboarding. - - - Make sure Copy link feature enabled is turned on in - App Configuration in the Detour panel. - - + diff --git a/examples/react-navigation-advanced/src/navigation/screens/Onboarding.tsx b/examples/react-navigation-advanced/src/navigation/screens/Onboarding.tsx index 574c00c..48739e8 100644 --- a/examples/react-navigation-advanced/src/navigation/screens/Onboarding.tsx +++ b/examples/react-navigation-advanced/src/navigation/screens/Onboarding.tsx @@ -1,5 +1,6 @@ -import { Pressable, ScrollView, Text, View } from "react-native"; +import { Pressable, ScrollView, Text } from "react-native"; +import { LinkTestingCard } from "../../LinkTestingCard"; import { useAuth } from "../../auth"; import { colors, styles } from "../../styles"; @@ -16,42 +17,7 @@ export function Onboarding() { style={{ flex: 1, backgroundColor: colors.background }} contentContainerStyle={styles.scrollContent} > - - Test Detour Links - - Add credentials from the Detour panel to .env before - testing. - - - - - Universal / App Link - - Open a godetour.link URL in the browser — Detour - resolves it and navigates to the Details screen. - - https://<your-org>.godetour.link/<hash>/details - - Custom Scheme - - This example also handles custom scheme links. Opening a non-Detour URL redirects to the - Third-party screen. Test with the simulator: - - - npx uri-scheme open {`"detour-react-navigation-advanced://app"`} --ios - - - Deferred Link + Auth Gate - - Copy a Detour link to your clipboard, sign out, then relaunch. The deferred link will - survive the sign-in flow — once you finish sign-in and onboarding, React Navigation - replays the link and lands you on Details automatically. - - - Make sure Copy link feature enabled is turned on in App - Configuration in the Detour panel. - - + - - Settings - - Add credentials from the Detour panel to .env before - testing. - - - - - Universal / App Link - - Open a godetour.link URL in the browser — Detour - resolves it and navigates to the Details screen. - - - https://<your-org>.godetour.link/<hash>/details - - - Custom Scheme - - This example also handles custom scheme links. Opening a non-Detour URL redirects to the - Third-party screen. Test with the simulator: - - - npx uri-scheme open {`"detour-react-navigation-advanced://app"`} --ios - - - Deferred Link + Auth Gate - - Copy a Detour link, sign out, then relaunch. The link survives the sign-in flow — you'll - land on the Details screen once you complete sign-in and onboarding. - - - Make sure Copy link feature enabled is turned on in - App Configuration in the Detour panel. - - + diff --git a/examples/react-navigation-advanced/src/navigation/screens/SignIn.tsx b/examples/react-navigation-advanced/src/navigation/screens/SignIn.tsx index 6baa38d..bcdd052 100644 --- a/examples/react-navigation-advanced/src/navigation/screens/SignIn.tsx +++ b/examples/react-navigation-advanced/src/navigation/screens/SignIn.tsx @@ -1,13 +1,23 @@ import { Pressable, StyleSheet, Text, TextInput, View } from "react-native"; +import { useDetourContext } from "@swmansion/react-native-detour"; + import { useAuth } from "../../auth"; import { colors, styles } from "../../styles"; export function SignIn() { const { signIn } = useAuth(); + const { link } = useDetourContext(); return ( + {link && ( + + Link pending + A Detour link is waiting — sign in to continue. + + )} + Welcome back Sign in to continue to the app. diff --git a/examples/react-navigation-advanced/src/styles.ts b/examples/react-navigation-advanced/src/styles.ts index fbbb02d..99a4009 100644 --- a/examples/react-navigation-advanced/src/styles.ts +++ b/examples/react-navigation-advanced/src/styles.ts @@ -117,4 +117,8 @@ export const styles = StyleSheet.create({ fontSize: 14, color: colors.subtle, }, + banner: { + marginBottom: 16, + borderColor: colors.accent, + }, }); diff --git a/examples/react-navigation/README.md b/examples/react-navigation/README.md index af4f4bf..6f1e112 100644 --- a/examples/react-navigation/README.md +++ b/examples/react-navigation/README.md @@ -1,56 +1,128 @@ # Detour React Navigation Example -This example demonstrates the minimal integration of `@swmansion/react-native-detour` with React Navigation. +The minimal integration of [`@swmansion/react-native-detour`](https://detour.swmansion.com/docs/sdk/react-native/sdk-installation) with [React Navigation](https://reactnavigation.org/). Detour acts as the deep-link URL source for React Navigation's linking config, so routing stays fully declarative. -## Scenario represented +Navigation stack: `Home` and `Details`. Links are resolved by Detour and passed to React Navigation's linking flow. Route mapping (`Details: "details"`, `NotFound: "*"`) is declared there — no imperative navigation code needed. Both cold-start and runtime links are handled. -- Navigation stack: `Home` and `Details`. -- App is configured with React Navigation linking and Detour as the deep-link source. +**Related examples:** -## Deep link handling model +- [`examples/react-navigation-advanced`](../react-navigation-advanced) — auth + onboarding gated React Navigation flow -- Links are resolved by Detour and passed to React Navigation's linking flow. -- Both app-start links and links opened while the app is running are handled. -- Route mapping is defined in the linking config (`Details: "details"`, `NotFound: "*"`) so screens are resolved declaratively. -- For React Navigation linking details, see: - https://reactnavigation.org/docs/deep-linking?config=static#integrating-with-other-tools +## Test flow -For an auth-gated setup that uses React Navigation's pending-link behavior to survive sign-in and -onboarding, see `examples/react-navigation-advanced`. +1. Start the app — you land on `Home`. +2. Trigger a Detour link to `/details` (see [Triggering links](#triggering-links)) — the app navigates to `Details`. +3. Go back to `Home` — the same link should **not** trigger again. + +To test the **deferred** case: follow the [Deferred deep link](#triggering-links) setup before installing. On first launch the SDK resolves it on cold start and React Navigation routes directly to `Details`. + +A **custom-scheme** link (`detour-react-navigation://details`) resolves the same way and routes to `Details` — see [Triggering links](#triggering-links). + +
+ Detour Dashboard organization creator + Detour Dashboard app creator +
+ +> _**App flow**. Initial screen and the `Details` screen reached via the Detour link, with any forwarded query params visible (deferred link flow)._ + +## Set up Detour + +You need a Detour account to register this app and generate its credentials. [Sign up](https://godetour.dev/auth/signup) and open the [Detour Dashboard](https://godetour.dev). If you run into issues during setup, the [Dashboard Walkthrough](https://detour.swmansion.com/docs/Fundamentals/dashboard) covers each step in detail. + +### 1. Register the app + +Create an organization and add a new app. Detour assigns it a base link URL of the form `https://.godetour.link/` visible in **Link settings** section. + +> In **Link settings**, the dashboard asks for a fallback Redirect URL to mark setup as complete. It only controls where **web** traffic lands — it has no effect on the deferred or Universal/App link flows these examples test, so it can be left empty or filled with a placeholder URL for local development. For production, see [Full app configuration](https://detour.swmansion.com/docs/Fundamentals/getting-started#4-complete-app-configuration). + +→ [Dashboard › Apps](https://detour.swmansion.com/docs/Fundamentals/dashboard#apps) + +
+ Detour Dashboard organization creator + Detour Dashboard app creator +
+Detour Dashboard app link details +
+ +> **Dashboard**. _Create an organization (top-left), create a new app (top-right), and use the generated link (marked with red) in Link settings (bottom)._ + + +### 2. Configure the platforms + +Open **App configuration** and fill in the platform details: + +- **iOS:** set Bundle ID to `detourreactnative.reactnavigation` and provide Team ID and App Store ID. The **Team ID must be your real Apple Developer Team ID** — the one the build is signed with (`DEVELOPMENT_TEAM` in Xcode › Signing & Capabilities, also shown under [Apple Developer › Membership](https://developer.apple.com/account)). A placeholder or mismatched Team ID makes the Universal link open in Safari instead of the app. The App Store ID can stay a placeholder for local development. +- **Android:** set package name to `detourreactnative.reactnavigation` and add a SHA-256 certificate fingerprint. The **fingerprint must match the keystore that signs the build** — a wrong value makes Android open the App link in the browser instead of the app. For local development (`npx expo run:android`), use the **local debug keystore** fingerprint. See [Testing Android App Links](https://detour.swmansion.com/docs/sdk/react-native/testing#testing-android-app-links) for more info. + +The dashboard generates the `associatedDomains` and intent-filter snippets to paste into `app.json` ([below](#configuring-appjson)). + +> For a production integration, fill all fields with real values. See [App configuration](https://detour.swmansion.com/docs/Fundamentals/getting-started#app-configuration) for full guidance. + +→ [Dashboard › App configuration](https://detour.swmansion.com/docs/Fundamentals/dashboard#app-configuration) + +Detour Dashboard App configuration +
+ +> **Dashboard › App configuration**. _iOS and Android filled configurations with generated integration code snippets ready to copy._ -## Test flow -1. Start the app on iOS/Android. -2. You land on `Home`. -3. Trigger a Detour link that resolves to `/details`. -4. The app should navigate to `Details`. -5. Go back to `Home` - the same link should NOT trigger again. +### 3. Copy your credentials + +Open **API configuration** and copy your `appID` and publishable `apiKey` into this example's `.env`. + +→ [Dashboard › API configuration](https://detour.swmansion.com/docs/Fundamentals/dashboard#api-configuration-and-key-security) + +Detour Dashboard API configuration +
+ +> **Dashboard › API configuration**. _The API configuration panel with `appID` and the publishable `apiKey` ready to copy._ ## Configuring app.json -After registering your app in the [Detour Dashboard](https://godetour.dev), replace the placeholders in `app.json` with values from the **API configuration** section: +Replace the placeholders in `app.json` with the values from the dashboard's [App configuration](https://detour.swmansion.com/docs/Fundamentals/dashboard#app-configuration) section: - `` — your organization slug - `` — the path prefix assigned to your app ```json "ios": { - "bundleIdentifier": ".godetour.link"] }, "android": { - "package": "", + // ... "intentFilters": [{ - "data": [{ "host": ".godetour.link", "pathPrefix": "/" }] + // ... + "data": [{ "scheme": "https", "host": ".godetour.link", "pathPrefix": "/" }] }] } ``` -These same values go into the simulator commands in the section below. +> **Universal Links not opening the app?** Add `?mode=developer` to the `associatedDomains` entry: `"applinks:.godetour.link?mode=developer"`. This bypasses Apple's CDN and fetches the AASA file directly from your domain on every launch instead of relying on a potentially stale cached version. Requires **Settings → Developer → Associated Domains Development** to be enabled on the device and a development-signed build. Remove it before submitting to TestFlight or the App Store. + +These same values go into the simulator commands in the next section. ## Triggering links -**Universal / App link** — open a Detour HTTPS link: +
+Deferred deep link + +Follow these steps to test the deferred flow: + +1. Uninstall the app or clear its data to start from a clean state. +2. Open a Detour link in the device's mobile browser. +3. Install and launch the app — the SDK resolves the link automatically. + +> **Note:** On Android, the install referrer is typically unavailable in development builds, so deferred matching falls back to probabilistic signals (IP, device fingerprint) only. See [Limitations & Known Issues](https://detour.swmansion.com/docs/Architecture/architecture-limitations). + +Alternatively on iOS, you can also copy the link to your clipboard before uninstalling — the SDK reads the clipboard on first launch (`shouldUseClipboard: true`), so you can skip the browser step. It simulates a link clicked before the app was installed. + +
+ +
+Universal / App link + +Open a Detour link directly from the terminal: ```sh # iOS simulator @@ -60,16 +132,36 @@ xcrun simctl openurl booted "https://.godetour.link//de adb shell am start -a android.intent.action.VIEW -d "https://.godetour.link//details" ``` -**Deferred link** — simulates a link clicked before the app was installed: +Alternatively, paste the link into Notes or Messages on the device and tap it — this uses the same OS routing path a real user would. -1. Copy a Detour link URL from the Dashboard to your clipboard. -2. Kill or uninstall the app. -3. Relaunch — the SDK reads the clipboard on startup and resolves the link automatically. +
+ +
+Custom scheme + +```sh +# iOS simulator +npx uri-scheme open "detour-react-navigation://details" --ios + +# Android emulator +npx uri-scheme open "detour-react-navigation://details" --android +``` + +
+ +For more cases and gotchas, see [Testing & Troubleshooting](https://detour.swmansion.com/docs/sdk/react-native/testing). ## Quick start -- Configure this app in Detour Dashboard (`https://godetour.dev`) using identifiers from `app.json` (for example `ios.bundleIdentifier`, `android.package`), then use generated values to fill `.env` and update `app.json` integration fields (intent filters, etc.). - Install dependencies from the repo root: `pnpm install` +- Configure this app in the [Detour Dashboard](https://godetour.dev) using identifiers from `app.json` (for example `ios.bundleIdentifier`, `android.package`). +- Use the values from the dashboard's [API configuration](https://detour.swmansion.com/docs/Fundamentals/dashboard#api-configuration-and-key-security) section to fill `.env` and update `app.json` with the generated integration code. - Run prebuild for this example: `pnpm prebuild` - Start the example: `pnpm start` - Run on device/simulator: `pnpm ios` or `pnpm android` + +## See also + +- [SDK Usage](https://detour.swmansion.com/docs/sdk/react-native/sdk-usage) — how to integrate Detour with your navigation library +- [API Reference](https://detour.swmansion.com/docs/sdk/react-native/api-reference) — full type and method reference +- [`examples/react-navigation-advanced`](../react-navigation-advanced) — auth + onboarding gated React Navigation flow diff --git a/examples/react-navigation/assets/screenshots/app-flow-a.png b/examples/react-navigation/assets/screenshots/app-flow-a.png new file mode 100644 index 0000000..33f46bd Binary files /dev/null and b/examples/react-navigation/assets/screenshots/app-flow-a.png differ diff --git a/examples/react-navigation/assets/screenshots/app-flow-b.png b/examples/react-navigation/assets/screenshots/app-flow-b.png new file mode 100644 index 0000000..d43f084 Binary files /dev/null and b/examples/react-navigation/assets/screenshots/app-flow-b.png differ diff --git a/examples/react-navigation/assets/screenshots/dashboard-api-configuration.png b/examples/react-navigation/assets/screenshots/dashboard-api-configuration.png new file mode 100644 index 0000000..3d9ed40 Binary files /dev/null and b/examples/react-navigation/assets/screenshots/dashboard-api-configuration.png differ diff --git a/examples/react-navigation/assets/screenshots/dashboard-app-configuration.png b/examples/react-navigation/assets/screenshots/dashboard-app-configuration.png new file mode 100644 index 0000000..906bc9e Binary files /dev/null and b/examples/react-navigation/assets/screenshots/dashboard-app-configuration.png differ diff --git a/examples/react-navigation/assets/screenshots/dashboard-create-app-a.png b/examples/react-navigation/assets/screenshots/dashboard-create-app-a.png new file mode 100644 index 0000000..a3995d0 Binary files /dev/null and b/examples/react-navigation/assets/screenshots/dashboard-create-app-a.png differ diff --git a/examples/react-navigation/assets/screenshots/dashboard-create-app-b.png b/examples/react-navigation/assets/screenshots/dashboard-create-app-b.png new file mode 100644 index 0000000..34a30f2 Binary files /dev/null and b/examples/react-navigation/assets/screenshots/dashboard-create-app-b.png differ diff --git a/examples/react-navigation/assets/screenshots/dashboard-create-app-c.png b/examples/react-navigation/assets/screenshots/dashboard-create-app-c.png new file mode 100644 index 0000000..37ca6b6 Binary files /dev/null and b/examples/react-navigation/assets/screenshots/dashboard-create-app-c.png differ diff --git a/examples/react-navigation/src/navigation/screens/Home.tsx b/examples/react-navigation/src/navigation/screens/Home.tsx index 19e6e89..bd41efd 100644 --- a/examples/react-navigation/src/navigation/screens/Home.tsx +++ b/examples/react-navigation/src/navigation/screens/Home.tsx @@ -23,24 +23,17 @@ export function Home() { - Universal / App Link - - Open a Detour link in the browser — iOS/Android will launch the app and Detour will - navigate to the Details screen. Test with the simulator using: - - - npx uri-scheme open {`"detour-react-navigation://details"`} --ios - - Deferred Link - Copy a Detour link to your clipboard, then kill and relaunch the app. Because{" "} - shouldUseClipboard is enabled, Detour reads the - clipboard on startup and resolves the pending link automatically. + Uninstall the app or clear its data, open a Detour link in the mobile browser, then + install and launch — the SDK resolves the link automatically. + https://<your-org>.godetour.link/<hash>/details + + Universal / App Link - Make sure Copy link feature enabled is turned on in App - Configuration in the Detour panel. + Open in browser or paste into Notes/Messages and tap — iOS/Android will launch the app and + Detour navigates to the Details screen. https://<your-org>.godetour.link/<hash>/details diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d64c26c..62376e8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,13 +26,13 @@ importers: dependencies: expo: specifier: ~55.0.11 - version: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + version: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) react: specifier: 19.2.0 version: 19.2.0 react-native: specifier: 0.83.4 - version: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + version: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) devDependencies: '@commitlint/config-conventional': specifier: ^19.6.0 @@ -75,25 +75,25 @@ importers: dependencies: '@expo/metro-runtime': specifier: ~55.0.9 - version: 55.0.9(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 55.0.9(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) '@react-native-async-storage/async-storage': specifier: ^2.2.0 - version: 2.2.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)) + version: 2.2.0(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0)) '@swmansion/react-native-detour': specifier: workspace:* version: link:../../packages/react-native-detour expo: specifier: ~55.0.11 - version: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + version: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) expo-application: specifier: '*' version: 6.1.5(expo@55.0.11) expo-clipboard: specifier: '*' - version: 7.1.5(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 7.1.5(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) expo-constants: specifier: ~55.0.11 - version: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3) + version: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3) expo-dev-client: specifier: ~55.0.22 version: 55.0.22(expo@55.0.11)(typescript@5.9.3) @@ -111,10 +111,10 @@ importers: version: 19.2.0(react@19.2.0) react-native: specifier: 0.83.4 - version: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + version: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) react-native-safe-area-context: specifier: ~5.6.2 - version: 5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) react-native-web: specifier: ~0.21.2 version: 0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -127,55 +127,55 @@ importers: dependencies: '@react-native-async-storage/async-storage': specifier: ^2.2.0 - version: 2.2.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)) + version: 2.2.0(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0)) '@swmansion/react-native-detour': specifier: workspace:* version: link:../../packages/react-native-detour expo: specifier: ~55.0.11 - version: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + version: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) expo-application: specifier: '*' version: 6.1.5(expo@55.0.11) expo-clipboard: specifier: '*' - version: 7.1.5(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 7.1.5(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) expo-constants: specifier: ~55.0.11 - version: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3) + version: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3) expo-device: specifier: ~55.0.12 version: 55.0.12(expo@55.0.11) expo-linking: specifier: ~55.0.11 - version: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + version: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) expo-localization: specifier: '*' version: 16.1.6(expo@55.0.11)(react@19.2.0) expo-router: specifier: ~55.0.10 - version: 55.0.10(@expo/log-box@55.0.10)(@expo/metro-runtime@55.0.9)(@types/react@19.2.14)(expo-constants@55.0.11)(expo-font@55.0.6)(expo-linking@55.0.11)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native-gesture-handler@2.30.1(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-reanimated@4.3.0(react-native-worklets@0.7.2(@babel/core@7.29.0)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-screens@4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-web@0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 55.0.10(0062ffa63a59f02a3ced1192512e8bd7) expo-splash-screen: specifier: ~55.0.15 version: 55.0.15(expo@55.0.11)(typescript@5.9.3) expo-system-ui: specifier: ~55.0.13 - version: 55.0.13(expo@55.0.11)(react-native-web@0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)) + version: 55.0.13(expo@55.0.11)(react-native-web@0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0)) react: specifier: 19.2.0 version: 19.2.0 react-native: specifier: 0.83.4 - version: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + version: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) react-native-gesture-handler: specifier: ~2.30.0 - version: 2.30.1(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 2.30.1(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) react-native-safe-area-context: specifier: ~5.6.2 - version: 5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) react-native-screens: specifier: ~4.23.0 - version: 4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) devDependencies: '@types/react': specifier: ~19.2.2 @@ -188,43 +188,43 @@ importers: dependencies: '@expo/metro-runtime': specifier: ~55.0.9 - version: 55.0.9(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 55.0.9(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) '@react-native-async-storage/async-storage': specifier: ^2.2.0 - version: 2.2.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)) + version: 2.2.0(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0)) '@swmansion/react-native-detour': specifier: workspace:* version: link:../../packages/react-native-detour expo: specifier: ~55.0.11 - version: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + version: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) expo-application: specifier: '*' version: 6.1.5(expo@55.0.11) expo-clipboard: specifier: '*' - version: 7.1.5(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 7.1.5(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) expo-constants: specifier: ~55.0.11 - version: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3) + version: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3) expo-device: specifier: ~55.0.12 version: 55.0.12(expo@55.0.11) expo-linking: specifier: ~55.0.11 - version: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + version: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) expo-localization: specifier: '*' version: 16.1.6(expo@55.0.11)(react@19.2.0) expo-router: specifier: ~55.0.10 - version: 55.0.10(@expo/log-box@55.0.10)(@expo/metro-runtime@55.0.9)(@types/react@19.2.14)(expo-constants@55.0.11)(expo-font@55.0.6)(expo-linking@55.0.11)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native-gesture-handler@2.30.1(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-reanimated@4.3.0(react-native-worklets@0.7.2(@babel/core@7.29.0)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-screens@4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-web@0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 55.0.10(0062ffa63a59f02a3ced1192512e8bd7) expo-splash-screen: specifier: ~55.0.15 version: 55.0.15(expo@55.0.11)(typescript@5.9.3) expo-system-ui: specifier: ~55.0.13 - version: 55.0.13(expo@55.0.11)(react-native-web@0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)) + version: 55.0.13(expo@55.0.11)(react-native-web@0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0)) react: specifier: 19.2.0 version: 19.2.0 @@ -233,16 +233,16 @@ importers: version: 19.2.0(react@19.2.0) react-native: specifier: 0.83.4 - version: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + version: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) react-native-gesture-handler: specifier: ~2.30.0 - version: 2.30.1(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 2.30.1(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) react-native-safe-area-context: specifier: ~5.6.2 - version: 5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) react-native-screens: specifier: ~4.23.0 - version: 4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) react-native-web: specifier: ~0.21.2 version: 0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -261,43 +261,43 @@ importers: dependencies: '@expo/metro-runtime': specifier: ~55.0.9 - version: 55.0.9(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 55.0.9(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) '@react-native-async-storage/async-storage': specifier: ^2.2.0 - version: 2.2.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)) + version: 2.2.0(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0)) '@swmansion/react-native-detour': specifier: workspace:* version: link:../../packages/react-native-detour expo: specifier: ~55.0.11 - version: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + version: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) expo-application: specifier: '*' version: 6.1.5(expo@55.0.11) expo-clipboard: specifier: '*' - version: 7.1.5(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 7.1.5(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) expo-constants: specifier: ~55.0.11 - version: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3) + version: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3) expo-device: specifier: ~55.0.12 version: 55.0.12(expo@55.0.11) expo-linking: specifier: ~55.0.11 - version: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + version: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) expo-localization: specifier: '*' version: 16.1.6(expo@55.0.11)(react@19.2.0) expo-router: specifier: ~55.0.10 - version: 55.0.10(@expo/log-box@55.0.10)(@expo/metro-runtime@55.0.9)(@types/react@19.2.14)(expo-constants@55.0.11)(expo-font@55.0.6)(expo-linking@55.0.11)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native-gesture-handler@2.30.1(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-reanimated@4.3.0(react-native-worklets@0.7.2(@babel/core@7.29.0)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-screens@4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-web@0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 55.0.10(0062ffa63a59f02a3ced1192512e8bd7) expo-splash-screen: specifier: ~55.0.15 version: 55.0.15(expo@55.0.11)(typescript@5.9.3) expo-system-ui: specifier: ~55.0.13 - version: 55.0.13(expo@55.0.11)(react-native-web@0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)) + version: 55.0.13(expo@55.0.11)(react-native-web@0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0)) react: specifier: 19.2.0 version: 19.2.0 @@ -306,16 +306,16 @@ importers: version: 19.2.0(react@19.2.0) react-native: specifier: 0.83.4 - version: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + version: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) react-native-gesture-handler: specifier: ~2.30.0 - version: 2.30.1(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 2.30.1(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) react-native-safe-area-context: specifier: ~5.6.2 - version: 5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) react-native-screens: specifier: ~4.23.0 - version: 4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) react-native-web: specifier: ~0.21.2 version: 0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -334,34 +334,34 @@ importers: dependencies: '@expo/metro-runtime': specifier: ~55.0.9 - version: 55.0.9(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 55.0.9(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) '@react-native-async-storage/async-storage': specifier: ^2.2.0 - version: 2.2.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)) + version: 2.2.0(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0)) '@react-navigation/native': specifier: ^7.1.17 - version: 7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) '@react-navigation/native-stack': specifier: ^7.3.26 - version: 7.14.10(@react-navigation/native@7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-screens@4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 7.14.10(@react-navigation/native@7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-screens@4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) '@swmansion/react-native-detour': specifier: workspace:* version: link:../../packages/react-native-detour expo: specifier: ~55.0.11 - version: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + version: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) expo-application: specifier: '*' version: 6.1.5(expo@55.0.11) expo-asset: specifier: ~55.0.12 - version: 55.0.12(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + version: 55.0.12(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) expo-clipboard: specifier: '*' - version: 7.1.5(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 7.1.5(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) expo-constants: specifier: ~55.0.11 - version: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3) + version: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3) expo-dev-client: specifier: ~55.0.22 version: 55.0.22(expo@55.0.11)(typescript@5.9.3) @@ -382,16 +382,16 @@ importers: version: 19.2.0(react@19.2.0) react-native: specifier: 0.83.4 - version: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + version: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) react-native-gesture-handler: specifier: ~2.30.0 - version: 2.30.1(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 2.30.1(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) react-native-safe-area-context: specifier: ~5.6.2 - version: 5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) react-native-screens: specifier: ~4.23.0 - version: 4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) react-native-web: specifier: ~0.21.2 version: 0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -410,34 +410,34 @@ importers: dependencies: '@expo/metro-runtime': specifier: ~55.0.9 - version: 55.0.9(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 55.0.9(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) '@react-native-async-storage/async-storage': specifier: ^2.2.0 - version: 2.2.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)) + version: 2.2.0(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0)) '@react-navigation/bottom-tabs': specifier: ^7.3.10 - version: 7.15.9(@react-navigation/native@7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-screens@4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 7.15.9(@react-navigation/native@7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-screens@4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) '@react-navigation/native': specifier: ^7.1.17 - version: 7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) '@react-navigation/native-stack': specifier: ^7.3.26 - version: 7.14.10(@react-navigation/native@7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-screens@4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 7.14.10(@react-navigation/native@7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-screens@4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) '@swmansion/react-native-detour': specifier: workspace:* version: link:../../packages/react-native-detour expo: specifier: ~55.0.11 - version: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + version: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) expo-application: specifier: '*' version: 6.1.5(expo@55.0.11) expo-clipboard: specifier: '*' - version: 7.1.5(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 7.1.5(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) expo-constants: specifier: ~55.0.11 - version: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3) + version: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3) expo-device: specifier: ~55.0.12 version: 55.0.12(expo@55.0.11) @@ -449,7 +449,7 @@ importers: version: 55.0.15(expo@55.0.11)(typescript@5.9.3) expo-system-ui: specifier: ~55.0.13 - version: 55.0.13(expo@55.0.11)(react-native-web@0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)) + version: 55.0.13(expo@55.0.11)(react-native-web@0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0)) react: specifier: 19.2.0 version: 19.2.0 @@ -458,16 +458,16 @@ importers: version: 19.2.0(react@19.2.0) react-native: specifier: 0.83.4 - version: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + version: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) react-native-gesture-handler: specifier: ~2.30.0 - version: 2.30.1(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 2.30.1(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) react-native-safe-area-context: specifier: ~5.6.2 - version: 5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) react-native-screens: specifier: ~4.23.0 - version: 4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) react-native-web: specifier: ~0.21.2 version: 0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -486,11 +486,11 @@ importers: dependencies: react-native-device-info: specifier: '>=10.0.0' - version: 15.0.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)) + version: 15.0.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0)) devDependencies: '@react-native-async-storage/async-storage': specifier: ^2.2.0 - version: 2.2.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)) + version: 2.2.0(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0)) '@react-native/babel-preset': specifier: 0.83.4 version: 0.83.4(@babel/core@7.29.0) @@ -511,10 +511,10 @@ importers: version: 6.1.5(expo@55.0.11) expo-clipboard: specifier: '*' - version: 7.1.5(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 7.1.5(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) expo-constants: specifier: ~55.0.11 - version: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3) + version: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3) expo-device: specifier: ~55.0.12 version: 55.0.12(expo@55.0.11) @@ -529,7 +529,7 @@ importers: version: 19.2.0 react-native: specifier: 0.83.4 - version: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + version: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) react-native-builder-bob: specifier: 0.40.13 version: 0.40.13 @@ -1621,6 +1621,12 @@ packages: resolution: {integrity: sha512-KZNxZvnGCtiM2aYYZ6Wz0Ix5r47dAvpNLApFtZWnSoERzAdOMzVBOPysBoM0JlF6FKWZ8GPqgn6qt3dV/8Zlpg==} hasBin: true + '@hapi/hoek@9.3.0': + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} + + '@hapi/topo@5.1.0': + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -1752,6 +1758,9 @@ packages: '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + '@nodable/entities@2.2.0': + resolution: {integrity: sha512-9uGyhaQavEUMC8AIddIjau4NsnsXhou+j5sBAGojCM1oxmQpVKTWR/9JxABD6UAv12vpIms55fPZKFQEhG6uBg==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -2056,6 +2065,44 @@ packages: peerDependencies: react-native: ^0.0.0-0 || >=0.65 <1.0 + '@react-native-community/cli-clean@20.1.3': + resolution: {integrity: sha512-sFLdLzapfC0scjgzBJJWYDY2RhHPjuuPkA5r6q0gc/UQH/izXpMpLrhh1DW84cMDraNACK0U62tU7ebNaQ1LMQ==} + + '@react-native-community/cli-config-android@20.1.3': + resolution: {integrity: sha512-DNHDP+OWLyhKShGciBqPcxhxfp1Z/7GQcb4F+TGyCeKQAr+JdnUjRXN3X+YCU/v+g2kbYYyRJKlGabzkVvdrAw==} + + '@react-native-community/cli-config-apple@20.1.3': + resolution: {integrity: sha512-QX9B83nAfCPs0KiaYz61kAEHWr9sttooxzRzNdQwvZTwnsIpvWOT9GvMMj/19OeXiQzMJBzZX0Pgt6+spiUsDQ==} + + '@react-native-community/cli-config@20.1.3': + resolution: {integrity: sha512-n73nW0cG92oNF0r994pPqm0DjAShOm3F8LSffDYhJqNAno+h/csmv/37iL4NtSpmKIO8xqsG3uVTXz9X/hzNaQ==} + + '@react-native-community/cli-doctor@20.1.3': + resolution: {integrity: sha512-EI+mAPWn255/WZ4CQohy1I049yiaxVr41C3BeQ2BCyhxODIDR8XRsLzYb1t9MfqK/C3ZncUN2mPSRXFeKPPI1w==} + + '@react-native-community/cli-platform-android@20.1.3': + resolution: {integrity: sha512-bzB9ELPOISuqgtDZXFPQlkuxx1YFkNx3cNgslc5ElCrk+5LeCLQLIBh/dmIuK8rwUrPcrramjeBj++Noc+TaAA==} + + '@react-native-community/cli-platform-apple@20.1.3': + resolution: {integrity: sha512-XJ+DqAD4hkplWVXK5AMgN7pP9+4yRSe5KfZ/b42+ofkDBI55ALlUmX+9HWE3fMuRjcotTCoNZqX2ov97cFDXpQ==} + + '@react-native-community/cli-platform-ios@20.1.3': + resolution: {integrity: sha512-2qL48SINotuHbZO73cgqSwqd/OWNx0xTbFSdujhpogV4p8BNwYYypfjh4vJY5qJEB5PxuoVkMXT+aCADpg9nBg==} + + '@react-native-community/cli-server-api@20.1.3': + resolution: {integrity: sha512-hsNsdUKZDd2T99OuNuiXz4VuvLa1UN0zcxefmPjXQgI0byrBLzzDr+o7p03sKuODSzKi2h+BMnUxiS07HACQLA==} + + '@react-native-community/cli-tools@20.1.3': + resolution: {integrity: sha512-EAn0vPCMxtHhfWk2UwLmSUfPfLUnFgC7NjiVJVTKJyVk5qGnkPfoT8te/1IUXFTysUB0F0RIi+NgDB4usFOLeA==} + + '@react-native-community/cli-types@20.1.3': + resolution: {integrity: sha512-IdAcegf0pH1hVraxWTG1ACLkYC0LDQfqtaEf42ESyLIF3Xap70JzL/9tAlxw7lSCPZPFWhrcgU0TBc4SkC/ecw==} + + '@react-native-community/cli@20.1.3': + resolution: {integrity: sha512-sLo8cu9JyFNfuuF1C+8NJ4DHE/PEFaXGd4enkcxi/OJjGG8+sOQrdjNQ4i+cVh/2c+ah1mEMwsYjc3z0+/MqSg==} + engines: {node: '>=20.19.4'} + hasBin: true + '@react-native/assets-registry@0.83.4': resolution: {integrity: sha512-aqKtpbJDSQeSX/Dwv0yMe1/Rd2QfXi12lnyZDXNn/OEKz59u6+LuPBVgO/9CRyclHmdlvwg8c7PJ9eX2ZMnjWg==} engines: {node: '>= 20.19.4'} @@ -2119,6 +2166,16 @@ packages: resolution: {integrity: sha512-wYUdv0rt4MjhKhQloO1AnGDXhZQOFZHDxm86dEtEA0WcsCdVrFdRULFM+rKUC/QQtJW2rS6WBqtBusgtrsDADg==} engines: {node: '>= 20.19.4'} + '@react-native/metro-babel-transformer@0.83.4': + resolution: {integrity: sha512-gbqn9OmTou3TykLIbZHC2lw/tjdIPr/6KH8Uz4TAPf5f0yZuWoYtQrJ/UBJ+KVbJC5/A2vN8BXkwWXVz90hJIw==} + engines: {node: '>= 20.19.4'} + peerDependencies: + '@babel/core': '*' + + '@react-native/metro-config@0.83.4': + resolution: {integrity: sha512-uYAJLDj1xWm05grHhv3swEHPsygzrl+xIbQ2b84sh9jU0LFSTgxSGv5CGgwee+F3j637GQBEoRP0ymyLqjXUIA==} + engines: {node: '>= 20.19.4'} + '@react-native/normalize-colors@0.74.89': resolution: {integrity: sha512-qoMMXddVKVhZ8PA1AbUCk83trpd6N+1nF2A6k1i6LsQObyS92fELuk8kU/lQs6M7BsMHwqyLCpQJ1uFgNvIQXg==} @@ -2186,6 +2243,15 @@ packages: peerDependencies: release-it: ^17.0.0 + '@sideway/address@4.1.5': + resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} + + '@sideway/formula@3.0.1': + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} + + '@sideway/pinpoint@2.0.0': + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + '@simple-libs/child-process-utils@1.0.2': resolution: {integrity: sha512-/4R8QKnd/8agJynkNdJmNw2MBxuFTRcNFnE5Sg/G+jkSsV8/UBgULMzhizWWW42p8L5H7flImV2ATi79Ove2Tw==} engines: {node: '>=18'} @@ -2369,10 +2435,15 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + deprecated: Potential CWE-502 - Update to 1.3.1 or higher + + '@vscode/sudo-prompt@9.3.2': + resolution: {integrity: sha512-gcXoCN00METUNFeQOFJ+C9xUI0DKB+0EGMVg7wbVYRHBw2Eq3fKisDZOkRdOz3kqXRKOENMfShPOmypw1/8nOw==} '@xmldom/xmldom@0.8.12': resolution: {integrity: sha512-9k/gHF6n/pAi/9tqr3m3aqkuiNosYTurLLUtc7xQ9sxB/wm7WPygCv8GYa6mS0fLJEHhqMC1ATYhz++U/lRHqg==} engines: {node: '>=10.0.0'} + deprecated: this version has critical issues, please update to the latest version JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} @@ -2431,6 +2502,9 @@ packages: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} + ansi-fragments@0.2.1: + resolution: {integrity: sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==} + ansi-regex@4.1.1: resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} engines: {node: '>=6'} @@ -2463,6 +2537,12 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + anynum@1.0.1: + resolution: {integrity: sha512-N6//FLET/tXYNM/F6ABca1oH6fWB+KlTt909Le28WMDBk8oaT4vY17DCrwg2MvmuqUKt3Ni4N5dGJ/EoBgcO6A==} + + appdirsjs@1.2.7: + resolution: {integrity: sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==} + arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -2528,10 +2608,17 @@ packages: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} + astral-regex@1.0.0: + resolution: {integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==} + engines: {node: '>=4'} + async-function@1.0.0: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} + async-limiter@1.0.1: + resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + async-retry@1.3.3: resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} @@ -2654,6 +2741,10 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + body-parser@2.3.0: + resolution: {integrity: sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==} + engines: {node: '>=18'} + boxen@8.0.1: resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} engines: {node: '>=18'} @@ -2820,6 +2911,9 @@ packages: client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -2855,6 +2949,12 @@ packages: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} + colorette@1.4.0: + resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} + + command-exists@1.2.9: + resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} + commander@12.1.0: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} @@ -2866,6 +2966,10 @@ packages: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} + commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + commitlint@19.8.1: resolution: {integrity: sha512-j7jojdmHrVOZ16gnjK2nbQuzdwA9TpxS9iNb9Q9QS3ytgt3JZVIGmsNbCuhmnsJWGspotlQ34yH8n1HvIKImiQ==} engines: {node: '>=v18'} @@ -2900,6 +3004,10 @@ packages: resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} engines: {node: '>= 0.10.0'} + content-type@2.0.0: + resolution: {integrity: sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==} + engines: {node: '>=18'} + conventional-changelog-angular@7.0.0: resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} engines: {node: '>=16'} @@ -3050,6 +3158,9 @@ packages: resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} + dayjs@1.11.21: + resolution: {integrity: sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==} + debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -3237,12 +3348,21 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} + envinfo@7.21.0: + resolution: {integrity: sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==} + engines: {node: '>=4'} + hasBin: true + error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + errorhandler@1.5.2: + resolution: {integrity: sha512-kNAL7hESndBCrWwS72QyV3IVOTrVmj9D062FV5BQswNL5zEdeRmz/WJFyh6Aj/plvvSOrzddkxW57HgkZcR9Fw==} + engines: {node: '>= 0.8'} + es-abstract@1.24.1: resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==} engines: {node: '>= 0.4'} @@ -3693,6 +3813,13 @@ packages: fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fast-xml-builder@1.2.0: + resolution: {integrity: sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==} + + fast-xml-parser@5.9.3: + resolution: {integrity: sha512-brCNCeScma/kqa54J4PIDriSSSLssRkuYaUCpvHJulGc3HGI/xxKUCTDcYkAdqJsyb//ydpbxecjC3hB9+tb/g==} + hasBin: true + fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -3770,6 +3897,10 @@ packages: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -4040,6 +4171,10 @@ packages: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} + iconv-lite@0.7.2: + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} + engines: {node: '>=0.10.0'} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -4176,6 +4311,10 @@ packages: resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} engines: {node: '>= 0.4'} + is-fullwidth-code-point@2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -4328,6 +4467,9 @@ packages: resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} engines: {node: '>=18'} + is-unsafe@1.0.1: + resolution: {integrity: sha512-CLK2+VdgERgD96EYm5lUQssZYlRg2tkZnbsxZoacmSiRxiFJ4Nk4SzjCl+Ur+v3kXIY9dTIdb3IH22y1mZ56LA==} + is-weakmap@2.0.2: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} @@ -4344,6 +4486,10 @@ packages: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} + is-wsl@1.1.0: + resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==} + engines: {node: '>=4'} + is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} @@ -4529,6 +4675,9 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true + joi@17.13.4: + resolution: {integrity: sha512-1RuuER6kmt8K8I3nIWvPZKi5RQCb568ZPyY4Pwjlua+yo+63ZTmIwxLZH0heBmiKN4uxjvCiarDrjaeH84xicQ==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -4573,6 +4722,9 @@ packages: engines: {node: '>=6'} hasBin: true + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jsonfile@6.2.0: resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} @@ -4611,6 +4763,9 @@ packages: resolution: {integrity: sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==} engines: {node: '>=18'} + launch-editor@2.14.1: + resolution: {integrity: sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==} + leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -4770,6 +4925,10 @@ packages: resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} engines: {node: '>=18'} + logkitty@0.7.1: + resolution: {integrity: sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==} + hasBin: true + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -4818,6 +4977,10 @@ packages: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + memoize-one@5.2.1: resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} @@ -4930,6 +5093,11 @@ packages: engines: {node: '>=4'} hasBin: true + mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + mimic-fn@1.2.0: resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==} engines: {node: '>=4'} @@ -5021,6 +5189,10 @@ packages: resolution: {integrity: sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + nocache@3.0.4: + resolution: {integrity: sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==} + engines: {node: '>=12.0.0'} + node-exports-info@1.6.0: resolution: {integrity: sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==} engines: {node: '>= 0.4'} @@ -5044,6 +5216,10 @@ packages: node-releases@2.0.37: resolution: {integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==} + node-stream-zip@1.15.0: + resolution: {integrity: sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==} + engines: {node: '>=0.12.0'} + normalize-package-data@3.0.3: resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} engines: {node: '>=10'} @@ -5138,6 +5314,10 @@ packages: resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} engines: {node: '>=18'} + open@6.4.0: + resolution: {integrity: sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==} + engines: {node: '>=8'} + open@7.4.2: resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} engines: {node: '>=8'} @@ -5256,6 +5436,10 @@ packages: resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + path-expression-matcher@1.5.0: + resolution: {integrity: sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==} + engines: {node: '>=14.0.0'} + path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -5386,6 +5570,10 @@ packages: pure-rand@6.1.0: resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + qs@6.15.2: + resolution: {integrity: sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==} + engines: {node: '>=0.6'} + query-string@7.1.3: resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} engines: {node: '>=6'} @@ -5404,6 +5592,10 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} + raw-body@3.0.2: + resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} + engines: {node: '>= 0.10'} + rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -5618,6 +5810,9 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + resolve-cwd@3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} @@ -5748,6 +5943,9 @@ packages: server-only@0.0.1: resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -5785,6 +5983,10 @@ packages: resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} engines: {node: '>= 0.4'} + shell-quote@1.8.4: + resolution: {integrity: sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==} + engines: {node: '>= 0.4'} + shelljs@0.8.5: resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} engines: {node: '>=4'} @@ -5834,6 +6036,10 @@ packages: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} + slice-ansi@2.1.0: + resolution: {integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==} + engines: {node: '>=6'} + slugify@1.6.9: resolution: {integrity: sha512-vZ7rfeehZui7wQs438JXBckYLkIIdfHOXsaVEUMyS5fHo1483l1bMdo0EDSWYclY0yZKFOipDy4KHuKs6ssvdg==} engines: {node: '>=8.0.0'} @@ -5926,6 +6132,9 @@ packages: resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} engines: {node: '>=4'} + strict-url-sanitise@0.0.1: + resolution: {integrity: sha512-nuFtF539K8jZg3FjaWH/L8eocCR6gegz5RDOsaWxfdbF5Jqr2VXWxZayjTwUzsWJDC91k2EbnJXp6FuWW+Z4hg==} + string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} @@ -5999,6 +6208,9 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strnum@2.4.1: + resolution: {integrity: sha512-M9eUSMT2dCB2cTNPG7UYj6KuK7RJR2SN2+yCV/fTW3xzTCS6EaGZ5pSMgDIjB7r8zSfTGk+dvvn9rTjpVS9Mwg==} + structured-headers@0.4.1: resolution: {integrity: sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==} @@ -6137,6 +6349,10 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} + type-is@2.1.0: + resolution: {integrity: sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==} + engines: {node: '>= 18'} + typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -6208,6 +6424,10 @@ packages: universal-user-agent@6.0.1: resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -6272,6 +6492,7 @@ packages: uuid@7.0.3: resolution: {integrity: sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true v8-to-istanbul@9.3.0: @@ -6334,6 +6555,9 @@ packages: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} + which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + which-typed-array@1.1.20: resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==} engines: {node: '>= 0.4'} @@ -6380,6 +6604,17 @@ packages: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + ws@6.2.4: + resolution: {integrity: sha512-PNIUUyLI5YpkJZj60YBzX1o0ByQ4ovvfmq9N/Kig/PAYbVlGyz4R6G0SEWrD0O9acc0sT2+IdMBVLFv8FSi0Nw==} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + ws@7.5.10: resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} @@ -6412,6 +6647,10 @@ packages: resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} engines: {node: '>=12'} + xml-naming@0.1.0: + resolution: {integrity: sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==} + engines: {node: '>=16.0.0'} + xml2js@0.6.0: resolution: {integrity: sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w==} engines: {node: '>=4.0.0'} @@ -6424,6 +6663,9 @@ packages: resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} engines: {node: '>=8.0'} + y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -6439,6 +6681,10 @@ packages: engines: {node: '>= 14.6'} hasBin: true + yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} @@ -6447,6 +6693,10 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} @@ -6512,7 +6762,7 @@ snapshots: '@babel/generator@7.17.7': dependencies: - '@babel/types': 7.17.0 + '@babel/types': 7.29.0 jsesc: 2.5.2 source-map: 0.5.7 @@ -7627,7 +7877,7 @@ snapshots: '@expo-google-fonts/material-symbols@0.4.28': {} - '@expo/cli@55.0.21(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-constants@55.0.11)(expo-font@55.0.6)(expo-router@55.0.10)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3)': + '@expo/cli@55.0.21(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-constants@55.0.11)(expo-font@55.0.6)(expo-router@55.0.10)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3)': dependencies: '@expo/code-signing-certificates': 0.0.6 '@expo/config': 55.0.12(typescript@5.9.3) @@ -7636,7 +7886,7 @@ snapshots: '@expo/env': 2.1.1 '@expo/image-utils': 0.8.12 '@expo/json-file': 10.0.13 - '@expo/log-box': 55.0.10(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + '@expo/log-box': 55.0.10(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) '@expo/metro': 55.0.0 '@expo/metro-config': 55.0.13(expo@55.0.11)(typescript@5.9.3) '@expo/osascript': 2.4.2 @@ -7661,7 +7911,7 @@ snapshots: connect: 3.7.0 debug: 4.4.3 dnssd-advertise: 1.1.4 - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) expo-server: 55.0.7 fetch-nodeshim: 0.4.10 getenv: 2.0.0 @@ -7688,8 +7938,8 @@ snapshots: ws: 8.20.0 zod: 3.25.76 optionalDependencies: - expo-router: 55.0.10(@expo/log-box@55.0.10)(@expo/metro-runtime@55.0.9)(@types/react@19.2.14)(expo-constants@55.0.11)(expo-font@55.0.6)(expo-linking@55.0.11)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native-gesture-handler@2.30.1(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-reanimated@4.3.0(react-native-worklets@0.7.2(@babel/core@7.29.0)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-screens@4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-web@0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + expo-router: 55.0.10(0062ffa63a59f02a3ced1192512e8bd7) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) transitivePeerDependencies: - '@expo/dom-webview' - '@expo/metro-runtime' @@ -7751,18 +8001,18 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/devtools@55.0.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': + '@expo/devtools@55.0.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': dependencies: chalk: 4.1.2 optionalDependencies: react: 19.2.0 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) - '@expo/dom-webview@55.0.5(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': + '@expo/dom-webview@55.0.5(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': dependencies: - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) react: 19.2.0 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) '@expo/env@2.1.1': dependencies: @@ -7811,13 +8061,13 @@ snapshots: - supports-color - typescript - '@expo/log-box@55.0.10(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': + '@expo/log-box@55.0.10(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': dependencies: - '@expo/dom-webview': 55.0.5(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + '@expo/dom-webview': 55.0.5(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) anser: 1.4.10 - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) react: 19.2.0 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) stacktrace-parser: 0.1.11 '@expo/metro-config@55.0.13(expo@55.0.11)(typescript@5.9.3)': @@ -7842,21 +8092,21 @@ snapshots: postcss: 8.4.49 resolve-from: 5.0.0 optionalDependencies: - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) transitivePeerDependencies: - bufferutil - supports-color - typescript - utf-8-validate - '@expo/metro-runtime@55.0.9(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': + '@expo/metro-runtime@55.0.9(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': dependencies: - '@expo/log-box': 55.0.10(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + '@expo/log-box': 55.0.10(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) anser: 1.4.10 - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) pretty-format: 29.7.0 react: 19.2.0 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) stacktrace-parser: 0.1.11 whatwg-fetch: 3.6.20 optionalDependencies: @@ -7913,7 +8163,7 @@ snapshots: '@expo/json-file': 10.0.13 '@react-native/normalize-colors': 0.83.4 debug: 4.4.3 - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) resolve-from: 5.0.0 semver: 7.7.4 xml2js: 0.6.0 @@ -7934,14 +8184,14 @@ snapshots: '@expo/router-server@55.0.13(@expo/metro-runtime@55.0.9)(expo-constants@55.0.11)(expo-font@55.0.6)(expo-router@55.0.10)(expo-server@55.0.7)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: debug: 4.4.3 - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) - expo-constants: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3) - expo-font: 55.0.6(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo-constants: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3) + expo-font: 55.0.6(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) expo-server: 55.0.7 react: 19.2.0 optionalDependencies: - '@expo/metro-runtime': 55.0.9(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - expo-router: 55.0.10(@expo/log-box@55.0.10)(@expo/metro-runtime@55.0.9)(@types/react@19.2.14)(expo-constants@55.0.11)(expo-font@55.0.6)(expo-linking@55.0.11)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native-gesture-handler@2.30.1(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-reanimated@4.3.0(react-native-worklets@0.7.2(@babel/core@7.29.0)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-screens@4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-web@0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + '@expo/metro-runtime': 55.0.9(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + expo-router: 55.0.10(0062ffa63a59f02a3ced1192512e8bd7) react-dom: 19.2.0(react@19.2.0) transitivePeerDependencies: - supports-color @@ -7956,11 +8206,11 @@ snapshots: '@expo/sudo-prompt@9.3.2': {} - '@expo/vector-icons@15.1.1(expo-font@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': + '@expo/vector-icons@15.1.1(expo-font@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': dependencies: - expo-font: 55.0.6(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + expo-font: 55.0.6(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) react: 19.2.0 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) '@expo/ws-tunnel@1.0.6': {} @@ -7970,6 +8220,14 @@ snapshots: chalk: 4.1.2 js-yaml: 4.1.1 + '@hapi/hoek@9.3.0': + optional: true + + '@hapi/topo@5.1.0': + dependencies: + '@hapi/hoek': 9.3.0 + optional: true + '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.7': @@ -8193,6 +8451,9 @@ snapshots: dependencies: eslint-scope: 5.1.1 + '@nodable/entities@2.2.0': + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -8467,10 +8728,152 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 - '@react-native-async-storage/async-storage@2.2.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))': + '@react-native-async-storage/async-storage@2.2.0(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))': dependencies: merge-options: 3.0.4 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) + + '@react-native-community/cli-clean@20.1.3': + dependencies: + '@react-native-community/cli-tools': 20.1.3 + execa: 5.1.1 + fast-glob: 3.3.3 + picocolors: 1.1.1 + optional: true + + '@react-native-community/cli-config-android@20.1.3': + dependencies: + '@react-native-community/cli-tools': 20.1.3 + fast-glob: 3.3.3 + fast-xml-parser: 5.9.3 + picocolors: 1.1.1 + optional: true + + '@react-native-community/cli-config-apple@20.1.3': + dependencies: + '@react-native-community/cli-tools': 20.1.3 + execa: 5.1.1 + fast-glob: 3.3.3 + picocolors: 1.1.1 + optional: true + + '@react-native-community/cli-config@20.1.3(typescript@5.9.3)': + dependencies: + '@react-native-community/cli-tools': 20.1.3 + cosmiconfig: 9.0.1(typescript@5.9.3) + deepmerge: 4.3.1 + fast-glob: 3.3.3 + joi: 17.13.4 + picocolors: 1.1.1 + transitivePeerDependencies: + - typescript + optional: true + + '@react-native-community/cli-doctor@20.1.3(typescript@5.9.3)': + dependencies: + '@react-native-community/cli-config': 20.1.3(typescript@5.9.3) + '@react-native-community/cli-platform-android': 20.1.3 + '@react-native-community/cli-platform-apple': 20.1.3 + '@react-native-community/cli-platform-ios': 20.1.3 + '@react-native-community/cli-tools': 20.1.3 + command-exists: 1.2.9 + deepmerge: 4.3.1 + envinfo: 7.21.0 + execa: 5.1.1 + node-stream-zip: 1.15.0 + ora: 5.4.1 + picocolors: 1.1.1 + semver: 7.7.4 + wcwidth: 1.0.1 + yaml: 2.8.3 + transitivePeerDependencies: + - typescript + optional: true + + '@react-native-community/cli-platform-android@20.1.3': + dependencies: + '@react-native-community/cli-config-android': 20.1.3 + '@react-native-community/cli-tools': 20.1.3 + execa: 5.1.1 + logkitty: 0.7.1 + picocolors: 1.1.1 + optional: true + + '@react-native-community/cli-platform-apple@20.1.3': + dependencies: + '@react-native-community/cli-config-apple': 20.1.3 + '@react-native-community/cli-tools': 20.1.3 + execa: 5.1.1 + fast-xml-parser: 5.9.3 + picocolors: 1.1.1 + optional: true + + '@react-native-community/cli-platform-ios@20.1.3': + dependencies: + '@react-native-community/cli-platform-apple': 20.1.3 + optional: true + + '@react-native-community/cli-server-api@20.1.3': + dependencies: + '@react-native-community/cli-tools': 20.1.3 + body-parser: 2.3.0 + compression: 1.8.1 + connect: 3.7.0 + errorhandler: 1.5.2 + nocache: 3.0.4 + open: 6.4.0 + pretty-format: 29.7.0 + serve-static: 1.16.3 + strict-url-sanitise: 0.0.1 + ws: 6.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + optional: true + + '@react-native-community/cli-tools@20.1.3': + dependencies: + '@vscode/sudo-prompt': 9.3.2 + appdirsjs: 1.2.7 + execa: 5.1.1 + find-up: 5.0.0 + launch-editor: 2.14.1 + mime: 2.6.0 + ora: 5.4.1 + picocolors: 1.1.1 + prompts: 2.4.2 + semver: 7.7.4 + optional: true + + '@react-native-community/cli-types@20.1.3': + dependencies: + joi: 17.13.4 + optional: true + + '@react-native-community/cli@20.1.3(typescript@5.9.3)': + dependencies: + '@react-native-community/cli-clean': 20.1.3 + '@react-native-community/cli-config': 20.1.3(typescript@5.9.3) + '@react-native-community/cli-doctor': 20.1.3(typescript@5.9.3) + '@react-native-community/cli-server-api': 20.1.3 + '@react-native-community/cli-tools': 20.1.3 + '@react-native-community/cli-types': 20.1.3 + commander: 9.5.0 + deepmerge: 4.3.1 + execa: 5.1.1 + find-up: 5.0.0 + fs-extra: 8.1.0 + graceful-fs: 4.2.11 + picocolors: 1.1.1 + prompts: 2.4.2 + semver: 7.7.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - typescript + - utf-8-validate + optional: true '@react-native/assets-registry@0.83.4': {} @@ -8542,7 +8945,7 @@ snapshots: nullthrows: 1.1.1 yargs: 17.7.2 - '@react-native/community-cli-plugin@0.83.4': + '@react-native/community-cli-plugin@0.83.4(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))': dependencies: '@react-native/dev-middleware': 0.83.4 debug: 4.4.3 @@ -8551,6 +8954,9 @@ snapshots: metro-config: 0.83.5 metro-core: 0.83.5 semver: 7.7.4 + optionalDependencies: + '@react-native-community/cli': 20.1.3(typescript@5.9.3) + '@react-native/metro-config': 0.83.4(@babel/core@7.29.0) transitivePeerDependencies: - bufferutil - supports-color @@ -8609,28 +9015,49 @@ snapshots: '@react-native/js-polyfills@0.83.4': {} + '@react-native/metro-babel-transformer@0.83.4(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@react-native/babel-preset': 0.83.4(@babel/core@7.29.0) + hermes-parser: 0.32.0 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + optional: true + + '@react-native/metro-config@0.83.4(@babel/core@7.29.0)': + dependencies: + '@react-native/js-polyfills': 0.83.4 + '@react-native/metro-babel-transformer': 0.83.4(@babel/core@7.29.0) + metro-config: 0.83.5 + metro-runtime: 0.83.5 + transitivePeerDependencies: + - '@babel/core' + - supports-color + optional: true + '@react-native/normalize-colors@0.74.89': {} '@react-native/normalize-colors@0.83.4': {} - '@react-native/virtualized-lists@0.83.4(@types/react@19.2.14)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': + '@react-native/virtualized-lists@0.83.4(@types/react@19.2.14)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 19.2.0 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) optionalDependencies: '@types/react': 19.2.14 - '@react-navigation/bottom-tabs@7.15.9(@react-navigation/native@7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-screens@4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': + '@react-navigation/bottom-tabs@7.15.9(@react-navigation/native@7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-screens@4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': dependencies: - '@react-navigation/elements': 2.9.14(@react-navigation/native@7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - '@react-navigation/native': 7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + '@react-navigation/elements': 2.9.14(@react-navigation/native@7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + '@react-navigation/native': 7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) color: 4.2.3 react: 19.2.0 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) - react-native-safe-area-context: 5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - react-native-screens: 4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) + react-native-safe-area-context: 5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + react-native-screens: 4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) sf-symbols-typescript: 2.2.0 transitivePeerDependencies: - '@react-native-masked-view/masked-view' @@ -8647,38 +9074,38 @@ snapshots: use-latest-callback: 0.2.6(react@19.2.0) use-sync-external-store: 1.6.0(react@19.2.0) - '@react-navigation/elements@2.9.14(@react-navigation/native@7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': + '@react-navigation/elements@2.9.14(@react-navigation/native@7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': dependencies: - '@react-navigation/native': 7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + '@react-navigation/native': 7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) color: 4.2.3 react: 19.2.0 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) - react-native-safe-area-context: 5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) + react-native-safe-area-context: 5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) use-latest-callback: 0.2.6(react@19.2.0) use-sync-external-store: 1.6.0(react@19.2.0) - '@react-navigation/native-stack@7.14.10(@react-navigation/native@7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-screens@4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': + '@react-navigation/native-stack@7.14.10(@react-navigation/native@7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-screens@4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': dependencies: - '@react-navigation/elements': 2.9.14(@react-navigation/native@7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - '@react-navigation/native': 7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + '@react-navigation/elements': 2.9.14(@react-navigation/native@7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + '@react-navigation/native': 7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) color: 4.2.3 react: 19.2.0 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) - react-native-safe-area-context: 5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - react-native-screens: 4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) + react-native-safe-area-context: 5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + react-native-screens: 4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) sf-symbols-typescript: 2.2.0 warn-once: 0.1.1 transitivePeerDependencies: - '@react-native-masked-view/masked-view' - '@react-navigation/native@7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': + '@react-navigation/native@7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': dependencies: '@react-navigation/core': 7.17.2(react@19.2.0) escape-string-regexp: 4.0.0 fast-deep-equal: 3.1.3 nanoid: 3.3.11 react: 19.2.0 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) use-latest-callback: 0.2.6(react@19.2.0) '@react-navigation/routers@7.5.3': @@ -8697,6 +9124,17 @@ snapshots: - conventional-commits-filter - conventional-commits-parser + '@sideway/address@4.1.5': + dependencies: + '@hapi/hoek': 9.3.0 + optional: true + + '@sideway/formula@3.0.1': + optional: true + + '@sideway/pinpoint@2.0.0': + optional: true + '@simple-libs/child-process-utils@1.0.2': dependencies: '@simple-libs/stream-utils': 1.2.0 @@ -8925,6 +9363,9 @@ snapshots: '@ungap/structured-clone@1.3.0': {} + '@vscode/sudo-prompt@9.3.2': + optional: true + '@xmldom/xmldom@0.8.12': {} JSONStream@1.3.5: @@ -8990,6 +9431,13 @@ snapshots: dependencies: type-fest: 0.21.3 + ansi-fragments@0.2.1: + dependencies: + colorette: 1.4.0 + slice-ansi: 2.1.0 + strip-ansi: 5.2.0 + optional: true + ansi-regex@4.1.1: {} ansi-regex@5.0.1: {} @@ -9013,6 +9461,12 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.2 + anynum@1.0.1: + optional: true + + appdirsjs@1.2.7: + optional: true + arg@5.0.2: {} argparse@1.0.10: @@ -9104,8 +9558,14 @@ snapshots: dependencies: tslib: 2.8.1 + astral-regex@1.0.0: + optional: true + async-function@1.0.0: {} + async-limiter@1.0.1: + optional: true + async-retry@1.3.3: dependencies: retry: 0.13.1 @@ -9252,7 +9712,7 @@ snapshots: resolve-from: 5.0.0 optionalDependencies: '@babel/runtime': 7.29.2 - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) transitivePeerDependencies: - '@babel/core' - supports-color @@ -9287,6 +9747,21 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 + body-parser@2.3.0: + dependencies: + bytes: 3.1.2 + content-type: 2.0.0 + debug: 4.4.3 + http-errors: 2.0.1 + iconv-lite: 0.7.2 + on-finished: 2.4.1 + qs: 6.15.2 + raw-body: 3.0.2 + type-is: 2.1.0 + transitivePeerDependencies: + - supports-color + optional: true + boxen@8.0.1: dependencies: ansi-align: 3.0.1 @@ -9459,6 +9934,13 @@ snapshots: client-only@0.0.1: {} + cliui@6.0.0: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + optional: true + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -9493,12 +9975,21 @@ snapshots: color-convert: 2.0.1 color-string: 1.9.1 + colorette@1.4.0: + optional: true + + command-exists@1.2.9: + optional: true + commander@12.1.0: {} commander@2.20.3: {} commander@7.2.0: {} + commander@9.5.0: + optional: true + commitlint@19.8.1(@types/node@25.5.1)(typescript@5.9.3): dependencies: '@commitlint/cli': 19.8.1(@types/node@25.5.1)(typescript@5.9.3) @@ -9558,6 +10049,9 @@ snapshots: transitivePeerDependencies: - supports-color + content-type@2.0.0: + optional: true + conventional-changelog-angular@7.0.0: dependencies: compare-func: 2.0.0 @@ -9739,6 +10233,9 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.2 + dayjs@1.11.21: + optional: true + debug@2.6.9: dependencies: ms: 2.0.0 @@ -9890,6 +10387,9 @@ snapshots: env-paths@2.2.1: {} + envinfo@7.21.0: + optional: true + error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 @@ -9898,6 +10398,12 @@ snapshots: dependencies: stackframe: 1.3.4 + errorhandler@1.5.2: + dependencies: + accepts: 1.3.8 + escape-html: 1.0.3 + optional: true + es-abstract@1.24.1: dependencies: array-buffer-byte-length: 1.0.2 @@ -10227,38 +10733,38 @@ snapshots: expo-application@6.1.5(expo@55.0.11): dependencies: - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) - expo-asset@55.0.12(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3): + expo-asset@55.0.12(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3): dependencies: '@expo/image-utils': 0.8.12 - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) - expo-constants: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo-constants: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3) react: 19.2.0 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) transitivePeerDependencies: - supports-color - typescript - expo-clipboard@7.1.5(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): + expo-clipboard@7.1.5(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) react: 19.2.0 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) - expo-constants@55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3): + expo-constants@55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3): dependencies: '@expo/config': 55.0.12(typescript@5.9.3) '@expo/env': 2.1.1 - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) transitivePeerDependencies: - supports-color - typescript expo-dev-client@55.0.22(expo@55.0.11)(typescript@5.9.3): dependencies: - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) expo-dev-launcher: 55.0.23(expo@55.0.11)(typescript@5.9.3) expo-dev-menu: 55.0.19(expo@55.0.11) expo-dev-menu-interface: 55.0.2(expo@55.0.11) @@ -10271,7 +10777,7 @@ snapshots: expo-dev-launcher@55.0.23(expo@55.0.11)(typescript@5.9.3): dependencies: '@expo/schema-utils': 55.0.2 - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) expo-dev-menu: 55.0.19(expo@55.0.11) expo-manifests: 55.0.13(expo@55.0.11)(typescript@5.9.3) transitivePeerDependencies: @@ -10280,41 +10786,41 @@ snapshots: expo-dev-menu-interface@55.0.2(expo@55.0.11): dependencies: - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) expo-dev-menu@55.0.19(expo@55.0.11): dependencies: - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) expo-dev-menu-interface: 55.0.2(expo@55.0.11) expo-device@55.0.12(expo@55.0.11): dependencies: - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) ua-parser-js: 0.7.41 - expo-file-system@55.0.14(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)): + expo-file-system@55.0.14(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0)): dependencies: - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) - expo-font@55.0.6(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): + expo-font@55.0.6(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) fontfaceobserver: 2.3.0 react: 19.2.0 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) - expo-glass-effect@55.0.10(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): + expo-glass-effect@55.0.10(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) react: 19.2.0 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) - expo-image@55.0.8(expo@55.0.11)(react-native-web@0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): + expo-image@55.0.8(expo@55.0.11)(react-native-web@0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) react: 19.2.0 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) sf-symbols-typescript: 2.2.0 optionalDependencies: react-native-web: 0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -10323,15 +10829,15 @@ snapshots: expo-keep-awake@55.0.6(expo@55.0.11)(react@19.2.0): dependencies: - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) react: 19.2.0 - expo-linking@55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3): + expo-linking@55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3): dependencies: - expo-constants: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3) + expo-constants: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3) invariant: 2.2.4 react: 19.2.0 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) transitivePeerDependencies: - expo - supports-color @@ -10339,14 +10845,14 @@ snapshots: expo-localization@16.1.6(expo@55.0.11)(react@19.2.0): dependencies: - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) react: 19.2.0 rtl-detect: 1.1.2 expo-manifests@55.0.13(expo@55.0.11)(typescript@5.9.3): dependencies: '@expo/config': 55.0.12(typescript@5.9.3) - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) expo-json-utils: 55.0.2 transitivePeerDependencies: - supports-color @@ -10362,42 +10868,42 @@ snapshots: - supports-color - typescript - expo-modules-core@55.0.20(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): + expo-modules-core@55.0.20(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: invariant: 2.2.4 react: 19.2.0 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) - expo-router@55.0.10(@expo/log-box@55.0.10)(@expo/metro-runtime@55.0.9)(@types/react@19.2.14)(expo-constants@55.0.11)(expo-font@55.0.6)(expo-linking@55.0.11)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native-gesture-handler@2.30.1(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-reanimated@4.3.0(react-native-worklets@0.7.2(@babel/core@7.29.0)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-screens@4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-web@0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): + expo-router@55.0.10(0062ffa63a59f02a3ced1192512e8bd7): dependencies: - '@expo/log-box': 55.0.10(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - '@expo/metro-runtime': 55.0.9(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + '@expo/log-box': 55.0.10(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + '@expo/metro-runtime': 55.0.9(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) '@expo/schema-utils': 55.0.2 '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.0) '@radix-ui/react-tabs': 1.1.13(@types/react@19.2.14)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@react-navigation/bottom-tabs': 7.15.9(@react-navigation/native@7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-screens@4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - '@react-navigation/native': 7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - '@react-navigation/native-stack': 7.14.10(@react-navigation/native@7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-screens@4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + '@react-navigation/bottom-tabs': 7.15.9(@react-navigation/native@7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-screens@4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + '@react-navigation/native': 7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + '@react-navigation/native-stack': 7.14.10(@react-navigation/native@7.2.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-screens@4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) client-only: 0.0.1 debug: 4.4.3 escape-string-regexp: 4.0.0 - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) - expo-constants: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3) - expo-glass-effect: 55.0.10(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - expo-image: 55.0.8(expo@55.0.11)(react-native-web@0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - expo-linking: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo-constants: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3) + expo-glass-effect: 55.0.10(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + expo-image: 55.0.8(expo@55.0.11)(react-native-web@0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + expo-linking: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) expo-server: 55.0.7 - expo-symbols: 55.0.7(expo-font@55.0.6)(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + expo-symbols: 55.0.7(expo-font@55.0.6)(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) fast-deep-equal: 3.1.3 invariant: 2.2.4 nanoid: 3.3.11 query-string: 7.1.3 react: 19.2.0 react-fast-compare: 3.2.2 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) - react-native-is-edge-to-edge: 1.3.1(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - react-native-safe-area-context: 5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - react-native-screens: 4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) + react-native-is-edge-to-edge: 1.3.1(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + react-native-safe-area-context: 5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + react-native-screens: 4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) semver: 7.6.3 server-only: 0.0.1 sf-symbols-typescript: 2.2.0 @@ -10406,8 +10912,8 @@ snapshots: vaul: 1.1.2(@types/react@19.2.14)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) optionalDependencies: react-dom: 19.2.0(react@19.2.0) - react-native-gesture-handler: 2.30.1(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - react-native-reanimated: 4.3.0(react-native-worklets@0.7.2(@babel/core@7.29.0)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + react-native-gesture-handler: 2.30.1(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + react-native-reanimated: 4.3.0(react-native-worklets@0.7.2(@babel/core@7.29.0)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) react-native-web: 0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) transitivePeerDependencies: - '@react-native-masked-view/masked-view' @@ -10421,26 +10927,26 @@ snapshots: expo-splash-screen@55.0.15(expo@55.0.11)(typescript@5.9.3): dependencies: '@expo/prebuild-config': 55.0.12(expo@55.0.11)(typescript@5.9.3) - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) transitivePeerDependencies: - supports-color - typescript - expo-symbols@55.0.7(expo-font@55.0.6)(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): + expo-symbols@55.0.7(expo-font@55.0.6)(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: '@expo-google-fonts/material-symbols': 0.4.28 - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) - expo-font: 55.0.6(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo-font: 55.0.6(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) react: 19.2.0 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) sf-symbols-typescript: 2.2.0 - expo-system-ui@55.0.13(expo@55.0.11)(react-native-web@0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)): + expo-system-ui@55.0.13(expo@55.0.11)(react-native-web@0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0)): dependencies: '@react-native/normalize-colors': 0.83.4 debug: 4.4.3 - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) optionalDependencies: react-native-web: 0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) transitivePeerDependencies: @@ -10448,38 +10954,38 @@ snapshots: expo-updates-interface@55.1.5(expo@55.0.11): dependencies: - expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) - expo@55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3): + expo@55.0.11(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-router@55.0.10)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3): dependencies: '@babel/runtime': 7.29.2 - '@expo/cli': 55.0.21(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-constants@55.0.11)(expo-font@55.0.6)(expo-router@55.0.10)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + '@expo/cli': 55.0.21(@expo/dom-webview@55.0.5)(@expo/metro-runtime@55.0.9)(expo-constants@55.0.11)(expo-font@55.0.6)(expo-router@55.0.10)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) '@expo/config': 55.0.12(typescript@5.9.3) '@expo/config-plugins': 55.0.7 - '@expo/devtools': 55.0.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + '@expo/devtools': 55.0.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) '@expo/fingerprint': 0.16.6 '@expo/local-build-cache-provider': 55.0.8(typescript@5.9.3) - '@expo/log-box': 55.0.10(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + '@expo/log-box': 55.0.10(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) '@expo/metro': 55.0.0 '@expo/metro-config': 55.0.13(expo@55.0.11)(typescript@5.9.3) - '@expo/vector-icons': 15.1.1(expo-font@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + '@expo/vector-icons': 15.1.1(expo-font@55.0.6)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) '@ungap/structured-clone': 1.3.0 babel-preset-expo: 55.0.15(@babel/core@7.29.0)(@babel/runtime@7.29.2)(expo@55.0.11)(react-refresh@0.14.2) - expo-asset: 55.0.12(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) - expo-constants: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3) - expo-file-system: 55.0.14(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)) - expo-font: 55.0.6(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + expo-asset: 55.0.12(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo-constants: 55.0.11(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3) + expo-file-system: 55.0.14(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0)) + expo-font: 55.0.6(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) expo-keep-awake: 55.0.6(expo@55.0.11)(react@19.2.0) expo-modules-autolinking: 55.0.14(typescript@5.9.3) - expo-modules-core: 55.0.20(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + expo-modules-core: 55.0.20(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) pretty-format: 29.7.0 react: 19.2.0 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) react-refresh: 0.14.2 whatwg-url-minimum: 0.1.1 optionalDependencies: - '@expo/dom-webview': 55.0.5(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - '@expo/metro-runtime': 55.0.9(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + '@expo/dom-webview': 55.0.5(expo@55.0.11)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + '@expo/metro-runtime': 55.0.9(@expo/dom-webview@55.0.5)(expo@55.0.11)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) transitivePeerDependencies: - '@babel/core' - bufferutil @@ -10517,6 +11023,22 @@ snapshots: fast-uri@3.1.0: {} + fast-xml-builder@1.2.0: + dependencies: + path-expression-matcher: 1.5.0 + xml-naming: 0.1.0 + optional: true + + fast-xml-parser@5.9.3: + dependencies: + '@nodable/entities': 2.2.0 + fast-xml-builder: 1.2.0 + is-unsafe: 1.0.1 + path-expression-matcher: 1.5.0 + strnum: 2.4.1 + xml-naming: 0.1.0 + optional: true + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -10606,6 +11128,13 @@ snapshots: jsonfile: 6.2.0 universalify: 2.0.1 + fs-extra@8.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + optional: true + fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -10896,6 +11425,11 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.7.2: + dependencies: + safer-buffer: 2.1.2 + optional: true + ieee754@1.2.1: {} ignore@5.3.2: {} @@ -11027,6 +11561,9 @@ snapshots: dependencies: call-bound: 1.0.4 + is-fullwidth-code-point@2.0.0: + optional: true + is-fullwidth-code-point@3.0.0: {} is-generator-fn@2.1.0: {} @@ -11149,6 +11686,9 @@ snapshots: is-unicode-supported@2.1.0: {} + is-unsafe@1.0.1: + optional: true + is-weakmap@2.0.2: {} is-weakref@1.1.1: @@ -11162,6 +11702,9 @@ snapshots: is-windows@1.0.2: {} + is-wsl@1.1.0: + optional: true + is-wsl@2.2.0: dependencies: is-docker: 2.2.1 @@ -11546,6 +12089,15 @@ snapshots: jiti@2.6.1: {} + joi@17.13.4: + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.5 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + optional: true + js-tokens@4.0.0: {} js-yaml@3.14.2: @@ -11575,6 +12127,11 @@ snapshots: json5@2.2.3: {} + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + optional: true + jsonfile@6.2.0: dependencies: universalify: 2.0.1 @@ -11608,6 +12165,12 @@ snapshots: dependencies: package-json: 10.0.1 + launch-editor@2.14.1: + dependencies: + picocolors: 1.1.1 + shell-quote: 1.8.4 + optional: true + leven@3.1.0: {} levn@0.4.1: @@ -11733,6 +12296,13 @@ snapshots: chalk: 5.6.2 is-unicode-supported: 1.3.0 + logkitty@0.7.1: + dependencies: + ansi-fragments: 0.2.1 + dayjs: 1.11.21 + yargs: 15.4.1 + optional: true + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -11769,6 +12339,9 @@ snapshots: math-intrinsics@1.1.0: {} + media-typer@1.1.0: + optional: true + memoize-one@5.2.1: {} memoize-one@6.0.0: {} @@ -11993,6 +12566,9 @@ snapshots: mime@1.6.0: {} + mime@2.6.0: + optional: true + mimic-fn@1.2.0: {} mimic-fn@2.1.0: {} @@ -12055,6 +12631,9 @@ snapshots: dependencies: type-fest: 2.19.0 + nocache@3.0.4: + optional: true + node-exports-info@1.6.0: dependencies: array.prototype.flatmap: 1.3.3 @@ -12072,6 +12651,9 @@ snapshots: node-releases@2.0.37: {} + node-stream-zip@1.15.0: + optional: true + normalize-package-data@3.0.3: dependencies: hosted-git-info: 4.1.0 @@ -12181,6 +12763,11 @@ snapshots: is-inside-container: 1.0.0 is-wsl: 3.1.1 + open@6.4.0: + dependencies: + is-wsl: 1.1.0 + optional: true + open@7.4.2: dependencies: is-docker: 2.2.1 @@ -12224,7 +12811,7 @@ snapshots: ora@8.1.1: dependencies: - chalk: 5.4.1 + chalk: 5.6.2 cli-cursor: 5.0.0 cli-spinners: 2.9.2 is-interactive: 2.0.0 @@ -12341,6 +12928,9 @@ snapshots: path-exists@5.0.0: {} + path-expression-matcher@1.5.0: + optional: true + path-is-absolute@1.0.1: {} path-key@3.1.1: {} @@ -12457,6 +13047,11 @@ snapshots: pure-rand@6.1.0: {} + qs@6.15.2: + dependencies: + side-channel: 1.1.0 + optional: true + query-string@7.1.3: dependencies: decode-uri-component: 0.2.2 @@ -12474,6 +13069,14 @@ snapshots: range-parser@1.2.1: {} + raw-body@3.0.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.1 + iconv-lite: 0.7.2 + unpipe: 1.0.0 + optional: true + rc@1.2.8: dependencies: deep-extend: 0.6.0 @@ -12533,47 +13136,47 @@ snapshots: transitivePeerDependencies: - supports-color - react-native-device-info@15.0.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)): + react-native-device-info@15.0.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0)): dependencies: - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) - react-native-gesture-handler@2.30.1(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): + react-native-gesture-handler@2.30.1(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: '@egjs/hammerjs': 2.0.17 hoist-non-react-statics: 3.3.2 invariant: 2.2.4 react: 19.2.0 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) - react-native-is-edge-to-edge@1.3.1(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): + react-native-is-edge-to-edge@1.3.1(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: react: 19.2.0 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) react-native-monorepo-config@0.1.10: dependencies: escape-string-regexp: 5.0.0 fast-glob: 3.3.3 - react-native-reanimated@4.3.0(react-native-worklets@0.7.2(@babel/core@7.29.0)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): + react-native-reanimated@4.3.0(react-native-worklets@0.7.2(@babel/core@7.29.0)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: react: 19.2.0 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) - react-native-is-edge-to-edge: 1.3.1(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - react-native-worklets: 0.7.2(@babel/core@7.29.0)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) + react-native-is-edge-to-edge: 1.3.1(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + react-native-worklets: 0.7.2(@babel/core@7.29.0)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) semver: 7.7.4 optional: true - react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): + react-native-safe-area-context@5.6.2(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: react: 19.2.0 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) - react-native-screens@4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): + react-native-screens@4.23.0(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: react: 19.2.0 react-freeze: 1.0.4(react@19.2.0) - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) warn-once: 0.1.1 react-native-web@0.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0): @@ -12591,7 +13194,7 @@ snapshots: transitivePeerDependencies: - encoding - react-native-worklets@0.7.2(@babel/core@7.29.0)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): + react-native-worklets@0.7.2(@babel/core@7.29.0)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0) @@ -12605,22 +13208,22 @@ snapshots: '@babel/preset-typescript': 7.27.1(@babel/core@7.29.0) convert-source-map: 2.0.0 react: 19.2.0 - react-native: 0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0) semver: 7.7.3 transitivePeerDependencies: - supports-color optional: true - react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0): + react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0): dependencies: '@jest/create-cache-key-function': 29.7.0 '@react-native/assets-registry': 0.83.4 '@react-native/codegen': 0.83.4(@babel/core@7.29.0) - '@react-native/community-cli-plugin': 0.83.4 + '@react-native/community-cli-plugin': 0.83.4(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0)) '@react-native/gradle-plugin': 0.83.4 '@react-native/js-polyfills': 0.83.4 '@react-native/normalize-colors': 0.83.4 - '@react-native/virtualized-lists': 0.83.4(@types/react@19.2.14)(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + '@react-native/virtualized-lists': 0.83.4(@types/react@19.2.14)(react-native@0.83.4(@babel/core@7.29.0)(@react-native-community/cli@20.1.3(typescript@5.9.3))(@react-native/metro-config@0.83.4(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 @@ -12817,6 +13420,9 @@ snapshots: require-from-string@2.0.2: {} + require-main-filename@2.0.0: + optional: true + resolve-cwd@3.0.0: dependencies: resolve-from: 5.0.0 @@ -12948,6 +13554,9 @@ snapshots: server-only@0.0.1: {} + set-blocking@2.0.0: + optional: true + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -12986,6 +13595,9 @@ snapshots: shell-quote@1.8.3: {} + shell-quote@1.8.4: + optional: true + shelljs@0.8.5: dependencies: glob: 7.2.3 @@ -13042,6 +13654,13 @@ snapshots: slash@5.1.0: {} + slice-ansi@2.1.0: + dependencies: + ansi-styles: 3.2.1 + astral-regex: 1.0.0 + is-fullwidth-code-point: 2.0.0 + optional: true + slugify@1.6.9: {} smart-buffer@4.2.0: {} @@ -13120,6 +13739,9 @@ snapshots: strict-uri-encode@2.0.0: {} + strict-url-sanitise@0.0.1: + optional: true + string-length@4.0.2: dependencies: char-regex: 1.0.2 @@ -13211,6 +13833,11 @@ snapshots: strip-json-comments@3.1.1: {} + strnum@2.4.1: + dependencies: + anynum: 1.0.1 + optional: true + structured-headers@0.4.1: {} stubborn-fs@2.0.0: @@ -13319,6 +13946,13 @@ snapshots: type-fest@4.41.0: {} + type-is@2.1.0: + dependencies: + content-type: 2.0.0 + media-typer: 1.1.0 + mime-types: 3.0.2 + optional: true + typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -13389,6 +14023,9 @@ snapshots: universal-user-agent@6.0.1: {} + universalify@0.1.2: + optional: true + universalify@2.0.1: {} unpipe@1.0.0: {} @@ -13402,7 +14039,7 @@ snapshots: update-notifier@7.3.1: dependencies: boxen: 8.0.1 - chalk: 5.4.1 + chalk: 5.6.2 configstore: 7.1.0 is-in-ci: 1.0.0 is-installed-globally: 1.0.0 @@ -13527,6 +14164,9 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.4 + which-module@2.0.1: + optional: true + which-typed-array@1.1.20: dependencies: available-typed-arrays: 1.0.7 @@ -13580,6 +14220,11 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 3.0.7 + ws@6.2.4: + dependencies: + async-limiter: 1.0.1 + optional: true + ws@7.5.10: {} ws@8.20.0: {} @@ -13591,6 +14236,9 @@ snapshots: xdg-basedir@5.1.0: {} + xml-naming@0.1.0: + optional: true + xml2js@0.6.0: dependencies: sax: 1.6.0 @@ -13600,6 +14248,9 @@ snapshots: xmlbuilder@15.1.1: {} + y18n@4.0.3: + optional: true + y18n@5.0.8: {} yallist@3.1.1: {} @@ -13608,10 +14259,31 @@ snapshots: yaml@2.8.3: {} + yargs-parser@18.1.3: + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + optional: true + yargs-parser@20.2.9: {} yargs-parser@21.1.1: {} + yargs@15.4.1: + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + optional: true + yargs@17.7.2: dependencies: cliui: 8.0.1