diff --git a/.github/workflows/build-submit-android.yml b/.github/workflows/build-submit-android.yml index 6910133b6f..4f0a8b6418 100644 --- a/.github/workflows/build-submit-android.yml +++ b/.github/workflows/build-submit-android.yml @@ -88,7 +88,7 @@ jobs: with: expo-token: ${{ secrets.EXPO_TOKEN }} - - uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0 + - uses: actions/setup-java@dd06d9cba3e5552c54d9f8ea23572deb30010f7c # v6.0.0 with: distribution: "temurin" java-version: "17" @@ -195,7 +195,7 @@ jobs: # bundletool needs a JRE. ubuntu-latest ships a default JDK, but pin it explicitly # like the build job so the toolchain is deterministic. - - uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0 + - uses: actions/setup-java@dd06d9cba3e5552c54d9f8ea23572deb30010f7c # v6.0.0 with: distribution: "temurin" java-version: "17" diff --git a/.github/workflows/claude-mention.yml b/.github/workflows/claude-mention.yml index 9c06aa5886..8ef4d8ab72 100644 --- a/.github/workflows/claude-mention.yml +++ b/.github/workflows/claude-mention.yml @@ -60,7 +60,7 @@ jobs: fetch-depth: 1 - name: 🤖 Claude - uses: anthropics/claude-code-action@459ad358ae43fea66bfefd0a1f8d840b4b9791fb # v1.0.194 + uses: anthropics/claude-code-action@e5ad3c7725bc2459721893f88879fef9dbcf97b0 # v1.0.202 env: ANTHROPIC_BASE_URL: https://agentgateway.k1.prod.bsky.dev with: diff --git a/.github/workflows/claude-review.yml b/.github/workflows/claude-review.yml index 309ae4807d..86ff9cf71c 100644 --- a/.github/workflows/claude-review.yml +++ b/.github/workflows/claude-review.yml @@ -45,7 +45,7 @@ jobs: fetch-depth: 1 - name: 🤖 Claude review - uses: anthropics/claude-code-action@459ad358ae43fea66bfefd0a1f8d840b4b9791fb # v1.0.194 + uses: anthropics/claude-code-action@e5ad3c7725bc2459721893f88879fef9dbcf97b0 # v1.0.202 env: ANTHROPIC_BASE_URL: https://agentgateway.k1.prod.bsky.dev with: diff --git a/.github/workflows/nightly-e2e.yml b/.github/workflows/nightly-e2e.yml index 33388edea4..ae9d1c30a9 100644 --- a/.github/workflows/nightly-e2e.yml +++ b/.github/workflows/nightly-e2e.yml @@ -51,7 +51,7 @@ jobs: expo-token: ${{ secrets.EXPO_TOKEN }} - name: ☕️ Set up Java 17 - uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0 + uses: actions/setup-java@dd06d9cba3e5552c54d9f8ea23572deb30010f7c # v6.0.0 with: distribution: temurin java-version: "17" @@ -176,7 +176,7 @@ jobs: expo-token: ${{ secrets.EXPO_TOKEN }} - name: ☕️ Set up Java 17 - uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0 + uses: actions/setup-java@dd06d9cba3e5552c54d9f8ea23572deb30010f7c # v6.0.0 with: distribution: temurin java-version: "17" diff --git a/.github/workflows/nightly-update-source-languages.yaml b/.github/workflows/nightly-update-source-languages.yaml index 2c8a68d35b..82fb3de3aa 100644 --- a/.github/workflows/nightly-update-source-languages.yaml +++ b/.github/workflows/nightly-update-source-languages.yaml @@ -35,7 +35,7 @@ jobs: commit_message: Nightly source-language update file_pattern: ./src/locale/locales/en/messages.po - name: 🚀 Push source lang to Crowdin - uses: crowdin/github-action@c7af9bc98b01694653031fef2a0dc6c7888ce9bc # v2.17.0 + uses: crowdin/github-action@8f01d54f70f1713ee3f09d82c2bbb2daeac28689 # v2.17.1 with: upload_sources: true upload_sources_args: "-b main" diff --git a/lexicons.json b/lexicons.json index ca0e64f570..b36ba16b61 100644 --- a/lexicons.json +++ b/lexicons.json @@ -426,7 +426,7 @@ }, "app.bsky.embed.video": { "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.embed.video", - "cid": "bafyreiaqos23yv3t4ptrxily6s6qea5fcxfjzjlm42zq46xweby2mkgr4m" + "cid": "bafyreihoxb7lvczityqcv2s5od3rllmkee7tn3m4qg6wn34kd6m45p6v24" }, "app.bsky.feed.defs": { "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.feed.defs", @@ -538,7 +538,7 @@ }, "app.bsky.graph.defs": { "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.graph.defs", - "cid": "bafyreifcipomli7yggtl46xufgxlnrw7se6xmsdxmzgfcz2tiu76ljatxm" + "cid": "bafyreief2f7zpllyicjugbn7faohmnzwujeiytfzj76uckxmrqmtdvechy" }, "app.bsky.graph.follow": { "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.graph.follow", diff --git a/lexicons/app/bsky/embed/video.json b/lexicons/app/bsky/embed/video.json index 5033261982..9a7df6c796 100644 --- a/lexicons/app/bsky/embed/video.json +++ b/lexicons/app/bsky/embed/video.json @@ -9,9 +9,7 @@ "properties": { "alt": { "type": "string", - "maxLength": 10000, - "description": "Alt text description of the video, for accessibility.", - "maxGraphemes": 1000 + "description": "Alt text description of the video, for accessibility." }, "video": { "type": "blob", @@ -51,9 +49,7 @@ ], "properties": { "alt": { - "type": "string", - "maxLength": 10000, - "maxGraphemes": 1000 + "type": "string" }, "cid": { "type": "string", diff --git a/lexicons/app/bsky/feed/defs.json b/lexicons/app/bsky/feed/defs.json index a59b32914d..97cb057f6f 100644 --- a/lexicons/app/bsky/feed/defs.json +++ b/lexicons/app/bsky/feed/defs.json @@ -169,6 +169,28 @@ } } }, + "knownLikers": { + "type": "object", + "required": [ + "count", + "actors" + ], + "properties": { + "count": { + "type": "integer" + }, + "actors": { + "type": "array", + "items": { + "ref": "app.bsky.actor.defs#profileViewBasic", + "type": "ref" + }, + "maxLength": 5, + "minLength": 0 + } + }, + "description": "The post's likers whom you also follow" + }, "requestLess": { "type": "token", "description": "Request that less content like the given feed item be shown in the feed" @@ -194,6 +216,11 @@ "bookmarked": { "type": "boolean" }, + "knownLikers": { + "ref": "#knownLikers", + "type": "ref", + "description": "This property is present only in selected cases, as an optimization." + }, "threadMuted": { "type": "boolean" }, @@ -202,37 +229,10 @@ }, "embeddingDisabled": { "type": "boolean" - }, - "knownLikers": { - "description": "This property is present only in selected cases, as an optimization.", - "type": "ref", - "ref": "#knownLikers" } }, "description": "Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests." }, - "knownLikers": { - "type": "object", - "description": "The post's likers whom you also follow", - "required": [ - "count", - "actors" - ], - "properties": { - "count": { - "type": "integer" - }, - "actors": { - "type": "array", - "minLength": 0, - "maxLength": 5, - "items": { - "type": "ref", - "ref": "app.bsky.actor.defs#profileViewBasic" - } - } - } - }, "feedViewPost": { "type": "object", "required": [ diff --git a/lexicons/app/bsky/graph/defs.json b/lexicons/app/bsky/graph/defs.json index eca42fc875..8d77562184 100644 --- a/lexicons/app/bsky/graph/defs.json +++ b/lexicons/app/bsky/graph/defs.json @@ -100,6 +100,11 @@ "subject": { "ref": "app.bsky.actor.defs#profileView", "type": "ref" + }, + "subjectOptedOut": { + "type": "boolean", + "const": true, + "description": "Set to true when the subject has opted out of appearing in the reference list. Only set when the viewer owns the list." } } }, @@ -228,6 +233,11 @@ "blocked": { "type": "string", "format": "at-uri" + }, + "referenceListOptOut": { + "type": "string", + "format": "at-uri", + "description": "The authenticated viewer's app.bsky.graph.referencelistoptout record URI for this reference list. Only set for reference lists. A client can delete this record to undo the opt-out." } } }, diff --git a/modules/bottom-sheet/README.md b/modules/bottom-sheet/README.md index 49007d97b5..c3653a0298 100644 --- a/modules/bottom-sheet/README.md +++ b/modules/bottom-sheet/README.md @@ -61,7 +61,8 @@ The component uses a class-based approach to expose imperative methods (`present - Preserves status/nav bar appearance from host activity - **DialogRootViewGroup.kt**: Custom ViewGroup acting as RootView for the dialog - Forwards touch events to React Native event system - - Updates shadow node size to match window dimensions + - Reports its measured width to `BottomSheetView` so the content canvas can follow it + - Also carries the legacy `UIManagerModule.updateNodeSize()` shadow node sizing, which only runs on the old architecture - Based on React Native's ReactModalHostView pattern - **SheetManager.kt**: Singleton for tracking sheets (same pattern as iOS) @@ -74,6 +75,24 @@ Both platforms detect content height changes natively without JS bridge round-tr This eliminates layout jank when content changes (e.g., keyboard appearance, dynamic content loading). +### Content Canvas Sizing + +The "canvas" is the size the sheet content is laid out on by Yoga. **On Android the native side owns it**; on iOS it is still sized from JS. + +- **Android**: JS renders unsized `flex: 1` content and `BottomSheetView` pushes the canvas size into the Fabric shadow tree through `ExpoView`'s `setViewSize` state channel (`shadowNodeProxy.setViewSize()`). Only native knows the real sheet frame - Material caps the frame at 640dp on tablets and centers it, and it changes on rotation. +- **iOS**: `BottomSheetNativeComponent` sets `height: screenHeight - insets.top` and `width: '100%'` on the native view. Moving iOS onto the same state channel is deferred: it needs on-device iteration on iOS 26 sheet geometry (large-detent and floating-card metrics, where the visible sheet is shorter than the window minus the top inset). + +How the Android path works: + +- The JS style on the native view **must not set `width` or `height`** on Android. `ExpoViewComponentDescriptor::adopt()` only applies the state size on an axis where the style leaves that dimension undefined, so a style dimension would silently win. +- The two axes come from different places, and the distinction is load-bearing: + - **Width** is authoritatively the dialog container's measured width, reported through `DialogRootViewGroup`'s size-change listener - that is the real sheet width, with the horizontal window insets and Material's 640dp cap already applied. It is seeded from `min(window width, material_bottom_sheet_max_width)` on the first `onLayout` so content has something to lay out in before the dialog exists. + - **Height** is always computed natively as `screenHeight - statusBarHeight` (matching the behavior's `expandedOffset`) - the whole expanded frame, **never** the dialog's measured height. The canvas has to be room for the content to grow *into*, because the content's height is what drives the snap points. Sizing it from the dialog's own height is circular: `BottomSheetBehavior` measures the container against the sheet, so the canvas collapses onto the content height and the content is then pinned - extra `ScrollView` padding (the Android keyboard path) or a longer list becomes scroll extent instead of a height change, `OnLayoutChangeListener` never fires, and the sheet stops responding to its content. +- Seeding runs once per open cycle - re-seeding would fight the width the dialog reported and the two would push each other back and forth. +- Because the content measures 0x0 until that first state commit lands, `present()` bails out early when the content height is still zero. The commit resizes the native view, which re-fires `onLayout`, which re-enters `present()` - so presentation self-retries rather than needing an explicit callback. Full-height sheets skip the check, since they don't need a content measurement. +- Rotation is handled by the container push: the RN activity handles configuration changes itself, so the view is never recreated. `screenHeight` is read per access so the computed height follows the rotation, and the container reports the new width (plus a deferred `updateLayout()` to reposition the sheet). +- On the **old architecture** there is no state channel (`stateWrapper` is null, so `setViewSize` no-ops) and Android falls back to `DialogRootViewGroup`'s legacy `UIManagerModule.updateNodeSize()` path. The `present()` gate is skipped there for the same reason - nothing would ever resize the view. + ## Props ```typescript @@ -213,6 +232,10 @@ BottomSheetNativeComponent.dismissAll() 4. **Layout Updates During Gestures**: Content height changes are deferred during drag gestures to prevent fighting the user's input. +5. **Tablet Width**: Material caps the sheet frame at 640dp (`material_bottom_sheet_max_width`, the `android:maxWidth` on `Widget.MaterialComponents.BottomSheet`) and centers it horizontally, so on tablets the sheet is narrower than the screen. `BottomSheetView` reads that cap from resources when seeding the canvas width, and the dialog container's measured width then corrects it - see [Content Canvas Sizing](#content-canvas-sizing). + +6. **Rotation**: The RN activity handles configuration changes itself, so a rotation resizes the display without recreating `BottomSheetView`. Screen height is therefore read per access rather than cached, and `maxHeight` is stored unclamped and clamped against the current screen at use time. + ### Platform Differences - **cornerRadius**: Applied to sheet on iOS, to content wrapper on Android (Android clips with `overflow: hidden`) diff --git a/modules/bottom-sheet/android/src/main/java/expo/modules/bottomsheet/BottomSheetView.kt b/modules/bottom-sheet/android/src/main/java/expo/modules/bottomsheet/BottomSheetView.kt index 1b9224c6e7..38a1437247 100644 --- a/modules/bottom-sheet/android/src/main/java/expo/modules/bottomsheet/BottomSheetView.kt +++ b/modules/bottom-sheet/android/src/main/java/expo/modules/bottomsheet/BottomSheetView.kt @@ -21,6 +21,12 @@ import expo.modules.kotlin.AppContext import expo.modules.kotlin.viewevent.EventDispatcher import expo.modules.kotlin.views.ExpoView +/** + * Fallback for Material's `material_bottom_sheet_max_width` dimen (in dp), used only + * if the resource lookup fails. 640dp is the value Material ships. + */ +private const val FALLBACK_MAX_SHEET_WIDTH_DP = 640f + class BottomSheetView( context: Context, appContext: AppContext, @@ -38,26 +44,30 @@ class BottomSheetView( private var lastObservedContentHeight: Float = 0f private var pendingLayoutUpdate: Boolean = false - private val screenHeight: Float = - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.VANILLA_ICE_CREAM) { - // API 35+: edge-to-edge is mandatory, heightPixels is the full display - context.resources.displayMetrics.heightPixels - .toFloat() - } else if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) { - // API 30-34: heightPixels may exclude nav bar, use currentWindowMetrics - val wm = context.getSystemService(Context.WINDOW_SERVICE) as android.view.WindowManager - wm.currentWindowMetrics.bounds - .height() - .toFloat() - } else { - // API < 30: currentWindowMetrics not available, use getRealSize - // which includes system bars (heightPixels may exclude them) - val wm = context.getSystemService(Context.WINDOW_SERVICE) as android.view.WindowManager - val size = android.graphics.Point() - @Suppress("DEPRECATION") - wm.defaultDisplay.getRealSize(size) - size.y.toFloat() - } + // Computed per read rather than cached at construction: the RN activity handles + // configuration changes itself, so a rotation resizes the display without + // recreating this view and a cached value would stay stale for the sheet's life. + private val screenHeight: Float + get() = + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.VANILLA_ICE_CREAM) { + // API 35+: edge-to-edge is mandatory, heightPixels is the full display + context.resources.displayMetrics.heightPixels + .toFloat() + } else if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) { + // API 30-34: heightPixels may exclude nav bar, use currentWindowMetrics + val wm = context.getSystemService(Context.WINDOW_SERVICE) as android.view.WindowManager + wm.currentWindowMetrics.bounds + .height() + .toFloat() + } else { + // API < 30: currentWindowMetrics not available, use getRealSize + // which includes system bars (heightPixels may exclude them) + val wm = context.getSystemService(Context.WINDOW_SERVICE) as android.view.WindowManager + val size = android.graphics.Point() + @Suppress("DEPRECATION") + wm.defaultDisplay.getRealSize(size) + size.y.toFloat() + } private fun getNavigationBarHeight(): Int { val resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android") @@ -73,6 +83,11 @@ class BottomSheetView( private val onSnapPointChange by EventDispatcher() private val onStateChange by EventDispatcher() + // Last canvas size (in dp) pushed into the shadow tree, so repeated layout + // passes don't spam state updates + private var lastPushedCanvasWidth: Float = -1f + private var lastPushedCanvasHeight: Float = -1f + var disableDrag = false set(value) { field = value @@ -99,10 +114,11 @@ class BottomSheetView( field = if (value < 0) 0f else dpToPx(value) } - var maxHeight = this.screenHeight + // Stored unclamped (in px) because screenHeight can change under us on rotation. + // The clamp against the screen happens at use time, in getTargetHeight(). + var maxHeight = Float.MAX_VALUE set(value) { - val px = dpToPx(value) - field = if (px > this.screenHeight) this.screenHeight else px + field = dpToPx(value) } private var isOpen: Boolean = false @@ -140,6 +156,38 @@ class BottomSheetView( this.eventDispatcher = UIManagerHelper.getEventDispatcherForReactTag(it, this.id) this.dialogRootViewGroup = DialogRootViewGroup(context) this.dialogRootViewGroup.eventDispatcher = this.eventDispatcher + + // The dialog container's measured WIDTH is the authoritative canvas width: it + // already accounts for the window's horizontal insets, Material's max-width cap on + // tablets and the current rotation. DialogRootViewGroup's own updateNodeSize() path + // is a no-op on the new architecture (getNativeModule(UIManagerModule) returns null + // under Fabric), so this state channel is what actually gets the width across there. + // + // Its measured HEIGHT is deliberately ignored - see canvasHeight. + this.dialogRootViewGroup.setOnSizeChangeListener( + object : DialogRootViewGroup.OnSizeChangeListener { + override fun onSizeChange( + width: Int, + height: Int, + ) { + val density = context.resources.displayMetrics.density + pushCanvasSize(width / density, canvasHeight / density) + + // onSizeChanged fires from inside a layout pass, so defer the reposition: + // updateLayout() reads child heights that aren't final yet. This is what + // makes the sheet settle back into place after a rotation. It no-ops for + // fullHeight sheets, which is correct - those are pinned to the expanded + // offset either way. + if ((isOpen || isOpening) && !isClosing) { + post { + if ((isOpen || isOpening) && !isClosing) { + updateLayout() + } + } + } + } + }, + ) } SheetManager.add(this) } @@ -151,9 +199,84 @@ class BottomSheetView( r: Int, b: Int, ) { + this.seedCanvasSize() this.present() } + /** + * The height, in px, of the canvas the sheet content is laid out on. This is the whole + * expanded frame (the behavior's expandedOffset is the status bar height), NOT the + * sheet's current height. + * + * That distinction is the whole ballgame. The content's height is what drives the snap + * points, so the canvas has to be room to grow *into*. Sizing the canvas from the + * dialog's own measured height is circular - BottomSheetBehavior measures the dialog + * container against the sheet, so the canvas collapses onto the content height, and from + * then on the content is pinned: extra ScrollView padding (the Android keyboard path) or + * a longer list just becomes scroll extent instead of a height change, the + * OnLayoutChangeListener never fires, and the sheet stops responding to its content. + */ + private val canvasHeight: Float + get() = screenHeight - getStatusBarHeight() + + /** + * JS renders the sheet content unsized, so before the first state commit it measures + * 0x0 and present() has no content height to derive snap points from. Seed the canvas + * here to kick that off - the dialog container reports the authoritative width later, + * via its OnSizeChangeListener. + * + * Runs at most once per open cycle. It has to: each state commit re-fires onLayout, so + * re-seeding would fight the width the dialog reported and the two would push each other + * back and forth forever. + * + * stateWrapper is assigned while Fabric mounts the view, before the first layout pass, + * so setViewSize() should already reach the shadow tree from here. On the old + * architecture it is null and this no-ops, which is fine: DialogRootViewGroup's legacy + * updateNodeSize() path still sizes the content there. + */ + private fun seedCanvasSize() { + if (lastPushedCanvasWidth > 0f) return + val density = context.resources.displayMetrics.density + val widthPx = + minOf( + context.resources.displayMetrics.widthPixels + .toFloat(), + getMaxSheetWidth(), + ) + this.pushCanvasSize(widthPx / density, canvasHeight / density) + } + + /** + * Sets the size of this view's shadow node, which is the canvas the sheet content is + * laid out on. Deduped because both onLayout and the dialog container's size changes + * can re-report an unchanged size. + */ + private fun pushCanvasSize( + widthDp: Float, + heightDp: Float, + ) { + if (widthDp <= 0f || heightDp <= 0f) return + if (widthDp == lastPushedCanvasWidth && heightDp == lastPushedCanvasHeight) return + lastPushedCanvasWidth = widthDp + lastPushedCanvasHeight = heightDp + this.shadowNodeProxy.setViewSize(widthDp.toDouble(), heightDp.toDouble()) + } + + /** + * Material caps the sheet frame at `material_bottom_sheet_max_width` (the + * `android:maxWidth` on `Widget.MaterialComponents.BottomSheet`, which our dialog theme + * inherits from) and centers it horizontally, so on tablets the sheet is narrower than + * the display. Returns the cap in px. + */ + private fun getMaxSheetWidth(): Float = + try { + resources + .getDimensionPixelSize(com.google.android.material.R.dimen.material_bottom_sheet_max_width) + .toFloat() + } catch (e: android.content.res.Resources.NotFoundException) { + FALLBACK_MAX_SHEET_WIDTH_DP * context.resources.displayMetrics.density + } + private fun destroy() { this.stopObservingContentHeight() this.isClosing = false @@ -178,6 +301,15 @@ class BottomSheetView( val contentHeight = this.getContentHeight() + // The content is unsized until the canvas size we pushed lands in the shadow tree, + // so bail and let this retry itself: the state commit resizes this view, that + // re-fires onLayout, and onLayout re-enters present(). Full-height sheets don't + // need a content measurement, so they can go ahead immediately. + // + // Only gate when there is a state channel to wait on. Without one (old architecture) + // nothing would ever resize this view, and the sheet would never present. + if (stateWrapper != null && !fullHeight && contentHeight <= 0f) return + var activityWindow: Window? = null var currentContext = context while (currentContext != null) { @@ -425,8 +557,10 @@ class BottomSheetView( private fun getTargetHeight(): Float { val contentHeight = this.getContentHeight() + // maxHeight is stored unclamped, so clamp it against the current screen here + val effectiveMaxHeight = minOf(this.maxHeight, this.screenHeight) return when { - contentHeight > maxHeight -> maxHeight + contentHeight > effectiveMaxHeight -> effectiveMaxHeight contentHeight < minHeight -> minHeight else -> contentHeight } diff --git a/modules/bottom-sheet/src/BottomSheetNativeComponent.tsx b/modules/bottom-sheet/src/BottomSheetNativeComponent.tsx index f2955395e6..f030633667 100644 --- a/modules/bottom-sheet/src/BottomSheetNativeComponent.tsx +++ b/modules/bottom-sheet/src/BottomSheetNativeComponent.tsx @@ -34,10 +34,6 @@ const IS_IOS15 = Platform.OS === 'ios' && // semvar - can be 3 segments, so can't use Number(Platform.Version) Number(Platform.Version.split('.').at(0)) < 16 -// older android versions (15 and below) aren't naturally edge-to-edge -// and behave a little differently -const IS_NON_E2E_ANDROID = - Platform.OS === 'android' && Number(Platform.Version) < 35 export class BottomSheetNativeComponent extends Component< BottomSheetViewProps, @@ -148,24 +144,35 @@ function BottomSheetNativeComponentInner({ const {height: screenHeight} = useWindowDimensions() const isHeightConstrained = maxHeight != null || rest.fullHeight === true - // sigh... on older Android versions, screenHeight does not include safe area insets - // on newer Androids + iOS, it does. we need to find the inner bit + the bottom inset - // for the sheet content - const sheetHeight = IS_NON_E2E_ANDROID - ? screenHeight + insets.bottom - : screenHeight - insets.top - return ( RCTScrollViewCls(void) -diff --git a/React/Views/RefreshControl/RCTRefreshControl.h b/React/Views/RefreshControl/RCTRefreshControl.h -index ed306d7cadbf36a2fed79be8bd9d68b5dca135bd..d447dad534fefa9fcbdbbde6dcbbdcddadd5a824 100644 ---- a/React/Views/RefreshControl/RCTRefreshControl.h -+++ b/React/Views/RefreshControl/RCTRefreshControl.h -@@ -18,6 +18,7 @@ __attribute__((deprecated("This API will be removed along with the legacy archit - @property (nonatomic, copy) NSString *title; - @property (nonatomic, copy) RCTDirectEventBlock onRefresh; - @property (nonatomic, weak) UIScrollView *scrollView; -+@property (nonatomic, copy) UIColor *customTintColor; - - @end - -diff --git a/React/Views/RefreshControl/RCTRefreshControl.m b/React/Views/RefreshControl/RCTRefreshControl.m -index 2dc86e464264c9450eef18d7b153d35bf6a5cc55..6661dc69a04766afa0284d6e83839b219e98cf57 100644 ---- a/React/Views/RefreshControl/RCTRefreshControl.m -+++ b/React/Views/RefreshControl/RCTRefreshControl.m -@@ -25,6 +25,7 @@ @implementation RCTRefreshControl { - UIColor *_titleColor; - CGFloat _progressViewOffset; - BOOL _hasMovedToWindow; -+ UIColor *_customTintColor; - } - - - (instancetype)init -@@ -60,6 +61,12 @@ - (void)layoutSubviews - _isInitialRender = false; - } - -+- (void)didMoveToSuperview -+{ -+ [super didMoveToSuperview]; -+ [self setTintColor:_customTintColor]; -+} -+ - - (void)didMoveToWindow - { - [super didMoveToWindow]; -@@ -225,6 +232,18 @@ - (void)refreshControlValueChanged - } - } - -+// Fix for https://github.com/facebook/react-native/issues/43388 -+// A bug in iOS 17.4 causes the haptic to not play when refreshing if the tintColor -+// is set before the refresh control gets added to the scrollview. We'll call this -+// function whenever the superview changes. We'll also call it if the value of customTintColor -+// changes. -+- (void)setTintColor:(UIColor *)tintColor -+{ -+ if ([self.superview isKindOfClass:[UIScrollView class]] && self.tintColor != tintColor) { -+ [super setTintColor:tintColor]; -+ } -+} -+ - @end - - #endif // RCT_REMOVE_LEGACY_ARCH -diff --git a/React/Views/RefreshControl/RCTRefreshControlManager.m b/React/Views/RefreshControl/RCTRefreshControlManager.m -index 1e9ff527f4e6691d716da624031113a397876981..44329c5422c6f24d8a437fa35c6f2bad6bf8622b 100644 ---- a/React/Views/RefreshControl/RCTRefreshControlManager.m -+++ b/React/Views/RefreshControl/RCTRefreshControlManager.m -@@ -24,11 +24,12 @@ - (UIView *)view - - RCT_EXPORT_VIEW_PROPERTY(onRefresh, RCTDirectEventBlock) - RCT_EXPORT_VIEW_PROPERTY(refreshing, BOOL) --RCT_EXPORT_VIEW_PROPERTY(tintColor, UIColor) - RCT_EXPORT_VIEW_PROPERTY(title, NSString) - RCT_EXPORT_VIEW_PROPERTY(titleColor, UIColor) - RCT_EXPORT_VIEW_PROPERTY(progressViewOffset, CGFloat) - -+RCT_REMAP_VIEW_PROPERTY(tintColor, customTintColor, UIColor) -+ - RCT_EXPORT_METHOD(setNativeRefreshing : (nonnull NSNumber *)viewTag toRefreshing : (BOOL)refreshing) - { - [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary *viewRegistry) { -diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt b/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt -index 59775241c80bec99ad3ec080f2425aacc8900c24..426de3aa77cda2032d7b0991e2ca3f8482a438d3 100644 ---- a/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt -+++ b/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt -@@ -459,6 +459,13 @@ public open class ReactViewGroup public constructor(context: Context?) : - inSubviewClippingLoop = true - var clippedSoFar = 0 - for (i in 0.. RCTScrollViewCls(void) +diff --git a/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm b/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +index b033b7c71914d287470b7b86bd6bf39d311294ba..7e10dc929147fa4474ca9f955f5cd85d27aea935 100644 +--- a/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm ++++ b/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +@@ -827,9 +827,17 @@ static void RCTAddContourEffectToLayer( + } else { + CGSize imageSize = image.size; + UIEdgeInsets imageCapInsets = image.capInsets; ++ // The stretchable middle is whatever lies between the cap insets. The image ++ // may be larger than capInsets + 1 (its size is ceil'd to whole points), so ++ // deriving the middle from the caps rather than assuming a 1pt band keeps ++ // the bottom/right caps at their true size. A phantom cap here makes the ++ // caps overflow sub-pixel-sized layers (e.g. hairline borders), and the ++ // squeezed mesh + nearest-neighbor filtering drops the stroke entirely. + CGRect contentsCenter = CGRect{ + CGPoint{imageCapInsets.left / imageSize.width, imageCapInsets.top / imageSize.height}, +- CGSize{(CGFloat)1.0 / imageSize.width, (CGFloat)1.0 / imageSize.height}}; ++ CGSize{ ++ (imageSize.width - imageCapInsets.left - imageCapInsets.right) / imageSize.width, ++ (imageSize.height - imageCapInsets.top - imageCapInsets.bottom) / imageSize.height}}; + layer.contents = (id)image.CGImage; + layer.contentsScale = image.scale; + +diff --git a/React/Views/RefreshControl/RCTRefreshControl.h b/React/Views/RefreshControl/RCTRefreshControl.h +index ed306d7cadbf36a2fed79be8bd9d68b5dca135bd..d447dad534fefa9fcbdbbde6dcbbdcddadd5a824 100644 +--- a/React/Views/RefreshControl/RCTRefreshControl.h ++++ b/React/Views/RefreshControl/RCTRefreshControl.h +@@ -18,6 +18,7 @@ __attribute__((deprecated("This API will be removed along with the legacy archit + @property (nonatomic, copy) NSString *title; + @property (nonatomic, copy) RCTDirectEventBlock onRefresh; + @property (nonatomic, weak) UIScrollView *scrollView; ++@property (nonatomic, copy) UIColor *customTintColor; + + @end + +diff --git a/React/Views/RefreshControl/RCTRefreshControl.m b/React/Views/RefreshControl/RCTRefreshControl.m +index 2dc86e464264c9450eef18d7b153d35bf6a5cc55..6661dc69a04766afa0284d6e83839b219e98cf57 100644 +--- a/React/Views/RefreshControl/RCTRefreshControl.m ++++ b/React/Views/RefreshControl/RCTRefreshControl.m +@@ -25,6 +25,7 @@ @implementation RCTRefreshControl { + UIColor *_titleColor; + CGFloat _progressViewOffset; + BOOL _hasMovedToWindow; ++ UIColor *_customTintColor; + } + + - (instancetype)init +@@ -60,6 +61,12 @@ - (void)layoutSubviews + _isInitialRender = false; + } + ++- (void)didMoveToSuperview ++{ ++ [super didMoveToSuperview]; ++ [self setTintColor:_customTintColor]; ++} ++ + - (void)didMoveToWindow + { + [super didMoveToWindow]; +@@ -225,6 +232,18 @@ - (void)refreshControlValueChanged + } + } + ++// Fix for https://github.com/facebook/react-native/issues/43388 ++// A bug in iOS 17.4 causes the haptic to not play when refreshing if the tintColor ++// is set before the refresh control gets added to the scrollview. We'll call this ++// function whenever the superview changes. We'll also call it if the value of customTintColor ++// changes. ++- (void)setTintColor:(UIColor *)tintColor ++{ ++ if ([self.superview isKindOfClass:[UIScrollView class]] && self.tintColor != tintColor) { ++ [super setTintColor:tintColor]; ++ } ++} ++ + @end + + #endif // RCT_REMOVE_LEGACY_ARCH +diff --git a/React/Views/RefreshControl/RCTRefreshControlManager.m b/React/Views/RefreshControl/RCTRefreshControlManager.m +index 1e9ff527f4e6691d716da624031113a397876981..44329c5422c6f24d8a437fa35c6f2bad6bf8622b 100644 +--- a/React/Views/RefreshControl/RCTRefreshControlManager.m ++++ b/React/Views/RefreshControl/RCTRefreshControlManager.m +@@ -24,11 +24,12 @@ - (UIView *)view + + RCT_EXPORT_VIEW_PROPERTY(onRefresh, RCTDirectEventBlock) + RCT_EXPORT_VIEW_PROPERTY(refreshing, BOOL) +-RCT_EXPORT_VIEW_PROPERTY(tintColor, UIColor) + RCT_EXPORT_VIEW_PROPERTY(title, NSString) + RCT_EXPORT_VIEW_PROPERTY(titleColor, UIColor) + RCT_EXPORT_VIEW_PROPERTY(progressViewOffset, CGFloat) + ++RCT_REMAP_VIEW_PROPERTY(tintColor, customTintColor, UIColor) ++ + RCT_EXPORT_METHOD(setNativeRefreshing : (nonnull NSNumber *)viewTag toRefreshing : (BOOL)refreshing) + { + [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary *viewRegistry) { +diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt b/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt +index 59775241c80bec99ad3ec080f2425aacc8900c24..426de3aa77cda2032d7b0991e2ca3f8482a438d3 100644 +--- a/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt ++++ b/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt +@@ -459,6 +459,13 @@ public open class ReactViewGroup public constructor(context: Context?) : + inSubviewClippingLoop = true + var clippedSoFar = 0 + for (i in 0.. UIManager::findShadowNodeByTag_DEPRECATED( +@@ -530,30 +530,8 @@ std::shared_ptr UIManager::findShadowNodeByTag_DEPRECATED( + auto shadowNode = std::shared_ptr{}; + shadowTreeRegistry_.enumerate([&](const ShadowTree& shadowTree, bool& stop) { - // Obtain a pointer to the root node. The flag-gated path uses - // getCurrentRevision() which keeps the root alive via shared_ptr for @@ -403,25 +443,6 @@ index 3e48dabc6fffc246fd0517ef5f3f2b7721115511..ea4ba5fdf359c513a5ca4f0e94492fac - } + auto rootShadowNodeHolder = shadowTree.getCurrentRevision().rootShadowNode; + const auto* rootShadowNode = rootShadowNodeHolder.get(); -diff --git a/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm b/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm ---- a/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm -+++ b/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm -@@ -827,9 +827,17 @@ - } else { - CGSize imageSize = image.size; - UIEdgeInsets imageCapInsets = image.capInsets; -+ // The stretchable middle is whatever lies between the cap insets. The image -+ // may be larger than capInsets + 1 (its size is ceil'd to whole points), so -+ // deriving the middle from the caps rather than assuming a 1pt band keeps -+ // the bottom/right caps at their true size. A phantom cap here makes the -+ // caps overflow sub-pixel-sized layers (e.g. hairline borders), and the -+ // squeezed mesh + nearest-neighbor filtering drops the stroke entirely. - CGRect contentsCenter = CGRect{ - CGPoint{imageCapInsets.left / imageSize.width, imageCapInsets.top / imageSize.height}, -- CGSize{(CGFloat)1.0 / imageSize.width, (CGFloat)1.0 / imageSize.height}}; -+ CGSize{ -+ (imageSize.width - imageCapInsets.left - imageCapInsets.right) / imageSize.width, -+ (imageSize.height - imageCapInsets.top - imageCapInsets.bottom) / imageSize.height}}; - layer.contents = (id)image.CGImage; - layer.contentsScale = image.scale; + if (rootShadowNode != nullptr) { + const auto& children = rootShadowNode->getChildren(); diff --git a/patches/react-native@0.86.0.patch.md b/patches/react-native@0.86.0.patch.md index 67ad22bf1b..ec9833faaa 100644 --- a/patches/react-native@0.86.0.patch.md +++ b/patches/react-native@0.86.0.patch.md @@ -1,5 +1,21 @@ # ***This second part of this patch is load bearing, do not remove.*** +## Scheduler delegate invalidation - iOS use-after-free + +Fixes Sentry issue APP-T28X: an `EXC_BAD_ACCESS` in +`Scheduler::uiManagerDidFinishTransaction` or +`Scheduler::uiManagerDidDispatchCommand` after a queued rendering update +outlives its captured raw `SchedulerDelegate` pointer. + +React Native 0.86 contains the invalidation-token guard from +facebook/react-native#56680, but `enableSchedulerDelegateInvalidation` is false +for the stable release level used by Expo. Override only this flag in +`ReactNativeFeatureFlagsOverridesOSSStable` instead of opting the app into all +experimental React Native flags. + +**TODO: Remove after upgrading to a React Native release that closes the +queued Scheduler delegate lifetime race by default.** + ## UIManager.cpp Patch - Fabric focus navigation use-after-free Fixes Sentry issue APP-T4H9: a SIGSEGV in diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8693a9ebe9..b41f0dbafc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -233,7 +233,7 @@ patchedDependencies: react-native-pager-view@6.8.0: c8316acd33c9aef6531e8c272c2bfab7bd02af1255969eeaab2bad5ab48531cc react-native-screens@4.26.2: ba3295d44434a729f143a6b2c24e4a9b2f911ab200b2bc47e46cdfeaa1536f7c react-native-svg@15.15.4: ae309e9542214f5ae54935e253dedd236765feedac7be343f81d532d7fe09310 - react-native@0.86.0: aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201 + react-native@0.86.0: 239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06 importers: @@ -253,46 +253,46 @@ importers: version: 0.7.5 '@bitdrift/react-native': specifier: ^0.6.8 - version: 0.6.14(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1) + version: 0.6.14(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1) '@braintree/sanitize-url': specifier: ^6.0.2 version: 6.0.4 '@bsky.app/alf': specifier: ^0.1.15 - version: 0.1.15(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 0.1.15(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) '@bsky.app/expo-dynamic-app-icon': specifier: ^1.8.5 - version: 1.8.5(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 1.8.5(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) '@bsky.app/expo-guess-language': specifier: ^0.2.8 - version: 0.2.8(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 0.2.8(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) '@bsky.app/expo-image-crop-tool': specifier: ^0.5.1 - version: 0.5.1(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 0.5.1(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) '@bsky.app/expo-scroll-edge-effect': specifier: ^0.1.9 - version: 0.1.9(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 0.1.9(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) '@bsky.app/expo-translate-text': specifier: ^0.2.9 - version: 0.2.9(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 0.2.9(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) '@bsky.app/peek-menu': specifier: ^0.3.2 - version: 0.3.2(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 0.3.2(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) '@bsky.app/react-native-uitextview': - specifier: ^2.7.0 - version: 2.7.0(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + specifier: ^2.7.1 + version: 2.7.1(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) '@bsky.app/sift': specifier: ^0.3.9 - version: 0.3.9(expo@57.0.8)(react-native-safe-area-context@5.7.0(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3))(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 0.3.9(expo@57.0.8)(react-native-safe-area-context@5.7.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3))(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) '@bsky.app/tapper': specifier: ^0.6.1 - version: 0.6.1(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(tlds@1.261.0) + version: 0.6.1(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(tlds@1.261.0) '@bsky.app/video': specifier: 0.3.6 - version: 0.3.6(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 0.3.6(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) '@bsky.app/video-compressor': specifier: 0.2.0 - version: 0.2.0(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 0.2.0(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) '@bsky/sdk': specifier: 1.1.0 version: 1.1.0(@atproto/lex@0.3.8) @@ -343,19 +343,19 @@ importers: version: 5.9.5(@lingui/babel-plugin-lingui-macro@5.9.5(@typescript/typescript6@6.0.2)(supports-color@8.1.1))(react@19.2.3) '@react-native-async-storage/async-storage': specifier: 2.2.0 - version: 2.2.0(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) + version: 2.2.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) '@react-navigation/bottom-tabs': specifier: ^7.15.5 - version: 7.16.0(819d3464d522661f85d0bb6106751de9) + version: 7.16.0(e010b3b7e876375fdd4841f6f289d0a2) '@react-navigation/native': specifier: ^7.1.33 - version: 7.2.4(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 7.2.4(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) '@react-navigation/native-stack': specifier: ^7.14.4 - version: 7.15.0(819d3464d522661f85d0bb6106751de9) + version: 7.15.0(e010b3b7e876375fdd4841f6f289d0a2) '@sentry/react-native': specifier: ~8.18.0 - version: 8.18.0(@expo/env@2.4.2(supports-color@8.1.1))(dotenv@16.6.1)(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 8.18.0(@expo/env@2.4.2(supports-color@8.1.1))(dotenv@16.6.1)(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) '@tanstack/query-async-storage-persister': specifier: ^5.96.2 version: 5.100.10 @@ -419,6 +419,9 @@ importers: bcp-47-match: specifier: ^2.0.3 version: 2.0.3 + bidi-js: + specifier: ^1.0.3 + version: 1.0.3 date-fns: specifier: ^4.4.0 version: 4.4.0 @@ -436,52 +439,52 @@ importers: version: 5.0.4 expo: specifier: 57.0.8 - version: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + version: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) expo-age-range: specifier: 57.0.2 - version: 57.0.2(patch_hash=c325225749993424461eeece1d97a99b19c00da2ebc958a73c12e4eca0c39306)(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) + version: 57.0.2(patch_hash=c325225749993424461eeece1d97a99b19c00da2ebc958a73c12e4eca0c39306)(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) expo-application: specifier: ~57.0.2 version: 57.0.2(expo@57.0.8) expo-asset: specifier: ~57.0.7 - version: 57.0.12(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1) + version: 57.0.12(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1) expo-blur: specifier: ~57.0.2 - version: 57.0.2(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 57.0.2(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) expo-build-properties: specifier: ~57.0.7 version: 57.0.12(expo@57.0.8) expo-camera: specifier: ~57.0.3 - version: 57.0.3(@types/emscripten@1.41.5)(expo@57.0.8)(react-native-web@0.21.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 57.0.3(@types/emscripten@1.41.5)(expo@57.0.8)(react-native-web@0.21.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) expo-clipboard: specifier: ~57.0.1 - version: 57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) expo-contacts: specifier: ^57.0.2 - version: 57.0.4(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 57.0.4(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) expo-dev-client: specifier: ~57.0.9 - version: 57.0.13(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) + version: 57.0.13(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) expo-device: specifier: ~57.0.1 version: 57.0.1(expo@57.0.8) expo-file-system: specifier: ~57.0.1 - version: 57.0.4(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) + version: 57.0.4(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) expo-font: specifier: ~57.0.1 - version: 57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) expo-glass-effect: specifier: 57.0.1 - version: 57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) expo-haptics: specifier: ~57.0.1 version: 57.0.1(patch_hash=b33910ba2753c4eccdc885b449e6e33aa90b9cefa75ca8639762a26013141410)(expo@57.0.8) expo-image: specifier: 57.0.1 - version: 57.0.1(expo@57.0.8)(react-native-web@0.21.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 57.0.1(expo@57.0.8)(react-native-web@0.21.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) expo-image-manipulator: specifier: ~57.0.6 version: 57.0.10(expo@57.0.8) @@ -496,10 +499,10 @@ importers: version: 57.0.1(expo@57.0.8)(react@19.2.3) expo-linear-gradient: specifier: ~57.0.1 - version: 57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) expo-linking: specifier: ~57.0.4 - version: 57.0.6(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1) + version: 57.0.6(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1) expo-localization: specifier: ~57.0.1 version: 57.0.1(expo@57.0.8)(react@19.2.3) @@ -508,25 +511,25 @@ importers: version: 57.0.11(expo@57.0.8) expo-media-library: specifier: 57.0.3 - version: 57.0.3(patch_hash=2b84c17999bb0c977eaef7fa8ac297f7074d91c94fb63726b42d2a277b26b39a)(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) + version: 57.0.3(patch_hash=2b84c17999bb0c977eaef7fa8ac297f7074d91c94fb63726b42d2a277b26b39a)(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) expo-modules-core: specifier: 57.0.8 - version: 57.0.8(patch_hash=7c2fd5f0b146ee5208ea607ccdd3127af95bf7202e733cd92c9ca5d2350b4832)(3dcf27a740c49e619c0e997c7b3d7a93) + version: 57.0.8(patch_hash=7c2fd5f0b146ee5208ea607ccdd3127af95bf7202e733cd92c9ca5d2350b4832)(92d1a74bc123f334ae9968fa1c80814f) expo-notifications: specifier: 57.0.7 - version: 57.0.7(patch_hash=542d7d2024b364ba601b7f2af041353dccde555db0e6ecf0b5948c90e6b33a75)(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1) + version: 57.0.7(patch_hash=542d7d2024b364ba601b7f2af041353dccde555db0e6ecf0b5948c90e6b33a75)(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1) expo-paste-input: specifier: ^0.2.1 - version: 0.2.1(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 0.2.1(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) expo-privacy-sensitive: specifier: ^0.2.0 - version: 0.2.0(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 0.2.0(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) expo-screen-orientation: specifier: ~57.0.1 - version: 57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) + version: 57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) expo-sharing: specifier: ~57.0.7 - version: 57.0.13(@typescript/typescript6@6.0.2)(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1) + version: 57.0.13(@typescript/typescript6@6.0.2)(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1) expo-sms: specifier: ^57.0.1 version: 57.0.1(expo@57.0.8) @@ -535,19 +538,19 @@ importers: version: 57.0.7(@typescript/typescript6@6.0.2)(expo@57.0.8)(supports-color@8.1.1) expo-system-ui: specifier: ~57.0.1 - version: 57.0.2(expo@57.0.8)(react-native-web@0.21.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(supports-color@8.1.1) + version: 57.0.2(expo@57.0.8)(react-native-web@0.21.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(supports-color@8.1.1) expo-updates: specifier: 57.0.10 - version: 57.0.10(patch_hash=04f28cb005b770e9ae8f0065eab96e43cbb1e58107f5f6ad1bdd18f6deb66487)(expo-dev-client@57.0.13(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)))(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1) + version: 57.0.10(patch_hash=04f28cb005b770e9ae8f0065eab96e43cbb1e58107f5f6ad1bdd18f6deb66487)(expo-dev-client@57.0.13(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)))(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1) expo-video: specifier: ~57.0.2 - version: 57.0.2(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 57.0.2(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) expo-video-thumbnails: specifier: ^57.0.1 version: 57.0.1(expo@57.0.8) expo-web-browser: specifier: ~57.0.2 - version: 57.0.2(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) + version: 57.0.2(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) fast-deep-equal: specifier: ^3.1.3 version: 3.1.3 @@ -628,58 +631,58 @@ importers: version: 5.1.2(react-is@19.2.6)(react@19.2.3) react-native: specifier: 0.86.0 - version: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + version: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) react-native-date-picker: specifier: ^5.0.13 - version: 5.0.13(patch_hash=92943fb79d17d7342a29bbb12b0d8ee3cf6f7bca12ed322dc8d124a3e9fb75bd)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 5.0.13(patch_hash=92943fb79d17d7342a29bbb12b0d8ee3cf6f7bca12ed322dc8d124a3e9fb75bd)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) react-native-device-attest: specifier: ^0.1.6 - version: 0.1.6(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 0.1.6(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) react-native-drawer-layout: specifier: ^4.2.3 - version: 4.2.3(patch_hash=74f2c043cc22ab87054f219e7c7373a509b779b18bfa79d27e7d051d73355130)(react-native-gesture-handler@2.32.0(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3))(react-native-reanimated@4.6.0(3dcf27a740c49e619c0e997c7b3d7a93))(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 4.2.3(patch_hash=74f2c043cc22ab87054f219e7c7373a509b779b18bfa79d27e7d051d73355130)(react-native-gesture-handler@2.32.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3))(react-native-reanimated@4.6.0(92d1a74bc123f334ae9968fa1c80814f))(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) react-native-edge-to-edge: specifier: ^1.8.1 - version: 1.8.1(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 1.8.1(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) react-native-gesture-handler: specifier: ~2.32.0 - version: 2.32.0(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 2.32.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) react-native-keyboard-controller: specifier: 1.21.9 - version: 1.21.9(patch_hash=ac52bf7502ff3ad34a8594b5e1a916b96bf87a2523b6abc87c31f03607d52271)(react-native-reanimated@4.6.0(3dcf27a740c49e619c0e997c7b3d7a93))(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 1.21.9(patch_hash=ac52bf7502ff3ad34a8594b5e1a916b96bf87a2523b6abc87c31f03607d52271)(react-native-reanimated@4.6.0(92d1a74bc123f334ae9968fa1c80814f))(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) react-native-mmkv: specifier: ^3.3.3 - version: 3.3.3(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 3.3.3(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) react-native-pager-view: specifier: 6.8.0 - version: 6.8.0(patch_hash=c8316acd33c9aef6531e8c272c2bfab7bd02af1255969eeaab2bad5ab48531cc)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 6.8.0(patch_hash=c8316acd33c9aef6531e8c272c2bfab7bd02af1255969eeaab2bad5ab48531cc)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) react-native-progress: specifier: ^5.0.1 - version: 5.0.1(react-native-svg@15.15.4(patch_hash=ae309e9542214f5ae54935e253dedd236765feedac7be343f81d532d7fe09310)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)) + version: 5.0.1(react-native-svg@15.15.4(patch_hash=ae309e9542214f5ae54935e253dedd236765feedac7be343f81d532d7fe09310)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)) react-native-qrcode-styled: specifier: ^0.3.3 - version: 0.3.3(react-native-svg@15.15.4(patch_hash=ae309e9542214f5ae54935e253dedd236765feedac7be343f81d532d7fe09310)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3))(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 0.3.3(react-native-svg@15.15.4(patch_hash=ae309e9542214f5ae54935e253dedd236765feedac7be343f81d532d7fe09310)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3))(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) react-native-reanimated: specifier: 4.6.0 - version: 4.6.0(3dcf27a740c49e619c0e997c7b3d7a93) + version: 4.6.0(92d1a74bc123f334ae9968fa1c80814f) react-native-safe-area-context: specifier: ~5.7.0 - version: 5.7.0(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 5.7.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) react-native-screens: specifier: 4.26.2 - version: 4.26.2(patch_hash=ba3295d44434a729f143a6b2c24e4a9b2f911ab200b2bc47e46cdfeaa1536f7c)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 4.26.2(patch_hash=ba3295d44434a729f143a6b2c24e4a9b2f911ab200b2bc47e46cdfeaa1536f7c)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) react-native-scroll-forwarder: specifier: link:./modules/react-native-scroll-forwarder version: link:modules/react-native-scroll-forwarder react-native-svg: specifier: 15.15.4 - version: 15.15.4(patch_hash=ae309e9542214f5ae54935e253dedd236765feedac7be343f81d532d7fe09310)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 15.15.4(patch_hash=ae309e9542214f5ae54935e253dedd236765feedac7be343f81d532d7fe09310)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) react-native-uuid: specifier: ^2.0.3 version: 2.0.4 react-native-view-shot: specifier: ^5.1.0 - version: 5.1.1(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 5.1.1(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) react-native-web: specifier: ^0.21.0 version: 0.21.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -688,10 +691,10 @@ importers: version: 1.0.2(file-loader@6.2.0(webpack@5.106.2(clean-css@5.3.3)(cssnano@5.1.15(postcss@8.5.14))(csso@5.0.5)(esbuild@0.25.12)(html-minifier-terser@6.1.0)(lightningcss@1.32.0)(postcss@8.5.14)))(react-native-web@0.21.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) react-native-webview: specifier: ^13.16.1 - version: 13.17.0(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + version: 13.17.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) react-native-worklets: specifier: 0.12.1 - version: 0.12.1(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1) + version: 0.12.1(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1) react-remove-scroll-bar: specifier: ^2.3.8 version: 2.3.8(@types/react@19.2.18)(react@19.2.3) @@ -712,7 +715,7 @@ importers: version: 2.0.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3) sonner-native: specifier: 0.26.4 - version: 0.26.4(1ea5da2cbb6dc673f6fceeaefbc614e3) + version: 0.26.4(a1115538eb9b7f01f00730be61406201) tippy.js: specifier: ^6.3.7 version: 6.3.7 @@ -764,7 +767,7 @@ importers: version: 3.6.1(supports-color@8.1.1)(webpack@5.106.2(clean-css@5.3.3)(cssnano@5.1.15(postcss@8.5.14))(csso@5.0.5)(esbuild@0.25.12)(html-minifier-terser@6.1.0)(lightningcss@1.32.0)(postcss@8.5.14)) '@testing-library/react-native': specifier: ^13.2.0 - version: 13.3.3(jest@29.7.0(@types/node@24.12.4)(supports-color@8.1.1))(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react-test-renderer@19.2.3(react@19.2.3))(react@19.2.3) + version: 13.3.3(jest@29.7.0(@types/node@24.12.4)(supports-color@8.1.1))(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react-test-renderer@19.2.3(react@19.2.3))(react@19.2.3) '@types/jest': specifier: 29.5.14 version: 29.5.14 @@ -827,7 +830,7 @@ importers: version: 29.7.0(@types/node@24.12.4)(supports-color@8.1.1) jest-expo: specifier: ~57.0.2 - version: 57.0.4(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(expo@57.0.8)(jest@29.7.0(@types/node@24.12.4)(supports-color@8.1.1))(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1) + version: 57.0.4(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(expo@57.0.8)(jest@29.7.0(@types/node@24.12.4)(supports-color@8.1.1))(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1) jest-junit: specifier: ^16.0.0 version: 16.0.0 @@ -1708,8 +1711,8 @@ packages: react: '*' react-native: '*' - '@bsky.app/react-native-uitextview@2.7.0': - resolution: {integrity: sha512-Z++CL+y01bHUTH0L7YfSB1QYr0Qjk7/2XUTp8NAfxnw3QnlWkClZNV7n1YOJ51tOAAhtFaVlvFDlLILDYqo2GQ==} + '@bsky.app/react-native-uitextview@2.7.1': + resolution: {integrity: sha512-hy1UCDFwBJc+GAzezaLx5Xl++lqRoN4/Y38VbUQ27htYfGXSSUl9UAc1hmaiFxKwRD4KZjclo6JQuB5cRWbVPg==} peerDependencies: react: '*' react-native: '>=0.81.5' @@ -4521,6 +4524,9 @@ packages: bcp-47@2.1.0: resolution: {integrity: sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w==} + bidi-js@1.0.3: + resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} + big-integer@1.6.52: resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} engines: {node: '>=0.6'} @@ -10668,94 +10674,94 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@bitdrift/react-native@0.6.14(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1)': + '@bitdrift/react-native@0.6.14(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1)': dependencies: '@expo/config-plugins': 9.1.7(supports-color@8.1.1) fast-json-stringify: 6.4.0 react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) transitivePeerDependencies: - supports-color '@braintree/sanitize-url@6.0.4': {} - '@bsky.app/alf@0.1.15(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': + '@bsky.app/alf@0.1.15(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': dependencies: react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) react-responsive: 10.0.1(react@19.2.3) - '@bsky.app/expo-dynamic-app-icon@1.8.5(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': + '@bsky.app/expo-dynamic-app-icon@1.8.5(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': dependencies: '@expo/image-utils': 0.8.12 - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) xcode: 3.0.1 - '@bsky.app/expo-guess-language@0.2.8(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': + '@bsky.app/expo-guess-language@0.2.8(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) lande: 1.0.10 react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - '@bsky.app/expo-image-crop-tool@0.5.1(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': + '@bsky.app/expo-image-crop-tool@0.5.1(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - '@bsky.app/expo-scroll-edge-effect@0.1.9(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': + '@bsky.app/expo-scroll-edge-effect@0.1.9(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': dependencies: '@types/jest': 30.0.0 - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - '@bsky.app/expo-translate-text@0.2.9(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': + '@bsky.app/expo-translate-text@0.2.9(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - '@bsky.app/peek-menu@0.3.2(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': + '@bsky.app/peek-menu@0.3.2(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - '@bsky.app/react-native-uitextview@2.7.0(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': + '@bsky.app/react-native-uitextview@2.7.1(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': dependencies: react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - '@bsky.app/sift@0.3.9(expo@57.0.8)(react-native-safe-area-context@5.7.0(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3))(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': + '@bsky.app/sift@0.3.9(expo@57.0.8)(react-native-safe-area-context@5.7.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3))(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - react-native-safe-area-context: 5.7.0(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native-safe-area-context: 5.7.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) - '@bsky.app/tapper@0.6.1(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(tlds@1.261.0)': + '@bsky.app/tapper@0.6.1(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(tlds@1.261.0)': dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) tlds: 1.261.0 - '@bsky.app/video-compressor@0.2.0(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': + '@bsky.app/video-compressor@0.2.0(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) mediabunny: 1.49.0 react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - '@bsky.app/video@0.3.6(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': + '@bsky.app/video@0.3.6(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) '@bsky/sdk@1.1.0(@atproto/lex@0.3.8)': dependencies: @@ -10892,7 +10898,7 @@ snapshots: '@eslint/js@8.57.1': optional: true - '@expo/cli@57.0.16(2f7b6519a55973905127c80d6703ea33)': + '@expo/cli@57.0.16(6d22268ca81ff460e3b175e3d8d42676)': dependencies: '@expo/code-signing-certificates': 0.0.6 '@expo/config': 57.0.8(@typescript/typescript6@6.0.2)(supports-color@8.1.1) @@ -10902,7 +10908,7 @@ snapshots: '@expo/image-utils': 0.8.12 '@expo/inline-modules': 0.1.6(@typescript/typescript6@6.0.2)(supports-color@8.1.1) '@expo/json-file': 11.0.1 - '@expo/log-box': 57.0.3(@expo/dom-webview@57.0.1)(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + '@expo/log-box': 57.0.3(@expo/dom-webview@57.0.1)(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) '@expo/metro': 56.0.0(supports-color@8.1.1) '@expo/metro-config': 57.0.8(@typescript/typescript6@6.0.2)(expo@57.0.8)(supports-color@8.1.1) '@expo/metro-file-map': 57.0.1(supports-color@8.1.1) @@ -10911,7 +10917,7 @@ snapshots: '@expo/plist': 0.8.1 '@expo/prebuild-config': 57.0.12(@typescript/typescript6@6.0.2)(supports-color@8.1.1) '@expo/require-utils': 57.0.4(@typescript/typescript6@6.0.2)(supports-color@8.1.1) - '@expo/router-server': 57.0.6(d491c1bb4d92a6a50fc8ffcdb73c77e4) + '@expo/router-server': 57.0.6(a2144abeab7261018ab62471bcf210e4) '@expo/schema-utils': 57.0.2 '@expo/spawn-async': 1.8.0 '@expo/ws-tunnel': 2.0.0(ws@8.20.1) @@ -10928,7 +10934,7 @@ snapshots: connect: 3.7.0(supports-color@8.1.1) debug: 4.4.3(supports-color@8.1.1) dnssd-advertise: 1.1.6 - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) expo-server: 57.0.3 fetch-nodeshim: 0.4.10 getenv: 2.0.0 @@ -10955,7 +10961,7 @@ snapshots: ws: 8.20.1 zod: 3.25.76 optionalDependencies: - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) transitivePeerDependencies: - '@expo/dom-webview' - '@expo/metro-runtime' @@ -11038,18 +11044,18 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/devtools@57.0.1(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': + '@expo/devtools@57.0.1(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': dependencies: chalk: 4.1.2 optionalDependencies: react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - '@expo/dom-webview@57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': + '@expo/dom-webview@57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) '@expo/env@2.4.2(supports-color@8.1.1)': dependencies: @@ -11114,13 +11120,13 @@ snapshots: - supports-color - typescript - '@expo/log-box@57.0.3(@expo/dom-webview@57.0.1)(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': + '@expo/log-box@57.0.3(@expo/dom-webview@57.0.1)(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': dependencies: - '@expo/dom-webview': 57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + '@expo/dom-webview': 57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) anser: 1.4.10 - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) stacktrace-parser: 0.1.11 '@expo/metro-config@57.0.8(@typescript/typescript6@6.0.2)(expo@57.0.8)(supports-color@8.1.1)': @@ -11149,7 +11155,7 @@ snapshots: postcss: 8.5.14 resolve-from: 5.0.0 optionalDependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) transitivePeerDependencies: - bufferutil - supports-color @@ -11239,12 +11245,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/router-server@57.0.6(d491c1bb4d92a6a50fc8ffcdb73c77e4)': + '@expo/router-server@57.0.6(a2144abeab7261018ab62471bcf210e4)': dependencies: debug: 4.4.3(supports-color@8.1.1) - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) - expo-constants: 57.0.12(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(supports-color@8.1.1) - expo-font: 57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) + expo-constants: 57.0.12(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(supports-color@8.1.1) + expo-font: 57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) expo-server: 57.0.3 react: 19.2.3 optionalDependencies: @@ -11275,7 +11281,7 @@ snapshots: copy-webpack-plugin: 10.2.4(webpack@5.106.2(clean-css@5.3.3)(cssnano@5.1.15(postcss@8.5.14))(csso@5.0.5)(esbuild@0.25.12)(html-minifier-terser@6.1.0)(lightningcss@1.32.0)(postcss@8.5.14)) css-loader: 6.11.0(webpack@5.106.2(clean-css@5.3.3)(cssnano@5.1.15(postcss@8.5.14))(csso@5.0.5)(esbuild@0.25.12)(html-minifier-terser@6.1.0)(lightningcss@1.32.0)(postcss@8.5.14)) css-minimizer-webpack-plugin: 3.4.1(clean-css@5.3.3)(csso@5.0.5)(esbuild@0.25.12)(webpack@5.106.2(clean-css@5.3.3)(cssnano@5.1.15(postcss@8.5.14))(csso@5.0.5)(esbuild@0.25.12)(html-minifier-terser@6.1.0)(lightningcss@1.32.0)(postcss@8.5.14)) - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) expo-pwa: 0.0.127(expo@57.0.8) find-up: 5.0.0 find-yarn-workspace-root: 2.0.0 @@ -12607,10 +12613,10 @@ snapshots: '@radix-ui/rect@1.1.1': {} - '@react-native-async-storage/async-storage@2.2.0(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))': + '@react-native-async-storage/async-storage@2.2.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))': dependencies: merge-options: 3.0.4 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) '@react-native/assets-registry@0.86.0': {} @@ -12803,24 +12809,24 @@ snapshots: '@react-native/typescript-config@0.81.6': {} - '@react-native/virtualized-lists@0.86.0(@types/react@19.2.18)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': + '@react-native/virtualized-lists@0.86.0(@types/react@19.2.18)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) optionalDependencies: '@types/react': 19.2.18 - '@react-navigation/bottom-tabs@7.16.0(819d3464d522661f85d0bb6106751de9)': + '@react-navigation/bottom-tabs@7.16.0(e010b3b7e876375fdd4841f6f289d0a2)': dependencies: - '@react-navigation/elements': 2.9.17(68cdc73867a78d6e975ec22ce95759b7) - '@react-navigation/native': 7.2.4(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + '@react-navigation/elements': 2.9.17(6eb0e0bcf95273feb037f25c3e10784e) + '@react-navigation/native': 7.2.4(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) color: 4.2.3 react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - react-native-safe-area-context: 5.7.0(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) - react-native-screens: 4.26.2(patch_hash=ba3295d44434a729f143a6b2c24e4a9b2f911ab200b2bc47e46cdfeaa1536f7c)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native-safe-area-context: 5.7.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + react-native-screens: 4.26.2(patch_hash=ba3295d44434a729f143a6b2c24e4a9b2f911ab200b2bc47e46cdfeaa1536f7c)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) sf-symbols-typescript: 2.2.0 transitivePeerDependencies: - '@react-native-masked-view/masked-view' @@ -12837,38 +12843,38 @@ snapshots: use-latest-callback: 0.2.6(react@19.2.3) use-sync-external-store: 1.6.0(react@19.2.3) - '@react-navigation/elements@2.9.17(68cdc73867a78d6e975ec22ce95759b7)': + '@react-navigation/elements@2.9.17(6eb0e0bcf95273feb037f25c3e10784e)': dependencies: - '@react-navigation/native': 7.2.4(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + '@react-navigation/native': 7.2.4(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) color: 4.2.3 react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - react-native-safe-area-context: 5.7.0(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native-safe-area-context: 5.7.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) use-latest-callback: 0.2.6(react@19.2.3) use-sync-external-store: 1.6.0(react@19.2.3) - '@react-navigation/native-stack@7.15.0(819d3464d522661f85d0bb6106751de9)': + '@react-navigation/native-stack@7.15.0(e010b3b7e876375fdd4841f6f289d0a2)': dependencies: - '@react-navigation/elements': 2.9.17(68cdc73867a78d6e975ec22ce95759b7) - '@react-navigation/native': 7.2.4(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + '@react-navigation/elements': 2.9.17(6eb0e0bcf95273feb037f25c3e10784e) + '@react-navigation/native': 7.2.4(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) color: 4.2.3 react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - react-native-safe-area-context: 5.7.0(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) - react-native-screens: 4.26.2(patch_hash=ba3295d44434a729f143a6b2c24e4a9b2f911ab200b2bc47e46cdfeaa1536f7c)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native-safe-area-context: 5.7.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + react-native-screens: 4.26.2(patch_hash=ba3295d44434a729f143a6b2c24e4a9b2f911ab200b2bc47e46cdfeaa1536f7c)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) sf-symbols-typescript: 2.2.0 warn-once: 0.1.1 transitivePeerDependencies: - '@react-native-masked-view/masked-view' - '@react-navigation/native@7.2.4(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': + '@react-navigation/native@7.2.4(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': dependencies: '@react-navigation/core': 7.17.4(react@19.2.3) escape-string-regexp: 4.0.0 fast-deep-equal: 3.1.3 nanoid: 3.3.12 react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) use-latest-callback: 0.2.6(react@19.2.3) '@react-navigation/routers@7.5.5': @@ -13008,7 +13014,7 @@ snapshots: dependencies: '@sentry/core': 10.64.0 - '@sentry/react-native@8.18.0(@expo/env@2.4.2(supports-color@8.1.1))(dotenv@16.6.1)(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': + '@sentry/react-native@8.18.0(@expo/env@2.4.2(supports-color@8.1.1))(dotenv@16.6.1)(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)': dependencies: '@sentry/babel-plugin-component-annotate': 5.3.0 '@sentry/browser': 10.64.0 @@ -13017,9 +13023,9 @@ snapshots: '@sentry/expo-upload-sourcemaps': 8.18.0(patch_hash=2368e1e1986165e7ead3c60017b78b2f9ade1b6a6b2f5ad27cd428608c6f12ae)(@expo/env@2.4.2(supports-color@8.1.1))(dotenv@16.6.1) '@sentry/react': 10.64.0(react@19.2.3) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) optionalDependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) transitivePeerDependencies: - '@expo/env' - dotenv @@ -13086,13 +13092,13 @@ snapshots: '@tanstack/query-core': 5.100.10 react: 19.2.3 - '@testing-library/react-native@13.3.3(jest@29.7.0(@types/node@24.12.4)(supports-color@8.1.1))(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react-test-renderer@19.2.3(react@19.2.3))(react@19.2.3)': + '@testing-library/react-native@13.3.3(jest@29.7.0(@types/node@24.12.4)(supports-color@8.1.1))(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react-test-renderer@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: jest-matcher-utils: 30.4.1 picocolors: 1.1.1 pretty-format: 30.4.1 react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) react-test-renderer: 19.2.3(react@19.2.3) redent: 3.0.0 optionalDependencies: @@ -13969,7 +13975,7 @@ snapshots: react-refresh: 0.14.2 optionalDependencies: '@babel/runtime': 7.29.2 - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) transitivePeerDependencies: - '@babel/core' - supports-color @@ -14008,6 +14014,10 @@ snapshots: is-alphanumerical: 2.0.1 is-decimal: 2.0.1 + bidi-js@1.0.3: + dependencies: + require-from-string: 2.0.2 + big-integer@1.6.52: {} big.js@5.2.2: {} @@ -15062,197 +15072,197 @@ snapshots: jest-mock: 30.4.1 jest-util: 30.4.1 - expo-age-range@57.0.2(patch_hash=c325225749993424461eeece1d97a99b19c00da2ebc958a73c12e4eca0c39306)(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)): + expo-age-range@57.0.2(patch_hash=c325225749993424461eeece1d97a99b19c00da2ebc958a73c12e4eca0c39306)(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) expo-application@57.0.2(expo@57.0.8): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) - expo-asset@57.0.12(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1): + expo-asset@57.0.12(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1): dependencies: '@expo/image-utils': 0.8.12 - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) - expo-constants: 57.0.12(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(supports-color@8.1.1) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) + expo-constants: 57.0.12(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(supports-color@8.1.1) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) transitivePeerDependencies: - supports-color - expo-blur@57.0.2(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + expo-blur@57.0.2(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) expo-build-properties@57.0.12(expo@57.0.8): dependencies: '@expo/schema-utils': 57.0.2 - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) resolve-from: 5.0.0 semver: 7.8.0 - expo-camera@57.0.3(@types/emscripten@1.41.5)(expo@57.0.8)(react-native-web@0.21.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + expo-camera@57.0.3(@types/emscripten@1.41.5)(expo@57.0.8)(react-native-web@0.21.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: barcode-detector: 3.2.2(@types/emscripten@1.41.5) - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) optionalDependencies: react-native-web: 0.21.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) transitivePeerDependencies: - '@types/emscripten' - expo-clipboard@57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + expo-clipboard@57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - expo-constants@57.0.12(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(supports-color@8.1.1): + expo-constants@57.0.12(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(supports-color@8.1.1): dependencies: '@expo/env': 2.4.2(supports-color@8.1.1) - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) transitivePeerDependencies: - supports-color - expo-contacts@57.0.4(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + expo-contacts@57.0.4(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - expo-dev-client@57.0.13(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)): + expo-dev-client@57.0.13(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) - expo-dev-launcher: 57.0.13(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) - expo-dev-menu: 57.0.13(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) + expo-dev-launcher: 57.0.13(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) + expo-dev-menu: 57.0.13(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) expo-dev-menu-interface: 57.0.0(expo@57.0.8) expo-manifests: 57.0.1(expo@57.0.8) expo-updates-interface: 57.0.1(expo@57.0.8) transitivePeerDependencies: - react-native - expo-dev-launcher@57.0.13(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)): + expo-dev-launcher@57.0.13(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)): dependencies: '@expo/schema-utils': 57.0.2 - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) - expo-dev-menu: 57.0.13(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) + expo-dev-menu: 57.0.13(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) expo-manifests: 57.0.1(expo@57.0.8) - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) expo-dev-menu-interface@57.0.0(expo@57.0.8): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) - expo-dev-menu@57.0.13(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)): + expo-dev-menu@57.0.13(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) expo-dev-menu-interface: 57.0.0(expo@57.0.8) - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) expo-device@57.0.1(expo@57.0.8): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) ua-parser-js: 0.7.41 expo-eas-client@57.0.1: {} - expo-file-system@57.0.4(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)): + expo-file-system@57.0.4(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - expo-font@57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + expo-font@57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) fontfaceobserver: 2.3.0 react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - expo-glass-effect@57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + expo-glass-effect@57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) expo-haptics@57.0.1(patch_hash=b33910ba2753c4eccdc885b449e6e33aa90b9cefa75ca8639762a26013141410)(expo@57.0.8): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) expo-image-loader@57.0.1(expo@57.0.8): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) expo-image-manipulator@57.0.10(expo@57.0.8): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) expo-image-loader: 57.0.1(expo@57.0.8) expo-image-picker@57.0.11(expo@57.0.8): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) expo-image-loader: 57.0.1(expo@57.0.8) - expo-image@57.0.1(expo@57.0.8)(react-native-web@0.21.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + expo-image@57.0.1(expo@57.0.8)(react-native-web@0.21.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) sf-symbols-typescript: 2.2.0 optionalDependencies: react-native-web: 0.21.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) expo-intent-launcher@57.0.1(expo@57.0.8): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) expo-json-utils@57.0.1: {} expo-keep-awake@57.0.1(expo@57.0.8)(react@19.2.3): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) react: 19.2.3 - expo-linear-gradient@57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + expo-linear-gradient@57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - expo-linking@57.0.6(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1): + expo-linking@57.0.6(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1): dependencies: - expo-constants: 57.0.12(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(supports-color@8.1.1) + expo-constants: 57.0.12(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(supports-color@8.1.1) invariant: 2.2.4 react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) transitivePeerDependencies: - expo - supports-color expo-localization@57.0.1(expo@57.0.8)(react@19.2.3): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) react: 19.2.3 rtl-detect: 1.1.2 expo-location@57.0.11(expo@57.0.8): dependencies: '@expo/image-utils': 0.8.12 - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) expo-manifests@57.0.1(expo@57.0.8): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) expo-json-utils: 57.0.1 - expo-media-library@57.0.3(patch_hash=2b84c17999bb0c977eaef7fa8ac297f7074d91c94fb63726b42d2a277b26b39a)(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)): + expo-media-library@57.0.3(patch_hash=2b84c17999bb0c977eaef7fa8ac297f7074d91c94fb63726b42d2a277b26b39a)(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) expo-modules-autolinking@57.0.10(@typescript/typescript6@6.0.2)(supports-color@8.1.1): dependencies: @@ -15264,81 +15274,81 @@ snapshots: - supports-color - typescript - expo-modules-core@57.0.8(patch_hash=7c2fd5f0b146ee5208ea607ccdd3127af95bf7202e733cd92c9ca5d2350b4832)(3dcf27a740c49e619c0e997c7b3d7a93): + expo-modules-core@57.0.8(patch_hash=7c2fd5f0b146ee5208ea607ccdd3127af95bf7202e733cd92c9ca5d2350b4832)(92d1a74bc123f334ae9968fa1c80814f): dependencies: '@expo/expo-modules-macros-plugin': 0.6.1 - expo-modules-jsi: 57.0.4(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) + expo-modules-jsi: 57.0.4(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) invariant: 2.2.4 react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) optionalDependencies: - react-native-worklets: 0.12.1(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1) + react-native-worklets: 0.12.1(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1) - expo-modules-jsi@57.0.4(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)): + expo-modules-jsi@57.0.4(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)): dependencies: - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - expo-notifications@57.0.7(patch_hash=542d7d2024b364ba601b7f2af041353dccde555db0e6ecf0b5948c90e6b33a75)(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1): + expo-notifications@57.0.7(patch_hash=542d7d2024b364ba601b7f2af041353dccde555db0e6ecf0b5948c90e6b33a75)(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1): dependencies: '@expo/image-utils': 0.8.12 abort-controller: 3.0.0 badgin: 1.2.3 - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) expo-application: 57.0.2(expo@57.0.8) - expo-constants: 57.0.12(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(supports-color@8.1.1) + expo-constants: 57.0.12(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(supports-color@8.1.1) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) transitivePeerDependencies: - supports-color - expo-paste-input@0.2.1(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + expo-paste-input@0.2.1(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - expo-privacy-sensitive@0.2.0(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + expo-privacy-sensitive@0.2.0(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) expo-pwa@0.0.127(expo@57.0.8): dependencies: '@expo/image-utils': 0.8.12 chalk: 4.1.2 commander: 2.20.0 - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) update-check: 1.5.3 - expo-screen-orientation@57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)): + expo-screen-orientation@57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) expo-server@57.0.3: {} - expo-sharing@57.0.13(@typescript/typescript6@6.0.2)(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1): + expo-sharing@57.0.13(@typescript/typescript6@6.0.2)(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1): dependencies: '@expo/config-plugins': 57.0.8(@typescript/typescript6@6.0.2)(supports-color@8.1.1) '@expo/config-types': 57.0.2 '@expo/plist': 0.8.1 - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) transitivePeerDependencies: - supports-color - typescript expo-sms@57.0.1(expo@57.0.8): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) expo-splash-screen@57.0.7(@typescript/typescript6@6.0.2)(expo@57.0.8)(supports-color@8.1.1): dependencies: '@expo/config-plugins': 57.0.8(@typescript/typescript6@6.0.2)(supports-color@8.1.1) '@expo/image-utils': 0.8.12 - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) xml2js: 0.6.0 transitivePeerDependencies: - supports-color @@ -15346,12 +15356,12 @@ snapshots: expo-structured-headers@57.0.0: {} - expo-system-ui@57.0.2(expo@57.0.8)(react-native-web@0.21.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(supports-color@8.1.1): + expo-system-ui@57.0.2(expo@57.0.8)(react-native-web@0.21.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(supports-color@8.1.1): dependencies: '@react-native/normalize-colors': 0.86.0 debug: 4.4.3(supports-color@8.1.1) - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) optionalDependencies: react-native-web: 0.21.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) transitivePeerDependencies: @@ -15359,9 +15369,9 @@ snapshots: expo-updates-interface@57.0.1(expo@57.0.8): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) - expo-updates@57.0.10(patch_hash=04f28cb005b770e9ae8f0065eab96e43cbb1e58107f5f6ad1bdd18f6deb66487)(expo-dev-client@57.0.13(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)))(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1): + expo-updates@57.0.10(patch_hash=04f28cb005b770e9ae8f0065eab96e43cbb1e58107f5f6ad1bdd18f6deb66487)(expo-dev-client@57.0.13(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)))(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1): dependencies: '@expo/code-signing-certificates': 0.0.6 '@expo/plist': 0.8.1 @@ -15369,7 +15379,7 @@ snapshots: arg: 4.1.0 chalk: 4.1.2 debug: 4.4.3(supports-color@8.1.1) - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) expo-eas-client: 57.0.1 expo-manifests: 57.0.1(expo@57.0.8) expo-structured-headers: 57.0.0 @@ -15379,59 +15389,59 @@ snapshots: ignore: 5.3.2 nullthrows: 1.1.1 react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) resolve-from: 5.0.0 optionalDependencies: - expo-dev-client: 57.0.13(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) + expo-dev-client: 57.0.13(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) transitivePeerDependencies: - supports-color expo-video-thumbnails@57.0.1(expo@57.0.8): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) - expo-video@57.0.2(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + expo-video@57.0.2(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - expo-web-browser@57.0.2(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)): + expo-web-browser@57.0.2(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - expo@57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34): + expo@57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95): dependencies: '@babel/runtime': 7.29.2 - '@expo/cli': 57.0.16(2f7b6519a55973905127c80d6703ea33) + '@expo/cli': 57.0.16(6d22268ca81ff460e3b175e3d8d42676) '@expo/config': 57.0.8(@typescript/typescript6@6.0.2)(supports-color@8.1.1) '@expo/config-plugins': 57.0.8(@typescript/typescript6@6.0.2)(supports-color@8.1.1) - '@expo/devtools': 57.0.1(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + '@expo/devtools': 57.0.1(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) '@expo/fingerprint': 0.20.8(supports-color@8.1.1) '@expo/local-build-cache-provider': 57.0.6(@typescript/typescript6@6.0.2)(supports-color@8.1.1) - '@expo/log-box': 57.0.3(@expo/dom-webview@57.0.1)(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + '@expo/log-box': 57.0.3(@expo/dom-webview@57.0.1)(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) '@expo/metro': 56.0.0(supports-color@8.1.1) '@expo/metro-config': 57.0.8(@typescript/typescript6@6.0.2)(expo@57.0.8)(supports-color@8.1.1) '@ungap/structured-clone': 1.3.1 babel-preset-expo: 57.0.7(@babel/core@7.29.0(supports-color@8.1.1))(@babel/runtime@7.29.2)(expo@57.0.8)(react-refresh@0.14.2)(supports-color@8.1.1) - expo-asset: 57.0.12(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1) - expo-constants: 57.0.12(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(supports-color@8.1.1) - expo-file-system: 57.0.4(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) - expo-font: 57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + expo-asset: 57.0.12(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1) + expo-constants: 57.0.12(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(supports-color@8.1.1) + expo-file-system: 57.0.4(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)) + expo-font: 57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) expo-keep-awake: 57.0.1(expo@57.0.8)(react@19.2.3) expo-modules-autolinking: 57.0.10(@typescript/typescript6@6.0.2)(supports-color@8.1.1) - expo-modules-core: 57.0.8(patch_hash=7c2fd5f0b146ee5208ea607ccdd3127af95bf7202e733cd92c9ca5d2350b4832)(3dcf27a740c49e619c0e997c7b3d7a93) + expo-modules-core: 57.0.8(patch_hash=7c2fd5f0b146ee5208ea607ccdd3127af95bf7202e733cd92c9ca5d2350b4832)(92d1a74bc123f334ae9968fa1c80814f) pretty-format: 29.7.0 react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) react-refresh: 0.14.2 whatwg-url-minimum: 0.1.2 optionalDependencies: - '@expo/dom-webview': 57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + '@expo/dom-webview': 57.0.1(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) react-dom: 19.2.3(react@19.2.3) react-native-web: 0.21.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - react-native-webview: 13.17.0(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + react-native-webview: 13.17.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) transitivePeerDependencies: - '@babel/core' - bufferutil @@ -16407,7 +16417,7 @@ snapshots: jest-mock: 29.7.0 jest-util: 29.7.0 - jest-expo@57.0.4(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(expo@57.0.8)(jest@29.7.0(@types/node@24.12.4)(supports-color@8.1.1))(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1): + jest-expo@57.0.4(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(expo@57.0.8)(jest@29.7.0(@types/node@24.12.4)(supports-color@8.1.1))(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1): dependencies: '@jest/create-cache-key-function': 29.7.0 '@jest/globals': 29.7.0(supports-color@8.1.1) @@ -16419,12 +16429,12 @@ snapshots: jest-watch-typeahead: 2.2.1(jest@29.7.0(@types/node@24.12.4)(supports-color@8.1.1)) json5: 2.2.3 lodash: 4.18.1 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) react-test-renderer: 19.2.3(react@19.2.3) server-only: 0.0.1 stacktrace-js: 2.0.2 optionalDependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) transitivePeerDependencies: - '@babel/core' - bufferutil @@ -18162,115 +18172,115 @@ snapshots: react: 19.2.3 react-is: 19.2.6 - react-native-date-picker@5.0.13(patch_hash=92943fb79d17d7342a29bbb12b0d8ee3cf6f7bca12ed322dc8d124a3e9fb75bd)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + react-native-date-picker@5.0.13(patch_hash=92943fb79d17d7342a29bbb12b0d8ee3cf6f7bca12ed322dc8d124a3e9fb75bd)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - react-native-device-attest@0.1.6(expo@57.0.8)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + react-native-device-attest@0.1.6(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: - expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(cb1926b47f8b6f0936d09f9e1e5a9a34) + expo: 57.0.8(patch_hash=1722861d12907a2d412d04230545b2fcbfa5547a79f99d763cb3e8de6f3a6f2a)(7aa1f5f5d2c1af01fea68204d31a3f95) react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) react-native-dotenv@3.4.11(patch_hash=16b34eb974399935d3cf7c2526534f906991ccd876215176658347059cdd2021)(@babel/runtime@7.29.2): dependencies: '@babel/runtime': 7.29.2 dotenv: 16.6.1 - ? react-native-drawer-layout@4.2.3(patch_hash=74f2c043cc22ab87054f219e7c7373a509b779b18bfa79d27e7d051d73355130)(react-native-gesture-handler@2.32.0(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3))(react-native-reanimated@4.6.0(3dcf27a740c49e619c0e997c7b3d7a93))(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + ? react-native-drawer-layout@4.2.3(patch_hash=74f2c043cc22ab87054f219e7c7373a509b779b18bfa79d27e7d051d73355130)(react-native-gesture-handler@2.32.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3))(react-native-reanimated@4.6.0(92d1a74bc123f334ae9968fa1c80814f))(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) : dependencies: color: 4.2.3 react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - react-native-gesture-handler: 2.32.0(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) - react-native-reanimated: 4.6.0(3dcf27a740c49e619c0e997c7b3d7a93) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native-gesture-handler: 2.32.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + react-native-reanimated: 4.6.0(92d1a74bc123f334ae9968fa1c80814f) use-latest-callback: 0.2.6(react@19.2.3) - react-native-edge-to-edge@1.8.1(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + react-native-edge-to-edge@1.8.1(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - react-native-gesture-handler@2.32.0(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + react-native-gesture-handler@2.32.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: '@egjs/hammerjs': 2.0.17 '@types/react-test-renderer': 19.1.0 hoist-non-react-statics: 3.3.2 invariant: 2.2.4 react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - react-native-is-edge-to-edge@1.3.1(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + react-native-is-edge-to-edge@1.3.1(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - react-native-keyboard-controller@1.21.9(patch_hash=ac52bf7502ff3ad34a8594b5e1a916b96bf87a2523b6abc87c31f03607d52271)(react-native-reanimated@4.6.0(3dcf27a740c49e619c0e997c7b3d7a93))(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + react-native-keyboard-controller@1.21.9(patch_hash=ac52bf7502ff3ad34a8594b5e1a916b96bf87a2523b6abc87c31f03607d52271)(react-native-reanimated@4.6.0(92d1a74bc123f334ae9968fa1c80814f))(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - react-native-is-edge-to-edge: 1.3.1(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) - react-native-reanimated: 4.6.0(3dcf27a740c49e619c0e997c7b3d7a93) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native-is-edge-to-edge: 1.3.1(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + react-native-reanimated: 4.6.0(92d1a74bc123f334ae9968fa1c80814f) - react-native-mmkv@3.3.3(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + react-native-mmkv@3.3.3(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - react-native-pager-view@6.8.0(patch_hash=c8316acd33c9aef6531e8c272c2bfab7bd02af1255969eeaab2bad5ab48531cc)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + react-native-pager-view@6.8.0(patch_hash=c8316acd33c9aef6531e8c272c2bfab7bd02af1255969eeaab2bad5ab48531cc)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - react-native-progress@5.0.1(react-native-svg@15.15.4(patch_hash=ae309e9542214f5ae54935e253dedd236765feedac7be343f81d532d7fe09310)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)): + react-native-progress@5.0.1(react-native-svg@15.15.4(patch_hash=ae309e9542214f5ae54935e253dedd236765feedac7be343f81d532d7fe09310)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)): dependencies: prop-types: 15.8.1 - react-native-svg: 15.15.4(patch_hash=ae309e9542214f5ae54935e253dedd236765feedac7be343f81d532d7fe09310)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + react-native-svg: 15.15.4(patch_hash=ae309e9542214f5ae54935e253dedd236765feedac7be343f81d532d7fe09310)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) - react-native-qrcode-styled@0.3.3(react-native-svg@15.15.4(patch_hash=ae309e9542214f5ae54935e253dedd236765feedac7be343f81d532d7fe09310)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3))(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + react-native-qrcode-styled@0.3.3(react-native-svg@15.15.4(patch_hash=ae309e9542214f5ae54935e253dedd236765feedac7be343f81d532d7fe09310)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3))(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: qrcode: 1.5.4 react: 19.2.3 react-fast-compare: 3.2.2 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - react-native-svg: 15.15.4(patch_hash=ae309e9542214f5ae54935e253dedd236765feedac7be343f81d532d7fe09310)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native-svg: 15.15.4(patch_hash=ae309e9542214f5ae54935e253dedd236765feedac7be343f81d532d7fe09310)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) - react-native-reanimated@4.6.0(3dcf27a740c49e619c0e997c7b3d7a93): + react-native-reanimated@4.6.0(92d1a74bc123f334ae9968fa1c80814f): dependencies: react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - react-native-is-edge-to-edge: 1.3.1(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) - react-native-worklets: 0.12.1(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native-is-edge-to-edge: 1.3.1(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + react-native-worklets: 0.12.1(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1) semver: 7.8.0 - react-native-safe-area-context@5.7.0(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + react-native-safe-area-context@5.7.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - react-native-screens@4.26.2(patch_hash=ba3295d44434a729f143a6b2c24e4a9b2f911ab200b2bc47e46cdfeaa1536f7c)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + react-native-screens@4.26.2(patch_hash=ba3295d44434a729f143a6b2c24e4a9b2f911ab200b2bc47e46cdfeaa1536f7c)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: react: 19.2.3 react-freeze: 1.0.4(react@19.2.3) - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) warn-once: 0.1.1 - react-native-svg@15.15.4(patch_hash=ae309e9542214f5ae54935e253dedd236765feedac7be343f81d532d7fe09310)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + react-native-svg@15.15.4(patch_hash=ae309e9542214f5ae54935e253dedd236765feedac7be343f81d532d7fe09310)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: css-select: 5.2.2 css-tree: 1.1.3 react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) warn-once: 0.1.1 react-native-uuid@2.0.4: {} - react-native-view-shot@5.1.1(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + react-native-view-shot@5.1.1(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: html2canvas: 1.4.1 react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) react-native-web-webview@1.0.2(file-loader@6.2.0(webpack@5.106.2(clean-css@5.3.3)(cssnano@5.1.15(postcss@8.5.14))(csso@5.0.5)(esbuild@0.25.12)(html-minifier-terser@6.1.0)(lightningcss@1.32.0)(postcss@8.5.14)))(react-native-web@0.21.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)): dependencies: @@ -18293,15 +18303,15 @@ snapshots: transitivePeerDependencies: - encoding - react-native-webview@13.17.0(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): + react-native-webview@13.17.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3): dependencies: '@typescript/native-preview': 7.0.0-dev.20260707.2 escape-string-regexp: 4.0.0 invariant: 2.2.4 react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - react-native-worklets@0.12.1(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1): + react-native-worklets@0.12.1(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1): dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/generator': 7.29.1 @@ -18319,12 +18329,12 @@ snapshots: '@react-native/metro-config': 0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) convert-source-map: 2.0.0 react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) semver: 7.8.0 transitivePeerDependencies: - supports-color - react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1): + react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1): dependencies: '@react-native/assets-registry': 0.86.0 '@react-native/codegen': 0.86.0(@babel/core@7.29.0(supports-color@8.1.1)) @@ -18332,7 +18342,7 @@ snapshots: '@react-native/gradle-plugin': 0.86.0 '@react-native/js-polyfills': 0.86.0 '@react-native/normalize-colors': 0.86.0 - '@react-native/virtualized-lists': 0.86.0(@types/react@19.2.18)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + '@react-native/virtualized-lists': 0.86.0(@types/react@19.2.18)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 @@ -18826,16 +18836,16 @@ snapshots: dependencies: atomic-sleep: 1.0.0 - sonner-native@0.26.4(1ea5da2cbb6dc673f6fceeaefbc614e3): + sonner-native@0.26.4(a1115538eb9b7f01f00730be61406201): dependencies: react: 19.2.3 - react-native: 0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) - react-native-gesture-handler: 2.32.0(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) - react-native-reanimated: 4.6.0(3dcf27a740c49e619c0e997c7b3d7a93) - react-native-safe-area-context: 5.7.0(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) - react-native-screens: 4.26.2(patch_hash=ba3295d44434a729f143a6b2c24e4a9b2f911ab200b2bc47e46cdfeaa1536f7c)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) - react-native-svg: 15.15.4(patch_hash=ae309e9542214f5ae54935e253dedd236765feedac7be343f81d532d7fe09310)(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) - react-native-worklets: 0.12.1(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(react-native@0.86.0(patch_hash=aef21f6938ae570594802e10acda4f409f46f7dba82a9add010e3e6bd8053201)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1) + react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1) + react-native-gesture-handler: 2.32.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + react-native-reanimated: 4.6.0(92d1a74bc123f334ae9968fa1c80814f) + react-native-safe-area-context: 5.7.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + react-native-screens: 4.26.2(patch_hash=ba3295d44434a729f143a6b2c24e4a9b2f911ab200b2bc47e46cdfeaa1536f7c)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + react-native-svg: 15.15.4(patch_hash=ae309e9542214f5ae54935e253dedd236765feedac7be343f81d532d7fe09310)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3) + react-native-worklets: 0.12.1(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1) sonner@2.0.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: diff --git a/src/analytics/metrics/types.ts b/src/analytics/metrics/types.ts index 78a4574f0f..5aa3b00c5e 100644 --- a/src/analytics/metrics/types.ts +++ b/src/analytics/metrics/types.ts @@ -450,6 +450,7 @@ export type Events = { 'post:view': { uri: string authorDid: string + isReply: boolean logContext: | 'FeedItem' | 'PostThreadItem' @@ -1396,6 +1397,41 @@ export type Events = { playlist: string } + /** + * The playable video was meaningfully visible. This is an exposure event, + * not proof that playback started. Fires once per mounted video item. + */ + 'video:impression': { + postUri?: string + postAuthorDid?: string + context: 'embed' | 'immersiveFeed' + presentation: 'video' | 'gif' + } + /** + * Playback advanced far enough to render the first frame. Preloading and + * merely becoming active do not count. Fires once per mounted video item; + * automatic loops do not produce another event. + */ + 'video:playback:start': { + postUri?: string + postAuthorDid?: string + context: 'embed' | 'immersiveFeed' + presentation: 'video' | 'gif' + autoplay: boolean + } + /** + * The user activated a third-party media player. Cross-origin players do + * not expose confirmed playback consistently, so this must not be treated + * as equivalent to video:playback:start without an explicit methodology. + */ + 'externalEmbed:playerActivated': { + postUri?: string + postAuthorDid?: string + source: string + playerType: string + mediaType: 'video' | 'audio' | 'gif' | 'other' + } + // === Video upload funnel (Frontend Spec section D) === // Every event carries uploadId (client-generated UUID, ties one upload // session end-to-end) + engine (compression engine id, e.g. diff --git a/src/analytics/utils.ts b/src/analytics/utils.ts index b20b3719c9..af1ef84070 100644 --- a/src/analytics/utils.ts +++ b/src/analytics/utils.ts @@ -11,14 +11,18 @@ import { * Thin `useMemo` wrapper that marks the metadata as memoized and provides a * type guard. */ -export function useMeta(metadata?: MergeableMetadata) { - const m = useMemo(() => metadata, [metadata]) - if (!m) return +function markMemoized(m: T): T { // @ts-expect-error m.__meta = true return m } +export function useMeta(metadata?: MergeableMetadata) { + const m = useMemo(() => metadata, [metadata]) + if (!m) return + return markMemoized(m) +} + export function accountToSessionMetadata( account: SessionAccount | undefined, ): SessionMetadata | undefined { diff --git a/src/components/Composer/index.tsx b/src/components/Composer/index.tsx index b2266db5a1..eb37771415 100644 --- a/src/components/Composer/index.tsx +++ b/src/components/Composer/index.tsx @@ -362,9 +362,9 @@ export function Composer({ onKeyPress={IS_WEB ? onKeyPressWeb : undefined} onScroll={e => { if (IS_WEB) { - inputScrollSharedValue.value = (e.target as any).scrollTop + inputScrollSharedValue.set((e.target as any).scrollTop) } else { - inputScrollSharedValue.value = e.nativeEvent.contentOffset.y + inputScrollSharedValue.set(e.nativeEvent.contentOffset.y) } }} // @ts-expect-error web only diff --git a/src/components/Layout/Header/index.tsx b/src/components/Layout/Header/index.tsx index c70cebd703..7f3969adcd 100644 --- a/src/components/Layout/Header/index.tsx +++ b/src/components/Layout/Header/index.tsx @@ -219,7 +219,7 @@ export function SubtitleText({children}: {children: React.ReactNode}) { IS_IOS && align === 'platform' && a.text_center, t.atoms.text_contrast_medium, ]} - numberOfLines={2}> + numberOfLines={1}> {children} ) diff --git a/src/components/Post/Embed/ExternalEmbed/ExternalPlayer.tsx b/src/components/Post/Embed/ExternalEmbed/ExternalPlayer.tsx index 63c4236aa1..9f47bc8f1e 100644 --- a/src/components/Post/Embed/ExternalEmbed/ExternalPlayer.tsx +++ b/src/components/Post/Embed/ExternalEmbed/ExternalPlayer.tsx @@ -22,6 +22,7 @@ import {useNavigation} from '@react-navigation/native' import {type NavigationProp} from '#/lib/routes/types' import { type EmbedPlayerParams, + getEmbedPlayerMediaType, getPlayerAspect, } from '#/lib/strings/embed-player' import {useExternalEmbedsPrefs} from '#/state/preferences' @@ -32,6 +33,7 @@ import {EmbedConsentDialog} from '#/components/dialogs/EmbedConsent' import {Fill} from '#/components/Fill' import {KeepAwake} from '#/components/KeepAwake' import {PlayButtonIcon} from '#/components/video/PlayButtonIcon' +import {useAnalytics} from '#/analytics' import {IS_NATIVE} from '#/env' import {type app} from '#/lexicons' @@ -121,9 +123,11 @@ function Player({ export function ExternalPlayer({ link, params, + post, }: { link: app.bsky.embed.external.ViewExternal params: EmbedPlayerParams + post?: app.bsky.feed.defs.PostView }) { const t = useTheme() const navigation = useNavigation() @@ -131,10 +135,31 @@ export function ExternalPlayer({ const windowDims = useWindowDimensions() const externalEmbedsPrefs = useExternalEmbedsPrefs() const consentDialogControl = useDialogControl() + const ax = useAnalytics() const [isPlayerActive, setIsPlayerActive] = useState(false) const [isLoading, setIsLoading] = useState(true) + const activatePlayer = useCallback(() => { + if (!isPlayerActive) { + ax.metric('externalEmbed:playerActivated', { + postUri: post?.uri, + postAuthorDid: post?.author.did, + source: params.source, + playerType: params.type, + mediaType: getEmbedPlayerMediaType(params.type), + }) + } + setIsPlayerActive(true) + }, [ + ax, + isPlayerActive, + params.source, + params.type, + post?.author.did, + post?.uri, + ]) + const aspect = useMemo(() => { return getPlayerAspect({ type: params.type, @@ -202,14 +227,14 @@ export function ExternalPlayer({ return } - setIsPlayerActive(true) + activatePlayer() }, - [externalEmbedsPrefs, consentDialogControl, params.source], + [externalEmbedsPrefs, consentDialogControl, params.source, activatePlayer], ) const onAcceptConsent = useCallback(() => { - setIsPlayerActive(true) - }, []) + activatePlayer() + }, [activatePlayer]) return ( <> diff --git a/src/components/Post/Embed/ExternalEmbed/index.tsx b/src/components/Post/Embed/ExternalEmbed/index.tsx index a496780524..64940d710c 100644 --- a/src/components/Post/Embed/ExternalEmbed/index.tsx +++ b/src/components/Post/Embed/ExternalEmbed/index.tsx @@ -27,11 +27,13 @@ import {GifEmbed} from './Gif' export const ExternalEmbed = ({ link, onOpen, + post, style, hideAlt, }: { link: app.bsky.embed.external.ViewExternal onOpen?: () => void + post?: app.bsky.feed.defs.PostView style?: StyleProp hideAlt?: boolean }) => { @@ -120,7 +122,11 @@ export const ExternalEmbed = ({ {embedPlayerParams?.isGif ? ( ) : embedPlayerParams ? ( - + ) : undefined} void}> @@ -33,6 +35,7 @@ export function VideoEmbedInnerNative({ setStatus: (status: 'playing' | 'paused') => void setIsLoading: (isLoading: boolean) => void setIsActive: (isActive: boolean) => void + onPlaybackStart: (autoplay: boolean) => void /** * Called with the native error message before the component throws to the * surrounding error boundary. @@ -46,6 +49,7 @@ export function VideoEmbedInnerNative({ const [muted, setMuted] = useVideoMuteState() const reportDialogMetadata = useReportDialogMetadataContext() const maxTimeRemainingSeconds = useRef(0) + const playbackStartTrackedRef = useRef(false) const [isPlaying, setIsPlaying] = useState(false) const [timeRemaining, setTimeRemaining] = useState(0) @@ -62,12 +66,13 @@ export function VideoEmbedInnerNative({ } const isGif = embed.presentation === 'gif' + const autoplay = !autoplayDisabled && !isWithinMessage return ( { @@ -88,20 +93,26 @@ export function VideoEmbedInnerNative({ onTimeRemainingChange={e => { const {timeRemaining} = e.nativeEvent setTimeRemaining(timeRemaining) - if ( - !isGif && - reportDialogMetadata && - Number.isFinite(timeRemaining) && - timeRemaining >= 0 - ) { + if (Number.isFinite(timeRemaining) && timeRemaining >= 0) { maxTimeRemainingSeconds.current = Math.max( maxTimeRemainingSeconds.current, timeRemaining, ) - reportDialogMetadata.current.videoTimestampSeconds = Math.max( - 0, - maxTimeRemainingSeconds.current - timeRemaining, - ) + if ( + !playbackStartTrackedRef.current && + hasPlaybackStarted( + maxTimeRemainingSeconds.current - timeRemaining, + ) + ) { + playbackStartTrackedRef.current = true + onPlaybackStart(autoplay) + } + if (!isGif && reportDialogMetadata) { + reportDialogMetadata.current.videoTimestampSeconds = Math.max( + 0, + maxTimeRemainingSeconds.current - timeRemaining, + ) + } } }} onError={e => { diff --git a/src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoEmbedInnerWeb.shared.ts b/src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoEmbedInnerWeb.shared.ts index 8c4ef57d20..56fb66f18e 100644 --- a/src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoEmbedInnerWeb.shared.ts +++ b/src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoEmbedInnerWeb.shared.ts @@ -6,6 +6,7 @@ export type VideoEmbedInnerWebProps = { setActive: () => void onScreen: boolean lastKnownTime: React.RefObject + onPlaybackStart: (autoplay: boolean) => void } export class HLSUnsupportedError extends Error { diff --git a/src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoEmbedInnerWeb.tsx b/src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoEmbedInnerWeb.tsx index 947d4ac3d6..213dbfa911 100644 --- a/src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoEmbedInnerWeb.tsx +++ b/src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoEmbedInnerWeb.tsx @@ -4,6 +4,7 @@ import {useLingui} from '@lingui/react/macro' import type * as HlsTypes from 'hls.js' import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback' +import {hasPlaybackStarted} from '#/lib/media/video/analytics' import {atoms as a} from '#/alf' import {AltBadgeWithDialog} from '#/components/AltBadgeWithDialog' import {useFullscreen} from '#/components/hooks/useFullscreen' @@ -29,6 +30,7 @@ export function VideoEmbedInnerWeb({ setActive, onScreen, lastKnownTime, + onPlaybackStart, }: VideoEmbedInnerWebProps) { const containerRef = useRef(null) const videoRef = useRef(null) @@ -40,6 +42,7 @@ export function VideoEmbedInnerWeb({ const [isFullscreen] = useFullscreen(containerRef) const isGif = embed.presentation === 'gif' const reportDialogMetadata = useReportDialogMetadataContext() + const playbackStartTrackedRef = useRef(false) // send error up to error boundary const [error, setError] = useState(null) @@ -79,6 +82,13 @@ export function VideoEmbedInnerWeb({ onTimeUpdate={e => { const currentTime = e.currentTarget.currentTime lastKnownTime.current = currentTime + if ( + !playbackStartTrackedRef.current && + hasPlaybackStarted(currentTime) + ) { + playbackStartTrackedRef.current = true + onPlaybackStart(!focused) + } if ( !isGif && reportDialogMetadata && diff --git a/src/components/Post/Embed/VideoEmbed/index.tsx b/src/components/Post/Embed/VideoEmbed/index.tsx index a67495189a..66ec01da9f 100644 --- a/src/components/Post/Embed/VideoEmbed/index.tsx +++ b/src/components/Post/Embed/VideoEmbed/index.tsx @@ -23,9 +23,10 @@ import * as VideoFallback from './VideoEmbedInner/VideoFallback' interface Props { embed: app.bsky.embed.video.View + post?: app.bsky.feed.defs.PostView } -export function VideoEmbed({embed}: Props) { +export function VideoEmbed({embed, post}: Props) { const [key, setKey] = useState(0) const renderError = useCallback( @@ -52,7 +53,7 @@ export function VideoEmbed({embed}: Props) { const contents = ( - + ) @@ -69,7 +70,7 @@ export function VideoEmbed({embed}: Props) { ) } -function InnerWrapper({embed}: Props) { +function InnerWrapper({embed, post}: Props) { const {_} = useLingui() const ax = useAnalytics() const ref = useRef<{togglePlayback: () => void}>(null) @@ -86,6 +87,8 @@ function InnerWrapper({embed}: Props) { * the active position cost nothing. */ const telemetryRef = useRef(null) + const impressionTrackedRef = useRef(false) + const playbackStartTrackedRef = useRef(false) useEffect(() => { return () => { telemetryRef.current?.deactivated() @@ -121,6 +124,15 @@ function InnerWrapper({embed}: Props) { setIsActive={active => { setIsActive(active) if (active) { + if (!impressionTrackedRef.current) { + impressionTrackedRef.current = true + ax.metric('video:impression', { + postUri: post?.uri, + postAuthorDid: post?.author.did, + context: 'embed', + presentation: embed.presentation === 'gif' ? 'gif' : 'video', + }) + } if (telemetryRef.current == null) { telemetryRef.current = createPlaybackTelemetry({ surface: 'feed', @@ -132,6 +144,17 @@ function InnerWrapper({embed}: Props) { telemetryRef.current?.deactivated() } }} + onPlaybackStart={autoplay => { + if (playbackStartTrackedRef.current) return + playbackStartTrackedRef.current = true + ax.metric('video:playback:start', { + postUri: post?.uri, + postAuthorDid: post?.author.did, + context: 'embed', + presentation: embed.presentation === 'gif' ? 'gif' : 'video', + autoplay, + }) + }} onError={error => { telemetryRef.current?.error(error) ax.metric('video:playback:failed', { diff --git a/src/components/Post/Embed/VideoEmbed/index.web.tsx b/src/components/Post/Embed/VideoEmbed/index.web.tsx index a02fff613a..0c3f217791 100644 --- a/src/components/Post/Embed/VideoEmbed/index.web.tsx +++ b/src/components/Post/Embed/VideoEmbed/index.web.tsx @@ -37,7 +37,13 @@ const noop = () => {} */ const MIN_CARD_WIDTH = 280 -export function VideoEmbed({embed}: {embed: app.bsky.embed.video.View}) { +export function VideoEmbed({ + embed, + post, +}: { + embed: app.bsky.embed.video.View + post?: app.bsky.feed.defs.PostView +}) { const t = useTheme() const ref = useRef(null) const { @@ -47,13 +53,28 @@ export function VideoEmbed({embed}: {embed: app.bsky.embed.video.View}) { currentActiveView, } = useActiveVideoWeb() const [onScreen, setOnScreen] = useState(false) + const [meaningfullyVisible, setMeaningfullyVisible] = useState(false) const [isFullscreen] = useFullscreen() const lastKnownTime = useRef(undefined) + const impressionTrackedRef = useRef(false) + const playbackStartTrackedRef = useRef(false) + const ax = useAnalytics() const isGif = embed.presentation === 'gif' // GIFs don't participate in the "one video at a time" system const active = isGif || activeFromContext + useEffect(() => { + if (!meaningfullyVisible || impressionTrackedRef.current) return + impressionTrackedRef.current = true + ax.metric('video:impression', { + postUri: post?.uri, + postAuthorDid: post?.author.did, + context: 'embed', + presentation: isGif ? 'gif' : 'video', + }) + }, [ax, isGif, meaningfullyVisible, post?.author.did, post?.uri]) + useEffect(() => { if (!ref.current) return if (isFullscreen && !IS_WEB_FIREFOX) return @@ -62,6 +83,9 @@ export function VideoEmbed({embed}: {embed: app.bsky.embed.video.View}) { const entry = entries[0] if (!entry) return setOnScreen(entry.isIntersecting) + setMeaningfullyVisible( + entry.isIntersecting && entry.intersectionRatio >= 0.5, + ) // GIFs don't send position - they don't compete to be the active video if (!isGif) { sendPosition( @@ -179,6 +203,17 @@ export function VideoEmbed({embed}: {embed: app.bsky.embed.video.View}) { setActive={setActive} onScreen={onScreen} lastKnownTime={lastKnownTime} + onPlaybackStart={autoplay => { + if (playbackStartTrackedRef.current) return + playbackStartTrackedRef.current = true + ax.metric('video:playback:start', { + postUri: post?.uri, + postAuthorDid: post?.author.did, + context: 'embed', + presentation: isGif ? 'gif' : 'video', + autoplay, + }) + }} /> diff --git a/src/components/Post/Embed/index.tsx b/src/components/Post/Embed/index.tsx index 5e195ac2f9..1468f9b3f5 100644 --- a/src/components/Post/Embed/index.tsx +++ b/src/components/Post/Embed/index.tsx @@ -134,6 +134,7 @@ function MediaEmbed({ @@ -144,7 +145,7 @@ function MediaEmbed({ - + ) } diff --git a/src/components/RichText.tsx b/src/components/RichText.tsx index 1fa020f2a9..e3b7090fa7 100644 --- a/src/components/RichText.tsx +++ b/src/components/RichText.tsx @@ -2,6 +2,7 @@ import {useMemo} from 'react' import {type StyleProp, type TextStyle} from 'react-native' import {RichText as RichTextAPI} from '@bsky/sdk/richtext' +import {isRTLText} from '#/lib/strings/text-direction' import {toShortUrl} from '#/lib/strings/url-helpers' import {android, atoms as a, flatten, type TextStyleProp} from '#/alf' import {isOnlyEmoji} from '#/alf/typography' @@ -9,6 +10,7 @@ import {InlineLinkText, type LinkProps} from '#/components/Link' import {ProfileHoverCard} from '#/components/ProfileHoverCard' import {RichTextTag} from '#/components/RichTextTag' import {Text, type TextProps} from '#/components/Typography' +import {IS_NATIVE} from '#/env' import {app} from '#/lexicons' import * as bsky from '#/types/bsky' @@ -82,15 +84,17 @@ export function RichText({ } }, [value]) - const plainStyles = style + const {text, facets} = richText + const plainStyles: StyleProp = [ + style, + IS_NATIVE && isRTLText(text) ? {textAlign: 'right'} : null, + ] const suffixStyles = suffix && suffixOffset ? android({paddingBottom: suffixOffset, marginBottom: -suffixOffset}) : null const interactiveStyles = [plainStyles, interactiveStyle] - const {text, facets} = richText - if (!facets?.length) { if (isOnlyEmoji(text)) { const flattenedStyle = flatten(style) diff --git a/src/components/StarterPack/ShareDialog.tsx b/src/components/StarterPack/ShareDialog.tsx index 17c794fc1d..53248bec24 100644 --- a/src/components/StarterPack/ShareDialog.tsx +++ b/src/components/StarterPack/ShareDialog.tsx @@ -53,14 +53,15 @@ function ShareDialogInner({ const imageUrl = getStarterPackOgCard(starterPack) - const onShareLink = async () => { + const onShareLink = () => { if (!link) return - shareUrl(link) ax.metric('starterPack:share', { starterPack: starterPack.uri, shareType: 'link', }) - control.close() + control.close(() => { + void shareUrl(link) + }) } const saveImageToAlbum = useSaveImageToMediaLibrary() diff --git a/src/components/dialogs/Embed.tsx b/src/components/dialogs/Embed.tsx index caecc9a2a9..6c0f2e052e 100644 --- a/src/components/dialogs/Embed.tsx +++ b/src/components/dialogs/Embed.tsx @@ -8,7 +8,7 @@ import {Trans} from '@lingui/react/macro' import {EMBED_SCRIPT} from '#/lib/constants' import {niceDate} from '#/lib/strings/time' import {toShareUrl} from '#/lib/strings/url-helpers' -import {atoms as a, useTheme} from '#/alf' +import {atoms as a, useTheme, web} from '#/alf' import {Button, ButtonIcon, ButtonText} from '#/components/Button' import * as Dialog from '#/components/Dialog' import * as SegmentedControl from '#/components/forms/SegmentedControl' @@ -103,7 +103,7 @@ function EmbedDialogInner({ }, [i18n, postUri, postCid, record, timestamp, postAuthor, colorMode]) return ( - + diff --git a/src/components/dialogs/Signin.tsx b/src/components/dialogs/Signin.tsx index d98299a985..a8939eb07d 100644 --- a/src/components/dialogs/Signin.tsx +++ b/src/components/dialogs/Signin.tsx @@ -8,7 +8,7 @@ import {useLoggedOutViewControls} from '#/state/shell/logged-out' import {useCloseAllActiveElements} from '#/state/util' import {Logo} from '#/view/icons/Logo' import {Logotype} from '#/view/icons/Logotype' -import {atoms as a, useBreakpoints, useTheme} from '#/alf' +import {atoms as a, useBreakpoints, useTheme, web} from '#/alf' import {Button, ButtonText} from '#/components/Button' import * as Dialog from '#/components/Dialog' import {useGlobalDialogsControlContext} from '#/components/dialogs/Context' @@ -45,7 +45,7 @@ function SigninDialogInner({}: {control: Dialog.DialogOuterProps['control']}) { return ( + style={[a.w_full, gtMobile && web({width: 'auto', maxWidth: 420})]}> { + if (!__DEV__ || typeof window === 'undefined') return + // @ts-expect-error debug only window.clearNuxDialog = (id: Nux) => { - if (!__DEV__ || !id) return + if (!id) return resetNuxs([id]) unsnooze() } - } + }, [resetNuxs]) useEffect(() => { if (snoozed) return // comment this out to test diff --git a/src/components/intents/VerifyEmailIntentDialog.tsx b/src/components/intents/VerifyEmailIntentDialog.tsx index 272804af0e..753a167396 100644 --- a/src/components/intents/VerifyEmailIntentDialog.tsx +++ b/src/components/intents/VerifyEmailIntentDialog.tsx @@ -5,7 +5,7 @@ import {useLingui} from '@lingui/react' import {Trans} from '@lingui/react/macro' import {usePdsClient, useSession} from '#/state/session' -import {atoms as a, useBreakpoints, useTheme} from '#/alf' +import {atoms as a, useBreakpoints, useTheme, web} from '#/alf' import {Button, ButtonIcon, ButtonText} from '#/components/Button' import * as Dialog from '#/components/Dialog' import {type DialogControlProps} from '#/components/Dialog' @@ -62,7 +62,8 @@ function Inner({}: {control: DialogControlProps}) { {status === 'loading' ? ( diff --git a/src/components/moderation/ContentHider.tsx b/src/components/moderation/ContentHider.tsx index c33c17a881..2bc50a8598 100644 --- a/src/components/moderation/ContentHider.tsx +++ b/src/components/moderation/ContentHider.tsx @@ -101,35 +101,28 @@ function ContentHiderActive({ } } + const selfBlurCauses = [] let hasAdultContentLabel = false - const selfBlurNames = modui.blurs - .filter(cause => { - if (cause.type !== 'label') { - return false - } - if (cause.source.type !== 'user') { - return false - } - if (ADULT_CONTENT_LABELS.includes(cause.label.val as AdultSelfLabel)) { - if (hasAdultContentLabel) { - return false - } - hasAdultContentLabel = true - } - return true - }) - .slice(0, 2) - .map(cause => { - if (cause.type !== 'label') { - return - } + for (const cause of modui.blurs) { + if (cause.type !== 'label') continue + if (cause.source.type !== 'user') continue + if (ADULT_CONTENT_LABELS.includes(cause.label.val as AdultSelfLabel)) { + if (hasAdultContentLabel) continue + hasAdultContentLabel = true + } + selfBlurCauses.push(cause) + } + const selfBlurNames = selfBlurCauses.slice(0, 2).map(cause => { + if (cause.type !== 'label') { + return + } - const def = cause.labelDef || getDefinition(labelDefs, cause.label) - if (def.identifier === 'porn' || def.identifier === 'sexual') { - return l`Adult Content` - } - return getLabelStrings(i18n.locale, globalLabelStrings, def).name - }) + const def = cause.labelDef || getDefinition(labelDefs, cause.label) + if (def.identifier === 'porn' || def.identifier === 'sexual') { + return l`Adult Content` + } + return getLabelStrings(i18n.locale, globalLabelStrings, def).name + }) if (selfBlurNames.length === 0) { return desc.name diff --git a/src/components/moderation/ReportDialog/index.tsx b/src/components/moderation/ReportDialog/index.tsx index 98ede654c8..ee5ea70388 100644 --- a/src/components/moderation/ReportDialog/index.tsx +++ b/src/components/moderation/ReportDialog/index.tsx @@ -18,7 +18,7 @@ import {sanitizeHandle} from '#/lib/strings/handles' import {useMyLabelersQuery} from '#/state/queries/preferences' import {CharProgress} from '#/view/com/composer/char-progress/CharProgress' import {UserAvatar} from '#/view/com/util/UserAvatar' -import {atoms as a, useGutters, useTheme} from '#/alf' +import {atoms as a, useGutters, useTheme, web} from '#/alf' import * as Admonition from '#/components/Admonition' import {Button, ButtonIcon, ButtonText} from '#/components/Button' import * as Dialog from '#/components/Dialog' @@ -334,7 +334,7 @@ function Inner( testID="report:dialog" label={l`Report dialog`} ref={ref} - style={[a.w_full, {maxWidth: 500}]}> + style={[a.w_full, web({maxWidth: 500})]}> diff --git a/src/components/verification/VerifierDialog.tsx b/src/components/verification/VerifierDialog.tsx index e8944024ca..70648045ea 100644 --- a/src/components/verification/VerifierDialog.tsx +++ b/src/components/verification/VerifierDialog.tsx @@ -7,7 +7,7 @@ import {Trans} from '@lingui/react/macro' import {urls} from '#/lib/constants' import {getUserDisplayName} from '#/lib/getUserDisplayName' import {useSession} from '#/state/session' -import {atoms as a, useBreakpoints, useTheme} from '#/alf' +import {atoms as a, useBreakpoints, useTheme, web} from '#/alf' import {Button, ButtonText} from '#/components/Button' import * as Dialog from '#/components/Dialog' import {VerifierCheck} from '#/components/icons/VerifierCheck' @@ -65,7 +65,8 @@ function Inner({ ({ + FALLBACK_MARKER_POST: {post: {uri: 'at://did:plc:test/app.bsky.feed.post/1'}}, +})) + +const author = { + $type: 'app.bsky.actor.defs#profileViewBasic', + did: 'did:plc:alice', + handle: 'alice.test', +} as app.bsky.actor.defs.ProfileViewBasic + +function post(id: string) { + return { + $type: 'app.bsky.feed.defs#postView', + uri: `at://did:plc:alice/app.bsky.feed.post/${id}`, + cid: id, + author, + record: { + $type: 'app.bsky.feed.post', + text: id, + createdAt: '2026-08-31T00:00:00.000Z', + }, + indexedAt: '2026-08-31T00:00:00.000Z', + } as app.bsky.feed.defs.PostView +} + +describe('createFeedViewPostsSlices', () => { + it('preserves selected numbering and infers hydrated parent and root numbering', () => { + const root = post('root') + const parent = post('parent') + const selected = post('selected') + const feedPost = { + post: selected, + reply: {root, parent}, + opThreadPostIndex: 3, + opThreadPostCount: 4, + } as app.bsky.feed.defs.FeedViewPost & { + opThreadPostIndex: number + opThreadPostCount: number + } + + const [slice] = createFeedViewPostsSlices([feedPost]) + + expect( + slice.items.map(item => [item.post.uri, item.postNumbering]), + ).toEqual([ + [root.uri, {opThreadPostIndex: 1, opThreadPostCount: 4}], + [parent.uri, {opThreadPostIndex: 2, opThreadPostCount: 4}], + [selected.uri, {opThreadPostIndex: 3, opThreadPostCount: 4}], + ]) + }) +}) diff --git a/src/lib/api/feed-manip.ts b/src/lib/api/feed-manip.ts index b91613f4e7..167873c6b5 100644 --- a/src/lib/api/feed-manip.ts +++ b/src/lib/api/feed-manip.ts @@ -9,7 +9,7 @@ export type FeedPostNumbering = Pick< 'opThreadPostIndex' | 'opThreadPostCount' > -type ValidFeedPostNumbering = Required +export type ValidFeedPostNumbering = Required // AppView adds these fields to feed responses ahead of their feed lexicon. type FeedViewPost = app.bsky.feed.defs.FeedViewPost & FeedPostNumbering @@ -62,7 +62,7 @@ export type FeedTunerFn = ( type FeedSliceItem = { post: app.bsky.feed.defs.PostView record: app.bsky.feed.post.Main - postNumbering: FeedPostNumbering | undefined + postNumbering: ValidFeedPostNumbering | undefined parentAuthor: app.bsky.actor.defs.ProfileViewBasic | undefined isParentBlocked: boolean isParentNotFound: boolean @@ -88,7 +88,7 @@ export class FeedViewPostsSlice { constructor( feedPost: FeedViewPost, - postNumberingByUri: Map, + postNumberingByUri: Map, ) { const {post, reply, reason} = feedPost this.items = [] @@ -286,6 +286,22 @@ export class FeedViewPostsSlice { } } +export function createFeedViewPostsSlices( + feed: FeedViewPost[], +): FeedViewPostsSlice[] { + const postNumberingByUri = new Map() + for (const item of feed) { + const postNumbering = getPostNumbering(item) + if (postNumbering) { + postNumberingByUri.set(item.post.uri, postNumbering) + } + } + + return feed + .map(item => new FeedViewPostsSlice(item, postNumberingByUri)) + .filter(slice => slice.items.length > 0 || slice.isFallbackMarker) +} + export class FeedTuner { seenKeys: Set = new Set() seenUris: Set = new Set() @@ -299,17 +315,7 @@ export class FeedTuner { dryRun: false, }, ): FeedViewPostsSlice[] { - const postNumberingByUri = new Map() - for (const item of feed) { - const postNumbering = getPostNumbering(item) - if (postNumbering) { - postNumberingByUri.set(item.post.uri, postNumbering) - } - } - - let slices: FeedViewPostsSlice[] = feed - .map(item => new FeedViewPostsSlice(item, postNumberingByUri)) - .filter(s => s.items.length > 0 || s.isFallbackMarker) + let slices = createFeedViewPostsSlices(feed) // run the custom tuners for (const tunerFn of this.tunerFns) { diff --git a/src/lib/hooks/usePostViewTracking.ts b/src/lib/hooks/usePostViewTracking.ts index 28fe8ba448..3c10f5bfd9 100644 --- a/src/lib/hooks/usePostViewTracking.ts +++ b/src/lib/hooks/usePostViewTracking.ts @@ -24,6 +24,7 @@ export function usePostViewTracking( ax.metric('post:view', { uri: post.uri, authorDid: post.author.did, + isReply: !!post.record.reply, logContext, }) }, diff --git a/src/lib/media/video/__tests__/analytics.test.ts b/src/lib/media/video/__tests__/analytics.test.ts new file mode 100644 index 0000000000..846c8c245b --- /dev/null +++ b/src/lib/media/video/__tests__/analytics.test.ts @@ -0,0 +1,14 @@ +import {hasPlaybackStarted} from '../analytics' + +describe('hasPlaybackStarted', () => { + it.each([ + [0, false], + [0.049, false], + [0.05, true], + [1, true], + [Number.NaN, false], + [Number.POSITIVE_INFINITY, false], + ])('returns %s for %s seconds', (seconds, expected) => { + expect(hasPlaybackStarted(seconds)).toBe(expected) + }) +}) diff --git a/src/lib/media/video/analytics.ts b/src/lib/media/video/analytics.ts new file mode 100644 index 0000000000..2bae36f4f8 --- /dev/null +++ b/src/lib/media/video/analytics.ts @@ -0,0 +1,13 @@ +export const PLAYBACK_START_THRESHOLD_SECONDS = 0.05 + +/** + * A small positive threshold distinguishes rendered playback from metadata + * loading and zero-valued player callbacks while still representing the first + * frame across the frame rates we support. + */ +export function hasPlaybackStarted(progressSeconds: number): boolean { + return ( + Number.isFinite(progressSeconds) && + progressSeconds >= PLAYBACK_START_THRESHOLD_SECONDS + ) +} diff --git a/src/lib/strings/__tests__/text-direction.test.ts b/src/lib/strings/__tests__/text-direction.test.ts new file mode 100644 index 0000000000..a7470c1380 --- /dev/null +++ b/src/lib/strings/__tests__/text-direction.test.ts @@ -0,0 +1,24 @@ +import {describe, expect, it} from '@jest/globals' + +import {isRTLText} from '../text-direction' + +describe('isRTLText', () => { + it('recognizes right-to-left text', () => { + expect(isRTLText('עברית')).toBe(true) + expect(isRTLText('العربية')).toBe(true) + }) + + it('recognizes left-to-right text', () => { + expect(isRTLText('English')).toBe(false) + }) + + it('uses the first strong directional character', () => { + expect(isRTLText(' 123 🦋 עברית English')).toBe(true) + expect(isRTLText(' 123 🦋 English עברית')).toBe(false) + }) + + it('defaults to left-to-right when there are no strong characters', () => { + expect(isRTLText('123 🦋 ...')).toBe(false) + expect(isRTLText('')).toBe(false) + }) +}) diff --git a/src/lib/strings/embed-player.test.ts b/src/lib/strings/embed-player.test.ts new file mode 100644 index 0000000000..c46fea6da8 --- /dev/null +++ b/src/lib/strings/embed-player.test.ts @@ -0,0 +1,20 @@ +import {type EmbedPlayerType, getEmbedPlayerMediaType} from './embed-player' + +describe('getEmbedPlayerMediaType', () => { + it.each< + readonly [EmbedPlayerType, ReturnType] + >([ + ['youtube_video', 'video'], + ['youtube_short', 'video'], + ['twitch_video', 'video'], + ['vimeo_video', 'video'], + ['spotify_song', 'audio'], + ['soundcloud_set', 'audio'], + ['apple_music_album', 'audio'], + ['bandcamp_track', 'audio'], + ['giphy_gif', 'gif'], + ['flickr_album', 'other'], + ])('classifies %s as %s', (type, expected) => { + expect(getEmbedPlayerMediaType(type)).toBe(expected) + }) +}) diff --git a/src/lib/strings/embed-player.ts b/src/lib/strings/embed-player.ts index 2bba205193..a580beb6d7 100644 --- a/src/lib/strings/embed-player.ts +++ b/src/lib/strings/embed-player.ts @@ -49,6 +49,29 @@ export type EmbedPlayerType = | 'bandcamp_album' | 'bandcamp_track' +export function getEmbedPlayerMediaType( + type: EmbedPlayerType, +): 'video' | 'audio' | 'gif' | 'other' { + if ( + type === 'youtube_video' || + type === 'youtube_short' || + type === 'twitch_video' || + type === 'vimeo_video' + ) { + return 'video' + } + if (type.endsWith('_gif')) return 'gif' + if ( + type.startsWith('spotify_') || + type.startsWith('soundcloud_') || + type.startsWith('apple_music_') || + type.startsWith('bandcamp_') + ) { + return 'audio' + } + return 'other' +} + export const externalEmbedLabels: Record = { youtube: 'YouTube', youtubeShorts: 'YouTube Shorts', diff --git a/src/lib/strings/feed-names.ts b/src/lib/strings/feed-names.ts new file mode 100644 index 0000000000..17936dcd56 --- /dev/null +++ b/src/lib/strings/feed-names.ts @@ -0,0 +1,19 @@ +import {type I18n} from '@lingui/core' +import {msg} from '@lingui/core/macro' + +import {DISCOVER_FEED_URI, TIMELINE_SAVED_FEED} from '#/lib/constants' + +type FeedNameSource = { + displayName: string + uri: string +} + +export function getLocalizedFeedName(feed: FeedNameSource, i18n: I18n): string { + if (feed.uri === TIMELINE_SAVED_FEED.value) { + return i18n._(msg({message: 'Following', context: 'feed-name'})) + } + if (feed.uri === DISCOVER_FEED_URI) { + return i18n._(msg({message: 'Discover', context: 'feed-name'})) + } + return feed.displayName +} diff --git a/src/lib/strings/text-direction.native.ts b/src/lib/strings/text-direction.native.ts new file mode 100644 index 0000000000..2276bdd4fa --- /dev/null +++ b/src/lib/strings/text-direction.native.ts @@ -0,0 +1,17 @@ +import bidiFactory from 'bidi-js' + +const bidi = bidiFactory() + +/** + * Checks the first strong directional character, matching HTML `dir="auto"`. + */ +export function isRTLText(text: string) { + for (const character of text) { + const type = bidi.getBidiCharTypeName(character) + + if (type === 'R' || type === 'AL') return true + if (type === 'L') return false + } + + return false +} diff --git a/src/lib/strings/text-direction.web.ts b/src/lib/strings/text-direction.web.ts new file mode 100644 index 0000000000..1f11ce2d42 --- /dev/null +++ b/src/lib/strings/text-direction.web.ts @@ -0,0 +1,7 @@ +/** + * React Native Web sets `dir="auto"` on root Text elements, so the browser + * handles direction detection without JavaScript. + */ +export function isRTLText(_text: string) { + return false +} diff --git a/src/locale/locales/en/messages.po b/src/locale/locales/en/messages.po index 9309af40ad..97d8d84717 100644 --- a/src/locale/locales/en/messages.po +++ b/src/locale/locales/en/messages.po @@ -208,7 +208,7 @@ msgid "{0, plural, other {+# more}}" msgstr "" #. placeholder {0}: aaRegionConfig.minAccessAge -#: src/screens/Signup/StepInfo/index.tsx:313 +#: src/screens/Signup/StepInfo/index.tsx:325 msgid "{0, plural, other {You must be # years of age or older to create an account in your region.}}" msgstr "" @@ -263,12 +263,12 @@ msgid "{0} is live" msgstr "" #. placeholder {0}: createFullHandle(draftValue, state.userDomain) -#: src/screens/Signup/StepHandle/index.tsx:211 +#: src/screens/Signup/StepHandle/index.tsx:212 msgid "{0} is not available" msgstr "" #. placeholder {0}: codeToLanguageName( expectedSourceLanguage, langPrefs.appLanguage, ) -#: src/lib/translation/index.tsx:314 +#: src/lib/translation/index.tsx:323 msgid "{0} is not supported by your device." msgstr "{0} is not supported by your device." @@ -683,7 +683,7 @@ msgid "{hours, plural, one {# hour} other {# hours}}" msgstr "" #. Badge indicating post count in a thread, e.g., the 3rd post of 5 total is '3/5' -#: src/screens/PostThread/components/ThreadItemPostNumber.tsx:95 +#: src/screens/PostThread/components/ThreadItemPostNumber.tsx:93 msgctxt "post-number-in-thread" msgid "{index}/{count}" msgstr "{index}/{count}" @@ -699,7 +699,7 @@ msgid "{JOIN_REQUESTS_THRESHOLD}+ new join requests" msgstr "{JOIN_REQUESTS_THRESHOLD}+ new join requests" #. Number of users (always at least 50) who have joined Bluesky using a specific starter pack -#: src/components/StarterPack/StarterPackCard.tsx:98 +#: src/components/StarterPack/StarterPackCard.tsx:99 msgid "{joinedAllTimeCount, plural, other {# users have}} joined!" msgstr "" @@ -817,7 +817,7 @@ msgid "+{0}" msgstr "+{0}" #. Indicates the number of additional profiles are in the Starter Pack e.g. +12 -#: src/screens/Search/components/StarterPackCard.tsx:250 +#: src/screens/Search/components/StarterPackCard.tsx:251 msgid "+{computedTotal}" msgstr "" @@ -872,7 +872,7 @@ msgstr "" #. Like count display, the <0> tags enclose the number of likes in bold (will never be 0) #. placeholder {0}: formatPostStatCount(likeCount) -#: src/screens/PostThread/components/LikesStat.tsx:44 +#: src/screens/PostThread/components/LikesStat.tsx:36 msgid "<0>{0} {likeCount, plural, one {like} other {likes}}" msgstr "<0>{0} {likeCount, plural, one {like} other {likes}}" @@ -971,7 +971,7 @@ msgstr "" msgid "A new code has been sent" msgstr "" -#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:94 +#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:95 msgid "A new form of verification" msgstr "" @@ -1066,12 +1066,12 @@ msgstr "" #: src/components/PostControls/PostMenu/PostMenuItems.tsx:423 #: src/screens/Messages/components/RequestButtons.tsx:104 #: src/screens/Messages/ConversationSettings/MemberMenu.tsx:122 -#: src/view/com/profile/ProfileMenu.tsx:223 +#: src/view/com/profile/ProfileMenu.tsx:211 msgctxt "toast" msgid "Account blocked" msgstr "" -#: src/view/com/profile/ProfileMenu.tsx:239 +#: src/view/com/profile/ProfileMenu.tsx:227 msgctxt "toast" msgid "Account followed" msgstr "" @@ -1085,7 +1085,7 @@ msgid "Account is deactivated" msgstr "" #: src/components/PostControls/PostMenu/PostMenuItems.tsx:464 -#: src/view/com/profile/ProfileMenu.tsx:159 +#: src/view/com/profile/ProfileMenu.tsx:147 msgctxt "toast" msgid "Account muted" msgstr "" @@ -1109,24 +1109,24 @@ msgstr "" #: src/screens/Messages/ConversationSettings/MemberMenu.tsx:109 #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:87 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:295 -#: src/view/com/profile/ProfileMenu.tsx:210 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:301 +#: src/view/com/profile/ProfileMenu.tsx:198 msgctxt "toast" msgid "Account unblocked" msgstr "" -#: src/view/com/profile/ProfileMenu.tsx:254 +#: src/view/com/profile/ProfileMenu.tsx:242 msgctxt "toast" msgid "Account unfollowed" msgstr "" #: src/components/PostControls/PostMenu/PostMenuItems.tsx:445 -#: src/view/com/profile/ProfileMenu.tsx:146 +#: src/view/com/profile/ProfileMenu.tsx:134 msgctxt "toast" msgid "Account unmuted" msgstr "" -#: src/components/verification/VerifierDialog.tsx:100 +#: src/components/verification/VerifierDialog.tsx:101 msgid "Accounts with a scalloped blue check mark <0><1/> can verify others. These trusted verifiers are selected by Bluesky." msgstr "" @@ -1203,7 +1203,7 @@ msgstr "" msgid "Add another post" msgstr "" -#: src/view/com/composer/Composer.tsx:2294 +#: src/view/com/composer/Composer.tsx:2296 msgid "Add another post to thread" msgstr "" @@ -1237,7 +1237,7 @@ msgstr "Add filter" msgid "Add group chat members" msgstr "Add group chat members" -#: src/view/com/feeds/ComposerPrompt.tsx:225 +#: src/view/com/feeds/ComposerPrompt.tsx:237 msgid "Add image" msgstr "" @@ -1305,12 +1305,12 @@ msgstr "" msgid "Add the following DNS record to your domain:" msgstr "" -#: src/components/FeedCard.tsx:335 +#: src/components/FeedCard.tsx:337 msgid "Add this feed to your feeds" msgstr "" -#: src/view/com/profile/ProfileMenu.tsx:393 -#: src/view/com/profile/ProfileMenu.tsx:396 +#: src/view/com/profile/ProfileMenu.tsx:377 +#: src/view/com/profile/ProfileMenu.tsx:380 msgid "Add to lists" msgstr "" @@ -1319,8 +1319,8 @@ msgid "Add to saved posts" msgstr "" #: src/components/dialogs/StarterPackDialog.tsx:181 -#: src/view/com/profile/ProfileMenu.tsx:384 -#: src/view/com/profile/ProfileMenu.tsx:387 +#: src/view/com/profile/ProfileMenu.tsx:368 +#: src/view/com/profile/ProfileMenu.tsx:371 msgid "Add to starter packs" msgstr "" @@ -1328,7 +1328,7 @@ msgstr "" msgid "Add user to list" msgstr "" -#: src/ageAssurance/components/NoAccessScreen.tsx:297 +#: src/ageAssurance/components/NoAccessScreen.tsx:299 msgid "Add your birthdate" msgstr "" @@ -1376,7 +1376,7 @@ msgstr "" msgid "Adult content" msgstr "" -#: src/components/moderation/ContentHider.tsx:129 +#: src/components/moderation/ContentHider.tsx:122 #: src/lib/moderation/useGlobalLabelStrings.ts:34 #: src/lib/moderation/useModerationCauseDescription.ts:146 #: src/view/com/composer/labels/LabelsBtn.tsx:123 @@ -1421,7 +1421,7 @@ msgstr "" msgid "Age assurance only takes a few minutes" msgstr "" -#: src/ageAssurance/components/NoAccessScreen.tsx:449 +#: src/ageAssurance/components/NoAccessScreen.tsx:451 msgid "Age assurance only takes a few minutes." msgstr "Age assurance only takes a few minutes." @@ -1472,7 +1472,7 @@ msgstr "" msgid "Allow access to your direct messages" msgstr "" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:447 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:453 msgid "Allow anyone to reply" msgstr "" @@ -1496,24 +1496,24 @@ msgstr "" msgid "Allow others to be notified of your posts" msgstr "" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:500 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:506 msgid "Allow people you follow to reply" msgstr "" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:514 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:520 msgid "Allow people you mention to reply" msgstr "" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:632 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:638 msgid "Allow quote posts" msgstr "" #. placeholder {0}: list.name -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:594 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:600 msgid "Allow users in {0} to reply" msgstr "" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:486 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:492 msgid "Allow your followers to reply" msgstr "" @@ -1527,7 +1527,7 @@ msgstr "" msgid "Already have a code?" msgstr "" -#: src/components/WelcomeModal.tsx:187 +#: src/components/WelcomeModal.tsx:190 msgid "Already have an account?" msgstr "" @@ -1607,7 +1607,7 @@ msgstr "" msgid "An error occurred while hiding suggestion. {0}" msgstr "" -#: src/components/Post/Embed/VideoEmbed/index.tsx:197 +#: src/components/Post/Embed/VideoEmbed/index.tsx:199 msgid "An error occurred while loading the video. Please try again later." msgstr "" @@ -1615,7 +1615,7 @@ msgstr "" msgid "An error occurred while loading the video. Please try again." msgstr "" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:577 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:583 msgid "An error occurred while loading your lists :/" msgstr "" @@ -1659,8 +1659,8 @@ msgstr "" msgid "An illustration of the Bluesky app with a paper airplane flying out of it, representing inviting friends" msgstr "An illustration of the Bluesky app with a paper airplane flying out of it, representing inviting friends" -#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:86 -#: src/components/verification/VerifierDialog.tsx:88 +#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:87 +#: src/components/verification/VerifierDialog.tsx:89 msgid "An illustration showing that Bluesky selects trusted verifiers, and trusted verifiers in turn verify individual user accounts." msgstr "" @@ -1684,14 +1684,14 @@ msgstr "An issue occurred starting the group chat, please try again." #: src/components/hooks/useFollowMethods.ts:35 #: src/components/hooks/useFollowMethods.ts:52 -#: src/components/ProfileCard.tsx:507 -#: src/components/ProfileCard.tsx:529 +#: src/components/ProfileCard.tsx:512 +#: src/components/ProfileCard.tsx:537 #: src/view/com/notifications/NotificationFeedItem.tsx:827 #: src/view/com/notifications/NotificationFeedItem.tsx:848 msgid "An issue occurred, please try again." msgstr "" -#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:121 +#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:122 msgid "An mockup of a iPhone showing the Bluesky app open to the profile of a verified user with a blue checkmark next to their display name." msgstr "" @@ -1733,7 +1733,7 @@ msgstr "" msgid "Any date" msgstr "Any date" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:453 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:459 msgid "Anyone" msgstr "" @@ -1872,12 +1872,12 @@ msgid "Apply Pull Request" msgstr "" #. placeholder {0}: niceDate(i18n, createdAt, 'medium') -#: src/screens/PostThread/components/ThreadItemAnchor.tsx:624 +#: src/screens/PostThread/components/ThreadItemAnchor.tsx:627 msgid "Archived from {0}" msgstr "" -#: src/screens/PostThread/components/ThreadItemAnchor.tsx:595 -#: src/screens/PostThread/components/ThreadItemAnchor.tsx:633 +#: src/screens/PostThread/components/ThreadItemAnchor.tsx:598 +#: src/screens/PostThread/components/ThreadItemAnchor.tsx:636 msgid "Archived post" msgstr "" @@ -1934,7 +1934,7 @@ msgstr "" msgid "Are you sure you want to leave this conversation? Your messages will be deleted for you, but not for the other participants." msgstr "Are you sure you want to leave this conversation? Your messages will be deleted for you, but not for the other participants." -#: src/components/FeedCard.tsx:371 +#: src/components/FeedCard.tsx:373 msgid "Are you sure you want to remove this from your feeds?" msgstr "" @@ -1943,7 +1943,7 @@ msgstr "" msgid "Are you sure you want to rescind your request to join {0}?" msgstr "Are you sure you want to rescind your request to join {0}?" -#: src/view/com/composer/Composer.tsx:1761 +#: src/view/com/composer/Composer.tsx:1763 msgid "Are you sure you'd like to discard this post?" msgstr "" @@ -2079,7 +2079,7 @@ msgstr "" msgid "Banned user returning" msgstr "" -#: src/ageAssurance/components/NoAccessScreen.tsx:184 +#: src/ageAssurance/components/NoAccessScreen.tsx:186 msgid "Based on your device's location, we think you're in <0>{geolocationString}." msgstr "Based on your device's location, we think you're in <0>{geolocationString}." @@ -2087,7 +2087,7 @@ msgstr "Based on your device's location, we think you're in <0>{geolocationStrin msgid "Based on your device's location, we think you're in <0>{region}." msgstr "Based on your device's location, we think you're in <0>{region}." -#: src/ageAssurance/components/NoAccessScreen.tsx:194 +#: src/ageAssurance/components/NoAccessScreen.tsx:196 msgid "Based on your network, we think you're in <0>{geolocationString}. This estimate may be inaccurate if you're using a VPN." msgstr "Based on your network, we think you're in <0>{geolocationString}. This estimate may be inaccurate if you're using a VPN." @@ -2195,8 +2195,8 @@ msgstr "Block {displayName}" #: src/components/PostControls/PostMenu/PostMenuItems.tsx:767 #: src/screens/Messages/components/RequestButtons.tsx:154 #: src/screens/Messages/components/RequestButtons.tsx:156 -#: src/view/com/profile/ProfileMenu.tsx:536 -#: src/view/com/profile/ProfileMenu.tsx:543 +#: src/view/com/profile/ProfileMenu.tsx:495 +#: src/view/com/profile/ProfileMenu.tsx:502 msgid "Block account" msgstr "" @@ -2297,11 +2297,11 @@ msgstr "bloomscrolling booksky" #: src/components/dialogs/ServerInput.tsx:144 #: src/components/dialogs/ServerInput.tsx:146 -#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:514 +#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:522 msgid "Bluesky" msgstr "" -#: src/screens/PostThread/components/ThreadItemAnchor.tsx:649 +#: src/screens/PostThread/components/ThreadItemAnchor.tsx:652 msgid "Bluesky cannot confirm the authenticity of the claimed date." msgstr "" @@ -2359,7 +2359,7 @@ msgstr "" msgid "Bluesky will not show your account to logged-out users and will ask other apps to do the same. Other apps may not honor this request. It doesn't make your account private." msgstr "Bluesky will not show your account to logged-out users and will ask other apps to do the same. Other apps may not honor this request. It doesn't make your account private." -#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:136 +#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:137 msgid "Bluesky will proactively verify notable and authentic accounts." msgstr "" @@ -2455,7 +2455,7 @@ msgstr "" #: src/components/LabelingServiceCard/index.tsx:62 #: src/components/moderation/ReportDialog/index.tsx:1092 #: src/screens/Messages/JoinRequest.tsx:185 -#: src/screens/Search/components/StarterPackCard.tsx:104 +#: src/screens/Search/components/StarterPackCard.tsx:105 #: src/screens/Search/Explore.tsx:957 msgid "By {0}" msgstr "" @@ -2469,7 +2469,7 @@ msgstr "by @{0}" #. placeholder {0}: createSanitizedDisplayName( joinLinkPreview.owner, true, moderateProfile(joinLinkPreview.owner, moderationOpts).ui( 'displayName', ), ) #. placeholder {0}: info.creatorHandle === TRENDING_HANDLE ? l`Bluesky` : sanitizeHandle(info.creatorHandle, '@') #: src/components/intents/GroupChatJoinDialog.tsx:384 -#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:502 +#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:510 msgid "By <0>{0}" msgstr "" @@ -2498,11 +2498,11 @@ msgstr "" msgid "By creating an account you agree to the <0>Terms of Service." msgstr "" -#: src/screens/Search/components/StarterPackCard.tsx:103 +#: src/screens/Search/components/StarterPackCard.tsx:104 msgid "By you" msgstr "" -#: src/view/com/composer/photos/OpenCameraBtn.tsx:68 +#: src/view/com/composer/photos/OpenCameraBtn.tsx:72 msgid "Camera" msgstr "" @@ -2523,8 +2523,8 @@ msgstr "Camera access needed" #: src/components/dialogs/InAppBrowserConsent.tsx:105 #: src/components/dialogs/lists/CreateListFromStarterPackDialog.tsx:191 #: src/components/dialogs/lists/CreateListFromStarterPackDialog.tsx:199 -#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:299 -#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:307 +#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:301 +#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:309 #: src/components/dialogs/nuxs/InviteFriendsAnnouncement.tsx:175 #: src/components/dialogs/nuxs/InviteFriendsAnnouncement.tsx:181 #: src/components/Menu/index.tsx:373 @@ -2559,8 +2559,8 @@ msgstr "Camera access needed" #: src/screens/Settings/Settings.tsx:312 #: src/screens/Takendown.tsx:100 #: src/screens/Takendown.tsx:103 -#: src/view/com/composer/Composer.tsx:1839 -#: src/view/com/composer/Composer.tsx:1849 +#: src/view/com/composer/Composer.tsx:1841 +#: src/view/com/composer/Composer.tsx:1851 #: src/view/com/composer/photos/EditImageDialog.web.tsx:44 #: src/view/com/composer/photos/EditImageDialog.web.tsx:53 #: src/view/shell/desktop/LeftNav.tsx:228 @@ -2588,8 +2588,8 @@ msgid "Cancels signing in so you can check your username" msgstr "Cancels signing in so you can check your username" #: src/components/PostControls/index.tsx:104 -#: src/components/PostControls/index.tsx:134 -#: src/components/PostControls/index.tsx:162 +#: src/components/PostControls/index.tsx:135 +#: src/components/PostControls/index.tsx:164 #: src/state/shell/composer/index.tsx:96 msgid "Cannot interact with a blocked user" msgstr "" @@ -2889,7 +2889,7 @@ msgstr "Choose your hosting provider" msgid "Choose your own timeline! Feeds built by the community help you find content you love." msgstr "" -#: src/screens/Signup/StepInfo/index.tsx:270 +#: src/screens/Signup/StepInfo/index.tsx:282 msgid "Choose your password" msgstr "" @@ -2945,11 +2945,11 @@ msgstr "Click here to add people to this group chat" msgid "Click here to create or manage an invite link for this group chat" msgstr "Click here to create or manage an invite link for this group chat" -#: src/ageAssurance/components/NoAccessScreen.tsx:327 +#: src/ageAssurance/components/NoAccessScreen.tsx:329 msgid "Click here to delete your account" msgstr "Click here to delete your account" -#: src/ageAssurance/components/NoAccessScreen.tsx:318 +#: src/ageAssurance/components/NoAccessScreen.tsx:320 msgid "Click here to log out" msgstr "" @@ -2962,8 +2962,8 @@ msgstr "Click here to resend the email" msgid "Click here to restart the verification process." msgstr "" -#: src/ageAssurance/components/NoAccessScreen.tsx:119 -#: src/ageAssurance/components/NoAccessScreen.tsx:294 +#: src/ageAssurance/components/NoAccessScreen.tsx:121 +#: src/ageAssurance/components/NoAccessScreen.tsx:296 msgid "Click here to update your birthdate" msgstr "" @@ -3001,8 +3001,8 @@ msgstr "" #: src/components/dialogs/nuxs/BookmarksAnnouncement.tsx:165 #: src/components/dialogs/nuxs/BookmarksAnnouncement.tsx:173 #: src/components/dialogs/nuxs/DraftsAnnouncement.tsx:140 -#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:178 -#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:187 +#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:179 +#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:188 #: src/components/dialogs/nuxs/LiveNowBetaDialog.tsx:192 #: src/components/dialogs/nuxs/LiveNowBetaDialog.tsx:200 #: src/components/dialogs/SearchablePeopleList.tsx:336 @@ -3026,8 +3026,8 @@ msgstr "" #: src/components/StarterPack/Wizard/WizardEditListDialog.tsx:119 #: src/components/StarterPack/Wizard/WizardEditListDialog.tsx:125 #: src/components/TrendingTopics.tsx:55 -#: src/components/verification/VerificationsDialog.tsx:146 -#: src/components/verification/VerifierDialog.tsx:147 +#: src/components/verification/VerificationsDialog.tsx:147 +#: src/components/verification/VerifierDialog.tsx:148 #: src/components/WhoCanReply.tsx:218 #: src/components/WhoCanReply.tsx:225 #: src/features/gifPicker/components/GifPickerErrorBoundary.tsx:45 @@ -3042,8 +3042,8 @@ msgstr "" msgid "Close" msgstr "" -#: src/components/Dialog/index.web.tsx:131 -#: src/components/Dialog/index.web.tsx:345 +#: src/components/Dialog/index.web.tsx:137 +#: src/components/Dialog/index.web.tsx:351 msgid "Close active dialog" msgstr "" @@ -3063,8 +3063,8 @@ msgstr "Close banner" #: src/components/dialogs/LanguageSelectDialog.tsx:354 #: src/components/dialogs/NotificationSettingsDialog.tsx:102 #: src/components/moderation/BlockDialog.tsx:198 -#: src/components/verification/VerificationsDialog.tsx:138 -#: src/components/verification/VerifierDialog.tsx:140 +#: src/components/verification/VerificationsDialog.tsx:139 +#: src/components/verification/VerifierDialog.tsx:141 #: src/features/gifPicker/components/GifPickerErrorBoundary.tsx:36 msgid "Close dialog" msgstr "" @@ -3105,7 +3105,7 @@ msgstr "Close the incoming requests banner" msgid "Close this dialog" msgstr "" -#: src/components/WelcomeModal.tsx:212 +#: src/components/WelcomeModal.tsx:215 msgid "Close welcome modal" msgstr "" @@ -3113,7 +3113,7 @@ msgstr "" msgid "Closes password update alert" msgstr "" -#: src/view/com/composer/Composer.tsx:1847 +#: src/view/com/composer/Composer.tsx:1849 msgid "Closes post composer and discards post draft" msgstr "" @@ -3152,7 +3152,7 @@ msgstr "" msgid "Community Guidelines" msgstr "" -#: src/screens/Onboarding/StepFinished/index.tsx:329 +#: src/screens/Onboarding/StepFinished/index.tsx:335 msgid "Complete onboarding and start using your account" msgstr "" @@ -3161,13 +3161,13 @@ msgid "Complete the challenge" msgstr "" #: src/lib/hotkeys/index.tsx:66 -#: src/view/com/feeds/ComposerPrompt.tsx:149 +#: src/view/com/feeds/ComposerPrompt.tsx:161 #: src/view/shell/desktop/LeftNav.tsx:586 msgid "Compose new post" msgstr "" #. placeholder {0}: MAX_GRAPHEME_LENGTH || 0 -#: src/view/com/composer/Composer.tsx:1723 +#: src/view/com/composer/Composer.tsx:1725 msgid "Compose posts up to {0, plural, other {# characters}} in length" msgstr "" @@ -3175,11 +3175,11 @@ msgstr "" msgid "Compose reply" msgstr "" -#: src/view/com/composer/Composer.tsx:2679 +#: src/view/com/composer/Composer.tsx:2681 msgid "Compressing GIF..." msgstr "" -#: src/view/com/composer/Composer.tsx:2681 +#: src/view/com/composer/Composer.tsx:2683 msgid "Compressing video..." msgstr "" @@ -3226,7 +3226,7 @@ msgstr "Connecting…" msgid "Connection issue" msgstr "" -#: src/ageAssurance/components/NoAccessScreen.tsx:404 +#: src/ageAssurance/components/NoAccessScreen.tsx:406 #: src/components/ageAssurance/AgeAssuranceAccountCard.tsx:128 #: src/components/ageAssurance/AgeAssuranceAppealDialog.tsx:31 msgid "Contact our moderation team" @@ -3416,8 +3416,8 @@ msgstr "" msgid "Copy App Password" msgstr "" -#: src/view/com/profile/ProfileMenu.tsx:575 -#: src/view/com/profile/ProfileMenu.tsx:578 +#: src/view/com/profile/ProfileMenu.tsx:534 +#: src/view/com/profile/ProfileMenu.tsx:537 msgid "Copy at:// URI" msgstr "" @@ -3432,8 +3432,8 @@ msgid "Copy code" msgstr "" #: src/screens/Settings/components/ChangeHandleDialog.tsx:504 -#: src/view/com/profile/ProfileMenu.tsx:584 -#: src/view/com/profile/ProfileMenu.tsx:587 +#: src/view/com/profile/ProfileMenu.tsx:543 +#: src/view/com/profile/ProfileMenu.tsx:546 msgid "Copy DID" msgstr "" @@ -3467,8 +3467,8 @@ msgstr "" msgid "Copy link to post" msgstr "" -#: src/view/com/profile/ProfileMenu.tsx:321 -#: src/view/com/profile/ProfileMenu.tsx:331 +#: src/view/com/profile/ProfileMenu.tsx:305 +#: src/view/com/profile/ProfileMenu.tsx:315 msgid "Copy link to profile" msgstr "" @@ -3650,8 +3650,8 @@ msgstr "" msgid "Create a starter pack for me" msgstr "" -#: src/components/WelcomeModal.tsx:153 -#: src/components/WelcomeModal.tsx:161 +#: src/components/WelcomeModal.tsx:156 +#: src/components/WelcomeModal.tsx:164 #: src/screens/Messages/JoinRequest.tsx:318 #: src/screens/Signup/index.tsx:139 #: src/view/com/auth/SplashScreen.tsx:108 @@ -3703,7 +3703,7 @@ msgstr "" msgid "Create list from starter pack" msgstr "" -#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:375 +#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:377 msgid "Create moderation list" msgstr "" @@ -3729,7 +3729,7 @@ msgstr "" msgid "Create starter pack" msgstr "" -#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:374 +#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:376 msgid "Create user list" msgstr "" @@ -3795,7 +3795,7 @@ msgstr "" msgid "Dark theme" msgstr "" -#: src/screens/Signup/StepInfo/index.tsx:298 +#: src/screens/Signup/StepInfo/index.tsx:310 msgid "Date of birth" msgstr "" @@ -3906,7 +3906,7 @@ msgstr "" #: src/components/PostControls/PostMenu/PostMenuItems.tsx:805 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:807 -#: src/view/com/composer/Composer.tsx:1735 +#: src/view/com/composer/Composer.tsx:1737 msgid "Delete post" msgstr "" @@ -3948,7 +3948,7 @@ msgstr "" msgid "Deleted list" msgstr "" -#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:461 +#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:463 #: src/components/SendErrorReportDialog.tsx:78 #: src/screens/Profile/Header/EditProfileDialog.tsx:360 #: src/screens/Profile/Header/EditProfileDialog.tsx:367 @@ -3988,7 +3988,7 @@ msgstr "" msgid "Developer options" msgstr "" -#: src/lib/translation/index.tsx:303 +#: src/lib/translation/index.tsx:312 msgid "Device failed to translate :(" msgstr "Device failed to translate :(" @@ -4036,11 +4036,11 @@ msgstr "" msgid "Disable link" msgstr "Disable link" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:624 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:630 msgid "Disable quote posts of this post" msgstr "" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:461 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:467 msgid "Disable replies entirely" msgstr "" @@ -4058,10 +4058,10 @@ msgstr "" #: src/components/dialogs/lists/CreateOrEditListDialog.tsx:102 #: src/screens/Profile/Header/EditProfileDialog.tsx:79 #: src/view/com/composer/Composer.tsx:1515 -#: src/view/com/composer/Composer.tsx:1559 -#: src/view/com/composer/Composer.tsx:1768 +#: src/view/com/composer/Composer.tsx:1560 +#: src/view/com/composer/Composer.tsx:1770 #: src/view/com/composer/drafts/DraftItem.tsx:243 -#: src/view/com/composer/drafts/DraftsButton.tsx:131 +#: src/view/com/composer/drafts/DraftsButton.tsx:128 msgid "Discard" msgstr "" @@ -4072,12 +4072,12 @@ msgstr "" #: src/view/com/composer/Composer.tsx:1513 #: src/view/com/composer/drafts/DraftItem.tsx:240 -#: src/view/com/composer/drafts/DraftsButton.tsx:98 +#: src/view/com/composer/drafts/DraftsButton.tsx:94 msgid "Discard draft?" msgstr "" #: src/view/com/composer/Composer.tsx:1530 -#: src/view/com/composer/Composer.tsx:1760 +#: src/view/com/composer/Composer.tsx:1762 msgid "Discard post?" msgstr "" @@ -4102,7 +4102,7 @@ msgid "Discover New Feeds" msgstr "" #: src/components/Dialog/index.tsx:405 -#: src/features/inviteFriends/components/FollowersPromoBanner.tsx:83 +#: src/features/inviteFriends/components/FollowersPromoBanner.tsx:86 msgid "Dismiss" msgstr "" @@ -4110,7 +4110,7 @@ msgstr "" msgid "Dismiss banner" msgstr "" -#: src/view/com/composer/Composer.tsx:2621 +#: src/view/com/composer/Composer.tsx:2623 msgid "Dismiss error" msgstr "" @@ -4212,8 +4212,8 @@ msgstr "" #: src/lib/media/picker.tsx:37 #: src/screens/Login/components/HostingProviderDialog.tsx:253 #: src/screens/Login/components/HostingProviderDialog.tsx:255 -#: src/screens/Onboarding/StepProfile/index.tsx:354 -#: src/screens/Onboarding/StepProfile/index.tsx:357 +#: src/screens/Onboarding/StepProfile/index.tsx:355 +#: src/screens/Onboarding/StepProfile/index.tsx:358 #: src/screens/Settings/components/AddAppPasswordDialog.tsx:214 #: src/screens/Settings/components/AddAppPasswordDialog.tsx:221 #: src/view/com/composer/labels/LabelsBtn.tsx:219 @@ -4231,7 +4231,7 @@ msgstr "" msgid "Double tap to close the dialog" msgstr "" -#: src/screens/VideoFeed/index.tsx:1198 +#: src/screens/VideoFeed/index.tsx:1200 msgid "Double tap to like" msgstr "" @@ -4275,8 +4275,8 @@ msgid "Doxxing" msgstr "" #: src/components/dialogs/nuxs/DraftsAnnouncement.tsx:120 -#: src/view/com/composer/drafts/DraftsButton.tsx:70 -#: src/view/com/composer/drafts/DraftsButton.tsx:79 +#: src/view/com/composer/drafts/DraftsButton.tsx:68 +#: src/view/com/composer/drafts/DraftsButton.tsx:77 #: src/view/com/composer/drafts/DraftsListDialog.tsx:119 msgid "Drafts" msgstr "" @@ -4313,19 +4313,19 @@ msgstr "" msgid "E.g. artistic nudes." msgstr "" -#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:378 +#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:380 msgid "e.g. Great Posters" msgstr "" -#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:379 +#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:381 msgid "e.g. Spammers" msgstr "" -#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:382 +#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:384 msgid "e.g. The posters who never miss." msgstr "" -#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:383 +#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:385 msgid "e.g. Users that repeatedly reply with ads." msgstr "" @@ -4349,7 +4349,7 @@ msgid "Edit" msgstr "" #: src/view/com/util/UserAvatar.tsx:464 -#: src/view/com/util/UserBanner.tsx:125 +#: src/view/com/util/UserBanner.tsx:132 msgid "Edit avatar" msgstr "" @@ -4396,12 +4396,12 @@ msgstr "Edit link settings" msgid "Edit list details" msgstr "" -#: src/view/com/profile/ProfileMenu.tsx:407 -#: src/view/com/profile/ProfileMenu.tsx:427 +#: src/view/com/profile/ProfileMenu.tsx:391 +#: src/view/com/profile/ProfileMenu.tsx:405 msgid "Edit live status" msgstr "" -#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:372 +#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:374 msgid "Edit moderation list" msgstr "" @@ -4430,13 +4430,13 @@ msgstr "" #: src/screens/Profile/Header/EditProfileDialog.tsx:265 #: src/screens/Profile/Header/EditProfileDialog.tsx:271 -#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:301 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:330 +#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:299 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:336 msgid "Edit profile" msgstr "" -#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:304 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:332 +#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:302 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:338 msgid "Edit Profile" msgstr "" @@ -4449,7 +4449,7 @@ msgstr "" msgid "Edit this group chat’s name" msgstr "Edit this group chat’s name" -#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:371 +#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:373 msgid "Edit user list" msgstr "" @@ -4470,7 +4470,7 @@ msgid "Either the creator of this list has blocked you or you have blocked the c msgstr "" #: src/screens/Settings/AccountSettings.tsx:69 -#: src/screens/Signup/StepInfo/index.tsx:222 +#: src/screens/Signup/StepInfo/index.tsx:234 msgid "Email" msgstr "" @@ -4487,7 +4487,7 @@ msgstr "" msgid "Email address" msgstr "" -#: src/components/intents/VerifyEmailIntentDialog.tsx:100 +#: src/components/intents/VerifyEmailIntentDialog.tsx:101 msgid "Email Resent" msgstr "" @@ -4503,7 +4503,7 @@ msgstr "" msgid "Email verification complete!" msgstr "" -#: src/components/intents/VerifyEmailIntentDialog.tsx:75 +#: src/components/intents/VerifyEmailIntentDialog.tsx:76 msgid "Email Verified" msgstr "" @@ -4573,7 +4573,7 @@ msgstr "" msgid "Enable push notifications" msgstr "" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:625 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:631 msgid "Enable quote posts of this post" msgstr "" @@ -4647,7 +4647,7 @@ msgid "Enter your birthdate" msgstr "" #: src/screens/Login/ForgotPasswordForm.tsx:100 -#: src/screens/Signup/StepInfo/index.tsx:242 +#: src/screens/Signup/StepInfo/index.tsx:254 msgid "Enter your email address" msgstr "" @@ -4668,7 +4668,7 @@ msgstr "" msgid "Entertainment" msgstr "" -#: src/view/com/composer/Composer.tsx:2699 +#: src/view/com/composer/Composer.tsx:2701 #: src/view/com/util/error/ErrorScreen.tsx:40 msgid "Error" msgstr "" @@ -4773,7 +4773,7 @@ msgstr "" msgid "Expand post text" msgstr "" -#: src/screens/VideoFeed/index.tsx:1074 +#: src/screens/VideoFeed/index.tsx:1076 msgid "Expands or collapses post text" msgstr "" @@ -4823,8 +4823,8 @@ msgstr "" msgid "Explore" msgstr "" -#: src/components/WelcomeModal.tsx:166 -#: src/components/WelcomeModal.tsx:175 +#: src/components/WelcomeModal.tsx:169 +#: src/components/WelcomeModal.tsx:178 msgid "Explore the app" msgstr "" @@ -5057,7 +5057,7 @@ msgstr "" msgid "Failed to mute group chat" msgstr "Failed to mute group chat" -#: src/state/queries/pinned-post.ts:80 +#: src/state/queries/pinned-post.ts:105 msgid "Failed to pin post" msgstr "" @@ -5125,7 +5125,7 @@ msgstr "Failed to save image" msgid "Failed to save image: {0}" msgstr "" -#: src/screens/ModerationInteractionSettings/index.tsx:110 +#: src/screens/ModerationInteractionSettings/index.tsx:112 msgid "Failed to save settings. Please try again." msgstr "" @@ -5175,7 +5175,7 @@ msgstr "" msgid "Failed to update email, please try again." msgstr "" -#: src/components/FeedCard.tsx:313 +#: src/components/FeedCard.tsx:315 msgid "Failed to update feeds" msgstr "" @@ -5224,7 +5224,7 @@ msgstr "" msgid "Feed identifier" msgstr "" -#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:401 +#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:403 msgid "Feed menu" msgstr "" @@ -5265,7 +5265,7 @@ msgstr "" msgid "Feeds are custom algorithms that users build with a little coding expertise. <0>See this guide for more information." msgstr "" -#: src/components/FeedCard.tsx:310 +#: src/components/FeedCard.tsx:312 #: src/screens/SavedFeeds.tsx:92 #: src/screens/SavedFeeds.tsx:271 msgctxt "toast" @@ -5316,7 +5316,7 @@ msgctxt "search" msgid "Filters" msgstr "Filters" -#: src/screens/Onboarding/StepFinished/index.tsx:335 +#: src/screens/Onboarding/StepFinished/index.tsx:341 msgid "Finalizing" msgstr "" @@ -5341,7 +5341,7 @@ msgstr "" msgid "Find accounts to follow" msgstr "" -#: src/features/inviteFriends/components/FollowersPromoBanner.tsx:49 +#: src/features/inviteFriends/components/FollowersPromoBanner.tsx:52 #: src/screens/Settings/FindContactsSettings.tsx:79 #: src/screens/Settings/Settings.tsx:220 #: src/screens/Settings/Settings.tsx:223 @@ -5419,13 +5419,13 @@ msgid "Focus the search field" msgstr "Focus the search field" #. User is not following this account, click to follow -#: src/components/ProfileCard.tsx:545 +#: src/components/ProfileCard.tsx:553 #: src/components/ProfileHoverCard/index.web.tsx:491 #: src/components/ProfileHoverCard/index.web.tsx:502 #: src/screens/Messages/ConversationSettings/Member.tsx:170 #: src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx:157 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:409 -#: src/screens/VideoFeed/index.tsx:957 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:415 +#: src/screens/VideoFeed/index.tsx:959 #: src/view/com/notifications/NotificationFeedItem.tsx:890 #: src/view/com/notifications/NotificationFeedItem.tsx:897 msgid "Follow" @@ -5433,7 +5433,7 @@ msgstr "" #. placeholder {0}: profile.handle #: src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx:144 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:397 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:403 msgid "Follow {0}" msgstr "" @@ -5441,7 +5441,7 @@ msgstr "" msgid "Follow {displayName}" msgstr "Follow {displayName}" -#: src/screens/VideoFeed/index.tsx:936 +#: src/screens/VideoFeed/index.tsx:938 msgid "Follow {handle}" msgstr "" @@ -5457,8 +5457,8 @@ msgstr "" msgid "Follow 7 accounts" msgstr "" -#: src/view/com/profile/ProfileMenu.tsx:361 -#: src/view/com/profile/ProfileMenu.tsx:372 +#: src/view/com/profile/ProfileMenu.tsx:345 +#: src/view/com/profile/ProfileMenu.tsx:356 msgid "Follow account" msgstr "" @@ -5479,9 +5479,9 @@ msgid "Follow all accounts" msgstr "" #. User is not following this account, click to follow back -#: src/components/ProfileCard.tsx:541 +#: src/components/ProfileCard.tsx:549 #: src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx:155 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:407 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:413 #: src/view/com/notifications/NotificationFeedItem.tsx:890 #: src/view/com/notifications/NotificationFeedItem.tsx:897 msgid "Follow back" @@ -5535,12 +5535,12 @@ msgstr "" #. User is following this account, click to unfollow #. User is following this account, click to unfollow -#: src/components/ProfileCard.tsx:536 +#: src/components/ProfileCard.tsx:544 #: src/components/ProfileHoverCard/index.web.tsx:490 #: src/components/ProfileHoverCard/index.web.tsx:501 #: src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx:160 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:405 -#: src/screens/VideoFeed/index.tsx:955 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:411 +#: src/screens/VideoFeed/index.tsx:957 #: src/view/com/notifications/NotificationFeedItem.tsx:869 #: src/view/com/notifications/NotificationFeedItem.tsx:885 msgid "Following" @@ -5552,11 +5552,11 @@ msgctxt "feed-name" msgid "Following" msgstr "" -#. placeholder {0}: sanitizeDisplayName( profile.displayName || profile.handle, moderation.ui('displayName'), ) -#. placeholder {0}: sanitizeDisplayName( profile.displayName || profile.handle, moderation.ui('displayName'), ) +#. placeholder {0}: sanitizeDisplayName( displayNameOrHandle, moderation.ui('displayName'), ) +#. placeholder {0}: sanitizeDisplayName( displayNameOrHandle, moderation.ui('displayName'), ) #. placeholder {0}: sanitizeDisplayName( profile.displayName || profile.handle, ) -#: src/components/ProfileCard.tsx:497 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:247 +#: src/components/ProfileCard.tsx:498 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:250 #: src/view/com/notifications/NotificationFeedItem.tsx:820 msgid "Following {0}" msgstr "" @@ -5565,7 +5565,7 @@ msgstr "" msgid "Following {displayName}" msgstr "Following {displayName}" -#: src/screens/VideoFeed/index.tsx:935 +#: src/screens/VideoFeed/index.tsx:937 msgid "Following {handle}" msgstr "" @@ -5596,7 +5596,7 @@ msgstr "" msgid "Food" msgstr "" -#: src/ageAssurance/components/NoAccessScreen.tsx:106 +#: src/ageAssurance/components/NoAccessScreen.tsx:108 msgid "For organizational accounts, use the birthdate of the person who is responsible for the account." msgstr "" @@ -5795,7 +5795,7 @@ msgstr "" msgid "GIF" msgstr "" -#: src/view/com/composer/Composer.tsx:2704 +#: src/view/com/composer/Composer.tsx:2706 msgid "GIF uploaded" msgstr "" @@ -5818,8 +5818,8 @@ msgstr "" #: src/screens/ProfileList/components/ErrorScreen.tsx:35 #: src/screens/ProfileList/components/ErrorScreen.tsx:41 #: src/screens/VideoFeed/components/Header.tsx:163 -#: src/screens/VideoFeed/index.tsx:1259 -#: src/screens/VideoFeed/index.tsx:1263 +#: src/screens/VideoFeed/index.tsx:1261 +#: src/screens/VideoFeed/index.tsx:1265 #: src/view/com/auth/LoggedOut.tsx:127 #: src/view/com/profile/ProfileFollowers.tsx:225 #: src/view/com/profile/ProfileFollowers.tsx:226 @@ -5850,8 +5850,8 @@ msgstr "" msgid "Go home" msgstr "" -#: src/view/com/profile/ProfileMenu.tsx:408 -#: src/view/com/profile/ProfileMenu.tsx:429 +#: src/view/com/profile/ProfileMenu.tsx:392 +#: src/view/com/profile/ProfileMenu.tsx:407 msgid "Go live" msgstr "" @@ -5862,8 +5862,8 @@ msgstr "" msgid "Go Live" msgstr "" -#: src/view/com/profile/ProfileMenu.tsx:405 -#: src/view/com/profile/ProfileMenu.tsx:425 +#: src/view/com/profile/ProfileMenu.tsx:389 +#: src/view/com/profile/ProfileMenu.tsx:403 msgid "Go live (disabled)" msgstr "" @@ -5872,7 +5872,7 @@ msgid "Go live for" msgstr "" #. placeholder {0}: name.displayName -#: src/screens/PostThread/components/LikesStat.tsx:130 +#: src/components/Post/KnownLikers.tsx:76 msgid "Go to {0}'s profile" msgstr "Go to {0}'s profile" @@ -6095,7 +6095,7 @@ msgstr "" msgid "Have a code? <0>Click here." msgstr "" -#: src/screens/Signup/StepInfo/index.tsx:322 +#: src/screens/Signup/StepInfo/index.tsx:334 msgid "Have we got your location wrong? <0>Tap here to update your location with GPS." msgstr "Have we got your location wrong? <0>Tap here to update your location with GPS." @@ -6128,11 +6128,11 @@ msgstr "" msgid "Hey there 👋" msgstr "" -#: src/ageAssurance/components/NoAccessScreen.tsx:171 +#: src/ageAssurance/components/NoAccessScreen.tsx:173 msgid "Hey there!" msgstr "" -#: src/ageAssurance/components/NoAccessScreen.tsx:276 +#: src/ageAssurance/components/NoAccessScreen.tsx:278 msgid "Hi there!" msgstr "" @@ -6141,7 +6141,7 @@ msgstr "" msgid "Hidden" msgstr "" -#: src/screens/VideoFeed/index.tsx:737 +#: src/screens/VideoFeed/index.tsx:739 msgid "Hidden by your moderation settings." msgstr "" @@ -6150,7 +6150,7 @@ msgid "Hidden list" msgstr "" #: src/components/interstitials/TrendingVideos.tsx:140 -#: src/components/moderation/ContentHider.tsx:217 +#: src/components/moderation/ContentHider.tsx:210 #: src/components/moderation/LabelPreference.tsx:141 #: src/components/moderation/PostHider.tsx:137 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:829 @@ -6174,7 +6174,7 @@ msgstr "" msgid "Hide group chat updates" msgstr "Hide group chat updates" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:529 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:535 msgid "Hide lists" msgstr "" @@ -6197,8 +6197,8 @@ msgstr "" msgid "Hide reply for me" msgstr "" -#: src/view/com/profile/ProfileMenu.tsx:488 -#: src/view/com/profile/ProfileMenu.tsx:495 +#: src/view/com/profile/ProfileMenu.tsx:447 +#: src/view/com/profile/ProfileMenu.tsx:454 msgid "Hide reposts in feeds" msgstr "Hide reposts in feeds" @@ -6239,12 +6239,12 @@ msgstr "" msgid "Hide verification badges" msgstr "" -#: src/components/moderation/ContentHider.tsx:168 +#: src/components/moderation/ContentHider.tsx:161 #: src/components/moderation/PostHider.tsx:91 msgid "Hides the content" msgstr "" -#: src/features/inviteFriends/components/FollowersPromoBanner.tsx:84 +#: src/features/inviteFriends/components/FollowersPromoBanner.tsx:87 msgid "Hides the invite friends promo banner" msgstr "Hides the invite friends promo banner" @@ -6372,11 +6372,11 @@ msgstr "" msgid "If you are 18 years of age or older and want to try again, click the button below and use a different verification method if one is available in your region. If you have questions or concerns, <0>our support team can help." msgstr "" -#: src/screens/Signup/StepInfo/index.tsx:339 +#: src/screens/Signup/StepInfo/index.tsx:351 msgid "If you are not yet an adult according to the laws of your country, your parent or legal guardian must read these Terms on your behalf." msgstr "" -#: src/ageAssurance/components/NoAccessScreen.tsx:116 +#: src/ageAssurance/components/NoAccessScreen.tsx:118 msgid "If you believe your birthdate is incorrect, you can update it by <0>clicking here." msgstr "" @@ -6498,7 +6498,7 @@ msgstr "" msgid "Import Contacts" msgstr "" -#: src/features/inviteFriends/components/FollowersPromoBanner.tsx:78 +#: src/features/inviteFriends/components/FollowersPromoBanner.tsx:81 msgid "Import contacts or invite your friends" msgstr "Import contacts or invite your friends" @@ -6512,7 +6512,7 @@ msgstr "" msgid "Imported on {0}" msgstr "" -#: src/ageAssurance/components/NoAccessScreen.tsx:279 +#: src/ageAssurance/components/NoAccessScreen.tsx:281 msgid "In order to provide an age-appropriate experience, we need to know your birthdate. This is a one-time thing, and your data will be kept private." msgstr "" @@ -6663,7 +6663,7 @@ msgstr "" msgid "Invalid rescind request." msgstr "Invalid rescind request." -#: src/components/intents/VerifyEmailIntentDialog.tsx:87 +#: src/components/intents/VerifyEmailIntentDialog.tsx:88 msgid "Invalid Verification Code" msgstr "" @@ -6675,15 +6675,15 @@ msgstr "" msgid "Invite {name} to join Bluesky" msgstr "" -#: src/screens/Signup/StepInfo/index.tsx:192 +#: src/screens/Signup/StepInfo/index.tsx:204 msgid "Invite code" msgstr "" -#: src/screens/Signup/state.ts:359 +#: src/screens/Signup/state.ts:360 msgid "Invite code not accepted. Check that you input it correctly and try again." msgstr "" -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:352 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:358 #: src/view/shell/Drawer.tsx:122 msgid "Invite friends" msgstr "Invite friends" @@ -6758,7 +6758,7 @@ msgstr "" msgid "It looks like some of your contacts have not tried to find you here yet. You can personally invite them by customizing a draft message we will provide." msgstr "" -#: src/screens/Signup/StepInfo/index.tsx:372 +#: src/screens/Signup/StepInfo/index.tsx:384 msgid "It's correct" msgstr "" @@ -6772,7 +6772,7 @@ msgid "It's just you right now! Add more people to your starter pack by searchin msgstr "" #. placeholder {0}: videoState.jobId -#: src/view/com/composer/Composer.tsx:2640 +#: src/view/com/composer/Composer.tsx:2642 msgid "Job ID: {0}" msgstr "" @@ -6812,9 +6812,9 @@ msgstr "" msgid "Journalism" msgstr "" -#: src/view/com/composer/Composer.tsx:1563 +#: src/view/com/composer/Composer.tsx:1558 #: src/view/com/composer/Composer.tsx:1573 -#: src/view/com/composer/drafts/DraftsButton.tsx:135 +#: src/view/com/composer/drafts/DraftsButton.tsx:126 msgid "Keep editing" msgstr "" @@ -6832,11 +6832,11 @@ msgid "Label reply for algo" msgstr "Label reply for algo" #. placeholder {0}: sanitizeDisplayName(desc.source!) -#: src/components/moderation/ContentHider.tsx:245 +#: src/components/moderation/ContentHider.tsx:238 msgid "Labeled by {0}." msgstr "" -#: src/components/moderation/ContentHider.tsx:243 +#: src/components/moderation/ContentHider.tsx:236 msgid "Labeled by the author." msgstr "" @@ -6879,12 +6879,12 @@ msgstr "" msgid "Larger" msgstr "" -#: src/ageAssurance/components/NoAccessScreen.tsx:443 +#: src/ageAssurance/components/NoAccessScreen.tsx:445 #: src/components/ageAssurance/AgeAssuranceAccountCard.tsx:179 msgid "Last initiated {timeAgo} ago" msgstr "" -#: src/ageAssurance/components/NoAccessScreen.tsx:441 +#: src/ageAssurance/components/NoAccessScreen.tsx:443 #: src/components/ageAssurance/AgeAssuranceAccountCard.tsx:177 msgid "Last initiated just now" msgstr "" @@ -6895,8 +6895,8 @@ msgstr "" msgid "Latest" msgstr "" -#: src/components/verification/VerificationsDialog.tsx:168 -#: src/components/verification/VerifierDialog.tsx:136 +#: src/components/verification/VerificationsDialog.tsx:169 +#: src/components/verification/VerifierDialog.tsx:137 #: src/screens/Moderation/VerificationSettings.tsx:50 #: src/screens/Profile/Header/EditProfileDialog.tsx:346 #: src/screens/Settings/components/ChangeHandleDialog.tsx:215 @@ -6938,8 +6938,8 @@ msgstr "" msgid "Learn more about self hosting your PDS." msgstr "" -#: src/components/moderation/ContentHider.tsx:166 -#: src/components/moderation/ContentHider.tsx:230 +#: src/components/moderation/ContentHider.tsx:159 +#: src/components/moderation/ContentHider.tsx:223 msgid "Learn more about the moderation applied to this content" msgstr "" @@ -6956,8 +6956,8 @@ msgstr "" msgid "Learn more about this warning" msgstr "" -#: src/components/verification/VerificationsDialog.tsx:153 -#: src/components/verification/VerifierDialog.tsx:122 +#: src/components/verification/VerificationsDialog.tsx:154 +#: src/components/verification/VerifierDialog.tsx:123 msgctxt "english-only-resource" msgid "Learn more about verification on Bluesky" msgstr "" @@ -6976,7 +6976,7 @@ msgid "Learn more in your <0>account settings." msgstr "" #: src/components/dialogs/ServerInput.tsx:222 -#: src/components/moderation/ContentHider.tsx:253 +#: src/components/moderation/ContentHider.tsx:246 #: src/screens/Login/components/HostingProviderDialog.tsx:243 msgid "Learn more." msgstr "" @@ -7052,7 +7052,7 @@ msgstr "" msgid "Let's get your password reset!" msgstr "" -#: src/screens/Onboarding/StepFinished/index.tsx:337 +#: src/screens/Onboarding/StepFinished/index.tsx:343 msgid "Let's go!" msgstr "" @@ -7067,13 +7067,13 @@ msgctxt "Name of app icon variant" msgid "Light" msgstr "" -#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:564 +#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:572 msgid "Like" msgstr "" #. Accessibility label for the like button when the post has not been liked, verb form followed by number of likes and noun form #. placeholder {0}: post.likeCount || 0 -#: src/components/PostControls/index.tsx:280 +#: src/components/PostControls/index.tsx:282 msgid "Like ({0, plural, one {# like} other {# likes}})" msgstr "" @@ -7086,7 +7086,7 @@ msgstr "" msgid "Like 10 posts to train the Discover feed" msgstr "" -#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:552 +#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:560 msgid "Like this feed" msgstr "" @@ -7112,26 +7112,26 @@ msgstr "" msgid "Liked by {0, plural, one {# user} other {# users}}" msgstr "" -#. Social proof below the post stats; the bolded name is a person the viewer follows who liked the post +#. Social proof below a post; the bolded name is a person the viewer follows who liked the post #. placeholder {0}: nameLink(names[0]) #. placeholder {0}: names[0].displayName -#: src/screens/PostThread/components/LikesStat.tsx:116 -#: src/screens/PostThread/components/LikesStat.tsx:157 +#: src/components/Post/KnownLikers.tsx:68 +#: src/components/Post/KnownLikers.tsx:105 msgid "Liked by {0}" msgstr "Liked by {0}" -#. Social proof below the post stats; the bolded names are people the viewer follows who liked the post +#. Social proof below a post; the bolded names are people the viewer follows who liked the post #. placeholder {0}: nameLink(names[0]) #. placeholder {0}: names[0].displayName #. placeholder {1}: nameLink(names[1]) #. placeholder {1}: names[1].displayName -#: src/screens/PostThread/components/LikesStat.tsx:115 -#: src/screens/PostThread/components/LikesStat.tsx:153 +#: src/components/Post/KnownLikers.tsx:67 +#: src/components/Post/KnownLikers.tsx:101 msgid "Liked by {0} and {1}" msgstr "Liked by {0} and {1}" #: src/components/LabelingServiceCard/index.tsx:96 -#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:540 +#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:548 #: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:165 #: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:179 msgid "Liked by {likeCount, plural, one {# user} other {# users}}" @@ -7150,7 +7150,7 @@ msgstr "" msgid "Likes of your reposts" msgstr "" -#: src/screens/PostThread/components/LikesStat.tsx:39 +#: src/screens/PostThread/components/LikesStat.tsx:31 msgid "Likes on this post" msgstr "" @@ -7167,7 +7167,7 @@ msgstr "Link copied to clipboard" msgid "List" msgstr "" -#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:405 +#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:407 msgid "List avatar" msgstr "" @@ -7204,11 +7204,11 @@ msgctxt "toast" msgid "List deleted" msgstr "" -#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:454 +#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:456 msgid "List description" msgstr "" -#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:474 +#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:476 msgid "List description is too long. {DESCRIPTION_MAX_GRAPHEMES, plural, other {The maximum number of characters is #.}}" msgstr "" @@ -7220,7 +7220,7 @@ msgstr "" msgid "List Hidden" msgstr "" -#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:446 +#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:448 msgid "List must have a name." msgstr "" @@ -7229,21 +7229,21 @@ msgctxt "toast" msgid "List muted" msgstr "" -#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:418 +#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:420 msgid "List name" msgstr "" -#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:438 +#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:440 msgid "List name is too long. {DISPLAY_NAME_MAX_GRAPHEMES, plural, other {The maximum number of characters is #.}}" msgstr "" -#: src/screens/ProfileList/components/Header.tsx:116 +#: src/screens/ProfileList/components/Header.tsx:120 #: src/screens/ProfileList/components/MoreOptionsMenu.tsx:131 msgctxt "toast" msgid "List unblocked" msgstr "" -#: src/screens/ProfileList/components/Header.tsx:102 +#: src/screens/ProfileList/components/Header.tsx:106 #: src/screens/ProfileList/components/MoreOptionsMenu.tsx:117 msgctxt "toast" msgid "List unmuted" @@ -7323,7 +7323,7 @@ msgctxt "placeholder" msgid "Loading chat…" msgstr "Loading chat…" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:571 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:577 msgid "Loading lists..." msgstr "" @@ -7647,12 +7647,12 @@ msgstr "" msgid "Moderation list by you" msgstr "" -#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:264 +#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:233 msgctxt "toast" msgid "Moderation list created" msgstr "" -#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:250 +#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:230 msgctxt "toast" msgid "Moderation list updated" msgstr "" @@ -7695,8 +7695,8 @@ msgstr "" #: src/screens/ProfileList/components/MoreOptionsMenu.tsx:145 #: src/view/com/composer/drafts/DraftItem.tsx:191 -#: src/view/com/profile/ProfileMenu.tsx:292 -#: src/view/com/profile/ProfileMenu.tsx:299 +#: src/view/com/profile/ProfileMenu.tsx:280 +#: src/view/com/profile/ProfileMenu.tsx:286 msgid "More options" msgstr "" @@ -7734,8 +7734,8 @@ msgstr "Mute {0}" #: src/components/PostControls/PostMenu/PostMenuItems.tsx:748 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:754 -#: src/view/com/profile/ProfileMenu.tsx:512 -#: src/view/com/profile/ProfileMenu.tsx:519 +#: src/view/com/profile/ProfileMenu.tsx:471 +#: src/view/com/profile/ProfileMenu.tsx:478 msgid "Mute account" msgstr "" @@ -7854,7 +7854,7 @@ msgstr "" msgid "My starter pack" msgstr "My starter pack" -#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:424 +#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:426 msgid "Name" msgstr "" @@ -7864,12 +7864,12 @@ msgstr "" #. placeholder {0}: record.name #. placeholder {0}: view.record.name -#: src/components/StarterPack/StarterPackCard.tsx:127 -#: src/components/StarterPack/StarterPackCard.tsx:157 +#: src/components/StarterPack/StarterPackCard.tsx:128 +#: src/components/StarterPack/StarterPackCard.tsx:158 msgid "Navigate to {0}" msgstr "" -#: src/components/StarterPack/StarterPackCard.tsx:128 +#: src/components/StarterPack/StarterPackCard.tsx:129 msgid "Navigate to starter pack" msgstr "" @@ -7892,10 +7892,6 @@ msgstr "" msgid "Nevermind, create a handle for me" msgstr "" -#: src/view/com/profile/ProfileMenu.tsx:441 -msgid "New" -msgstr "" - #: src/view/screens/Lists.tsx:71 #: src/view/screens/ModerationModlists.tsx:72 msgctxt "action" @@ -7949,7 +7945,7 @@ msgstr "" #: src/components/dialogs/nuxs/ActivitySubscriptions.tsx:75 #: src/components/dialogs/nuxs/BookmarksAnnouncement.tsx:74 #: src/components/dialogs/nuxs/DraftsAnnouncement.tsx:85 -#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:65 +#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:66 #: src/components/dialogs/nuxs/InviteFriendsAnnouncement.tsx:129 msgid "New Feature" msgstr "" @@ -8061,8 +8057,8 @@ msgstr "" #: src/screens/Login/ForgotPasswordForm.tsx:154 #: src/screens/Login/SetNewPasswordForm.tsx:176 #: src/screens/Login/SetNewPasswordForm.tsx:182 -#: src/screens/Onboarding/StepFinished/index.tsx:330 -#: src/screens/Onboarding/StepFinished/index.tsx:339 +#: src/screens/Onboarding/StepFinished/index.tsx:336 +#: src/screens/Onboarding/StepFinished/index.tsx:345 #: src/screens/Settings/components/AddAppPasswordDialog.tsx:157 #: src/screens/Settings/components/AddAppPasswordDialog.tsx:165 #: src/screens/Signup/BackNextButtons.tsx:68 @@ -8167,11 +8163,11 @@ msgstr "" msgid "No lists" msgstr "" -#. placeholder {0}: sanitizeDisplayName( profile.displayName || profile.handle, moderation.ui('displayName'), ) -#. placeholder {0}: sanitizeDisplayName( profile.displayName || profile.handle, moderation.ui('displayName'), ) +#. placeholder {0}: sanitizeDisplayName( displayNameOrHandle, moderation.ui('displayName'), ) +#. placeholder {0}: sanitizeDisplayName( displayNameOrHandle, moderation.ui('displayName'), ) #. placeholder {0}: sanitizeDisplayName( profile.displayName || profile.handle, ) -#: src/components/ProfileCard.tsx:520 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:273 +#: src/components/ProfileCard.tsx:526 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:279 #: src/view/com/notifications/NotificationFeedItem.tsx:841 msgid "No longer following {0}" msgstr "" @@ -8308,7 +8304,7 @@ msgstr "" msgid "No thanks" msgstr "" -#: src/lib/translation/index.tsx:308 +#: src/lib/translation/index.tsx:317 msgid "No translation received from your device." msgstr "No translation received from your device." @@ -8316,7 +8312,7 @@ msgstr "No translation received from your device." msgid "No video posts yet" msgstr "" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:467 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:473 msgid "Nobody" msgstr "" @@ -8380,7 +8376,7 @@ msgstr "" msgid "Not ready to hit post? Keep your best ideas in Drafts until the timing is just right." msgstr "" -#: src/view/com/profile/ProfileMenu.tsx:620 +#: src/view/com/profile/ProfileMenu.tsx:579 msgid "Note about sharing" msgstr "" @@ -8463,7 +8459,7 @@ msgstr "" #: src/components/dms/InitiateChatFlow.tsx:838 #: src/components/dms/MessageItem.tsx:758 #: src/screens/Login/PasswordUpdatedForm.tsx:35 -#: src/screens/PostThread/components/ThreadItemAnchor.tsx:655 +#: src/screens/PostThread/components/ThreadItemAnchor.tsx:658 msgid "Okay" msgstr "" @@ -8614,7 +8610,7 @@ msgstr "Open advanced search options" msgid "Open avatar creator" msgstr "" -#: src/view/com/feeds/ComposerPrompt.tsx:203 +#: src/view/com/feeds/ComposerPrompt.tsx:215 msgid "Open camera" msgstr "" @@ -8641,7 +8637,7 @@ msgid "Open drawer menu" msgstr "" #: src/screens/Messages/components/MessageComposer.tsx:216 -#: src/view/com/composer/Composer.tsx:2271 +#: src/view/com/composer/Composer.tsx:2273 msgid "Open emoji picker" msgstr "" @@ -8694,7 +8690,7 @@ msgstr "" msgid "Open muted words and tags settings" msgstr "" -#: src/screens/Search/components/StarterPackCard.tsx:120 +#: src/screens/Search/components/StarterPackCard.tsx:121 msgid "Open pack" msgstr "" @@ -8765,7 +8761,7 @@ msgstr "" msgid "Opens alt text dialog" msgstr "" -#: src/view/com/composer/photos/OpenCameraBtn.tsx:69 +#: src/view/com/composer/photos/OpenCameraBtn.tsx:73 msgid "Opens camera on device" msgstr "" @@ -8781,7 +8777,7 @@ msgstr "" msgid "Opens composer" msgstr "" -#: src/view/com/feeds/ComposerPrompt.tsx:204 +#: src/view/com/feeds/ComposerPrompt.tsx:216 msgid "Opens device camera" msgstr "" @@ -8810,7 +8806,7 @@ msgstr "Opens full image" msgid "Opens helpdesk in browser" msgstr "" -#: src/view/com/feeds/ComposerPrompt.tsx:226 +#: src/view/com/feeds/ComposerPrompt.tsx:238 msgid "Opens image picker" msgstr "" @@ -8831,7 +8827,7 @@ msgstr "" msgid "Opens profile" msgstr "Opens profile" -#: src/features/inviteFriends/components/FollowersPromoBanner.tsx:50 +#: src/features/inviteFriends/components/FollowersPromoBanner.tsx:53 msgid "Opens the find and invite friends settings" msgstr "Opens the find and invite friends settings" @@ -8844,7 +8840,7 @@ msgstr "Opens the GIF picker dialog" msgid "Opens the invite friends sheet to share your profile" msgstr "Opens the invite friends sheet to share your profile" -#: src/view/com/feeds/ComposerPrompt.tsx:150 +#: src/view/com/feeds/ComposerPrompt.tsx:162 msgid "Opens the post composer" msgstr "" @@ -8962,7 +8958,7 @@ msgstr "Party GIFs" #: src/screens/Settings/AccountSettings.tsx:124 #: src/screens/Settings/AccountSettings.tsx:128 #: src/screens/Settings/components/DeleteAccountDialog.tsx:290 -#: src/screens/Signup/StepInfo/index.tsx:257 +#: src/screens/Signup/StepInfo/index.tsx:269 msgid "Password" msgstr "" @@ -9047,11 +9043,11 @@ msgstr "People I follow can join instantly" msgid "People I follow can request to join" msgstr "People I follow can request to join" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:506 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:512 msgid "People you follow" msgstr "" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:520 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:526 msgid "People you mention" msgstr "" @@ -9092,15 +9088,15 @@ msgstr "Pick a color theme" msgid "Pictures meant for adults." msgstr "" -#: src/components/FeedCard.tsx:361 -#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:569 -#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:578 +#: src/components/FeedCard.tsx:363 +#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:577 +#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:586 #: src/screens/SavedFeeds.tsx:559 msgid "Pin feed" msgstr "" -#: src/screens/ProfileList/components/Header.tsx:152 -#: src/screens/ProfileList/components/Header.tsx:159 +#: src/screens/ProfileList/components/Header.tsx:156 +#: src/screens/ProfileList/components/Header.tsx:163 msgid "Pin to home" msgstr "" @@ -9128,7 +9124,7 @@ msgstr "" msgid "Pinned Feeds" msgstr "" -#: src/screens/ProfileList/components/Header.tsx:78 +#: src/screens/ProfileList/components/Header.tsx:72 msgid "Pinned to your feeds" msgstr "" @@ -9146,7 +9142,7 @@ msgstr "" msgid "Play GIF" msgstr "" -#: src/components/Post/Embed/VideoEmbed/index.tsx:178 +#: src/components/Post/Embed/VideoEmbed/index.tsx:180 #: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/web-controls/VideoControls.tsx:334 msgid "Play video" msgstr "" @@ -9184,7 +9180,7 @@ msgid "Please choose your handle." msgstr "" #: src/screens/Signup/state.ts:299 -#: src/screens/Signup/StepInfo/index.tsx:148 +#: src/screens/Signup/StepInfo/index.tsx:160 msgid "Please choose your password." msgstr "" @@ -9201,7 +9197,7 @@ msgid "Please confirm your email address to upload videos." msgstr "" #: src/components/ageAssurance/AgeAssuranceInitDialog.tsx:104 -#: src/screens/Signup/StepInfo/index.tsx:138 +#: src/screens/Signup/StepInfo/index.tsx:150 msgid "Please double-check that you have entered your email address correctly." msgstr "" @@ -9250,11 +9246,11 @@ msgid "Please enter the security code we sent to your previous email address." msgstr "" #: src/screens/Signup/state.ts:283 -#: src/screens/Signup/StepInfo/index.tsx:121 +#: src/screens/Signup/StepInfo/index.tsx:133 msgid "Please enter your email." msgstr "" -#: src/screens/Signup/StepInfo/index.tsx:114 +#: src/screens/Signup/StepInfo/index.tsx:126 msgid "Please enter your invite code." msgstr "" @@ -9344,18 +9340,18 @@ msgstr "" msgid "Porn" msgstr "" -#: src/view/com/composer/Composer.tsx:1913 +#: src/view/com/composer/Composer.tsx:1915 msgctxt "action" msgid "Post" msgstr "" -#: src/screens/PostThread/index.tsx:560 +#: src/screens/PostThread/index.tsx:561 msgctxt "description" msgid "Post" msgstr "" #. Screen reader label indicating post count in a thread, e.g., the 3rd post of 5 total is 'Post 3 of 5' -#: src/screens/PostThread/components/ThreadItemPostNumber.tsx:80 +#: src/screens/PostThread/components/ThreadItemPostNumber.tsx:78 msgctxt "post-number-in-thread" msgid "Post {index} of {count}" msgstr "Post {index} of {count}" @@ -9370,7 +9366,7 @@ msgstr "" msgid "Post a video" msgstr "" -#: src/view/com/composer/Composer.tsx:1911 +#: src/view/com/composer/Composer.tsx:1913 msgctxt "action" msgid "Post All" msgstr "" @@ -9400,7 +9396,7 @@ msgstr "" msgid "Post failed to upload. Please check your Internet connection and try again." msgstr "" -#: src/screens/PostThread/components/ThreadItemAnchor.tsx:134 +#: src/screens/PostThread/components/ThreadItemAnchor.tsx:135 #: src/screens/PostThread/components/ThreadItemPost.tsx:121 #: src/screens/PostThread/components/ThreadItemTreePost.tsx:112 #: src/screens/VideoFeed/index.tsx:553 @@ -9417,7 +9413,7 @@ msgstr "" msgid "Post Hidden by You" msgstr "" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:681 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:687 msgid "Post interaction settings" msgstr "" @@ -9445,7 +9441,7 @@ msgstr "Post link" msgid "Post not found" msgstr "" -#: src/state/queries/pinned-post.ts:64 +#: src/state/queries/pinned-post.ts:89 msgctxt "toast" msgid "Post pinned" msgstr "" @@ -9455,7 +9451,7 @@ msgstr "" msgid "Post type" msgstr "Post type" -#: src/state/queries/pinned-post.ts:66 +#: src/state/queries/pinned-post.ts:91 msgctxt "toast" msgid "Post unpinned" msgstr "" @@ -9559,11 +9555,11 @@ msgstr "" msgid "Privacy violation of a minor" msgstr "" -#: src/view/com/composer/Composer.tsx:2693 +#: src/view/com/composer/Composer.tsx:2695 msgid "Processing GIF..." msgstr "" -#: src/view/com/composer/Composer.tsx:2695 +#: src/view/com/composer/Composer.tsx:2697 msgid "Processing video..." msgstr "" @@ -9610,22 +9606,22 @@ msgid "Public, sharable lists of users to mute or block in bulk." msgstr "" #. Accessibility label for button to publish a single post -#: src/view/com/composer/Composer.tsx:1897 +#: src/view/com/composer/Composer.tsx:1899 msgid "Publish post" msgstr "" #. Accessibility label for button to publish multiple posts in a thread -#: src/view/com/composer/Composer.tsx:1892 +#: src/view/com/composer/Composer.tsx:1894 msgid "Publish posts" msgstr "" #. Accessibility label for button to publish multiple replies in a thread -#: src/view/com/composer/Composer.tsx:1881 +#: src/view/com/composer/Composer.tsx:1883 msgid "Publish replies" msgstr "" #. Accessibility label for button to publish a single reply -#: src/view/com/composer/Composer.tsx:1886 +#: src/view/com/composer/Composer.tsx:1888 msgid "Publish reply" msgstr "" @@ -9736,16 +9732,16 @@ msgctxt "english-only-resource" msgid "Read about how to use advanced search filters" msgstr "Read about how to use advanced search filters" -#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:162 -#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:173 +#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:163 +#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:174 msgid "Read blog post" msgstr "" -#: src/screens/VideoFeed/index.tsx:1075 +#: src/screens/VideoFeed/index.tsx:1077 msgid "Read less" msgstr "" -#: src/screens/VideoFeed/index.tsx:1075 +#: src/screens/VideoFeed/index.tsx:1077 msgid "Read more" msgstr "" @@ -9771,11 +9767,11 @@ msgstr "" msgid "Read the Bluesky Terms of Service" msgstr "" -#: src/components/WelcomeModal.tsx:144 +#: src/components/WelcomeModal.tsx:147 msgid "Real conversations." msgstr "" -#: src/components/WelcomeModal.tsx:142 +#: src/components/WelcomeModal.tsx:145 msgid "Real people." msgstr "" @@ -9839,7 +9835,7 @@ msgstr "" #: src/components/dialogs/MutedWords.tsx:459 #: src/components/dialogs/StarterPackDialog.tsx:368 #: src/components/dialogs/StarterPackDialog.tsx:378 -#: src/components/FeedCard.tsx:373 +#: src/components/FeedCard.tsx:375 #: src/components/StarterPack/Wizard/WizardListCard.tsx:105 #: src/components/StarterPack/Wizard/WizardListCard.tsx:112 #: src/screens/Bookmarks.tsx:256 @@ -9891,8 +9887,8 @@ msgstr "" msgid "Remove Avatar" msgstr "" -#: src/view/com/util/UserBanner.tsx:193 -#: src/view/com/util/UserBanner.tsx:196 +#: src/view/com/util/UserBanner.tsx:200 +#: src/view/com/util/UserBanner.tsx:203 msgid "Remove Banner" msgstr "" @@ -9947,7 +9943,7 @@ msgstr "" msgid "Remove from saved posts" msgstr "" -#: src/components/FeedCard.tsx:370 +#: src/components/FeedCard.tsx:372 msgid "Remove from your feeds?" msgstr "" @@ -9996,9 +9992,9 @@ msgid "Remove user from list" msgstr "" #: src/components/verification/VerificationRemovePrompt.tsx:48 -#: src/components/verification/VerificationsDialog.tsx:250 -#: src/view/com/profile/ProfileMenu.tsx:459 -#: src/view/com/profile/ProfileMenu.tsx:462 +#: src/components/verification/VerificationsDialog.tsx:251 +#: src/view/com/profile/ProfileMenu.tsx:418 +#: src/view/com/profile/ProfileMenu.tsx:421 msgid "Remove verification" msgstr "" @@ -10118,14 +10114,14 @@ msgstr "" msgid "Reply" msgstr "Reply" -#: src/view/com/composer/Composer.tsx:1909 +#: src/view/com/composer/Composer.tsx:1911 msgctxt "action" msgid "Reply" msgstr "" #. Accessibility label for the reply button, verb form followed by number of replies and noun form #. placeholder {0}: post.replyCount || 0 -#: src/components/PostControls/index.tsx:236 +#: src/components/PostControls/index.tsx:238 msgid "Reply ({0, plural, one {# reply} other {# replies}})" msgstr "" @@ -10139,7 +10135,7 @@ msgstr "" msgid "Reply Hidden by You" msgstr "" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:414 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:420 msgid "Reply settings are chosen by the author of the thread" msgstr "" @@ -10162,8 +10158,8 @@ msgstr "" msgid "Report" msgstr "" -#: src/view/com/profile/ProfileMenu.tsx:557 -#: src/view/com/profile/ProfileMenu.tsx:560 +#: src/view/com/profile/ProfileMenu.tsx:516 +#: src/view/com/profile/ProfileMenu.tsx:519 msgid "Report account" msgstr "" @@ -10179,8 +10175,8 @@ msgstr "" msgid "Report dialog" msgstr "" -#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:596 -#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:602 +#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:604 +#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:610 msgid "Report feed" msgstr "" @@ -10307,12 +10303,12 @@ msgstr "" msgid "Reposts of your reposts" msgstr "" -#: src/view/com/profile/ProfileMenu.tsx:192 +#: src/view/com/profile/ProfileMenu.tsx:180 msgctxt "toast" msgid "Reposts will be hidden in feeds" msgstr "Reposts will be hidden in feeds" -#: src/view/com/profile/ProfileMenu.tsx:177 +#: src/view/com/profile/ProfileMenu.tsx:165 msgctxt "toast" msgid "Reposts will be shown in feeds" msgstr "Reposts will be shown in feeds" @@ -10363,7 +10359,7 @@ msgstr "" msgid "Require an email code to sign in to your account." msgstr "" -#: src/screens/Signup/StepInfo/index.tsx:206 +#: src/screens/Signup/StepInfo/index.tsx:218 msgid "Required for this provider" msgstr "" @@ -10400,11 +10396,11 @@ msgstr "" msgid "Resend email" msgstr "" -#: src/components/intents/VerifyEmailIntentDialog.tsx:125 +#: src/components/intents/VerifyEmailIntentDialog.tsx:126 msgid "Resend Email" msgstr "" -#: src/components/intents/VerifyEmailIntentDialog.tsx:118 +#: src/components/intents/VerifyEmailIntentDialog.tsx:119 msgid "Resend Verification Email" msgstr "" @@ -10498,7 +10494,7 @@ msgstr "" #: src/screens/ProfileList/components/ErrorScreen.tsx:36 #: src/screens/Settings/components/ChangeHandleDialog.tsx:577 -#: src/screens/VideoFeed/index.tsx:1260 +#: src/screens/VideoFeed/index.tsx:1262 #: src/view/screens/NotFound.tsx:54 msgid "Returns to previous page" msgstr "" @@ -10517,10 +10513,10 @@ msgid "Sad GIFs" msgstr "Sad GIFs" #: src/components/dialogs/BirthDateSettings.tsx:200 -#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:317 -#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:332 -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:664 -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:669 +#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:319 +#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:334 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:670 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:675 #: src/components/StarterPack/QrCodeDialog.tsx:208 #: src/features/liveNow/components/EditLiveDialog.tsx:199 #: src/features/liveNow/components/EditLiveDialog.tsx:206 @@ -10550,22 +10546,22 @@ msgstr "" #: src/screens/SavedFeeds.tsx:311 #: src/screens/SavedFeeds.tsx:315 #: src/view/com/composer/Composer.tsx:1553 -#: src/view/com/composer/drafts/DraftsButton.tsx:125 +#: src/view/com/composer/drafts/DraftsButton.tsx:121 msgid "Save changes" msgstr "" #: src/view/com/composer/Composer.tsx:1525 -#: src/view/com/composer/drafts/DraftsButton.tsx:93 +#: src/view/com/composer/drafts/DraftsButton.tsx:89 msgid "Save changes?" msgstr "" #: src/view/com/composer/Composer.tsx:1553 -#: src/view/com/composer/drafts/DraftsButton.tsx:125 +#: src/view/com/composer/drafts/DraftsButton.tsx:121 msgid "Save draft" msgstr "" #: src/view/com/composer/Composer.tsx:1527 -#: src/view/com/composer/drafts/DraftsButton.tsx:95 +#: src/view/com/composer/drafts/DraftsButton.tsx:91 msgid "Save draft?" msgstr "" @@ -10585,8 +10581,8 @@ msgstr "" msgid "Save QR code" msgstr "" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:645 #: src/components/dialogs/PostInteractionSettingsDialog.tsx:651 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:657 msgid "Save these options for next time" msgstr "" @@ -10613,7 +10609,7 @@ msgid "Saved Posts" msgstr "" #: src/screens/CustomFeed/components/CustomFeedHeader.tsx:138 -#: src/screens/ProfileList/components/Header.tsx:89 +#: src/screens/ProfileList/components/Header.tsx:93 msgid "Saved to your feeds" msgstr "" @@ -10751,8 +10747,8 @@ msgstr "" msgid "Search my posts" msgstr "" -#: src/view/com/profile/ProfileMenu.tsx:342 -#: src/view/com/profile/ProfileMenu.tsx:345 +#: src/view/com/profile/ProfileMenu.tsx:326 +#: src/view/com/profile/ProfileMenu.tsx:329 msgid "Search posts" msgstr "" @@ -10827,7 +10823,7 @@ msgid "See more trending topics" msgstr "See more trending topics" #. Description of a feature flag (Thread numbering) -#: src/analytics/features/index.ts:91 +#: src/analytics/features/index.ts:107 msgid "See numbered badges (1/3, 2/3, etc.) on posts in a thread by the same author." msgstr "See numbered badges (1/3, 2/3, etc.) on posts in a thread by the same author." @@ -10887,7 +10883,7 @@ msgstr "" msgid "Select an emoji" msgstr "" -#: src/components/Select/index.tsx:208 +#: src/components/Select/index.tsx:211 msgid "Select an option" msgstr "" @@ -10923,11 +10919,11 @@ msgstr "Select filter type (currently: {0})" msgid "Select from an existing account" msgstr "" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:549 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:555 msgid "Select from your lists" msgstr "" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:551 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:557 msgid "Select from your lists <0>{numberOfListsSelected, plural, other {(# selected)}}" msgstr "" @@ -10951,8 +10947,8 @@ msgid "Select how long to mute this word for." msgstr "" #: src/components/AppLanguageDropdown.tsx:71 -#: src/components/LanguageSelect.tsx:41 -#: src/components/LanguageSelect.tsx:42 +#: src/components/LanguageSelect.tsx:43 +#: src/components/LanguageSelect.tsx:44 msgid "Select language" msgstr "" @@ -11005,7 +11001,7 @@ msgstr "" msgid "Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown." msgstr "" -#: src/screens/Signup/StepInfo/index.tsx:299 +#: src/screens/Signup/StepInfo/index.tsx:311 msgid "Select your date of birth" msgstr "" @@ -11110,7 +11106,7 @@ msgstr "" msgid "Set new password" msgstr "" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:477 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:483 msgid "Set precisely which groups of people can reply to your post" msgstr "" @@ -11118,11 +11114,11 @@ msgstr "" msgid "Set up your account" msgstr "" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:427 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:433 msgid "Set who can reply to your post" msgstr "" -#: src/ageAssurance/components/NoAccessScreen.tsx:286 +#: src/ageAssurance/components/NoAccessScreen.tsx:288 msgid "Set your birthdate below and we'll get you back to posting and exploring in no time!" msgstr "" @@ -11199,7 +11195,7 @@ msgstr "" msgid "Settings for repost notifications" msgstr "" -#: src/screens/ModerationInteractionSettings/index.tsx:104 +#: src/screens/ModerationInteractionSettings/index.tsx:106 msgctxt "toast" msgid "Settings saved" msgstr "" @@ -11228,7 +11224,7 @@ msgstr "" msgid "Share age range" msgstr "Share age range" -#: src/view/com/profile/ProfileMenu.tsx:623 +#: src/view/com/profile/ProfileMenu.tsx:582 msgid "Share anyway" msgstr "" @@ -11286,7 +11282,7 @@ msgstr "Share Profile" msgid "Share QR code" msgstr "" -#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:522 +#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:530 msgid "Share this feed" msgstr "" @@ -11309,8 +11305,8 @@ msgstr "" #: src/screens/ProfileList/components/MoreOptionsMenu.tsx:167 #: src/screens/StarterPack/StarterPackScreen.tsx:627 #: src/screens/StarterPack/StarterPackScreen.tsx:635 -#: src/view/com/profile/ProfileMenu.tsx:321 -#: src/view/com/profile/ProfileMenu.tsx:333 +#: src/view/com/profile/ProfileMenu.tsx:305 +#: src/view/com/profile/ProfileMenu.tsx:317 msgid "Share via..." msgstr "" @@ -11336,7 +11332,7 @@ msgstr "Sharing your age range reveals only the range associated with your Apple msgid "Sharing your age range reveals only the range associated with your Google Account – for example, that you’re at least 18. <0>Your exact age and birthday are never shared, and this data never leaves this device. Therefore, it only enables access on this device. Alternatively, <1>you can use our trusted partner, KWS, to complete your verification and enable access on all platforms." msgstr "Sharing your age range reveals only the range associated with your Google Account – for example, that you’re at least 18. <0>Your exact age and birthday are never shared, and this data never leaves this device. Therefore, it only enables access on this device. Alternatively, <1>you can use our trusted partner, KWS, to complete your verification and enable access on all platforms." -#: src/components/moderation/ContentHider.tsx:217 +#: src/components/moderation/ContentHider.tsx:210 #: src/components/moderation/LabelPreference.tsx:143 #: src/components/moderation/PostHider.tsx:137 msgid "Show" @@ -11351,8 +11347,8 @@ msgstr "" #: src/features/liveNow/components/LiveStatusDialog.tsx:315 #: src/features/liveNow/components/LiveStatusDialog.tsx:319 #: src/screens/List/ListHiddenScreen.tsx:193 -#: src/screens/VideoFeed/index.tsx:740 -#: src/screens/VideoFeed/index.tsx:746 +#: src/screens/VideoFeed/index.tsx:742 +#: src/screens/VideoFeed/index.tsx:748 msgid "Show anyway" msgstr "" @@ -11387,7 +11383,7 @@ msgstr "" msgid "Show list anyway" msgstr "" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:530 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:536 msgid "Show lists of users to select from" msgstr "" @@ -11432,8 +11428,8 @@ msgstr "" msgid "Show reposts" msgstr "" -#: src/view/com/profile/ProfileMenu.tsx:487 -#: src/view/com/profile/ProfileMenu.tsx:493 +#: src/view/com/profile/ProfileMenu.tsx:446 +#: src/view/com/profile/ProfileMenu.tsx:452 msgid "Show reposts in feeds" msgstr "Show reposts in feeds" @@ -11455,7 +11451,7 @@ msgstr "" msgid "Show when you’re live" msgstr "" -#: src/screens/PostThread/components/ThreadItemAnchor.tsx:596 +#: src/screens/PostThread/components/ThreadItemAnchor.tsx:599 msgid "Shows information about when this post was created" msgstr "" @@ -11463,15 +11459,15 @@ msgstr "" msgid "Shows other accounts you can switch to" msgstr "" -#: src/components/moderation/ContentHider.tsx:169 +#: src/components/moderation/ContentHider.tsx:162 #: src/components/moderation/PostHider.tsx:91 msgid "Shows the content" msgstr "" #: src/components/dialogs/Signin.tsx:98 #: src/components/dialogs/Signin.tsx:100 -#: src/components/WelcomeModal.tsx:193 -#: src/components/WelcomeModal.tsx:204 +#: src/components/WelcomeModal.tsx:196 +#: src/components/WelcomeModal.tsx:207 #: src/screens/Hashtag.tsx:233 #: src/screens/Login/index.tsx:143 #: src/screens/Login/index.tsx:165 @@ -11578,8 +11574,8 @@ msgstr "Since" #: src/components/contacts/screens/VerifyNumber.tsx:208 #: src/screens/Onboarding/StepFindContactsIntro/index.tsx:86 #: src/screens/Onboarding/StepFindContactsIntro/index.tsx:90 -#: src/screens/Onboarding/StepFinished/index.tsx:295 -#: src/screens/Onboarding/StepFinished/index.tsx:317 +#: src/screens/Onboarding/StepFinished/index.tsx:301 +#: src/screens/Onboarding/StepFinished/index.tsx:323 #: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:285 #: src/screens/Onboarding/StepSuggestedStarterpacks/index.tsx:105 #: src/screens/StarterPack/Wizard/index.tsx:202 @@ -11595,8 +11591,8 @@ msgstr "" msgid "Skip empty posts?" msgstr "Skip empty posts?" -#: src/screens/Onboarding/StepFinished/index.tsx:288 -#: src/screens/Onboarding/StepFinished/index.tsx:314 +#: src/screens/Onboarding/StepFinished/index.tsx:294 +#: src/screens/Onboarding/StepFinished/index.tsx:320 msgid "Skip introduction and start using your account" msgstr "" @@ -11621,10 +11617,15 @@ msgstr "" msgid "So many thoughts, you should post one" msgstr "" -#: src/components/WelcomeModal.tsx:146 +#: src/components/WelcomeModal.tsx:149 msgid "Social media you control." msgstr "" +#. Name for a feature flag +#: src/analytics/features/index.ts:84 +msgid "Social proofing on posts" +msgstr "Social proofing on posts" + #: src/lib/interests.ts:58 msgid "Software Dev" msgstr "" @@ -11633,7 +11634,7 @@ msgstr "" msgid "Some moderation services in your list are no longer available." msgstr "" -#: src/components/verification/VerificationsDialog.tsx:122 +#: src/components/verification/VerificationsDialog.tsx:123 msgid "Some of your verifications are invalid." msgstr "" @@ -11728,7 +11729,7 @@ msgstr "" msgid "Something went wrong. Please try again." msgstr "" -#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:592 +#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:600 msgid "Something wrong? Let us know." msgstr "" @@ -11771,6 +11772,11 @@ msgstr "" msgid "Sports" msgstr "" +#. Description of a feature flag (Social proofing on posts) +#: src/analytics/features/index.ts:90 +msgid "Spot posts your friends and follows have liked." +msgstr "Spot posts your friends and follows have liked." + #: src/components/PostControls/ShareMenu/RecentChats.tsx:231 msgid "Start a conversation, and it will appear here." msgstr "" @@ -11810,7 +11816,7 @@ msgid "Starter Pack" msgstr "" #. placeholder {0}: sanitizeHandle(creator.handle, '@') -#: src/components/StarterPack/StarterPackCard.tsx:87 +#: src/components/StarterPack/StarterPackCard.tsx:88 msgid "Starter pack by {0}" msgstr "" @@ -11818,7 +11824,7 @@ msgstr "" msgid "Starter pack by <0/>" msgstr "" -#: src/components/StarterPack/StarterPackCard.tsx:86 +#: src/components/StarterPack/StarterPackCard.tsx:87 #: src/view/com/profile/ProfileSubpageHeader.tsx:169 msgid "Starter pack by you" msgstr "" @@ -11940,11 +11946,11 @@ msgstr "" msgid "Subscribe to account activity" msgstr "" -#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:352 +#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:350 msgid "Subscribe to Labeler" msgstr "" -#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:318 +#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:316 msgid "Subscribe to this labeler" msgstr "" @@ -12080,8 +12086,8 @@ msgstr "" msgid "Tap for more information" msgstr "" -#: src/ageAssurance/components/NoAccessScreen.tsx:213 -#: src/screens/Signup/StepInfo/index.tsx:325 +#: src/ageAssurance/components/NoAccessScreen.tsx:215 +#: src/screens/Signup/StepInfo/index.tsx:337 msgid "Tap here to update your location with GPS." msgstr "Tap here to update your location with GPS." @@ -12210,11 +12216,11 @@ msgstr "" msgid "Thanks for your feedback!" msgstr "Thanks for your feedback!" -#: src/components/intents/VerifyEmailIntentDialog.tsx:78 +#: src/components/intents/VerifyEmailIntentDialog.tsx:79 msgid "Thanks, you have successfully verified your email address. You can close this dialog." msgstr "" -#: src/ageAssurance/components/NoAccessScreen.tsx:233 +#: src/ageAssurance/components/NoAccessScreen.tsx:235 #: src/components/ageAssurance/AgeAssuranceAccountCard.tsx:224 msgid "Thanks! You're all set." msgstr "" @@ -12232,7 +12238,7 @@ msgstr "" msgid "That starter pack could not be found." msgstr "" -#: src/screens/Signup/StepHandle/index.tsx:90 +#: src/screens/Signup/StepHandle/index.tsx:91 msgid "That username is already taken" msgstr "" @@ -12240,13 +12246,13 @@ msgstr "" msgid "That's all, folks!" msgstr "" -#: src/screens/VideoFeed/index.tsx:1232 +#: src/screens/VideoFeed/index.tsx:1234 msgid "That's everything!" msgstr "" #: src/components/moderation/BlockDialog.tsx:150 #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:184 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:422 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:428 msgid "The account will be able to interact with you after unblocking." msgstr "" @@ -12379,7 +12385,7 @@ msgstr "" msgid "The Terms of Service have been moved to" msgstr "" -#: src/components/intents/VerifyEmailIntentDialog.tsx:90 +#: src/components/intents/VerifyEmailIntentDialog.tsx:91 msgid "The verification code you have provided is invalid. Please make sure that you have used the correct verification link or request a new one." msgstr "" @@ -12422,14 +12428,14 @@ msgid "There was a problem with your internet connection, please try again" msgstr "" #: src/screens/CustomFeed/components/CustomFeedHeader.tsx:184 -#: src/screens/ProfileList/components/Header.tsx:92 +#: src/screens/ProfileList/components/Header.tsx:96 #: src/screens/ProfileList/components/MoreOptionsMenu.tsx:80 #: src/screens/SavedFeeds.tsx:99 #: src/screens/SavedFeeds.tsx:278 msgid "There was an issue contacting the server" msgstr "" -#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:467 +#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:475 #: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:97 msgid "There was an issue contacting the server, please check your internet connection and try again." msgstr "" @@ -12480,17 +12486,17 @@ msgstr "" #: src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx:117 #: src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx:130 #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:92 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:257 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:284 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:300 -#: src/view/com/profile/ProfileMenu.tsx:151 -#: src/view/com/profile/ProfileMenu.tsx:164 -#: src/view/com/profile/ProfileMenu.tsx:183 -#: src/view/com/profile/ProfileMenu.tsx:198 -#: src/view/com/profile/ProfileMenu.tsx:215 -#: src/view/com/profile/ProfileMenu.tsx:228 -#: src/view/com/profile/ProfileMenu.tsx:244 -#: src/view/com/profile/ProfileMenu.tsx:259 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:260 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:290 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:306 +#: src/view/com/profile/ProfileMenu.tsx:139 +#: src/view/com/profile/ProfileMenu.tsx:152 +#: src/view/com/profile/ProfileMenu.tsx:171 +#: src/view/com/profile/ProfileMenu.tsx:186 +#: src/view/com/profile/ProfileMenu.tsx:203 +#: src/view/com/profile/ProfileMenu.tsx:216 +#: src/view/com/profile/ProfileMenu.tsx:232 +#: src/view/com/profile/ProfileMenu.tsx:247 msgid "There was an issue! {0}" msgstr "" @@ -12498,8 +12504,8 @@ msgstr "" #: src/screens/List/ListHiddenScreen.tsx:67 #: src/screens/List/ListHiddenScreen.tsx:81 #: src/screens/List/ListHiddenScreen.tsx:103 -#: src/screens/ProfileList/components/Header.tsx:107 -#: src/screens/ProfileList/components/Header.tsx:121 +#: src/screens/ProfileList/components/Header.tsx:111 +#: src/screens/ProfileList/components/Header.tsx:125 #: src/screens/ProfileList/components/MoreOptionsMenu.tsx:122 #: src/screens/ProfileList/components/MoreOptionsMenu.tsx:136 #: src/screens/ProfileList/components/SubscribeMenu.tsx:38 @@ -12518,7 +12524,7 @@ msgstr "" msgid "There's been a rush of new users to Bluesky! We'll activate your account as soon as we can." msgstr "" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:656 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:662 msgid "These are your default settings" msgstr "" @@ -12553,7 +12559,7 @@ msgstr "They won’t be able to rejoin unless you invite them again." msgid "This {screenDescription} has been flagged:" msgstr "" -#: src/components/verification/VerificationsDialog.tsx:89 +#: src/components/verification/VerificationsDialog.tsx:90 msgid "This account has a checkmark because it's been verified by trusted sources." msgstr "" @@ -12561,7 +12567,7 @@ msgstr "" msgid "This account has been marked as automated by its owner." msgstr "This account has been marked as automated by its owner." -#: src/components/verification/VerificationsDialog.tsx:94 +#: src/components/verification/VerificationsDialog.tsx:95 msgid "This account has one or more attempted verifications, but it is not currently verified." msgstr "" @@ -12806,7 +12812,7 @@ msgstr "This person is blocking you" #. placeholder {0}: niceDate(i18n, createdAt) #. placeholder {1}: niceDate(i18n, indexedAt) -#: src/screens/PostThread/components/ThreadItemAnchor.tsx:636 +#: src/screens/PostThread/components/ThreadItemAnchor.tsx:639 msgid "This post claims to have been created on <0>{0}, but was first seen by Bluesky on <1>{1}." msgstr "" @@ -12830,7 +12836,7 @@ msgstr "" msgid "This post's author has disabled quote posts." msgstr "" -#: src/view/com/profile/ProfileMenu.tsx:621 +#: src/view/com/profile/ProfileMenu.tsx:580 msgid "This profile is only visible to logged-in users. It won't be visible to people who aren't signed in." msgstr "" @@ -12847,7 +12853,7 @@ msgstr "This screen is only available for group conversations." msgid "This service has not provided terms of service or a privacy policy." msgstr "" -#: src/features/liveNow/index.tsx:204 +#: src/features/liveNow/index.tsx:199 msgid "This service is not supported while the Live feature is in beta. Allowed services: {formatted}." msgstr "" @@ -12935,7 +12941,7 @@ msgid "This will remove your post from this quote post for all users, and replac msgstr "" #. Name for a feature flag (See numbered badges (1/3, 2/3, etc.) on posts in a thread by the same author.) -#: src/analytics/features/index.ts:84 +#: src/analytics/features/index.ts:100 msgid "Thread numbering" msgstr "Thread numbering" @@ -12989,7 +12995,7 @@ msgstr "" msgid "To disable your email 2FA method, please verify your access to <0>{0}" msgstr "" -#: src/ageAssurance/components/NoAccessScreen.tsx:315 +#: src/ageAssurance/components/NoAccessScreen.tsx:317 msgid "To log out, <0>click here. Or if you’d prefer, you can <1>delete your account." msgstr "To log out, <0>click here. Or if you’d prefer, you can <1>delete your account." @@ -13056,7 +13062,7 @@ msgstr "Translating" msgid "Translating…" msgstr "Translating…" -#: src/lib/translation/index.tsx:305 +#: src/lib/translation/index.tsx:314 msgid "Translation to the same language is unavailable on your device." msgstr "Translation to the same language is unavailable on your device." @@ -13098,7 +13104,7 @@ msgstr "Trending videos" msgid "Trolling" msgstr "" -#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:142 +#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:143 msgid "Trust emerges from relationships, communities, and shared context, so we’re also enabling <0>trusted verifiers: organizations that can directly issue verification." msgstr "" @@ -13218,14 +13224,14 @@ msgstr "" #: src/components/moderation/BlockDialog.tsx:210 #: src/screens/Messages/ConversationSettings/MemberMenu.tsx:227 #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:190 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:365 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:427 -#: src/screens/ProfileList/components/Header.tsx:167 -#: src/screens/ProfileList/components/Header.tsx:174 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:371 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:433 +#: src/screens/ProfileList/components/Header.tsx:171 +#: src/screens/ProfileList/components/Header.tsx:178 msgid "Unblock" msgstr "" -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:369 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:375 msgctxt "action" msgid "Unblock" msgstr "" @@ -13236,8 +13242,8 @@ msgstr "Unblock {displayName}" #: src/components/dms/ConvoMenu.tsx:284 #: src/components/dms/ConvoMenu.tsx:288 -#: src/view/com/profile/ProfileMenu.tsx:535 -#: src/view/com/profile/ProfileMenu.tsx:541 +#: src/view/com/profile/ProfileMenu.tsx:494 +#: src/view/com/profile/ProfileMenu.tsx:500 msgid "Unblock account" msgstr "" @@ -13246,7 +13252,7 @@ msgid "Unblock account?" msgstr "Unblock account?" #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:182 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:420 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:426 msgid "Unblock Account?" msgstr "" @@ -13281,16 +13287,16 @@ msgid "Undo repost ({0, plural, one {# repost} other {# reposts}})" msgstr "" #. placeholder {0}: profile.handle -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:396 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:402 msgid "Unfollow {0}" msgstr "" -#: src/view/com/profile/ProfileMenu.tsx:361 -#: src/view/com/profile/ProfileMenu.tsx:370 +#: src/view/com/profile/ProfileMenu.tsx:345 +#: src/view/com/profile/ProfileMenu.tsx:354 msgid "Unfollow account" msgstr "" -#: src/screens/VideoFeed/index.tsx:939 +#: src/screens/VideoFeed/index.tsx:941 msgid "Unfollows the user" msgstr "" @@ -13298,15 +13304,15 @@ msgstr "" msgid "Unfortunately, none of your subscribed labelers supports this report type." msgstr "" -#: src/ageAssurance/components/NoAccessScreen.tsx:263 +#: src/ageAssurance/components/NoAccessScreen.tsx:265 msgid "Unfortunately, the birthdate you have saved to your profile makes you too young to access Bluesky." msgstr "" -#: src/ageAssurance/components/NoAccessScreen.tsx:247 +#: src/ageAssurance/components/NoAccessScreen.tsx:249 msgid "Unfortunately, your declared age indicates that you are not old enough to access Bluesky in your region." msgstr "" -#: src/components/verification/VerificationsDialog.tsx:209 +#: src/components/verification/VerificationsDialog.tsx:210 msgid "Unknown verifier" msgstr "" @@ -13318,13 +13324,13 @@ msgstr "" msgid "Unlabeled, abusive, or non-consensual adult content" msgstr "" -#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:564 +#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:572 msgid "Unlike" msgstr "" #. Accessibility label for the like button when the post has been liked, verb followed by number of likes and noun #. placeholder {0}: post.likeCount || 0 -#: src/components/PostControls/index.tsx:272 +#: src/components/PostControls/index.tsx:274 msgid "Unlike ({0, plural, one {# like} other {# likes}})" msgstr "" @@ -13336,8 +13342,8 @@ msgstr "Unlock chat" msgid "Unlock this group chat" msgstr "Unlock this group chat" -#: src/screens/ProfileList/components/Header.tsx:181 -#: src/screens/ProfileList/components/Header.tsx:188 +#: src/screens/ProfileList/components/Header.tsx:185 +#: src/screens/ProfileList/components/Header.tsx:192 msgid "Unmute" msgstr "" @@ -13355,8 +13361,8 @@ msgstr "Unmute {0}" #: src/components/PostControls/PostMenu/PostMenuItems.tsx:747 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:753 -#: src/view/com/profile/ProfileMenu.tsx:511 -#: src/view/com/profile/ProfileMenu.tsx:517 +#: src/view/com/profile/ProfileMenu.tsx:470 +#: src/view/com/profile/ProfileMenu.tsx:476 msgid "Unmute account" msgstr "" @@ -13382,14 +13388,14 @@ msgstr "" msgid "Unmute video" msgstr "" -#: src/screens/ProfileList/components/Header.tsx:152 -#: src/screens/ProfileList/components/Header.tsx:159 +#: src/screens/ProfileList/components/Header.tsx:156 +#: src/screens/ProfileList/components/Header.tsx:163 msgid "Unpin" msgstr "" -#: src/components/FeedCard.tsx:352 -#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:569 -#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:576 +#: src/components/FeedCard.tsx:354 +#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:577 +#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:584 #: src/screens/SavedFeeds.tsx:467 msgid "Unpin feed" msgstr "" @@ -13414,7 +13420,7 @@ msgstr "" msgid "Unpinned {0} from Home" msgstr "" -#: src/screens/ProfileList/components/Header.tsx:79 +#: src/screens/ProfileList/components/Header.tsx:73 msgid "Unpinned from your feeds" msgstr "" @@ -13427,7 +13433,7 @@ msgstr "" msgid "Unsnooze email reminder" msgstr "" -#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:350 +#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:348 msgid "Unsubscribe" msgstr "" @@ -13436,7 +13442,7 @@ msgstr "" msgid "Unsubscribe from list" msgstr "" -#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:317 +#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:315 msgid "Unsubscribe from this labeler" msgstr "" @@ -13497,7 +13503,7 @@ msgstr "" msgid "Update your email" msgstr "" -#: src/ageAssurance/components/NoAccessScreen.tsx:208 +#: src/ageAssurance/components/NoAccessScreen.tsx:210 #: src/components/ageAssurance/AgeAssuranceAccountCard.tsx:252 #: src/components/dialogs/DeviceLocationRequestDialog.tsx:41 #: src/components/dialogs/DeviceLocationRequestDialog.tsx:105 @@ -13524,24 +13530,24 @@ msgstr "" #: src/view/com/util/UserAvatar.tsx:494 #: src/view/com/util/UserAvatar.tsx:497 -#: src/view/com/util/UserBanner.tsx:164 -#: src/view/com/util/UserBanner.tsx:167 +#: src/view/com/util/UserBanner.tsx:171 +#: src/view/com/util/UserBanner.tsx:174 msgid "Upload from Camera" msgstr "" #: src/view/com/util/UserAvatar.tsx:511 -#: src/view/com/util/UserBanner.tsx:181 +#: src/view/com/util/UserBanner.tsx:188 msgid "Upload from Files" msgstr "" #: src/view/com/util/UserAvatar.tsx:505 #: src/view/com/util/UserAvatar.tsx:509 -#: src/view/com/util/UserBanner.tsx:175 -#: src/view/com/util/UserBanner.tsx:179 +#: src/view/com/util/UserBanner.tsx:182 +#: src/view/com/util/UserBanner.tsx:186 msgid "Upload from Library" msgstr "" -#: src/view/com/composer/Composer.tsx:2686 +#: src/view/com/composer/Composer.tsx:2688 msgid "Uploading GIF..." msgstr "" @@ -13555,7 +13561,7 @@ msgstr "" msgid "Uploading link thumbnail..." msgstr "" -#: src/view/com/composer/Composer.tsx:2688 +#: src/view/com/composer/Composer.tsx:2690 msgid "Uploading video..." msgstr "" @@ -13644,25 +13650,25 @@ msgstr "" msgid "User list by you" msgstr "" -#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:263 +#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:232 msgctxt "toast" msgid "User list created" msgstr "" -#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:249 +#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:229 msgctxt "toast" msgid "User list updated" msgstr "" -#: src/screens/Signup/StepHandle/index.tsx:257 +#: src/screens/Signup/StepHandle/index.tsx:258 msgid "Username cannot be longer than {MAX_SERVICE_HANDLE_LENGTH, plural, other {# characters}}" msgstr "" -#: src/screens/Signup/StepHandle/index.tsx:241 +#: src/screens/Signup/StepHandle/index.tsx:242 msgid "Username cannot begin or end with a hyphen" msgstr "" -#: src/screens/Signup/StepHandle/index.tsx:245 +#: src/screens/Signup/StepHandle/index.tsx:246 msgid "Username must only contain letters (a-z), numbers, and hyphens" msgstr "" @@ -13705,14 +13711,14 @@ msgstr "" msgid "Verifications on Bluesky work differently than on other platforms. <0>Learn more here." msgstr "" -#: src/components/verification/VerificationsDialog.tsx:105 +#: src/components/verification/VerificationsDialog.tsx:106 msgid "Verified by:" msgstr "" #: src/components/verification/VerificationCreatePrompt.tsx:85 #: src/components/verification/VerificationCreatePrompt.tsx:87 -#: src/view/com/profile/ProfileMenu.tsx:469 -#: src/view/com/profile/ProfileMenu.tsx:472 +#: src/view/com/profile/ProfileMenu.tsx:428 +#: src/view/com/profile/ProfileMenu.tsx:431 msgid "Verify account" msgstr "" @@ -13819,7 +13825,7 @@ msgid "Video from {0}: {text}" msgstr "" #. placeholder {0}: sanitizeHandle( post.author.handle, '@', ) -#: src/screens/VideoFeed/index.tsx:1194 +#: src/screens/VideoFeed/index.tsx:1196 msgid "Video from {0}. Tap to play or pause the video" msgstr "" @@ -13828,11 +13834,11 @@ msgstr "" msgid "Video Games" msgstr "" -#: src/screens/VideoFeed/index.tsx:1193 +#: src/screens/VideoFeed/index.tsx:1195 msgid "Video is paused" msgstr "" -#: src/screens/VideoFeed/index.tsx:1193 +#: src/screens/VideoFeed/index.tsx:1195 msgid "Video is playing" msgstr "" @@ -13844,7 +13850,7 @@ msgstr "" msgid "Video settings" msgstr "" -#: src/view/com/composer/Composer.tsx:2706 +#: src/view/com/composer/Composer.tsx:2708 msgid "Video uploaded" msgstr "" @@ -13882,9 +13888,9 @@ msgstr "" #. placeholder {0}: authors[0].profile.displayName || authors[0].profile.handle #. placeholder {0}: info.creatorHandle #. placeholder {0}: profile.handle -#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:505 +#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:513 #: src/screens/Search/components/SearchProfileCard.tsx:37 -#: src/screens/VideoFeed/index.tsx:900 +#: src/screens/VideoFeed/index.tsx:902 #: src/view/com/notifications/NotificationFeedItem.tsx:600 msgid "View {0}'s profile" msgstr "" @@ -13915,8 +13921,8 @@ msgstr "" msgid "View debug entry" msgstr "" -#: src/screens/VideoFeed/index.tsx:768 -#: src/screens/VideoFeed/index.tsx:786 +#: src/screens/VideoFeed/index.tsx:770 +#: src/screens/VideoFeed/index.tsx:788 msgid "View details" msgstr "" @@ -13997,7 +14003,7 @@ msgstr "" msgid "View this user's verifications" msgstr "" -#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:536 +#: src/screens/CustomFeed/components/CustomFeedHeader.tsx:544 msgid "View users who like this feed" msgstr "" @@ -14140,7 +14146,7 @@ msgid "We have partnered with <0>KWS to handle age verification. When you cl msgstr "" #. placeholder {0}: currentAccount?.email -#: src/components/intents/VerifyEmailIntentDialog.tsx:103 +#: src/components/intents/VerifyEmailIntentDialog.tsx:104 msgid "We have sent another verification email to <0>{0}." msgstr "" @@ -14238,7 +14244,7 @@ msgstr "" msgid "We’re having network issues, try again" msgstr "We’re having network issues, try again" -#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:97 +#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:98 msgid "We’re introducing a new layer of verification on Bluesky — an easy-to-see checkmark." msgstr "" @@ -14250,7 +14256,7 @@ msgstr "We’re so excited to have you join us!" msgid "We're sorry, but based on the data shared by your device, you are not old enough to access Bluesky." msgstr "We're sorry, but based on the data shared by your device, you are not old enough to access Bluesky." -#: src/ageAssurance/components/NoAccessScreen.tsx:227 +#: src/ageAssurance/components/NoAccessScreen.tsx:229 #: src/components/ageAssurance/AgeAssuranceAccountCard.tsx:218 msgid "We're sorry, but based on your device's location, you are currently located in a region that requires age assurance." msgstr "" @@ -14336,11 +14342,11 @@ msgstr "what’s up" #: src/view/com/auth/SplashScreen.web.tsx:99 #: src/view/com/composer/Composer.tsx:1626 -#: src/view/com/feeds/ComposerPrompt.tsx:194 +#: src/view/com/feeds/ComposerPrompt.tsx:206 msgid "What's up?" msgstr "" -#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:150 +#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:151 msgid "When you tap on a check, you’ll see which organizations have granted verification." msgstr "" @@ -14352,12 +14358,12 @@ msgstr "" msgid "Who can join this group chat and how" msgstr "Who can join this group chat and how" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:423 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:429 #: src/components/WhoCanReply.tsx:103 msgid "Who can reply" msgstr "" -#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:131 +#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:132 msgid "Who can verify?" msgstr "" @@ -14417,7 +14423,7 @@ msgstr "" msgid "Would you like to block this user and/or leave this conversation?" msgstr "Would you like to block this user and/or leave this conversation?" -#: src/view/com/composer/drafts/DraftsButton.tsx:110 +#: src/view/com/composer/drafts/DraftsButton.tsx:106 msgid "Would you like to save this as a draft before viewing your drafts?" msgstr "" @@ -14430,7 +14436,7 @@ msgstr "" msgid "Write a post" msgstr "" -#: src/view/com/composer/Composer.tsx:1722 +#: src/view/com/composer/Composer.tsx:1724 msgid "Write post" msgstr "" @@ -14502,7 +14508,7 @@ msgstr "" msgid "You are a trusted verifier" msgstr "" -#: src/ageAssurance/components/NoAccessScreen.tsx:174 +#: src/ageAssurance/components/NoAccessScreen.tsx:176 msgid "You are accessing Bluesky from a region that legally requires us to verify your age before allowing you to access the app." msgstr "" @@ -14527,7 +14533,7 @@ msgstr "" msgid "You are currently blocked from using the Go Live feature. To appeal this moderation decision, please submit the form below." msgstr "" -#: src/ageAssurance/components/NoAccessScreen.tsx:400 +#: src/ageAssurance/components/NoAccessScreen.tsx:402 #: src/components/ageAssurance/AgeAssuranceAccountCard.tsx:124 msgid "You are currently unable to access Bluesky's Age Assurance flow. Please <0>contact our moderation team if you believe this is an error." msgstr "" @@ -14541,7 +14547,7 @@ msgstr "" msgid "You are Live" msgstr "" -#: src/features/liveNow/index.tsx:382 +#: src/features/liveNow/index.tsx:377 msgid "You are no longer live" msgstr "" @@ -14553,7 +14559,7 @@ msgstr "" msgid "You are not following anyone yet" msgstr "" -#: src/features/liveNow/index.tsx:325 +#: src/features/liveNow/index.tsx:320 msgid "You are now live!" msgstr "" @@ -14621,7 +14627,7 @@ msgstr "You can only add up to {MAX_GALLERY_IMAGES, plural, other {# images}} pe msgid "You can only save drafts up to 1000 characters." msgstr "" -#: src/view/com/composer/drafts/DraftsButton.tsx:116 +#: src/view/com/composer/drafts/DraftsButton.tsx:112 msgid "You can only save drafts up to 1000 characters. Would you like to discard this post before viewing your drafts?" msgstr "" @@ -14670,7 +14676,7 @@ msgstr "" msgid "You don't follow any users who follow @{name}." msgstr "" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:585 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:591 msgid "You don't have any lists yet." msgstr "" @@ -14766,7 +14772,7 @@ msgstr "" msgid "You have unsaved changes to this draft, would you like to save them?" msgstr "" -#: src/view/com/composer/drafts/DraftsButton.tsx:105 +#: src/view/com/composer/drafts/DraftsButton.tsx:101 msgid "You have unsaved changes. Would you like to save them before viewing your drafts?" msgstr "" @@ -15022,7 +15028,7 @@ msgstr "" msgid "You've reached your daily limit for video uploads (too many videos)" msgstr "" -#: src/screens/VideoFeed/index.tsx:1241 +#: src/screens/VideoFeed/index.tsx:1243 msgid "You've run out of videos to watch. Maybe it's a good time to take a break?" msgstr "" @@ -15066,7 +15072,7 @@ msgstr "" msgid "Your appeal has been submitted. If your appeal succeeds, you will receive an email." msgstr "" -#: src/screens/Signup/StepInfo/index.tsx:286 +#: src/screens/Signup/StepInfo/index.tsx:298 msgid "Your birth date" msgstr "" @@ -15108,7 +15114,7 @@ msgstr "" #: src/screens/Login/ForgotPasswordForm.tsx:51 #: src/screens/Settings/components/ChangePasswordDialog.tsx:84 #: src/screens/Signup/state.ts:291 -#: src/screens/Signup/StepInfo/index.tsx:128 +#: src/screens/Signup/StepInfo/index.tsx:140 msgid "Your email appears to be invalid." msgstr "" @@ -15120,7 +15126,7 @@ msgstr "" msgid "Your first like!" msgstr "" -#: src/components/dialogs/PostInteractionSettingsDialog.tsx:492 +#: src/components/dialogs/PostInteractionSettingsDialog.tsx:498 msgid "Your followers" msgstr "" @@ -15162,7 +15168,7 @@ msgstr "" msgid "Your interests help us find what you like!" msgstr "" -#: src/screens/Signup/StepInfo/index.tsx:355 +#: src/screens/Signup/StepInfo/index.tsx:367 msgid "Your location has been updated." msgstr "" @@ -15178,7 +15184,7 @@ msgstr "Your name, avatar, the name of the group chat, and the number of members msgid "Your password has been changed successfully! Please use your new password when you sign in to Bluesky from now on." msgstr "" -#: src/screens/Signup/StepInfo/index.tsx:155 +#: src/screens/Signup/StepInfo/index.tsx:167 msgid "Your password must be at least 8 characters long." msgstr "" diff --git a/src/screens/CustomFeed/components/CustomFeedHeader.tsx b/src/screens/CustomFeed/components/CustomFeedHeader.tsx index 6582b43115..5317a8a999 100644 --- a/src/screens/CustomFeed/components/CustomFeedHeader.tsx +++ b/src/screens/CustomFeed/components/CustomFeedHeader.tsx @@ -395,11 +395,13 @@ export function CustomFeedHeader({ ) : null} - + + style={[a.w_full, gtMobile && web({width: 'auto', minWidth: 450})]}> diff --git a/src/screens/PostThread/index.tsx b/src/screens/PostThread/index.tsx index d68a7280d8..23c9a82c02 100644 --- a/src/screens/PostThread/index.tsx +++ b/src/screens/PostThread/index.tsx @@ -104,6 +104,7 @@ export function PostThread({uri}: {uri: string}) { ax.metric('post:view', { uri: post.uri, authorDid: post.author.did, + isReply: !!post.record.reply, logContext: 'Post', feedDescriptor: feedFeedback.feedDescriptor, }) diff --git a/src/screens/VideoFeed/index.tsx b/src/screens/VideoFeed/index.tsx index 63cf084eb8..9c662fdf13 100644 --- a/src/screens/VideoFeed/index.tsx +++ b/src/screens/VideoFeed/index.tsx @@ -44,6 +44,7 @@ import {HITSLOP_20} from '#/lib/constants' import {useHaptics} from '#/lib/haptics' import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback' import {useOpenComposer} from '#/lib/hooks/useOpenComposer' +import {hasPlaybackStarted} from '#/lib/media/video/analytics' import { createPlaybackTelemetry, type PlaybackTelemetry, @@ -492,9 +493,19 @@ let VideoItem = ({ const {width, height} = useSafeAreaFrame() const {sendInteraction, feedDescriptor} = useFeedFeedbackContext() const hasTrackedView = useRef(false) + const hasTrackedVideoImpression = useRef(false) useEffect(() => { if (active) { + if (!hasTrackedVideoImpression.current) { + hasTrackedVideoImpression.current = true + ax.metric('video:impression', { + postUri: post.uri, + postAuthorDid: post.author.did, + context: 'immersiveFeed', + presentation: embed.presentation === 'gif' ? 'gif' : 'video', + }) + } sendInteraction({ item: post.uri, event: 'app.bsky.feed.defs#interactionSeen', @@ -508,6 +519,7 @@ let VideoItem = ({ ax.metric('post:view', { uri: post.uri, authorDid: post.author.did, + isReply: !!post.record.reply, logContext: 'ImmersiveVideo', feedDescriptor, }) @@ -518,6 +530,7 @@ let VideoItem = ({ active, post.uri, post.author.did, + embed.presentation, feedContext, reqId, sendInteraction, @@ -556,7 +569,12 @@ let VideoItem = ({ <> {shouldRenderVideo && player && ( - + )} {moderation && ( + >({ + queryKey: [RQKEY_ROOT], + }) + + for (const [_queryKey, queryData] of queryDatas) { + if (!queryData?.pages) continue + + for (const page of queryData.pages) { + for (const slice of createFeedViewPostsSlices(page.posts)) { + for (const item of slice.items) { + if (item.postNumbering && didOrHandleUriMatches(atUri, item.post)) { + return item.postNumbering + } + } + } + } + } +} + export function* findAllProfilesInQueryData( queryClient: QueryClient, did: string, diff --git a/src/state/queries/post-feed.ts b/src/state/queries/post-feed.ts index aff1db34e9..402d8bdb18 100644 --- a/src/state/queries/post-feed.ts +++ b/src/state/queries/post-feed.ts @@ -26,9 +26,11 @@ import {PostListFeedAPI} from '#/lib/api/feed/posts' import {type FeedAPI, type ReasonFeedSource} from '#/lib/api/feed/types' import {aggregateUserInterests} from '#/lib/api/feed/utils' import { + createFeedViewPostsSlices, type FeedPostNumbering, FeedTuner, type FeedTunerFn, + type ValidFeedPostNumbering, } from '#/lib/api/feed-manip' import {DISCOVER_FEED_URI} from '#/lib/constants' import {logger} from '#/logger' @@ -527,6 +529,32 @@ export function* findAllPostsInQueryData( } } +export function findPostNumberingInQueryData( + queryClient: QueryClient, + uri: string, +): ValidFeedPostNumbering | undefined { + const atUri = new AtUri(uri) + const queryDatas = queryClient.getQueriesData< + InfiniteData + >({ + queryKey: [RQKEY_ROOT], + }) + + for (const [_queryKey, queryData] of queryDatas) { + if (!queryData?.pages) continue + + for (const page of queryData.pages) { + for (const slice of createFeedViewPostsSlices(page.feed)) { + for (const item of slice.items) { + if (item.postNumbering && didOrHandleUriMatches(atUri, item.post)) { + return item.postNumbering + } + } + } + } + } +} + export function* findAllProfilesInQueryData( queryClient: QueryClient, did: string, diff --git a/src/state/queries/usePostThread/queryCache.test.ts b/src/state/queries/usePostThread/queryCache.test.ts new file mode 100644 index 0000000000..256abe6cca --- /dev/null +++ b/src/state/queries/usePostThread/queryCache.test.ts @@ -0,0 +1,117 @@ +import {QueryClient} from '@tanstack/react-query' + +import {findAllPostsInQueryData as findAllPostsInBookmarksQueryData} from '#/state/queries/bookmarks/useBookmarksQuery' +import { + findAllPostsInQueryData as findAllPostsInExploreFeedPreviewsQueryData, + findPostNumberingInQueryData as findPostNumberingInExploreFeedPreviewsQueryData, +} from '#/state/queries/explore-feed-previews' +import {findAllPostsInQueryData as findAllPostsInNotifsQueryData} from '#/state/queries/notifications/feed' +import { + findAllPostsInQueryData as findAllPostsInFeedQueryData, + findPostNumberingInQueryData as findPostNumberingInFeedQueryData, +} from '#/state/queries/post-feed' +import {findAllPostsInQueryData as findAllPostsInQuoteQueryData} from '#/state/queries/post-quotes' +import {findAllPostsInQueryData as findAllPostsInSearchQueryData} from '#/state/queries/search-posts-v2' +import {type app} from '#/lexicons' +import {getThreadPlaceholder} from './queryCache' + +jest.mock('#/state/cache/post-shadow', () => ({ + dangerousGetPostShadow: jest.fn(), + updatePostShadow: jest.fn(), +})) +jest.mock('#/state/queries/bookmarks/useBookmarksQuery', () => ({ + findAllPostsInQueryData: jest.fn(), +})) +jest.mock('#/state/queries/explore-feed-previews', () => ({ + findAllPostsInQueryData: jest.fn(), + findPostNumberingInQueryData: jest.fn(), +})) +jest.mock('#/state/queries/notifications/feed', () => ({ + findAllPostsInQueryData: jest.fn(), +})) +jest.mock('#/state/queries/post-feed', () => ({ + findAllPostsInQueryData: jest.fn(), + findPostNumberingInQueryData: jest.fn(), +})) +jest.mock('#/state/queries/post-quotes', () => ({ + findAllPostsInQueryData: jest.fn(), +})) +jest.mock('#/state/queries/search-posts-v2', () => ({ + findAllPostsInQueryData: jest.fn(), +})) +jest.mock('#/state/queries/usePostThread', () => ({ + usePostThreadContext: jest.fn(), +})) + +const finders = [ + findAllPostsInBookmarksQueryData, + findAllPostsInExploreFeedPreviewsQueryData, + findAllPostsInNotifsQueryData, + findAllPostsInFeedQueryData, + findAllPostsInQuoteQueryData, + findAllPostsInSearchQueryData, +] + +function post(uri: string, likeCount: number) { + return { + $type: 'app.bsky.feed.defs#postView', + uri, + likeCount, + } as app.bsky.feed.defs.PostView +} + +describe('getThreadPlaceholder', () => { + const queryClient = new QueryClient() + + beforeEach(() => { + jest.resetAllMocks() + for (const finder of finders) { + jest.mocked(finder).mockImplementation(function* () {}) + } + jest.mocked(findPostNumberingInFeedQueryData).mockReturnValue(undefined) + jest + .mocked(findPostNumberingInExploreFeedPreviewsQueryData) + .mockReturnValue(undefined) + }) + + it('combines feed numbering with the preferred cached post', () => { + const uri = 'at://did:plc:alice/app.bsky.feed.post/1' + const notificationPost = post(uri, 4) + const feedPost = post(uri, 1) + jest.mocked(findPostNumberingInFeedQueryData).mockReturnValue({ + opThreadPostIndex: 2, + opThreadPostCount: 4, + }) + jest.mocked(findAllPostsInNotifsQueryData).mockImplementation(function* () { + yield notificationPost + return undefined + }) + jest.mocked(findAllPostsInFeedQueryData).mockImplementation(function* () { + yield feedPost + return undefined + }) + + const placeholder = getThreadPlaceholder(queryClient, uri) + + expect(placeholder?.value).toMatchObject({ + post: notificationPost, + opThread: true, + opThreadPostIndex: 2, + opThreadPostCount: 4, + }) + }) + + it('keeps non-numbered placeholders out of the OP thread', () => { + const uri = 'at://did:plc:alice/app.bsky.feed.post/1' + jest.mocked(findAllPostsInFeedQueryData).mockImplementation(function* () { + yield post(uri, 1) + return undefined + }) + + const placeholder = getThreadPlaceholder(queryClient, uri) + + expect(placeholder?.value).toMatchObject({opThread: false}) + expect(placeholder?.value).not.toHaveProperty('opThreadPostIndex') + expect(placeholder?.value).not.toHaveProperty('opThreadPostCount') + }) +}) diff --git a/src/state/queries/usePostThread/queryCache.ts b/src/state/queries/usePostThread/queryCache.ts index 42c2a05fc9..4fc497597a 100644 --- a/src/state/queries/usePostThread/queryCache.ts +++ b/src/state/queries/usePostThread/queryCache.ts @@ -3,14 +3,21 @@ import {type $Typed} from '@atproto/lex' import {AtUri} from '@atproto/syntax' import {type QueryClient, useQueryClient} from '@tanstack/react-query' +import {type ValidFeedPostNumbering} from '#/lib/api/feed-manip' import { dangerousGetPostShadow, updatePostShadow, } from '#/state/cache/post-shadow' import {findAllPostsInQueryData as findAllPostsInBookmarksQueryData} from '#/state/queries/bookmarks/useBookmarksQuery' -import {findAllPostsInQueryData as findAllPostsInExploreFeedPreviewsQueryData} from '#/state/queries/explore-feed-previews' +import { + findAllPostsInQueryData as findAllPostsInExploreFeedPreviewsQueryData, + findPostNumberingInQueryData as findPostNumberingInExploreFeedPreviewsQueryData, +} from '#/state/queries/explore-feed-previews' import {findAllPostsInQueryData as findAllPostsInNotifsQueryData} from '#/state/queries/notifications/feed' -import {findAllPostsInQueryData as findAllPostsInFeedQueryData} from '#/state/queries/post-feed' +import { + findAllPostsInQueryData as findAllPostsInFeedQueryData, + findPostNumberingInQueryData as findPostNumberingInFeedQueryData, +} from '#/state/queries/post-feed' import {findAllPostsInQueryData as findAllPostsInQuoteQueryData} from '#/state/queries/post-quotes' import {findAllPostsInQueryData as findAllPostsInSearchQueryData} from '#/state/queries/search-posts-v2' import {usePostThreadContext} from '#/state/queries/usePostThread' @@ -207,8 +214,15 @@ export function getThreadPlaceholder( queryClient: QueryClient, uri: string, ): $Typed | void { + const postNumbering = + findPostNumberingInFeedQueryData(queryClient, uri) ?? + findPostNumberingInExploreFeedPreviewsQueryData(queryClient, uri) let partial - for (let item of getThreadPlaceholderCandidates(queryClient, uri)) { + for (let item of getThreadPlaceholderCandidates( + queryClient, + uri, + postNumbering, + )) { /* * Currently, the backend doesn't send full post info in some cases (for * example, for quoted posts). We use missing `likeCount` as a way to @@ -231,6 +245,7 @@ export function getThreadPlaceholder( export function* getThreadPlaceholderCandidates( queryClient: QueryClient, uri: string, + postNumbering?: ValidFeedPostNumbering, ): Generator< $Typed< Omit & { @@ -243,7 +258,7 @@ export function* getThreadPlaceholderCandidates( * Check post thread queries first */ for (const post of findAllPostsInQueryData(queryClient, uri)) { - yield postViewToThreadPlaceholder(post) + yield postViewToThreadPlaceholder(post, postNumbering) } /* @@ -253,25 +268,25 @@ export function* getThreadPlaceholderCandidates( * avoid a notification->post scroll jump. */ for (let post of findAllPostsInNotifsQueryData(queryClient, uri)) { - yield postViewToThreadPlaceholder(post) + yield postViewToThreadPlaceholder(post, postNumbering) } for (let post of findAllPostsInFeedQueryData(queryClient, uri)) { - yield postViewToThreadPlaceholder(post) + yield postViewToThreadPlaceholder(post, postNumbering) } for (let post of findAllPostsInQuoteQueryData(queryClient, uri)) { - yield postViewToThreadPlaceholder(post) + yield postViewToThreadPlaceholder(post, postNumbering) } for (let post of findAllPostsInSearchQueryData(queryClient, uri)) { - yield postViewToThreadPlaceholder(post) + yield postViewToThreadPlaceholder(post, postNumbering) } for (let post of findAllPostsInBookmarksQueryData(queryClient, uri)) { - yield postViewToThreadPlaceholder(post) + yield postViewToThreadPlaceholder(post, postNumbering) } for (let post of findAllPostsInExploreFeedPreviewsQueryData( queryClient, uri, )) { - yield postViewToThreadPlaceholder(post) + yield postViewToThreadPlaceholder(post, postNumbering) } } diff --git a/src/state/queries/usePostThread/views.ts b/src/state/queries/usePostThread/views.ts index a3843878df..270cb39d6c 100644 --- a/src/state/queries/usePostThread/views.ts +++ b/src/state/queries/usePostThread/views.ts @@ -2,6 +2,7 @@ import {type $Typed} from '@atproto/lex' import {AtUri} from '@atproto/syntax' import {moderatePost, type ModerationOpts} from '@bsky/sdk/moderation' +import {type ValidFeedPostNumbering} from '#/lib/api/feed-manip' import {makeProfileLink} from '#/lib/routes/links' import { type ApiThreadItem, @@ -156,6 +157,7 @@ export function skeleton({ export function postViewToThreadPlaceholder( post: app.bsky.feed.defs.PostView, + postNumbering?: ValidFeedPostNumbering, ): $Typed< Omit & { value: $Typed @@ -168,7 +170,8 @@ export function postViewToThreadPlaceholder( value: { $type: 'app.bsky.unspecced.defs#threadItemPost', post, - opThread: false, + opThread: !!postNumbering, + ...postNumbering, moreParents: false, moreReplies: 0, hiddenByThreadgate: false, diff --git a/src/state/queries/util.test.tsx b/src/state/queries/util.test.tsx index 695ada0697..43f109aaf3 100644 --- a/src/state/queries/util.test.tsx +++ b/src/state/queries/util.test.tsx @@ -78,14 +78,14 @@ describe('useAutoPagination', () => { const itemCount = 0 const {rerender} = renderHook(() => useAutoPagination(value, itemCount, 10)) - for (let i = 1; i < 50; i++) { + for (let i = 1; i < 5; i++) { value = query({ fetchNextPage, data, }) rerender(undefined) } - expect(fetchNextPage).toHaveBeenCalledTimes(49) + expect(fetchNextPage).toHaveBeenCalledTimes(4) const second = query({ data: { diff --git a/src/state/queries/util.ts b/src/state/queries/util.ts index 718b6cf7b8..580ba9493e 100644 --- a/src/state/queries/util.ts +++ b/src/state/queries/util.ts @@ -9,6 +9,14 @@ import { import {app} from '#/lexicons' import * as bsky from '#/types/bsky' +/** + * The appview does its own `fillPage`, and defaults to 10 pages. Previously + * the frontend tried up to 50 pages, thus the MAX_ATTEMPTS of 5 is a + * reasonable compromise to match pre-existing behavior and without blowing up + * our backend. + */ +const MAX_ATTEMPTS = 5 + type AutoPaginationQuery = { data?: {pageParams: unknown[]} isLoading: boolean @@ -75,7 +83,7 @@ export function useAutoPagination( .some(param => Object.is(cursorOf(param), currentCursor)) if (repeatedCursor) return attemptCount.current++ - if (attemptCount.current < 50) { + if (attemptCount.current < MAX_ATTEMPTS) { void query.fetchNextPage() } } else { diff --git a/src/state/session/index.tsx b/src/state/session/index.tsx index e8e3613ddc..1c98b4bdfa 100644 --- a/src/state/session/index.tsx +++ b/src/state/session/index.tsx @@ -683,9 +683,11 @@ export function Provider({children}: React.PropsWithChildren<{}>) { const bundle = state.currentBundleState.bundle as unknown as SessionBundle | PublicSessionBundle - // @ts-expect-error window type is not declared, debug only - // eslint-disable-next-line react-hooks/immutability - if (__DEV__ && IS_WEB) window.bundle = bundle + useEffect(() => { + if (!__DEV__ || !IS_WEB) return + // @ts-expect-error window type is not declared, debug only + window.bundle = bundle + }, [bundle]) const currentBundleRef = useRef(bundle) /* diff --git a/src/view/com/composer/Composer.tsx b/src/view/com/composer/Composer.tsx index 465110c45a..28f69300df 100644 --- a/src/view/com/composer/Composer.tsx +++ b/src/view/com/composer/Composer.tsx @@ -1555,12 +1555,12 @@ export const ComposePost = ({ color="primary" /> )} + - )} @@ -1681,6 +1681,8 @@ let ComposerPost = memo(function ComposerPost({ return ( - - @@ -122,17 +118,17 @@ export function DraftsButton({ {canSaveDraft && ( void handleSaveAndOpen()} color="primary" /> )} + - diff --git a/src/view/com/composer/labels/LabelsBtn.tsx b/src/view/com/composer/labels/LabelsBtn.tsx index 9471dc0d2e..a8e7076a48 100644 --- a/src/view/com/composer/labels/LabelsBtn.tsx +++ b/src/view/com/composer/labels/LabelsBtn.tsx @@ -101,7 +101,7 @@ function DialogInner({ return ( + style={[a.w_full, web({maxWidth: 500})]}> diff --git a/src/view/com/composer/state/composer.test.ts b/src/view/com/composer/state/composer.test.ts new file mode 100644 index 0000000000..fc91e4b913 --- /dev/null +++ b/src/view/com/composer/state/composer.test.ts @@ -0,0 +1,60 @@ +import {composerReducer, createComposerState} from './composer' + +jest.mock('#/state/gallery', () => ({ + createInitialImages: jest.fn(), +})) +jest.mock('#/logger', () => ({ + logger: { + warn: jest.fn(), + }, +})) +jest.mock('#/state/queries/postgate/util', () => ({ + createPostgateRecord: jest.fn(() => ({})), +})) +jest.mock('#/state/queries/threadgate', () => ({ + threadgateRecordToAllowUISetting: jest.fn(() => []), +})) + +function createState() { + return createComposerState({ + initText: undefined, + initMention: undefined, + initImageUris: undefined, + initQuoteUri: undefined, + initInteractionSettings: undefined, + }) +} + +describe('composerReducer', () => { + describe('add_post', () => { + it('selects the appended post and requests focus', () => { + const state = createState() + + const nextState = composerReducer(state, {type: 'add_post'}) + + expect(nextState.thread.posts).toHaveLength(2) + expect(nextState.activePostIndex).toBe(1) + expect(nextState.mutableNeedsFocusActive).toBe(true) + }) + + it('selects a post inserted in the middle of a thread', () => { + let state = createState() + state = composerReducer(state, {type: 'add_post'}) + state = composerReducer(state, {type: 'add_post'}) + + const lastPostId = state.thread.posts[2].id + state = composerReducer(state, { + type: 'focus_post', + postId: state.thread.posts[0].id, + }) + + const nextState = composerReducer(state, {type: 'add_post'}) + + expect(nextState.thread.posts).toHaveLength(4) + expect(nextState.activePostIndex).toBe(1) + expect(nextState.thread.posts[2].id).not.toBe(lastPostId) + expect(nextState.thread.posts[3].id).toBe(lastPostId) + expect(nextState.mutableNeedsFocusActive).toBe(true) + }) + }) +}) diff --git a/src/view/com/composer/state/composer.ts b/src/view/com/composer/state/composer.ts index 5a013a830b..5e56bab21f 100644 --- a/src/view/com/composer/state/composer.ts +++ b/src/view/com/composer/state/composer.ts @@ -253,6 +253,8 @@ export function composerReducer( return { ...state, isDirty: true, + activePostIndex: activePostIndex + 1, + mutableNeedsFocusActive: true, thread: { ...state.thread, posts: nextPosts, diff --git a/src/view/com/home/HomeHeader.tsx b/src/view/com/home/HomeHeader.tsx index a2f11aa9c5..c8174e4337 100644 --- a/src/view/com/home/HomeHeader.tsx +++ b/src/view/com/home/HomeHeader.tsx @@ -1,7 +1,10 @@ import {useCallback, useMemo} from 'react' +import {useLingui} from '@lingui/react/macro' import {useNavigation} from '@react-navigation/native' +import {TIMELINE_SAVED_FEED} from '#/lib/constants' import {type NavigationProp} from '#/lib/routes/types' +import {getLocalizedFeedName} from '#/lib/strings/feed-names' import {type FeedSourceInfo} from '#/state/queries/feed' import {useSession} from '#/state/session' import {type RenderTabBarFnProps} from '#/view/com/pager/Pager' @@ -12,28 +15,29 @@ export function HomeHeader( props: RenderTabBarFnProps & { testID?: string onPressSelected: () => void - feeds: FeedSourceInfo[] + feeds: Pick[] }, ) { const {feeds, onSelect: onSelectProp} = props const {hasSession} = useSession() + const {t: l, i18n} = useLingui() const navigation = useNavigation() const hasPinnedCustom = useMemo(() => { if (!hasSession) return false return feeds.some(tab => { - const isFollowing = tab.uri === 'following' + const isFollowing = tab.uri === TIMELINE_SAVED_FEED.value return !isFollowing }) }, [feeds, hasSession]) const items = useMemo(() => { - const pinnedNames = feeds.map(f => f.displayName) + const pinnedNames = feeds.map(f => getLocalizedFeedName(f, i18n)) if (!hasPinnedCustom) { - return pinnedNames.concat('Feeds ✨') + return pinnedNames.concat(l`Feeds ✨`) } return pinnedNames - }, [hasPinnedCustom, feeds]) + }, [i18n, l, hasPinnedCustom, feeds]) const onPressFeedsLink = useCallback(() => { navigation.navigate('Feeds') diff --git a/src/view/com/pager/TabBar.tsx b/src/view/com/pager/TabBar.tsx index 0e259544ce..595c235f1d 100644 --- a/src/view/com/pager/TabBar.tsx +++ b/src/view/com/pager/TabBar.tsx @@ -332,7 +332,7 @@ export function TabBar({ syncScrollState.set('unsynced') }} onScroll={e => { - scrollX.value = Math.round(e.nativeEvent.contentOffset.x) + scrollX.set(Math.round(e.nativeEvent.contentOffset.x)) }}> { diff --git a/src/view/com/posts/PostFeed.tsx b/src/view/com/posts/PostFeed.tsx index 85eb1fb627..5806548342 100644 --- a/src/view/com/posts/PostFeed.tsx +++ b/src/view/com/posts/PostFeed.tsx @@ -1077,15 +1077,22 @@ let PostFeed = ({ onPostSeen(post) - // Only track the root post of each slice (index 0) to avoid double-counting thread items - if (indexInSlice === 0 && !seenPostUrisRef.current.has(post.uri)) { + // Track the post selected by the feed once it is actually visible. + if ( + post.uri === slice.feedPostUri && + !seenPostUrisRef.current.has(post.uri) + ) { seenPostUrisRef.current.add(post.uri) - const position = getPostPosition('sliceItem', item.key) + const position = getPostPosition( + 'sliceItem', + slice.items[0]._reactKey, + ) ax.metric('post:view', { uri: post.uri, authorDid: post.author.did, + isReply: !!postItem.record.reply, logContext: 'FeedItem', feedDescriptor: feedFeedback.feedDescriptor || feed, position, @@ -1121,6 +1128,7 @@ let PostFeed = ({ ax.metric('post:view', { uri: post.uri, authorDid: post.author.did, + isReply: !!postItem.record.reply, logContext: 'FeedItem', feedDescriptor: feedFeedback.feedDescriptor || feed, position, diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx index 3bdfa82b62..5111165e6c 100644 --- a/src/view/screens/Home.tsx +++ b/src/view/screens/Home.tsx @@ -4,9 +4,14 @@ import { Reanimated3DefaultSpringConfig, withSpring, } from 'react-native-reanimated' +import {useLingui} from '@lingui/react/macro' import {useFocusEffect} from '@react-navigation/native' -import {PROD_DEFAULT_FEED} from '#/lib/constants' +import { + DISCOVER_FEED_URI, + PROD_DEFAULT_FEED, + TIMELINE_SAVED_FEED, +} from '#/lib/constants' import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback' import {useOTAUpdates} from '#/lib/hooks/useOTAUpdates' import {useSetTitle} from '#/lib/hooks/useSetTitle' @@ -15,6 +20,7 @@ import { type HomeTabNavigatorParams, type NativeStackScreenProps, } from '#/lib/routes/types' +import {getLocalizedFeedName} from '#/lib/strings/feed-names' import {emitSoftReset} from '#/state/events' import { type SavedFeedSourceInfo, @@ -114,6 +120,7 @@ function HomeScreenReady({ preferences: UsePreferencesQueryResponse pinnedFeedInfos: SavedFeedSourceInfo[] }) { + const {i18n} = useLingui() const ax = useAnalytics() const allFeeds = useMemo( () => pinnedFeedInfos.map(f => f.feedDescriptor), @@ -125,13 +132,14 @@ function HomeScreenReady({ const maybeFoundIndex = allFeeds.indexOf(maybeRawSelectedFeed) const selectedIndex = Math.max(0, maybeFoundIndex) const maybeSelectedFeed: FeedDescriptor | undefined = allFeeds[selectedIndex] + const selectedFeedInfo = pinnedFeedInfos[selectedIndex] const requestNotificationsPermission = useRequestNotificationsPermission() - useSetTitle(pinnedFeedInfos[selectedIndex]?.displayName) + useSetTitle(selectedFeedInfo && getLocalizedFeedName(selectedFeedInfo, i18n)) useOTAUpdates() useEffect(() => { - requestNotificationsPermission('Home') + void requestNotificationsPermission('Home') }, [requestNotificationsPermission]) const pagerRef = useRef(null) @@ -223,8 +231,13 @@ function HomeScreenReady({ {...props} testID="homeScreenFeedTabs" onPressSelected={onPressSelected} - // @ts-expect-error - feeds={[{displayName: 'Following'}, {displayName: 'Discover'}]} + feeds={[ + { + displayName: 'Following', + uri: TIMELINE_SAVED_FEED.value, + }, + {displayName: 'Discover', uri: DISCOVER_FEED_URI}, + ]} /> ) } diff --git a/src/view/shell/desktop/Feeds.tsx b/src/view/shell/desktop/Feeds.tsx index 8e4e98addc..2babcfbcb0 100644 --- a/src/view/shell/desktop/Feeds.tsx +++ b/src/view/shell/desktop/Feeds.tsx @@ -1,10 +1,10 @@ import {Pressable, View} from 'react-native' -import {msg} from '@lingui/core/macro' -import {useLingui} from '@lingui/react' +import {useLingui} from '@lingui/react/macro' import {useNavigation, useNavigationState} from '@react-navigation/native' import {getCurrentRoute} from '#/lib/routes/helpers' import {type NavigationProp} from '#/lib/routes/types' +import {getLocalizedFeedName} from '#/lib/strings/feed-names' import {emitSoftReset} from '#/state/events' import { type SavedFeedSourceInfo, @@ -22,7 +22,7 @@ import {useAnalytics} from '#/analytics' export function DesktopFeeds() { const t = useTheme() - const {_} = useLingui() + const {t: l} = useLingui() const ax = useAnalytics() const {data: pinnedFeedInfos, error, isLoading} = usePinnedFeedsInfos() const selectedFeed = useSelectedFeed() @@ -100,10 +100,9 @@ export function DesktopFeeds() { /> ) })} - - {_(msg`More feeds`)} + {l`More feeds`} ) @@ -170,19 +169,20 @@ function FeedItem({ onPress: () => void }) { const t = useTheme() - const {_} = useLingui() + const {t: l, i18n} = useLingui() const { state: hovered, onIn: onHoverIn, onOut: onHoverOut, } = useInteractionState() const isFollowing = feedInfo.feedDescriptor === 'following' + const displayName = getLocalizedFeedName(feedInfo, i18n) return ( - {feedInfo.displayName} + {displayName} )