diff --git a/apps/mobile/package.json b/apps/mobile/package.json index 3c378adbc025129cd7a0c25606d18533a0e5c340..4afc3525c8ce6e0e56840882f865377a43a8b019 100644 --- a/apps/mobile/package.json +++ b/apps/mobile/package.json @@ -48,8 +48,8 @@ "@clerk/expo": "catalog:", "@effect/atom-react": "catalog:", "@expo-google-fonts/dm-sans": "^0.4.2", - "@expo/metro-runtime": "~56.0.15", - "@expo/ui": "~56.0.18", + "@expo/metro-runtime": "~57.0.14", + "@expo/ui": "~57.0.14", "@legendapp/list": "catalog:", "@noble/curves": "catalog:", "@noble/hashes": "catalog:", @@ -72,52 +72,52 @@ "clsx": "^2.1.1", "diff": "8.0.3", "effect": "catalog:", - "expo": "~56.0.12", - "expo-asset": "~56.0.17", - "expo-auth-session": "~56.0.14", - "expo-blur": "~56.0.3", - "expo-build-properties": "~56.0.19", - "expo-camera": "~56.0.8", - "expo-clipboard": "~56.0.4", - "expo-constants": "~56.0.18", - "expo-crypto": "~56.0.4", - "expo-dev-client": "~56.0.20", - "expo-device": "~56.0.4", - "expo-file-system": "~56.0.8", - "expo-font": "~56.0.7", - "expo-glass-effect": "~56.0.4", - "expo-haptics": "~56.0.3", - "expo-image": "~56.0.11", - "expo-image-picker": "~56.0.18", - "expo-linking": "~56.0.14", - "expo-network": "~56.0.5", - "expo-notifications": "~56.0.18", + "expo": "~57.0.18", + "expo-asset": "~57.0.15", + "expo-auth-session": "~57.0.10", + "expo-blur": "~57.0.2", + "expo-build-properties": "~57.0.15", + "expo-camera": "~57.0.4", + "expo-clipboard": "~57.0.1", + "expo-constants": "~57.0.16", + "expo-crypto": "~57.0.2", + "expo-dev-client": "~57.0.16", + "expo-device": "~57.0.1", + "expo-file-system": "~57.0.6", + "expo-font": "~57.0.2", + "expo-glass-effect": "~57.0.1", + "expo-haptics": "~57.0.2", + "expo-image": "~57.0.3", + "expo-image-picker": "~57.0.14", + "expo-linking": "~57.0.8", + "expo-network": "~57.0.1", + "expo-notifications": "~57.0.15", "expo-paste-input": "^0.1.15", "expo-quick-actions": "^6.0.2", - "expo-secure-store": "~56.0.4", - "expo-sharing": "~56.0.18", - "expo-splash-screen": "~56.0.10", - "expo-sqlite": "~56.0.5", - "expo-symbols": "~56.0.6", - "expo-updates": "~56.0.19", - "expo-web-browser": "~56.0.5", - "expo-widgets": "~56.0.19", + "expo-secure-store": "~57.0.2", + "expo-sharing": "~57.0.16", + "expo-splash-screen": "~57.0.8", + "expo-sqlite": "~57.0.2", + "expo-symbols": "~57.0.2", + "expo-updates": "~57.0.19", + "expo-web-browser": "~57.0.2", + "expo-widgets": "~57.0.15", "punycode": "^2.3.1", "react": "19.2.3", "react-dom": "19.2.3", - "react-native": "0.85.3", - "react-native-gesture-handler": "~2.31.1", + "react-native": "0.86.3", + "react-native-gesture-handler": "~2.32.0", "react-native-image-viewing": "^0.2.2", "react-native-keyboard-controller": "1.21.13", "react-native-nitro-markdown": "^0.5.0", "react-native-nitro-modules": "0.35.9", - "react-native-reanimated": "4.3.1", + "react-native-reanimated": "4.5.1", "react-native-safe-area-context": "~5.7.0", - "react-native-screens": "4.25.2", + "react-native-screens": "~4.26.0", "react-native-shiki-engine": "^0.3.12", "react-native-svg": "15.15.4", "react-native-webview": "^13.16.1", - "react-native-worklets": "0.8.3", + "react-native-worklets": "0.10.1", "shiki": "4.2.0", "tailwind-merge": "^3.5.0", "uniwind": "^1.6.2" @@ -126,7 +126,7 @@ "@effect/vitest": "catalog:", "@pierre/trees": "1.0.0-beta.4", "@types/react": "~19.2.0", - "babel-preset-expo": "~56.0.0", + "babel-preset-expo": "~57.0.9", "tailwindcss": "^4.0.0", "typescript": "catalog:" }, @@ -134,6 +134,11 @@ "react-native-nitro-markdown": "file:deps/react-native-nitro-markdown-0.5.0.tgz" }, "expo": { + "install": { + "exclude": [ + "react-native-keyboard-controller" + ] + }, "autolinking": { "buildFromSource": [ "react-native-screens", diff --git a/patches/@expo%2Fmetro-config@56.0.14.patch b/patches/@expo%2Fmetro-config@56.0.14.patch deleted file mode 100644 index c25173730c8208b3a4c3e2fd7d4ba79f32f84188..0000000000000000000000000000000000000000 --- a/patches/@expo%2Fmetro-config@56.0.14.patch +++ /dev/null @@ -1,93 +0,0 @@ -diff --git a/build/serializer/sourceMap.js b/build/serializer/sourceMap.js -index 4cc9aa4..703dfe0 100644 ---- a/build/serializer/sourceMap.js -+++ b/build/serializer/sourceMap.js -@@ -20,6 +20,20 @@ function loadRemapping() { - } - return _remapping; - } -+let _sourceMapCodec; -+function loadSourceMapCodec() { -+ if (!_sourceMapCodec) { -+ _sourceMapCodec = require('@jridgewell/sourcemap-codec'); -+ } -+ return _sourceMapCodec; -+} -+let _traceMapping; -+function loadTraceMapping() { -+ if (!_traceMapping) { -+ _traceMapping = require('@jridgewell/trace-mapping'); -+ } -+ return _traceMapping; -+} - let _Generator; - function loadGenerator() { - if (!_Generator) { -@@ -199,6 +213,58 @@ function patchMetroSourceMapStringForPackedMaps() { - stock.sourceMapString = sourceMapString; - stock.sourceMapStringNonBlocking = sourceMapStringNonBlocking; - } -+// Hermes can emit mappings for Metro trailer/debug lines that have no -+// corresponding Metro source-map line. @jridgewell/remapping assumes every -+// referenced generated line exists, so strip those invalid bridge segments. -+function getGeneratedLineCount(map) { -+ const { TraceMap, decodedMappings } = loadTraceMapping(); -+ return decodedMappings(new TraceMap(map)).length; -+} -+function dropInvalidOriginalSegments(map, maxOriginalLine) { -+ const { TraceMap, decodedMappings } = loadTraceMapping(); -+ const decoded = decodedMappings(new TraceMap(map)); -+ let didChange = false; -+ const filtered = decoded.map((line) => { -+ const filteredLine = line.filter((segment) => { -+ if (segment.length < 4) { -+ return true; -+ } -+ const sourceIndex = segment[1]; -+ const sourceLine = segment[2]; -+ const sourceColumn = segment[3]; -+ return (sourceIndex >= 0 && -+ sourceIndex < map.sources.length && -+ sourceLine >= 0 && -+ sourceLine < maxOriginalLine && -+ sourceColumn >= 0); -+ }); -+ if (filteredLine.length !== line.length) { -+ didChange = true; -+ } -+ return filteredLine; -+ }); -+ if (!didChange) { -+ return map; -+ } -+ return { -+ ...map, -+ mappings: loadSourceMapCodec().encode(filtered), -+ }; -+} -+function sanitizeSourceMapsForComposition(maps) { -+ let sanitized = maps; -+ for (let index = 1; index < maps.length; index++) { -+ const maxOriginalLine = getGeneratedLineCount(sanitized[index - 1]); -+ const next = dropInvalidOriginalSegments(sanitized[index], maxOriginalLine); -+ if (next !== sanitized[index]) { -+ if (sanitized === maps) { -+ sanitized = maps.slice(); -+ } -+ sanitized[index] = next; -+ } -+ } -+ return sanitized; -+} - // `maps[0]` is the original-most transform; `maps[maps.length - 1]` is - // the most recent. Built on `@jridgewell/remapping` instead of mozilla's - // `SourceMapConsumer`-based composer. -@@ -226,7 +292,7 @@ function composeSourceMaps(maps) { - return { ...map, ignoreList: map.x_google_ignoreList }; - }); - // Metro convention is original-first; remapping is most-recent first. -- const reversed = normalized.slice().reverse(); -+ const reversed = sanitizeSourceMapsForComposition(normalized).slice().reverse(); - const composed = loadRemapping()(reversed, () => null); - // Re-emit as a plain object — remapping returns a `SourceMap` class - // instance, which doesn't round-trip JSON cleanly. diff --git a/patches/@expo__metro-config@57.0.12.patch b/patches/@expo__metro-config@57.0.12.patch new file mode 100644 index 0000000000000000000000000000000000000000..26ce34aed6dd450d3438fb29587bb6d0947aecd7 --- /dev/null +++ b/patches/@expo__metro-config@57.0.12.patch @@ -0,0 +1,86 @@ +diff --git a/build/serializer/sourceMap.js b/build/serializer/sourceMap.js +index 547e53377a7c560db8dfd983601606de15896e07..29a0c855088bceacb7ba00a627615539cbf37738 100644 +--- a/build/serializer/sourceMap.js ++++ b/build/serializer/sourceMap.js +@@ -27,6 +27,13 @@ function loadSourcemapCodec() { + } + return _sourcemapCodec; + } ++let _traceMapping; ++function loadTraceMapping() { ++ if (!_traceMapping) { ++ _traceMapping = require('@jridgewell/trace-mapping'); ++ } ++ return _traceMapping; ++} + let _Generator; + function loadGenerator() { + if (!_Generator) { +@@ -224,6 +231,58 @@ function repairInvalidNegativeIndices(map) { + } + return changed ? { ...map, mappings: encode(decoded) } : map; + } ++// Hermes can emit mappings for Metro trailer/debug lines that have no ++// corresponding Metro source-map line. @jridgewell/remapping assumes every ++// referenced generated line exists, so strip those invalid bridge segments. ++function getGeneratedLineCount(map) { ++ const { TraceMap, decodedMappings } = loadTraceMapping(); ++ return decodedMappings(new TraceMap(map)).length; ++} ++function dropInvalidOriginalSegments(map, maxOriginalLine) { ++ const { TraceMap, decodedMappings } = loadTraceMapping(); ++ const decoded = decodedMappings(new TraceMap(map)); ++ let didChange = false; ++ const filtered = decoded.map((line) => { ++ const filteredLine = line.filter((segment) => { ++ if (segment.length < 4) { ++ return true; ++ } ++ const sourceIndex = segment[1]; ++ const sourceLine = segment[2]; ++ const sourceColumn = segment[3]; ++ return (sourceIndex >= 0 && ++ sourceIndex < map.sources.length && ++ sourceLine >= 0 && ++ sourceLine < maxOriginalLine && ++ sourceColumn >= 0); ++ }); ++ if (filteredLine.length !== line.length) { ++ didChange = true; ++ } ++ return filteredLine; ++ }); ++ if (!didChange) { ++ return map; ++ } ++ return { ++ ...map, ++ mappings: loadSourcemapCodec().encode(filtered), ++ }; ++} ++function sanitizeSourceMapsForComposition(maps) { ++ let sanitized = maps; ++ for (let index = 1; index < maps.length; index++) { ++ const maxOriginalLine = getGeneratedLineCount(sanitized[index - 1]); ++ const next = dropInvalidOriginalSegments(sanitized[index], maxOriginalLine); ++ if (next !== sanitized[index]) { ++ if (sanitized === maps) { ++ sanitized = maps.slice(); ++ } ++ sanitized[index] = next; ++ } ++ } ++ return sanitized; ++} + // `maps[0]` is the original-most transform; `maps[maps.length - 1]` is + // the most recent. Built on `@jridgewell/remapping` instead of mozilla's + // `SourceMapConsumer`-based composer. +@@ -251,7 +310,7 @@ function composeSourceMaps(maps) { + return { ...map, ignoreList: map.x_google_ignoreList }; + }); + // Metro convention is original-first; remapping is most-recent first. +- let input = normalized.slice().reverse(); ++ let input = sanitizeSourceMapsForComposition(normalized).slice().reverse(); + const remap = loadRemapping(); + let composed; + try { diff --git a/patches/@react-native__gradle-plugin@0.85.3.patch b/patches/@react-native__gradle-plugin@0.85.3.patch deleted file mode 100644 index 7106ccca4ac3f5ddffae77a6d90fb01e0e913b34..0000000000000000000000000000000000000000 --- a/patches/@react-native__gradle-plugin@0.85.3.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/settings.gradle.kts b/settings.gradle.kts -index b3c46a3bf5eb21c0bb1c9435b5582aecbc57d57a..14f1e9c2063ef10ca3f2ecbb2336b8a4aacfcc9c 100644 ---- a/settings.gradle.kts -+++ b/settings.gradle.kts -@@ -13,7 +13,7 @@ pluginManagement { - } - } - --plugins { id("org.gradle.toolchains.foojay-resolver-convention").version("0.5.0") } -+plugins { id("org.gradle.toolchains.foojay-resolver-convention").version("1.0.0") } - - include( - ":react-native-gradle-plugin", diff --git a/patches/expo-modules-jsi@56.0.10.patch b/patches/expo-modules-jsi@56.0.10.patch deleted file mode 100644 index afb1da5caaa0ab2fa008d7cfc9de7954b7dbab22..0000000000000000000000000000000000000000 --- a/patches/expo-modules-jsi@56.0.10.patch +++ /dev/null @@ -1,21 +0,0 @@ -diff --git a/apple/Sources/ExpoModulesJSI/Runtime/JavaScriptRuntime.swift b/apple/Sources/ExpoModulesJSI/Runtime/JavaScriptRuntime.swift -index a0e3e24d6070c5ec0a220af3cb56fe3373fe1968..d610cc38dd8dee363ea2f1822aea0c4a492cf825 100644 ---- a/apple/Sources/ExpoModulesJSI/Runtime/JavaScriptRuntime.swift -+++ b/apple/Sources/ExpoModulesJSI/Runtime/JavaScriptRuntime.swift -@@ -215,8 +215,15 @@ open class JavaScriptRuntime: Equatable, @unchecked Sendable { - .toOpaque() - // Pass a null setter to C++ when the Swift setter is nil so that JS assignment - // raises a `jsi::JSError` directly, without crossing the Swift boundary. -+ if set == nil { -+ let callbacks = expo.HostObjectCallbacks( -+ context, getter, nil, propertyNamesGetter, deallocate) -+ let hostObject = expo.HostObject.makeObject(pointee, consume callbacks) -+ -+ return JavaScriptObject(self, hostObject) -+ } - let callbacks = expo.HostObjectCallbacks( -- context, getter, set == nil ? nil : setter, propertyNamesGetter, deallocate) -+ context, getter, setter, propertyNamesGetter, deallocate) - let hostObject = expo.HostObject.makeObject(pointee, consume callbacks) - - return JavaScriptObject(self, hostObject) diff --git a/patches/react-native-gesture-handler@2.31.2.patch b/patches/react-native-gesture-handler@2.31.2.patch deleted file mode 100644 index a4f345e9e33227131a7be81cf5ee32b2c5833021..0000000000000000000000000000000000000000 --- a/patches/react-native-gesture-handler@2.31.2.patch +++ /dev/null @@ -1,124 +0,0 @@ -diff --git a/lib/commonjs/components/ReanimatedSwipeable/ReanimatedSwipeable.js b/lib/commonjs/components/ReanimatedSwipeable/ReanimatedSwipeable.js -index 551ab92bf58db0b79d428dcd2f2df898ef686493..f1c355b8e40cd4f583ef3a501b044fb6770f4a24 100644 ---- a/lib/commonjs/components/ReanimatedSwipeable/ReanimatedSwipeable.js -+++ b/lib/commonjs/components/ReanimatedSwipeable/ReanimatedSwipeable.js -@@ -34,6 +34,7 @@ const Swipeable = props => { - enableTrackpadTwoFingerGesture = DEFAULT_ENABLE_TRACKING_TWO_FINGER_GESTURE, - dragOffsetFromLeftEdge = DEFAULT_DRAG_OFFSET, - dragOffsetFromRightEdge = DEFAULT_DRAG_OFFSET, -+ failOffsetY, - friction = DEFAULT_FRICTION, - overshootFriction = DEFAULT_OVERSHOOT_FRICTION, - onSwipeableOpenStartDrag, -@@ -285,11 +286,14 @@ const Swipeable = props => { - }).onFinalize(() => { - dragStarted.value = false; - }); -+ if (failOffsetY !== undefined) { -+ pan.failOffsetY(failOffsetY); -+ } - Object.entries(relationProps).forEach(([relationName, relation]) => { - (0, _utils.applyRelationProp)(pan, relationName, relation); - }); - return pan; -- }, [enabled, hitSlop, enableTrackpadTwoFingerGesture, dragOffsetFromRightEdge, dragOffsetFromLeftEdge, updateElementWidths, relationProps, userDrag, rowState, dragStarted, updateAnimatedEvent, onSwipeableOpenStartDrag, onSwipeableCloseStartDrag, handleRelease]); -+ }, [enabled, hitSlop, enableTrackpadTwoFingerGesture, dragOffsetFromRightEdge, dragOffsetFromLeftEdge, failOffsetY, updateElementWidths, relationProps, userDrag, rowState, dragStarted, updateAnimatedEvent, onSwipeableOpenStartDrag, onSwipeableCloseStartDrag, handleRelease]); - (0, _react.useImperativeHandle)(ref, () => swipeableMethods, [swipeableMethods]); - const animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => ({ - transform: [{ -diff --git a/lib/module/components/ReanimatedSwipeable/ReanimatedSwipeable.js b/lib/module/components/ReanimatedSwipeable/ReanimatedSwipeable.js -index a2835d5416ffd5cf9a04e98774516b9e6569691e..b73c177227bf3a232737b0eb1c0e2bb830493c22 100644 ---- a/lib/module/components/ReanimatedSwipeable/ReanimatedSwipeable.js -+++ b/lib/module/components/ReanimatedSwipeable/ReanimatedSwipeable.js -@@ -29,6 +29,7 @@ const Swipeable = props => { - enableTrackpadTwoFingerGesture = DEFAULT_ENABLE_TRACKING_TWO_FINGER_GESTURE, - dragOffsetFromLeftEdge = DEFAULT_DRAG_OFFSET, - dragOffsetFromRightEdge = DEFAULT_DRAG_OFFSET, -+ failOffsetY, - friction = DEFAULT_FRICTION, - overshootFriction = DEFAULT_OVERSHOOT_FRICTION, - onSwipeableOpenStartDrag, -@@ -280,11 +281,14 @@ const Swipeable = props => { - }).onFinalize(() => { - dragStarted.value = false; - }); -+ if (failOffsetY !== undefined) { -+ pan.failOffsetY(failOffsetY); -+ } - Object.entries(relationProps).forEach(([relationName, relation]) => { - applyRelationProp(pan, relationName, relation); - }); - return pan; -- }, [enabled, hitSlop, enableTrackpadTwoFingerGesture, dragOffsetFromRightEdge, dragOffsetFromLeftEdge, updateElementWidths, relationProps, userDrag, rowState, dragStarted, updateAnimatedEvent, onSwipeableOpenStartDrag, onSwipeableCloseStartDrag, handleRelease]); -+ }, [enabled, hitSlop, enableTrackpadTwoFingerGesture, dragOffsetFromRightEdge, dragOffsetFromLeftEdge, failOffsetY, updateElementWidths, relationProps, userDrag, rowState, dragStarted, updateAnimatedEvent, onSwipeableOpenStartDrag, onSwipeableCloseStartDrag, handleRelease]); - useImperativeHandle(ref, () => swipeableMethods, [swipeableMethods]); - const animatedStyle = useAnimatedStyle(() => ({ - transform: [{ -diff --git a/lib/typescript/components/ReanimatedSwipeable/ReanimatedSwipeableProps.d.ts b/lib/typescript/components/ReanimatedSwipeable/ReanimatedSwipeableProps.d.ts -index ac8b76830d468edfbc29052b452a36221323c3de..589e329d2aa706ddfff0d1037df0d85a050edbb0 100644 ---- a/lib/typescript/components/ReanimatedSwipeable/ReanimatedSwipeableProps.d.ts -+++ b/lib/typescript/components/ReanimatedSwipeable/ReanimatedSwipeableProps.d.ts -@@ -64,6 +64,13 @@ export interface SwipeableProps { - * a swipe. The default value is 10. - */ - dragOffsetFromRightEdge?: number; -+ /** -+ * Range along the Y axis (in points) that, once exceeded before the swipe -+ * activates, makes the pan fail. Lets vertically-dominant pans (list -+ * scrolling, especially trackpad two-finger pans) skip the swipe entirely. -+ * Passed straight to the underlying Pan gesture's `failOffsetY`. -+ */ -+ failOffsetY?: number | [start: number, end: number]; - /** - * Value indicating if the swipeable panel can be pulled further than the left - * actions panel's width. It is set to true by default as long as the left -diff --git a/src/components/ReanimatedSwipeable/ReanimatedSwipeable.tsx b/src/components/ReanimatedSwipeable/ReanimatedSwipeable.tsx -index b6134c908624adc590ebd264e90e558b88e235d5..41535348e937ad7762bd531d5b63ba6e092ea997 100644 ---- a/src/components/ReanimatedSwipeable/ReanimatedSwipeable.tsx -+++ b/src/components/ReanimatedSwipeable/ReanimatedSwipeable.tsx -@@ -58,6 +58,7 @@ const Swipeable = (props: SwipeableProps) => { - enableTrackpadTwoFingerGesture = DEFAULT_ENABLE_TRACKING_TWO_FINGER_GESTURE, - dragOffsetFromLeftEdge = DEFAULT_DRAG_OFFSET, - dragOffsetFromRightEdge = DEFAULT_DRAG_OFFSET, -+ failOffsetY, - friction = DEFAULT_FRICTION, - overshootFriction = DEFAULT_OVERSHOOT_FRICTION, - onSwipeableOpenStartDrag, -@@ -537,6 +538,10 @@ const Swipeable = (props: SwipeableProps) => { - dragStarted.value = false; - }); - -+ if (failOffsetY !== undefined) { -+ pan.failOffsetY(failOffsetY); -+ } -+ - Object.entries(relationProps).forEach(([relationName, relation]) => { - applyRelationProp( - pan, -@@ -552,6 +557,7 @@ const Swipeable = (props: SwipeableProps) => { - enableTrackpadTwoFingerGesture, - dragOffsetFromRightEdge, - dragOffsetFromLeftEdge, -+ failOffsetY, - updateElementWidths, - relationProps, - userDrag, -diff --git a/src/components/ReanimatedSwipeable/ReanimatedSwipeableProps.ts b/src/components/ReanimatedSwipeable/ReanimatedSwipeableProps.ts -index 0c0e517e0d340faf50ff78c3d48e7a2bbcf808ec..d4b6ff508077728c8be83762923d866dc95b144c 100644 ---- a/src/components/ReanimatedSwipeable/ReanimatedSwipeableProps.ts -+++ b/src/components/ReanimatedSwipeable/ReanimatedSwipeableProps.ts -@@ -77,6 +77,14 @@ export interface SwipeableProps { - */ - dragOffsetFromRightEdge?: number; - -+ /** -+ * Range along the Y axis (in points) that, once exceeded before the swipe -+ * activates, makes the pan fail. Lets vertically-dominant pans (list -+ * scrolling, especially trackpad two-finger pans) skip the swipe entirely. -+ * Passed straight to the underlying Pan gesture's `failOffsetY`. -+ */ -+ failOffsetY?: number | [start: number, end: number]; -+ - /** - * Value indicating if the swipeable panel can be pulled further than the left - * actions panel's width. It is set to true by default as long as the left diff --git a/patches/react-native-gesture-handler@2.32.0.patch b/patches/react-native-gesture-handler@2.32.0.patch new file mode 100644 index 0000000000000000000000000000000000000000..a4f345e9e33227131a7be81cf5ee32b2c5833021 --- /dev/null +++ b/patches/react-native-gesture-handler@2.32.0.patch @@ -0,0 +1,124 @@ +diff --git a/lib/commonjs/components/ReanimatedSwipeable/ReanimatedSwipeable.js b/lib/commonjs/components/ReanimatedSwipeable/ReanimatedSwipeable.js +index 551ab92bf58db0b79d428dcd2f2df898ef686493..f1c355b8e40cd4f583ef3a501b044fb6770f4a24 100644 +--- a/lib/commonjs/components/ReanimatedSwipeable/ReanimatedSwipeable.js ++++ b/lib/commonjs/components/ReanimatedSwipeable/ReanimatedSwipeable.js +@@ -34,6 +34,7 @@ const Swipeable = props => { + enableTrackpadTwoFingerGesture = DEFAULT_ENABLE_TRACKING_TWO_FINGER_GESTURE, + dragOffsetFromLeftEdge = DEFAULT_DRAG_OFFSET, + dragOffsetFromRightEdge = DEFAULT_DRAG_OFFSET, ++ failOffsetY, + friction = DEFAULT_FRICTION, + overshootFriction = DEFAULT_OVERSHOOT_FRICTION, + onSwipeableOpenStartDrag, +@@ -285,11 +286,14 @@ const Swipeable = props => { + }).onFinalize(() => { + dragStarted.value = false; + }); ++ if (failOffsetY !== undefined) { ++ pan.failOffsetY(failOffsetY); ++ } + Object.entries(relationProps).forEach(([relationName, relation]) => { + (0, _utils.applyRelationProp)(pan, relationName, relation); + }); + return pan; +- }, [enabled, hitSlop, enableTrackpadTwoFingerGesture, dragOffsetFromRightEdge, dragOffsetFromLeftEdge, updateElementWidths, relationProps, userDrag, rowState, dragStarted, updateAnimatedEvent, onSwipeableOpenStartDrag, onSwipeableCloseStartDrag, handleRelease]); ++ }, [enabled, hitSlop, enableTrackpadTwoFingerGesture, dragOffsetFromRightEdge, dragOffsetFromLeftEdge, failOffsetY, updateElementWidths, relationProps, userDrag, rowState, dragStarted, updateAnimatedEvent, onSwipeableOpenStartDrag, onSwipeableCloseStartDrag, handleRelease]); + (0, _react.useImperativeHandle)(ref, () => swipeableMethods, [swipeableMethods]); + const animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => ({ + transform: [{ +diff --git a/lib/module/components/ReanimatedSwipeable/ReanimatedSwipeable.js b/lib/module/components/ReanimatedSwipeable/ReanimatedSwipeable.js +index a2835d5416ffd5cf9a04e98774516b9e6569691e..b73c177227bf3a232737b0eb1c0e2bb830493c22 100644 +--- a/lib/module/components/ReanimatedSwipeable/ReanimatedSwipeable.js ++++ b/lib/module/components/ReanimatedSwipeable/ReanimatedSwipeable.js +@@ -29,6 +29,7 @@ const Swipeable = props => { + enableTrackpadTwoFingerGesture = DEFAULT_ENABLE_TRACKING_TWO_FINGER_GESTURE, + dragOffsetFromLeftEdge = DEFAULT_DRAG_OFFSET, + dragOffsetFromRightEdge = DEFAULT_DRAG_OFFSET, ++ failOffsetY, + friction = DEFAULT_FRICTION, + overshootFriction = DEFAULT_OVERSHOOT_FRICTION, + onSwipeableOpenStartDrag, +@@ -280,11 +281,14 @@ const Swipeable = props => { + }).onFinalize(() => { + dragStarted.value = false; + }); ++ if (failOffsetY !== undefined) { ++ pan.failOffsetY(failOffsetY); ++ } + Object.entries(relationProps).forEach(([relationName, relation]) => { + applyRelationProp(pan, relationName, relation); + }); + return pan; +- }, [enabled, hitSlop, enableTrackpadTwoFingerGesture, dragOffsetFromRightEdge, dragOffsetFromLeftEdge, updateElementWidths, relationProps, userDrag, rowState, dragStarted, updateAnimatedEvent, onSwipeableOpenStartDrag, onSwipeableCloseStartDrag, handleRelease]); ++ }, [enabled, hitSlop, enableTrackpadTwoFingerGesture, dragOffsetFromRightEdge, dragOffsetFromLeftEdge, failOffsetY, updateElementWidths, relationProps, userDrag, rowState, dragStarted, updateAnimatedEvent, onSwipeableOpenStartDrag, onSwipeableCloseStartDrag, handleRelease]); + useImperativeHandle(ref, () => swipeableMethods, [swipeableMethods]); + const animatedStyle = useAnimatedStyle(() => ({ + transform: [{ +diff --git a/lib/typescript/components/ReanimatedSwipeable/ReanimatedSwipeableProps.d.ts b/lib/typescript/components/ReanimatedSwipeable/ReanimatedSwipeableProps.d.ts +index ac8b76830d468edfbc29052b452a36221323c3de..589e329d2aa706ddfff0d1037df0d85a050edbb0 100644 +--- a/lib/typescript/components/ReanimatedSwipeable/ReanimatedSwipeableProps.d.ts ++++ b/lib/typescript/components/ReanimatedSwipeable/ReanimatedSwipeableProps.d.ts +@@ -64,6 +64,13 @@ export interface SwipeableProps { + * a swipe. The default value is 10. + */ + dragOffsetFromRightEdge?: number; ++ /** ++ * Range along the Y axis (in points) that, once exceeded before the swipe ++ * activates, makes the pan fail. Lets vertically-dominant pans (list ++ * scrolling, especially trackpad two-finger pans) skip the swipe entirely. ++ * Passed straight to the underlying Pan gesture's `failOffsetY`. ++ */ ++ failOffsetY?: number | [start: number, end: number]; + /** + * Value indicating if the swipeable panel can be pulled further than the left + * actions panel's width. It is set to true by default as long as the left +diff --git a/src/components/ReanimatedSwipeable/ReanimatedSwipeable.tsx b/src/components/ReanimatedSwipeable/ReanimatedSwipeable.tsx +index b6134c908624adc590ebd264e90e558b88e235d5..41535348e937ad7762bd531d5b63ba6e092ea997 100644 +--- a/src/components/ReanimatedSwipeable/ReanimatedSwipeable.tsx ++++ b/src/components/ReanimatedSwipeable/ReanimatedSwipeable.tsx +@@ -58,6 +58,7 @@ const Swipeable = (props: SwipeableProps) => { + enableTrackpadTwoFingerGesture = DEFAULT_ENABLE_TRACKING_TWO_FINGER_GESTURE, + dragOffsetFromLeftEdge = DEFAULT_DRAG_OFFSET, + dragOffsetFromRightEdge = DEFAULT_DRAG_OFFSET, ++ failOffsetY, + friction = DEFAULT_FRICTION, + overshootFriction = DEFAULT_OVERSHOOT_FRICTION, + onSwipeableOpenStartDrag, +@@ -537,6 +538,10 @@ const Swipeable = (props: SwipeableProps) => { + dragStarted.value = false; + }); + ++ if (failOffsetY !== undefined) { ++ pan.failOffsetY(failOffsetY); ++ } ++ + Object.entries(relationProps).forEach(([relationName, relation]) => { + applyRelationProp( + pan, +@@ -552,6 +557,7 @@ const Swipeable = (props: SwipeableProps) => { + enableTrackpadTwoFingerGesture, + dragOffsetFromRightEdge, + dragOffsetFromLeftEdge, ++ failOffsetY, + updateElementWidths, + relationProps, + userDrag, +diff --git a/src/components/ReanimatedSwipeable/ReanimatedSwipeableProps.ts b/src/components/ReanimatedSwipeable/ReanimatedSwipeableProps.ts +index 0c0e517e0d340faf50ff78c3d48e7a2bbcf808ec..d4b6ff508077728c8be83762923d866dc95b144c 100644 +--- a/src/components/ReanimatedSwipeable/ReanimatedSwipeableProps.ts ++++ b/src/components/ReanimatedSwipeable/ReanimatedSwipeableProps.ts +@@ -77,6 +77,14 @@ export interface SwipeableProps { + */ + dragOffsetFromRightEdge?: number; + ++ /** ++ * Range along the Y axis (in points) that, once exceeded before the swipe ++ * activates, makes the pan fail. Lets vertically-dominant pans (list ++ * scrolling, especially trackpad two-finger pans) skip the swipe entirely. ++ * Passed straight to the underlying Pan gesture's `failOffsetY`. ++ */ ++ failOffsetY?: number | [start: number, end: number]; ++ + /** + * Value indicating if the swipeable panel can be pulled further than the left + * actions panel's width. It is set to true by default as long as the left diff --git a/patches/react-native-screens@4.25.2.patch b/patches/react-native-screens@4.25.2.patch deleted file mode 100644 index b5ed05836845ca163c658aad4596a91307f356a8..0000000000000000000000000000000000000000 --- a/patches/react-native-screens@4.25.2.patch +++ /dev/null @@ -1,1950 +0,0 @@ -diff --git a/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt b/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt -index 03d8d9f3a5c403c93282d53cbacf1a339e877e85..54d5eabc6c8a408e711a5be97286fdbb8ab1c461 100644 ---- a/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt -+++ b/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt -@@ -103,6 +103,34 @@ class ScreenStackHeaderConfigViewManager : - config.setTitle(title) - } - -+ // The t3 patch adds these iOS glass-chrome props to the native spec; they have -+ // no Android implementation, but the codegen-generated interface requires the -+ // setters to exist. No-ops keep the Android build compiling. -+ override fun setSubtitle( -+ config: ScreenStackHeaderConfig, -+ subtitle: String?, -+ ) = Unit -+ -+ override fun setLargeSubtitle( -+ config: ScreenStackHeaderConfig, -+ largeSubtitle: String?, -+ ) = Unit -+ -+ override fun setNavigationItemStyle( -+ config: ScreenStackHeaderConfig, -+ navigationItemStyle: String?, -+ ) = Unit -+ -+ override fun setHeaderCenterBarButtonItems( -+ config: ScreenStackHeaderConfig, -+ headerCenterBarButtonItems: ReadableArray?, -+ ) = Unit -+ -+ override fun setHeaderToolbarItems( -+ config: ScreenStackHeaderConfig, -+ headerToolbarItems: ReadableArray?, -+ ) = Unit -+ - override fun setTitleFontFamily( - config: ScreenStackHeaderConfig, - titleFontFamily: String?, -diff --git a/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt b/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt -index 64f14f0c5ade16eb9519b8780d4ce013f88fbd3a..6cb1d69f97a95759c662a6006a9626925d9fefd9 100644 ---- a/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt -+++ b/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt -@@ -47,6 +47,12 @@ class ScreenStackHeaderSubviewManager : - Log.w("[RNScreens]", "hidesSharedBackground prop is not available on Android") - } - -+ // Bar button transition identifiers only apply on iOS. -+ override fun setIdentifier( -+ view: ScreenStackHeaderSubview, -+ identifier: String?, -+ ) = Unit -+ - // synchronousShadowStateUpdatesEnabled is not available on Android atm, - // however we must override their setters - override fun setSynchronousShadowStateUpdatesEnabled( -diff --git a/ios/RNSBarButtonItem.h b/ios/RNSBarButtonItem.h -index ea5325ea8d17b1ddfa790ff8dab48ce83142d4d3..acd2fd7ceb7162ed300abc4d3c9f0c24f4d63898 100644 ---- a/ios/RNSBarButtonItem.h -+++ b/ios/RNSBarButtonItem.h -@@ -13,4 +13,8 @@ typedef void (^RNSBarButtonMenuItemAction)(NSString *menuId); - menuAction:(RNSBarButtonMenuItemAction)menuAction - imageLoader:(RCTImageLoader *)imageLoader; - -++ (UIMenu *)initUIMenuWithDict:(NSDictionary *)dict -+ menuAction:(RNSBarButtonMenuItemAction)menuAction -+ imageLoader:(RCTImageLoader *)imageLoader; -+ - @end -diff --git a/ios/RNSBarButtonItem.mm b/ios/RNSBarButtonItem.mm -index 0eb1f09dee82edd99e3e614938233db5cdeaebfe..73298f10807520970f625e166d7f5dd1338206f1 100644 ---- a/ios/RNSBarButtonItem.mm -+++ b/ios/RNSBarButtonItem.mm -@@ -110,6 +110,58 @@ - (instancetype)initWithConfig:(NSDictionary *)dict - if (dict[@"accessibilityHint"]) { - self.accessibilityHint = dict[@"accessibilityHint"]; - } -+#if !TARGET_OS_TV && RNS_IPHONE_OS_VERSION_AVAILABLE(26_0) -+ NSNumber *glassEffectNum = dict[@"glassEffect"]; -+ if (@available(iOS 26.0, *)) { -+ if ([glassEffectNum boolValue]) { -+ UIButtonConfiguration *configuration = [UIButtonConfiguration glassButtonConfiguration]; -+ configuration.cornerStyle = UIButtonConfigurationCornerStyleCapsule; -+ UIBackgroundConfiguration *background = configuration.background; -+ background.strokeWidth = 0.0; -+ background.strokeColor = UIColor.clearColor; -+ configuration.background = background; -+ configuration.contentInsets = NSDirectionalEdgeInsetsZero; -+ if (title != nil) { -+ configuration.title = title; -+ } -+ -+ UIButton *button = [UIButton buttonWithConfiguration:configuration primaryAction:nil]; -+ button.translatesAutoresizingMaskIntoConstraints = NO; -+ button.enabled = self.enabled; -+ button.accessibilityLabel = self.accessibilityLabel; -+ button.accessibilityHint = self.accessibilityHint; -+ -+ CGFloat resolvedWidth = width != nil ? width.doubleValue : 56.0; -+ [button.widthAnchor constraintEqualToConstant:resolvedWidth].active = YES; -+ [button.heightAnchor constraintEqualToConstant:50.0].active = YES; -+ -+ [[self class] resolveImageFromConfig:dict -+ imageLoader:imageLoader -+ completionBlock:^(UIImage *img) { -+ UIButtonConfiguration *updatedConfiguration = button.configuration; -+ updatedConfiguration.image = img; -+ button.configuration = updatedConfiguration; -+ }]; -+ -+ NSDictionary *menu = dict[@"menu"]; -+ if (menu) { -+ button.menu = [[self class] initUIMenuWithDict:menu menuAction:menuAction imageLoader:imageLoader]; -+ button.showsMenuAsPrimaryAction = YES; -+ } else { -+ NSString *buttonId = dict[@"buttonId"]; -+ if (buttonId && action) { -+ UIAction *pressAction = [UIAction actionWithHandler:^(__kindof UIAction *_Nonnull sender) { -+ action(buttonId); -+ }]; -+ [button addAction:pressAction forControlEvents:UIControlEventTouchUpInside]; -+ } -+ } -+ -+ self.customView = button; -+ return self; -+ } -+ } -+#endif - - #if !TARGET_OS_TV || __TV_OS_VERSION_MAX_ALLOWED >= 170000 - if (@available(tvOS 17.0, *)) { -diff --git a/ios/RNSScreenStackHeaderConfig.h b/ios/RNSScreenStackHeaderConfig.h -index 919b984edc9f91ee9ac26faf257d8a721e26457c..5bb0cd6736ed6bc51db57e2a9326f758f22c51d8 100644 ---- a/ios/RNSScreenStackHeaderConfig.h -+++ b/ios/RNSScreenStackHeaderConfig.h -@@ -21,6 +21,8 @@ - NS_ASSUME_NONNULL_BEGIN - - @property (nonatomic, retain) NSString *title; -+@property (nonatomic, retain) NSString *subtitle; -+@property (nonatomic, retain) NSString *largeSubtitle; - @property (nonatomic, retain) NSString *titleFontFamily; - @property (nonatomic, retain) NSNumber *titleFontSize; - @property (nonatomic, retain) NSString *titleFontWeight; -@@ -45,9 +47,12 @@ NS_ASSUME_NONNULL_BEGIN - @property (nonatomic) BOOL backButtonInCustomView; - @property (nonatomic) UISemanticContentAttribute direction; - @property (nonatomic) UINavigationItemBackButtonDisplayMode backButtonDisplayMode; -+@property (nonatomic) NSInteger navigationItemStyle; - @property (nonatomic) RNSBlurEffectStyle blurEffect; - @property (nonatomic, copy, nullable) NSArray *> *headerRightBarButtonItems; - @property (nonatomic, copy, nullable) NSArray *> *headerLeftBarButtonItems; -+@property (nonatomic, copy, nullable) NSArray *> *headerCenterBarButtonItems; -+@property (nonatomic, copy, nullable) NSArray *> *headerToolbarItems; - @property (nonatomic, readwrite) BOOL synchronousShadowStateUpdatesEnabled; - - NS_ASSUME_NONNULL_END -diff --git a/ios/RNSScreenStackHeaderConfig.mm b/ios/RNSScreenStackHeaderConfig.mm -index 5970e3e3a624b9498b8dedfc16831df03a274d0c..c23776376110b6eda77072b134da29428f4bcba3 100644 ---- a/ios/RNSScreenStackHeaderConfig.mm -+++ b/ios/RNSScreenStackHeaderConfig.mm -@@ -25,11 +25,46 @@ - #import "RNSSearchBar.h" - #import "UINavigationBar+RNSUtility.h" - -+#import -+ - namespace react = facebook::react; - - static const NSNumber *const DEFAULT_TITLE_FONT_SIZE = @17; -+ -+#if !TARGET_OS_TV -+// Each placement keeps its own cache so changes to one side do not move live -+// items on the other side into new groups during a navigation transition. -+static char RNSAppliedLeadingHeaderItemsKey; -+static char RNSAppliedTrailingHeaderItemsKey; -+static char RNSAppliedCenterHeaderItemsKey; -+ -+// Records a placement's owner and contents, returning whether they changed. -+static BOOL RNSUpdateHeaderItemsCache(UINavigationItem *navitem, const void *key, NSArray *itemsKey) -+{ -+ if ([objc_getAssociatedObject(navitem, key) isEqual:itemsKey]) { -+ return NO; -+ } -+ objc_setAssociatedObject(navitem, key, itemsKey, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -+ return YES; -+} -+#endif -+static char RNSAppliedToolbarConfigsKey; - static const NSNumber *const DEFAULT_TITLE_LARGE_FONT_SIZE = @34; - -+static NSInteger navigationItemStyleFromCppEquivalent( -+ react::RNSScreenStackHeaderConfigNavigationItemStyle navigationItemStyle) -+{ -+ switch (navigationItemStyle) { -+ case react::RNSScreenStackHeaderConfigNavigationItemStyle::Browser: -+ return UINavigationItemStyleBrowser; -+ case react::RNSScreenStackHeaderConfigNavigationItemStyle::Editor: -+ return UINavigationItemStyleEditor; -+ case react::RNSScreenStackHeaderConfigNavigationItemStyle::Navigator: -+ default: -+ return UINavigationItemStyleNavigator; -+ } -+} -+ - @interface RCTImageLoader (Private) - - (id)imageCache; - @end -@@ -47,6 +82,9 @@ + (BOOL)rnscreens_isBlankOrNull:(NSString *)string - @end - - @interface RNSScreenStackHeaderConfig () -+#if !TARGET_OS_TV -+- (NSArray *)barButtonItemGroupsFromItems:(NSArray *)items; -+#endif - @end - - @implementation RNSScreenStackHeaderConfig { -@@ -81,6 +119,7 @@ - (void)initProps - self.hidden = YES; - _reactSubviews = [NSMutableArray new]; - _backTitleVisible = YES; -+ _navigationItemStyle = UINavigationItemStyleNavigator; - _blurEffect = RNSBlurEffectStyleNone; - } - -@@ -496,6 +535,10 @@ + (void)updateViewController:(UIViewController *)vc - - if (shouldHide) { - navitem.title = config.title; -+ if (@available(iOS 26.0, *)) { -+ navitem.subtitle = config.subtitle; -+ navitem.largeSubtitle = config.largeSubtitle; -+ } - - // Setting navigation bar visibility is split to mitigate iOS 26 bug with bar button items. - [navctr setNavigationBarHidden:YES animated:animated]; -@@ -512,11 +555,19 @@ + (void)updateViewController:(UIViewController *)vc - } - navitem.largeTitleDisplayMode = - config.largeTitle ? UINavigationItemLargeTitleDisplayModeAlways : UINavigationItemLargeTitleDisplayModeNever; -+ -+ if (@available(iOS 16.0, *)) { -+ navitem.style = (UINavigationItemStyle)config.navigationItemStyle; -+ } - #endif - - UINavigationBarAppearance *appearance = [self buildAppearance:vc withConfig:config]; - navitem.standardAppearance = appearance; - navitem.compactAppearance = appearance; -+ if (@available(iOS 26.0, *)) { -+ navitem.subtitle = config.subtitle; -+ navitem.largeSubtitle = config.largeSubtitle; -+ } - - // appearance does not apply to the tvOS so we need to use lagacy customization - #if TARGET_OS_TV -@@ -548,8 +599,6 @@ + (void)updateViewController:(UIViewController *)vc - navitem.leftItemsSupplementBackButton = config.backButtonInCustomView; - #endif - navitem.titleView = nil; -- navitem.leftBarButtonItems = nil; -- navitem.rightBarButtonItems = nil; - - #if !TARGET_OS_TV - // We want to set navitem.searchController to nil only if we are sure -@@ -557,22 +606,18 @@ + (void)updateViewController:(UIViewController *)vc - bool searchBarPresent = false; - #endif /* !TARGET_OS_TV */ - -+ NSMutableArray *subviewLeftItems = [NSMutableArray array]; -+ NSMutableArray *subviewRightItems = [NSMutableArray array]; - for (RNSScreenStackHeaderSubview *subview in config.reactSubviews) { - // This code should be kept in sync on Fabric with analogous switch statement in - // `- [RNSScreenStackHeaderConfig replaceNavigationBarViewsWithSnapshotOfSubview:]` method. - switch (subview.type) { - case RNSScreenStackHeaderSubviewTypeLeft: { -- NSArray *currentItems = navitem.leftBarButtonItems ?: @[]; -- NSMutableArray *mutableItems = [currentItems mutableCopy]; -- [mutableItems addObject:[subview getUIBarButtonItem]]; -- navitem.leftBarButtonItems = mutableItems; -+ [subviewLeftItems addObject:[subview getUIBarButtonItem]]; - break; - } - case RNSScreenStackHeaderSubviewTypeRight: { -- NSArray *currentItems = navitem.rightBarButtonItems ?: @[]; -- NSMutableArray *mutableItems = [currentItems mutableCopy]; -- [mutableItems addObject:[subview getUIBarButtonItem]]; -- navitem.rightBarButtonItems = mutableItems; -+ [subviewRightItems addObject:[subview getUIBarButtonItem]]; - break; - } - case RNSScreenStackHeaderSubviewTypeCenter: -@@ -637,10 +682,453 @@ + (void)updateViewController:(UIViewController *)vc - // This assignment should be done after `navitem.titleView = ...` assignment (iOS 16.0 bug). - // See: https://github.com/software-mansion/react-native-screens/issues/1570 (comments) - navitem.title = config.title; -- navitem.leftBarButtonItems = [config barButtonItemsFromConfigs:config.headerLeftBarButtonItems -- withCurrentItems:navitem.leftBarButtonItems]; -- navitem.rightBarButtonItems = [config barButtonItemsFromConfigs:config.headerRightBarButtonItems -- withCurrentItems:navitem.rightBarButtonItems]; -+ // Retain the config in the key so its address cannot be reused while cached. -+ // Items capture this config's event emitter in their press handlers, so a -+ // remounted header-config view with value-equal configs must still rebuild -+ // instead of dispatching presses into the old config's emitter. -+ // getUIBarButtonItem is stable for the lifetime of its React header -+ // subview. Include those native identities in the key so React-backed -+ // items can use the same cache without reusing a group after its view was -+ // replaced. -+ // A bar button item can belong to only one group. Even if the item itself -+ // is reused, constructing a new group removes it from the old group that -+ // UIKit may still be animating. Preserve each unchanged placement's group, -+ // including the empty leading group beside the system back button. -+#if !TARGET_OS_TV -+ if (@available(iOS 16.0, *)) { -+ NSArray *headerLeftConfigs = config.headerLeftBarButtonItems ?: @[]; -+ NSArray *headerRightConfigs = config.headerRightBarButtonItems ?: @[]; -+ NSArray *headerCenterConfigs = config.headerCenterBarButtonItems ?: @[]; -+ if (RNSUpdateHeaderItemsCache( -+ navitem, &RNSAppliedLeadingHeaderItemsKey, @[ config, headerLeftConfigs, subviewLeftItems ])) { -+ NSArray *items = [config barButtonItemsFromConfigs:config.headerLeftBarButtonItems -+ withCurrentItems:subviewLeftItems -+ navigationItem:navitem]; -+ navitem.leadingItemGroups = [config barButtonItemGroupsFromItems:items]; -+ } -+ if (RNSUpdateHeaderItemsCache( -+ navitem, &RNSAppliedTrailingHeaderItemsKey, @[ config, headerRightConfigs, subviewRightItems ])) { -+ NSArray *items = [config barButtonItemsFromConfigs:config.headerRightBarButtonItems -+ withCurrentItems:subviewRightItems -+ navigationItem:navitem]; -+ navitem.trailingItemGroups = [config barButtonItemGroupsFromItems:items]; -+ } -+ if (@available(iOS 26.0, *)) { -+ if (RNSUpdateHeaderItemsCache(navitem, &RNSAppliedCenterHeaderItemsKey, @[ config, headerCenterConfigs ])) { -+ NSArray *items = [config barButtonItemsFromConfigs:config.headerCenterBarButtonItems -+ withCurrentItems:@[] -+ navigationItem:navitem]; -+ navitem.centerItemGroups = [config barButtonItemGroupsFromItems:items]; -+ } -+ } -+ } else -+#endif -+ { -+ NSArray *leftBarButtonItems = [config barButtonItemsFromConfigs:config.headerLeftBarButtonItems -+ withCurrentItems:subviewLeftItems -+ navigationItem:navitem]; -+ NSArray *rightBarButtonItems = [config barButtonItemsFromConfigs:config.headerRightBarButtonItems -+ withCurrentItems:subviewRightItems -+ navigationItem:navitem]; -+ navitem.leftBarButtonItems = leftBarButtonItems; -+ navitem.rightBarButtonItems = rightBarButtonItems; -+ } -+ NSDictionary *mailSearchToolbarConfig = nil; -+ for (NSDictionary *toolbarConfig in config.headerToolbarItems) { -+ if (toolbarConfig[@"mailSearchToolbar"]) { -+ mailSearchToolbarConfig = toolbarConfig; -+ break; -+ } -+ } -+ if (mailSearchToolbarConfig == nil) { -+ for (NSDictionary *rightConfig in config.headerRightBarButtonItems) { -+ if ([rightConfig[@"bottomMailSearchToolbar"] boolValue]) { -+ mailSearchToolbarConfig = rightConfig; -+ break; -+ } -+ } -+ } -+ -+ static NSInteger const RNSMailSearchToolbarViewTag = 260628; -+ UIView *chromeHostView = vc.view; -+ UIView *existingMailSearchToolbar = [chromeHostView viewWithTag:RNSMailSearchToolbarViewTag]; -+ if (existingMailSearchToolbar == nil) { -+ existingMailSearchToolbar = [vc.view viewWithTag:RNSMailSearchToolbarViewTag]; -+ } -+ // Reuse the live toolbar when nothing it was built from changed: rebuilding -+ // replaces the fallback UISearchTextField with a fresh empty one, dropping -+ // the user's in-progress search text and first responder on every unrelated -+ // header update. Keyed on the config instance (the button/search blocks -+ // capture its event emitter), the toolbar config values, and the host width -+ // (the width constraint constant is resolved from it at build time). -+ static char RNSAppliedMailSearchToolbarConfigKey; -+ NSArray *mailSearchToolbarKey = mailSearchToolbarConfig != nil -+ ? @[ @((uintptr_t)config), mailSearchToolbarConfig, @(chromeHostView.bounds.size.width) ] -+ : nil; -+ BOOL reuseMailSearchToolbar = existingMailSearchToolbar != nil && mailSearchToolbarKey != nil && -+ [objc_getAssociatedObject(existingMailSearchToolbar, &RNSAppliedMailSearchToolbarConfigKey) -+ isEqual:mailSearchToolbarKey]; -+ if (!reuseMailSearchToolbar) { -+ [existingMailSearchToolbar removeFromSuperview]; -+ } -+ -+ if (mailSearchToolbarConfig != nil && !reuseMailSearchToolbar) { -+#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0) -+ if (@available(iOS 26.0, *)) { -+ CGFloat horizontalInset = 18.0; -+ NSNumber *width = mailSearchToolbarConfig[@"width"]; -+ CGFloat hostWidth = chromeHostView.bounds.size.width; -+ if (hostWidth <= 0.0) { -+ hostWidth = vc.view.bounds.size.width; -+ } -+ if (hostWidth <= 0.0) { -+ hostWidth = [UIScreen mainScreen].bounds.size.width; -+ } -+ CGFloat fallbackWidth = MIN(560.0, MAX(300.0, hostWidth - (horizontalInset * 2.0))); -+ CGFloat resolvedWidth = width != nil ? width.doubleValue : fallbackWidth; -+ if (hostWidth > 0.0) { -+ resolvedWidth = MIN(resolvedWidth, MAX(260.0, hostWidth - 12.0)); -+ } -+ -+ CGFloat toolbarHeight = 48.0; -+ CGFloat toolbarRadius = toolbarHeight / 2.0; -+ CGFloat buttonSize = toolbarHeight; -+ CGFloat sideButtonReserve = buttonSize + 8.0; -+ CGFloat searchFieldHeight = 42.0; -+ CGFloat toolbarBottomSpacing = 4.0; -+ UIFont *searchFont = [UIFont preferredFontForTextStyle:UIFontTextStyleTitle3]; -+ NSDictionary *placeholderAttributes = @{ -+ NSForegroundColorAttributeName : UIColor.secondaryLabelColor, -+ NSFontAttributeName : searchFont, -+ }; -+ UIKeyboardLayoutGuide *keyboardLayoutGuide = chromeHostView.keyboardLayoutGuide; -+ -+ UIView *toolbarHost = [[UIView alloc] init]; -+ toolbarHost.tag = RNSMailSearchToolbarViewTag; -+ objc_setAssociatedObject( -+ toolbarHost, -+ &RNSAppliedMailSearchToolbarConfigKey, -+ mailSearchToolbarKey, -+ OBJC_ASSOCIATION_RETAIN_NONATOMIC); -+ toolbarHost.translatesAutoresizingMaskIntoConstraints = NO; -+ [chromeHostView addSubview:toolbarHost]; -+ // The screen stays mounted beneath pushed routes, so its keyboard layout -+ // guide can track a keyboard owned by another screen. Keep the toolbar at -+ // rest unless its own search field is editing. -+ NSLayoutConstraint *keyboardAvoidConstraint = -+ [toolbarHost.bottomAnchor constraintEqualToAnchor:keyboardLayoutGuide.topAnchor -+ constant:-toolbarBottomSpacing]; -+ keyboardAvoidConstraint.priority = UILayoutPriorityDefaultLow; -+ NSLayoutConstraint *restingBottomConstraint = -+ [toolbarHost.bottomAnchor constraintEqualToAnchor:chromeHostView.safeAreaLayoutGuide.bottomAnchor -+ constant:-toolbarBottomSpacing]; -+ restingBottomConstraint.priority = UILayoutPriorityDefaultHigh; -+ [NSLayoutConstraint activateConstraints:@[ -+ [toolbarHost.centerXAnchor constraintEqualToAnchor:chromeHostView.centerXAnchor], -+ [toolbarHost.bottomAnchor constraintLessThanOrEqualToAnchor:chromeHostView.safeAreaLayoutGuide.bottomAnchor -+ constant:-toolbarBottomSpacing], -+ keyboardAvoidConstraint, -+ restingBottomConstraint, -+ [toolbarHost.widthAnchor constraintEqualToConstant:resolvedWidth], -+ [toolbarHost.heightAnchor constraintEqualToConstant:toolbarHeight], -+ ]]; -+ [chromeHostView bringSubviewToFront:toolbarHost]; -+ -+ UIGlassEffect *glassEffect = [UIGlassEffect effectWithStyle:UIGlassEffectStyleRegular]; -+ glassEffect.interactive = YES; -+ UIVisualEffectView *glassView = [[UIVisualEffectView alloc] initWithEffect:glassEffect]; -+ glassView.clipsToBounds = YES; -+ glassView.layer.cornerRadius = toolbarRadius; -+ glassView.translatesAutoresizingMaskIntoConstraints = NO; -+ [toolbarHost addSubview:glassView]; -+ BOOL hasFilterButton = -+ mailSearchToolbarConfig[@"filterButtonId"] != nil || mailSearchToolbarConfig[@"filterMenu"] != nil; -+ BOOL hasComposeButton = -+ mailSearchToolbarConfig[@"composeButtonId"] != nil || mailSearchToolbarConfig[@"composeMenu"] != nil; -+ CGFloat glassLeadingInset = hasFilterButton ? sideButtonReserve : 0.0; -+ CGFloat glassTrailingInset = hasComposeButton ? -sideButtonReserve : 0.0; -+ NSLayoutConstraint *glassLeadingConstraint = -+ [glassView.leadingAnchor constraintEqualToAnchor:toolbarHost.leadingAnchor constant:glassLeadingInset]; -+ NSLayoutConstraint *glassTrailingConstraint = -+ [glassView.trailingAnchor constraintEqualToAnchor:toolbarHost.trailingAnchor constant:glassTrailingInset]; -+ [NSLayoutConstraint activateConstraints:@[ -+ glassLeadingConstraint, -+ glassTrailingConstraint, -+ [glassView.centerYAnchor constraintEqualToAnchor:toolbarHost.centerYAnchor], -+ [glassView.heightAnchor constraintEqualToConstant:toolbarHeight], -+ ]]; -+ -+ void (^emitButtonPress)(NSString *) = ^(NSString *buttonId) { -+ auto eventEmitter = std::static_pointer_cast( -+ config->_eventEmitter); -+ if (eventEmitter && buttonId) { -+ eventEmitter->onPressHeaderBarButtonItem( -+ facebook::react::RNSScreenStackHeaderConfigEventEmitter::OnPressHeaderBarButtonItem{ -+ .buttonId = std::string([buttonId UTF8String])}); -+ } -+ }; -+ -+ void (^emitMenuPress)(NSString *) = ^(NSString *menuId) { -+ auto eventEmitter = std::static_pointer_cast( -+ config->_eventEmitter); -+ if (eventEmitter && menuId) { -+ eventEmitter->onPressHeaderBarButtonMenuItem( -+ facebook::react::RNSScreenStackHeaderConfigEventEmitter::OnPressHeaderBarButtonMenuItem{ -+ .menuId = std::string([menuId UTF8String])}); -+ } -+ }; -+ -+ UIButton *(^makeGlassButton)(NSString *, NSString *, NSDictionary *) = -+ ^UIButton *(NSString *systemImageName, NSString *buttonId, NSDictionary *menuConfig) { -+ UIButtonConfiguration *configuration = [UIButtonConfiguration glassButtonConfiguration]; -+ configuration.cornerStyle = UIButtonConfigurationCornerStyleCapsule; -+ configuration.image = [UIImage systemImageNamed:systemImageName ?: @"circle"]; -+ configuration.baseForegroundColor = UIColor.labelColor; -+ UIButton *button = [UIButton buttonWithConfiguration:configuration primaryAction:nil]; -+ if (menuConfig != nil) { -+ button.menu = [RNSBarButtonItem initUIMenuWithDict:menuConfig -+ menuAction:emitMenuPress -+ imageLoader:config->_imageLoader]; -+ button.showsMenuAsPrimaryAction = YES; -+ } else if (buttonId != nil) { -+ UIAction *action = [UIAction actionWithHandler:^(__kindof UIAction *_Nonnull action) { -+ emitButtonPress(buttonId); -+ }]; -+ [button addAction:action forControlEvents:UIControlEventTouchUpInside]; -+ } -+ return button; -+ }; -+ -+ BOOL useFallbackSearchField = [mailSearchToolbarConfig[@"useFallbackSearchField"] boolValue]; -+ UISearchBar *searchBar = -+ !useFallbackSearchField && navitem.searchController != nil ? navitem.searchController.searchBar : nil; -+ NSString *placeholder = mailSearchToolbarConfig[@"placeholder"]; -+ UITextField *resolvedSearchTextField = nil; -+ if (searchBar != nil) { -+ if (placeholder != nil) { -+ searchBar.placeholder = placeholder; -+ } -+ searchBar.hidden = NO; -+ searchBar.alpha = 1.0; -+ searchBar.userInteractionEnabled = YES; -+ searchBar.searchBarStyle = UISearchBarStyleMinimal; -+ searchBar.backgroundImage = [UIImage new]; -+ searchBar.searchTextField.hidden = NO; -+ searchBar.searchTextField.alpha = 1.0; -+ searchBar.searchTextField.backgroundColor = UIColor.clearColor; -+ searchBar.searchTextField.font = searchFont; -+ searchBar.searchTextField.adjustsFontForContentSizeCategory = YES; -+ searchBar.searchTextField.textColor = UIColor.labelColor; -+ searchBar.searchTextField.tintColor = UIColor.labelColor; -+ resolvedSearchTextField = searchBar.searchTextField; -+ if (placeholder != nil) { -+ searchBar.searchTextField.attributedPlaceholder = -+ [[NSAttributedString alloc] initWithString:placeholder attributes:placeholderAttributes]; -+ } -+ searchBar.translatesAutoresizingMaskIntoConstraints = NO; -+ [glassView.contentView addSubview:searchBar]; -+ [NSLayoutConstraint activateConstraints:@[ -+ [searchBar.leadingAnchor constraintEqualToAnchor:glassView.contentView.leadingAnchor constant:8.0], -+ [searchBar.trailingAnchor constraintEqualToAnchor:glassView.contentView.trailingAnchor constant:-8.0], -+ [searchBar.centerYAnchor constraintEqualToAnchor:glassView.contentView.centerYAnchor], -+ [searchBar.heightAnchor constraintEqualToConstant:searchFieldHeight], -+ ]]; -+ } else { -+ UISearchTextField *searchField = [UISearchTextField new]; -+ if (placeholder != nil) { -+ searchField.placeholder = placeholder; -+ searchField.attributedPlaceholder = -+ [[NSAttributedString alloc] initWithString:placeholder attributes:placeholderAttributes]; -+ } -+ NSString *searchTextChangeId = mailSearchToolbarConfig[@"searchTextChangeId"]; -+ if (searchTextChangeId != nil) { -+ [searchField addAction:[UIAction actionWithHandler:^(__kindof UIAction *_Nonnull action) { -+ UISearchTextField *field = (UISearchTextField *)action.sender; -+ emitButtonPress([NSString stringWithFormat:@"%@:%@", searchTextChangeId, field.text ?: @""]); -+ }] -+ forControlEvents:UIControlEventEditingChanged]; -+ } -+ searchField.borderStyle = UITextBorderStyleNone; -+ searchField.font = searchFont; -+ searchField.adjustsFontForContentSizeCategory = YES; -+ searchField.textColor = UIColor.labelColor; -+ searchField.tintColor = UIColor.labelColor; -+ resolvedSearchTextField = searchField; -+ searchField.translatesAutoresizingMaskIntoConstraints = NO; -+ [glassView.contentView addSubview:searchField]; -+ [NSLayoutConstraint activateConstraints:@[ -+ [searchField.leadingAnchor constraintEqualToAnchor:glassView.contentView.leadingAnchor constant:14.0], -+ [searchField.trailingAnchor constraintEqualToAnchor:glassView.contentView.trailingAnchor constant:-14.0], -+ [searchField.centerYAnchor constraintEqualToAnchor:glassView.contentView.centerYAnchor], -+ [searchField.heightAnchor constraintEqualToConstant:searchFieldHeight], -+ ]]; -+ } -+ -+ UIButton *filterButton = nil; -+ if (hasFilterButton) { -+ filterButton = makeGlassButton( -+ mailSearchToolbarConfig[@"filterSystemImageName"] ?: @"line.3.horizontal.decrease", -+ mailSearchToolbarConfig[@"filterButtonId"], -+ mailSearchToolbarConfig[@"filterMenu"]); -+ filterButton.translatesAutoresizingMaskIntoConstraints = NO; -+ [toolbarHost addSubview:filterButton]; -+ [NSLayoutConstraint activateConstraints:@[ -+ [filterButton.leadingAnchor constraintEqualToAnchor:toolbarHost.leadingAnchor], -+ [filterButton.centerYAnchor constraintEqualToAnchor:toolbarHost.centerYAnchor], -+ [filterButton.widthAnchor constraintEqualToConstant:buttonSize], -+ [filterButton.heightAnchor constraintEqualToConstant:buttonSize], -+ ]]; -+ } -+ -+ UIButton *composeButton = nil; -+ if (hasComposeButton) { -+ composeButton = makeGlassButton( -+ mailSearchToolbarConfig[@"composeSystemImageName"] ?: @"square.and.pencil", -+ mailSearchToolbarConfig[@"composeButtonId"], -+ mailSearchToolbarConfig[@"composeMenu"]); -+ composeButton.translatesAutoresizingMaskIntoConstraints = NO; -+ [toolbarHost addSubview:composeButton]; -+ [NSLayoutConstraint activateConstraints:@[ -+ [composeButton.trailingAnchor constraintEqualToAnchor:toolbarHost.trailingAnchor], -+ [composeButton.centerYAnchor constraintEqualToAnchor:toolbarHost.centerYAnchor], -+ [composeButton.widthAnchor constraintEqualToConstant:buttonSize], -+ [composeButton.heightAnchor constraintEqualToConstant:buttonSize], -+ ]]; -+ } -+ -+ BOOL showsSearchDismissButton = -+ [mailSearchToolbarConfig[@"showsSearchDismissButton"] boolValue] && resolvedSearchTextField != nil; -+ UIButton *searchDismissButton = nil; -+ if (showsSearchDismissButton) { -+ searchDismissButton = makeGlassButton(@"xmark", nil, nil); -+ searchDismissButton.accessibilityLabel = @"Dismiss search keyboard"; -+ searchDismissButton.alpha = 0.0; -+ searchDismissButton.hidden = YES; -+ searchDismissButton.translatesAutoresizingMaskIntoConstraints = NO; -+ [toolbarHost addSubview:searchDismissButton]; -+ [NSLayoutConstraint activateConstraints:@[ -+ [searchDismissButton.trailingAnchor constraintEqualToAnchor:toolbarHost.trailingAnchor], -+ [searchDismissButton.centerYAnchor constraintEqualToAnchor:toolbarHost.centerYAnchor], -+ [searchDismissButton.widthAnchor constraintEqualToConstant:buttonSize], -+ [searchDismissButton.heightAnchor constraintEqualToConstant:buttonSize], -+ ]]; -+ __weak UITextField *weakSearchTextField = resolvedSearchTextField; -+ [searchDismissButton -+ addAction:[UIAction actionWithHandler:^(__kindof UIAction *_Nonnull action) { -+ [weakSearchTextField resignFirstResponder]; -+ }] -+ forControlEvents:UIControlEventTouchUpInside]; -+ } -+ -+ __weak UIButton *weakFilterButton = filterButton; -+ __weak UIButton *weakComposeButton = composeButton; -+ __weak UIButton *weakSearchDismissButton = searchDismissButton; -+ __weak NSLayoutConstraint *weakGlassLeadingConstraint = glassLeadingConstraint; -+ __weak NSLayoutConstraint *weakGlassTrailingConstraint = glassTrailingConstraint; -+ __weak NSLayoutConstraint *weakKeyboardAvoidConstraint = keyboardAvoidConstraint; -+ __weak NSLayoutConstraint *weakRestingBottomConstraint = restingBottomConstraint; -+ __weak UIView *weakToolbarHost = toolbarHost; -+ __weak UITextField *weakSearchTextField = resolvedSearchTextField; -+ void (^setSearchEditingAppearance)(BOOL, BOOL) = ^(BOOL isEditing, BOOL animated) { -+ weakKeyboardAvoidConstraint.priority = -+ isEditing ? UILayoutPriorityDefaultHigh : UILayoutPriorityDefaultLow; -+ weakRestingBottomConstraint.priority = -+ isEditing ? UILayoutPriorityDefaultLow : UILayoutPriorityDefaultHigh; -+ -+ if (showsSearchDismissButton) { -+ if (isEditing) { -+ weakSearchDismissButton.hidden = NO; -+ } else { -+ weakFilterButton.hidden = NO; -+ weakComposeButton.hidden = NO; -+ } -+ weakGlassLeadingConstraint.constant = isEditing ? 0.0 : glassLeadingInset; -+ weakGlassTrailingConstraint.constant = isEditing ? -sideButtonReserve : glassTrailingInset; -+ -+ void (^changes)(void) = ^{ -+ weakFilterButton.alpha = isEditing ? 0.0 : 1.0; -+ weakComposeButton.alpha = isEditing ? 0.0 : 1.0; -+ weakSearchDismissButton.alpha = isEditing ? 1.0 : 0.0; -+ [weakToolbarHost layoutIfNeeded]; -+ }; -+ void (^completion)(BOOL) = ^(BOOL finished) { -+ if (!finished || weakSearchTextField.isFirstResponder != isEditing) { -+ return; -+ } -+ weakFilterButton.hidden = isEditing; -+ weakComposeButton.hidden = isEditing; -+ weakSearchDismissButton.hidden = !isEditing; -+ }; -+ if (animated) { -+ [UIView animateWithDuration:0.2 -+ delay:0.0 -+ options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseInOut -+ animations:changes -+ completion:completion]; -+ } else { -+ changes(); -+ completion(YES); -+ } -+ } -+ [weakToolbarHost setNeedsLayout]; -+ }; -+ -+ setSearchEditingAppearance(resolvedSearchTextField.isFirstResponder, NO); -+ NSString *beginActionIdentifier = @"org.react-native-screens.mail-search-toolbar.keyboard-begin"; -+ NSString *endActionIdentifier = @"org.react-native-screens.mail-search-toolbar.keyboard-end"; -+ [resolvedSearchTextField removeActionForIdentifier:beginActionIdentifier -+ forControlEvents:UIControlEventEditingDidBegin]; -+ [resolvedSearchTextField removeActionForIdentifier:endActionIdentifier -+ forControlEvents:UIControlEventEditingDidEnd]; -+ [resolvedSearchTextField -+ addAction:[UIAction actionWithTitle:@"" -+ image:nil -+ identifier:beginActionIdentifier -+ handler:^(__kindof UIAction *_Nonnull action) { -+ setSearchEditingAppearance(YES, YES); -+ }] -+ forControlEvents:UIControlEventEditingDidBegin]; -+ [resolvedSearchTextField -+ addAction:[UIAction actionWithTitle:@"" -+ image:nil -+ identifier:endActionIdentifier -+ handler:^(__kindof UIAction *_Nonnull action) { -+ setSearchEditingAppearance(NO, YES); -+ }] -+ forControlEvents:UIControlEventEditingDidEnd]; -+ } -+#endif -+ } -+ -+ NSArray *> *navigationToolbarConfigs = config.headerToolbarItems; -+ if (mailSearchToolbarConfig != nil) { -+ navigationToolbarConfigs = @[]; -+ } -+ -+ NSArray *toolbarConfigsKey = navigationToolbarConfigs ?: @[]; -+ // Same reuse rule as the header item groups above (including the config -+ // identity — cached toolbar items capture this config's event emitter). -+ // The top-view-controller and hidden-state checks scope the skip to -+ // same-screen refreshes, so transitions between screens with different -+ // toolbars still reapply. -+ NSArray *toolbarCacheKey = @[ @((uintptr_t)config), toolbarConfigsKey ]; -+ BOOL reuseToolbarItems = navctr.topViewController == vc && -+ navctr.isToolbarHidden == (toolbarConfigsKey.count == 0) && -+ [objc_getAssociatedObject(navitem, &RNSAppliedToolbarConfigsKey) isEqual:toolbarCacheKey]; -+ if (!reuseToolbarItems) { -+ NSArray *toolbarItems = [config barButtonItemsFromConfigs:navigationToolbarConfigs -+ withCurrentItems:@[] -+ navigationItem:navitem]; -+ if (toolbarItems.count > 0) { -+ vc.toolbarItems = toolbarItems; -+ [navctr setToolbarHidden:NO animated:animated]; -+ } else { -+ vc.toolbarItems = nil; -+ [navctr setToolbarHidden:YES animated:animated]; -+ } -+ objc_setAssociatedObject( -+ navitem, &RNSAppliedToolbarConfigsKey, toolbarCacheKey, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -+ } - - // Setting navigation bar visibility is split to mitigate iOS 26 bug with bar button items - // (setting nav bar visibility should be done after `navitem.*BarButtonItems`). -@@ -773,6 +1261,7 @@ - (void)applySemanticContentAttributeIfNeededToNavCtrl:(UINavigationController * - - - (NSArray *)barButtonItemsFromConfigs:(NSArray *> *)dicts - withCurrentItems:(NSArray *)currentItems -+ navigationItem:(UINavigationItem *)navitem - { - if (dicts.count == 0) { - return currentItems; -@@ -781,7 +1270,197 @@ - (void)applySemanticContentAttributeIfNeededToNavCtrl:(UINavigationController * - [items addObjectsFromArray:currentItems]; - for (NSUInteger i = 0; i < dicts.count; i++) { - NSDictionary *dict = dicts[i]; -- if (dict[@"buttonId"] || dict[@"menu"]) { -+ if (dict[@"mailSearchToolbar"]) { -+#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0) -+ if (@available(iOS 26.0, *)) { -+ NSNumber *width = dict[@"width"]; -+ CGFloat resolvedWidth = width != nil ? width.doubleValue : MAX(320.0, [UIScreen mainScreen].bounds.size.width - 56.0); -+ CGFloat resolvedHeight = 58.0; -+ UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, resolvedWidth, resolvedHeight)]; -+ container.translatesAutoresizingMaskIntoConstraints = NO; -+ [container.widthAnchor constraintEqualToConstant:resolvedWidth].active = YES; -+ [container.heightAnchor constraintEqualToConstant:resolvedHeight].active = YES; -+ -+ UIStackView *stackView = [[UIStackView alloc] initWithFrame:container.bounds]; -+ stackView.axis = UILayoutConstraintAxisHorizontal; -+ stackView.alignment = UIStackViewAlignmentCenter; -+ stackView.distribution = UIStackViewDistributionFill; -+ stackView.spacing = 10.0; -+ stackView.translatesAutoresizingMaskIntoConstraints = NO; -+ [container addSubview:stackView]; -+ [NSLayoutConstraint activateConstraints:@[ -+ [stackView.leadingAnchor constraintEqualToAnchor:container.leadingAnchor], -+ [stackView.trailingAnchor constraintEqualToAnchor:container.trailingAnchor], -+ [stackView.centerYAnchor constraintEqualToAnchor:container.centerYAnchor], -+ [stackView.heightAnchor constraintEqualToConstant:50.0], -+ ]]; -+ -+ void (^emitButtonPress)(NSString *) = ^(NSString *buttonId) { -+ auto eventEmitter = std::static_pointer_cast( -+ self->_eventEmitter); -+ if (eventEmitter && buttonId) { -+ eventEmitter->onPressHeaderBarButtonItem( -+ facebook::react::RNSScreenStackHeaderConfigEventEmitter::OnPressHeaderBarButtonItem{ -+ .buttonId = std::string([buttonId UTF8String])}); -+ } -+ }; -+ -+ void (^emitMenuPress)(NSString *) = ^(NSString *menuId) { -+ auto eventEmitter = std::static_pointer_cast( -+ self->_eventEmitter); -+ if (eventEmitter && menuId) { -+ eventEmitter->onPressHeaderBarButtonMenuItem( -+ facebook::react::RNSScreenStackHeaderConfigEventEmitter::OnPressHeaderBarButtonMenuItem{ -+ .menuId = std::string([menuId UTF8String])}); -+ } -+ }; -+ -+ UIButton *(^makeGlassButton)(NSString *, NSString *, NSDictionary *) = -+ ^UIButton *(NSString *systemImageName, NSString *buttonId, NSDictionary *menuConfig) { -+ UIButtonConfiguration *configuration = [UIButtonConfiguration glassButtonConfiguration]; -+ configuration.cornerStyle = UIButtonConfigurationCornerStyleCapsule; -+ configuration.image = [UIImage systemImageNamed:systemImageName ?: @"circle"]; -+ -+ UIButton *button = [UIButton buttonWithConfiguration:configuration primaryAction:nil]; -+ button.translatesAutoresizingMaskIntoConstraints = NO; -+ [button.widthAnchor constraintEqualToConstant:58.0].active = YES; -+ [button.heightAnchor constraintEqualToConstant:50.0].active = YES; -+ if (menuConfig != nil) { -+ button.menu = [RNSBarButtonItem initUIMenuWithDict:menuConfig -+ menuAction:emitMenuPress -+ imageLoader:self->_imageLoader]; -+ button.showsMenuAsPrimaryAction = YES; -+ } else if (buttonId != nil) { -+ UIAction *action = [UIAction actionWithHandler:^(__kindof UIAction *_Nonnull action) { -+ emitButtonPress(buttonId); -+ }]; -+ [button addAction:action forControlEvents:UIControlEventTouchUpInside]; -+ } -+ return button; -+ }; -+ -+ BOOL hasFilterButton = dict[@"filterButtonId"] != nil || dict[@"filterMenu"] != nil; -+ BOOL hasComposeButton = dict[@"composeButtonId"] != nil || dict[@"composeMenu"] != nil; -+ -+ if (hasFilterButton) { -+ UIButton *filterButton = makeGlassButton( -+ dict[@"filterSystemImageName"] ?: @"line.3.horizontal.decrease", -+ dict[@"filterButtonId"], -+ dict[@"filterMenu"]); -+ [stackView addArrangedSubview:filterButton]; -+ } -+ -+ UISearchBar *searchBar = navitem.searchController != nil ? navitem.searchController.searchBar : [UISearchBar new]; -+ NSString *placeholder = dict[@"placeholder"]; -+ if (placeholder != nil) { -+ searchBar.placeholder = placeholder; -+ } -+ searchBar.searchBarStyle = UISearchBarStyleMinimal; -+ searchBar.translatesAutoresizingMaskIntoConstraints = NO; -+ [searchBar.heightAnchor constraintEqualToConstant:50.0].active = YES; -+ [stackView addArrangedSubview:searchBar]; -+ -+ if (hasComposeButton) { -+ UIButton *composeButton = makeGlassButton( -+ dict[@"composeSystemImageName"] ?: @"square.and.pencil", -+ dict[@"composeButtonId"], -+ dict[@"composeMenu"]); -+ [stackView addArrangedSubview:composeButton]; -+ } -+ -+ UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:container]; -+ [items addObject:item]; -+ } -+#endif -+ } else if (dict[@"searchField"]) { -+#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0) -+ if (@available(iOS 26.0, *)) { -+ NSNumber *width = dict[@"width"]; -+ CGFloat resolvedWidth = width != nil ? width.doubleValue : 280.0; -+ UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, resolvedWidth, 44.0)]; -+ container.translatesAutoresizingMaskIntoConstraints = NO; -+ [container.widthAnchor constraintEqualToConstant:resolvedWidth].active = YES; -+ [container.heightAnchor constraintEqualToConstant:44.0].active = YES; -+ -+ UISearchTextField *searchField = [UISearchTextField new]; -+ NSString *placeholder = dict[@"placeholder"]; -+ if (placeholder != nil) { -+ searchField.placeholder = placeholder; -+ } -+ searchField.translatesAutoresizingMaskIntoConstraints = NO; -+ [container addSubview:searchField]; -+ [NSLayoutConstraint activateConstraints:@[ -+ [searchField.leadingAnchor constraintEqualToAnchor:container.leadingAnchor], -+ [searchField.trailingAnchor constraintEqualToAnchor:container.trailingAnchor], -+ [searchField.centerYAnchor constraintEqualToAnchor:container.centerYAnchor], -+ [searchField.heightAnchor constraintEqualToConstant:40.0], -+ ]]; -+ -+ UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:container]; -+ [items addObject:item]; -+ } -+#endif -+ } else if (dict[@"searchBarPlacement"]) { -+#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0) -+ if (@available(iOS 26.0, *)) { -+ NSNumber *width = dict[@"width"]; -+ UIBarButtonItem *item = nil; -+ if ([dict[@"activatesSearchController"] boolValue]) { -+ UIButtonConfiguration *configuration = [UIButtonConfiguration glassButtonConfiguration]; -+ configuration.cornerStyle = UIButtonConfigurationCornerStyleCapsule; -+ configuration.image = [UIImage systemImageNamed:@"magnifyingglass"]; -+ configuration.baseForegroundColor = UIColor.labelColor; -+ UIButton *button = [UIButton buttonWithConfiguration:configuration primaryAction:nil]; -+ button.translatesAutoresizingMaskIntoConstraints = NO; -+ [button.widthAnchor constraintEqualToConstant:56.0].active = YES; -+ [button.heightAnchor constraintEqualToConstant:56.0].active = YES; -+ UIAction *action = [UIAction actionWithHandler:^(__kindof UIAction *_Nonnull action) { -+ if (navitem.searchController != nil) { -+ [navitem.searchController setActive:YES]; -+ [navitem.searchController.searchBar becomeFirstResponder]; -+ } -+ }]; -+ [button addAction:action forControlEvents:UIControlEventTouchUpInside]; -+ item = [[UIBarButtonItem alloc] initWithCustomView:button]; -+ } else if ([dict[@"customView"] boolValue] && navitem.searchController != nil) { -+ UISearchBar *searchBar = navitem.searchController.searchBar; -+ CGFloat resolvedWidth = width != nil ? width.doubleValue : searchBar.frame.size.width; -+ CGFloat resolvedHeight = searchBar.frame.size.height > 0 ? searchBar.frame.size.height : 44.0; -+ UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, resolvedWidth, resolvedHeight)]; -+ container.translatesAutoresizingMaskIntoConstraints = NO; -+ [container.widthAnchor constraintEqualToConstant:resolvedWidth].active = YES; -+ [container.heightAnchor constraintEqualToConstant:resolvedHeight].active = YES; -+ searchBar.frame = container.bounds; -+ searchBar.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; -+ [container addSubview:searchBar]; -+ item = [[UIBarButtonItem alloc] initWithCustomView:container]; -+ } else { -+ item = navitem.searchBarPlacementBarButtonItem; -+ if (width != nil) { -+ item.width = width.doubleValue; -+ } -+ } -+ NSNumber *index = dict[@"index"]; -+#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0) -+ if (@available(iOS 26.0, *)) { -+ NSNumber *sharesBackground = dict[@"sharesBackground"]; -+ if (sharesBackground != nil) { -+ item.sharesBackground = sharesBackground.boolValue; -+ } -+ NSNumber *hidesSharedBackground = dict[@"hidesSharedBackground"]; -+ if (hidesSharedBackground != nil) { -+ item.hidesSharedBackground = hidesSharedBackground.boolValue; -+ } -+ } -+#endif -+ if (index != nil && index.integerValue >= 0 && index.integerValue < items.count) { -+ [items insertObject:item atIndex:index.integerValue]; -+ } else { -+ [items addObject:item]; -+ } -+ } -+#endif -+ } else if (dict[@"buttonId"] || dict[@"menu"]) { - RNSBarButtonItem *item = [[RNSBarButtonItem alloc] initWithConfig:dict - action:^(NSString *buttonId) { - auto eventEmitter = std::static_pointer_cast( -@@ -803,19 +1482,23 @@ - (void)applySemanticContentAttributeIfNeededToNavCtrl:(UINavigationController * - } - imageLoader:_imageLoader]; - NSNumber *index = dict[@"index"]; -- if (index.integerValue < items.count) { -+ if (index != nil && index.integerValue >= 0 && index.integerValue < items.count) { - [items insertObject:item atIndex:index.integerValue]; - } else { - [items addObject:item]; - } - } else if (dict[@"spacing"]) { -- UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace -- target:nil -- action:nil]; -+ BOOL flexible = [dict[@"flexible"] boolValue]; -+ UIBarButtonItem *item = [[UIBarButtonItem alloc] -+ initWithBarButtonSystemItem:(flexible ? UIBarButtonSystemItemFlexibleSpace : UIBarButtonSystemItemFixedSpace) -+ target:nil -+ action:nil]; - NSNumber *spacingValue = dict[@"spacing"]; -- item.width = [spacingValue doubleValue]; -+ if (!flexible) { -+ item.width = [spacingValue doubleValue]; -+ } - NSNumber *index = dict[@"index"]; -- if (index.integerValue < items.count) { -+ if (index != nil && index.integerValue >= 0 && index.integerValue < items.count) { - [items insertObject:item atIndex:index.integerValue]; - } else { - [items addObject:item]; -@@ -825,6 +1508,47 @@ - (void)applySemanticContentAttributeIfNeededToNavCtrl:(UINavigationController * - return items; - } - -+#if !TARGET_OS_TV -+- (NSArray *)barButtonItemGroupsFromItems:(NSArray *)items -+{ -+ if (items.count == 0) { -+ return @[]; -+ } -+ -+ NSMutableArray *groups = [NSMutableArray array]; -+ NSMutableArray *sharedRun = [NSMutableArray array]; -+ -+ void (^flushSharedRun)(void) = ^{ -+ if (sharedRun.count == 0) { -+ return; -+ } -+ [groups addObject:[UIBarButtonItemGroup fixedGroupWithRepresentativeItem:nil -+ items:[sharedRun copy]]]; -+ [sharedRun removeAllObjects]; -+ }; -+ -+ for (UIBarButtonItem *item in items) { -+ BOOL shouldShareBackground = NO; -+#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0) -+ if (@available(iOS 26.0, *)) { -+ shouldShareBackground = item.sharesBackground && !item.hidesSharedBackground; -+ } -+#endif -+ -+ if (shouldShareBackground) { -+ [sharedRun addObject:item]; -+ continue; -+ } -+ -+ flushSharedRun(); -+ [groups addObject:[UIBarButtonItemGroup fixedGroupWithRepresentativeItem:nil items:@[ item ]]]; -+ } -+ -+ flushSharedRun(); -+ return groups; -+} -+#endif -+ - RNS_IGNORE_SUPER_CALL_BEGIN - - (void)insertReactSubview:(RNSScreenStackHeaderSubview *)subview atIndex:(NSInteger)atIndex - { -@@ -1013,6 +1737,8 @@ - (void)updateProps:(react::Props::Shared const &)props oldProps:(react::Props:: - } - - _title = RCTNSStringFromStringNilIfEmpty(newScreenProps.title); -+ _subtitle = RCTNSStringFromStringNilIfEmpty(newScreenProps.subtitle); -+ _largeSubtitle = RCTNSStringFromStringNilIfEmpty(newScreenProps.largeSubtitle); - if (newScreenProps.titleFontFamily != oldScreenProps.titleFontFamily) { - _titleFontFamily = RCTNSStringFromStringNilIfEmpty(newScreenProps.titleFontFamily); - } -@@ -1038,6 +1764,7 @@ - (void)updateProps:(react::Props::Shared const &)props oldProps:(react::Props:: - _disableBackButtonMenu = newScreenProps.disableBackButtonMenu; - _backButtonDisplayMode = - [RNSConvert UINavigationItemBackButtonDisplayModeFromCppEquivalent:newScreenProps.backButtonDisplayMode]; -+ _navigationItemStyle = navigationItemStyleFromCppEquivalent(newScreenProps.navigationItemStyle); - - if (newScreenProps.userInterfaceStyle != oldScreenProps.userInterfaceStyle) { - _userInterfaceStyle = [RNSConvert UIUserInterfaceStyleFromCppEquivalent:newScreenProps.userInterfaceStyle]; -@@ -1084,6 +1811,30 @@ - (void)updateProps:(react::Props::Shared const &)props oldProps:(react::Props:: - _headerRightBarButtonItems = array; - } - -+ if (newScreenProps.headerCenterBarButtonItems != oldScreenProps.headerCenterBarButtonItems) { -+ const auto &vec = newScreenProps.headerCenterBarButtonItems; -+ NSMutableArray *> *array = [NSMutableArray arrayWithCapacity:vec.size()]; -+ for (const auto &item : vec) { -+ NSDictionary *dict = [RNSConvert idFromFollyDynamic:item]; -+ if ([dict isKindOfClass:[NSDictionary class]]) { -+ [array addObject:dict]; -+ } -+ } -+ _headerCenterBarButtonItems = array; -+ } -+ -+ if (newScreenProps.headerToolbarItems != oldScreenProps.headerToolbarItems) { -+ const auto &vec = newScreenProps.headerToolbarItems; -+ NSMutableArray *> *array = [NSMutableArray arrayWithCapacity:vec.size()]; -+ for (const auto &item : vec) { -+ NSDictionary *dict = [RNSConvert idFromFollyDynamic:item]; -+ if ([dict isKindOfClass:[NSDictionary class]]) { -+ [array addObject:dict]; -+ } -+ } -+ _headerToolbarItems = array; -+ } -+ - [self updateViewControllerIfNeeded]; - - if (needsNavigationControllerLayout) { -diff --git a/ios/RNSScreenStackHeaderSubview.mm b/ios/RNSScreenStackHeaderSubview.mm -index 15c0da5242372c4be833a1403663bd1dfa244362..d1f838cdfd831abd6397be6fe61e00a50f87bea3 100644 ---- a/ios/RNSScreenStackHeaderSubview.mm -+++ b/ios/RNSScreenStackHeaderSubview.mm -@@ -21,6 +21,7 @@ @implementation RNSScreenStackHeaderSubview { - // This is a strong reference to UIBarButtonItem which creates a retain cycle. - // The cycle is cleared via `invalidateUIBarButtonItem` method, called by `invalidate` callback. - UIBarButtonItem *_barButtonItem; -+ NSString *_barButtonItemIdentifier; - BOOL _hidesSharedBackground; - } - -@@ -128,6 +129,7 @@ - (void)updateProps:(react::Props::Shared const &)props oldProps:(react::Props:: - const auto &newHeaderSubviewProps = *std::static_pointer_cast(props); - - [self setType:[RNSConvert RNSScreenStackHeaderSubviewTypeFromCppEquivalent:newHeaderSubviewProps.type]]; -+ [self setBarButtonItemIdentifier:RCTNSStringFromStringNilIfEmpty(newHeaderSubviewProps.identifier)]; - [self setHidesSharedBackground:newHeaderSubviewProps.hidesSharedBackground]; - [self setSynchronousShadowStateUpdatesEnabled:newHeaderSubviewProps.synchronousShadowStateUpdatesEnabled]; - [super updateProps:props oldProps:oldProps]; -@@ -281,7 +283,14 @@ - (void)configureBarButtonItem - #if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0) - if (@available(iOS 26.0, *)) { - if (_barButtonItem != nil) { -- [_barButtonItem setHidesSharedBackground:_hidesSharedBackground]; -+ NSString *currentIdentifier = _barButtonItem.identifier; -+ if (currentIdentifier != _barButtonItemIdentifier && -+ ![currentIdentifier isEqualToString:_barButtonItemIdentifier]) { -+ _barButtonItem.identifier = _barButtonItemIdentifier; -+ } -+ if (_barButtonItem.hidesSharedBackground != _hidesSharedBackground) { -+ _barButtonItem.hidesSharedBackground = _hidesSharedBackground; -+ } - } - } - #endif // RNS_IPHONE_OS_VERSION_AVAILABLE(26_0) -@@ -289,10 +298,22 @@ - (void)configureBarButtonItem - - - (void)setHidesSharedBackground:(BOOL)hidesSharedBackground - { -+ if (_hidesSharedBackground == hidesSharedBackground) { -+ return; -+ } - _hidesSharedBackground = hidesSharedBackground; - [self configureBarButtonItem]; - } - -+- (void)setBarButtonItemIdentifier:(nullable NSString *)identifier -+{ -+ if (_barButtonItemIdentifier == identifier || [_barButtonItemIdentifier isEqualToString:identifier]) { -+ return; -+ } -+ _barButtonItemIdentifier = [identifier copy]; -+ [self configureBarButtonItem]; -+} -+ - #pragma mark - Dynamic frameworks support - - // Needed because of this: https://github.com/facebook/react-native/pull/37274 -diff --git a/lib/commonjs/components/ScreenStackHeaderConfig.js b/lib/commonjs/components/ScreenStackHeaderConfig.js -index 16b979bb3dfb41ff247403f1632c300a9a60d549..01415d4cba66086a8d8e5af728f809aee5190d91 100644 ---- a/lib/commonjs/components/ScreenStackHeaderConfig.js -+++ b/lib/commonjs/components/ScreenStackHeaderConfig.js -@@ -23,18 +23,42 @@ const ScreenStackHeaderConfig = exports.ScreenStackHeaderConfig = /*#__PURE__*/_ - } = (0, _TopInsetApplicationContext.useTopInsetApplication)(!props.hidden, props.disableTopInsetApplication ?? false); - const { - headerLeftBarButtonItems, -- headerRightBarButtonItems -+ headerRightBarButtonItems, -+ headerCenterBarButtonItems, -+ headerToolbarItems - } = props; - const preparedHeaderLeftBarButtonItems = headerLeftBarButtonItems && _utils.isHeaderBarButtonsAvailableForCurrentPlatform ? (0, _prepareHeaderBarButtonItems.prepareHeaderBarButtonItems)(headerLeftBarButtonItems, 'left') : undefined; - const preparedHeaderRightBarButtonItems = headerRightBarButtonItems && _utils.isHeaderBarButtonsAvailableForCurrentPlatform ? (0, _prepareHeaderBarButtonItems.prepareHeaderBarButtonItems)(headerRightBarButtonItems, 'right') : undefined; -- const hasHeaderBarButtonItems = _utils.isHeaderBarButtonsAvailableForCurrentPlatform && (preparedHeaderLeftBarButtonItems?.length || preparedHeaderRightBarButtonItems?.length); -+ const preparedHeaderCenterBarButtonItems = headerCenterBarButtonItems && _utils.isHeaderBarButtonsAvailableForCurrentPlatform ? (0, _prepareHeaderBarButtonItems.prepareHeaderBarButtonItems)(headerCenterBarButtonItems, 'right') : undefined; -+ const preparedHeaderToolbarItems = headerToolbarItems && _utils.isHeaderBarButtonsAvailableForCurrentPlatform ? (0, _prepareHeaderBarButtonItems.prepareHeaderBarButtonItems)(headerToolbarItems, 'right') : undefined; -+ const hasHeaderBarButtonItems = _utils.isHeaderBarButtonsAvailableForCurrentPlatform && (preparedHeaderLeftBarButtonItems?.length || preparedHeaderRightBarButtonItems?.length || preparedHeaderCenterBarButtonItems?.length || preparedHeaderToolbarItems?.length); - - // Handle bar button item presses - const onPressHeaderBarButtonItem = hasHeaderBarButtonItems ? event => { -- const pressedItem = [...(preparedHeaderLeftBarButtonItems ?? []), ...(preparedHeaderRightBarButtonItems ?? [])].find(item => item && 'buttonId' in item && item.buttonId === event.nativeEvent.buttonId); -+ const buttonId = event.nativeEvent.buttonId; -+ const allItems = [...(preparedHeaderLeftBarButtonItems ?? []), ...(preparedHeaderRightBarButtonItems ?? []), ...(preparedHeaderCenterBarButtonItems ?? []), ...(preparedHeaderToolbarItems ?? [])]; -+ const pressedItem = allItems.find(item => item && 'buttonId' in item && item.buttonId === buttonId); - if (pressedItem && pressedItem.type === 'button' && pressedItem.onPress) { - pressedItem.onPress(); - } -+ for (const item of allItems) { -+ if (!item || item.type !== 'mailSearchToolbar') { -+ continue; -+ } -+ if (item.filterButtonId === buttonId) { -+ item.onFilterPress?.(); -+ return; -+ } -+ if (item.composeButtonId === buttonId) { -+ item.onComposePress?.(); -+ return; -+ } -+ const searchTextChangePrefix = item.searchTextChangeId ? `${item.searchTextChangeId}:` : undefined; -+ if (searchTextChangePrefix && buttonId.startsWith(searchTextChangePrefix)) { -+ item.onSearchTextChange?.(buttonId.slice(searchTextChangePrefix.length)); -+ return; -+ } -+ } - } : undefined; - - // Handle bar button menu item presses by deep-searching nested menus -@@ -56,7 +80,7 @@ const ScreenStackHeaderConfig = exports.ScreenStackHeaderConfig = /*#__PURE__*/_ - }; - - // Check each bar-button item with a menu -- const allItems = [...(preparedHeaderLeftBarButtonItems ?? []), ...(preparedHeaderRightBarButtonItems ?? [])]; -+ const allItems = [...(preparedHeaderLeftBarButtonItems ?? []), ...(preparedHeaderRightBarButtonItems ?? []), ...(preparedHeaderCenterBarButtonItems ?? []), ...(preparedHeaderToolbarItems ?? [])]; - for (const item of allItems) { - if (item && item.type === 'menu' && item.menu) { - const action = findInMenu(item.menu, event.nativeEvent.menuId); -@@ -64,6 +88,15 @@ const ScreenStackHeaderConfig = exports.ScreenStackHeaderConfig = /*#__PURE__*/_ - action.onPress(); - return; - } -+ } else if (item && item.type === 'mailSearchToolbar') { -+ const toolbarMenus = [item.filterMenu, item.composeMenu].filter(Boolean); -+ for (const toolbarMenu of toolbarMenus) { -+ const action = findInMenu(toolbarMenu, event.nativeEvent.menuId); -+ if (action) { -+ action.onPress(); -+ return; -+ } -+ } - } - } - } : undefined; -@@ -71,6 +104,8 @@ const ScreenStackHeaderConfig = exports.ScreenStackHeaderConfig = /*#__PURE__*/_ - userInterfaceStyle: props.experimental_userInterfaceStyle, - headerLeftBarButtonItems: preparedHeaderLeftBarButtonItems, - headerRightBarButtonItems: preparedHeaderRightBarButtonItems, -+ headerCenterBarButtonItems: preparedHeaderCenterBarButtonItems, -+ headerToolbarItems: preparedHeaderToolbarItems, - onPressHeaderBarButtonItem: onPressHeaderBarButtonItem, - onPressHeaderBarButtonMenuItem: onPressHeaderBarButtonMenuItem, - ref: ref, -diff --git a/lib/commonjs/components/helpers/prepareHeaderBarButtonItems.js b/lib/commonjs/components/helpers/prepareHeaderBarButtonItems.js -index ab93f62e4a7049d63c6681cecbd6cf8b1d07ce10..b5ea122473b023f84eabdb1914aef09a28c6d525 100644 ---- a/lib/commonjs/components/helpers/prepareHeaderBarButtonItems.js -+++ b/lib/commonjs/components/helpers/prepareHeaderBarButtonItems.js -@@ -41,10 +41,31 @@ const prepareMenu = (menu, index, side, path = '') => { - }; - }; - const prepareHeaderBarButtonItems = (barButtonItems, side) => { -- return barButtonItems?.map((item, index) => { -+ const items = Array.isArray(barButtonItems) ? barButtonItems : barButtonItems && typeof barButtonItems === 'object' && 'type' in barButtonItems ? [barButtonItems] : undefined; -+ return items?.map((item, index) => { - if (item.type === 'spacing') { - return item; - } -+ if (item.type === 'searchBarPlacement') { -+ return { -+ ...item, -+ searchBarPlacement: true -+ }; -+ } -+ if (item.type === 'searchField') { -+ return { -+ ...item, -+ searchField: true -+ }; -+ } -+ if (item.type === 'mailSearchToolbar') { -+ return { -+ ...item, -+ mailSearchToolbar: true, -+ filterMenu: item.filterMenu ? prepareMenu(item.filterMenu, index, side, 'filter') : undefined, -+ composeMenu: item.composeMenu ? prepareMenu(item.composeMenu, index, side, 'compose') : undefined -+ }; -+ } - let imageSource, templateSource; - if (item.icon?.type === 'imageSource') { - imageSource = _reactNative.Image.resolveAssetSource(item.icon.imageSource); -diff --git a/lib/module/components/ScreenStackHeaderConfig.js b/lib/module/components/ScreenStackHeaderConfig.js -index cf15f36f25e51d95c896fbc3a31ccba90156a5b6..dd66167c4ab0e5640ad27400e08dcfb4d20dce2a 100644 ---- a/lib/module/components/ScreenStackHeaderConfig.js -+++ b/lib/module/components/ScreenStackHeaderConfig.js -@@ -19,18 +19,42 @@ export const ScreenStackHeaderConfig = /*#__PURE__*/React.forwardRef((props, ref - } = useTopInsetApplication(!props.hidden, props.disableTopInsetApplication ?? false); - const { - headerLeftBarButtonItems, -- headerRightBarButtonItems -+ headerRightBarButtonItems, -+ headerCenterBarButtonItems, -+ headerToolbarItems - } = props; - const preparedHeaderLeftBarButtonItems = headerLeftBarButtonItems && isHeaderBarButtonsAvailableForCurrentPlatform ? prepareHeaderBarButtonItems(headerLeftBarButtonItems, 'left') : undefined; - const preparedHeaderRightBarButtonItems = headerRightBarButtonItems && isHeaderBarButtonsAvailableForCurrentPlatform ? prepareHeaderBarButtonItems(headerRightBarButtonItems, 'right') : undefined; -- const hasHeaderBarButtonItems = isHeaderBarButtonsAvailableForCurrentPlatform && (preparedHeaderLeftBarButtonItems?.length || preparedHeaderRightBarButtonItems?.length); -+ const preparedHeaderCenterBarButtonItems = headerCenterBarButtonItems && isHeaderBarButtonsAvailableForCurrentPlatform ? prepareHeaderBarButtonItems(headerCenterBarButtonItems, 'right') : undefined; -+ const preparedHeaderToolbarItems = headerToolbarItems && isHeaderBarButtonsAvailableForCurrentPlatform ? prepareHeaderBarButtonItems(headerToolbarItems, 'right') : undefined; -+ const hasHeaderBarButtonItems = isHeaderBarButtonsAvailableForCurrentPlatform && (preparedHeaderLeftBarButtonItems?.length || preparedHeaderRightBarButtonItems?.length || preparedHeaderCenterBarButtonItems?.length || preparedHeaderToolbarItems?.length); - - // Handle bar button item presses - const onPressHeaderBarButtonItem = hasHeaderBarButtonItems ? event => { -- const pressedItem = [...(preparedHeaderLeftBarButtonItems ?? []), ...(preparedHeaderRightBarButtonItems ?? [])].find(item => item && 'buttonId' in item && item.buttonId === event.nativeEvent.buttonId); -+ const buttonId = event.nativeEvent.buttonId; -+ const allItems = [...(preparedHeaderLeftBarButtonItems ?? []), ...(preparedHeaderRightBarButtonItems ?? []), ...(preparedHeaderCenterBarButtonItems ?? []), ...(preparedHeaderToolbarItems ?? [])]; -+ const pressedItem = allItems.find(item => item && 'buttonId' in item && item.buttonId === buttonId); - if (pressedItem && pressedItem.type === 'button' && pressedItem.onPress) { - pressedItem.onPress(); - } -+ for (const item of allItems) { -+ if (!item || item.type !== 'mailSearchToolbar') { -+ continue; -+ } -+ if (item.filterButtonId === buttonId) { -+ item.onFilterPress?.(); -+ return; -+ } -+ if (item.composeButtonId === buttonId) { -+ item.onComposePress?.(); -+ return; -+ } -+ const searchTextChangePrefix = item.searchTextChangeId ? `${item.searchTextChangeId}:` : undefined; -+ if (searchTextChangePrefix && buttonId.startsWith(searchTextChangePrefix)) { -+ item.onSearchTextChange?.(buttonId.slice(searchTextChangePrefix.length)); -+ return; -+ } -+ } - } : undefined; - - // Handle bar button menu item presses by deep-searching nested menus -@@ -52,7 +76,7 @@ export const ScreenStackHeaderConfig = /*#__PURE__*/React.forwardRef((props, ref - }; - - // Check each bar-button item with a menu -- const allItems = [...(preparedHeaderLeftBarButtonItems ?? []), ...(preparedHeaderRightBarButtonItems ?? [])]; -+ const allItems = [...(preparedHeaderLeftBarButtonItems ?? []), ...(preparedHeaderRightBarButtonItems ?? []), ...(preparedHeaderCenterBarButtonItems ?? []), ...(preparedHeaderToolbarItems ?? [])]; - for (const item of allItems) { - if (item && item.type === 'menu' && item.menu) { - const action = findInMenu(item.menu, event.nativeEvent.menuId); -@@ -60,6 +84,15 @@ export const ScreenStackHeaderConfig = /*#__PURE__*/React.forwardRef((props, ref - action.onPress(); - return; - } -+ } else if (item && item.type === 'mailSearchToolbar') { -+ const toolbarMenus = [item.filterMenu, item.composeMenu].filter(Boolean); -+ for (const toolbarMenu of toolbarMenus) { -+ const action = findInMenu(toolbarMenu, event.nativeEvent.menuId); -+ if (action) { -+ action.onPress(); -+ return; -+ } -+ } - } - } - } : undefined; -@@ -67,6 +100,8 @@ export const ScreenStackHeaderConfig = /*#__PURE__*/React.forwardRef((props, ref - userInterfaceStyle: props.experimental_userInterfaceStyle, - headerLeftBarButtonItems: preparedHeaderLeftBarButtonItems, - headerRightBarButtonItems: preparedHeaderRightBarButtonItems, -+ headerCenterBarButtonItems: preparedHeaderCenterBarButtonItems, -+ headerToolbarItems: preparedHeaderToolbarItems, - onPressHeaderBarButtonItem: onPressHeaderBarButtonItem, - onPressHeaderBarButtonMenuItem: onPressHeaderBarButtonMenuItem, - ref: ref, -diff --git a/lib/module/components/helpers/prepareHeaderBarButtonItems.js b/lib/module/components/helpers/prepareHeaderBarButtonItems.js -index 8a70ffd78617147418d628c03c580bb7ff9a8a72..8dbd0ba2ee61ee54d44cdf286a720ce26af01f26 100644 ---- a/lib/module/components/helpers/prepareHeaderBarButtonItems.js -+++ b/lib/module/components/helpers/prepareHeaderBarButtonItems.js -@@ -35,10 +35,31 @@ const prepareMenu = (menu, index, side, path = '') => { - }; - }; - export const prepareHeaderBarButtonItems = (barButtonItems, side) => { -- return barButtonItems?.map((item, index) => { -+ const items = Array.isArray(barButtonItems) ? barButtonItems : barButtonItems && typeof barButtonItems === 'object' && 'type' in barButtonItems ? [barButtonItems] : undefined; -+ return items?.map((item, index) => { - if (item.type === 'spacing') { - return item; - } -+ if (item.type === 'searchBarPlacement') { -+ return { -+ ...item, -+ searchBarPlacement: true -+ }; -+ } -+ if (item.type === 'searchField') { -+ return { -+ ...item, -+ searchField: true -+ }; -+ } -+ if (item.type === 'mailSearchToolbar') { -+ return { -+ ...item, -+ mailSearchToolbar: true, -+ filterMenu: item.filterMenu ? prepareMenu(item.filterMenu, index, side, 'filter') : undefined, -+ composeMenu: item.composeMenu ? prepareMenu(item.composeMenu, index, side, 'compose') : undefined -+ }; -+ } - let imageSource, templateSource; - if (item.icon?.type === 'imageSource') { - imageSource = Image.resolveAssetSource(item.icon.imageSource); -diff --git a/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts b/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts -index b7568ecfebd4f4420f2a8d3fec5184d7fc728dd1..41ca1f273f0175929e73105faa463978323837e3 100644 ---- a/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts -+++ b/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts -@@ -9,6 +9,7 @@ type OnPressHeaderBarButtonMenuItemEvent = Readonly<{ - menuId: string; - }>; - type BackButtonDisplayMode = 'minimal' | 'default' | 'generic'; -+type NavigationItemStyle = 'navigator' | 'browser' | 'editor'; - type BlurEffect = 'none' | 'extraLight' | 'light' | 'dark' | 'regular' | 'prominent' | 'systemUltraThinMaterial' | 'systemThinMaterial' | 'systemMaterial' | 'systemThickMaterial' | 'systemChromeMaterial' | 'systemUltraThinMaterialLight' | 'systemThinMaterialLight' | 'systemMaterialLight' | 'systemThickMaterialLight' | 'systemChromeMaterialLight' | 'systemUltraThinMaterialDark' | 'systemThinMaterialDark' | 'systemMaterialDark' | 'systemThickMaterialDark' | 'systemChromeMaterialDark'; - type UserInterfaceStyle = 'unspecified' | 'light' | 'dark'; - export interface NativeProps extends ViewProps { -@@ -32,18 +33,23 @@ export interface NativeProps extends ViewProps { - largeTitleColor?: ColorValue | undefined; - translucent?: boolean | undefined; - title?: string | undefined; -+ subtitle?: string | undefined; -+ largeSubtitle?: string | undefined; - titleFontFamily?: string | undefined; - titleFontSize?: CT.Int32 | undefined; - titleFontWeight?: string | undefined; - titleColor?: ColorValue | undefined; - disableBackButtonMenu?: boolean | undefined; - backButtonDisplayMode?: CT.WithDefault; -+ navigationItemStyle?: CT.WithDefault; - hideBackButton?: boolean | undefined; - backButtonInCustomView?: boolean | undefined; - blurEffect?: CT.WithDefault; - topInsetEnabled?: boolean | undefined; - headerLeftBarButtonItems?: CT.UnsafeMixed[] | undefined; - headerRightBarButtonItems?: CT.UnsafeMixed[] | undefined; -+ headerCenterBarButtonItems?: CT.UnsafeMixed[] | undefined; -+ headerToolbarItems?: CT.UnsafeMixed[] | undefined; - onPressHeaderBarButtonItem?: CT.DirectEventHandler | undefined; - onPressHeaderBarButtonMenuItem?: CT.DirectEventHandler | undefined; - synchronousShadowStateUpdatesEnabled?: CT.WithDefault; -diff --git a/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts b/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts -index 1da0ea65ede8082de83884dd38c7c46b1988db67..1168b5d031efd3f796bb4448c1128e14de70f3fa 100644 ---- a/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts -+++ b/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts -@@ -3,6 +3,7 @@ export type HeaderSubviewTypes = 'back' | 'right' | 'left' | 'title' | 'center' - export interface NativeProps extends ViewProps { - type?: CT.WithDefault; - hidesSharedBackground?: boolean | undefined; -+ identifier?: string | undefined; - synchronousShadowStateUpdatesEnabled?: CT.WithDefault; - } - declare const _default: import("react-native").HostComponent; -diff --git a/lib/typescript/types.d.ts b/lib/typescript/types.d.ts -index 3b384e03891e38e936f370372a682d73440e7ec2..f8ec3b46a92bf20e2845eb5867af5c372215a532 100644 ---- a/lib/typescript/types.d.ts -+++ b/lib/typescript/types.d.ts -@@ -10,6 +10,7 @@ export type SearchBarCommands = { - cancelSearch: () => void; - }; - export type BackButtonDisplayMode = 'default' | 'generic' | 'minimal'; -+export type NavigationItemStyle = 'navigator' | 'browser' | 'editor'; - export type StackPresentationTypes = 'push' | 'modal' | 'transparentModal' | 'containedModal' | 'containedTransparentModal' | 'fullScreenModal' | 'formSheet' | 'pageSheet'; - export type StackAnimationTypes = 'default' | 'fade' | 'fade_from_bottom' | 'flip' | 'none' | 'simple_push' | 'slide_from_bottom' | 'slide_from_right' | 'slide_from_left' | 'ios_from_right' | 'ios_from_left'; - export type BlurEffectTypes = BlurEffect; -@@ -631,6 +632,14 @@ export interface ScreenStackHeaderConfigProps extends ViewProps { - * @platform ios - */ - backButtonDisplayMode?: BackButtonDisplayMode | undefined; -+ /** -+ * Controls the UIKit `UINavigationItem.style` used by native iOS headers. -+ * -+ * `editor` matches modern document/editor-style bars with leading-aligned compact titles and glass controls. -+ * -+ * @platform ios -+ */ -+ navigationItemStyle?: NavigationItemStyle | undefined; - /** - * Array of UIBarButtomItems to the left side of the header. - * -@@ -643,6 +652,26 @@ export interface ScreenStackHeaderConfigProps extends ViewProps { - * @platform ios - */ - headerRightBarButtonItems?: HeaderBarButtonItem[] | undefined; -+ /** -+ * Array of UIBarButtonItems to the centered item group in modern iOS headers. -+ * -+ * This maps to `UINavigationItem.centerItemGroups` on iOS 26+ and lets -+ * document/editor-style chrome keep primary actions visually centered while -+ * leaving trailing search separate. -+ * -+ * @platform ios -+ */ -+ headerCenterBarButtonItems?: HeaderBarButtonItem[] | undefined; -+ /** -+ * Array of UIBarButtonItems to display in the native toolbar attached to -+ * the current screen's navigation controller. -+ * -+ * On iOS 26+, this can contain a `searchBarPlacement` item to let UIKit -+ * render integrated Mail-style search chrome using the attached SearchBar. -+ * -+ * @platform ios -+ */ -+ headerToolbarItems?: HeaderBarButtonItem[] | undefined; - /** - * When set to true the header will be hidden while the parent Screen is on the top of the stack. The default value is false. - */ -@@ -704,6 +733,20 @@ export interface ScreenStackHeaderConfigProps extends ViewProps { - * String that can be displayed in the header as a fallback for `headerTitle`. - */ - title?: string | undefined; -+ /** -+ * String displayed below the compact navigation title on iOS 26+. -+ * -+ * @platform ios -+ */ -+ subtitle?: string | undefined; -+ /** -+ * String displayed below the large navigation title on iOS 26+. -+ * -+ * Falls back to `subtitle` when omitted. -+ * -+ * @platform ios -+ */ -+ largeSubtitle?: string | undefined; - /** - * Allows for setting text color of the title. - */ -@@ -963,6 +1006,13 @@ export interface SearchBarProps { - shouldShowHintSearchIcon?: boolean | undefined; - } - export interface ScreenStackHeaderSubviewProps { -+ /** -+ * An identifier used to match this item across navigation bar transitions. -+ * Only applicable to type="right" and type="left" subviews on iOS 26.0 and later. -+ * -+ * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/identifier -+ */ -+ identifier?: string | undefined; - /** - * A boolean value indicating whether the background this item may share with other items in the bar should be hidden. - * Only applicable to type="right" and type="left" subviews. -@@ -1001,6 +1051,11 @@ interface SharedHeaderBarButtonItem { - * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/style-swift.property - */ - variant?: 'plain' | 'done' | 'prominent' | undefined; -+ /** -+ * Render the item with UIButtonConfiguration.glassButtonConfiguration. -+ * Only available from iOS 26.0 and later. -+ */ -+ glassEffect?: boolean | undefined; - /** - * The tint color to apply to the item. - * -@@ -1145,8 +1200,38 @@ export interface HeaderBarButtonItemWithMenu extends SharedHeaderBarButtonItem { - export interface HeaderBarButtonItemSpacing { - type: 'spacing'; - spacing: number; -+ flexible?: boolean | undefined; -+} -+export interface HeaderBarButtonSearchBarPlacementItem { -+ type: 'searchBarPlacement'; -+ activatesSearchController?: boolean | undefined; -+ customView?: boolean | undefined; -+ index?: number | undefined; -+ width?: number | undefined; -+} -+export interface HeaderBarButtonSearchFieldItem { -+ type: 'searchField'; -+ placeholder?: string | undefined; -+ width?: number | undefined; -+} -+export interface HeaderBarButtonMailSearchToolbarItem { -+ type: 'mailSearchToolbar'; -+ composeButtonId?: string | undefined; -+ composeMenu?: HeaderBarButtonItemWithMenu['menu'] | undefined; -+ composeSystemImageName?: string | undefined; -+ filterButtonId?: string | undefined; -+ filterMenu?: HeaderBarButtonItemWithMenu['menu'] | undefined; -+ filterSystemImageName?: string | undefined; -+ onComposePress?: (() => void) | undefined; -+ onFilterPress?: (() => void) | undefined; -+ onSearchTextChange?: ((text: string) => void) | undefined; -+ placeholder?: string | undefined; -+ searchTextChangeId?: string | undefined; -+ showsSearchDismissButton?: boolean | undefined; -+ useFallbackSearchField?: boolean | undefined; -+ width?: number | undefined; - } --export type HeaderBarButtonItem = HeaderBarButtonItemWithAction | HeaderBarButtonItemWithMenu | HeaderBarButtonItemSpacing; -+export type HeaderBarButtonItem = HeaderBarButtonItemWithAction | HeaderBarButtonItemWithMenu | HeaderBarButtonMailSearchToolbarItem | HeaderBarButtonSearchFieldItem | HeaderBarButtonSearchBarPlacementItem | HeaderBarButtonItemSpacing; - /** - * Custom Screen Transition - */ -diff --git a/src/components/ScreenStackHeaderConfig.tsx b/src/components/ScreenStackHeaderConfig.tsx -index 421b3c2545426ae957271bd6515bcf827437541c..0ca6f1d7f324eaf257891a3bbb0aab210aa30f6f 100644 ---- a/src/components/ScreenStackHeaderConfig.tsx -+++ b/src/components/ScreenStackHeaderConfig.tsx -@@ -39,7 +39,12 @@ export const ScreenStackHeaderConfig = React.forwardRef< - props.disableTopInsetApplication ?? false, - ); - -- const { headerLeftBarButtonItems, headerRightBarButtonItems } = props; -+ const { -+ headerLeftBarButtonItems, -+ headerRightBarButtonItems, -+ headerCenterBarButtonItems, -+ headerToolbarItems, -+ } = props; - - const preparedHeaderLeftBarButtonItems = - headerLeftBarButtonItems && isHeaderBarButtonsAvailableForCurrentPlatform -@@ -49,22 +54,36 @@ export const ScreenStackHeaderConfig = React.forwardRef< - headerRightBarButtonItems && isHeaderBarButtonsAvailableForCurrentPlatform - ? prepareHeaderBarButtonItems(headerRightBarButtonItems, 'right') - : undefined; -+ const preparedHeaderCenterBarButtonItems = -+ headerCenterBarButtonItems && isHeaderBarButtonsAvailableForCurrentPlatform -+ ? prepareHeaderBarButtonItems(headerCenterBarButtonItems, 'right') -+ : undefined; -+ const preparedHeaderToolbarItems = -+ headerToolbarItems && isHeaderBarButtonsAvailableForCurrentPlatform -+ ? prepareHeaderBarButtonItems(headerToolbarItems, 'right') -+ : undefined; - const hasHeaderBarButtonItems = - isHeaderBarButtonsAvailableForCurrentPlatform && - (preparedHeaderLeftBarButtonItems?.length || -- preparedHeaderRightBarButtonItems?.length); -+ preparedHeaderRightBarButtonItems?.length || -+ preparedHeaderCenterBarButtonItems?.length || -+ preparedHeaderToolbarItems?.length); - - // Handle bar button item presses - const onPressHeaderBarButtonItem = hasHeaderBarButtonItems - ? (event: NativeSyntheticEvent<{ buttonId: string }>) => { -- const pressedItem = [ -+ const buttonId = event.nativeEvent.buttonId; -+ const allItems = [ - ...(preparedHeaderLeftBarButtonItems ?? []), - ...(preparedHeaderRightBarButtonItems ?? []), -- ].find( -+ ...(preparedHeaderCenterBarButtonItems ?? []), -+ ...(preparedHeaderToolbarItems ?? []), -+ ]; -+ const pressedItem = allItems.find( - item => - item && - 'buttonId' in item && -- item.buttonId === event.nativeEvent.buttonId, -+ item.buttonId === buttonId, - ); - if ( - pressedItem && -@@ -73,6 +92,31 @@ export const ScreenStackHeaderConfig = React.forwardRef< - ) { - pressedItem.onPress(); - } -+ for (const item of allItems) { -+ if (!item || item.type !== 'mailSearchToolbar') { -+ continue; -+ } -+ if (item.filterButtonId === buttonId) { -+ item.onFilterPress?.(); -+ return; -+ } -+ if (item.composeButtonId === buttonId) { -+ item.onComposePress?.(); -+ return; -+ } -+ const searchTextChangePrefix = item.searchTextChangeId -+ ? `${item.searchTextChangeId}:` -+ : undefined; -+ if ( -+ searchTextChangePrefix && -+ buttonId.startsWith(searchTextChangePrefix) -+ ) { -+ item.onSearchTextChange?.( -+ buttonId.slice(searchTextChangePrefix.length), -+ ); -+ return; -+ } -+ } - } - : undefined; - -@@ -102,6 +146,8 @@ export const ScreenStackHeaderConfig = React.forwardRef< - const allItems = [ - ...(preparedHeaderLeftBarButtonItems ?? []), - ...(preparedHeaderRightBarButtonItems ?? []), -+ ...(preparedHeaderCenterBarButtonItems ?? []), -+ ...(preparedHeaderToolbarItems ?? []), - ]; - for (const item of allItems) { - if (item && item.type === 'menu' && item.menu) { -@@ -110,6 +156,17 @@ export const ScreenStackHeaderConfig = React.forwardRef< - action.onPress(); - return; - } -+ } else if (item && item.type === 'mailSearchToolbar') { -+ const toolbarMenus = [item.filterMenu, item.composeMenu].filter( -+ Boolean, -+ ); -+ for (const toolbarMenu of toolbarMenus) { -+ const action = findInMenu(toolbarMenu, event.nativeEvent.menuId); -+ if (action) { -+ action.onPress(); -+ return; -+ } -+ } - } - } - } -@@ -121,6 +178,8 @@ export const ScreenStackHeaderConfig = React.forwardRef< - userInterfaceStyle={props.experimental_userInterfaceStyle} - headerLeftBarButtonItems={preparedHeaderLeftBarButtonItems} - headerRightBarButtonItems={preparedHeaderRightBarButtonItems} -+ headerCenterBarButtonItems={preparedHeaderCenterBarButtonItems} -+ headerToolbarItems={preparedHeaderToolbarItems} - onPressHeaderBarButtonItem={onPressHeaderBarButtonItem} - onPressHeaderBarButtonMenuItem={onPressHeaderBarButtonMenuItem} - ref={ref} -diff --git a/src/components/helpers/prepareHeaderBarButtonItems.ts b/src/components/helpers/prepareHeaderBarButtonItems.ts -index be2c24dfee77f5883b5ab1d7473be80933b5dc6f..0b038d2005b2d51bbb2ab1d7dba7eaccda83d42f 100644 ---- a/src/components/helpers/prepareHeaderBarButtonItems.ts -+++ b/src/components/helpers/prepareHeaderBarButtonItems.ts -@@ -50,13 +50,43 @@ const prepareMenu = ( - }; - - export const prepareHeaderBarButtonItems = ( -- barButtonItems: HeaderBarButtonItem[], -+ barButtonItems: -+ | HeaderBarButtonItem[] -+ | HeaderBarButtonItem -+ | null -+ | undefined, - side: 'left' | 'right', - ) => { -- return barButtonItems?.map((item, index) => { -+ const items = Array.isArray(barButtonItems) -+ ? barButtonItems -+ : barButtonItems && typeof barButtonItems === 'object' && 'type' in barButtonItems -+ ? [barButtonItems] -+ : undefined; -+ -+ return items?.map((item, index) => { - if (item.type === 'spacing') { - return item; - } -+ if (item.type === 'searchBarPlacement') { -+ return { -+ ...item, -+ searchBarPlacement: true, -+ }; -+ } -+ if (item.type === 'searchField') { -+ return { -+ ...item, -+ searchField: true, -+ }; -+ } -+ if (item.type === 'mailSearchToolbar') { -+ return { -+ ...item, -+ mailSearchToolbar: true, -+ filterMenu: item.filterMenu ? prepareMenu(item.filterMenu, index, side, 'filter') : undefined, -+ composeMenu: item.composeMenu ? prepareMenu(item.composeMenu, index, side, 'compose') : undefined, -+ }; -+ } - let imageSource, templateSource; - if (item.icon?.type === 'imageSource') { - imageSource = Image.resolveAssetSource(item.icon.imageSource); -diff --git a/src/fabric/ScreenStackHeaderConfigNativeComponent.ts b/src/fabric/ScreenStackHeaderConfigNativeComponent.ts -index ba2479de0f49c112470f78c5084059ddd9e2f3e8..8677583a8f8daa4839340467466bfab8d73111ab 100644 ---- a/src/fabric/ScreenStackHeaderConfigNativeComponent.ts -+++ b/src/fabric/ScreenStackHeaderConfigNativeComponent.ts -@@ -14,6 +14,7 @@ type OnPressHeaderBarButtonItemEvent = Readonly<{ buttonId: string }>; - type OnPressHeaderBarButtonMenuItemEvent = Readonly<{ menuId: string }>; - - type BackButtonDisplayMode = 'minimal' | 'default' | 'generic'; -+type NavigationItemStyle = 'navigator' | 'browser' | 'editor'; - - type BlurEffect = - | 'none' -@@ -61,12 +62,15 @@ export interface NativeProps extends ViewProps { - largeTitleColor?: ColorValue | undefined; - translucent?: boolean | undefined; - title?: string | undefined; -+ subtitle?: string | undefined; -+ largeSubtitle?: string | undefined; - titleFontFamily?: string | undefined; - titleFontSize?: CT.Int32 | undefined; - titleFontWeight?: string | undefined; - titleColor?: ColorValue | undefined; - disableBackButtonMenu?: boolean | undefined; - backButtonDisplayMode?: CT.WithDefault; -+ navigationItemStyle?: CT.WithDefault; - hideBackButton?: boolean | undefined; - backButtonInCustomView?: boolean | undefined; - blurEffect?: CT.WithDefault; -@@ -74,6 +78,8 @@ export interface NativeProps extends ViewProps { - topInsetEnabled?: boolean | undefined; - headerLeftBarButtonItems?: CT.UnsafeMixed[] | undefined; - headerRightBarButtonItems?: CT.UnsafeMixed[] | undefined; -+ headerCenterBarButtonItems?: CT.UnsafeMixed[] | undefined; -+ headerToolbarItems?: CT.UnsafeMixed[] | undefined; - onPressHeaderBarButtonItem?: - | CT.DirectEventHandler - | undefined; -diff --git a/src/fabric/ScreenStackHeaderSubviewNativeComponent.ts b/src/fabric/ScreenStackHeaderSubviewNativeComponent.ts -index 9b7832bff0e1c8226ed652d3c90b3a330c6d9b20..17a7eace328f9a825c570a92d549d69195e94568 100644 ---- a/src/fabric/ScreenStackHeaderSubviewNativeComponent.ts -+++ b/src/fabric/ScreenStackHeaderSubviewNativeComponent.ts -@@ -14,6 +14,7 @@ export type HeaderSubviewTypes = - export interface NativeProps extends ViewProps { - type?: CT.WithDefault; - hidesSharedBackground?: boolean | undefined; -+ identifier?: string | undefined; - synchronousShadowStateUpdatesEnabled?: CT.WithDefault; - } - -diff --git a/src/types.tsx b/src/types.tsx -index 76a83f3acb6fd3f0af7f027798848b7124100286..39f0ae8065f4dc99a1571a3fc1cb3398caf03ff7 100644 ---- a/src/types.tsx -+++ b/src/types.tsx -@@ -26,6 +26,7 @@ export type SearchBarCommands = { - }; - - export type BackButtonDisplayMode = 'default' | 'generic' | 'minimal'; -+export type NavigationItemStyle = 'navigator' | 'browser' | 'editor'; - export type StackPresentationTypes = - | 'push' - | 'modal' -@@ -735,6 +736,14 @@ export interface ScreenStackHeaderConfigProps extends ViewProps { - * @platform ios - */ - backButtonDisplayMode?: BackButtonDisplayMode | undefined; -+ /** -+ * Controls the UIKit `UINavigationItem.style` used by native iOS headers. -+ * -+ * `editor` matches modern document/editor-style bars with leading-aligned compact titles and glass controls. -+ * -+ * @platform ios -+ */ -+ navigationItemStyle?: NavigationItemStyle | undefined; - /** - * Array of UIBarButtomItems to the left side of the header. - * -@@ -747,6 +756,26 @@ export interface ScreenStackHeaderConfigProps extends ViewProps { - * @platform ios - */ - headerRightBarButtonItems?: HeaderBarButtonItem[] | undefined; -+ /** -+ * Array of UIBarButtonItems to the centered item group in modern iOS headers. -+ * -+ * This maps to `UINavigationItem.centerItemGroups` on iOS 26+ and lets -+ * document/editor-style chrome keep primary actions visually centered while -+ * leaving trailing search separate. -+ * -+ * @platform ios -+ */ -+ headerCenterBarButtonItems?: HeaderBarButtonItem[] | undefined; -+ /** -+ * Array of UIBarButtonItems to display in the native toolbar attached to -+ * the current screen's navigation controller. -+ * -+ * On iOS 26+, this can contain a `searchBarPlacement` item to let UIKit -+ * render integrated Mail-style search chrome using the attached SearchBar. -+ * -+ * @platform ios -+ */ -+ headerToolbarItems?: HeaderBarButtonItem[] | undefined; - /** - * When set to true the header will be hidden while the parent Screen is on the top of the stack. The default value is false. - */ -@@ -808,6 +837,20 @@ export interface ScreenStackHeaderConfigProps extends ViewProps { - * String that can be displayed in the header as a fallback for `headerTitle`. - */ - title?: string | undefined; -+ /** -+ * String displayed below the compact navigation title on iOS 26+. -+ * -+ * @platform ios -+ */ -+ subtitle?: string | undefined; -+ /** -+ * String displayed below the large navigation title on iOS 26+. -+ * -+ * Falls back to `subtitle` when omitted. -+ * -+ * @platform ios -+ */ -+ largeSubtitle?: string | undefined; - /** - * Allows for setting text color of the title. - */ -@@ -1084,6 +1127,13 @@ export interface SearchBarProps { - } - - export interface ScreenStackHeaderSubviewProps { -+ /** -+ * An identifier used to match this item across navigation bar transitions. -+ * Only applicable to type="right" and type="left" subviews on iOS 26.0 and later. -+ * -+ * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/identifier -+ */ -+ identifier?: string | undefined; - /** - * A boolean value indicating whether the background this item may share with other items in the bar should be hidden. - * Only applicable to type="right" and type="left" subviews. -@@ -1125,6 +1175,11 @@ interface SharedHeaderBarButtonItem { - * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/style-swift.property - */ - variant?: 'plain' | 'done' | 'prominent' | undefined; -+ /** -+ * Render the item with UIButtonConfiguration.glassButtonConfiguration. -+ * Only available from iOS 26.0 and later. -+ */ -+ glassEffect?: boolean | undefined; - /** - * The tint color to apply to the item. - * -@@ -1279,11 +1334,47 @@ export interface HeaderBarButtonItemWithMenu extends SharedHeaderBarButtonItem { - export interface HeaderBarButtonItemSpacing { - type: 'spacing'; - spacing: number; -+ flexible?: boolean | undefined; -+} -+ -+export interface HeaderBarButtonSearchBarPlacementItem { -+ type: 'searchBarPlacement'; -+ activatesSearchController?: boolean | undefined; -+ customView?: boolean | undefined; -+ index?: number | undefined; -+ width?: number | undefined; -+} -+ -+export interface HeaderBarButtonSearchFieldItem { -+ type: 'searchField'; -+ placeholder?: string | undefined; -+ width?: number | undefined; -+} -+ -+export interface HeaderBarButtonMailSearchToolbarItem { -+ type: 'mailSearchToolbar'; -+ composeButtonId?: string | undefined; -+ composeMenu?: HeaderBarButtonItemWithMenu['menu'] | undefined; -+ composeSystemImageName?: string | undefined; -+ filterButtonId?: string | undefined; -+ filterMenu?: HeaderBarButtonItemWithMenu['menu'] | undefined; -+ filterSystemImageName?: string | undefined; -+ onComposePress?: (() => void) | undefined; -+ onFilterPress?: (() => void) | undefined; -+ onSearchTextChange?: ((text: string) => void) | undefined; -+ placeholder?: string | undefined; -+ searchTextChangeId?: string | undefined; -+ showsSearchDismissButton?: boolean | undefined; -+ useFallbackSearchField?: boolean | undefined; -+ width?: number | undefined; - } - - export type HeaderBarButtonItem = - | HeaderBarButtonItemWithAction - | HeaderBarButtonItemWithMenu -+ | HeaderBarButtonMailSearchToolbarItem -+ | HeaderBarButtonSearchFieldItem -+ | HeaderBarButtonSearchBarPlacementItem - | HeaderBarButtonItemSpacing; - - /** diff --git a/patches/react-native-screens@4.26.2.patch b/patches/react-native-screens@4.26.2.patch new file mode 100644 index 0000000000000000000000000000000000000000..9faf1c1a5906d04088e69f09d44b17a27f71db4a --- /dev/null +++ b/patches/react-native-screens@4.26.2.patch @@ -0,0 +1,1952 @@ +diff --git a/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt b/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +index fa1b77317f609983ae2434764174072e51130550..270c81c90971b0ff3038b999973dd4d128a9d140 100644 +--- a/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt ++++ b/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +@@ -124,6 +124,34 @@ class ScreenStackHeaderConfigViewManager : + config.setTitle(title) + } + ++ // The t3 patch adds these iOS glass-chrome props to the native spec; they have ++ // no Android implementation, but the codegen-generated interface requires the ++ // setters to exist. No-ops keep the Android build compiling. ++ override fun setSubtitle( ++ config: ScreenStackHeaderConfig, ++ subtitle: String?, ++ ) = Unit ++ ++ override fun setLargeSubtitle( ++ config: ScreenStackHeaderConfig, ++ largeSubtitle: String?, ++ ) = Unit ++ ++ override fun setNavigationItemStyle( ++ config: ScreenStackHeaderConfig, ++ navigationItemStyle: String?, ++ ) = Unit ++ ++ override fun setHeaderCenterBarButtonItems( ++ config: ScreenStackHeaderConfig, ++ headerCenterBarButtonItems: ReadableArray?, ++ ) = Unit ++ ++ override fun setHeaderToolbarItems( ++ config: ScreenStackHeaderConfig, ++ headerToolbarItems: ReadableArray?, ++ ) = Unit ++ + override fun setTitleFontFamily( + config: ScreenStackHeaderConfig, + titleFontFamily: String?, +diff --git a/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt b/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +index 64f14f0c5ade16eb9519b8780d4ce013f88fbd3a..6cb1d69f97a95759c662a6006a9626925d9fefd9 100644 +--- a/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt ++++ b/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +@@ -47,6 +47,12 @@ class ScreenStackHeaderSubviewManager : + Log.w("[RNScreens]", "hidesSharedBackground prop is not available on Android") + } + ++ // Bar button transition identifiers only apply on iOS. ++ override fun setIdentifier( ++ view: ScreenStackHeaderSubview, ++ identifier: String?, ++ ) = Unit ++ + // synchronousShadowStateUpdatesEnabled is not available on Android atm, + // however we must override their setters + override fun setSynchronousShadowStateUpdatesEnabled( +diff --git a/ios/RNSBarButtonItem.h b/ios/RNSBarButtonItem.h +index a26d1254eafd89268f65d968988cf6a3b8c1e457..62eea42ac26c532801189556c5f51012c3df3a52 100644 +--- a/ios/RNSBarButtonItem.h ++++ b/ios/RNSBarButtonItem.h +@@ -15,6 +15,10 @@ typedef void (^RNSBarButtonMenuItemAction)(NSString *menuId); + action:(RNSBarButtonItemAction)action + menuAction:(RNSBarButtonMenuItemAction)menuAction + imageLoader:(RCTImageLoader *)imageLoader; ++ +++ (UIMenu *)initUIMenuWithDict:(NSDictionary *)dict ++ menuAction:(RNSBarButtonMenuItemAction)menuAction ++ imageLoader:(RCTImageLoader *)imageLoader; + #endif // defined(__cplusplus) + + @end +diff --git a/ios/RNSBarButtonItem.mm b/ios/RNSBarButtonItem.mm +index 0eb1f09dee82edd99e3e614938233db5cdeaebfe..73298f10807520970f625e166d7f5dd1338206f1 100644 +--- a/ios/RNSBarButtonItem.mm ++++ b/ios/RNSBarButtonItem.mm +@@ -110,6 +110,58 @@ - (instancetype)initWithConfig:(NSDictionary *)dict + if (dict[@"accessibilityHint"]) { + self.accessibilityHint = dict[@"accessibilityHint"]; + } ++#if !TARGET_OS_TV && RNS_IPHONE_OS_VERSION_AVAILABLE(26_0) ++ NSNumber *glassEffectNum = dict[@"glassEffect"]; ++ if (@available(iOS 26.0, *)) { ++ if ([glassEffectNum boolValue]) { ++ UIButtonConfiguration *configuration = [UIButtonConfiguration glassButtonConfiguration]; ++ configuration.cornerStyle = UIButtonConfigurationCornerStyleCapsule; ++ UIBackgroundConfiguration *background = configuration.background; ++ background.strokeWidth = 0.0; ++ background.strokeColor = UIColor.clearColor; ++ configuration.background = background; ++ configuration.contentInsets = NSDirectionalEdgeInsetsZero; ++ if (title != nil) { ++ configuration.title = title; ++ } ++ ++ UIButton *button = [UIButton buttonWithConfiguration:configuration primaryAction:nil]; ++ button.translatesAutoresizingMaskIntoConstraints = NO; ++ button.enabled = self.enabled; ++ button.accessibilityLabel = self.accessibilityLabel; ++ button.accessibilityHint = self.accessibilityHint; ++ ++ CGFloat resolvedWidth = width != nil ? width.doubleValue : 56.0; ++ [button.widthAnchor constraintEqualToConstant:resolvedWidth].active = YES; ++ [button.heightAnchor constraintEqualToConstant:50.0].active = YES; ++ ++ [[self class] resolveImageFromConfig:dict ++ imageLoader:imageLoader ++ completionBlock:^(UIImage *img) { ++ UIButtonConfiguration *updatedConfiguration = button.configuration; ++ updatedConfiguration.image = img; ++ button.configuration = updatedConfiguration; ++ }]; ++ ++ NSDictionary *menu = dict[@"menu"]; ++ if (menu) { ++ button.menu = [[self class] initUIMenuWithDict:menu menuAction:menuAction imageLoader:imageLoader]; ++ button.showsMenuAsPrimaryAction = YES; ++ } else { ++ NSString *buttonId = dict[@"buttonId"]; ++ if (buttonId && action) { ++ UIAction *pressAction = [UIAction actionWithHandler:^(__kindof UIAction *_Nonnull sender) { ++ action(buttonId); ++ }]; ++ [button addAction:pressAction forControlEvents:UIControlEventTouchUpInside]; ++ } ++ } ++ ++ self.customView = button; ++ return self; ++ } ++ } ++#endif + + #if !TARGET_OS_TV || __TV_OS_VERSION_MAX_ALLOWED >= 170000 + if (@available(tvOS 17.0, *)) { +diff --git a/ios/RNSScreenStackHeaderConfig.h b/ios/RNSScreenStackHeaderConfig.h +index 8a41697223f6c4b5cb2dd6d450fc58cbb3b27536..309ba2f762068dcf452c172f7c7cbf2a55d03cb2 100644 +--- a/ios/RNSScreenStackHeaderConfig.h ++++ b/ios/RNSScreenStackHeaderConfig.h +@@ -23,6 +23,8 @@ + NS_ASSUME_NONNULL_BEGIN + + @property (nonatomic, retain) NSString *title; ++@property (nonatomic, retain) NSString *subtitle; ++@property (nonatomic, retain) NSString *largeSubtitle; + @property (nonatomic, retain) NSString *titleFontFamily; + @property (nonatomic, retain) NSNumber *titleFontSize; + @property (nonatomic, retain) NSString *titleFontWeight; +@@ -47,9 +49,12 @@ NS_ASSUME_NONNULL_BEGIN + @property (nonatomic) BOOL backButtonInCustomView; + @property (nonatomic) UISemanticContentAttribute direction; + @property (nonatomic) UINavigationItemBackButtonDisplayMode backButtonDisplayMode; ++@property (nonatomic) NSInteger navigationItemStyle; + @property (nonatomic) RNSBlurEffectStyle blurEffect; + @property (nonatomic, copy, nullable) NSArray *> *headerRightBarButtonItems; + @property (nonatomic, copy, nullable) NSArray *> *headerLeftBarButtonItems; ++@property (nonatomic, copy, nullable) NSArray *> *headerCenterBarButtonItems; ++@property (nonatomic, copy, nullable) NSArray *> *headerToolbarItems; + @property (nonatomic, readwrite) BOOL synchronousShadowStateUpdatesEnabled; + + NS_ASSUME_NONNULL_END +diff --git a/ios/RNSScreenStackHeaderConfig.mm b/ios/RNSScreenStackHeaderConfig.mm +index 1c844846a5c66e31cfa530ca462774d2fb6bbea1..d36bda28552e5ac75088e18d0fde338eff90c694 100644 +--- a/ios/RNSScreenStackHeaderConfig.mm ++++ b/ios/RNSScreenStackHeaderConfig.mm +@@ -24,11 +24,46 @@ + #import "RNSSearchBar.h" + #import "UINavigationBar+RNSUtility.h" + ++#import ++ + namespace react = facebook::react; + + static const NSNumber *const DEFAULT_TITLE_FONT_SIZE = @17; ++ ++#if !TARGET_OS_TV ++// Each placement keeps its own cache so changes to one side do not move live ++// items on the other side into new groups during a navigation transition. ++static char RNSAppliedLeadingHeaderItemsKey; ++static char RNSAppliedTrailingHeaderItemsKey; ++static char RNSAppliedCenterHeaderItemsKey; ++ ++// Records a placement's owner and contents, returning whether they changed. ++static BOOL RNSUpdateHeaderItemsCache(UINavigationItem *navitem, const void *key, NSArray *itemsKey) ++{ ++ if ([objc_getAssociatedObject(navitem, key) isEqual:itemsKey]) { ++ return NO; ++ } ++ objc_setAssociatedObject(navitem, key, itemsKey, OBJC_ASSOCIATION_RETAIN_NONATOMIC); ++ return YES; ++} ++#endif ++static char RNSAppliedToolbarConfigsKey; + static const NSNumber *const DEFAULT_TITLE_LARGE_FONT_SIZE = @34; + ++static NSInteger navigationItemStyleFromCppEquivalent( ++ react::RNSScreenStackHeaderConfigNavigationItemStyle navigationItemStyle) ++{ ++ switch (navigationItemStyle) { ++ case react::RNSScreenStackHeaderConfigNavigationItemStyle::Browser: ++ return UINavigationItemStyleBrowser; ++ case react::RNSScreenStackHeaderConfigNavigationItemStyle::Editor: ++ return UINavigationItemStyleEditor; ++ case react::RNSScreenStackHeaderConfigNavigationItemStyle::Navigator: ++ default: ++ return UINavigationItemStyleNavigator; ++ } ++} ++ + @interface RCTImageLoader (Private) + - (id)imageCache; + @end +@@ -46,6 +81,9 @@ + (BOOL)rnscreens_isBlankOrNull:(NSString *)string + @end + + @interface RNSScreenStackHeaderConfig () ++#if !TARGET_OS_TV ++- (NSArray *)barButtonItemGroupsFromItems:(NSArray *)items; ++#endif + @end + + @implementation RNSScreenStackHeaderConfig { +@@ -80,6 +118,7 @@ - (void)initProps + self.hidden = YES; + _reactSubviews = [NSMutableArray new]; + _backTitleVisible = YES; ++ _navigationItemStyle = UINavigationItemStyleNavigator; + _blurEffect = RNSBlurEffectStyleNone; + _synchronousShadowStateUpdatesEnabled = YES; + } +@@ -507,6 +546,10 @@ + (void)updateViewController:(UIViewController *)vc + + if (shouldHide) { + navitem.title = config.title; ++ if (@available(iOS 26.0, *)) { ++ navitem.subtitle = config.subtitle; ++ navitem.largeSubtitle = config.largeSubtitle; ++ } + + // Setting navigation bar visibility is split to mitigate iOS 26 bug with bar button items. + [navctr setNavigationBarHidden:YES animated:animated]; +@@ -523,11 +566,19 @@ + (void)updateViewController:(UIViewController *)vc + } + navitem.largeTitleDisplayMode = + config.largeTitle ? UINavigationItemLargeTitleDisplayModeAlways : UINavigationItemLargeTitleDisplayModeNever; ++ ++ if (@available(iOS 16.0, *)) { ++ navitem.style = (UINavigationItemStyle)config.navigationItemStyle; ++ } + #endif + + UINavigationBarAppearance *appearance = [self buildAppearance:vc withConfig:config]; + navitem.standardAppearance = appearance; + navitem.compactAppearance = appearance; ++ if (@available(iOS 26.0, *)) { ++ navitem.subtitle = config.subtitle; ++ navitem.largeSubtitle = config.largeSubtitle; ++ } + + // appearance does not apply to the tvOS so we need to use lagacy customization + #if TARGET_OS_TV +@@ -559,8 +610,6 @@ + (void)updateViewController:(UIViewController *)vc + navitem.leftItemsSupplementBackButton = config.backButtonInCustomView; + #endif + navitem.titleView = nil; +- navitem.leftBarButtonItems = nil; +- navitem.rightBarButtonItems = nil; + + #if !TARGET_OS_TV + // We want to set navitem.searchController to nil only if we are sure +@@ -568,22 +617,18 @@ + (void)updateViewController:(UIViewController *)vc + bool searchBarPresent = false; + #endif /* !TARGET_OS_TV */ + ++ NSMutableArray *subviewLeftItems = [NSMutableArray array]; ++ NSMutableArray *subviewRightItems = [NSMutableArray array]; + for (RNSScreenStackHeaderSubview *subview in config.reactSubviews) { + // This code should be kept in sync on Fabric with analogous switch statement in + // `- [RNSScreenStackHeaderConfig replaceNavigationBarViewsWithSnapshotOfSubview:]` method. + switch (subview.type) { + case RNSScreenStackHeaderSubviewTypeLeft: { +- NSArray *currentItems = navitem.leftBarButtonItems ?: @[]; +- NSMutableArray *mutableItems = [currentItems mutableCopy]; +- [mutableItems addObject:[subview getUIBarButtonItem]]; +- navitem.leftBarButtonItems = mutableItems; ++ [subviewLeftItems addObject:[subview getUIBarButtonItem]]; + break; + } + case RNSScreenStackHeaderSubviewTypeRight: { +- NSArray *currentItems = navitem.rightBarButtonItems ?: @[]; +- NSMutableArray *mutableItems = [currentItems mutableCopy]; +- [mutableItems addObject:[subview getUIBarButtonItem]]; +- navitem.rightBarButtonItems = mutableItems; ++ [subviewRightItems addObject:[subview getUIBarButtonItem]]; + break; + } + case RNSScreenStackHeaderSubviewTypeCenter: +@@ -648,10 +693,453 @@ + (void)updateViewController:(UIViewController *)vc + // This assignment should be done after `navitem.titleView = ...` assignment (iOS 16.0 bug). + // See: https://github.com/software-mansion/react-native-screens/issues/1570 (comments) + navitem.title = config.title; +- navitem.leftBarButtonItems = [config barButtonItemsFromConfigs:config.headerLeftBarButtonItems +- withCurrentItems:navitem.leftBarButtonItems]; +- navitem.rightBarButtonItems = [config barButtonItemsFromConfigs:config.headerRightBarButtonItems +- withCurrentItems:navitem.rightBarButtonItems]; ++ // Retain the config in the key so its address cannot be reused while cached. ++ // Items capture this config's event emitter in their press handlers, so a ++ // remounted header-config view with value-equal configs must still rebuild ++ // instead of dispatching presses into the old config's emitter. ++ // getUIBarButtonItem is stable for the lifetime of its React header ++ // subview. Include those native identities in the key so React-backed ++ // items can use the same cache without reusing a group after its view was ++ // replaced. ++ // A bar button item can belong to only one group. Even if the item itself ++ // is reused, constructing a new group removes it from the old group that ++ // UIKit may still be animating. Preserve each unchanged placement's group, ++ // including the empty leading group beside the system back button. ++#if !TARGET_OS_TV ++ if (@available(iOS 16.0, *)) { ++ NSArray *headerLeftConfigs = config.headerLeftBarButtonItems ?: @[]; ++ NSArray *headerRightConfigs = config.headerRightBarButtonItems ?: @[]; ++ NSArray *headerCenterConfigs = config.headerCenterBarButtonItems ?: @[]; ++ if (RNSUpdateHeaderItemsCache( ++ navitem, &RNSAppliedLeadingHeaderItemsKey, @[ config, headerLeftConfigs, subviewLeftItems ])) { ++ NSArray *items = [config barButtonItemsFromConfigs:config.headerLeftBarButtonItems ++ withCurrentItems:subviewLeftItems ++ navigationItem:navitem]; ++ navitem.leadingItemGroups = [config barButtonItemGroupsFromItems:items]; ++ } ++ if (RNSUpdateHeaderItemsCache( ++ navitem, &RNSAppliedTrailingHeaderItemsKey, @[ config, headerRightConfigs, subviewRightItems ])) { ++ NSArray *items = [config barButtonItemsFromConfigs:config.headerRightBarButtonItems ++ withCurrentItems:subviewRightItems ++ navigationItem:navitem]; ++ navitem.trailingItemGroups = [config barButtonItemGroupsFromItems:items]; ++ } ++ if (@available(iOS 26.0, *)) { ++ if (RNSUpdateHeaderItemsCache(navitem, &RNSAppliedCenterHeaderItemsKey, @[ config, headerCenterConfigs ])) { ++ NSArray *items = [config barButtonItemsFromConfigs:config.headerCenterBarButtonItems ++ withCurrentItems:@[] ++ navigationItem:navitem]; ++ navitem.centerItemGroups = [config barButtonItemGroupsFromItems:items]; ++ } ++ } ++ } else ++#endif ++ { ++ NSArray *leftBarButtonItems = [config barButtonItemsFromConfigs:config.headerLeftBarButtonItems ++ withCurrentItems:subviewLeftItems ++ navigationItem:navitem]; ++ NSArray *rightBarButtonItems = [config barButtonItemsFromConfigs:config.headerRightBarButtonItems ++ withCurrentItems:subviewRightItems ++ navigationItem:navitem]; ++ navitem.leftBarButtonItems = leftBarButtonItems; ++ navitem.rightBarButtonItems = rightBarButtonItems; ++ } ++ NSDictionary *mailSearchToolbarConfig = nil; ++ for (NSDictionary *toolbarConfig in config.headerToolbarItems) { ++ if (toolbarConfig[@"mailSearchToolbar"]) { ++ mailSearchToolbarConfig = toolbarConfig; ++ break; ++ } ++ } ++ if (mailSearchToolbarConfig == nil) { ++ for (NSDictionary *rightConfig in config.headerRightBarButtonItems) { ++ if ([rightConfig[@"bottomMailSearchToolbar"] boolValue]) { ++ mailSearchToolbarConfig = rightConfig; ++ break; ++ } ++ } ++ } ++ ++ static NSInteger const RNSMailSearchToolbarViewTag = 260628; ++ UIView *chromeHostView = vc.view; ++ UIView *existingMailSearchToolbar = [chromeHostView viewWithTag:RNSMailSearchToolbarViewTag]; ++ if (existingMailSearchToolbar == nil) { ++ existingMailSearchToolbar = [vc.view viewWithTag:RNSMailSearchToolbarViewTag]; ++ } ++ // Reuse the live toolbar when nothing it was built from changed: rebuilding ++ // replaces the fallback UISearchTextField with a fresh empty one, dropping ++ // the user's in-progress search text and first responder on every unrelated ++ // header update. Keyed on the config instance (the button/search blocks ++ // capture its event emitter), the toolbar config values, and the host width ++ // (the width constraint constant is resolved from it at build time). ++ static char RNSAppliedMailSearchToolbarConfigKey; ++ NSArray *mailSearchToolbarKey = mailSearchToolbarConfig != nil ++ ? @[ @((uintptr_t)config), mailSearchToolbarConfig, @(chromeHostView.bounds.size.width) ] ++ : nil; ++ BOOL reuseMailSearchToolbar = existingMailSearchToolbar != nil && mailSearchToolbarKey != nil && ++ [objc_getAssociatedObject(existingMailSearchToolbar, &RNSAppliedMailSearchToolbarConfigKey) ++ isEqual:mailSearchToolbarKey]; ++ if (!reuseMailSearchToolbar) { ++ [existingMailSearchToolbar removeFromSuperview]; ++ } ++ ++ if (mailSearchToolbarConfig != nil && !reuseMailSearchToolbar) { ++#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0) ++ if (@available(iOS 26.0, *)) { ++ CGFloat horizontalInset = 18.0; ++ NSNumber *width = mailSearchToolbarConfig[@"width"]; ++ CGFloat hostWidth = chromeHostView.bounds.size.width; ++ if (hostWidth <= 0.0) { ++ hostWidth = vc.view.bounds.size.width; ++ } ++ if (hostWidth <= 0.0) { ++ hostWidth = [UIScreen mainScreen].bounds.size.width; ++ } ++ CGFloat fallbackWidth = MIN(560.0, MAX(300.0, hostWidth - (horizontalInset * 2.0))); ++ CGFloat resolvedWidth = width != nil ? width.doubleValue : fallbackWidth; ++ if (hostWidth > 0.0) { ++ resolvedWidth = MIN(resolvedWidth, MAX(260.0, hostWidth - 12.0)); ++ } ++ ++ CGFloat toolbarHeight = 48.0; ++ CGFloat toolbarRadius = toolbarHeight / 2.0; ++ CGFloat buttonSize = toolbarHeight; ++ CGFloat sideButtonReserve = buttonSize + 8.0; ++ CGFloat searchFieldHeight = 42.0; ++ CGFloat toolbarBottomSpacing = 4.0; ++ UIFont *searchFont = [UIFont preferredFontForTextStyle:UIFontTextStyleTitle3]; ++ NSDictionary *placeholderAttributes = @{ ++ NSForegroundColorAttributeName : UIColor.secondaryLabelColor, ++ NSFontAttributeName : searchFont, ++ }; ++ UIKeyboardLayoutGuide *keyboardLayoutGuide = chromeHostView.keyboardLayoutGuide; ++ ++ UIView *toolbarHost = [[UIView alloc] init]; ++ toolbarHost.tag = RNSMailSearchToolbarViewTag; ++ objc_setAssociatedObject( ++ toolbarHost, ++ &RNSAppliedMailSearchToolbarConfigKey, ++ mailSearchToolbarKey, ++ OBJC_ASSOCIATION_RETAIN_NONATOMIC); ++ toolbarHost.translatesAutoresizingMaskIntoConstraints = NO; ++ [chromeHostView addSubview:toolbarHost]; ++ // The screen stays mounted beneath pushed routes, so its keyboard layout ++ // guide can track a keyboard owned by another screen. Keep the toolbar at ++ // rest unless its own search field is editing. ++ NSLayoutConstraint *keyboardAvoidConstraint = ++ [toolbarHost.bottomAnchor constraintEqualToAnchor:keyboardLayoutGuide.topAnchor ++ constant:-toolbarBottomSpacing]; ++ keyboardAvoidConstraint.priority = UILayoutPriorityDefaultLow; ++ NSLayoutConstraint *restingBottomConstraint = ++ [toolbarHost.bottomAnchor constraintEqualToAnchor:chromeHostView.safeAreaLayoutGuide.bottomAnchor ++ constant:-toolbarBottomSpacing]; ++ restingBottomConstraint.priority = UILayoutPriorityDefaultHigh; ++ [NSLayoutConstraint activateConstraints:@[ ++ [toolbarHost.centerXAnchor constraintEqualToAnchor:chromeHostView.centerXAnchor], ++ [toolbarHost.bottomAnchor constraintLessThanOrEqualToAnchor:chromeHostView.safeAreaLayoutGuide.bottomAnchor ++ constant:-toolbarBottomSpacing], ++ keyboardAvoidConstraint, ++ restingBottomConstraint, ++ [toolbarHost.widthAnchor constraintEqualToConstant:resolvedWidth], ++ [toolbarHost.heightAnchor constraintEqualToConstant:toolbarHeight], ++ ]]; ++ [chromeHostView bringSubviewToFront:toolbarHost]; ++ ++ UIGlassEffect *glassEffect = [UIGlassEffect effectWithStyle:UIGlassEffectStyleRegular]; ++ glassEffect.interactive = YES; ++ UIVisualEffectView *glassView = [[UIVisualEffectView alloc] initWithEffect:glassEffect]; ++ glassView.clipsToBounds = YES; ++ glassView.layer.cornerRadius = toolbarRadius; ++ glassView.translatesAutoresizingMaskIntoConstraints = NO; ++ [toolbarHost addSubview:glassView]; ++ BOOL hasFilterButton = ++ mailSearchToolbarConfig[@"filterButtonId"] != nil || mailSearchToolbarConfig[@"filterMenu"] != nil; ++ BOOL hasComposeButton = ++ mailSearchToolbarConfig[@"composeButtonId"] != nil || mailSearchToolbarConfig[@"composeMenu"] != nil; ++ CGFloat glassLeadingInset = hasFilterButton ? sideButtonReserve : 0.0; ++ CGFloat glassTrailingInset = hasComposeButton ? -sideButtonReserve : 0.0; ++ NSLayoutConstraint *glassLeadingConstraint = ++ [glassView.leadingAnchor constraintEqualToAnchor:toolbarHost.leadingAnchor constant:glassLeadingInset]; ++ NSLayoutConstraint *glassTrailingConstraint = ++ [glassView.trailingAnchor constraintEqualToAnchor:toolbarHost.trailingAnchor constant:glassTrailingInset]; ++ [NSLayoutConstraint activateConstraints:@[ ++ glassLeadingConstraint, ++ glassTrailingConstraint, ++ [glassView.centerYAnchor constraintEqualToAnchor:toolbarHost.centerYAnchor], ++ [glassView.heightAnchor constraintEqualToConstant:toolbarHeight], ++ ]]; ++ ++ void (^emitButtonPress)(NSString *) = ^(NSString *buttonId) { ++ auto eventEmitter = std::static_pointer_cast( ++ config->_eventEmitter); ++ if (eventEmitter && buttonId) { ++ eventEmitter->onPressHeaderBarButtonItem( ++ facebook::react::RNSScreenStackHeaderConfigEventEmitter::OnPressHeaderBarButtonItem{ ++ .buttonId = std::string([buttonId UTF8String])}); ++ } ++ }; ++ ++ void (^emitMenuPress)(NSString *) = ^(NSString *menuId) { ++ auto eventEmitter = std::static_pointer_cast( ++ config->_eventEmitter); ++ if (eventEmitter && menuId) { ++ eventEmitter->onPressHeaderBarButtonMenuItem( ++ facebook::react::RNSScreenStackHeaderConfigEventEmitter::OnPressHeaderBarButtonMenuItem{ ++ .menuId = std::string([menuId UTF8String])}); ++ } ++ }; ++ ++ UIButton *(^makeGlassButton)(NSString *, NSString *, NSDictionary *) = ++ ^UIButton *(NSString *systemImageName, NSString *buttonId, NSDictionary *menuConfig) { ++ UIButtonConfiguration *configuration = [UIButtonConfiguration glassButtonConfiguration]; ++ configuration.cornerStyle = UIButtonConfigurationCornerStyleCapsule; ++ configuration.image = [UIImage systemImageNamed:systemImageName ?: @"circle"]; ++ configuration.baseForegroundColor = UIColor.labelColor; ++ UIButton *button = [UIButton buttonWithConfiguration:configuration primaryAction:nil]; ++ if (menuConfig != nil) { ++ button.menu = [RNSBarButtonItem initUIMenuWithDict:menuConfig ++ menuAction:emitMenuPress ++ imageLoader:config->_imageLoader]; ++ button.showsMenuAsPrimaryAction = YES; ++ } else if (buttonId != nil) { ++ UIAction *action = [UIAction actionWithHandler:^(__kindof UIAction *_Nonnull action) { ++ emitButtonPress(buttonId); ++ }]; ++ [button addAction:action forControlEvents:UIControlEventTouchUpInside]; ++ } ++ return button; ++ }; ++ ++ BOOL useFallbackSearchField = [mailSearchToolbarConfig[@"useFallbackSearchField"] boolValue]; ++ UISearchBar *searchBar = ++ !useFallbackSearchField && navitem.searchController != nil ? navitem.searchController.searchBar : nil; ++ NSString *placeholder = mailSearchToolbarConfig[@"placeholder"]; ++ UITextField *resolvedSearchTextField = nil; ++ if (searchBar != nil) { ++ if (placeholder != nil) { ++ searchBar.placeholder = placeholder; ++ } ++ searchBar.hidden = NO; ++ searchBar.alpha = 1.0; ++ searchBar.userInteractionEnabled = YES; ++ searchBar.searchBarStyle = UISearchBarStyleMinimal; ++ searchBar.backgroundImage = [UIImage new]; ++ searchBar.searchTextField.hidden = NO; ++ searchBar.searchTextField.alpha = 1.0; ++ searchBar.searchTextField.backgroundColor = UIColor.clearColor; ++ searchBar.searchTextField.font = searchFont; ++ searchBar.searchTextField.adjustsFontForContentSizeCategory = YES; ++ searchBar.searchTextField.textColor = UIColor.labelColor; ++ searchBar.searchTextField.tintColor = UIColor.labelColor; ++ resolvedSearchTextField = searchBar.searchTextField; ++ if (placeholder != nil) { ++ searchBar.searchTextField.attributedPlaceholder = ++ [[NSAttributedString alloc] initWithString:placeholder attributes:placeholderAttributes]; ++ } ++ searchBar.translatesAutoresizingMaskIntoConstraints = NO; ++ [glassView.contentView addSubview:searchBar]; ++ [NSLayoutConstraint activateConstraints:@[ ++ [searchBar.leadingAnchor constraintEqualToAnchor:glassView.contentView.leadingAnchor constant:8.0], ++ [searchBar.trailingAnchor constraintEqualToAnchor:glassView.contentView.trailingAnchor constant:-8.0], ++ [searchBar.centerYAnchor constraintEqualToAnchor:glassView.contentView.centerYAnchor], ++ [searchBar.heightAnchor constraintEqualToConstant:searchFieldHeight], ++ ]]; ++ } else { ++ UISearchTextField *searchField = [UISearchTextField new]; ++ if (placeholder != nil) { ++ searchField.placeholder = placeholder; ++ searchField.attributedPlaceholder = ++ [[NSAttributedString alloc] initWithString:placeholder attributes:placeholderAttributes]; ++ } ++ NSString *searchTextChangeId = mailSearchToolbarConfig[@"searchTextChangeId"]; ++ if (searchTextChangeId != nil) { ++ [searchField addAction:[UIAction actionWithHandler:^(__kindof UIAction *_Nonnull action) { ++ UISearchTextField *field = (UISearchTextField *)action.sender; ++ emitButtonPress([NSString stringWithFormat:@"%@:%@", searchTextChangeId, field.text ?: @""]); ++ }] ++ forControlEvents:UIControlEventEditingChanged]; ++ } ++ searchField.borderStyle = UITextBorderStyleNone; ++ searchField.font = searchFont; ++ searchField.adjustsFontForContentSizeCategory = YES; ++ searchField.textColor = UIColor.labelColor; ++ searchField.tintColor = UIColor.labelColor; ++ resolvedSearchTextField = searchField; ++ searchField.translatesAutoresizingMaskIntoConstraints = NO; ++ [glassView.contentView addSubview:searchField]; ++ [NSLayoutConstraint activateConstraints:@[ ++ [searchField.leadingAnchor constraintEqualToAnchor:glassView.contentView.leadingAnchor constant:14.0], ++ [searchField.trailingAnchor constraintEqualToAnchor:glassView.contentView.trailingAnchor constant:-14.0], ++ [searchField.centerYAnchor constraintEqualToAnchor:glassView.contentView.centerYAnchor], ++ [searchField.heightAnchor constraintEqualToConstant:searchFieldHeight], ++ ]]; ++ } ++ ++ UIButton *filterButton = nil; ++ if (hasFilterButton) { ++ filterButton = makeGlassButton( ++ mailSearchToolbarConfig[@"filterSystemImageName"] ?: @"line.3.horizontal.decrease", ++ mailSearchToolbarConfig[@"filterButtonId"], ++ mailSearchToolbarConfig[@"filterMenu"]); ++ filterButton.translatesAutoresizingMaskIntoConstraints = NO; ++ [toolbarHost addSubview:filterButton]; ++ [NSLayoutConstraint activateConstraints:@[ ++ [filterButton.leadingAnchor constraintEqualToAnchor:toolbarHost.leadingAnchor], ++ [filterButton.centerYAnchor constraintEqualToAnchor:toolbarHost.centerYAnchor], ++ [filterButton.widthAnchor constraintEqualToConstant:buttonSize], ++ [filterButton.heightAnchor constraintEqualToConstant:buttonSize], ++ ]]; ++ } ++ ++ UIButton *composeButton = nil; ++ if (hasComposeButton) { ++ composeButton = makeGlassButton( ++ mailSearchToolbarConfig[@"composeSystemImageName"] ?: @"square.and.pencil", ++ mailSearchToolbarConfig[@"composeButtonId"], ++ mailSearchToolbarConfig[@"composeMenu"]); ++ composeButton.translatesAutoresizingMaskIntoConstraints = NO; ++ [toolbarHost addSubview:composeButton]; ++ [NSLayoutConstraint activateConstraints:@[ ++ [composeButton.trailingAnchor constraintEqualToAnchor:toolbarHost.trailingAnchor], ++ [composeButton.centerYAnchor constraintEqualToAnchor:toolbarHost.centerYAnchor], ++ [composeButton.widthAnchor constraintEqualToConstant:buttonSize], ++ [composeButton.heightAnchor constraintEqualToConstant:buttonSize], ++ ]]; ++ } ++ ++ BOOL showsSearchDismissButton = ++ [mailSearchToolbarConfig[@"showsSearchDismissButton"] boolValue] && resolvedSearchTextField != nil; ++ UIButton *searchDismissButton = nil; ++ if (showsSearchDismissButton) { ++ searchDismissButton = makeGlassButton(@"xmark", nil, nil); ++ searchDismissButton.accessibilityLabel = @"Dismiss search keyboard"; ++ searchDismissButton.alpha = 0.0; ++ searchDismissButton.hidden = YES; ++ searchDismissButton.translatesAutoresizingMaskIntoConstraints = NO; ++ [toolbarHost addSubview:searchDismissButton]; ++ [NSLayoutConstraint activateConstraints:@[ ++ [searchDismissButton.trailingAnchor constraintEqualToAnchor:toolbarHost.trailingAnchor], ++ [searchDismissButton.centerYAnchor constraintEqualToAnchor:toolbarHost.centerYAnchor], ++ [searchDismissButton.widthAnchor constraintEqualToConstant:buttonSize], ++ [searchDismissButton.heightAnchor constraintEqualToConstant:buttonSize], ++ ]]; ++ __weak UITextField *weakSearchTextField = resolvedSearchTextField; ++ [searchDismissButton ++ addAction:[UIAction actionWithHandler:^(__kindof UIAction *_Nonnull action) { ++ [weakSearchTextField resignFirstResponder]; ++ }] ++ forControlEvents:UIControlEventTouchUpInside]; ++ } ++ ++ __weak UIButton *weakFilterButton = filterButton; ++ __weak UIButton *weakComposeButton = composeButton; ++ __weak UIButton *weakSearchDismissButton = searchDismissButton; ++ __weak NSLayoutConstraint *weakGlassLeadingConstraint = glassLeadingConstraint; ++ __weak NSLayoutConstraint *weakGlassTrailingConstraint = glassTrailingConstraint; ++ __weak NSLayoutConstraint *weakKeyboardAvoidConstraint = keyboardAvoidConstraint; ++ __weak NSLayoutConstraint *weakRestingBottomConstraint = restingBottomConstraint; ++ __weak UIView *weakToolbarHost = toolbarHost; ++ __weak UITextField *weakSearchTextField = resolvedSearchTextField; ++ void (^setSearchEditingAppearance)(BOOL, BOOL) = ^(BOOL isEditing, BOOL animated) { ++ weakKeyboardAvoidConstraint.priority = ++ isEditing ? UILayoutPriorityDefaultHigh : UILayoutPriorityDefaultLow; ++ weakRestingBottomConstraint.priority = ++ isEditing ? UILayoutPriorityDefaultLow : UILayoutPriorityDefaultHigh; ++ ++ if (showsSearchDismissButton) { ++ if (isEditing) { ++ weakSearchDismissButton.hidden = NO; ++ } else { ++ weakFilterButton.hidden = NO; ++ weakComposeButton.hidden = NO; ++ } ++ weakGlassLeadingConstraint.constant = isEditing ? 0.0 : glassLeadingInset; ++ weakGlassTrailingConstraint.constant = isEditing ? -sideButtonReserve : glassTrailingInset; ++ ++ void (^changes)(void) = ^{ ++ weakFilterButton.alpha = isEditing ? 0.0 : 1.0; ++ weakComposeButton.alpha = isEditing ? 0.0 : 1.0; ++ weakSearchDismissButton.alpha = isEditing ? 1.0 : 0.0; ++ [weakToolbarHost layoutIfNeeded]; ++ }; ++ void (^completion)(BOOL) = ^(BOOL finished) { ++ if (!finished || weakSearchTextField.isFirstResponder != isEditing) { ++ return; ++ } ++ weakFilterButton.hidden = isEditing; ++ weakComposeButton.hidden = isEditing; ++ weakSearchDismissButton.hidden = !isEditing; ++ }; ++ if (animated) { ++ [UIView animateWithDuration:0.2 ++ delay:0.0 ++ options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseInOut ++ animations:changes ++ completion:completion]; ++ } else { ++ changes(); ++ completion(YES); ++ } ++ } ++ [weakToolbarHost setNeedsLayout]; ++ }; ++ ++ setSearchEditingAppearance(resolvedSearchTextField.isFirstResponder, NO); ++ NSString *beginActionIdentifier = @"org.react-native-screens.mail-search-toolbar.keyboard-begin"; ++ NSString *endActionIdentifier = @"org.react-native-screens.mail-search-toolbar.keyboard-end"; ++ [resolvedSearchTextField removeActionForIdentifier:beginActionIdentifier ++ forControlEvents:UIControlEventEditingDidBegin]; ++ [resolvedSearchTextField removeActionForIdentifier:endActionIdentifier ++ forControlEvents:UIControlEventEditingDidEnd]; ++ [resolvedSearchTextField ++ addAction:[UIAction actionWithTitle:@"" ++ image:nil ++ identifier:beginActionIdentifier ++ handler:^(__kindof UIAction *_Nonnull action) { ++ setSearchEditingAppearance(YES, YES); ++ }] ++ forControlEvents:UIControlEventEditingDidBegin]; ++ [resolvedSearchTextField ++ addAction:[UIAction actionWithTitle:@"" ++ image:nil ++ identifier:endActionIdentifier ++ handler:^(__kindof UIAction *_Nonnull action) { ++ setSearchEditingAppearance(NO, YES); ++ }] ++ forControlEvents:UIControlEventEditingDidEnd]; ++ } ++#endif ++ } ++ ++ NSArray *> *navigationToolbarConfigs = config.headerToolbarItems; ++ if (mailSearchToolbarConfig != nil) { ++ navigationToolbarConfigs = @[]; ++ } ++ ++ NSArray *toolbarConfigsKey = navigationToolbarConfigs ?: @[]; ++ // Same reuse rule as the header item groups above (including the config ++ // identity — cached toolbar items capture this config's event emitter). ++ // The top-view-controller and hidden-state checks scope the skip to ++ // same-screen refreshes, so transitions between screens with different ++ // toolbars still reapply. ++ NSArray *toolbarCacheKey = @[ @((uintptr_t)config), toolbarConfigsKey ]; ++ BOOL reuseToolbarItems = navctr.topViewController == vc && ++ navctr.isToolbarHidden == (toolbarConfigsKey.count == 0) && ++ [objc_getAssociatedObject(navitem, &RNSAppliedToolbarConfigsKey) isEqual:toolbarCacheKey]; ++ if (!reuseToolbarItems) { ++ NSArray *toolbarItems = [config barButtonItemsFromConfigs:navigationToolbarConfigs ++ withCurrentItems:@[] ++ navigationItem:navitem]; ++ if (toolbarItems.count > 0) { ++ vc.toolbarItems = toolbarItems; ++ [navctr setToolbarHidden:NO animated:animated]; ++ } else { ++ vc.toolbarItems = nil; ++ [navctr setToolbarHidden:YES animated:animated]; ++ } ++ objc_setAssociatedObject( ++ navitem, &RNSAppliedToolbarConfigsKey, toolbarCacheKey, OBJC_ASSOCIATION_RETAIN_NONATOMIC); ++ } + + // Setting navigation bar visibility is split to mitigate iOS 26 bug with bar button items + // (setting nav bar visibility should be done after `navitem.*BarButtonItems`). +@@ -784,6 +1272,7 @@ - (void)applySemanticContentAttributeIfNeededToNavCtrl:(UINavigationController * + + - (NSArray *)barButtonItemsFromConfigs:(NSArray *> *)dicts + withCurrentItems:(NSArray *)currentItems ++ navigationItem:(UINavigationItem *)navitem + { + if (dicts.count == 0) { + return currentItems; +@@ -792,7 +1281,197 @@ - (void)applySemanticContentAttributeIfNeededToNavCtrl:(UINavigationController * + [items addObjectsFromArray:currentItems]; + for (NSUInteger i = 0; i < dicts.count; i++) { + NSDictionary *dict = dicts[i]; +- if (dict[@"buttonId"] || dict[@"menu"]) { ++ if (dict[@"mailSearchToolbar"]) { ++#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0) ++ if (@available(iOS 26.0, *)) { ++ NSNumber *width = dict[@"width"]; ++ CGFloat resolvedWidth = width != nil ? width.doubleValue : MAX(320.0, [UIScreen mainScreen].bounds.size.width - 56.0); ++ CGFloat resolvedHeight = 58.0; ++ UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, resolvedWidth, resolvedHeight)]; ++ container.translatesAutoresizingMaskIntoConstraints = NO; ++ [container.widthAnchor constraintEqualToConstant:resolvedWidth].active = YES; ++ [container.heightAnchor constraintEqualToConstant:resolvedHeight].active = YES; ++ ++ UIStackView *stackView = [[UIStackView alloc] initWithFrame:container.bounds]; ++ stackView.axis = UILayoutConstraintAxisHorizontal; ++ stackView.alignment = UIStackViewAlignmentCenter; ++ stackView.distribution = UIStackViewDistributionFill; ++ stackView.spacing = 10.0; ++ stackView.translatesAutoresizingMaskIntoConstraints = NO; ++ [container addSubview:stackView]; ++ [NSLayoutConstraint activateConstraints:@[ ++ [stackView.leadingAnchor constraintEqualToAnchor:container.leadingAnchor], ++ [stackView.trailingAnchor constraintEqualToAnchor:container.trailingAnchor], ++ [stackView.centerYAnchor constraintEqualToAnchor:container.centerYAnchor], ++ [stackView.heightAnchor constraintEqualToConstant:50.0], ++ ]]; ++ ++ void (^emitButtonPress)(NSString *) = ^(NSString *buttonId) { ++ auto eventEmitter = std::static_pointer_cast( ++ self->_eventEmitter); ++ if (eventEmitter && buttonId) { ++ eventEmitter->onPressHeaderBarButtonItem( ++ facebook::react::RNSScreenStackHeaderConfigEventEmitter::OnPressHeaderBarButtonItem{ ++ .buttonId = std::string([buttonId UTF8String])}); ++ } ++ }; ++ ++ void (^emitMenuPress)(NSString *) = ^(NSString *menuId) { ++ auto eventEmitter = std::static_pointer_cast( ++ self->_eventEmitter); ++ if (eventEmitter && menuId) { ++ eventEmitter->onPressHeaderBarButtonMenuItem( ++ facebook::react::RNSScreenStackHeaderConfigEventEmitter::OnPressHeaderBarButtonMenuItem{ ++ .menuId = std::string([menuId UTF8String])}); ++ } ++ }; ++ ++ UIButton *(^makeGlassButton)(NSString *, NSString *, NSDictionary *) = ++ ^UIButton *(NSString *systemImageName, NSString *buttonId, NSDictionary *menuConfig) { ++ UIButtonConfiguration *configuration = [UIButtonConfiguration glassButtonConfiguration]; ++ configuration.cornerStyle = UIButtonConfigurationCornerStyleCapsule; ++ configuration.image = [UIImage systemImageNamed:systemImageName ?: @"circle"]; ++ ++ UIButton *button = [UIButton buttonWithConfiguration:configuration primaryAction:nil]; ++ button.translatesAutoresizingMaskIntoConstraints = NO; ++ [button.widthAnchor constraintEqualToConstant:58.0].active = YES; ++ [button.heightAnchor constraintEqualToConstant:50.0].active = YES; ++ if (menuConfig != nil) { ++ button.menu = [RNSBarButtonItem initUIMenuWithDict:menuConfig ++ menuAction:emitMenuPress ++ imageLoader:self->_imageLoader]; ++ button.showsMenuAsPrimaryAction = YES; ++ } else if (buttonId != nil) { ++ UIAction *action = [UIAction actionWithHandler:^(__kindof UIAction *_Nonnull action) { ++ emitButtonPress(buttonId); ++ }]; ++ [button addAction:action forControlEvents:UIControlEventTouchUpInside]; ++ } ++ return button; ++ }; ++ ++ BOOL hasFilterButton = dict[@"filterButtonId"] != nil || dict[@"filterMenu"] != nil; ++ BOOL hasComposeButton = dict[@"composeButtonId"] != nil || dict[@"composeMenu"] != nil; ++ ++ if (hasFilterButton) { ++ UIButton *filterButton = makeGlassButton( ++ dict[@"filterSystemImageName"] ?: @"line.3.horizontal.decrease", ++ dict[@"filterButtonId"], ++ dict[@"filterMenu"]); ++ [stackView addArrangedSubview:filterButton]; ++ } ++ ++ UISearchBar *searchBar = navitem.searchController != nil ? navitem.searchController.searchBar : [UISearchBar new]; ++ NSString *placeholder = dict[@"placeholder"]; ++ if (placeholder != nil) { ++ searchBar.placeholder = placeholder; ++ } ++ searchBar.searchBarStyle = UISearchBarStyleMinimal; ++ searchBar.translatesAutoresizingMaskIntoConstraints = NO; ++ [searchBar.heightAnchor constraintEqualToConstant:50.0].active = YES; ++ [stackView addArrangedSubview:searchBar]; ++ ++ if (hasComposeButton) { ++ UIButton *composeButton = makeGlassButton( ++ dict[@"composeSystemImageName"] ?: @"square.and.pencil", ++ dict[@"composeButtonId"], ++ dict[@"composeMenu"]); ++ [stackView addArrangedSubview:composeButton]; ++ } ++ ++ UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:container]; ++ [items addObject:item]; ++ } ++#endif ++ } else if (dict[@"searchField"]) { ++#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0) ++ if (@available(iOS 26.0, *)) { ++ NSNumber *width = dict[@"width"]; ++ CGFloat resolvedWidth = width != nil ? width.doubleValue : 280.0; ++ UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, resolvedWidth, 44.0)]; ++ container.translatesAutoresizingMaskIntoConstraints = NO; ++ [container.widthAnchor constraintEqualToConstant:resolvedWidth].active = YES; ++ [container.heightAnchor constraintEqualToConstant:44.0].active = YES; ++ ++ UISearchTextField *searchField = [UISearchTextField new]; ++ NSString *placeholder = dict[@"placeholder"]; ++ if (placeholder != nil) { ++ searchField.placeholder = placeholder; ++ } ++ searchField.translatesAutoresizingMaskIntoConstraints = NO; ++ [container addSubview:searchField]; ++ [NSLayoutConstraint activateConstraints:@[ ++ [searchField.leadingAnchor constraintEqualToAnchor:container.leadingAnchor], ++ [searchField.trailingAnchor constraintEqualToAnchor:container.trailingAnchor], ++ [searchField.centerYAnchor constraintEqualToAnchor:container.centerYAnchor], ++ [searchField.heightAnchor constraintEqualToConstant:40.0], ++ ]]; ++ ++ UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:container]; ++ [items addObject:item]; ++ } ++#endif ++ } else if (dict[@"searchBarPlacement"]) { ++#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0) ++ if (@available(iOS 26.0, *)) { ++ NSNumber *width = dict[@"width"]; ++ UIBarButtonItem *item = nil; ++ if ([dict[@"activatesSearchController"] boolValue]) { ++ UIButtonConfiguration *configuration = [UIButtonConfiguration glassButtonConfiguration]; ++ configuration.cornerStyle = UIButtonConfigurationCornerStyleCapsule; ++ configuration.image = [UIImage systemImageNamed:@"magnifyingglass"]; ++ configuration.baseForegroundColor = UIColor.labelColor; ++ UIButton *button = [UIButton buttonWithConfiguration:configuration primaryAction:nil]; ++ button.translatesAutoresizingMaskIntoConstraints = NO; ++ [button.widthAnchor constraintEqualToConstant:56.0].active = YES; ++ [button.heightAnchor constraintEqualToConstant:56.0].active = YES; ++ UIAction *action = [UIAction actionWithHandler:^(__kindof UIAction *_Nonnull action) { ++ if (navitem.searchController != nil) { ++ [navitem.searchController setActive:YES]; ++ [navitem.searchController.searchBar becomeFirstResponder]; ++ } ++ }]; ++ [button addAction:action forControlEvents:UIControlEventTouchUpInside]; ++ item = [[UIBarButtonItem alloc] initWithCustomView:button]; ++ } else if ([dict[@"customView"] boolValue] && navitem.searchController != nil) { ++ UISearchBar *searchBar = navitem.searchController.searchBar; ++ CGFloat resolvedWidth = width != nil ? width.doubleValue : searchBar.frame.size.width; ++ CGFloat resolvedHeight = searchBar.frame.size.height > 0 ? searchBar.frame.size.height : 44.0; ++ UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, resolvedWidth, resolvedHeight)]; ++ container.translatesAutoresizingMaskIntoConstraints = NO; ++ [container.widthAnchor constraintEqualToConstant:resolvedWidth].active = YES; ++ [container.heightAnchor constraintEqualToConstant:resolvedHeight].active = YES; ++ searchBar.frame = container.bounds; ++ searchBar.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; ++ [container addSubview:searchBar]; ++ item = [[UIBarButtonItem alloc] initWithCustomView:container]; ++ } else { ++ item = navitem.searchBarPlacementBarButtonItem; ++ if (width != nil) { ++ item.width = width.doubleValue; ++ } ++ } ++ NSNumber *index = dict[@"index"]; ++#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0) ++ if (@available(iOS 26.0, *)) { ++ NSNumber *sharesBackground = dict[@"sharesBackground"]; ++ if (sharesBackground != nil) { ++ item.sharesBackground = sharesBackground.boolValue; ++ } ++ NSNumber *hidesSharedBackground = dict[@"hidesSharedBackground"]; ++ if (hidesSharedBackground != nil) { ++ item.hidesSharedBackground = hidesSharedBackground.boolValue; ++ } ++ } ++#endif ++ if (index != nil && index.integerValue >= 0 && index.integerValue < items.count) { ++ [items insertObject:item atIndex:index.integerValue]; ++ } else { ++ [items addObject:item]; ++ } ++ } ++#endif ++ } else if (dict[@"buttonId"] || dict[@"menu"]) { + RNSBarButtonItem *item = [[RNSBarButtonItem alloc] initWithConfig:dict + action:^(NSString *buttonId) { + auto eventEmitter = std::static_pointer_cast( +@@ -814,19 +1493,23 @@ - (void)applySemanticContentAttributeIfNeededToNavCtrl:(UINavigationController * + } + imageLoader:_imageLoader]; + NSNumber *index = dict[@"index"]; +- if (index.integerValue < items.count) { ++ if (index != nil && index.integerValue >= 0 && index.integerValue < items.count) { + [items insertObject:item atIndex:index.integerValue]; + } else { + [items addObject:item]; + } + } else if (dict[@"spacing"]) { +- UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace +- target:nil +- action:nil]; ++ BOOL flexible = [dict[@"flexible"] boolValue]; ++ UIBarButtonItem *item = [[UIBarButtonItem alloc] ++ initWithBarButtonSystemItem:(flexible ? UIBarButtonSystemItemFlexibleSpace : UIBarButtonSystemItemFixedSpace) ++ target:nil ++ action:nil]; + NSNumber *spacingValue = dict[@"spacing"]; +- item.width = [spacingValue doubleValue]; ++ if (!flexible) { ++ item.width = [spacingValue doubleValue]; ++ } + NSNumber *index = dict[@"index"]; +- if (index.integerValue < items.count) { ++ if (index != nil && index.integerValue >= 0 && index.integerValue < items.count) { + [items insertObject:item atIndex:index.integerValue]; + } else { + [items addObject:item]; +@@ -836,6 +1519,47 @@ - (void)applySemanticContentAttributeIfNeededToNavCtrl:(UINavigationController * + return items; + } + ++#if !TARGET_OS_TV ++- (NSArray *)barButtonItemGroupsFromItems:(NSArray *)items ++{ ++ if (items.count == 0) { ++ return @[]; ++ } ++ ++ NSMutableArray *groups = [NSMutableArray array]; ++ NSMutableArray *sharedRun = [NSMutableArray array]; ++ ++ void (^flushSharedRun)(void) = ^{ ++ if (sharedRun.count == 0) { ++ return; ++ } ++ [groups addObject:[UIBarButtonItemGroup fixedGroupWithRepresentativeItem:nil ++ items:[sharedRun copy]]]; ++ [sharedRun removeAllObjects]; ++ }; ++ ++ for (UIBarButtonItem *item in items) { ++ BOOL shouldShareBackground = NO; ++#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0) ++ if (@available(iOS 26.0, *)) { ++ shouldShareBackground = item.sharesBackground && !item.hidesSharedBackground; ++ } ++#endif ++ ++ if (shouldShareBackground) { ++ [sharedRun addObject:item]; ++ continue; ++ } ++ ++ flushSharedRun(); ++ [groups addObject:[UIBarButtonItemGroup fixedGroupWithRepresentativeItem:nil items:@[ item ]]]; ++ } ++ ++ flushSharedRun(); ++ return groups; ++} ++#endif ++ + RNS_IGNORE_SUPER_CALL_BEGIN + - (void)insertReactSubview:(RNSScreenStackHeaderSubview *)subview atIndex:(NSInteger)atIndex + { +@@ -1023,6 +1747,8 @@ - (void)updateProps:(react::Props::Shared const &)props oldProps:(react::Props:: + } + + _title = RCTNSStringFromStringNilIfEmpty(newScreenProps.title); ++ _subtitle = RCTNSStringFromStringNilIfEmpty(newScreenProps.subtitle); ++ _largeSubtitle = RCTNSStringFromStringNilIfEmpty(newScreenProps.largeSubtitle); + if (newScreenProps.titleFontFamily != oldScreenProps.titleFontFamily) { + _titleFontFamily = RCTNSStringFromStringNilIfEmpty(newScreenProps.titleFontFamily); + } +@@ -1048,6 +1774,7 @@ - (void)updateProps:(react::Props::Shared const &)props oldProps:(react::Props:: + _disableBackButtonMenu = newScreenProps.disableBackButtonMenu; + _backButtonDisplayMode = + [RNSConvert UINavigationItemBackButtonDisplayModeFromCppEquivalent:newScreenProps.backButtonDisplayMode]; ++ _navigationItemStyle = navigationItemStyleFromCppEquivalent(newScreenProps.navigationItemStyle); + + if (newScreenProps.userInterfaceStyle != oldScreenProps.userInterfaceStyle) { + _userInterfaceStyle = [RNSConvert UIUserInterfaceStyleFromCppEquivalent:newScreenProps.userInterfaceStyle]; +@@ -1094,6 +1821,30 @@ - (void)updateProps:(react::Props::Shared const &)props oldProps:(react::Props:: + _headerRightBarButtonItems = array; + } + ++ if (newScreenProps.headerCenterBarButtonItems != oldScreenProps.headerCenterBarButtonItems) { ++ const auto &vec = newScreenProps.headerCenterBarButtonItems; ++ NSMutableArray *> *array = [NSMutableArray arrayWithCapacity:vec.size()]; ++ for (const auto &item : vec) { ++ NSDictionary *dict = [RNSConvert idFromFollyDynamic:item]; ++ if ([dict isKindOfClass:[NSDictionary class]]) { ++ [array addObject:dict]; ++ } ++ } ++ _headerCenterBarButtonItems = array; ++ } ++ ++ if (newScreenProps.headerToolbarItems != oldScreenProps.headerToolbarItems) { ++ const auto &vec = newScreenProps.headerToolbarItems; ++ NSMutableArray *> *array = [NSMutableArray arrayWithCapacity:vec.size()]; ++ for (const auto &item : vec) { ++ NSDictionary *dict = [RNSConvert idFromFollyDynamic:item]; ++ if ([dict isKindOfClass:[NSDictionary class]]) { ++ [array addObject:dict]; ++ } ++ } ++ _headerToolbarItems = array; ++ } ++ + [self updateViewControllerIfNeeded]; + + if (needsNavigationControllerLayout) { +diff --git a/ios/RNSScreenStackHeaderSubview.mm b/ios/RNSScreenStackHeaderSubview.mm +index add33c4807e038dcd846f6c72b2fc472ded02809..9a7c7a8a775579c85de39f921e7a362241a72075 100644 +--- a/ios/RNSScreenStackHeaderSubview.mm ++++ b/ios/RNSScreenStackHeaderSubview.mm +@@ -20,6 +20,7 @@ @implementation RNSScreenStackHeaderSubview { + // This is a strong reference to UIBarButtonItem which creates a retain cycle. + // The cycle is cleared via `invalidateUIBarButtonItem` method, called by `invalidate` callback. + UIBarButtonItem *_barButtonItem; ++ NSString *_barButtonItemIdentifier; + BOOL _hidesSharedBackground; + } + +@@ -124,6 +125,7 @@ - (void)updateProps:(react::Props::Shared const &)props oldProps:(react::Props:: + const auto &newHeaderSubviewProps = *std::static_pointer_cast(props); + + [self setType:[RNSConvert RNSScreenStackHeaderSubviewTypeFromCppEquivalent:newHeaderSubviewProps.type]]; ++ [self setBarButtonItemIdentifier:RCTNSStringFromStringNilIfEmpty(newHeaderSubviewProps.identifier)]; + [self setHidesSharedBackground:newHeaderSubviewProps.hidesSharedBackground]; + [self setSynchronousShadowStateUpdatesEnabled:newHeaderSubviewProps.synchronousShadowStateUpdatesEnabled]; + [super updateProps:props oldProps:oldProps]; +@@ -276,7 +278,14 @@ - (void)configureBarButtonItem + #if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0) + if (@available(iOS 26.0, *)) { + if (_barButtonItem != nil) { +- [_barButtonItem setHidesSharedBackground:_hidesSharedBackground]; ++ NSString *currentIdentifier = _barButtonItem.identifier; ++ if (currentIdentifier != _barButtonItemIdentifier && ++ ![currentIdentifier isEqualToString:_barButtonItemIdentifier]) { ++ _barButtonItem.identifier = _barButtonItemIdentifier; ++ } ++ if (_barButtonItem.hidesSharedBackground != _hidesSharedBackground) { ++ _barButtonItem.hidesSharedBackground = _hidesSharedBackground; ++ } + } + } + #endif // RNS_IPHONE_OS_VERSION_AVAILABLE(26_0) +@@ -284,10 +293,22 @@ - (void)configureBarButtonItem + + - (void)setHidesSharedBackground:(BOOL)hidesSharedBackground + { ++ if (_hidesSharedBackground == hidesSharedBackground) { ++ return; ++ } + _hidesSharedBackground = hidesSharedBackground; + [self configureBarButtonItem]; + } + ++- (void)setBarButtonItemIdentifier:(nullable NSString *)identifier ++{ ++ if (_barButtonItemIdentifier == identifier || [_barButtonItemIdentifier isEqualToString:identifier]) { ++ return; ++ } ++ _barButtonItemIdentifier = [identifier copy]; ++ [self configureBarButtonItem]; ++} ++ + #pragma mark - Dynamic frameworks support + + // Needed because of this: https://github.com/facebook/react-native/pull/37274 +diff --git a/lib/commonjs/components/ScreenStackHeaderConfig.js b/lib/commonjs/components/ScreenStackHeaderConfig.js +index 8c509f2657105cfd86448347c1a01fb73651ff9e..d1f53322a7d2401852732ce46bfc6f32ba1aca64 100644 +--- a/lib/commonjs/components/ScreenStackHeaderConfig.js ++++ b/lib/commonjs/components/ScreenStackHeaderConfig.js +@@ -26,18 +26,42 @@ const ScreenStackHeaderConfig = exports.ScreenStackHeaderConfig = /*#__PURE__*/_ + } = (0, _EdgeInsetApplicationContext.useEdgeInsetApplication)(!props.hidden, props.disableTopInsetApplication ?? false, props.disableLeftInsetApplication ?? false, props.disableRightInsetApplication ?? false, props.disableBottomInsetApplication ?? false); + const { + headerLeftBarButtonItems, +- headerRightBarButtonItems ++ headerRightBarButtonItems, ++ headerCenterBarButtonItems, ++ headerToolbarItems + } = props; + const preparedHeaderLeftBarButtonItems = headerLeftBarButtonItems && _utils.isHeaderBarButtonsAvailableForCurrentPlatform ? (0, _prepareHeaderBarButtonItems.prepareHeaderBarButtonItems)(headerLeftBarButtonItems, 'left') : undefined; + const preparedHeaderRightBarButtonItems = headerRightBarButtonItems && _utils.isHeaderBarButtonsAvailableForCurrentPlatform ? (0, _prepareHeaderBarButtonItems.prepareHeaderBarButtonItems)(headerRightBarButtonItems, 'right') : undefined; +- const hasHeaderBarButtonItems = _utils.isHeaderBarButtonsAvailableForCurrentPlatform && (preparedHeaderLeftBarButtonItems?.length || preparedHeaderRightBarButtonItems?.length); ++ const preparedHeaderCenterBarButtonItems = headerCenterBarButtonItems && _utils.isHeaderBarButtonsAvailableForCurrentPlatform ? (0, _prepareHeaderBarButtonItems.prepareHeaderBarButtonItems)(headerCenterBarButtonItems, 'right') : undefined; ++ const preparedHeaderToolbarItems = headerToolbarItems && _utils.isHeaderBarButtonsAvailableForCurrentPlatform ? (0, _prepareHeaderBarButtonItems.prepareHeaderBarButtonItems)(headerToolbarItems, 'right') : undefined; ++ const hasHeaderBarButtonItems = _utils.isHeaderBarButtonsAvailableForCurrentPlatform && (preparedHeaderLeftBarButtonItems?.length || preparedHeaderRightBarButtonItems?.length || preparedHeaderCenterBarButtonItems?.length || preparedHeaderToolbarItems?.length); + + // Handle bar button item presses + const onPressHeaderBarButtonItem = hasHeaderBarButtonItems ? event => { +- const pressedItem = [...(preparedHeaderLeftBarButtonItems ?? []), ...(preparedHeaderRightBarButtonItems ?? [])].find(item => item && 'buttonId' in item && item.buttonId === event.nativeEvent.buttonId); ++ const buttonId = event.nativeEvent.buttonId; ++ const allItems = [...(preparedHeaderLeftBarButtonItems ?? []), ...(preparedHeaderRightBarButtonItems ?? []), ...(preparedHeaderCenterBarButtonItems ?? []), ...(preparedHeaderToolbarItems ?? [])]; ++ const pressedItem = allItems.find(item => item && 'buttonId' in item && item.buttonId === buttonId); + if (pressedItem && pressedItem.type === 'button' && pressedItem.onPress) { + pressedItem.onPress(); + } ++ for (const item of allItems) { ++ if (!item || item.type !== 'mailSearchToolbar') { ++ continue; ++ } ++ if (item.filterButtonId === buttonId) { ++ item.onFilterPress?.(); ++ return; ++ } ++ if (item.composeButtonId === buttonId) { ++ item.onComposePress?.(); ++ return; ++ } ++ const searchTextChangePrefix = item.searchTextChangeId ? `${item.searchTextChangeId}:` : undefined; ++ if (searchTextChangePrefix && buttonId.startsWith(searchTextChangePrefix)) { ++ item.onSearchTextChange?.(buttonId.slice(searchTextChangePrefix.length)); ++ return; ++ } ++ } + } : undefined; + + // Handle bar button menu item presses by deep-searching nested menus +@@ -59,7 +83,7 @@ const ScreenStackHeaderConfig = exports.ScreenStackHeaderConfig = /*#__PURE__*/_ + }; + + // Check each bar-button item with a menu +- const allItems = [...(preparedHeaderLeftBarButtonItems ?? []), ...(preparedHeaderRightBarButtonItems ?? [])]; ++ const allItems = [...(preparedHeaderLeftBarButtonItems ?? []), ...(preparedHeaderRightBarButtonItems ?? []), ...(preparedHeaderCenterBarButtonItems ?? []), ...(preparedHeaderToolbarItems ?? [])]; + for (const item of allItems) { + if (item && item.type === 'menu' && item.menu) { + const action = findInMenu(item.menu, event.nativeEvent.menuId); +@@ -67,6 +91,15 @@ const ScreenStackHeaderConfig = exports.ScreenStackHeaderConfig = /*#__PURE__*/_ + action.onPress(); + return; + } ++ } else if (item && item.type === 'mailSearchToolbar') { ++ const toolbarMenus = [item.filterMenu, item.composeMenu].filter(Boolean); ++ for (const toolbarMenu of toolbarMenus) { ++ const action = findInMenu(toolbarMenu, event.nativeEvent.menuId); ++ if (action) { ++ action.onPress(); ++ return; ++ } ++ } + } + } + } : undefined; +@@ -74,6 +107,8 @@ const ScreenStackHeaderConfig = exports.ScreenStackHeaderConfig = /*#__PURE__*/_ + userInterfaceStyle: props.experimental_userInterfaceStyle, + headerLeftBarButtonItems: preparedHeaderLeftBarButtonItems, + headerRightBarButtonItems: preparedHeaderRightBarButtonItems, ++ headerCenterBarButtonItems: preparedHeaderCenterBarButtonItems, ++ headerToolbarItems: preparedHeaderToolbarItems, + onPressHeaderBarButtonItem: onPressHeaderBarButtonItem, + onPressHeaderBarButtonMenuItem: onPressHeaderBarButtonMenuItem, + ref: ref, +diff --git a/lib/commonjs/components/helpers/prepareHeaderBarButtonItems.js b/lib/commonjs/components/helpers/prepareHeaderBarButtonItems.js +index ab93f62e4a7049d63c6681cecbd6cf8b1d07ce10..b5ea122473b023f84eabdb1914aef09a28c6d525 100644 +--- a/lib/commonjs/components/helpers/prepareHeaderBarButtonItems.js ++++ b/lib/commonjs/components/helpers/prepareHeaderBarButtonItems.js +@@ -41,10 +41,31 @@ const prepareMenu = (menu, index, side, path = '') => { + }; + }; + const prepareHeaderBarButtonItems = (barButtonItems, side) => { +- return barButtonItems?.map((item, index) => { ++ const items = Array.isArray(barButtonItems) ? barButtonItems : barButtonItems && typeof barButtonItems === 'object' && 'type' in barButtonItems ? [barButtonItems] : undefined; ++ return items?.map((item, index) => { + if (item.type === 'spacing') { + return item; + } ++ if (item.type === 'searchBarPlacement') { ++ return { ++ ...item, ++ searchBarPlacement: true ++ }; ++ } ++ if (item.type === 'searchField') { ++ return { ++ ...item, ++ searchField: true ++ }; ++ } ++ if (item.type === 'mailSearchToolbar') { ++ return { ++ ...item, ++ mailSearchToolbar: true, ++ filterMenu: item.filterMenu ? prepareMenu(item.filterMenu, index, side, 'filter') : undefined, ++ composeMenu: item.composeMenu ? prepareMenu(item.composeMenu, index, side, 'compose') : undefined ++ }; ++ } + let imageSource, templateSource; + if (item.icon?.type === 'imageSource') { + imageSource = _reactNative.Image.resolveAssetSource(item.icon.imageSource); +diff --git a/lib/module/components/ScreenStackHeaderConfig.js b/lib/module/components/ScreenStackHeaderConfig.js +index 68e3ba6a78314aba908d07098bb6982d11e6ee80..05cb8563d3a7d3811860058df23bbd1f2f4bca00 100644 +--- a/lib/module/components/ScreenStackHeaderConfig.js ++++ b/lib/module/components/ScreenStackHeaderConfig.js +@@ -22,18 +22,42 @@ export const ScreenStackHeaderConfig = /*#__PURE__*/React.forwardRef((props, ref + } = useEdgeInsetApplication(!props.hidden, props.disableTopInsetApplication ?? false, props.disableLeftInsetApplication ?? false, props.disableRightInsetApplication ?? false, props.disableBottomInsetApplication ?? false); + const { + headerLeftBarButtonItems, +- headerRightBarButtonItems ++ headerRightBarButtonItems, ++ headerCenterBarButtonItems, ++ headerToolbarItems + } = props; + const preparedHeaderLeftBarButtonItems = headerLeftBarButtonItems && isHeaderBarButtonsAvailableForCurrentPlatform ? prepareHeaderBarButtonItems(headerLeftBarButtonItems, 'left') : undefined; + const preparedHeaderRightBarButtonItems = headerRightBarButtonItems && isHeaderBarButtonsAvailableForCurrentPlatform ? prepareHeaderBarButtonItems(headerRightBarButtonItems, 'right') : undefined; +- const hasHeaderBarButtonItems = isHeaderBarButtonsAvailableForCurrentPlatform && (preparedHeaderLeftBarButtonItems?.length || preparedHeaderRightBarButtonItems?.length); ++ const preparedHeaderCenterBarButtonItems = headerCenterBarButtonItems && isHeaderBarButtonsAvailableForCurrentPlatform ? prepareHeaderBarButtonItems(headerCenterBarButtonItems, 'right') : undefined; ++ const preparedHeaderToolbarItems = headerToolbarItems && isHeaderBarButtonsAvailableForCurrentPlatform ? prepareHeaderBarButtonItems(headerToolbarItems, 'right') : undefined; ++ const hasHeaderBarButtonItems = isHeaderBarButtonsAvailableForCurrentPlatform && (preparedHeaderLeftBarButtonItems?.length || preparedHeaderRightBarButtonItems?.length || preparedHeaderCenterBarButtonItems?.length || preparedHeaderToolbarItems?.length); + + // Handle bar button item presses + const onPressHeaderBarButtonItem = hasHeaderBarButtonItems ? event => { +- const pressedItem = [...(preparedHeaderLeftBarButtonItems ?? []), ...(preparedHeaderRightBarButtonItems ?? [])].find(item => item && 'buttonId' in item && item.buttonId === event.nativeEvent.buttonId); ++ const buttonId = event.nativeEvent.buttonId; ++ const allItems = [...(preparedHeaderLeftBarButtonItems ?? []), ...(preparedHeaderRightBarButtonItems ?? []), ...(preparedHeaderCenterBarButtonItems ?? []), ...(preparedHeaderToolbarItems ?? [])]; ++ const pressedItem = allItems.find(item => item && 'buttonId' in item && item.buttonId === buttonId); + if (pressedItem && pressedItem.type === 'button' && pressedItem.onPress) { + pressedItem.onPress(); + } ++ for (const item of allItems) { ++ if (!item || item.type !== 'mailSearchToolbar') { ++ continue; ++ } ++ if (item.filterButtonId === buttonId) { ++ item.onFilterPress?.(); ++ return; ++ } ++ if (item.composeButtonId === buttonId) { ++ item.onComposePress?.(); ++ return; ++ } ++ const searchTextChangePrefix = item.searchTextChangeId ? `${item.searchTextChangeId}:` : undefined; ++ if (searchTextChangePrefix && buttonId.startsWith(searchTextChangePrefix)) { ++ item.onSearchTextChange?.(buttonId.slice(searchTextChangePrefix.length)); ++ return; ++ } ++ } + } : undefined; + + // Handle bar button menu item presses by deep-searching nested menus +@@ -55,7 +79,7 @@ export const ScreenStackHeaderConfig = /*#__PURE__*/React.forwardRef((props, ref + }; + + // Check each bar-button item with a menu +- const allItems = [...(preparedHeaderLeftBarButtonItems ?? []), ...(preparedHeaderRightBarButtonItems ?? [])]; ++ const allItems = [...(preparedHeaderLeftBarButtonItems ?? []), ...(preparedHeaderRightBarButtonItems ?? []), ...(preparedHeaderCenterBarButtonItems ?? []), ...(preparedHeaderToolbarItems ?? [])]; + for (const item of allItems) { + if (item && item.type === 'menu' && item.menu) { + const action = findInMenu(item.menu, event.nativeEvent.menuId); +@@ -63,6 +87,15 @@ export const ScreenStackHeaderConfig = /*#__PURE__*/React.forwardRef((props, ref + action.onPress(); + return; + } ++ } else if (item && item.type === 'mailSearchToolbar') { ++ const toolbarMenus = [item.filterMenu, item.composeMenu].filter(Boolean); ++ for (const toolbarMenu of toolbarMenus) { ++ const action = findInMenu(toolbarMenu, event.nativeEvent.menuId); ++ if (action) { ++ action.onPress(); ++ return; ++ } ++ } + } + } + } : undefined; +@@ -70,6 +103,8 @@ export const ScreenStackHeaderConfig = /*#__PURE__*/React.forwardRef((props, ref + userInterfaceStyle: props.experimental_userInterfaceStyle, + headerLeftBarButtonItems: preparedHeaderLeftBarButtonItems, + headerRightBarButtonItems: preparedHeaderRightBarButtonItems, ++ headerCenterBarButtonItems: preparedHeaderCenterBarButtonItems, ++ headerToolbarItems: preparedHeaderToolbarItems, + onPressHeaderBarButtonItem: onPressHeaderBarButtonItem, + onPressHeaderBarButtonMenuItem: onPressHeaderBarButtonMenuItem, + ref: ref, +diff --git a/lib/module/components/helpers/prepareHeaderBarButtonItems.js b/lib/module/components/helpers/prepareHeaderBarButtonItems.js +index 8a70ffd78617147418d628c03c580bb7ff9a8a72..8dbd0ba2ee61ee54d44cdf286a720ce26af01f26 100644 +--- a/lib/module/components/helpers/prepareHeaderBarButtonItems.js ++++ b/lib/module/components/helpers/prepareHeaderBarButtonItems.js +@@ -35,10 +35,31 @@ const prepareMenu = (menu, index, side, path = '') => { + }; + }; + export const prepareHeaderBarButtonItems = (barButtonItems, side) => { +- return barButtonItems?.map((item, index) => { ++ const items = Array.isArray(barButtonItems) ? barButtonItems : barButtonItems && typeof barButtonItems === 'object' && 'type' in barButtonItems ? [barButtonItems] : undefined; ++ return items?.map((item, index) => { + if (item.type === 'spacing') { + return item; + } ++ if (item.type === 'searchBarPlacement') { ++ return { ++ ...item, ++ searchBarPlacement: true ++ }; ++ } ++ if (item.type === 'searchField') { ++ return { ++ ...item, ++ searchField: true ++ }; ++ } ++ if (item.type === 'mailSearchToolbar') { ++ return { ++ ...item, ++ mailSearchToolbar: true, ++ filterMenu: item.filterMenu ? prepareMenu(item.filterMenu, index, side, 'filter') : undefined, ++ composeMenu: item.composeMenu ? prepareMenu(item.composeMenu, index, side, 'compose') : undefined ++ }; ++ } + let imageSource, templateSource; + if (item.icon?.type === 'imageSource') { + imageSource = Image.resolveAssetSource(item.icon.imageSource); +diff --git a/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts b/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts +index a51d8648567cff29cd2be0d5262bd15c6fc69c61..8b7439aff4d7e6fe8a72bf0bac93c3c19568b1a6 100644 +--- a/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts ++++ b/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts +@@ -9,6 +9,7 @@ type OnPressHeaderBarButtonMenuItemEvent = Readonly<{ + menuId: string; + }>; + type BackButtonDisplayMode = 'minimal' | 'default' | 'generic'; ++type NavigationItemStyle = 'navigator' | 'browser' | 'editor'; + type BlurEffect = 'none' | 'extraLight' | 'light' | 'dark' | 'regular' | 'prominent' | 'systemUltraThinMaterial' | 'systemThinMaterial' | 'systemMaterial' | 'systemThickMaterial' | 'systemChromeMaterial' | 'systemUltraThinMaterialLight' | 'systemThinMaterialLight' | 'systemMaterialLight' | 'systemThickMaterialLight' | 'systemChromeMaterialLight' | 'systemUltraThinMaterialDark' | 'systemThinMaterialDark' | 'systemMaterialDark' | 'systemThickMaterialDark' | 'systemChromeMaterialDark'; + type UserInterfaceStyle = 'unspecified' | 'light' | 'dark'; + export interface NativeProps extends ViewProps { +@@ -32,18 +33,23 @@ export interface NativeProps extends ViewProps { + largeTitleColor?: ColorValue | undefined; + translucent?: boolean | undefined; + title?: string | undefined; ++ subtitle?: string | undefined; ++ largeSubtitle?: string | undefined; + titleFontFamily?: string | undefined; + titleFontSize?: CT.Int32 | undefined; + titleFontWeight?: string | undefined; + titleColor?: ColorValue | undefined; + disableBackButtonMenu?: boolean | undefined; + backButtonDisplayMode?: CT.WithDefault; ++ navigationItemStyle?: CT.WithDefault; + hideBackButton?: boolean | undefined; + backButtonInCustomView?: boolean | undefined; + blurEffect?: CT.WithDefault; + topInsetEnabled?: boolean | undefined; + headerLeftBarButtonItems?: CT.UnsafeMixed[] | undefined; + headerRightBarButtonItems?: CT.UnsafeMixed[] | undefined; ++ headerCenterBarButtonItems?: CT.UnsafeMixed[] | undefined; ++ headerToolbarItems?: CT.UnsafeMixed[] | undefined; + onPressHeaderBarButtonItem?: CT.DirectEventHandler | undefined; + onPressHeaderBarButtonMenuItem?: CT.DirectEventHandler | undefined; + synchronousShadowStateUpdatesEnabled?: CT.WithDefault; +diff --git a/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts b/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts +index 1ca926e6753294861f5f79ab6267dc7999f70639..15929959d1e274cc6abd55f2eb8db50ba102169a 100644 +--- a/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts ++++ b/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts +@@ -3,6 +3,7 @@ export type HeaderSubviewTypes = 'back' | 'right' | 'left' | 'title' | 'center' + export interface NativeProps extends ViewProps { + type?: CT.WithDefault; + hidesSharedBackground?: boolean | undefined; ++ identifier?: string | undefined; + synchronousShadowStateUpdatesEnabled?: CT.WithDefault; + } + declare const _default: import("react-native").HostComponent; +diff --git a/lib/typescript/types.d.ts b/lib/typescript/types.d.ts +index 10a31341f4eff258a7f8ea6abae3eddf0dd21218..bab5031f5f9b246f15e5396f3f2fee90b91d826a 100644 +--- a/lib/typescript/types.d.ts ++++ b/lib/typescript/types.d.ts +@@ -10,6 +10,7 @@ export type SearchBarCommands = { + cancelSearch: () => void; + }; + export type BackButtonDisplayMode = 'default' | 'generic' | 'minimal'; ++export type NavigationItemStyle = 'navigator' | 'browser' | 'editor'; + export type StackPresentationTypes = 'push' | 'modal' | 'transparentModal' | 'containedModal' | 'containedTransparentModal' | 'fullScreenModal' | 'formSheet' | 'pageSheet'; + export type StackAnimationTypes = 'default' | 'fade' | 'fade_from_bottom' | 'flip' | 'none' | 'simple_push' | 'slide_from_bottom' | 'slide_from_right' | 'slide_from_left' | 'ios_from_right' | 'ios_from_left'; + export type BlurEffectTypes = BlurEffect; +@@ -631,6 +632,14 @@ export interface ScreenStackHeaderConfigProps extends ViewProps { + * @platform ios + */ + backButtonDisplayMode?: BackButtonDisplayMode | undefined; ++ /** ++ * Controls the UIKit `UINavigationItem.style` used by native iOS headers. ++ * ++ * `editor` matches modern document/editor-style bars with leading-aligned compact titles and glass controls. ++ * ++ * @platform ios ++ */ ++ navigationItemStyle?: NavigationItemStyle | undefined; + /** + * Array of UIBarButtomItems to the left side of the header. + * +@@ -643,6 +652,26 @@ export interface ScreenStackHeaderConfigProps extends ViewProps { + * @platform ios + */ + headerRightBarButtonItems?: HeaderBarButtonItem[] | undefined; ++ /** ++ * Array of UIBarButtonItems to the centered item group in modern iOS headers. ++ * ++ * This maps to `UINavigationItem.centerItemGroups` on iOS 26+ and lets ++ * document/editor-style chrome keep primary actions visually centered while ++ * leaving trailing search separate. ++ * ++ * @platform ios ++ */ ++ headerCenterBarButtonItems?: HeaderBarButtonItem[] | undefined; ++ /** ++ * Array of UIBarButtonItems to display in the native toolbar attached to ++ * the current screen's navigation controller. ++ * ++ * On iOS 26+, this can contain a `searchBarPlacement` item to let UIKit ++ * render integrated Mail-style search chrome using the attached SearchBar. ++ * ++ * @platform ios ++ */ ++ headerToolbarItems?: HeaderBarButtonItem[] | undefined; + /** + * When set to true the header will be hidden while the parent Screen is on the top of the stack. The default value is false. + */ +@@ -704,6 +733,20 @@ export interface ScreenStackHeaderConfigProps extends ViewProps { + * String that can be displayed in the header as a fallback for `headerTitle`. + */ + title?: string | undefined; ++ /** ++ * String displayed below the compact navigation title on iOS 26+. ++ * ++ * @platform ios ++ */ ++ subtitle?: string | undefined; ++ /** ++ * String displayed below the large navigation title on iOS 26+. ++ * ++ * Falls back to `subtitle` when omitted. ++ * ++ * @platform ios ++ */ ++ largeSubtitle?: string | undefined; + /** + * Allows for setting text color of the title. + */ +@@ -999,6 +1042,13 @@ export interface SearchBarProps { + shouldShowHintSearchIcon?: boolean | undefined; + } + export interface ScreenStackHeaderSubviewProps { ++ /** ++ * An identifier used to match this item across navigation bar transitions. ++ * Only applicable to type="right" and type="left" subviews on iOS 26.0 and later. ++ * ++ * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/identifier ++ */ ++ identifier?: string | undefined; + /** + * A boolean value indicating whether the background this item may share with other items in the bar should be hidden. + * Only applicable to type="right" and type="left" subviews. +@@ -1037,6 +1087,11 @@ interface SharedHeaderBarButtonItem { + * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/style-swift.property + */ + variant?: 'plain' | 'done' | 'prominent' | undefined; ++ /** ++ * Render the item with UIButtonConfiguration.glassButtonConfiguration. ++ * Only available from iOS 26.0 and later. ++ */ ++ glassEffect?: boolean | undefined; + /** + * The tint color to apply to the item. + * +@@ -1181,8 +1236,38 @@ export interface HeaderBarButtonItemWithMenu extends SharedHeaderBarButtonItem { + export interface HeaderBarButtonItemSpacing { + type: 'spacing'; + spacing: number; ++ flexible?: boolean | undefined; ++} ++export interface HeaderBarButtonSearchBarPlacementItem { ++ type: 'searchBarPlacement'; ++ activatesSearchController?: boolean | undefined; ++ customView?: boolean | undefined; ++ index?: number | undefined; ++ width?: number | undefined; ++} ++export interface HeaderBarButtonSearchFieldItem { ++ type: 'searchField'; ++ placeholder?: string | undefined; ++ width?: number | undefined; ++} ++export interface HeaderBarButtonMailSearchToolbarItem { ++ type: 'mailSearchToolbar'; ++ composeButtonId?: string | undefined; ++ composeMenu?: HeaderBarButtonItemWithMenu['menu'] | undefined; ++ composeSystemImageName?: string | undefined; ++ filterButtonId?: string | undefined; ++ filterMenu?: HeaderBarButtonItemWithMenu['menu'] | undefined; ++ filterSystemImageName?: string | undefined; ++ onComposePress?: (() => void) | undefined; ++ onFilterPress?: (() => void) | undefined; ++ onSearchTextChange?: ((text: string) => void) | undefined; ++ placeholder?: string | undefined; ++ searchTextChangeId?: string | undefined; ++ showsSearchDismissButton?: boolean | undefined; ++ useFallbackSearchField?: boolean | undefined; ++ width?: number | undefined; + } +-export type HeaderBarButtonItem = HeaderBarButtonItemWithAction | HeaderBarButtonItemWithMenu | HeaderBarButtonItemSpacing; ++export type HeaderBarButtonItem = HeaderBarButtonItemWithAction | HeaderBarButtonItemWithMenu | HeaderBarButtonMailSearchToolbarItem | HeaderBarButtonSearchFieldItem | HeaderBarButtonSearchBarPlacementItem | HeaderBarButtonItemSpacing; + /** + * Custom Screen Transition + */ +diff --git a/src/components/ScreenStackHeaderConfig.tsx b/src/components/ScreenStackHeaderConfig.tsx +index c3a88b6f6c8362cf717372a35cdc35a6b397bdd0..9da8553b2c2e81fa13ef4f5b3e805efc0004ef29 100644 +--- a/src/components/ScreenStackHeaderConfig.tsx ++++ b/src/components/ScreenStackHeaderConfig.tsx +@@ -48,7 +48,12 @@ export const ScreenStackHeaderConfig = React.forwardRef< + props.disableBottomInsetApplication ?? false, + ); + +- const { headerLeftBarButtonItems, headerRightBarButtonItems } = props; ++ const { ++ headerLeftBarButtonItems, ++ headerRightBarButtonItems, ++ headerCenterBarButtonItems, ++ headerToolbarItems, ++ } = props; + + const preparedHeaderLeftBarButtonItems = + headerLeftBarButtonItems && isHeaderBarButtonsAvailableForCurrentPlatform +@@ -58,22 +63,36 @@ export const ScreenStackHeaderConfig = React.forwardRef< + headerRightBarButtonItems && isHeaderBarButtonsAvailableForCurrentPlatform + ? prepareHeaderBarButtonItems(headerRightBarButtonItems, 'right') + : undefined; ++ const preparedHeaderCenterBarButtonItems = ++ headerCenterBarButtonItems && isHeaderBarButtonsAvailableForCurrentPlatform ++ ? prepareHeaderBarButtonItems(headerCenterBarButtonItems, 'right') ++ : undefined; ++ const preparedHeaderToolbarItems = ++ headerToolbarItems && isHeaderBarButtonsAvailableForCurrentPlatform ++ ? prepareHeaderBarButtonItems(headerToolbarItems, 'right') ++ : undefined; + const hasHeaderBarButtonItems = + isHeaderBarButtonsAvailableForCurrentPlatform && + (preparedHeaderLeftBarButtonItems?.length || +- preparedHeaderRightBarButtonItems?.length); ++ preparedHeaderRightBarButtonItems?.length || ++ preparedHeaderCenterBarButtonItems?.length || ++ preparedHeaderToolbarItems?.length); + + // Handle bar button item presses + const onPressHeaderBarButtonItem = hasHeaderBarButtonItems + ? (event: NativeSyntheticEvent<{ buttonId: string }>) => { +- const pressedItem = [ ++ const buttonId = event.nativeEvent.buttonId; ++ const allItems = [ + ...(preparedHeaderLeftBarButtonItems ?? []), + ...(preparedHeaderRightBarButtonItems ?? []), +- ].find( ++ ...(preparedHeaderCenterBarButtonItems ?? []), ++ ...(preparedHeaderToolbarItems ?? []), ++ ]; ++ const pressedItem = allItems.find( + item => + item && + 'buttonId' in item && +- item.buttonId === event.nativeEvent.buttonId, ++ item.buttonId === buttonId, + ); + if ( + pressedItem && +@@ -82,6 +101,31 @@ export const ScreenStackHeaderConfig = React.forwardRef< + ) { + pressedItem.onPress(); + } ++ for (const item of allItems) { ++ if (!item || item.type !== 'mailSearchToolbar') { ++ continue; ++ } ++ if (item.filterButtonId === buttonId) { ++ item.onFilterPress?.(); ++ return; ++ } ++ if (item.composeButtonId === buttonId) { ++ item.onComposePress?.(); ++ return; ++ } ++ const searchTextChangePrefix = item.searchTextChangeId ++ ? `${item.searchTextChangeId}:` ++ : undefined; ++ if ( ++ searchTextChangePrefix && ++ buttonId.startsWith(searchTextChangePrefix) ++ ) { ++ item.onSearchTextChange?.( ++ buttonId.slice(searchTextChangePrefix.length), ++ ); ++ return; ++ } ++ } + } + : undefined; + +@@ -111,6 +155,8 @@ export const ScreenStackHeaderConfig = React.forwardRef< + const allItems = [ + ...(preparedHeaderLeftBarButtonItems ?? []), + ...(preparedHeaderRightBarButtonItems ?? []), ++ ...(preparedHeaderCenterBarButtonItems ?? []), ++ ...(preparedHeaderToolbarItems ?? []), + ]; + for (const item of allItems) { + if (item && item.type === 'menu' && item.menu) { +@@ -119,6 +165,17 @@ export const ScreenStackHeaderConfig = React.forwardRef< + action.onPress(); + return; + } ++ } else if (item && item.type === 'mailSearchToolbar') { ++ const toolbarMenus = [item.filterMenu, item.composeMenu].filter( ++ Boolean, ++ ); ++ for (const toolbarMenu of toolbarMenus) { ++ const action = findInMenu(toolbarMenu, event.nativeEvent.menuId); ++ if (action) { ++ action.onPress(); ++ return; ++ } ++ } + } + } + } +@@ -130,6 +187,8 @@ export const ScreenStackHeaderConfig = React.forwardRef< + userInterfaceStyle={props.experimental_userInterfaceStyle} + headerLeftBarButtonItems={preparedHeaderLeftBarButtonItems} + headerRightBarButtonItems={preparedHeaderRightBarButtonItems} ++ headerCenterBarButtonItems={preparedHeaderCenterBarButtonItems} ++ headerToolbarItems={preparedHeaderToolbarItems} + onPressHeaderBarButtonItem={onPressHeaderBarButtonItem} + onPressHeaderBarButtonMenuItem={onPressHeaderBarButtonMenuItem} + ref={ref} +diff --git a/src/components/helpers/prepareHeaderBarButtonItems.ts b/src/components/helpers/prepareHeaderBarButtonItems.ts +index be2c24dfee77f5883b5ab1d7473be80933b5dc6f..0b038d2005b2d51bbb2ab1d7dba7eaccda83d42f 100644 +--- a/src/components/helpers/prepareHeaderBarButtonItems.ts ++++ b/src/components/helpers/prepareHeaderBarButtonItems.ts +@@ -50,13 +50,43 @@ const prepareMenu = ( + }; + + export const prepareHeaderBarButtonItems = ( +- barButtonItems: HeaderBarButtonItem[], ++ barButtonItems: ++ | HeaderBarButtonItem[] ++ | HeaderBarButtonItem ++ | null ++ | undefined, + side: 'left' | 'right', + ) => { +- return barButtonItems?.map((item, index) => { ++ const items = Array.isArray(barButtonItems) ++ ? barButtonItems ++ : barButtonItems && typeof barButtonItems === 'object' && 'type' in barButtonItems ++ ? [barButtonItems] ++ : undefined; ++ ++ return items?.map((item, index) => { + if (item.type === 'spacing') { + return item; + } ++ if (item.type === 'searchBarPlacement') { ++ return { ++ ...item, ++ searchBarPlacement: true, ++ }; ++ } ++ if (item.type === 'searchField') { ++ return { ++ ...item, ++ searchField: true, ++ }; ++ } ++ if (item.type === 'mailSearchToolbar') { ++ return { ++ ...item, ++ mailSearchToolbar: true, ++ filterMenu: item.filterMenu ? prepareMenu(item.filterMenu, index, side, 'filter') : undefined, ++ composeMenu: item.composeMenu ? prepareMenu(item.composeMenu, index, side, 'compose') : undefined, ++ }; ++ } + let imageSource, templateSource; + if (item.icon?.type === 'imageSource') { + imageSource = Image.resolveAssetSource(item.icon.imageSource); +diff --git a/src/fabric/ScreenStackHeaderConfigNativeComponent.ts b/src/fabric/ScreenStackHeaderConfigNativeComponent.ts +index a80d9fef0c0ab5ce8221c5e0c7fae65162bc6164..fc16f51425702a418c09de553a54753331f19d15 100644 +--- a/src/fabric/ScreenStackHeaderConfigNativeComponent.ts ++++ b/src/fabric/ScreenStackHeaderConfigNativeComponent.ts +@@ -14,6 +14,7 @@ type OnPressHeaderBarButtonItemEvent = Readonly<{ buttonId: string }>; + type OnPressHeaderBarButtonMenuItemEvent = Readonly<{ menuId: string }>; + + type BackButtonDisplayMode = 'minimal' | 'default' | 'generic'; ++type NavigationItemStyle = 'navigator' | 'browser' | 'editor'; + + type BlurEffect = + | 'none' +@@ -61,12 +62,15 @@ export interface NativeProps extends ViewProps { + largeTitleColor?: ColorValue | undefined; + translucent?: boolean | undefined; + title?: string | undefined; ++ subtitle?: string | undefined; ++ largeSubtitle?: string | undefined; + titleFontFamily?: string | undefined; + titleFontSize?: CT.Int32 | undefined; + titleFontWeight?: string | undefined; + titleColor?: ColorValue | undefined; + disableBackButtonMenu?: boolean | undefined; + backButtonDisplayMode?: CT.WithDefault; ++ navigationItemStyle?: CT.WithDefault; + hideBackButton?: boolean | undefined; + backButtonInCustomView?: boolean | undefined; + blurEffect?: CT.WithDefault; +@@ -74,6 +78,8 @@ export interface NativeProps extends ViewProps { + topInsetEnabled?: boolean | undefined; + headerLeftBarButtonItems?: CT.UnsafeMixed[] | undefined; + headerRightBarButtonItems?: CT.UnsafeMixed[] | undefined; ++ headerCenterBarButtonItems?: CT.UnsafeMixed[] | undefined; ++ headerToolbarItems?: CT.UnsafeMixed[] | undefined; + onPressHeaderBarButtonItem?: + | CT.DirectEventHandler + | undefined; +diff --git a/src/fabric/ScreenStackHeaderSubviewNativeComponent.ts b/src/fabric/ScreenStackHeaderSubviewNativeComponent.ts +index 7d3fbfe08c70461936832a40a1ce8d9c11b22457..1f9caca6271b68d182b70a180f180d6a4ce3988c 100644 +--- a/src/fabric/ScreenStackHeaderSubviewNativeComponent.ts ++++ b/src/fabric/ScreenStackHeaderSubviewNativeComponent.ts +@@ -14,6 +14,7 @@ export type HeaderSubviewTypes = + export interface NativeProps extends ViewProps { + type?: CT.WithDefault; + hidesSharedBackground?: boolean | undefined; ++ identifier?: string | undefined; + synchronousShadowStateUpdatesEnabled?: CT.WithDefault; + } + +diff --git a/src/types.tsx b/src/types.tsx +index 9c3ab4c3653ee1769addda8a6464cdf49695a601..6f242ad2bbd7152ea9f873ef7754ad47caf2466d 100644 +--- a/src/types.tsx ++++ b/src/types.tsx +@@ -26,6 +26,7 @@ export type SearchBarCommands = { + }; + + export type BackButtonDisplayMode = 'default' | 'generic' | 'minimal'; ++export type NavigationItemStyle = 'navigator' | 'browser' | 'editor'; + export type StackPresentationTypes = + | 'push' + | 'modal' +@@ -735,6 +736,14 @@ export interface ScreenStackHeaderConfigProps extends ViewProps { + * @platform ios + */ + backButtonDisplayMode?: BackButtonDisplayMode | undefined; ++ /** ++ * Controls the UIKit `UINavigationItem.style` used by native iOS headers. ++ * ++ * `editor` matches modern document/editor-style bars with leading-aligned compact titles and glass controls. ++ * ++ * @platform ios ++ */ ++ navigationItemStyle?: NavigationItemStyle | undefined; + /** + * Array of UIBarButtomItems to the left side of the header. + * +@@ -747,6 +756,26 @@ export interface ScreenStackHeaderConfigProps extends ViewProps { + * @platform ios + */ + headerRightBarButtonItems?: HeaderBarButtonItem[] | undefined; ++ /** ++ * Array of UIBarButtonItems to the centered item group in modern iOS headers. ++ * ++ * This maps to `UINavigationItem.centerItemGroups` on iOS 26+ and lets ++ * document/editor-style chrome keep primary actions visually centered while ++ * leaving trailing search separate. ++ * ++ * @platform ios ++ */ ++ headerCenterBarButtonItems?: HeaderBarButtonItem[] | undefined; ++ /** ++ * Array of UIBarButtonItems to display in the native toolbar attached to ++ * the current screen's navigation controller. ++ * ++ * On iOS 26+, this can contain a `searchBarPlacement` item to let UIKit ++ * render integrated Mail-style search chrome using the attached SearchBar. ++ * ++ * @platform ios ++ */ ++ headerToolbarItems?: HeaderBarButtonItem[] | undefined; + /** + * When set to true the header will be hidden while the parent Screen is on the top of the stack. The default value is false. + */ +@@ -808,6 +837,20 @@ export interface ScreenStackHeaderConfigProps extends ViewProps { + * String that can be displayed in the header as a fallback for `headerTitle`. + */ + title?: string | undefined; ++ /** ++ * String displayed below the compact navigation title on iOS 26+. ++ * ++ * @platform ios ++ */ ++ subtitle?: string | undefined; ++ /** ++ * String displayed below the large navigation title on iOS 26+. ++ * ++ * Falls back to `subtitle` when omitted. ++ * ++ * @platform ios ++ */ ++ largeSubtitle?: string | undefined; + /** + * Allows for setting text color of the title. + */ +@@ -1120,6 +1163,13 @@ export interface SearchBarProps { + } + + export interface ScreenStackHeaderSubviewProps { ++ /** ++ * An identifier used to match this item across navigation bar transitions. ++ * Only applicable to type="right" and type="left" subviews on iOS 26.0 and later. ++ * ++ * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/identifier ++ */ ++ identifier?: string | undefined; + /** + * A boolean value indicating whether the background this item may share with other items in the bar should be hidden. + * Only applicable to type="right" and type="left" subviews. +@@ -1161,6 +1211,11 @@ interface SharedHeaderBarButtonItem { + * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/style-swift.property + */ + variant?: 'plain' | 'done' | 'prominent' | undefined; ++ /** ++ * Render the item with UIButtonConfiguration.glassButtonConfiguration. ++ * Only available from iOS 26.0 and later. ++ */ ++ glassEffect?: boolean | undefined; + /** + * The tint color to apply to the item. + * +@@ -1315,11 +1370,47 @@ export interface HeaderBarButtonItemWithMenu extends SharedHeaderBarButtonItem { + export interface HeaderBarButtonItemSpacing { + type: 'spacing'; + spacing: number; ++ flexible?: boolean | undefined; ++} ++ ++export interface HeaderBarButtonSearchBarPlacementItem { ++ type: 'searchBarPlacement'; ++ activatesSearchController?: boolean | undefined; ++ customView?: boolean | undefined; ++ index?: number | undefined; ++ width?: number | undefined; ++} ++ ++export interface HeaderBarButtonSearchFieldItem { ++ type: 'searchField'; ++ placeholder?: string | undefined; ++ width?: number | undefined; ++} ++ ++export interface HeaderBarButtonMailSearchToolbarItem { ++ type: 'mailSearchToolbar'; ++ composeButtonId?: string | undefined; ++ composeMenu?: HeaderBarButtonItemWithMenu['menu'] | undefined; ++ composeSystemImageName?: string | undefined; ++ filterButtonId?: string | undefined; ++ filterMenu?: HeaderBarButtonItemWithMenu['menu'] | undefined; ++ filterSystemImageName?: string | undefined; ++ onComposePress?: (() => void) | undefined; ++ onFilterPress?: (() => void) | undefined; ++ onSearchTextChange?: ((text: string) => void) | undefined; ++ placeholder?: string | undefined; ++ searchTextChangeId?: string | undefined; ++ showsSearchDismissButton?: boolean | undefined; ++ useFallbackSearchField?: boolean | undefined; ++ width?: number | undefined; + } + + export type HeaderBarButtonItem = + | HeaderBarButtonItemWithAction + | HeaderBarButtonItemWithMenu ++ | HeaderBarButtonMailSearchToolbarItem ++ | HeaderBarButtonSearchFieldItem ++ | HeaderBarButtonSearchBarPlacementItem + | HeaderBarButtonItemSpacing; + + /** diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f5d9b5f7b22ead266dc2833a6c433b2fc3942ce2..09242dc406d62749829636c48be450dc97735a23 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,34 +67,34 @@ overrides: '@effect/sql-sqlite-bun': 4.0.0-beta.103 '@effect/vitest': 4.0.0-beta.103 '@effect/vitest>vitest': '-' - '@expo/metro-config': 56.0.14 + '@expo/dom-webview': 57.0.1 + '@expo/metro-config': 57.0.12 + expo-constants: 57.0.16 '@pierre/diffs>@shikijs/transformers': ^4.2.0 '@types/node': 24.12.4 effect: 4.0.0-beta.103 - expo-modules-jsi: 56.0.10 - expo-sharing>@expo/config-plugins: 56.0.9 - expo-sharing>@expo/config-types: 56.0.6 + expo-router: 57.0.17 + expo-sharing>@expo/config-plugins: 57.0.9 + expo-sharing>@expo/config-types: 57.0.2 vite: npm:@voidzero-dev/vite-plus-core@0.2.2 yaml: ^2.9.0 -packageExtensionsChecksum: sha256-CUzzeefpj3gNFrCKNBhV9FOaniNbrLdKyIhWQyXuaiE= +packageExtensionsChecksum: sha256-k/dT9NFDl5hihRPaoFKeY11hzyutMFs5psfZLFiKJic= patchedDependencies: '@clerk/expo@4.2.0': 72e426f44fc1cde16fc2cbba3d1e96cdca7c6d957faa73d0fe6b43948608a6c1 '@effect/vitest@4.0.0-beta.103': a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b - '@expo/metro-config@56.0.14': 8cb08b5bb7051ed9d2dbe46a2c293c5a1e17f1bd6ddf30de27909e18c921ff46 + '@expo/metro-config@57.0.12': 96f1a75347e6ea02dc4b7034ace815d8ee39e18b8166ebfb573d9e58328f0dc2 '@ff-labs/fff-node@0.9.4': ab9ff544009e1891cfe3930105862d3699007f38922a79f3c98d90018deca368 '@legendapp/list@3.3.5': 064530db83875fa671559a81ae42dc159726dc2dd6ec4c982da44ff7c7a74706 '@pierre/diffs@1.3.0-beta.10': 7ef7cb0cbabb17c15cdb137554068b36f15f6f5265e73fb51452aa3380db91aa '@react-native-menu/menu@2.0.0': c7f66d121c726ade4f5c4e1aed11a691e5711d244c544084e289ac26132a0045 - '@react-native/gradle-plugin@0.85.3': c1b594a16e682d621b6a960926f8ce13fc92edfb397884cfe7fcb0518996a784 '@react-navigation/native-stack@7.17.6': e667c3cef8c78bb9ff4882ee5bd23a432247b843060a9499eb5f07e9e2295552 effect@4.0.0-beta.103: af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6 - expo-modules-jsi@56.0.10: 9170f8074ae4e35a0a086e756c8f815794fd3abe51eac67ca3ba02804225ec1f - react-native-gesture-handler@2.31.2: 808eb26f9e57cf4945efd3985af4d9c764da6f91f4c9764433cc868602bbf4d3 + react-native-gesture-handler@2.32.0: 808eb26f9e57cf4945efd3985af4d9c764da6f91f4c9764433cc868602bbf4d3 react-native-keyboard-controller@1.21.13: 20be72c84d74253acdcfefbc6defe36dc396944f1a44cab2bdd0e3cd572ae008 react-native-nitro-modules@0.35.9: 825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675 - react-native-screens@4.25.2: 7474c207dfb4c474b90901a53afa13a8c869a185518d6fbe907686dc4439056e + react-native-screens@4.26.2: 11566900d0c90514867ede5a2333ba412ab3b5a532ba1955e6306fff8b12de1a importers: @@ -209,10 +209,10 @@ importers: dependencies: '@callstack/liquid-glass': specifier: ^0.7.1 - version: 0.7.1(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + version: 0.7.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) '@clerk/expo': specifier: 4.2.0 - version: 4.2.0(patch_hash=72e426f44fc1cde16fc2cbba3d1e96cdca7c6d957faa73d0fe6b43948608a6c1)(expo-auth-session@56.0.14(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(expo-constants@56.0.18)(expo-crypto@56.0.4(expo@56.0.12))(expo-secure-store@56.0.4(expo@56.0.12))(expo-web-browser@56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)))(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3) + version: 4.2.0(patch_hash=72e426f44fc1cde16fc2cbba3d1e96cdca7c6d957faa73d0fe6b43948608a6c1)(1fcd0592788ddcf326eeeb90d875ed47) '@effect/atom-react': specifier: 4.0.0-beta.103 version: 4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6))(react@19.2.3)(scheduler@0.27.0) @@ -220,14 +220,14 @@ importers: specifier: ^0.4.2 version: 0.4.2 '@expo/metro-runtime': - specifier: ~56.0.15 - version: 56.0.15(@expo/log-box@56.0.13)(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + specifier: ~57.0.14 + version: 57.0.14(@expo/log-box@57.0.4)(expo@57.0.18)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) '@expo/ui': - specifier: ~56.0.18 - version: 56.0.18(3cdc0dde9f93166d952f1e1bd0cb25c0) + specifier: ~57.0.14 + version: 57.0.14(@babel/core@7.29.7)(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(expo@57.0.18)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) '@legendapp/list': specifier: 'catalog:' - version: 3.3.5(patch_hash=064530db83875fa671559a81ae42dc159726dc2dd6ec4c982da44ff7c7a74706)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + version: 3.3.5(patch_hash=064530db83875fa671559a81ae42dc159726dc2dd6ec4c982da44ff7c7a74706)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) '@noble/curves': specifier: 'catalog:' version: 1.9.1 @@ -239,16 +239,16 @@ importers: version: 1.3.0-beta.10(patch_hash=7ef7cb0cbabb17c15cdb137554068b36f15f6f5265e73fb51452aa3380db91aa)(@shikijs/themes@4.2.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@react-native-menu/menu': specifier: ^2.0.0 - version: 2.0.0(patch_hash=c7f66d121c726ade4f5c4e1aed11a691e5711d244c544084e289ac26132a0045)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + version: 2.0.0(patch_hash=c7f66d121c726ade4f5c4e1aed11a691e5711d244c544084e289ac26132a0045)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) '@react-navigation/elements': specifier: 2.9.26 - version: 2.9.26(c6a2ad0e2c930f8e3896e77c3ba11bc4) + version: 2.9.26(c10301b6e0c42fc6434d2b643197a81e) '@react-navigation/native': specifier: 7.3.4 - version: 7.3.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + version: 7.3.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) '@react-navigation/native-stack': specifier: 7.17.6 - version: 7.17.6(patch_hash=e667c3cef8c78bb9ff4882ee5bd23a432247b843060a9499eb5f07e9e2295552)(8effe605a545f8a17acafbaed58f0e86) + version: 7.17.6(patch_hash=e667c3cef8c78bb9ff4882ee5bd23a432247b843060a9499eb5f07e9e2295552)(df02ad16d8d764efad8e903a73894296) '@shikijs/core': specifier: 4.2.0 version: 4.2.0 @@ -269,7 +269,7 @@ importers: version: link:../../packages/contracts '@t3tools/mobile-markdown-text': specifier: file:./modules/t3-markdown-text - version: file:apps/mobile/modules/t3-markdown-text(ed3009b8f2424467288a00b38bef28fe) + version: file:apps/mobile/modules/t3-markdown-text(8819e1ff552fc19b333a2dfaf02d39db) '@t3tools/mobile-review-diff-native': specifier: file:./modules/t3-review-diff version: file:apps/mobile/modules/t3-review-diff @@ -281,7 +281,7 @@ importers: version: link:../../packages/shared '@tabler/icons-react-native': specifier: ^3.44.0 - version: 3.44.0(react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react@19.2.3) + version: 3.44.0(react-native-svg@15.15.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react@19.2.3) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -292,95 +292,95 @@ importers: specifier: 4.0.0-beta.103 version: 4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6) expo: - specifier: ~56.0.12 - version: 56.0.12(8895228379997a2a064f9644cda56ed0) + specifier: ~57.0.18 + version: 57.0.18(f9c992a5d7c53d81398568d3950992dc) expo-asset: - specifier: ~56.0.17 - version: 56.0.17(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3) + specifier: ~57.0.15 + version: 57.0.15(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3) expo-auth-session: - specifier: ~56.0.14 - version: 56.0.14(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + specifier: ~57.0.10 + version: 57.0.10(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) expo-blur: - specifier: ~56.0.3 - version: 56.0.3(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + specifier: ~57.0.2 + version: 57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) expo-build-properties: - specifier: ~56.0.19 - version: 56.0.19(expo@56.0.12) + specifier: ~57.0.15 + version: 57.0.15(expo@57.0.18) expo-camera: - specifier: ~56.0.8 - version: 56.0.8(@types/emscripten@1.41.5)(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + specifier: ~57.0.4 + version: 57.0.4(@types/emscripten@1.41.5)(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) expo-clipboard: - specifier: ~56.0.4 - version: 56.0.4(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + specifier: ~57.0.1 + version: 57.0.1(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) expo-constants: - specifier: ~56.0.18 - version: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) + specifier: 57.0.16 + version: 57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) expo-crypto: - specifier: ~56.0.4 - version: 56.0.4(expo@56.0.12) + specifier: ~57.0.2 + version: 57.0.2(expo@57.0.18) expo-dev-client: - specifier: ~56.0.20 - version: 56.0.20(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) + specifier: ~57.0.16 + version: 57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) expo-device: - specifier: ~56.0.4 - version: 56.0.4(expo@56.0.12) + specifier: ~57.0.1 + version: 57.0.1(expo@57.0.18) expo-file-system: - specifier: ~56.0.8 - version: 56.0.8(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) + specifier: ~57.0.6 + version: 57.0.6(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) expo-font: - specifier: ~56.0.7 - version: 56.0.7(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + specifier: ~57.0.2 + version: 57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) expo-glass-effect: - specifier: ~56.0.4 - version: 56.0.4(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + specifier: ~57.0.1 + version: 57.0.1(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) expo-haptics: - specifier: ~56.0.3 - version: 56.0.3(expo@56.0.12) + specifier: ~57.0.2 + version: 57.0.2(expo@57.0.18) expo-image: - specifier: ~56.0.11 - version: 56.0.11(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + specifier: ~57.0.3 + version: 57.0.3(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) expo-image-picker: - specifier: ~56.0.18 - version: 56.0.18(expo@56.0.12) + specifier: ~57.0.14 + version: 57.0.14(expo@57.0.18) expo-linking: - specifier: ~56.0.14 - version: 56.0.14(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + specifier: ~57.0.8 + version: 57.0.8(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) expo-network: - specifier: ~56.0.5 - version: 56.0.5(expo@56.0.12)(react@19.2.3) + specifier: ~57.0.1 + version: 57.0.1(expo@57.0.18)(react@19.2.3) expo-notifications: - specifier: ~56.0.18 - version: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3) + specifier: ~57.0.15 + version: 57.0.15(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3) expo-paste-input: specifier: ^0.1.15 - version: 0.1.15(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + version: 0.1.15(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) expo-quick-actions: specifier: ^6.0.2 - version: 6.0.2(expo@56.0.12)(typescript@6.0.3) + version: 6.0.2(expo@57.0.18)(typescript@6.0.3) expo-secure-store: - specifier: ~56.0.4 - version: 56.0.4(expo@56.0.12) + specifier: ~57.0.2 + version: 57.0.2(expo@57.0.18) expo-sharing: - specifier: ~56.0.18 - version: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3) + specifier: ~57.0.16 + version: 57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3) expo-splash-screen: - specifier: ~56.0.10 - version: 56.0.10(expo@56.0.12)(typescript@6.0.3) + specifier: ~57.0.8 + version: 57.0.8(expo@57.0.18)(typescript@6.0.3) expo-sqlite: - specifier: ~56.0.5 - version: 56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + specifier: ~57.0.2 + version: 57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) expo-symbols: - specifier: ~56.0.6 - version: 56.0.6(expo-font@56.0.7)(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + specifier: ~57.0.2 + version: 57.0.2(expo-font@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) expo-updates: - specifier: ~56.0.19 - version: 56.0.19(expo-dev-client@56.0.20(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)))(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + specifier: ~57.0.19 + version: 57.0.19(expo-dev-client@57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)))(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) expo-web-browser: - specifier: ~56.0.5 - version: 56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) + specifier: ~57.0.2 + version: 57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) expo-widgets: - specifier: ~56.0.19 - version: 56.0.19(3cdc0dde9f93166d952f1e1bd0cb25c0) + specifier: ~57.0.15 + version: 57.0.15(@babel/core@7.29.7)(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(expo@57.0.18)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) punycode: specifier: ^2.3.1 version: 2.3.1 @@ -391,44 +391,44 @@ importers: specifier: 19.2.3 version: 19.2.3(react@19.2.3) react-native: - specifier: 0.85.3 - version: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + specifier: 0.86.3 + version: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) react-native-gesture-handler: - specifier: ~2.31.1 - version: 2.31.2(patch_hash=808eb26f9e57cf4945efd3985af4d9c764da6f91f4c9764433cc868602bbf4d3)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + specifier: ~2.32.0 + version: 2.32.0(patch_hash=808eb26f9e57cf4945efd3985af4d9c764da6f91f4c9764433cc868602bbf4d3)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) react-native-image-viewing: specifier: ^0.2.2 - version: 0.2.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + version: 0.2.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) react-native-keyboard-controller: specifier: 1.21.13 - version: 1.21.13(patch_hash=20be72c84d74253acdcfefbc6defe36dc396944f1a44cab2bdd0e3cd572ae008)(react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + version: 1.21.13(patch_hash=20be72c84d74253acdcfefbc6defe36dc396944f1a44cab2bdd0e3cd572ae008)(react-native-reanimated@4.5.1(react-native-worklets@0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) react-native-nitro-markdown: specifier: ^0.5.0 - version: 0.5.8(react-native-nitro-modules@0.35.9(patch_hash=825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + version: 0.5.8(react-native-nitro-modules@0.35.9(patch_hash=825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) react-native-nitro-modules: specifier: 0.35.9 - version: 0.35.9(patch_hash=825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + version: 0.35.9(patch_hash=825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) react-native-reanimated: - specifier: 4.3.1 - version: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + specifier: 4.5.1 + version: 4.5.1(react-native-worklets@0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) react-native-safe-area-context: specifier: ~5.7.0 - version: 5.7.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + version: 5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) react-native-screens: - specifier: 4.25.2 - version: 4.25.2(patch_hash=7474c207dfb4c474b90901a53afa13a8c869a185518d6fbe907686dc4439056e)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + specifier: ~4.26.0 + version: 4.26.2(patch_hash=11566900d0c90514867ede5a2333ba412ab3b5a532ba1955e6306fff8b12de1a)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) react-native-shiki-engine: specifier: ^0.3.12 - version: 0.3.12(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + version: 0.3.12(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) react-native-svg: specifier: 15.15.4 - version: 15.15.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + version: 15.15.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) react-native-webview: specifier: ^13.16.1 - version: 13.16.1(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + version: 13.16.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) react-native-worklets: - specifier: 0.8.3 - version: 0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + specifier: 0.10.1 + version: 0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) shiki: specifier: 4.2.0 version: 4.2.0 @@ -437,7 +437,7 @@ importers: version: 3.6.0 uniwind: specifier: ^1.6.2 - version: 1.7.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(tailwindcss@4.3.0) + version: 1.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(tailwindcss@4.3.0) devDependencies: '@effect/vitest': specifier: 4.0.0-beta.103 @@ -449,8 +449,8 @@ importers: specifier: ~19.2.0 version: 19.2.16 babel-preset-expo: - specifier: ~56.0.0 - version: 56.0.14(@babel/core@7.29.7)(@babel/runtime@7.29.7)(expo-widgets@56.0.19)(expo@56.0.12)(react-refresh@0.14.2) + specifier: ~57.0.9 + version: 57.0.9(@babel/core@7.29.7)(@babel/runtime@7.29.7)(expo-widgets@57.0.15)(expo@57.0.18)(react-refresh@0.14.2) tailwindcss: specifier: ^4.0.0 version: 4.3.0 @@ -722,10 +722,10 @@ importers: version: link:../../packages/shared alchemy: specifier: 2.0.0-beta.65 - version: 2.0.0-beta.65(75567d8add6e3362e26fe00f83a97bee) + version: 2.0.0-beta.65(00c448ade6580e73d10ccfe1b32cee97) drizzle-orm: specifier: 1.0.0-rc.4 - version: 1.0.0-rc.4(@cloudflare/workers-types@4.20260604.1)(@effect/sql-d1@4.0.0-beta.101(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6)))(@effect/sql-pg@4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6)))(@effect/sql-sqlite-bun@4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6)))(@libsql/client@0.17.3(bufferutil@4.1.0)(utf-8-validate@6.0.6))(bun-types@1.3.14)(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6))(expo-sqlite@56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(mysql2@3.22.4(@types/node@24.12.4))(pg@8.21.0)(zod@4.4.3) + version: 1.0.0-rc.4(@cloudflare/workers-types@4.20260604.1)(@effect/sql-d1@4.0.0-beta.101(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6)))(@effect/sql-pg@4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6)))(@effect/sql-sqlite-bun@4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6)))(@libsql/client@0.17.3(bufferutil@4.1.0)(utf-8-validate@6.0.6))(bun-types@1.3.14)(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6))(expo-sqlite@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(mysql2@3.22.4(@types/node@24.12.4))(pg@8.21.0)(zod@4.4.3) effect: specifier: 4.0.0-beta.103 version: 4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6) @@ -970,9 +970,6 @@ importers: packages: - '@adobe/css-tools@4.5.0': - resolution: {integrity: sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==} - '@alcalzone/ansi-tokenize@0.2.5': resolution: {integrity: sha512-3NX/MpTdroi0aKz134A6RC2Gb2iXVECN4QaAXnvCIxxIm3C3AVB1mkUe8NaaiyvOpDfsrqWhYtj+Q6a62RrTsw==} engines: {node: '>=18'} @@ -1747,7 +1744,7 @@ packages: expo: '>=54 <58' expo-apple-authentication: '>=7.0.0' expo-auth-session: '>=5' - expo-constants: '>=12' + expo-constants: 57.0.16 expo-crypto: '>=12' expo-local-authentication: '>=13.5.0' expo-secure-store: '>=12.4.0' @@ -2444,12 +2441,12 @@ packages: '@expo-google-fonts/material-symbols@0.4.38': resolution: {integrity: sha512-IJkBtN1o8u9BW5fvSii1MyHPQ7Q0HxbWcVBvOrOzgMLpVtZw7R2w94wBTVR7kZwv3w1JNTESMmLA5Sqn1+Z36A==} - '@expo/cli@56.1.16': - resolution: {integrity: sha512-VBQn0mqAwc67b9Cn0RVXyeodghomAx5xGRhA/bXaQzuxDjMQk0zIOb6pXMZX7yiIwJW66UZt/zQiJNSv6aWJYw==} + '@expo/cli@57.0.20': + resolution: {integrity: sha512-ZjWz7SA5TBTyKq4+aFRUPgMFxmqHtKkDMv6d85J2UAAjdRhkNRf+B80t+rr5IFo2ywuTvyrPRBth4ei4w08olA==} hasBin: true peerDependencies: expo: '*' - expo-router: '*' + expo-router: 57.0.17 react-native: '*' peerDependenciesMeta: expo-router: @@ -2460,20 +2457,20 @@ packages: '@expo/code-signing-certificates@0.0.6': resolution: {integrity: sha512-iNe0puxwBNEcuua9gmTGzq+SuMDa0iATai1FlFTMHJ/vUmKvN/V//drXoLJkVb5i5H3iE/n/qIJxyoBnXouD0w==} - '@expo/config-plugins@56.0.9': - resolution: {integrity: sha512-/6a/S9USwx8OC9tGjHxbviLFiBHyueN3aoNWMLvWDEJoZ1CIVW800ZBzwXq/FYNK2qzcN1LxFmQtzD1zeFQKNA==} + '@expo/config-plugins@57.0.9': + resolution: {integrity: sha512-hHgfL1avkCdEvDSw7IwlKwRYYNgcxzbNNMIk6W6lTkJpY0MajinAfeJUS0J+wPCsjUfGbVqOJM+XhPaO5ulUxg==} - '@expo/config-types@56.0.6': - resolution: {integrity: sha512-4Y6Aum5J4Re5NnxGVofRNe1aDwUBOmWhQYkynZsqzRtX/zEA1ADUeyHXuEckv9YD9djiyT7bKtLt5gKL3mA6VQ==} + '@expo/config-types@57.0.2': + resolution: {integrity: sha512-ewW08OonrcRIsRKIlFvvcmmafE5zemb1ocu3HkNwtVPyRtj2w42pZCAkMIROYpcVBaPnc3mDT9UZDzwXWC3i6g==} - '@expo/config@56.0.9': - resolution: {integrity: sha512-/lqFeWGSrhpKJVP8tTN8LjuoIe8u8q2w7FzBL0C+wHgl+WM8l1qUIEYWy/sMvsG/NbpUIUsDHJRhQvOkU58eIw==} + '@expo/config@57.0.9': + resolution: {integrity: sha512-dmzlKraIFxa7wLwV6K7WzI8jp6QZpW6Mc5mGjLimJUFjzh4uQdYaT3m3plEutM5yxBoBEwqzks7l+I/ljCbxAQ==} '@expo/devcert@1.2.1': resolution: {integrity: sha512-qC4eaxmKMTmJC2ahwyui6ud8f3W60Ss7pMkpBq40Hu3zyiAaugPXnZ24145U7K36qO9UHdZUVxsCvIpz2RYYCA==} - '@expo/devtools@56.0.2': - resolution: {integrity: sha512-ANl4kPdbe0/HQYWkDEN79S6bQhI+i/ZCnPxuC853pPsB4svhINC7Ku9lmGOKPsUUWWnrHg1spkDGQBZ4sD6JxQ==} + '@expo/devtools@57.0.1': + resolution: {integrity: sha512-GyUf+wFNkbttaX0jR7MZa9bm77U0IrLg6d2AjpxdyoXw/w4abHoXG0oFufwLMgP9zLTd5+Ct4X/ffNUTnlzZgg==} peerDependencies: react: '*' react-native: '*' @@ -2483,62 +2480,62 @@ packages: react-native: optional: true - '@expo/dom-webview@56.0.5': - resolution: {integrity: sha512-UIEJxkLg6cHqofKrpWpkn9E6ApxVRtCgZhZkARPr9VV7rBVloJgeroTHs31YgU/JpbI5lLQOnfOlGo54W6C2Ew==} + '@expo/dom-webview@57.0.1': + resolution: {integrity: sha512-lAKsME4SAq+8sf56oN0DX5TBYyruupoRxbWbD2xf9RnKY8y6x8eb9LCE5pxSN0qyWdqnp+0wmyWzDkKboThKAw==} peerDependencies: expo: '*' react: '*' react-native: '*' - '@expo/env@2.3.0': - resolution: {integrity: sha512-9HnnIbzwTTdbwSjNLXTk0fPm9ZwMJ7c1/31tsni8HZ8Q62KzYCyspahH+V365vg5J6lr001DzNwBxVWSaYCQLg==} + '@expo/env@2.4.3': + resolution: {integrity: sha512-M1NXeZCA1mkMkYOyIe7PlyRX0/jqFtMoJgyblnlq/vpCRfmueFT7RnGSQG8uEFDF5WHOFGijAQ3fogPh3/n5Ng==} engines: {node: '>=20.12.0'} - '@expo/expo-modules-macros-plugin@0.2.2': - resolution: {integrity: sha512-4IMzPDIo/VOXREQjsJtliSfqYVZvfzU2SLFS/9sKMWF848S8CHx+e/E+Vf0TcMvpWCCKX5umyqxb13KJJ+YUzg==} + '@expo/expo-modules-macros-plugin@0.6.1': + resolution: {integrity: sha512-cpsLZE4rqkc1Y3eZTkxB98jrqY1YXgetmtxFt8q89jBRmk3quRuk1BZo+VcnCSObZardjg99r1k5xijEMONFGA==} - '@expo/fingerprint@0.19.4': - resolution: {integrity: sha512-PsowRlO8+S7JlO8go7yhNEXp7sqlsWDE2AlCwoss7zH0dcajXFo74Fy0KdXEc4UXK7kKoHD37oDgsZ8aHSLr7A==} + '@expo/fingerprint@0.20.11': + resolution: {integrity: sha512-GC43EcjQwzpzNZISqmhvjKdi+6FTfxnC9ZxOeg6osCkYXJz94j107l0QpPLipg62khD5HAA5G5cUhevffbRC4w==} hasBin: true - '@expo/image-utils@0.10.1': - resolution: {integrity: sha512-YDeefvmYdihS7Wp3ESDUVnOgOSWmj2Cczm9lVNDdm4MqQLdAKm/LPYg83HtFQPfefRlAxyHrQR/O9kIXN9C1Wg==} + '@expo/image-utils@0.11.5': + resolution: {integrity: sha512-KPQBTpmpAfy/Vu9y4wPW808/qtZxjYmyJg8cm2QCPAupp+qEWA3b5zmk0ulOwQ9OgeHxuCPgUqWgkwHFo7UsrQ==} '@expo/image-utils@0.8.14': resolution: {integrity: sha512-5Sn+jG4Cw+shC2wDMXoqSAJnvERbiwzHn05FpWtD5IBflfTIs5gUmjzwiGVyjOdlMSQhgRrw/AymPbmO9h9mpQ==} - '@expo/inline-modules@0.0.12': - resolution: {integrity: sha512-SNIZr/HWfIQPTZBwmukItxpc7ws1SgMUywYq1dnQvDknQDjJcuWAasIRFUjsK15yQ1xb4G5CP7VHtbN3V4lENg==} + '@expo/inline-modules@0.1.7': + resolution: {integrity: sha512-Bz/khd1gIJqDkje7t5ejD5e9jFbm4xEJzWSwRKadRo6gruepbw1xJ3Eb+e58OS8fY1ZNQYjzZbspnuph67sN0g==} - '@expo/json-file@10.2.0': - resolution: {integrity: sha512-S6XzKe3R9GQeHiUPXc3xJjOv2VJhOEwFYf7xdC2z2cUqt3kZJ9mSO877sNQloVdnW/SUCtPY3bexlM7nwq+CAQ==} + '@expo/json-file@11.0.1': + resolution: {integrity: sha512-zxHWj4MKKMAL29ZQSY/Fssx4Thluk40JmuGNaeS078wy/NhlFhnVi+rHHunulE3xJAJ0CM73m8VK2+GkF9eRwQ==} - '@expo/local-build-cache-provider@56.0.8': - resolution: {integrity: sha512-UsuXwpNi57MNhzZ3be4XThc8xW6nzk3Wu37s1+2qcfZGeJcMLKDFfwO6n8YXeIiGlCsOi0Ee1rsTdgjrKt/YJQ==} + '@expo/local-build-cache-provider@57.0.8': + resolution: {integrity: sha512-SEdE0pAQrr90bRh3MNR0ZuwoIBw390cYdFgbn7Vk0Mtm9EHaBfP7kYj+2hXnXZJgOEm3/JMtfoD3rV7rWA9FGg==} - '@expo/log-box@56.0.13': - resolution: {integrity: sha512-QWRZSpWPyjkDLVQio4R7oAzg/Av2MOt/DciFkfjr8qQ3qxGVn1Rt1oHP/80hvcWDcHFV7N6PqpyxRXw6nbxzKQ==} + '@expo/log-box@57.0.4': + resolution: {integrity: sha512-IxwS9s1L2muj8mj8AQSuiy7u8OFJdc02NRFo2me/Tj6DiaeG5SREqmpBE4rQpR2cadqSg5jl8Qab8Cjie616dg==} peerDependencies: - '@expo/dom-webview': ^56.0.5 + '@expo/dom-webview': 57.0.1 expo: '*' react: '*' react-native: '*' - '@expo/metro-config@56.0.14': - resolution: {integrity: sha512-O3CIHruaTJhswPAf/nf3i8QQ3f2jl+mEwSea1eb3khuplabdy/wTQz+JvHN8VGUFyg7JKwUGU1QfO6T3JiSQqA==} + '@expo/metro-config@57.0.12': + resolution: {integrity: sha512-S62Lrq35HZqBFD55423pmWb8PjaiR/W02zQC1uECBmw1vTN8WZaFz4TJ0i21EeJzwfebMb9MLxL8JZ102Z6VbA==} peerDependencies: expo: '*' peerDependenciesMeta: expo: optional: true - '@expo/metro-file-map@56.0.3': - resolution: {integrity: sha512-5OGW3z8LgEYgMJOR7F3pC8llFLkb1fVqwAewbCl6S4Vkha8AFQMwOjT+9Wbka+V4rmpljpGqOnMhF4xZbD961w==} + '@expo/metro-file-map@57.0.2': + resolution: {integrity: sha512-tb50nSIWwKpRufSkGuivOK0FbUxv1Uwqptb0SzFTk0bkmYmcy3gIwnCbOHTfmrQDVndRhPEiu2SYgh9Z0PCvGg==} - '@expo/metro-runtime@56.0.15': - resolution: {integrity: sha512-WIWeVsL6kCSB57oYZdUA4MTkH7c67UFMIjdNoQzKXwxZYwBFE/xL2cGPDC3z8RWt0femzJTVxAVZUOW/hiqRzA==} + '@expo/metro-runtime@57.0.14': + resolution: {integrity: sha512-LVpsfF0QOzlLSKlHYpxgW1cP1NKcYeaoalLO18jYHgqseSveEkb9VOffFpicTQ7AN03odZ4fgkUF+p5YpoY4yw==} peerDependencies: - '@expo/log-box': ^56.0.13 + '@expo/log-box': ^57.0.4 expo: '*' react: '*' react-dom: '*' @@ -2547,21 +2544,21 @@ packages: react-dom: optional: true - '@expo/metro@56.0.0': - resolution: {integrity: sha512-5gIgQHtEpjjvsjKfVtIv23a98LLRV0/y07PDShEwYSytAMlE3FSF8RHXqtHc1sUJL6dn7hnuIBpIbrLXXuVi0A==} + '@expo/metro@56.0.2': + resolution: {integrity: sha512-Ld5AeYMCCDa8bLeWhfuLbZFFjlV3f6ORqyPz2glGh6RltIngMuLf9BTC2yvHFjkKuGxL5SynijmA8xmNNWn5iA==} - '@expo/osascript@2.6.0': - resolution: {integrity: sha512-QvqDBlJXa8CS2vRORJ4wEflY1m0vVI07uSJdIRgBrLxRPBcsrXxrtU7+wXRXMqfq9zLwNP9XbvRsXF2omoDylg==} + '@expo/osascript@2.7.1': + resolution: {integrity: sha512-Zn03EX6In7ts2lPUW2ESUSkEhEWQN1qqsiXjadtZMJOuZRkMiAg1ZQHuvz9DjByDWNJ2pBwAGyrts9lj9k389g==} engines: {node: '>=12'} - '@expo/package-manager@1.12.1': - resolution: {integrity: sha512-fQLiFAcFRWF53mtuLK32SUJQ1ahhrTcBZPZPedYTiUT5ha5FF+UO6bPtCc0Y/hgj0/m3HCGBAuSHjbg2kI9oPQ==} + '@expo/package-manager@1.13.1': + resolution: {integrity: sha512-y/K+CaYYpZpNGZhSX4HyLT/vyIunFjNfyoxNysPBCefeLKI/VCx6f9LNPzrxayr3rCYO5bl9O8H+HRQK265Nkg==} - '@expo/plist@0.7.0': - resolution: {integrity: sha512-vrpryU1GoqSIRNqRB2D3IjXDmzNYfiQpEF6AH/xknlD7eiYmEDt3mb26V7cLcedcPG8PY/1xWHdBXVQJfEAh6Q==} + '@expo/plist@0.8.1': + resolution: {integrity: sha512-3gTReGIUm0oRaMClsAJYxBnVPCl6fVpsl8HS+DTVxDhW4GyVyxg9E/Znm3BvcHtUJ51RJJI14pC1wvrNilCRHw==} - '@expo/prebuild-config@56.0.16': - resolution: {integrity: sha512-ce9ENfPWO4WUWUVQz0OaqL3KYZ7YofP8O35ncnn7CHCaKwQ7BqxcCGJbh+qvP1UjlWeNB3CjHPrXXJ3bnZwlJw==} + '@expo/prebuild-config@57.0.15': + resolution: {integrity: sha512-xTbWHroj0PDmlbqvmU+zF9ZZxveJkiuyiPoeRJYRGruFHebRAWnoTdw5S7d/UCzDBI8ropGGu9g2eb2nMxtvAw==} '@expo/require-utils@55.0.5': resolution: {integrity: sha512-U4K/CQ2VpXuwfNGsN+daKmYOt15hCP8v/pXaYH6eut7kdYZo6SfJ1yr67BIcJ+1Gzzs+QzTxswAZChKpXmceyw==} @@ -2571,23 +2568,23 @@ packages: typescript: optional: true - '@expo/require-utils@56.1.3': - resolution: {integrity: sha512-KyLeOn/zzQSvuPpV5YhB/FPKnpQytno4luN918bGdPDssLBoS3N/0UbC3W0rJAn9kSFu+XpfR81eABRVsSdfgQ==} + '@expo/require-utils@57.0.5': + resolution: {integrity: sha512-kTAXj9lDFEIPMsbAOGCGbjBbMF0oi7CqkYM79KOX0DDD9wSwXmlKL1z2h8OwsrBf7mbOo2DjlRvZu4BEjrIxGw==} peerDependencies: - typescript: ^5.0.0 || ^5.0.0-0 || ^6.0.0 + typescript: ^5.0.0 || ^5.0.0-0 || ^6.0.0 || ^7.0.0 peerDependenciesMeta: typescript: optional: true - '@expo/router-server@56.0.14': - resolution: {integrity: sha512-2UCTtZfcq1ZPgp3wk8/+sq9DvFI9UxrPr1jcEKMAF2DGAJLosnpc8GWNNg2hkjt6SHUOdFHIPxujWPYyho2y3A==} + '@expo/router-server@57.0.8': + resolution: {integrity: sha512-lEPGYoDmh97yyEcY/MFWQsfE7yIgMRnGDcnsBN7B6AiWBFSJIMEcGnO0aYPgY0ZjNWyJDi7Ee8QZRGqB+LhI6w==} peerDependencies: - '@expo/metro-runtime': ^56.0.15 + '@expo/metro-runtime': ^57.0.14 expo: '*' - expo-constants: ^56.0.18 - expo-font: ^56.0.6 - expo-router: '*' - expo-server: ^56.0.5 + expo-constants: 57.0.16 + expo-font: ^57.0.1 + expo-router: 57.0.17 + expo-server: ^57.0.3 react: '*' react-dom: '*' react-server-dom-webpack: ~19.0.1 || ~19.1.2 || ~19.2.1 @@ -2601,8 +2598,8 @@ packages: react-server-dom-webpack: optional: true - '@expo/schema-utils@56.0.1': - resolution: {integrity: sha512-CZ/+mYbQmWeOnkCGlWy9K+lFxbJSMFY7+TqBZcKzBSTU5Q7IGRvn/sOG3TdNjIdLPmbA8xe7R/c3UUQ28R9i9w==} + '@expo/schema-utils@57.0.2': + resolution: {integrity: sha512-fMu/jyN0l1Wzv7XkeWR4IYCx1M8ryui3FdBNGrWwbRgJ7EhxXxK8E2jxP2W3pbgUwUY0V3hG8+GyfCZwny+Lxw==} '@expo/sdk-runtime-versions@1.0.0': resolution: {integrity: sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==} @@ -2614,23 +2611,20 @@ packages: '@expo/sudo-prompt@9.3.2': resolution: {integrity: sha512-HHQigo3rQWKMDzYDLkubN5WQOYXJJE2eNqIQC2axC2iO3mHdwnIR7FgZVvHWtBwAdzBgAP0ECp8KqS8TiMKvgw==} - '@expo/ui@56.0.18': - resolution: {integrity: sha512-2XgH5obigGtXm8zlb/V3g87NSiIcBcJ1xoQOEQYPoExL1DCNsHzaIecTh1XG/f/45ardo4OZNJwpbfYJ9X3qrQ==} + '@expo/ui@57.0.14': + resolution: {integrity: sha512-m8Z5dCplkOOQ70lu/xfB67qhk00Muw4U1T9frHBIW3LxxJeJZQ+jOmV6vCk6O6zVgoG/ib1et7PeX6etxI4Rsw==} peerDependencies: '@babel/core': '*' expo: '*' react: '*' react-dom: '*' react-native: '*' - react-native-reanimated: '*' react-native-worklets: '*' peerDependenciesMeta: '@babel/core': optional: true react-dom: optional: true - react-native-reanimated: - optional: true react-native-worklets: optional: true @@ -3622,19 +3616,6 @@ packages: '@radix-ui/primitive@1.1.3': resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} - '@radix-ui/react-collection@1.1.7': - resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-compose-refs@1.1.2': resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} peerDependencies: @@ -3666,15 +3647,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-direction@1.1.1': - resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-dismissable-layer@1.1.11': resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} peerDependencies: @@ -3758,19 +3730,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-roving-focus@1.1.11': - resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-slot@1.2.3': resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} peerDependencies: @@ -3780,28 +3739,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-slot@1.2.4': - resolution: {integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-tabs@1.1.13': - resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-use-callback-ref@1.1.1': resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} peerDependencies: @@ -3863,78 +3800,78 @@ packages: react: '*' react-native: '*' - '@react-native/assets-registry@0.85.3': - resolution: {integrity: sha512-u9ZiYP23vA2IFtdFQFmetzSmk6SM0xgKIoiOsr1hXNHjHaLhOm+/Ph1ud57wX6+Dbwdzx8coJgnzSKL3W21PCg==} + '@react-native/assets-registry@0.86.3': + resolution: {integrity: sha512-TDhgCZA4wjJg84d5A9swiOQYPIWSKEEVdg9IwMFZDupQzW/F3QoLUrfAJOcalgqTDA9/buTB8awhE3Whwg6u9Q==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - '@react-native/babel-plugin-codegen@0.85.3': - resolution: {integrity: sha512-Wc94zGfeFG8Njf9SHMPfYZP04kjigkOps6F1TYTvd7ZVXuGxqseCDgxc50LWcOhOCLypI9n3oVVqz81C3p44ZA==} + '@react-native/babel-plugin-codegen@0.86.3': + resolution: {integrity: sha512-O6Xza4JBGPIU8J7YbKTyBoYL4thpy8jMW/oaLDWdAyOwYHKIjK47pAL5HUEbOe2bWz2PEKjbYRF2ApkJv1ottQ==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - '@react-native/babel-preset@0.85.3': - resolution: {integrity: sha512-fD7fxEhkJB/aF57tWoXjaAWpklfrExYZS3k6aXPP3BQ77DZY7gvf/b7dbirwjID6NVnP1JDRJyTuPBGr0K/vlw==} + '@react-native/babel-preset@0.86.3': + resolution: {integrity: sha512-/eqs/Hy9RZRcjdcs4wj3Cqmxvtb3NM5g+Uuh1RIvsjynMO8PRsrVWWLWgBcZL/jYUo+ogXd2NFB0W8L5Bg89xw==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} peerDependencies: '@babel/core': '*' - '@react-native/codegen@0.85.3': - resolution: {integrity: sha512-/JkS1lGLyzBWP1FbgDwaqEf7qShIC6pUC1M0a/YMAd/v4iqR24MRkQWe7jkYvcBQ2LpEhs5NGE9InhxSv21zCA==} + '@react-native/codegen@0.86.3': + resolution: {integrity: sha512-Ux4jHi0fh+bdtVEcL0gaPLbY56V+SvFUDl/8sRAE1jdb4k+o7fT/4Nc29yz4X+qfjstkSqObQTMBGhdzxH9JvA==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} peerDependencies: '@babel/core': '*' - '@react-native/community-cli-plugin@0.85.3': - resolution: {integrity: sha512-fs85dmbIqNmtzEixDb0g+q6R3Vt4H9eAt8/inIZdDKfjN76+sUJA2r1nxODQ76bU23MrIbz8sI7KFBPaWk/zQw==} + '@react-native/community-cli-plugin@0.86.3': + resolution: {integrity: sha512-qSDL9LQc5mZSZPNczT95WU9YQuPzxBklgON9vLhhqfI0yWIwKInqFx88dQ/uiEXBtf0yossthaQIqA4Ml6bF6g==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} peerDependencies: '@react-native-community/cli': '*' - '@react-native/metro-config': 0.85.3 + '@react-native/metro-config': 0.86.3 peerDependenciesMeta: '@react-native-community/cli': optional: true '@react-native/metro-config': optional: true - '@react-native/debugger-frontend@0.85.3': - resolution: {integrity: sha512-uAu7rM5o/Np1zgp6fi5zM1sP1aB8DcS7DdOLcj/TkSutOAjkMqqd2lWt1/+3S7qXexRHVK5XcP+o3VXo4L/V0A==} + '@react-native/debugger-frontend@0.86.3': + resolution: {integrity: sha512-TQmeofQ0PcuylhhlleOeuzHYZfbrgm3gayXzowqUEzgRisTm1D40/J3ggqs7XkQi5HP5ZA3n8dHmKL9vIzPcsw==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - '@react-native/debugger-shell@0.85.3': - resolution: {integrity: sha512-/jRAaT9boiCttIcEwS02WPwYkUihqsjSaK/TMtHz05vT6uMgac9PaQt5kzBQLIABv5aEIa5gtrMmKVz49MjkjQ==} + '@react-native/debugger-shell@0.86.3': + resolution: {integrity: sha512-O4ds+J7xZfxkbih9T+cAGegBdvKSPKYJm/lDgC9CpEjFMkmzWTpVLU3Qsv9sqZuo58z+sGhIcJfPsCFFWHpqbQ==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - '@react-native/dev-middleware@0.85.3': - resolution: {integrity: sha512-JYzBiT4A8w+KQt+dOD5v+ti+tDrGoPnsSTuApq3Ls4RB5sfWbDlYMyz3dbc8qBIHz9tv0sQ5+eOu6Xwqzr5AQA==} + '@react-native/dev-middleware@0.86.3': + resolution: {integrity: sha512-LiEPTqTg/63bYUnrPyHLfjTDCNhA/+CUqI1+DsA9tYyewtSbULd5awsva6SgE10I+2iMhgKXS3ymkhU/kSCrGA==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - '@react-native/gradle-plugin@0.85.3': - resolution: {integrity: sha512-39dY2j50Q1pntejzwt3XL7vwXtrj8jcIfHq6E+gyu3jzYxZJVvMkMutQ39vSg6zinIQOX36oQDhidXUbCXzgoA==} + '@react-native/gradle-plugin@0.86.3': + resolution: {integrity: sha512-lxmx0GqLEWRIpZfpYFXlYVIs3ENQwaW6Vmp6oi29l2GoQJ1wZfFZRdMimDWlGEk8LKfHar3QH3iaPMkTcK9lEQ==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - '@react-native/js-polyfills@0.85.3': - resolution: {integrity: sha512-U2+aMshIXf1uFn77tpBb/xhHWB9vkVrMpt7kkucAugF8hJKYTDGB587X7WwelHduK2KBfhl4giSv0rzZGoef9A==} + '@react-native/js-polyfills@0.86.3': + resolution: {integrity: sha512-eYIJ0es967+tePBFQDnl/gidVFxLns3fnbiK6rxscQrGodvuUO6hwxpQnfNynJ8MjbbndImXihXjcnJdc7SzJg==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - '@react-native/metro-babel-transformer@0.85.3': - resolution: {integrity: sha512-omuKq+r7jM4XvCMIlNMPP7Up3SyB8o5EAdZtF7YXniKyq7UOMBqhYHFqgsdOXr0lT+3ADf7VCJG3sb82jlBrrQ==} + '@react-native/metro-babel-transformer@0.86.3': + resolution: {integrity: sha512-0nlwVkG0uT9o72nrGTKUz/IqDnCkM4zE0ihe4r+OJcxH93yBdDm58AXJ3EXZeSjv3osHEFXU7ceajdZiS34mTw==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} peerDependencies: '@babel/core': '*' - '@react-native/metro-config@0.85.3': - resolution: {integrity: sha512-sVo6HepUmCcpdfozEf91lA0FjpLNNZYu/Zi9FiYiAQTK8pzATXDVTqhvdxpFrQn435p5eUTSbllvbH/KN+bnyA==} + '@react-native/metro-config@0.86.3': + resolution: {integrity: sha512-qdzDMepV2xdUhsO4XC7idnnbt8K6+Hd59AjeK9y4KS86fxSQq5oL0TAbqUuajDGR7beNQoYTuS6AowN/zP0oaQ==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - '@react-native/normalize-colors@0.85.3': - resolution: {integrity: sha512-hj0PScZEhIbcOvQV5yMKX3ha4XEIOy/SVE1Rrpp0beW0dpNLOgSC7KDxGewmDnIHK9YdQUXGY9eMEfShUMIaZw==} + '@react-native/normalize-colors@0.86.3': + resolution: {integrity: sha512-Cv3CDkprb67GrzuaS9BGbBJC/6G4lIw3nyKOHRKTqTTum4bn37y5+R0Z04L8mcbQN85eEohNrRwb7IOM4j6uvg==} - '@react-native/virtualized-lists@0.85.3': - resolution: {integrity: sha512-dsCjI//OIPEUJMyNHp4l7zNLVjCx7bcaRUceOCkU+IB17hkbtbGWvi7HjGFSzy7FJGmS/MOlcfpb72xXiy1Oig==} + '@react-native/virtualized-lists@0.86.3': + resolution: {integrity: sha512-1j44NEyNn05Ut40vHAmoSWbsIcybFkMAOBTwQt1PrESyfSS+qBoyU1LGIogNva0VIa0rQyEC5PzbA7R4/7Nhyw==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} peerDependencies: '@types/react': ^19.2.0 react: '*' - react-native: 0.85.3 + react-native: 0.86.3 peerDependenciesMeta: '@types/react': optional: true @@ -4747,10 +4684,6 @@ packages: resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} engines: {node: '>=18'} - '@testing-library/jest-dom@6.9.1': - resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==} - engines: {node: '>=14', npm: '>=6', yarn: '>=1'} - '@testing-library/user-event@14.6.1': resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} engines: {node: '>=12', npm: '>=6'} @@ -5273,6 +5206,11 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} + agent-cli-detector@0.1.6: + resolution: {integrity: sha512-vKrPeEVN3upDF3GjWxsWBbwQgMtNJ8VB1cduPvK3svmmz4ENpS7yaPxbogsbe3w+xp9xp2Cu+0Ar41rjAR4+lA==} + engines: {node: '>=18.18'} + hasBin: true + agent-install@0.0.5: resolution: {integrity: sha512-nHlms9BkP8ZiY79HrwCGiA2DcNaXrAaJrCM/BEqQ7MEsSKyCk+2A76xPGylIfASZSZE0SaU3T0bNSg4rBPIJAQ==} hasBin: true @@ -5511,33 +5449,21 @@ packages: babel-plugin-react-native-web@0.21.2: resolution: {integrity: sha512-SPD0J6qjJn8231i0HZhlAGH6NORe+QvRSQM2mwQEzJ2Fb3E4ruWTiiicPlHjmeWShDXLcvoorOCXjeR7k/lyWA==} - babel-plugin-syntax-hermes-parser@0.33.3: - resolution: {integrity: sha512-/Z9xYdaJ1lC0pT9do6TqCqhOSLfZ5Ot8D5za1p+feEfWYupCOfGbhhEXN9r2ZgJtDNUNRw/Z+T2CvAGKBqtqWA==} + babel-plugin-syntax-hermes-parser@0.36.0: + resolution: {integrity: sha512-LhD0xdoedDw7ansQgXbB2DADLZIK/LRXuWNBPuVzMc5S2WK5GyT89tCM+cQzxFGO0mGyLK6D5TrVOJJzAoDy8Q==} + + babel-plugin-syntax-hermes-parser@0.36.1: + resolution: {integrity: sha512-ycduwJbvdvIMmVvlAZqGggS+pm5Eu4Bk9pcV9Sm2Z4PJNRVsKkv0g7vHj+LeuC1gHTeF67sJXFOq61IlqCa2hA==} babel-plugin-transform-flow-enums@0.0.2: resolution: {integrity: sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==} - babel-preset-expo@56.0.14: - resolution: {integrity: sha512-+JKVMYf3HajO3tPRA9DlKd/VhZOPTHyTzUo2yZajfMAoQ3l5VEdGVxm2MzX4DXMNKXwsC8GOeTRx7CrO/5dBDA==} + babel-preset-expo@57.0.9: + resolution: {integrity: sha512-T19biGOBTnMp161PyBqWOoSIEeZug8/EjtuUdVob8JPQKZMTalHUQaQt+qtQQE7XsEkZJ6erb3k0CohneTFzQg==} peerDependencies: '@babel/runtime': ^7.20.0 expo: '*' - expo-widgets: ^56.0.16 - react-refresh: '>=0.14.0 <1.0.0' - peerDependenciesMeta: - '@babel/runtime': - optional: true - expo: - optional: true - expo-widgets: - optional: true - - babel-preset-expo@56.0.15: - resolution: {integrity: sha512-0MqbQoM6nBUbKvgu2xJ4VixZnUTGTq3HB2WwvOikdO4CiPxbQ+wGA25fOoHHSni5iEFW39wy6y1ookTWlq3wVw==} - peerDependencies: - '@babel/runtime': ^7.20.0 - expo: '*' - expo-widgets: ^56.0.18 + expo-widgets: ^57.0.13 react-refresh: '>=0.14.0 <1.0.0' peerDependenciesMeta: '@babel/runtime': @@ -5809,9 +5735,6 @@ packages: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} - client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -6004,9 +5927,6 @@ packages: resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} engines: {node: '>= 6'} - css.escape@1.5.1: - resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} - csso@5.0.5: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} @@ -6143,9 +6063,6 @@ packages: dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} - dom-accessibility-api@0.6.3: - resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} - dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} @@ -6511,38 +6428,38 @@ packages: resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} engines: {node: '>=12.0.0'} - expo-application@56.0.3: - resolution: {integrity: sha512-DdGGPlMuM6cSTeKhbvh6OeLr2O/+EI5BHKYrD+Do8sJPYgLwzGrgESELfyjJCpEhFzT+TgKIdmLmWXhNUQnHiw==} + expo-application@57.0.2: + resolution: {integrity: sha512-q31YwcXyymviAmdrtDfAg3Dld4VMxLCNAfgMHip7vZpPX4lzF/AfwsywqBJUAjQnJknzaNAkzqvMVjO5XmKYDA==} peerDependencies: expo: '*' - expo-asset@56.0.17: - resolution: {integrity: sha512-GFN5j+8SPkyv0nfsiFHewmdB/D0tL237TsBE/gSfFOFy/J3a52py7IulcSqkA3sQE/u/UlD5BmvP5ssS4//nUg==} + expo-asset@57.0.15: + resolution: {integrity: sha512-ZoiUftQb1Nn1jvL6l1kZoUXvgRCx57tMQYxSsp+g4ZvY+jgVWp/THruXOtPtZVdC/WWZxPUTct53bfAm2EPDAQ==} peerDependencies: expo: '*' react: '*' react-native: '*' - expo-auth-session@56.0.14: - resolution: {integrity: sha512-b6URDBKXVWBjHwypnbCPW6A3PrwYyFqzLXtTrrpTGpmDlsxk7xuz6wIA77sBNziz3hMxt11Nu70iY0fJZYT4jA==} + expo-auth-session@57.0.10: + resolution: {integrity: sha512-i1RY93LouEgal2e/Ly1r2Ytwed7/y6i4AUShVj4Gg49h/Okf8QpZO7XylwL43IHfKRrKkqapRDEN8mWe7z/HgA==} peerDependencies: react: '*' react-native: '*' - expo-blur@56.0.3: - resolution: {integrity: sha512-KDDtrpWc2tYlm1WCPaOgBtv+YEGqe5ELheFPIgSNgHt28NQUDcfBcFsA9Us2StDh6osmSD6NbKxOt5bU6PcDbQ==} + expo-blur@57.0.2: + resolution: {integrity: sha512-Aoud8H8lmlNkbRufyvRLefmGFELdBf1n5Te/Xm+Zx8ORINH+aXL+gKb5mbftFSha860+I7pMArz77TBYz8HDVg==} peerDependencies: expo: '*' react: '*' react-native: '*' - expo-build-properties@56.0.19: - resolution: {integrity: sha512-InoviXcxWosNp4cC7L3SWoiY99Xr2HdgN+LYHb6mUm/BBVxy1mIMrZR+3PJ2gwDZzW6EJNDz8ioASWGHBTmzpA==} + expo-build-properties@57.0.15: + resolution: {integrity: sha512-qZe9pnxlBpHT7SSNDR2a3C+P34xv67Ep9I0Erh+3xCczGlokyRd4pu9h0PrBdsVlr1d0QREQ1Do/+IgrIWkQQA==} peerDependencies: expo: '*' - expo-camera@56.0.8: - resolution: {integrity: sha512-UDOpUUMisFRmCv1XQV1MJCKGAH2CsIC1Rs6P9Bbc6JLVmbxEKAd5dK68y6cScOdWURxVfJ0PRcjYnSuc8ayyIQ==} + expo-camera@57.0.4: + resolution: {integrity: sha512-MqbbQ63O+cA8JbK3lfFHiD0f2jv8jB+EG/ILK6f5xnOPV9IR37yaG5+lGtRZNoOeYBzGypyOi17USItleMyuGw==} peerDependencies: expo: '*' react: '*' @@ -6552,91 +6469,91 @@ packages: react-native-web: optional: true - expo-clipboard@56.0.4: - resolution: {integrity: sha512-qb4DYlkiowHYHaUYVT2FN9nk/nI1xShXOUYsI7J9dVpQCOHcGFjCBPX1VAvEW4Ye4/Aagd6IuhOVAq/+scBOiA==} + expo-clipboard@57.0.1: + resolution: {integrity: sha512-HWICri4+1ao7S6QEfcorxVumXDiDnx1guGGewjZgGJWLGxFYs0RgH8ujBs+lkTzBkMmlwADaWSlaesR+nDJt5Q==} peerDependencies: expo: '*' react: '*' react-native: '*' - expo-constants@56.0.18: - resolution: {integrity: sha512-8AMtbDGl/WVPnWlmbpGmvcdnNCy9E4PFnwdVwj600vljkMDPSxcAcjw8GVXEPk3PpZ+ngTqsrkltWyj0UKYAxw==} + expo-constants@57.0.16: + resolution: {integrity: sha512-HG3yJjGZo2BPTo2F1sBoxdJZRwX7d9C554EhKn8m12K62pxGolCsvPSoh/lQf95OEP9vO34wwXB2C3QFs0KG0g==} peerDependencies: expo: '*' react-native: '*' - expo-crypto@56.0.4: - resolution: {integrity: sha512-fRNEhoXRXgAWBpe3/hq5X+KXTit3OZqdiAGts1YvNEUHQb+H5591mpPac0Yw+sZg9pXcrjRnzo5AxvZaENpc7g==} + expo-crypto@57.0.2: + resolution: {integrity: sha512-OGLvHK7Hb7qsONMWGB9pJw3n+iY4OnZQmM/KwQEHRMrrOmNg0Lxj9+tp9bj46aAMMzXx0FTVA2jUKoplpXPnkA==} peerDependencies: expo: '*' - expo-dev-client@56.0.20: - resolution: {integrity: sha512-KebW4r8HhIiRrPzs6ZqVhp/so8buyglAO1h4No0Ibr5C2XRnlIoGWCN4zC6rW7IsI3iKUXcofLAQV9OjoxjiwQ==} + expo-dev-client@57.0.16: + resolution: {integrity: sha512-Txss9sgzEFI0E+4I34E76vPiukeVDHnqCj0ZXy8SDijVM31/P6MCNniVbEZk7MBPQclD0aopfuaCFtkV8+r1sw==} peerDependencies: expo: '*' - expo-dev-launcher@56.0.20: - resolution: {integrity: sha512-cTuC3GkPl9CTwO3CKnVmEm9qoQ0WairhwvTh6qMlg+zr/QU/tdiU++uDBX67hf9+FuxQOkWGp5khFNosT+0cIg==} + expo-dev-launcher@57.0.16: + resolution: {integrity: sha512-jaBr6q4A5js/r465m2mRxN8A87YOi8I6PiIt8XIt4qfQWDgw6hqGovaF1AVFGT1Z5jxkjtgK8WNz/rAeypjqPQ==} peerDependencies: expo: '*' react-native: '*' - expo-dev-menu-interface@56.0.1: - resolution: {integrity: sha512-odATx0ZL/Kis10sKSBiKiGQxAB6coSi/KQtKcMhnQVNno6FkRh5/4e5BqcEvpq2rNMTiQp4ytNAQHtdwbPXvGA==} + expo-dev-menu-interface@57.0.0: + resolution: {integrity: sha512-F47VdzOHYc19FhI/jBgctpO8a5UskTIxG6a1E5t3W5gF8VImuvBQffdXXfLHhsuCl7dS3v3U0R45cleeVXO1Zg==} peerDependencies: expo: '*' - expo-dev-menu@56.0.17: - resolution: {integrity: sha512-OofRkOOZnaDriSav3JDN4NP2lsLt2eOa/Ryptr5nMD62SwnFyK4R6n6PkPVaDU3LSsZqndAJHmN6inS+oziayQ==} + expo-dev-menu@57.0.16: + resolution: {integrity: sha512-KzMHtAmnr0GqyU6MCrKLzIo/AfOjcToGhzK+pFeXlcqSPOrPJbTGlZqQ3E1o2G2jZMs+M1XvXh/VgnRyJUaRGw==} peerDependencies: expo: '*' react-native: '*' - expo-device@56.0.4: - resolution: {integrity: sha512-ucVcGPkvBrl2QHuy7XcYex2Y6BETvJ6TREutZrwLGUDnlvbpKS8KfQoNZOpvkyo5Nmm9RrasYQ0CrXmBHho2mg==} + expo-device@57.0.1: + resolution: {integrity: sha512-jyEMDUticH+dhcL3GHa2aiifOvGXJsmb3oVT2R2q4i8bN7Bddy61+NkpMmuS2VAZrvoLQwf0TJJ/1vi1ukvutA==} peerDependencies: expo: '*' - expo-eas-client@56.0.1: - resolution: {integrity: sha512-r8h0ZIExacCrSRgY+ARfhMvFqosLHLJt1L7jyhvabfr1DN/ZDKDsYbovss2tzkpEUZGxZ3BPcB5epCwUsBBdOA==} + expo-eas-client@57.0.2: + resolution: {integrity: sha512-EfFiqUr0o9TvTOgMbqDiV1oIdG/d7kirhqtwa7roGmm9wF+CpXUz20d9YGzO6KzJWUYgdUgu4B6Ocv0jNJUdnQ==} - expo-file-system@56.0.8: - resolution: {integrity: sha512-NrH41/8snGIBSbYicwVLB4txPdgCATd7ZYhMAGS3YJZ9GbnduhlAoV4/YCbGayjrbpE9bJb/6wegPL/zmvRMnQ==} + expo-file-system@57.0.6: + resolution: {integrity: sha512-pm8PMYEW6BnVOCBJ7df9FcDmQtE1tqImuYphlfYe1ipQRLYtdCayRczJcbKIsnB3mqEyp4gC2gWmMbsAsAOjVg==} peerDependencies: expo: '*' react-native: '*' - expo-font@56.0.7: - resolution: {integrity: sha512-hpU/vRwPzsby9lPGkA4blDqLIIXYzoWnCZHr6PxvcWbY/uPObAiyhh6q+e0WYsB65SthK+PLH95jEnVag7fwEg==} + expo-font@57.0.2: + resolution: {integrity: sha512-eWR0CAdysgVqg8VewJ8b5wKh1pa6C8YShIEU3SP0+hlSqOk4djUwuJjn3P04KHVzL3hws9FrUuPxCNmd4TGung==} peerDependencies: expo: '*' react: '*' react-native: '*' - expo-glass-effect@56.0.4: - resolution: {integrity: sha512-xI9rXtDwi7RW82uAlfyaXO6+k21ApWJ2tHAWYqPr/FjfmZbKsgNJ4Q0iZzGPCwboqjTGxaRZ61SZxBl8hDt5iA==} + expo-glass-effect@57.0.1: + resolution: {integrity: sha512-m/n8maxqNcHk6ZDhuqXBfD5Kt1Iz3M8xykVgdB0iSCIXvF70IqWXmQhX8Psswhrp8eZ+3r0mAD0Jh/2gFA3QaA==} peerDependencies: expo: '*' react: '*' react-native: '*' - expo-haptics@56.0.3: - resolution: {integrity: sha512-ycoahZJnR9tWAVh/0mJYxbETtHRYaWjiWS8cHlP6aDGU6Q6Y8rZ5NKsuBwWw6HR2Pe30mfVFgbF2HrBR6gtYmw==} + expo-haptics@57.0.2: + resolution: {integrity: sha512-vPths6zTxxaGaemC7D1GKbw1iOnOAAL5oAcCFVSgVNWnuLCBefL1LkhRBaJsepiMXRh2y3vwPiXkPaf6d16blA==} peerDependencies: expo: '*' - expo-image-loader@56.0.3: - resolution: {integrity: sha512-JgUo4fUeU1ZC+z8iBFj8v7yoGQnZrLbOVPyNE+DWVrld55F2F6R1ck+rmdm/8TNWLz1LhNQfD7c3XYP1ZikxXA==} + expo-image-loader@57.0.1: + resolution: {integrity: sha512-uhrZKLT/cTl2mXyR28kPpVkS5O+PK9N1QA/07IFM4f5T4g0lTW1JHT3NEWwEEsGFldPmVX4j7LwUVVZxE+woug==} peerDependencies: expo: '*' - expo-image-picker@56.0.18: - resolution: {integrity: sha512-sCjQ8M27bhGUv2vUavIE+uWdYo79b2D7Q5h9B66BSDZ+Rd8YyLVSf7vYGfIzQ7nMVoENZ6c4xo/JiDkEeQ9iTg==} + expo-image-picker@57.0.14: + resolution: {integrity: sha512-NK9XBQqOtscbB/uRts1Gm7Oki6odMN3FQPWD6fSKmNUfKM69O6kcgU25lEXFTSLZ7sLl+AopHa2X0uILd8rjaQ==} peerDependencies: expo: '*' - expo-image@56.0.11: - resolution: {integrity: sha512-k2xwxGk14xi6zxmEGAU4rUTb1lK5qf0y0Qb8+Jaggnul0KaJJxcq9qvyDp9iyJBW35cp9isONAUnNtIiooZ/Pw==} + expo-image@57.0.3: + resolution: {integrity: sha512-EYfV8tIQxXLQPHhgZxc+bESUn2NcVw1U0RM28qqFeFfHyD1sBpIYJC2JTy24OtfBowYVoUyTvgf2ykWydiZVCw==} peerDependencies: expo: '*' react: '*' @@ -6646,53 +6563,53 @@ packages: react-native-web: optional: true - expo-json-utils@56.0.0: - resolution: {integrity: sha512-lUqyv9aIGDbYTQ5Nux2FnH2/Dz0w5uJ8Pr080eS0StXi2jr5OmuMNErpzUnpfnYOU55xKotd4AHv68PfV/ludg==} + expo-json-utils@57.0.1: + resolution: {integrity: sha512-cgTe1NqzQdYs/WN+3nIY5IZg8s0pb0xaTUbhYvxQDn137GbwRfHoGM2se3m3Vsl4Qu+B9G4RPEK5WJDEU2Do7g==} - expo-keep-awake@56.0.3: - resolution: {integrity: sha512-CLMJXtEiMKknD3Rpm8CRwE6ZJUzu2yCEmRk1sgfHAJ1zIbuEWY3dpPDubtsnuzWm+2k6Sru+yaFbYsvPWmTiBA==} + expo-keep-awake@57.0.1: + resolution: {integrity: sha512-28lkFImeXTS+bhAjuCFV7w7tW5bXg27BJVrxv+nC/nyYa86qEa0oFeHwqol6ha5k4pdVDQgBF09GM4A1k76Ssg==} peerDependencies: expo: '*' react: '*' - expo-linking@56.0.14: - resolution: {integrity: sha512-IvVQHWC+Cj4fK5qD3iEVYqpU2a4rLW0IpAAlGJ4MH+H1fyZiHh3eN6qg2WmoclOEPfYATSuEa+dQT6wfgVpXlQ==} + expo-linking@57.0.8: + resolution: {integrity: sha512-gv0ZNaF7tILbcvX8xinNbQr6GIGQStxeUAJseweP+LjC9ped7Wl6EeyIMBlDR83U6Da+8drVeqBQSMvwAXgytA==} peerDependencies: react: '*' react-native: '*' - expo-manifests@56.0.4: - resolution: {integrity: sha512-Fokawl2UkiExIF0bqGoblRFA8lYpROVD+EpvDwSW4LgqQyPwNua1gLSgHZjdl5GsVugfRMMWE3LHaibDyX93hw==} + expo-manifests@57.0.1: + resolution: {integrity: sha512-qB/mDG2dYdl+EvUeQuqP8KFYCFgFCQjJYdWIHo8SFBgDzMYmdF286DFY2M1M9Okr99wkb5M4tgA3aCcwv3aEQA==} peerDependencies: expo: '*' - expo-modules-autolinking@56.0.16: - resolution: {integrity: sha512-9JnL4N46P8ubDpDIfWolDn7nxU2j1rY67xY/dNVuyH0m+HG+r/JI16VYtjIf4COpZtEuFo4D3h3MBeFzGucMnw==} + expo-modules-autolinking@57.0.12: + resolution: {integrity: sha512-Q8KAlq37nLKsQ+HsS9NpQVpd5jCgqtu694TDUNHBUBpV9ViD82mRBh8Uug/h68RG9xnLS+kuL4nYaCuFRghHjg==} hasBin: true - expo-modules-core@56.0.17: - resolution: {integrity: sha512-5J8whnT7Ccp+BrFClLmpF76omBqn95VZExroTm01Dgjm4vpty1Rb7U3we+ZUceNHtRd07Lw30u7FNfDgIhEbRQ==} + expo-modules-core@57.0.14: + resolution: {integrity: sha512-Cg3aQnVsQhZcMOF/RFgPGzMuhIak5W9eR9ecwmFSeQ813r4/49ut6RMA6PqUuUKuPCUIRqnBAHfSyTm1W9nfzg==} peerDependencies: react: '*' react-native: '*' - react-native-worklets: ^0.7.4 || ^0.8.0 + react-native-worklets: ^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0 peerDependenciesMeta: react-native-worklets: optional: true - expo-modules-jsi@56.0.10: - resolution: {integrity: sha512-fHZcFpYO/o62GYa6fJyAQJZcAShzhoN0iMMDzbr7vD3ewET6e1vAlTonbEakN9F0VHEgBFJ4NREy87uwVcpCuA==} + expo-modules-jsi@57.0.6: + resolution: {integrity: sha512-WK0xFEe0FdZTCLCdfXK+HVNYfAmEbA6goecRxqjr0gh3XYRKAr9tikxqcM0ItLQoEPKntscPZhWcPLGvr97Tfw==} peerDependencies: react-native: '*' - expo-network@56.0.5: - resolution: {integrity: sha512-zmuyO95jayDY9jyUfOAlNp9XXJrJaAOkBXXLy0TS/nh2kppj7CHirRPkQ/tf0rsxhIL3AEd9nsRTiPtNsGT9Lw==} + expo-network@57.0.1: + resolution: {integrity: sha512-ndg+FbDDlz6XTpQ6aVuVgyvrYQwMkpcUAvZIXbwrGBbLTSWNzYC/gawYu1BAeDN7O6JTGY98GBVJBov/JH7LgQ==} peerDependencies: expo: '*' react: '*' - expo-notifications@56.0.18: - resolution: {integrity: sha512-HHnrwyCLC5srFojcHYS2KskbNroy9o2fwPKdyhjrdjjrBu4sNRKm4LepcuZjDy98cZKEm89WIPW8O45vut8Rgw==} + expo-notifications@57.0.15: + resolution: {integrity: sha512-H91z4WSFukSQP3dThgh6PCPFrT6VHeR+J2f7CuCOE72JV7YEGcBCir103QY58ocKsdgkodQpnkTU2m8LTHkWLg==} peerDependencies: expo: '*' react: '*' @@ -6710,84 +6627,52 @@ packages: peerDependencies: expo: '*' - expo-router@56.2.11: - resolution: {integrity: sha512-08DBTrKv3QanOc9u1JNxSEChW9c/qNFbQ0dO28OLvufWWfdSRkSdHmh365D2FgoZg1qaOzZPCDuL3tM6nGSfkQ==} + expo-secure-store@57.0.2: + resolution: {integrity: sha512-PhrPMKnI7YSObLEQZOoP9evB2ZOCv9kFuG2L7cZfNlOwWjGbir711PlppkXVoM3JE8vamDrTqzMLGv266FhJJg==} peerDependencies: - '@expo/log-box': ^56.0.13 - '@expo/metro-runtime': ^56.0.15 - '@testing-library/react-native': '>= 13.2.0' expo: '*' - expo-constants: ^56.0.18 - expo-linking: ^56.0.14 - react: '*' - react-dom: '*' - react-native: '*' - react-native-gesture-handler: '*' - react-native-reanimated: '*' - react-native-safe-area-context: '>= 5.4.0' - react-native-screens: ^4.25.2 - react-native-web: '*' - react-server-dom-webpack: ~19.0.4 || ~19.1.5 || ~19.2.4 - peerDependenciesMeta: - '@testing-library/react-native': - optional: true - react-dom: - optional: true - react-native-gesture-handler: - optional: true - react-native-reanimated: - optional: true - react-native-web: - optional: true - react-server-dom-webpack: - optional: true - expo-secure-store@56.0.4: - resolution: {integrity: sha512-hjEi/gmpdFFJ9lYbdp3k3p/WchV7Gi0Qt8jt/m/0WJadqQrskafHAlDxbZkII1cN3Yd7zp9Lvkeq3UfGhSwirQ==} - peerDependencies: - expo: '*' - - expo-server@56.0.5: - resolution: {integrity: sha512-SmM2p2g3Jrktpiazcst+OxhjSzOHXKAY4BPURHYHXvApzzoybMmrNF4IEZ8DKZ145BhSe4ydAmlEFCRTsdtgUQ==} + expo-server@57.0.3: + resolution: {integrity: sha512-aK+LdKzauHSGmsOStZtyxdzv0zWssCkxTw3m4QuOhfDSJsZaMRTd9O41d8ixU/QfELTbaJ0oRNcF7JFV/7O9YQ==} engines: {node: '>=20.16.0'} - expo-sharing@56.0.18: - resolution: {integrity: sha512-45w4BWNFmdTczp+fJX6YfwJrn9sX+VeRWz2VWLhauygcCrym44HtVDXX5yVYPB9TW9ZesLcEI+CCrCBNWL7smQ==} + expo-sharing@57.0.16: + resolution: {integrity: sha512-Z4ZFYLP8+EqIdUAiERYRI4/r7rtZDCRQ8Lj6jDG0xPF19B8nsFhYMgh7uyic+WulFEr+Xn7FeWgSDAuufkOyzw==} peerDependencies: expo: '*' react: '*' react-native: '*' - expo-splash-screen@56.0.10: - resolution: {integrity: sha512-vDIlo8hzt9HlCZQ0kSY66v83D1WEXOJbVMeyPDfXDu9tbDdPMNUyDpi4WGJXikAjxnAKfbt5Mv5NnEbxINy+VA==} + expo-splash-screen@57.0.8: + resolution: {integrity: sha512-BEsrKg4niYBZa5AFzWRyGqxA4ZemtBOPwbCy+C336iGYYPuZYLEgWJGmm2xD1gRfCdrM/TP+l2ONd86Zvk3KyA==} peerDependencies: expo: '*' - expo-sqlite@56.0.5: - resolution: {integrity: sha512-wHYRVLS5nUFEtli45wHaO+RjlRY8sQXyOSgENVk6I4zq7+FgySqjOk3YOYW6IKIMwhj5XzjMJO+pY8xKUy73Kw==} + expo-sqlite@57.0.2: + resolution: {integrity: sha512-5KVbT7BQFZlIcQBXKWvwBERK3ODF6PSqct27GQKukZzAjsx2B97R+mwtYqrTUtUbw71VJrQrdr9Yl2OWYC7UpA==} peerDependencies: expo: '*' react: '*' react-native: '*' - expo-structured-headers@56.0.0: - resolution: {integrity: sha512-Yv4x+SQxNnMQm4nu8NFfzx197YaDhdYH2N0u7tGErwWTmH9Tm1SAhqo7bLbBWLC9kf7W+kdzTshLU9rTiCXWGw==} + expo-structured-headers@57.0.0: + resolution: {integrity: sha512-//t9UNPbJSEysc2x4VKJG/u7Osvv5DYJWsET5bqt/B+qcD1by/JXvSQzX3Q/YAgA96xFPontrz6OAPLbO4JKEA==} - expo-symbols@56.0.6: - resolution: {integrity: sha512-BrA81DjcNafdj7gXVhdrExb9LtUiSVyOf/NavyMmDAHgHMY1GqeR5cnn1PSAZeYKnSgQhee/H89XUpAxtog5hg==} + expo-symbols@57.0.2: + resolution: {integrity: sha512-qZ0iqOflm5lZGwRsQ5Y8sDksw3GAUKwHSX1bJBoocXf7gu14vafIXXYWte+JT9VfXAUGyKodJhLHP/GoOrcNWg==} peerDependencies: expo: '*' expo-font: '*' react: '*' react-native: '*' - expo-updates-interface@56.0.2: - resolution: {integrity: sha512-eWTwSZ9y8vrULG2oBn2TQSSIwBGSq/TxGJ3jY6tuVS2FWH/ASRIiKs3zkUZTRoC3ZuV2alz0mUClYV7nNrFx8g==} + expo-updates-interface@57.0.1: + resolution: {integrity: sha512-+LUWwJ0gf/TEKMVdQAw/Gjih4dvrk+URgy24X9qEGKuuMDZqjBRm9T4yQyBVALGL5TTdPUaB6ILxx3lshm3pwQ==} peerDependencies: expo: '*' - expo-updates@56.0.19: - resolution: {integrity: sha512-tTSPYO5h8wDA6a+wQ2v/SRdnOdz29x0npGHCv+4Ev31Fz5r05Ii1Wgfh3BlTXNz8mikMReDsZCf6YN71YeQKpw==} + expo-updates@57.0.19: + resolution: {integrity: sha512-xX4KIUa8H2xKmiVDe/uEehD96MV6nyyF/OCrE+PBYfOEp6BbS8bYkHZfNFcoDCKMRuT6pg9JrCi8OmnoWlM/2A==} hasBin: true peerDependencies: expo: '*' @@ -6798,24 +6683,24 @@ packages: expo-dev-client: optional: true - expo-web-browser@56.0.5: - resolution: {integrity: sha512-kaN+wcR5lHwPCH1IgrU1XyPUQvBRzdF1TMp65uAF9iUCyipqYnmrvV87eqAmrdkFFopWVgU7FcxPu1UZw+gvUQ==} + expo-web-browser@57.0.2: + resolution: {integrity: sha512-3vl5kvd7PB48ub6PpNIJUuPxO8xVa6D8RnIgNba6SXRwqFprOfeEZgwTgtm41kz0AAtvMOztUVNEUkwrHKjqMQ==} peerDependencies: expo: '*' react-native: '*' - expo-widgets@56.0.19: - resolution: {integrity: sha512-D2RWectoEalVdGwXyE2LX3L9T6q6jSKh8jjvk1K3JSE1qOcCVZk+TJtvBUveTq8OoLblkeFMXqQ2fHG+kg655w==} + expo-widgets@57.0.15: + resolution: {integrity: sha512-dlwbUCLaxOZFcIejxtOo95NyqJMa4Sop4NPzJEvvD2MwXERBqxkp8RExxVDAEiBRIdAYqC1u02SnIJWT/27f7g==} peerDependencies: expo: '*' react: '*' react-native: '*' - expo@56.0.12: - resolution: {integrity: sha512-FxgdI/Yqva6iJOThZIHfvxlKPxs4EC4uScUnEswwSArR/Fj9k430O13R590LcOQTsdNsjIs+GBHwjfoAY6vmAQ==} + expo@57.0.18: + resolution: {integrity: sha512-6nax9hJPhf9dWrstliXUABTJXDNIJrfJKcCtjSxuYVs2Yf127GIhKf3wsEYSFUl+LFdRbPPTNaweJePH159wZA==} hasBin: true peerDependencies: - '@expo/dom-webview': '*' + '@expo/dom-webview': 57.0.1 '@expo/metro-runtime': '*' react: '*' react-dom: '*' @@ -7176,21 +7061,27 @@ packages: heic-to@1.5.2: resolution: {integrity: sha512-8Fns+lZHAWmz5U5IUxDeXKwIf3foBoKNPLxxFY4B0MkLjNuomEIHCoDbDE+x/llFK3NCEO1cu4+n3iUKY+Svmw==} - hermes-compiler@250829098.0.10: - resolution: {integrity: sha512-TcRlZ0/TlyfJqquRFAWoyElVNnkdYRi/sEp4/Qy8/GYxjg8j2cS9D4MjuaQ+qimkmLN7AmO+44IznRf06mAr0w==} - - hermes-estree@0.33.3: - resolution: {integrity: sha512-6kzYZHCk8Fy1Uc+t3HGYyJn3OL4aeqKLTyina4UFtWl8I0kSL7OmKThaiX+Uh2f8nGw3mo4Ifxg0M5Zk3/Oeqg==} + hermes-compiler@250829098.0.17: + resolution: {integrity: sha512-qG1PXzTEtriF6oQLZF3vyHhSMxOdW5h2TqqLri0rdpstPustd2fSvRZQMVAPdlhgFwBfYnj3OUZtiO6LjYsEFw==} hermes-estree@0.35.0: resolution: {integrity: sha512-xVx5Opwy8Oo1I5yGpVRhCvWL/iV3M+ylksSKVNlxxD90cpDpR/AR1jLYqK8HWihm065a6UI3HeyAmYzwS8NOOg==} - hermes-parser@0.33.3: - resolution: {integrity: sha512-Yg3HgaG4CqgyowtYjX/FsnPAuZdHOqSMtnbpylbptsQ9nwwSKsy6uRWcGO5RK0EqiX12q8HvDWKgeAVajRO5DA==} + hermes-estree@0.36.0: + resolution: {integrity: sha512-A1+8zn5oss2CFP7pKsOaxorQG6FNIz1WU1VDqruLPPZl3LVgeE2C5xfFg8Ow6/Ow4mSslLLtYP1J3n38eKyW9w==} + + hermes-estree@0.36.1: + resolution: {integrity: sha512-guv1nQ6IJ7S83NRFPWc3SA7IBZrdNC9kapwOq6uXvF4wP+sDCgjzQbKPCoyYmoyZRzztF/n/c36l/rccCZSiCw==} hermes-parser@0.35.0: resolution: {integrity: sha512-9JLjeHxBx8T4CAsydZR49PNZUaix+WpQJwu9p2010lu+7Kwl6D/7wYFFJxoz+aXkaaClp9Zfg6W6/zVlSJORaA==} + hermes-parser@0.36.0: + resolution: {integrity: sha512-GdpwMmH5x6IpC1cijvcvYnlPB60Mh6kTSF/NFdYV/j56gYdi+0RIakYs+eqOV+bbO0SW7mgVVGSsTJxyPQfo3w==} + + hermes-parser@0.36.1: + resolution: {integrity: sha512-GApNk4zLHi2UWoWZZkx7LNCOSzLSc5lB55pZ/PhK7ycFeg7u5LcF88p/WbpIi1XUDtE0MpHE3uRR3u3KB7TjSQ==} + hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} @@ -7260,10 +7151,6 @@ packages: immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - indent-string@5.0.0: resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} engines: {node: '>=12'} @@ -7989,60 +7876,118 @@ packages: resolution: {integrity: sha512-rvCfz8snl9h20VcvpOHxZuHP1SlAkv4HXbzw7nyyVwu6Eqo5PRerbakQ9XmUCOsRy70spJ37O+G1TK8oMzo48g==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-babel-transformer@0.84.5: + resolution: {integrity: sha512-2WbHILKMiJUzfdjmGOQOqU1bWi9//gqiclc/tkk/AIsrrVw3efhZ1uhkOwMTxUEPOzqoo091H0olLmVZH5FHGQ==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-cache-key@0.84.4: resolution: {integrity: sha512-wVO79aGrkYImpnaVS4+d5RrRBRPX31QtvKB3wKGBuiNSznduZTQHzsrJZRroFJSwnygrzdsGUtDQPuqqFjFdvw==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-cache-key@0.84.5: + resolution: {integrity: sha512-3dPB2TnvGjjf0/9O7AXVQURKXuQNauTZE7WpTGTlR017Gh/B5y0m/2wcqxfveUguHSpu89KhVxCAlr2k/H7uhQ==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-cache@0.84.4: resolution: {integrity: sha512-gpcFQdSLUwUCk71saKoE64jLFbx2nwTfVCcPSULMNT8QYq0p1eZZE29Jvd0HtT/UlhC3ZOutLxJME5xqD2JUZg==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-cache@0.84.5: + resolution: {integrity: sha512-WHS0n2OxQqtwEjSeQFPePNrMvEFhmQcUQM9cRJMHByWoi/GMWFBEWOf7hVkAM/0KRutAXNbDlSu/cZB6CyxgQQ==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-config@0.84.4: resolution: {integrity: sha512-PMotGDjXcXLWo2TMRH+VR99phFNgYTwqh4OoieIKK3yTJa1Jmkl+fZJxDO0jfBvNF+WESHciHvpNuBtXaF3B0Q==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-config@0.84.5: + resolution: {integrity: sha512-zie+uN6oohscowi2S7ByU+wUw6CrT4ZxW9uAbONOObSxx86RGmnIAmjXHLkfmcdYoY7jzOPEbqcI6oeVmqyBQA==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-core@0.84.4: resolution: {integrity: sha512-HONpWC5LGXZn3ffkd4Hu6AIrfE7j4Z0g0wMo/goV24WOB3lhuFZ40KgvaDiSw8iyQHloMYay5N/wPX+z8oN/PQ==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-core@0.84.5: + resolution: {integrity: sha512-xwm605hCi5Y6eJTTb8ZWo6pkUcoBEIyiQOfkZh5GwtDwUrP9SNhTQZhzJHrBCwwxlf3Ptl/pxWJgQ1rsNYMnrA==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-file-map@0.84.4: resolution: {integrity: sha512-KSVDi/u60hKPx++NLu3MTIvyjzNoJnFAF8PQFxaj1jiSka/wjw+Ua6sNuJ0TDHQv+7AAoFQxeMgaRAe8Yic5wQ==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-file-map@0.84.5: + resolution: {integrity: sha512-mlm/JL8toSbSc2akpKIGmzvrVRSCgZ5vkbycI34oMLoOnLGuLyC8WTyVJ6P0hZG/usDaGwZSl/s9BCRriqjGJA==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-minify-terser@0.84.4: resolution: {integrity: sha512-5qpbaVOMC7CPitIpuewzVeGw7E+C3ykbv2mqTjQLl85Z3annSVGlSCTcsZjqXZzjupfK4Ztj3dDc4kc44NZwtQ==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-minify-terser@0.84.5: + resolution: {integrity: sha512-BJoFwCEDsYnagPqarayInv2+diCDNDdLlaof/p6s9w4gh+gc9HXYM+pDvsKGKKUumpZswNF3Z/ftTMqKl/5IBg==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-resolver@0.84.4: resolution: {integrity: sha512-1qLgbxQ5ZGhhutuPot1Yp348ofDsATL2WkrHF65TobqTT9K3P9qJXw38bomk7ncp5B7OYMfWwtyBZo1lCV792A==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-resolver@0.84.5: + resolution: {integrity: sha512-VSSnepg1k6LyCwtb6eirWdAWlpKwBG8Rdtsr1mU38rMelFyWgh3/QuMSiZIZAIjwg/fsa8GhW5/FO54CAUPCEA==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-runtime@0.84.4: resolution: {integrity: sha512-Jibypds4g7AhzdRKY+kDoj51s5EXMwgyp5ddtlreDAsWefMdOx+agWqgm0H2XSZ/ueanHHVM89fnf5OJnlxa8Q==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-runtime@0.84.5: + resolution: {integrity: sha512-U1m2+d1Pr+JO2/iVXBB2OfXXityz7tqwIorxfrT15IEgaHvpJBq/OHiqnOWPKJbUl3JcxjcdviZZOKk85oK4Qg==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-source-map@0.84.4: resolution: {integrity: sha512-jbWkPxIesVuo1IWkvezmMJld6iu8nD62GsrZiV6jP37AOdbo4OBq1FJ+qkOg8sV05wAHB//jAbziuW0SlJfW4g==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-source-map@0.84.5: + resolution: {integrity: sha512-2BtV5L9uPc49F13Gn5wiP6bX/EncqzqTIk2VL/0F/96Vo0YEOjluT/qktQjFODfqGFsucwnh5mPEAl/2jVEfeg==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-symbolicate@0.84.4: resolution: {integrity: sha512-OnfpacxUqGPZQ27t8qK9mFa7uqHIlVWeqRqkCbvMvreEBiamEeOn8krKtcwgP5M4cYDPwuSmCTopHMVthqG4zA==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} hasBin: true + metro-symbolicate@0.84.5: + resolution: {integrity: sha512-rQ40zYDAkaWBN9yvjUuAD0ZpzBMZSoKyGYXnb5JrfbKjun7fTvfoLHL3KXFYenBTYZkQtlp4cKSCv/1utxFyOw==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + hasBin: true + metro-transform-plugins@0.84.4: resolution: {integrity: sha512-kehr6HbAecqD0/a3xLXobELdPaAmRAl8bel0qagPF4vhZtux93nS8S4eq2kgKt6J2GnQpVjSoW1PXdst04mwow==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-transform-plugins@0.84.5: + resolution: {integrity: sha512-+InaSVGaOyt0DyRo4Y/zIdPI6CZwnbNho5LAL23tgmuGwv7fyfkF7kKfPjZcfxXBcoYdTLLFnCfCH/dHSiCqNg==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-transform-worker@0.84.4: resolution: {integrity: sha512-W1IYMvvXTu4MxYr7d9h7CeG2vpIr3bmLLIavkPY4O1ilzDrvS8z/NEe6y+pC44Ff7raMXQgYSfdqDUwN/i39gg==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-transform-worker@0.84.5: + resolution: {integrity: sha512-ui1Z8x4s5RL36gMmKLaMMO7O9NNDHNdthEZSCDQHAau3JcAsTaFOK6I+2q4I/kW5u8hSEjJk9L45TXSVJw6g1A==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro@0.84.4: resolution: {integrity: sha512-8ETTubqfD6ornDy2zYDvRcKnVDOXdFJsjetYDBsY4oAsb6NJkiwFR+FaMESyGppFmQUyBQA4H4sFGxzcQSGtFA==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} hasBin: true + metro@0.84.5: + resolution: {integrity: sha512-r1liLkyFZMVSEMNjU1CJU5pRzs3NdkxHqXS60O25c0rCIqAR+cGk7rPydw/g0WAIKVXojIBIF45yYBPagJGcgw==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + hasBin: true + micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} @@ -8186,10 +8131,6 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} - min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} @@ -8288,8 +8229,8 @@ packages: multipasta@0.2.8: resolution: {integrity: sha512-ZPWuMKyv0cSO29f7hozp+k6+crZbQijV8ipMvxNxRf2SwtYGTX1ZX89Kd20VV4H9Znonx+EQn+iy1wGQsJ+b+Q==} - multitars@1.0.0: - resolution: {integrity: sha512-H/J4fMLedtudftaYMOg7ajzLYgT3/rwbWVJbqr/iUgB8DQztn38ys5HOqI1CzSxx8QhXXwOOnnBvd4v3jG5+Mg==} + multitars@1.0.2: + resolution: {integrity: sha512-6GwVw5eLi9sThdtlS4PKwC7yRLaf45pYhIEzKBHdKxi+YOXGKFX8acIniH+Uh/+k9mS2lQOupTccjoe5r0/1IQ==} mute-stream@2.0.0: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} @@ -8431,6 +8372,10 @@ packages: resolution: {integrity: sha512-eJXMpz4aQHXF/YBB9ddqZDIS+ooO91hObo9FoW/xBkr54/zCwYYCDqT/O54vNo8kOkWs5Ou/y28NgdrV0edQNA==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + ob1@0.84.5: + resolution: {integrity: sha512-aH9RkoZc7w/90HBamFxTw8ZLFr05wXS+iOnvmrgo53Ep8Pyrm5FieQSaPIVROkfFVQISeD/zo92fes26TOwe+A==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -8924,9 +8869,6 @@ packages: peerDependencies: react: ^18.0.0 || ^19.0.0 - react-fast-compare@3.2.2: - resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} - react-freeze@1.0.4: resolution: {integrity: sha512-r4F0Sec0BLxWicc7HEyo2x3/2icUTrRmDjaaRyzzn+7aDyFZliszMDOgLVwSnQnYENOlL1o569Ze2HZefk8clA==} engines: {node: '>=10'} @@ -8960,16 +8902,8 @@ packages: '@types/react': '>=18' react: '>=18' - react-native-drawer-layout@4.2.4: - resolution: {integrity: sha512-l1Le5HcVidobnJm8xqFZo46Rs8FDHdxbTZhkjxpNSRgU+QMoQXilOfzTHAeNjEGiKVGgIs9cW3ctXeHqgp5jJg==} - peerDependencies: - react: '>= 18.2.0' - react-native: '*' - react-native-gesture-handler: '>= 2.0.0' - react-native-reanimated: '>= 2.0.0' - - react-native-gesture-handler@2.31.2: - resolution: {integrity: sha512-rw5q74i2AfS7YGYdbxQDhOU7xqgY6WRM1132/CCm3erqjblhECZDZFHIm0tteHoC9ih24wogVBVVzcTBQtZ+5A==} + react-native-gesture-handler@2.32.0: + resolution: {integrity: sha512-uYIMOKlKENORq2SABE+jIjbPU+h5I/sQKcq2v16zRq848nwEp1fWRVwML4QWqijc8UcXJC25o54S8GQd4Mf2OA==} peerDependencies: react: '*' react-native: '*' @@ -9013,12 +8947,12 @@ packages: react: '*' react-native: '*' - react-native-reanimated@4.3.1: - resolution: {integrity: sha512-KhGsS0YkCA+gusgyzlf9hnqzVPIR398KTpqXyqq/+yYJJPAvyEEPKcxlB0xtOOXSMrR2A9uRKVARVQhZwrOh+Q==} + react-native-reanimated@4.5.1: + resolution: {integrity: sha512-RnMvtDuR+68ig864gAvZCOdZehqhC5rFmMo0kn+ARfgVSTvFeF6IFLBVgMPUu0KwihaapEyW24WRi6nEyy1kSA==} peerDependencies: react: '*' - react-native: 0.81 - 0.85 - react-native-worklets: 0.8.x + react-native: 0.83 - 0.86 + react-native-worklets: 0.10.x react-native-safe-area-context@5.7.0: resolution: {integrity: sha512-/9/MtQz8ODphjsLdZ+GZAIcC/RtoqW9EeShf7Uvnfgm/pzYrJ75y3PV/J1wuAV1T5Dye5ygq4EAW20RoBq0ABQ==} @@ -9026,11 +8960,11 @@ packages: react: '*' react-native: '*' - react-native-screens@4.25.2: - resolution: {integrity: sha512-1Nj1fusFd+rIMKU/qC9yGKVG+3ofh11d3OdBQKL1iVvQfKvcB8vhvTGQf2TkfxW3bamxN+hCZIXmNuU0mRkyDg==} + react-native-screens@4.26.2: + resolution: {integrity: sha512-2XnWsZToKj76trGtEZzx5ELD/qOICFEprEeUntImmitQFVUkea27fiWdUSITArI356Y1qynpXZINW+Unbhky/A==} peerDependencies: react: '*' - react-native: '>=0.82.0' + react-native: '*' react-native-shiki-engine@0.3.12: resolution: {integrity: sha512-CE6CA3uHGZT5OmY909H+vTv5lrmILV7zuPOF2pXRYXWN2qYm5KG7XacEB/Pq1U2+8D0zJoeMveTny/FHEqnipg==} @@ -9055,20 +8989,20 @@ packages: react: '*' react-native: '*' - react-native-worklets@0.8.3: - resolution: {integrity: sha512-oCBJROyLU7yG/1R8s0INMflygTH71bx+5XcYkH0CM938TlhSoVbiunE1WVW5FZa51vwYqfLie/IXMX2s1Kh3eg==} + react-native-worklets@0.10.1: + resolution: {integrity: sha512-62mRM19bDpfpdI8HLkEErcdOsrAPDtE9lA/sw+5lLRpzBHNhxaoj9QyY2KjXqUmirelxkX4zuPGTC3VdA0feJA==} peerDependencies: '@babel/core': '*' '@react-native/metro-config': '*' react: '*' - react-native: 0.81 - 0.85 + react-native: 0.83 - 0.86 - react-native@0.85.3: - resolution: {integrity: sha512-HN/fGC+3nZVcDNcw7gfbM/DuqZAvI9Mz+/SxuhODaua4JY0BPzhfTzWXRyTR4mRgMHmShTPpH2PYMTxvZrsdZA==} + react-native@0.86.3: + resolution: {integrity: sha512-JR5s3bM9ezud+Mw24GlNXNfthqPIKwrQgPPJcam+L97t2sKjjEavhCzBn+fyqZZRcM5+XlhYxpTxVkK7e1n38Q==} engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} hasBin: true peerDependencies: - '@react-native/jest-preset': 0.85.3 + '@react-native/jest-preset': 0.86.3 '@types/react': ^19.1.1 react: ^19.2.3 peerDependenciesMeta: @@ -9140,10 +9074,6 @@ packages: resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} engines: {node: '>= 20.19.0'} - redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} - redis-errors@1.2.0: resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} engines: {node: '>=4'} @@ -9336,6 +9266,11 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + sandbox-cli-detector@0.2.0: + resolution: {integrity: sha512-4lyHX0ZU0AZKwjgZ1InxZAa3PNpyEb8rOQ+Zss1ReYmhNzW0Q+h1zE5nvniXN0HaAWZaZE1zgVNEirb0R7LmNg==} + engines: {node: '>=18.18'} + hasBin: true + sanitize-filename@1.6.4: resolution: {integrity: sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg==} @@ -9408,9 +9343,6 @@ packages: resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} engines: {node: '>= 18'} - server-only@0.0.1: - resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} - setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} @@ -9421,9 +9353,6 @@ packages: resolution: {integrity: sha512-TPbeg0b7ylrswdGCji8FRGFAKuqbpQlLbL8SOle3j1iHSs5Ob5mhvMAxWN2UItOjgALAB5Zp3fmMfj8mbWvXKw==} engines: {node: '>=10'} - shallowequal@1.1.0: - resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} - sharp@0.34.5: resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -9570,9 +9499,6 @@ packages: standard-as-callback@2.1.0: resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} - standard-navigation@0.0.5: - resolution: {integrity: sha512-YAmzwAiiQVocZxO/VGPFiQHcu5pKiz09QIGC0MK6aRMoa3E0QkoTQgcqJr7ZZ3OMiNhu4DkaGElFI5htjOIDbw==} - standard-navigation@0.0.7: resolution: {integrity: sha512-NCGLCNyuXrFOkGHxdNZFnpsehGtiq1oXbPhKl7ZuxFO5J//H2evqqOchmD4YwEUJnkjO4kH9Xp4hQX6hdAYCKQ==} @@ -9639,10 +9565,6 @@ packages: resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} - strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - strnum@2.3.0: resolution: {integrity: sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==} @@ -10531,9 +10453,6 @@ packages: snapshots: - '@adobe/css-tools@4.5.0': - optional: true - '@alcalzone/ansi-tokenize@0.2.5': dependencies: ansi-styles: 6.2.3 @@ -11467,10 +11386,10 @@ snapshots: '@bruits/satteri-win32-x64-msvc@0.9.3': optional: true - '@callstack/liquid-glass@0.7.1(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)': + '@callstack/liquid-glass@0.7.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)': dependencies: react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) '@capsizecss/unpack@4.0.1': dependencies: @@ -11574,24 +11493,24 @@ snapshots: electron-store: 8.2.0 react-dom: 19.2.6(react@19.2.6) - '@clerk/expo@4.2.0(patch_hash=72e426f44fc1cde16fc2cbba3d1e96cdca7c6d957faa73d0fe6b43948608a6c1)(expo-auth-session@56.0.14(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(expo-constants@56.0.18)(expo-crypto@56.0.4(expo@56.0.12))(expo-secure-store@56.0.4(expo@56.0.12))(expo-web-browser@56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)))(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)': + '@clerk/expo@4.2.0(patch_hash=72e426f44fc1cde16fc2cbba3d1e96cdca7c6d957faa73d0fe6b43948608a6c1)(1fcd0592788ddcf326eeeb90d875ed47)': dependencies: '@clerk/clerk-js': 6.30.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@clerk/react': 6.14.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@clerk/shared': 4.30.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@expo/config-plugins': 56.0.9(typescript@6.0.3) + '@expo/config-plugins': 57.0.9(typescript@6.0.3) base-64: 1.0.0 - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - react-native-url-polyfill: 4.0.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native-url-polyfill: 4.0.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) tslib: 2.8.1 optionalDependencies: - expo-auth-session: 56.0.14(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - expo-constants: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) - expo-crypto: 56.0.4(expo@56.0.12) - expo-secure-store: 56.0.4(expo@56.0.12) - expo-web-browser: 56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) + expo-auth-session: 57.0.10(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + expo-constants: 57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) + expo-crypto: 57.0.2(expo@57.0.18) + expo-secure-store: 57.0.2(expo@57.0.18) + expo-web-browser: 57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) react-dom: 19.2.3(react@19.2.3) transitivePeerDependencies: - supports-color @@ -12191,32 +12110,33 @@ snapshots: '@expo-google-fonts/material-symbols@0.4.38': {} - '@expo/cli@56.1.16(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.15)(bufferutil@4.1.0)(expo-constants@56.0.18)(expo-font@56.0.7)(expo-router@56.2.11)(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)': + '@expo/cli@57.0.20(@expo/dom-webview@57.0.1)(@expo/metro-runtime@57.0.14)(bufferutil@4.1.0)(expo-constants@57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)))(expo-font@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(expo@57.0.18)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)': dependencies: '@expo/code-signing-certificates': 0.0.6 - '@expo/config': 56.0.9(typescript@6.0.3) - '@expo/config-plugins': 56.0.9(typescript@6.0.3) + '@expo/config': 57.0.9(typescript@6.0.3) + '@expo/config-plugins': 57.0.9(typescript@6.0.3) '@expo/devcert': 1.2.1 - '@expo/env': 2.3.0 - '@expo/image-utils': 0.10.1(typescript@6.0.3) - '@expo/inline-modules': 0.0.12(typescript@6.0.3) - '@expo/json-file': 10.2.0 - '@expo/log-box': 56.0.13(@expo/dom-webview@56.0.5)(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - '@expo/metro': 56.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) - '@expo/metro-config': 56.0.14(patch_hash=8cb08b5bb7051ed9d2dbe46a2c293c5a1e17f1bd6ddf30de27909e18c921ff46)(bufferutil@4.1.0)(expo@56.0.12)(typescript@6.0.3)(utf-8-validate@6.0.6) - '@expo/metro-file-map': 56.0.3 - '@expo/osascript': 2.6.0 - '@expo/package-manager': 1.12.1 - '@expo/plist': 0.7.0 - '@expo/prebuild-config': 56.0.16(typescript@6.0.3) - '@expo/require-utils': 56.1.3(typescript@6.0.3) - '@expo/router-server': 56.0.14(@expo/metro-runtime@56.0.15)(expo-constants@56.0.18)(expo-font@56.0.7)(expo-router@56.2.11)(expo-server@56.0.5)(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@expo/schema-utils': 56.0.1 + '@expo/env': 2.4.3 + '@expo/image-utils': 0.11.5(typescript@6.0.3) + '@expo/inline-modules': 0.1.7(typescript@6.0.3) + '@expo/json-file': 11.0.1 + '@expo/log-box': 57.0.4(@expo/dom-webview@57.0.1)(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + '@expo/metro': 56.0.2(bufferutil@4.1.0)(utf-8-validate@6.0.6) + '@expo/metro-config': 57.0.12(patch_hash=96f1a75347e6ea02dc4b7034ace815d8ee39e18b8166ebfb573d9e58328f0dc2)(bufferutil@4.1.0)(expo@57.0.18)(typescript@6.0.3)(utf-8-validate@6.0.6) + '@expo/metro-file-map': 57.0.2 + '@expo/osascript': 2.7.1 + '@expo/package-manager': 1.13.1 + '@expo/plist': 0.8.1 + '@expo/prebuild-config': 57.0.15(typescript@6.0.3) + '@expo/require-utils': 57.0.5(typescript@6.0.3) + '@expo/router-server': 57.0.8(@expo/metro-runtime@57.0.14)(expo-constants@57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)))(expo-font@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(expo-server@57.0.3)(expo@57.0.18)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@expo/schema-utils': 57.0.2 '@expo/spawn-async': 1.8.0 '@expo/ws-tunnel': 2.0.0(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) '@expo/xcpretty': 4.4.4 - '@react-native/dev-middleware': 0.85.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) + '@react-native/dev-middleware': 0.86.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) accepts: 1.3.8 + agent-cli-detector: 0.1.6 arg: 5.0.2 bplist-creator: 0.1.0 bplist-parser: 0.3.2 @@ -12226,13 +12146,13 @@ snapshots: connect: 3.7.0 debug: 4.4.3 dnssd-advertise: 1.1.4 - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) - expo-server: 56.0.5 + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) + expo-server: 57.0.3 fetch-nodeshim: 0.4.10 getenv: 2.0.0 glob: 13.0.6 lan-network: 0.2.1 - multitars: 1.0.0 + multitars: 1.0.2 node-forge: 1.4.0 npm-package-arg: 11.0.3 ora: 3.4.0 @@ -12241,6 +12161,7 @@ snapshots: progress: 2.0.3 prompts: 2.4.2 resolve-from: 5.0.0 + sandbox-cli-detector: 0.2.0 semver: 7.8.5 send: 0.19.2 slugify: 1.6.9 @@ -12252,8 +12173,7 @@ snapshots: ws: 8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) zod: 3.25.76 optionalDependencies: - expo-router: 56.2.11(1d12f8130d9562de288829ccb10045a7) - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) transitivePeerDependencies: - '@expo/dom-webview' - '@expo/metro-runtime' @@ -12267,32 +12187,33 @@ snapshots: - typescript - utf-8-validate - '@expo/cli@56.1.16(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.15)(bufferutil@4.1.0)(expo-constants@56.0.18)(expo-font@56.0.7)(expo-router@56.2.11)(expo@56.0.12)(react-dom@19.2.6(react@19.2.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)(typescript@6.0.3)(utf-8-validate@6.0.6)': + '@expo/cli@57.0.20(@expo/dom-webview@57.0.1)(@expo/metro-runtime@57.0.14)(bufferutil@4.1.0)(expo-constants@57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)))(expo-font@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(expo@57.0.18)(react-dom@19.2.6(react@19.2.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)(typescript@6.0.3)(utf-8-validate@6.0.6)': dependencies: '@expo/code-signing-certificates': 0.0.6 - '@expo/config': 56.0.9(typescript@6.0.3) - '@expo/config-plugins': 56.0.9(typescript@6.0.3) + '@expo/config': 57.0.9(typescript@6.0.3) + '@expo/config-plugins': 57.0.9(typescript@6.0.3) '@expo/devcert': 1.2.1 - '@expo/env': 2.3.0 - '@expo/image-utils': 0.10.1(typescript@6.0.3) - '@expo/inline-modules': 0.0.12(typescript@6.0.3) - '@expo/json-file': 10.2.0 - '@expo/log-box': 56.0.13(@expo/dom-webview@56.0.5)(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) - '@expo/metro': 56.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) - '@expo/metro-config': 56.0.14(patch_hash=8cb08b5bb7051ed9d2dbe46a2c293c5a1e17f1bd6ddf30de27909e18c921ff46)(bufferutil@4.1.0)(expo@56.0.12)(typescript@6.0.3)(utf-8-validate@6.0.6) - '@expo/metro-file-map': 56.0.3 - '@expo/osascript': 2.6.0 - '@expo/package-manager': 1.12.1 - '@expo/plist': 0.7.0 - '@expo/prebuild-config': 56.0.16(typescript@6.0.3) - '@expo/require-utils': 56.1.3(typescript@6.0.3) - '@expo/router-server': 56.0.14(@expo/metro-runtime@56.0.15)(expo-constants@56.0.18)(expo-font@56.0.7)(expo-router@56.2.11)(expo-server@56.0.5)(expo@56.0.12)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@expo/schema-utils': 56.0.1 + '@expo/env': 2.4.3 + '@expo/image-utils': 0.11.5(typescript@6.0.3) + '@expo/inline-modules': 0.1.7(typescript@6.0.3) + '@expo/json-file': 11.0.1 + '@expo/log-box': 57.0.4(@expo/dom-webview@57.0.1)(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) + '@expo/metro': 56.0.2(bufferutil@4.1.0)(utf-8-validate@6.0.6) + '@expo/metro-config': 57.0.12(patch_hash=96f1a75347e6ea02dc4b7034ace815d8ee39e18b8166ebfb573d9e58328f0dc2)(bufferutil@4.1.0)(expo@57.0.18)(typescript@6.0.3)(utf-8-validate@6.0.6) + '@expo/metro-file-map': 57.0.2 + '@expo/osascript': 2.7.1 + '@expo/package-manager': 1.13.1 + '@expo/plist': 0.8.1 + '@expo/prebuild-config': 57.0.15(typescript@6.0.3) + '@expo/require-utils': 57.0.5(typescript@6.0.3) + '@expo/router-server': 57.0.8(@expo/metro-runtime@57.0.14)(expo-constants@57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)))(expo-font@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(expo-server@57.0.3)(expo@57.0.18)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@expo/schema-utils': 57.0.2 '@expo/spawn-async': 1.8.0 '@expo/ws-tunnel': 2.0.0(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) '@expo/xcpretty': 4.4.4 - '@react-native/dev-middleware': 0.85.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) + '@react-native/dev-middleware': 0.86.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) accepts: 1.3.8 + agent-cli-detector: 0.1.6 arg: 5.0.2 bplist-creator: 0.1.0 bplist-parser: 0.3.2 @@ -12302,13 +12223,13 @@ snapshots: connect: 3.7.0 debug: 4.4.3 dnssd-advertise: 1.1.4 - expo: 56.0.12(deb8cbf3e0f411b34ba85a995c9982ba) - expo-server: 56.0.5 + expo: 57.0.18(ecb3896f1dbe5154a21ddc585503f306) + expo-server: 57.0.3 fetch-nodeshim: 0.4.10 getenv: 2.0.0 glob: 13.0.6 lan-network: 0.2.1 - multitars: 1.0.0 + multitars: 1.0.2 node-forge: 1.4.0 npm-package-arg: 11.0.3 ora: 3.4.0 @@ -12317,6 +12238,7 @@ snapshots: progress: 2.0.3 prompts: 2.4.2 resolve-from: 5.0.0 + sandbox-cli-detector: 0.2.0 semver: 7.8.5 send: 0.19.2 slugify: 1.6.9 @@ -12328,8 +12250,7 @@ snapshots: ws: 8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) zod: 3.25.76 optionalDependencies: - expo-router: 56.2.11(5cef6fdc582974f4d93d5694873ec814) - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) transitivePeerDependencies: - '@expo/dom-webview' - '@expo/metro-runtime' @@ -12348,12 +12269,12 @@ snapshots: dependencies: node-forge: 1.4.0 - '@expo/config-plugins@56.0.9(typescript@6.0.3)': + '@expo/config-plugins@57.0.9(typescript@6.0.3)': dependencies: - '@expo/config-types': 56.0.6 - '@expo/json-file': 10.2.0 - '@expo/plist': 0.7.0 - '@expo/require-utils': 56.1.3(typescript@6.0.3) + '@expo/config-types': 57.0.2 + '@expo/json-file': 11.0.1 + '@expo/plist': 0.8.1 + '@expo/require-utils': 57.0.5(typescript@6.0.3) '@expo/sdk-runtime-versions': 1.0.0 chalk: 4.1.2 debug: 4.4.3 @@ -12367,14 +12288,14 @@ snapshots: - supports-color - typescript - '@expo/config-types@56.0.6': {} + '@expo/config-types@57.0.2': {} - '@expo/config@56.0.9(typescript@6.0.3)': + '@expo/config@57.0.9(typescript@6.0.3)': dependencies: - '@expo/config-plugins': 56.0.9(typescript@6.0.3) - '@expo/config-types': 56.0.6 - '@expo/json-file': 10.2.0 - '@expo/require-utils': 56.1.3(typescript@6.0.3) + '@expo/config-plugins': 57.0.9(typescript@6.0.3) + '@expo/config-types': 57.0.2 + '@expo/json-file': 11.0.1 + '@expo/require-utils': 57.0.5(typescript@6.0.3) deepmerge: 4.3.1 getenv: 2.0.0 glob: 13.0.6 @@ -12392,35 +12313,35 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/devtools@56.0.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)': + '@expo/devtools@57.0.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)': dependencies: chalk: 4.1.2 optionalDependencies: react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - '@expo/devtools@56.0.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)': + '@expo/devtools@57.0.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)': dependencies: chalk: 4.1.2 optionalDependencies: react: 19.2.6 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) optional: true - '@expo/dom-webview@56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)': + '@expo/dom-webview@57.0.1(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)': dependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - '@expo/dom-webview@56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)': + '@expo/dom-webview@57.0.1(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)': dependencies: - expo: 56.0.12(deb8cbf3e0f411b34ba85a995c9982ba) + expo: 57.0.18(ecb3896f1dbe5154a21ddc585503f306) react: 19.2.6 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) optional: true - '@expo/env@2.3.0': + '@expo/env@2.4.3': dependencies: chalk: 4.1.2 debug: 4.4.3 @@ -12428,11 +12349,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/expo-modules-macros-plugin@0.2.2': {} + '@expo/expo-modules-macros-plugin@0.6.1': {} - '@expo/fingerprint@0.19.4': + '@expo/fingerprint@0.20.11': dependencies: - '@expo/env': 2.3.0 + '@expo/env': 2.4.3 '@expo/spawn-async': 1.8.0 arg: 5.0.2 chalk: 4.1.2 @@ -12446,9 +12367,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/image-utils@0.10.1(typescript@6.0.3)': + '@expo/image-utils@0.11.5(typescript@6.0.3)': dependencies: - '@expo/require-utils': 56.1.3(typescript@6.0.3) + '@expo/require-utils': 57.0.5(typescript@6.0.3) '@expo/spawn-async': 1.8.0 chalk: 4.1.2 getenv: 2.0.0 @@ -12472,55 +12393,55 @@ snapshots: - supports-color - typescript - '@expo/inline-modules@0.0.12(typescript@6.0.3)': + '@expo/inline-modules@0.1.7(typescript@6.0.3)': dependencies: - '@expo/config-plugins': 56.0.9(typescript@6.0.3) + '@expo/config-plugins': 57.0.9(typescript@6.0.3) transitivePeerDependencies: - supports-color - typescript - '@expo/json-file@10.2.0': + '@expo/json-file@11.0.1': dependencies: '@babel/code-frame': 7.29.7 json5: 2.2.3 - '@expo/local-build-cache-provider@56.0.8(typescript@6.0.3)': + '@expo/local-build-cache-provider@57.0.8(typescript@6.0.3)': dependencies: - '@expo/config': 56.0.9(typescript@6.0.3) + '@expo/config': 57.0.9(typescript@6.0.3) chalk: 4.1.2 transitivePeerDependencies: - supports-color - typescript - '@expo/log-box@56.0.13(@expo/dom-webview@56.0.5)(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)': + '@expo/log-box@57.0.4(@expo/dom-webview@57.0.1)(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)': dependencies: - '@expo/dom-webview': 56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + '@expo/dom-webview': 57.0.1(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) anser: 1.4.10 - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) stacktrace-parser: 0.1.11 - '@expo/log-box@56.0.13(@expo/dom-webview@56.0.5)(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)': + '@expo/log-box@57.0.4(@expo/dom-webview@57.0.1)(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)': dependencies: - '@expo/dom-webview': 56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) + '@expo/dom-webview': 57.0.1(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) anser: 1.4.10 - expo: 56.0.12(deb8cbf3e0f411b34ba85a995c9982ba) + expo: 57.0.18(ecb3896f1dbe5154a21ddc585503f306) react: 19.2.6 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) stacktrace-parser: 0.1.11 optional: true - '@expo/metro-config@56.0.14(patch_hash=8cb08b5bb7051ed9d2dbe46a2c293c5a1e17f1bd6ddf30de27909e18c921ff46)(bufferutil@4.1.0)(expo@56.0.12)(typescript@6.0.3)(utf-8-validate@6.0.6)': + '@expo/metro-config@57.0.12(patch_hash=96f1a75347e6ea02dc4b7034ace815d8ee39e18b8166ebfb573d9e58328f0dc2)(bufferutil@4.1.0)(expo@57.0.18)(typescript@6.0.3)(utf-8-validate@6.0.6)': dependencies: '@babel/code-frame': 7.29.7 '@babel/core': 7.29.7 '@babel/generator': 7.29.7 - '@expo/config': 56.0.9(typescript@6.0.3) - '@expo/env': 2.3.0 - '@expo/json-file': 10.2.0 - '@expo/metro': 56.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) - '@expo/require-utils': 56.1.3(typescript@6.0.3) + '@expo/config': 57.0.9(typescript@6.0.3) + '@expo/env': 2.4.3 + '@expo/json-file': 11.0.1 + '@expo/metro': 56.0.2(bufferutil@4.1.0)(utf-8-validate@6.0.6) + '@expo/require-utils': 57.0.5(typescript@6.0.3) '@expo/spawn-async': 1.8.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/remapping': 2.3.5 @@ -12530,21 +12451,21 @@ snapshots: debug: 4.4.3 getenv: 2.0.0 glob: 13.0.6 - hermes-parser: 0.33.3 + hermes-parser: 0.36.1 jsc-safe-url: 0.2.4 lightningcss: 1.32.0 picomatch: 4.0.4 postcss: 8.5.15 resolve-from: 5.0.0 optionalDependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) transitivePeerDependencies: - bufferutil - supports-color - typescript - utf-8-validate - '@expo/metro-file-map@56.0.3': + '@expo/metro-file-map@57.0.2': dependencies: debug: 4.4.3 fb-watchman: 2.0.2 @@ -12555,83 +12476,83 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/metro-runtime@56.0.15(@expo/log-box@56.0.13)(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)': + '@expo/metro-runtime@57.0.14(@expo/log-box@57.0.4)(expo@57.0.18)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)': dependencies: - '@expo/log-box': 56.0.13(@expo/dom-webview@56.0.5)(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + '@expo/log-box': 57.0.4(@expo/dom-webview@57.0.1)(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) anser: 1.4.10 - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) pretty-format: 29.7.0 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) stacktrace-parser: 0.1.11 whatwg-fetch: 3.6.20 optionalDependencies: react-dom: 19.2.3(react@19.2.3) - '@expo/metro-runtime@56.0.15(@expo/log-box@56.0.13)(expo@56.0.12)(react-dom@19.2.6(react@19.2.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)': + '@expo/metro-runtime@57.0.14(@expo/log-box@57.0.4)(expo@57.0.18)(react-dom@19.2.6(react@19.2.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)': dependencies: - '@expo/log-box': 56.0.13(@expo/dom-webview@56.0.5)(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) + '@expo/log-box': 57.0.4(@expo/dom-webview@57.0.1)(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) anser: 1.4.10 - expo: 56.0.12(deb8cbf3e0f411b34ba85a995c9982ba) + expo: 57.0.18(ecb3896f1dbe5154a21ddc585503f306) pretty-format: 29.7.0 react: 19.2.6 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) stacktrace-parser: 0.1.11 whatwg-fetch: 3.6.20 optionalDependencies: react-dom: 19.2.6(react@19.2.6) optional: true - '@expo/metro@56.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)': + '@expo/metro@56.0.2(bufferutil@4.1.0)(utf-8-validate@6.0.6)': dependencies: - metro: 0.84.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) - metro-babel-transformer: 0.84.4 - metro-cache: 0.84.4 - metro-cache-key: 0.84.4 - metro-config: 0.84.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) - metro-core: 0.84.4 - metro-file-map: 0.84.4 - metro-minify-terser: 0.84.4 - metro-resolver: 0.84.4 - metro-runtime: 0.84.4 - metro-source-map: 0.84.4 - metro-symbolicate: 0.84.4 - metro-transform-plugins: 0.84.4 - metro-transform-worker: 0.84.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) + metro: 0.84.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) + metro-babel-transformer: 0.84.5 + metro-cache: 0.84.5 + metro-cache-key: 0.84.5 + metro-config: 0.84.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) + metro-core: 0.84.5 + metro-file-map: 0.84.5 + metro-minify-terser: 0.84.5 + metro-resolver: 0.84.5 + metro-runtime: 0.84.5 + metro-source-map: 0.84.5 + metro-symbolicate: 0.84.5 + metro-transform-plugins: 0.84.5 + metro-transform-worker: 0.84.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - '@expo/osascript@2.6.0': + '@expo/osascript@2.7.1': dependencies: '@expo/spawn-async': 1.8.0 - '@expo/package-manager@1.12.1': + '@expo/package-manager@1.13.1': dependencies: - '@expo/json-file': 10.2.0 + '@expo/json-file': 11.0.1 '@expo/spawn-async': 1.8.0 chalk: 4.1.2 npm-package-arg: 11.0.3 ora: 3.4.0 resolve-workspace-root: 2.0.1 - '@expo/plist@0.7.0': + '@expo/plist@0.8.1': dependencies: '@xmldom/xmldom': 0.8.13 base64-js: 1.5.1 xmlbuilder: 15.1.1 - '@expo/prebuild-config@56.0.16(typescript@6.0.3)': + '@expo/prebuild-config@57.0.15(typescript@6.0.3)': dependencies: - '@expo/config': 56.0.9(typescript@6.0.3) - '@expo/config-plugins': 56.0.9(typescript@6.0.3) - '@expo/config-types': 56.0.6 - '@expo/image-utils': 0.10.1(typescript@6.0.3) - '@expo/json-file': 10.2.0 - '@react-native/normalize-colors': 0.85.3 + '@expo/config': 57.0.9(typescript@6.0.3) + '@expo/config-plugins': 57.0.9(typescript@6.0.3) + '@expo/config-types': 57.0.2 + '@expo/image-utils': 0.11.5(typescript@6.0.3) + '@expo/json-file': 11.0.1 + '@react-native/normalize-colors': 0.86.3 debug: 4.4.3 - expo-modules-autolinking: 56.0.16(typescript@6.0.3) + expo-modules-autolinking: 57.0.12(typescript@6.0.3) resolve-from: 5.0.0 semver: 7.8.5 transitivePeerDependencies: @@ -12648,7 +12569,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/require-utils@56.1.3(typescript@6.0.3)': + '@expo/require-utils@57.0.5(typescript@6.0.3)': dependencies: '@babel/code-frame': 7.29.7 '@babel/core': 7.29.7 @@ -12658,38 +12579,36 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/router-server@56.0.14(@expo/metro-runtime@56.0.15)(expo-constants@56.0.18)(expo-font@56.0.7)(expo-router@56.2.11)(expo-server@56.0.5)(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@expo/router-server@57.0.8(@expo/metro-runtime@57.0.14)(expo-constants@57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)))(expo-font@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(expo-server@57.0.3)(expo@57.0.18)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: debug: 4.4.3 - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) - expo-constants: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) - expo-font: 56.0.7(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - expo-server: 56.0.5 + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) + expo-constants: 57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) + expo-font: 57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + expo-server: 57.0.3 react: 19.2.3 optionalDependencies: - '@expo/metro-runtime': 56.0.15(@expo/log-box@56.0.13)(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - expo-router: 56.2.11(1d12f8130d9562de288829ccb10045a7) + '@expo/metro-runtime': 57.0.14(@expo/log-box@57.0.4)(expo@57.0.18)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) react-dom: 19.2.3(react@19.2.3) transitivePeerDependencies: - supports-color - '@expo/router-server@56.0.14(@expo/metro-runtime@56.0.15)(expo-constants@56.0.18)(expo-font@56.0.7)(expo-router@56.2.11)(expo-server@56.0.5)(expo@56.0.12)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + '@expo/router-server@57.0.8(@expo/metro-runtime@57.0.14)(expo-constants@57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)))(expo-font@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(expo-server@57.0.3)(expo@57.0.18)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: debug: 4.4.3 - expo: 56.0.12(deb8cbf3e0f411b34ba85a995c9982ba) - expo-constants: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)) - expo-font: 56.0.7(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) - expo-server: 56.0.5 + expo: 57.0.18(ecb3896f1dbe5154a21ddc585503f306) + expo-constants: 57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)) + expo-font: 57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) + expo-server: 57.0.3 react: 19.2.6 optionalDependencies: - '@expo/metro-runtime': 56.0.15(@expo/log-box@56.0.13)(expo@56.0.12)(react-dom@19.2.6(react@19.2.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) - expo-router: 56.2.11(5cef6fdc582974f4d93d5694873ec814) + '@expo/metro-runtime': 57.0.14(@expo/log-box@57.0.4)(expo@57.0.18)(react-dom@19.2.6(react@19.2.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) react-dom: 19.2.6(react@19.2.6) transitivePeerDependencies: - supports-color optional: true - '@expo/schema-utils@56.0.1': {} + '@expo/schema-utils@57.0.2': {} '@expo/sdk-runtime-versions@1.0.0': {} @@ -12699,35 +12618,17 @@ snapshots: '@expo/sudo-prompt@9.3.2': {} - '@expo/ui@56.0.18(32843e0c0883df8bccfa0b8323659df5)': + '@expo/ui@57.0.14(@babel/core@7.29.7)(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(expo@57.0.18)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)': dependencies: - expo: 56.0.12(deb8cbf3e0f411b34ba85a995c9982ba) - react: 19.2.6 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) - sf-symbols-typescript: 2.2.0 - vaul: 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - optionalDependencies: - '@babel/core': 7.29.7 - react-dom: 19.2.6(react@19.2.6) - react-native-reanimated: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) - react-native-worklets: 0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - optional: true - - '@expo/ui@56.0.18(3cdc0dde9f93166d952f1e1bd0cb25c0)': - dependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) sf-symbols-typescript: 2.2.0 vaul: 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) optionalDependencies: '@babel/core': 7.29.7 react-dom: 19.2.3(react@19.2.3) - react-native-reanimated: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - react-native-worklets: 0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + react-native-worklets: 0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) transitivePeerDependencies: - '@types/react' - '@types/react-dom' @@ -12986,13 +12887,13 @@ snapshots: dependencies: jsbi: 4.3.2 - '@legendapp/list@3.3.5(patch_hash=064530db83875fa671559a81ae42dc159726dc2dd6ec4c982da44ff7c7a74706)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)': + '@legendapp/list@3.3.5(patch_hash=064530db83875fa671559a81ae42dc159726dc2dd6ec4c982da44ff7c7a74706)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)': dependencies: react: 19.2.3 use-sync-external-store: 1.6.0(react@19.2.3) optionalDependencies: react-dom: 19.2.3(react@19.2.3) - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) '@legendapp/list@3.3.5(patch_hash=064530db83875fa671559a81ae42dc159726dc2dd6ec4c982da44ff7c7a74706)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: @@ -13643,58 +13544,18 @@ snapshots: '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.16)(react@19.2.3) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.16)(react@19.2.3) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.16)(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - optionalDependencies: - '@types/react': 19.2.16 - '@types/react-dom': 19.2.3(@types/react@19.2.16) - optional: true - - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.16)(react@19.2.6) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.16)(react@19.2.6) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.16)(react@19.2.6) - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) - optionalDependencies: - '@types/react': 19.2.16 - '@types/react-dom': 19.2.3(@types/react@19.2.16) - optional: true - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.16)(react@19.2.3)': dependencies: react: 19.2.3 optionalDependencies: '@types/react': 19.2.16 - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.16)(react@19.2.6)': - dependencies: - react: 19.2.6 - optionalDependencies: - '@types/react': 19.2.16 - optional: true - '@radix-ui/react-context@1.1.2(@types/react@19.2.16)(react@19.2.3)': dependencies: react: 19.2.3 optionalDependencies: '@types/react': 19.2.16 - '@radix-ui/react-context@1.1.2(@types/react@19.2.16)(react@19.2.6)': - dependencies: - react: 19.2.6 - optionalDependencies: - '@types/react': 19.2.16 - optional: true - '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/primitive': 1.1.3 @@ -13717,43 +13578,6 @@ snapshots: '@types/react': 19.2.16 '@types/react-dom': 19.2.3(@types/react@19.2.16) - '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.16)(react@19.2.6) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.16)(react@19.2.6) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.16)(react@19.2.6) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.16)(react@19.2.6) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.16)(react@19.2.6) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.16)(react@19.2.6) - aria-hidden: 1.2.6 - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) - react-remove-scroll: 2.7.2(@types/react@19.2.16)(react@19.2.6) - optionalDependencies: - '@types/react': 19.2.16 - '@types/react-dom': 19.2.3(@types/react@19.2.16) - optional: true - - '@radix-ui/react-direction@1.1.1(@types/react@19.2.16)(react@19.2.3)': - dependencies: - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.16 - optional: true - - '@radix-ui/react-direction@1.1.1(@types/react@19.2.16)(react@19.2.6)': - dependencies: - react: 19.2.6 - optionalDependencies: - '@types/react': 19.2.16 - optional: true - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/primitive': 1.1.3 @@ -13767,33 +13591,12 @@ snapshots: '@types/react': 19.2.16 '@types/react-dom': 19.2.3(@types/react@19.2.16) - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.16)(react@19.2.6) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.16)(react@19.2.6) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.16)(react@19.2.6) - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) - optionalDependencies: - '@types/react': 19.2.16 - '@types/react-dom': 19.2.3(@types/react@19.2.16) - optional: true - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.16)(react@19.2.3)': dependencies: react: 19.2.3 optionalDependencies: '@types/react': 19.2.16 - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.16)(react@19.2.6)': - dependencies: - react: 19.2.6 - optionalDependencies: - '@types/react': 19.2.16 - optional: true - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.16)(react@19.2.3) @@ -13805,18 +13608,6 @@ snapshots: '@types/react': 19.2.16 '@types/react-dom': 19.2.3(@types/react@19.2.16) - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.16)(react@19.2.6) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.16)(react@19.2.6) - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) - optionalDependencies: - '@types/react': 19.2.16 - '@types/react-dom': 19.2.3(@types/react@19.2.16) - optional: true - '@radix-ui/react-id@1.1.1(@types/react@19.2.16)(react@19.2.3)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.16)(react@19.2.3) @@ -13824,14 +13615,6 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 - '@radix-ui/react-id@1.1.1(@types/react@19.2.16)(react@19.2.6)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.16)(react@19.2.6) - react: 19.2.6 - optionalDependencies: - '@types/react': 19.2.16 - optional: true - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -13842,17 +13625,6 @@ snapshots: '@types/react': 19.2.16 '@types/react-dom': 19.2.3(@types/react@19.2.16) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': - dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.16)(react@19.2.6) - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) - optionalDependencies: - '@types/react': 19.2.16 - '@types/react-dom': 19.2.3(@types/react@19.2.16) - optional: true - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.16)(react@19.2.3) @@ -13863,17 +13635,6 @@ snapshots: '@types/react': 19.2.16 '@types/react-dom': 19.2.3(@types/react@19.2.16) - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.16)(react@19.2.6) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.16)(react@19.2.6) - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) - optionalDependencies: - '@types/react': 19.2.16 - '@types/react-dom': 19.2.3(@types/react@19.2.16) - optional: true - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/react-slot': 1.2.3(@types/react@19.2.16)(react@19.2.3) @@ -13883,52 +13644,6 @@ snapshots: '@types/react': 19.2.16 '@types/react-dom': 19.2.3(@types/react@19.2.16) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': - dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.16)(react@19.2.6) - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) - optionalDependencies: - '@types/react': 19.2.16 - '@types/react-dom': 19.2.3(@types/react@19.2.16) - optional: true - - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.16)(react@19.2.3) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.16)(react@19.2.3) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.16)(react@19.2.3) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.16)(react@19.2.3) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.16)(react@19.2.3) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.16)(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - optionalDependencies: - '@types/react': 19.2.16 - '@types/react-dom': 19.2.3(@types/react@19.2.16) - optional: true - - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.16)(react@19.2.6) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.16)(react@19.2.6) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.16)(react@19.2.6) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.16)(react@19.2.6) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.16)(react@19.2.6) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.16)(react@19.2.6) - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) - optionalDependencies: - '@types/react': 19.2.16 - '@types/react-dom': 19.2.3(@types/react@19.2.16) - optional: true - '@radix-ui/react-slot@1.2.3(@types/react@19.2.16)(react@19.2.3)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.16)(react@19.2.3) @@ -13936,77 +13651,12 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 - '@radix-ui/react-slot@1.2.3(@types/react@19.2.16)(react@19.2.6)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.16)(react@19.2.6) - react: 19.2.6 - optionalDependencies: - '@types/react': 19.2.16 - optional: true - - '@radix-ui/react-slot@1.2.4(@types/react@19.2.16)(react@19.2.3)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.16)(react@19.2.3) - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.16 - optional: true - - '@radix-ui/react-slot@1.2.4(@types/react@19.2.16)(react@19.2.6)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.16)(react@19.2.6) - react: 19.2.6 - optionalDependencies: - '@types/react': 19.2.16 - optional: true - - '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.16)(react@19.2.3) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.16)(react@19.2.3) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.16)(react@19.2.3) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.16)(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - optionalDependencies: - '@types/react': 19.2.16 - '@types/react-dom': 19.2.3(@types/react@19.2.16) - optional: true - - '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.16)(react@19.2.6) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.16)(react@19.2.6) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.16)(react@19.2.6) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.16)(react@19.2.6) - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) - optionalDependencies: - '@types/react': 19.2.16 - '@types/react-dom': 19.2.3(@types/react@19.2.16) - optional: true - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.16)(react@19.2.3)': dependencies: react: 19.2.3 optionalDependencies: '@types/react': 19.2.16 - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.16)(react@19.2.6)': - dependencies: - react: 19.2.6 - optionalDependencies: - '@types/react': 19.2.16 - optional: true - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.16)(react@19.2.3)': dependencies: '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.16)(react@19.2.3) @@ -14015,15 +13665,6 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.16)(react@19.2.6)': - dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.16)(react@19.2.6) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.16)(react@19.2.6) - react: 19.2.6 - optionalDependencies: - '@types/react': 19.2.16 - optional: true - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.16)(react@19.2.3)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.16)(react@19.2.3) @@ -14031,14 +13672,6 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.16)(react@19.2.6)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.16)(react@19.2.6) - react: 19.2.6 - optionalDependencies: - '@types/react': 19.2.16 - optional: true - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.16)(react@19.2.3)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.16)(react@19.2.3) @@ -14046,27 +13679,12 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.16)(react@19.2.6)': - dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.16)(react@19.2.6) - react: 19.2.6 - optionalDependencies: - '@types/react': 19.2.16 - optional: true - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.16)(react@19.2.3)': dependencies: react: 19.2.3 optionalDependencies: '@types/react': 19.2.16 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.16)(react@19.2.6)': - dependencies: - react: 19.2.6 - optionalDependencies: - '@types/react': 19.2.16 - optional: true - '@react-grab/cli@0.1.44': dependencies: agent-install: 0.0.5 @@ -14078,34 +13696,28 @@ snapshots: prompts: 2.4.2 tinyexec: 1.2.4 - '@react-native-masked-view/masked-view@0.3.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)': + '@react-native-masked-view/masked-view@0.3.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)': dependencies: react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) optional: true - '@react-native-masked-view/masked-view@0.3.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)': - dependencies: - react: 19.2.6 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) - optional: true - - '@react-native-menu/menu@2.0.0(patch_hash=c7f66d121c726ade4f5c4e1aed11a691e5711d244c544084e289ac26132a0045)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)': + '@react-native-menu/menu@2.0.0(patch_hash=c7f66d121c726ade4f5c4e1aed11a691e5711d244c544084e289ac26132a0045)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)': dependencies: react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - '@react-native/assets-registry@0.85.3': {} + '@react-native/assets-registry@0.86.3': {} - '@react-native/babel-plugin-codegen@0.85.3(@babel/core@7.29.7)': + '@react-native/babel-plugin-codegen@0.86.3(@babel/core@7.29.7)': dependencies: '@babel/traverse': 7.29.7 - '@react-native/codegen': 0.85.3(@babel/core@7.29.7) + '@react-native/codegen': 0.86.3(@babel/core@7.29.7) transitivePeerDependencies: - '@babel/core' - supports-color - '@react-native/babel-preset@0.85.3(@babel/core@7.29.7)': + '@react-native/babel-preset@0.86.3(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 '@babel/plugin-proposal-export-default-from': 7.29.7(@babel/core@7.29.7) @@ -14136,26 +13748,26 @@ snapshots: '@babel/plugin-transform-runtime': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-unicode-regex': 7.29.7(@babel/core@7.29.7) - '@react-native/babel-plugin-codegen': 0.85.3(@babel/core@7.29.7) - babel-plugin-syntax-hermes-parser: 0.33.3 + '@react-native/babel-plugin-codegen': 0.86.3(@babel/core@7.29.7) + babel-plugin-syntax-hermes-parser: 0.36.0 babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.29.7) react-refresh: 0.14.2 transitivePeerDependencies: - supports-color - '@react-native/codegen@0.85.3(@babel/core@7.29.7)': + '@react-native/codegen@0.86.3(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 '@babel/parser': 7.29.7 - hermes-parser: 0.33.3 + hermes-parser: 0.36.0 invariant: 2.2.4 nullthrows: 1.1.1 tinyglobby: 0.2.17 yargs: 17.7.2 - '@react-native/community-cli-plugin@0.85.3(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(bufferutil@4.1.0)(utf-8-validate@6.0.6)': + '@react-native/community-cli-plugin@0.86.3(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(bufferutil@4.1.0)(utf-8-validate@6.0.6)': dependencies: - '@react-native/dev-middleware': 0.85.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) + '@react-native/dev-middleware': 0.86.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) debug: 4.4.3 invariant: 2.2.4 metro: 0.84.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) @@ -14163,15 +13775,15 @@ snapshots: metro-core: 0.84.4 semver: 7.8.5 optionalDependencies: - '@react-native/metro-config': 0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6) + '@react-native/metro-config': 0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6) transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - '@react-native/debugger-frontend@0.85.3': {} + '@react-native/debugger-frontend@0.86.3': {} - '@react-native/debugger-shell@0.85.3': + '@react-native/debugger-shell@0.86.3': dependencies: cross-spawn: 7.0.6 debug: 4.4.3 @@ -14179,11 +13791,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@react-native/dev-middleware@0.85.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)': + '@react-native/dev-middleware@0.86.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)': dependencies: '@isaacs/ttlcache': 1.4.1 - '@react-native/debugger-frontend': 0.85.3 - '@react-native/debugger-shell': 0.85.3 + '@react-native/debugger-frontend': 0.86.3 + '@react-native/debugger-shell': 0.86.3 chrome-launcher: 0.15.2 chromium-edge-launcher: 0.3.0 connect: 3.7.0 @@ -14198,48 +13810,48 @@ snapshots: - supports-color - utf-8-validate - '@react-native/gradle-plugin@0.85.3(patch_hash=c1b594a16e682d621b6a960926f8ce13fc92edfb397884cfe7fcb0518996a784)': {} + '@react-native/gradle-plugin@0.86.3': {} - '@react-native/js-polyfills@0.85.3': {} + '@react-native/js-polyfills@0.86.3': {} - '@react-native/metro-babel-transformer@0.85.3(@babel/core@7.29.7)': + '@react-native/metro-babel-transformer@0.86.3(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@react-native/babel-preset': 0.85.3(@babel/core@7.29.7) - hermes-parser: 0.33.3 + '@react-native/babel-preset': 0.86.3(@babel/core@7.29.7) + hermes-parser: 0.36.0 nullthrows: 1.1.1 transitivePeerDependencies: - supports-color - '@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6)': + '@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6)': dependencies: - '@react-native/js-polyfills': 0.85.3 - '@react-native/metro-babel-transformer': 0.85.3(@babel/core@7.29.7) - metro-config: 0.84.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) - metro-runtime: 0.84.4 + '@react-native/js-polyfills': 0.86.3 + '@react-native/metro-babel-transformer': 0.86.3(@babel/core@7.29.7) + metro-config: 0.84.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) + metro-runtime: 0.84.5 transitivePeerDependencies: - '@babel/core' - bufferutil - supports-color - utf-8-validate - '@react-native/normalize-colors@0.85.3': {} + '@react-native/normalize-colors@0.86.3': {} - '@react-native/virtualized-lists@0.85.3(@types/react@19.2.16)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)': + '@react-native/virtualized-lists@0.86.3(@types/react@19.2.16)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) optionalDependencies: '@types/react': 19.2.16 - '@react-native/virtualized-lists@0.85.3(@types/react@19.2.16)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)': + '@react-native/virtualized-lists@0.86.3(@types/react@19.2.16)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 19.2.6 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) optionalDependencies: '@types/react': 19.2.16 optional: true @@ -14256,40 +13868,40 @@ 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.26(c6a2ad0e2c930f8e3896e77c3ba11bc4)': + '@react-navigation/elements@2.9.26(c10301b6e0c42fc6434d2b643197a81e)': dependencies: - '@react-navigation/native': 7.3.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + '@react-navigation/native': 7.3.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) color: 4.2.3 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - react-native-safe-area-context: 5.7.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native-safe-area-context: 5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(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) optionalDependencies: - '@react-native-masked-view/masked-view': 0.3.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + '@react-native-masked-view/masked-view': 0.3.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - '@react-navigation/native-stack@7.17.6(patch_hash=e667c3cef8c78bb9ff4882ee5bd23a432247b843060a9499eb5f07e9e2295552)(8effe605a545f8a17acafbaed58f0e86)': + '@react-navigation/native-stack@7.17.6(patch_hash=e667c3cef8c78bb9ff4882ee5bd23a432247b843060a9499eb5f07e9e2295552)(df02ad16d8d764efad8e903a73894296)': dependencies: - '@react-navigation/elements': 2.9.26(c6a2ad0e2c930f8e3896e77c3ba11bc4) - '@react-navigation/native': 7.3.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + '@react-navigation/elements': 2.9.26(c10301b6e0c42fc6434d2b643197a81e) + '@react-navigation/native': 7.3.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) color: 4.2.3 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - react-native-safe-area-context: 5.7.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - react-native-screens: 4.25.2(patch_hash=7474c207dfb4c474b90901a53afa13a8c869a185518d6fbe907686dc4439056e)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native-safe-area-context: 5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + react-native-screens: 4.26.2(patch_hash=11566900d0c90514867ede5a2333ba412ab3b5a532ba1955e6306fff8b12de1a)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(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.3.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)': + '@react-navigation/native@7.3.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)': dependencies: '@react-navigation/core': 7.21.2(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.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) standard-navigation: 0.0.7 use-latest-callback: 0.2.6(react@19.2.3) @@ -14629,25 +14241,25 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@t3tools/mobile-markdown-text@file:apps/mobile/modules/t3-markdown-text(ed3009b8f2424467288a00b38bef28fe)': + '@t3tools/mobile-markdown-text@file:apps/mobile/modules/t3-markdown-text(8819e1ff552fc19b333a2dfaf02d39db)': dependencies: - expo-asset: 56.0.17(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3) - expo-clipboard: 56.0.4(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - expo-haptics: 56.0.3(expo@56.0.12) - expo-symbols: 56.0.6(expo-font@56.0.7)(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + expo-asset: 57.0.15(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3) + expo-clipboard: 57.0.1(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + expo-haptics: 57.0.2(expo@57.0.18) + expo-symbols: 57.0.2(expo-font@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - react-native-nitro-markdown: 0.5.8(react-native-nitro-modules@0.35.9(patch_hash=825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native-nitro-markdown: 0.5.8(react-native-nitro-modules@0.35.9(patch_hash=825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) '@t3tools/mobile-review-diff-native@file:apps/mobile/modules/t3-review-diff': {} '@t3tools/mobile-terminal-native@file:apps/mobile/modules/t3-terminal': {} - '@tabler/icons-react-native@3.44.0(react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react@19.2.3)': + '@tabler/icons-react-native@3.44.0(react-native-svg@15.15.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react@19.2.3)': dependencies: '@tabler/icons': 3.44.0 react: 19.2.3 - react-native-svg: 15.15.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + react-native-svg: 15.15.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) '@tabler/icons@3.44.0': {} @@ -14893,16 +14505,6 @@ snapshots: picocolors: 1.1.1 pretty-format: 27.5.1 - '@testing-library/jest-dom@6.9.1': - dependencies: - '@adobe/css-tools': 4.5.0 - aria-query: 5.3.2 - css.escape: 1.5.1 - dom-accessibility-api: 0.6.3 - picocolors: 1.1.1 - redent: 3.0.0 - optional: true - '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': dependencies: '@testing-library/dom': 10.4.1 @@ -15378,6 +14980,8 @@ snapshots: agent-base@7.1.4: {} + agent-cli-detector@0.1.6: {} + agent-install@0.0.5: dependencies: '@iarna/toml': 2.2.5 @@ -15419,7 +15023,7 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - alchemy@2.0.0-beta.65(75567d8add6e3362e26fe00f83a97bee): + alchemy@2.0.0-beta.65(00c448ade6580e73d10ccfe1b32cee97): dependencies: '@alchemy.run/node-utils': 0.0.5 '@aws-sdk/credential-providers': 3.1062.0 @@ -15464,7 +15068,7 @@ snapshots: '@effect/platform-node': 4.0.0-beta.103(bufferutil@4.1.0)(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6))(ioredis@5.11.0)(utf-8-validate@6.0.6) '@effect/sql-pg': 4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6)) drizzle-kit: 1.0.0-rc.4 - drizzle-orm: 1.0.0-rc.4(@cloudflare/workers-types@4.20260604.1)(@effect/sql-d1@4.0.0-beta.101(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6)))(@effect/sql-pg@4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6)))(@effect/sql-sqlite-bun@4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6)))(@libsql/client@0.17.3(bufferutil@4.1.0)(utf-8-validate@6.0.6))(bun-types@1.3.14)(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6))(expo-sqlite@56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(mysql2@3.22.4(@types/node@24.12.4))(pg@8.21.0)(zod@4.4.3) + drizzle-orm: 1.0.0-rc.4(@cloudflare/workers-types@4.20260604.1)(@effect/sql-d1@4.0.0-beta.101(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6)))(@effect/sql-pg@4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6)))(@effect/sql-sqlite-bun@4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6)))(@libsql/client@0.17.3(bufferutil@4.1.0)(utf-8-validate@6.0.6))(bun-types@1.3.14)(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6))(expo-sqlite@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(mysql2@3.22.4(@types/node@24.12.4))(pg@8.21.0)(zod@4.4.3) vite: '@voidzero-dev/vite-plus-core@0.2.2(@types/node@24.12.4)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(typescript@6.0.3)(unrun@0.2.39)(yaml@2.9.0)' ws: 8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) transitivePeerDependencies: @@ -15762,9 +15366,13 @@ snapshots: babel-plugin-react-native-web@0.21.2: {} - babel-plugin-syntax-hermes-parser@0.33.3: + babel-plugin-syntax-hermes-parser@0.36.0: dependencies: - hermes-parser: 0.33.3 + hermes-parser: 0.36.0 + + babel-plugin-syntax-hermes-parser@0.36.1: + dependencies: + hermes-parser: 0.36.1 babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.29.7): dependencies: @@ -15772,7 +15380,7 @@ snapshots: transitivePeerDependencies: - '@babel/core' - babel-preset-expo@56.0.14(@babel/core@7.29.7)(@babel/runtime@7.29.7)(expo-widgets@56.0.19)(expo@56.0.12)(react-refresh@0.14.2): + babel-preset-expo@57.0.9(@babel/core@7.29.7)(@babel/runtime@7.29.7)(expo-widgets@57.0.15)(expo@57.0.18)(react-refresh@0.14.2): dependencies: '@babel/generator': 7.29.7 '@babel/helper-module-imports': 7.29.7 @@ -15810,70 +15418,17 @@ snapshots: '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-unicode-regex': 7.29.7(@babel/core@7.29.7) '@babel/preset-typescript': 7.29.7(@babel/core@7.29.7) - '@react-native/babel-plugin-codegen': 0.85.3(@babel/core@7.29.7) + '@react-native/babel-plugin-codegen': 0.86.3(@babel/core@7.29.7) babel-plugin-react-compiler: 1.0.0 babel-plugin-react-native-web: 0.21.2 - babel-plugin-syntax-hermes-parser: 0.33.3 + babel-plugin-syntax-hermes-parser: 0.36.1 babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.29.7) debug: 4.4.3 react-refresh: 0.14.2 optionalDependencies: '@babel/runtime': 7.29.7 - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) - expo-widgets: 56.0.19(3cdc0dde9f93166d952f1e1bd0cb25c0) - transitivePeerDependencies: - - '@babel/core' - - supports-color - - babel-preset-expo@56.0.15(@babel/core@7.29.7)(@babel/runtime@7.29.7)(expo-widgets@56.0.19)(expo@56.0.12)(react-refresh@0.14.2): - dependencies: - '@babel/generator': 7.29.7 - '@babel/helper-module-imports': 7.29.7 - '@babel/plugin-proposal-decorators': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-proposal-export-default-from': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.7) - '@babel/plugin-syntax-export-default-from': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.7) - '@babel/plugin-transform-async-generator-functions': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-async-to-generator': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-block-scoping': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-class-properties': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-class-static-block': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-classes': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-export-namespace-from': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-flow-strip-types': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-for-of': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-logical-assignment-operators': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-named-capturing-groups-regex': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-nullish-coalescing-operator': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-object-rest-spread': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-optional-catch-binding': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-private-methods': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-private-property-in-object': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-react-display-name': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.7) - '@babel/plugin-transform-react-jsx-development': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-react-pure-annotations': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-runtime': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-unicode-regex': 7.29.7(@babel/core@7.29.7) - '@babel/preset-typescript': 7.29.7(@babel/core@7.29.7) - '@react-native/babel-plugin-codegen': 0.85.3(@babel/core@7.29.7) - babel-plugin-react-compiler: 1.0.0 - babel-plugin-react-native-web: 0.21.2 - babel-plugin-syntax-hermes-parser: 0.33.3 - babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.29.7) - debug: 4.4.3 - react-refresh: 0.14.2 - optionalDependencies: - '@babel/runtime': 7.29.7 - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) - expo-widgets: 56.0.19(3cdc0dde9f93166d952f1e1bd0cb25c0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) + expo-widgets: 57.0.15(@babel/core@7.29.7)(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(expo@57.0.18)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) transitivePeerDependencies: - '@babel/core' - supports-color @@ -16149,9 +15704,6 @@ snapshots: cli-width@4.1.0: {} - client-only@0.0.1: - optional: true - cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -16337,9 +15889,6 @@ snapshots: css-what@6.2.2: {} - css.escape@1.5.1: - optional: true - csso@5.0.5: dependencies: css-tree: 2.2.1 @@ -16448,9 +15997,6 @@ snapshots: dom-accessibility-api@0.5.16: {} - dom-accessibility-api@0.6.3: - optional: true - dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 @@ -16487,7 +16033,7 @@ snapshots: get-tsconfig: 4.14.0 jiti: 2.7.0 - drizzle-orm@1.0.0-rc.4(@cloudflare/workers-types@4.20260604.1)(@effect/sql-d1@4.0.0-beta.101(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6)))(@effect/sql-pg@4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6)))(@effect/sql-sqlite-bun@4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6)))(@libsql/client@0.17.3(bufferutil@4.1.0)(utf-8-validate@6.0.6))(bun-types@1.3.14)(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6))(expo-sqlite@56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(mysql2@3.22.4(@types/node@24.12.4))(pg@8.21.0)(zod@4.4.3): + drizzle-orm@1.0.0-rc.4(@cloudflare/workers-types@4.20260604.1)(@effect/sql-d1@4.0.0-beta.101(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6)))(@effect/sql-pg@4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6)))(@effect/sql-sqlite-bun@4.0.0-beta.103(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6)))(@libsql/client@0.17.3(bufferutil@4.1.0)(utf-8-validate@6.0.6))(bun-types@1.3.14)(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6))(expo-sqlite@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(mysql2@3.22.4(@types/node@24.12.4))(pg@8.21.0)(zod@4.4.3): optionalDependencies: '@cloudflare/workers-types': 4.20260604.1 '@effect/sql-d1': 4.0.0-beta.101(effect@4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6)) @@ -16496,7 +16042,7 @@ snapshots: '@libsql/client': 0.17.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) bun-types: 1.3.14 effect: 4.0.0-beta.103(patch_hash=af36b7948b6f9c56623074662b51dade5699880c1a7c71245de73e13c3185fb6) - expo-sqlite: 56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) + expo-sqlite: 57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) mysql2: 3.22.4(@types/node@24.12.4) pg: 8.21.0 zod: 4.4.3 @@ -16763,233 +16309,215 @@ snapshots: expect-type@1.4.0: {} - expo-application@56.0.3(expo@56.0.12): + expo-application@57.0.2(expo@57.0.18): dependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) - expo-asset@56.0.17(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3): + expo-asset@57.0.15(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3): dependencies: - '@expo/image-utils': 0.10.1(typescript@6.0.3) - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) - expo-constants: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) + '@expo/image-utils': 0.11.5(typescript@6.0.3) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) + expo-constants: 57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) transitivePeerDependencies: - supports-color - typescript - expo-asset@56.0.17(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)(typescript@6.0.3): + expo-asset@57.0.15(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)(typescript@6.0.3): dependencies: - '@expo/image-utils': 0.10.1(typescript@6.0.3) - expo: 56.0.12(deb8cbf3e0f411b34ba85a995c9982ba) - expo-constants: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)) + '@expo/image-utils': 0.11.5(typescript@6.0.3) + expo: 57.0.18(ecb3896f1dbe5154a21ddc585503f306) + expo-constants: 57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)) react: 19.2.6 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) transitivePeerDependencies: - supports-color - typescript optional: true - expo-auth-session@56.0.14(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + expo-auth-session@57.0.10(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: - expo-application: 56.0.3(expo@56.0.12) - expo-constants: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) - expo-crypto: 56.0.4(expo@56.0.12) - expo-linking: 56.0.14(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - expo-web-browser: 56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) + expo-application: 57.0.2(expo@57.0.18) + expo-constants: 57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) + expo-crypto: 57.0.2(expo@57.0.18) + expo-linking: 57.0.8(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + expo-web-browser: 57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) invariant: 2.2.4 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) transitivePeerDependencies: - expo - supports-color - expo-blur@56.0.3(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + expo-blur@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - expo-build-properties@56.0.19(expo@56.0.12): + expo-build-properties@57.0.15(expo@57.0.18): dependencies: - '@expo/schema-utils': 56.0.1 - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + '@expo/schema-utils': 57.0.2 + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) resolve-from: 5.0.0 semver: 7.8.5 - expo-camera@56.0.8(@types/emscripten@1.41.5)(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + expo-camera@57.0.4(@types/emscripten@1.41.5)(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: barcode-detector: 3.2.0(@types/emscripten@1.41.5) - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) transitivePeerDependencies: - '@types/emscripten' - expo-clipboard@56.0.4(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + expo-clipboard@57.0.1(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - expo-constants@56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)): + expo-constants@57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)): dependencies: - '@expo/env': 2.3.0 - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + '@expo/env': 2.4.3 + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) transitivePeerDependencies: - supports-color - expo-constants@56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)): + expo-constants@57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)): dependencies: - '@expo/env': 2.3.0 - expo: 56.0.12(deb8cbf3e0f411b34ba85a995c9982ba) - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) + '@expo/env': 2.4.3 + expo: 57.0.18(ecb3896f1dbe5154a21ddc585503f306) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) transitivePeerDependencies: - supports-color optional: true - expo-crypto@56.0.4(expo@56.0.12): + expo-crypto@57.0.2(expo@57.0.18): dependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) - expo-dev-client@56.0.20(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)): + expo-dev-client@57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)): dependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) - expo-dev-launcher: 56.0.20(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) - expo-dev-menu: 56.0.17(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) - expo-dev-menu-interface: 56.0.1(expo@56.0.12) - expo-manifests: 56.0.4(expo@56.0.12) - expo-updates-interface: 56.0.2(expo@56.0.12) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) + expo-dev-launcher: 57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) + expo-dev-menu: 57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) + expo-dev-menu-interface: 57.0.0(expo@57.0.18) + expo-manifests: 57.0.1(expo@57.0.18) + expo-updates-interface: 57.0.1(expo@57.0.18) transitivePeerDependencies: - react-native - expo-dev-launcher@56.0.20(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)): + expo-dev-launcher@57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)): dependencies: - '@expo/schema-utils': 56.0.1 - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) - expo-dev-menu: 56.0.17(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) - expo-manifests: 56.0.4(expo@56.0.12) - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + '@expo/schema-utils': 57.0.2 + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) + expo-dev-menu: 57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) + expo-manifests: 57.0.1(expo@57.0.18) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - expo-dev-menu-interface@56.0.1(expo@56.0.12): + expo-dev-menu-interface@57.0.0(expo@57.0.18): dependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) - expo-dev-menu@56.0.17(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)): + expo-dev-menu@57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)): dependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) - expo-dev-menu-interface: 56.0.1(expo@56.0.12) - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) + expo-dev-menu-interface: 57.0.0(expo@57.0.18) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - expo-device@56.0.4(expo@56.0.12): + expo-device@57.0.1(expo@57.0.18): dependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) ua-parser-js: 0.7.41 - expo-eas-client@56.0.1: {} + expo-eas-client@57.0.2: {} - expo-file-system@56.0.8(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)): + expo-file-system@57.0.6(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)): dependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - expo-file-system@56.0.8(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)): + expo-file-system@57.0.6(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)): dependencies: - expo: 56.0.12(deb8cbf3e0f411b34ba85a995c9982ba) - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) + expo: 57.0.18(ecb3896f1dbe5154a21ddc585503f306) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) optional: true - expo-font@56.0.7(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + expo-font@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) fontfaceobserver: 2.3.0 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - expo-font@56.0.7(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6): + expo-font@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6): dependencies: - expo: 56.0.12(deb8cbf3e0f411b34ba85a995c9982ba) + expo: 57.0.18(ecb3896f1dbe5154a21ddc585503f306) fontfaceobserver: 2.3.0 react: 19.2.6 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) optional: true - expo-glass-effect@56.0.4(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + expo-glass-effect@57.0.1(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - expo-glass-effect@56.0.4(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6): + expo-haptics@57.0.2(expo@57.0.18): dependencies: - expo: 56.0.12(deb8cbf3e0f411b34ba85a995c9982ba) - react: 19.2.6 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) - optional: true - - expo-haptics@56.0.3(expo@56.0.12): - dependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) - expo-image-loader@56.0.3(expo@56.0.12): + expo-image-loader@57.0.1(expo@57.0.18): dependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) - expo-image-picker@56.0.18(expo@56.0.12): + expo-image-picker@57.0.14(expo@57.0.18): dependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) - expo-image-loader: 56.0.3(expo@56.0.12) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) + expo-image-loader: 57.0.1(expo@57.0.18) - expo-image@56.0.11(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + expo-image@57.0.3(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) sf-symbols-typescript: 2.2.0 - expo-json-utils@56.0.0: {} + expo-json-utils@57.0.1: {} - expo-keep-awake@56.0.3(expo@56.0.12)(react@19.2.3): + expo-keep-awake@57.0.1(expo@57.0.18)(react@19.2.3): dependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) react: 19.2.3 - expo-keep-awake@56.0.3(expo@56.0.12)(react@19.2.6): + expo-keep-awake@57.0.1(expo@57.0.18)(react@19.2.6): dependencies: - expo: 56.0.12(deb8cbf3e0f411b34ba85a995c9982ba) + expo: 57.0.18(ecb3896f1dbe5154a21ddc585503f306) react: 19.2.6 optional: true - expo-linking@56.0.14(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + expo-linking@57.0.8(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: - expo-constants: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) + expo-constants: 57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) invariant: 2.2.4 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) transitivePeerDependencies: - expo - supports-color - expo-linking@56.0.14(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6): + expo-manifests@57.0.1(expo@57.0.18): dependencies: - expo-constants: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)) - invariant: 2.2.4 - react: 19.2.6 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) - transitivePeerDependencies: - - expo - - supports-color - optional: true - - expo-manifests@56.0.4(expo@56.0.12): - dependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) - expo-json-utils: 56.0.0 + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) + expo-json-utils: 57.0.1 - expo-modules-autolinking@56.0.16(typescript@6.0.3): + expo-modules-autolinking@57.0.12(typescript@6.0.3): dependencies: - '@expo/require-utils': 56.1.3(typescript@6.0.3) + '@expo/require-utils': 57.0.5(typescript@6.0.3) '@expo/spawn-async': 1.8.0 chalk: 4.1.2 commander: 7.2.0 @@ -16997,359 +16525,204 @@ snapshots: - supports-color - typescript - expo-modules-core@56.0.17(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + expo-modules-core@57.0.14(react-native-worklets@0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: - '@expo/expo-modules-macros-plugin': 0.2.2 - expo-modules-jsi: 56.0.10(patch_hash=9170f8074ae4e35a0a086e756c8f815794fd3abe51eac67ca3ba02804225ec1f)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) + '@expo/expo-modules-macros-plugin': 0.6.1 + expo-modules-jsi: 57.0.6(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) invariant: 2.2.4 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) optionalDependencies: - react-native-worklets: 0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + react-native-worklets: 0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - expo-modules-core@56.0.17(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6): + expo-modules-core@57.0.14(react-native-worklets@0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6): dependencies: - '@expo/expo-modules-macros-plugin': 0.2.2 - expo-modules-jsi: 56.0.10(patch_hash=9170f8074ae4e35a0a086e756c8f815794fd3abe51eac67ca3ba02804225ec1f)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)) + '@expo/expo-modules-macros-plugin': 0.6.1 + expo-modules-jsi: 57.0.6(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)) invariant: 2.2.4 react: 19.2.6 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) optionalDependencies: - react-native-worklets: 0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) + react-native-worklets: 0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) optional: true - expo-modules-jsi@56.0.10(patch_hash=9170f8074ae4e35a0a086e756c8f815794fd3abe51eac67ca3ba02804225ec1f)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)): + expo-modules-jsi@57.0.6(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)): dependencies: - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - expo-modules-jsi@56.0.10(patch_hash=9170f8074ae4e35a0a086e756c8f815794fd3abe51eac67ca3ba02804225ec1f)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)): + expo-modules-jsi@57.0.6(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)): dependencies: - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) optional: true - expo-network@56.0.5(expo@56.0.12)(react@19.2.3): + expo-network@57.0.1(expo@57.0.18)(react@19.2.3): dependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) react: 19.2.3 - expo-notifications@56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3): + expo-notifications@57.0.15(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3): dependencies: - '@expo/image-utils': 0.10.1(typescript@6.0.3) + '@expo/image-utils': 0.11.5(typescript@6.0.3) abort-controller: 3.0.0 badgin: 1.2.3 - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) - expo-application: 56.0.3(expo@56.0.12) - expo-constants: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) + expo-application: 57.0.2(expo@57.0.18) + expo-constants: 57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) transitivePeerDependencies: - supports-color - typescript - expo-paste-input@0.1.15(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + expo-paste-input@0.1.15(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - expo-quick-actions@6.0.2(expo@56.0.12)(typescript@6.0.3): + expo-quick-actions@6.0.2(expo@57.0.18)(typescript@6.0.3): dependencies: '@expo/image-utils': 0.8.14(typescript@6.0.3) - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) schema-utils: 4.3.3 sf-symbols-typescript: 2.2.0 transitivePeerDependencies: - supports-color - typescript - expo-router@56.2.11(1d12f8130d9562de288829ccb10045a7): + expo-secure-store@57.0.2(expo@57.0.18): dependencies: - '@expo/log-box': 56.0.13(@expo/dom-webview@56.0.5)(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - '@expo/metro-runtime': 56.0.15(@expo/log-box@56.0.13)(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - '@expo/schema-utils': 56.0.1 - '@expo/ui': 56.0.18(3cdc0dde9f93166d952f1e1bd0cb25c0) - '@radix-ui/react-slot': 1.2.4(@types/react@19.2.16)(react@19.2.3) - '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-native-masked-view/masked-view': 0.3.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - '@testing-library/jest-dom': 6.9.1 - '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) - client-only: 0.0.1 - color: 4.2.3 - debug: 4.4.3 - escape-string-regexp: 4.0.0 - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) - expo-constants: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) - expo-glass-effect: 56.0.4(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - expo-linking: 56.0.14(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - expo-server: 56.0.5 - expo-symbols: 56.0.6(expo-font@56.0.7)(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - fast-deep-equal: 3.1.3 - invariant: 2.2.4 - nanoid: 3.3.12 - query-string: 7.1.3 - react: 19.2.3 - react-fast-compare: 3.2.2 - react-is: 19.2.7 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - react-native-drawer-layout: 4.2.4(05364bd849de538917a7364cc7dee3f5) - react-native-safe-area-context: 5.7.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - react-native-screens: 4.25.2(patch_hash=7474c207dfb4c474b90901a53afa13a8c869a185518d6fbe907686dc4439056e)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - server-only: 0.0.1 - sf-symbols-typescript: 2.2.0 - shallowequal: 1.1.0 - standard-navigation: 0.0.5 - vaul: 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - optionalDependencies: - react-dom: 19.2.3(react@19.2.3) - react-native-gesture-handler: 2.31.2(patch_hash=808eb26f9e57cf4945efd3985af4d9c764da6f91f4c9764433cc868602bbf4d3)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - react-native-reanimated: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - transitivePeerDependencies: - - '@babel/core' - - '@testing-library/dom' - - '@types/react' - - '@types/react-dom' - - expo-font - - react-native-worklets - - supports-color - optional: true - - expo-router@56.2.11(5cef6fdc582974f4d93d5694873ec814): - dependencies: - '@expo/log-box': 56.0.13(@expo/dom-webview@56.0.5)(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) - '@expo/metro-runtime': 56.0.15(@expo/log-box@56.0.13)(expo@56.0.12)(react-dom@19.2.6(react@19.2.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) - '@expo/schema-utils': 56.0.1 - '@expo/ui': 56.0.18(32843e0c0883df8bccfa0b8323659df5) - '@radix-ui/react-slot': 1.2.4(@types/react@19.2.16)(react@19.2.6) - '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@react-native-masked-view/masked-view': 0.3.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) - '@testing-library/jest-dom': 6.9.1 - '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) - client-only: 0.0.1 - color: 4.2.3 - debug: 4.4.3 - escape-string-regexp: 4.0.0 - expo: 56.0.12(deb8cbf3e0f411b34ba85a995c9982ba) - expo-constants: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)) - expo-glass-effect: 56.0.4(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) - expo-linking: 56.0.14(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) - expo-server: 56.0.5 - expo-symbols: 56.0.6(expo-font@56.0.7)(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) - fast-deep-equal: 3.1.3 - invariant: 2.2.4 - nanoid: 3.3.12 - query-string: 7.1.3 - react: 19.2.6 - react-fast-compare: 3.2.2 - react-is: 19.2.7 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) - react-native-drawer-layout: 4.2.4(de9b2f2dc96a3557fdc0df187a8417ee) - react-native-safe-area-context: 5.7.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) - react-native-screens: 4.25.2(patch_hash=7474c207dfb4c474b90901a53afa13a8c869a185518d6fbe907686dc4439056e)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) - server-only: 0.0.1 - sf-symbols-typescript: 2.2.0 - shallowequal: 1.1.0 - standard-navigation: 0.0.5 - vaul: 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - optionalDependencies: - react-dom: 19.2.6(react@19.2.6) - react-native-gesture-handler: 2.31.2(patch_hash=808eb26f9e57cf4945efd3985af4d9c764da6f91f4c9764433cc868602bbf4d3)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) - react-native-reanimated: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) - transitivePeerDependencies: - - '@babel/core' - - '@testing-library/dom' - - '@types/react' - - '@types/react-dom' - - expo-font - - react-native-worklets - - supports-color - optional: true - - expo-secure-store@56.0.4(expo@56.0.12): - dependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) - expo-server@56.0.5: {} + expo-server@57.0.3: {} - expo-sharing@56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3): + expo-sharing@57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3): dependencies: - '@expo/config-plugins': 56.0.9(typescript@6.0.3) - '@expo/config-types': 56.0.6 - '@expo/plist': 0.7.0 - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + '@expo/config-plugins': 57.0.9(typescript@6.0.3) + '@expo/config-types': 57.0.2 + '@expo/plist': 0.8.1 + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) transitivePeerDependencies: - supports-color - typescript - expo-splash-screen@56.0.10(expo@56.0.12)(typescript@6.0.3): + expo-splash-screen@57.0.8(expo@57.0.18)(typescript@6.0.3): dependencies: - '@expo/config-plugins': 56.0.9(typescript@6.0.3) - '@expo/image-utils': 0.10.1(typescript@6.0.3) - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + '@expo/config-plugins': 57.0.9(typescript@6.0.3) + '@expo/image-utils': 0.11.5(typescript@6.0.3) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) xml2js: 0.6.0 transitivePeerDependencies: - supports-color - typescript - expo-sqlite@56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + expo-sqlite@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: await-lock: 2.2.2 - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - expo-sqlite@56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6): + expo-sqlite@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6): dependencies: await-lock: 2.2.2 - expo: 56.0.12(deb8cbf3e0f411b34ba85a995c9982ba) + expo: 57.0.18(ecb3896f1dbe5154a21ddc585503f306) react: 19.2.6 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) optional: true - expo-structured-headers@56.0.0: {} + expo-structured-headers@57.0.0: {} - expo-symbols@56.0.6(expo-font@56.0.7)(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + expo-symbols@57.0.2(expo-font@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: '@expo-google-fonts/material-symbols': 0.4.38 - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) - expo-font: 56.0.7(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) + expo-font: 57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) sf-symbols-typescript: 2.2.0 - expo-symbols@56.0.6(expo-font@56.0.7)(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6): + expo-updates-interface@57.0.1(expo@57.0.18): dependencies: - '@expo-google-fonts/material-symbols': 0.4.38 - expo: 56.0.12(deb8cbf3e0f411b34ba85a995c9982ba) - expo-font: 56.0.7(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) - react: 19.2.6 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) - sf-symbols-typescript: 2.2.0 - optional: true - - expo-updates-interface@56.0.2(expo@56.0.12): - dependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) - expo-updates@56.0.19(expo-dev-client@56.0.20(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)))(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + expo-updates@57.0.19(expo-dev-client@57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)))(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: '@expo/code-signing-certificates': 0.0.6 - '@expo/plist': 0.7.0 + '@expo/plist': 0.8.1 '@expo/spawn-async': 1.8.0 arg: 4.1.3 chalk: 4.1.2 debug: 4.4.3 - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) - expo-eas-client: 56.0.1 - expo-manifests: 56.0.4(expo@56.0.12) - expo-structured-headers: 56.0.0 - expo-updates-interface: 56.0.2(expo@56.0.12) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) + expo-eas-client: 57.0.2 + expo-manifests: 57.0.1(expo@57.0.18) + expo-structured-headers: 57.0.0 + expo-updates-interface: 57.0.1(expo@57.0.18) getenv: 2.0.0 glob: 13.0.6 ignore: 5.3.2 nullthrows: 1.1.1 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) resolve-from: 5.0.0 optionalDependencies: - expo-dev-client: 56.0.20(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) + expo-dev-client: 57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) transitivePeerDependencies: - supports-color - expo-web-browser@56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)): + expo-web-browser@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)): dependencies: - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - expo-widgets@56.0.19(3cdc0dde9f93166d952f1e1bd0cb25c0): + expo-widgets@57.0.15(@babel/core@7.29.7)(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(expo@57.0.18)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: - '@expo/plist': 0.7.0 - '@expo/ui': 56.0.18(3cdc0dde9f93166d952f1e1bd0cb25c0) - expo: 56.0.12(8895228379997a2a064f9644cda56ed0) + '@expo/plist': 0.8.1 + '@expo/ui': 57.0.14(@babel/core@7.29.7)(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(expo@57.0.18)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + expo: 57.0.18(f9c992a5d7c53d81398568d3950992dc) react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) transitivePeerDependencies: - '@babel/core' - '@types/react' - '@types/react-dom' - react-dom - - react-native-reanimated - react-native-worklets - expo@56.0.12(8895228379997a2a064f9644cda56ed0): + expo@57.0.18(ecb3896f1dbe5154a21ddc585503f306): dependencies: '@babel/runtime': 7.29.7 - '@expo/cli': 56.1.16(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.15)(bufferutil@4.1.0)(expo-constants@56.0.18)(expo-font@56.0.7)(expo-router@56.2.11)(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6) - '@expo/config': 56.0.9(typescript@6.0.3) - '@expo/config-plugins': 56.0.9(typescript@6.0.3) - '@expo/devtools': 56.0.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - '@expo/fingerprint': 0.19.4 - '@expo/local-build-cache-provider': 56.0.8(typescript@6.0.3) - '@expo/log-box': 56.0.13(@expo/dom-webview@56.0.5)(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - '@expo/metro': 56.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) - '@expo/metro-config': 56.0.14(patch_hash=8cb08b5bb7051ed9d2dbe46a2c293c5a1e17f1bd6ddf30de27909e18c921ff46)(bufferutil@4.1.0)(expo@56.0.12)(typescript@6.0.3)(utf-8-validate@6.0.6) + '@expo/cli': 57.0.20(@expo/dom-webview@57.0.1)(@expo/metro-runtime@57.0.14)(bufferutil@4.1.0)(expo-constants@57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)))(expo-font@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(expo@57.0.18)(react-dom@19.2.6(react@19.2.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)(typescript@6.0.3)(utf-8-validate@6.0.6) + '@expo/config': 57.0.9(typescript@6.0.3) + '@expo/config-plugins': 57.0.9(typescript@6.0.3) + '@expo/devtools': 57.0.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) + '@expo/fingerprint': 0.20.11 + '@expo/local-build-cache-provider': 57.0.8(typescript@6.0.3) + '@expo/log-box': 57.0.4(@expo/dom-webview@57.0.1)(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) + '@expo/metro': 56.0.2(bufferutil@4.1.0)(utf-8-validate@6.0.6) + '@expo/metro-config': 57.0.12(patch_hash=96f1a75347e6ea02dc4b7034ace815d8ee39e18b8166ebfb573d9e58328f0dc2)(bufferutil@4.1.0)(expo@57.0.18)(typescript@6.0.3)(utf-8-validate@6.0.6) '@ungap/structured-clone': 1.3.1 - babel-preset-expo: 56.0.15(@babel/core@7.29.7)(@babel/runtime@7.29.7)(expo-widgets@56.0.19)(expo@56.0.12)(react-refresh@0.14.2) - expo-asset: 56.0.17(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3) - expo-constants: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) - expo-file-system: 56.0.8(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) - expo-font: 56.0.7(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - expo-keep-awake: 56.0.3(expo@56.0.12)(react@19.2.3) - expo-modules-autolinking: 56.0.16(typescript@6.0.3) - expo-modules-core: 56.0.17(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - pretty-format: 29.7.0 - react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - react-refresh: 0.14.2 - whatwg-url-minimum: 0.1.2 - optionalDependencies: - '@expo/dom-webview': 56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - '@expo/metro-runtime': 56.0.15(@expo/log-box@56.0.13)(expo@56.0.12)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - react-dom: 19.2.3(react@19.2.3) - react-native-webview: 13.16.1(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - transitivePeerDependencies: - - '@babel/core' - - bufferutil - - expo-router - - expo-widgets - - react-native-worklets - - react-server-dom-webpack - - supports-color - - typescript - - utf-8-validate - - expo@56.0.12(deb8cbf3e0f411b34ba85a995c9982ba): - dependencies: - '@babel/runtime': 7.29.7 - '@expo/cli': 56.1.16(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.15)(bufferutil@4.1.0)(expo-constants@56.0.18)(expo-font@56.0.7)(expo-router@56.2.11)(expo@56.0.12)(react-dom@19.2.6(react@19.2.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)(typescript@6.0.3)(utf-8-validate@6.0.6) - '@expo/config': 56.0.9(typescript@6.0.3) - '@expo/config-plugins': 56.0.9(typescript@6.0.3) - '@expo/devtools': 56.0.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) - '@expo/fingerprint': 0.19.4 - '@expo/local-build-cache-provider': 56.0.8(typescript@6.0.3) - '@expo/log-box': 56.0.13(@expo/dom-webview@56.0.5)(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) - '@expo/metro': 56.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) - '@expo/metro-config': 56.0.14(patch_hash=8cb08b5bb7051ed9d2dbe46a2c293c5a1e17f1bd6ddf30de27909e18c921ff46)(bufferutil@4.1.0)(expo@56.0.12)(typescript@6.0.3)(utf-8-validate@6.0.6) - '@ungap/structured-clone': 1.3.1 - babel-preset-expo: 56.0.15(@babel/core@7.29.7)(@babel/runtime@7.29.7)(expo-widgets@56.0.19)(expo@56.0.12)(react-refresh@0.14.2) - expo-asset: 56.0.17(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)(typescript@6.0.3) - expo-constants: 56.0.18(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)) - expo-file-system: 56.0.8(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)) - expo-font: 56.0.7(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) - expo-keep-awake: 56.0.3(expo@56.0.12)(react@19.2.6) - expo-modules-autolinking: 56.0.16(typescript@6.0.3) - expo-modules-core: 56.0.17(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) + babel-preset-expo: 57.0.9(@babel/core@7.29.7)(@babel/runtime@7.29.7)(expo-widgets@57.0.15)(expo@57.0.18)(react-refresh@0.14.2) + expo-asset: 57.0.15(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)(typescript@6.0.3) + expo-constants: 57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)) + expo-file-system: 57.0.6(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)) + expo-font: 57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) + expo-keep-awake: 57.0.1(expo@57.0.18)(react@19.2.6) + expo-modules-autolinking: 57.0.12(typescript@6.0.3) + expo-modules-core: 57.0.14(react-native-worklets@0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) pretty-format: 29.7.0 react: 19.2.6 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) react-refresh: 0.14.2 whatwg-url-minimum: 0.1.2 optionalDependencies: - '@expo/dom-webview': 56.0.5(expo@56.0.12)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) - '@expo/metro-runtime': 56.0.15(@expo/log-box@56.0.13)(expo@56.0.12)(react-dom@19.2.6(react@19.2.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) + '@expo/dom-webview': 57.0.1(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) + '@expo/metro-runtime': 57.0.14(@expo/log-box@57.0.4)(expo@57.0.18)(react-dom@19.2.6(react@19.2.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) react-dom: 19.2.6(react@19.2.6) - react-native-webview: 13.16.1(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) + react-native-webview: 13.16.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) transitivePeerDependencies: - '@babel/core' - bufferutil @@ -17362,6 +16735,48 @@ snapshots: - utf-8-validate optional: true + expo@57.0.18(f9c992a5d7c53d81398568d3950992dc): + dependencies: + '@babel/runtime': 7.29.7 + '@expo/cli': 57.0.20(@expo/dom-webview@57.0.1)(@expo/metro-runtime@57.0.14)(bufferutil@4.1.0)(expo-constants@57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)))(expo-font@57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(expo@57.0.18)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6) + '@expo/config': 57.0.9(typescript@6.0.3) + '@expo/config-plugins': 57.0.9(typescript@6.0.3) + '@expo/devtools': 57.0.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + '@expo/fingerprint': 0.20.11 + '@expo/local-build-cache-provider': 57.0.8(typescript@6.0.3) + '@expo/log-box': 57.0.4(@expo/dom-webview@57.0.1)(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + '@expo/metro': 56.0.2(bufferutil@4.1.0)(utf-8-validate@6.0.6) + '@expo/metro-config': 57.0.12(patch_hash=96f1a75347e6ea02dc4b7034ace815d8ee39e18b8166ebfb573d9e58328f0dc2)(bufferutil@4.1.0)(expo@57.0.18)(typescript@6.0.3)(utf-8-validate@6.0.6) + '@ungap/structured-clone': 1.3.1 + babel-preset-expo: 57.0.9(@babel/core@7.29.7)(@babel/runtime@7.29.7)(expo-widgets@57.0.15)(expo@57.0.18)(react-refresh@0.14.2) + expo-asset: 57.0.15(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3) + expo-constants: 57.0.16(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) + expo-file-system: 57.0.6(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)) + expo-font: 57.0.2(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + expo-keep-awake: 57.0.1(expo@57.0.18)(react@19.2.3) + expo-modules-autolinking: 57.0.12(typescript@6.0.3) + expo-modules-core: 57.0.14(react-native-worklets@0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + pretty-format: 29.7.0 + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-refresh: 0.14.2 + whatwg-url-minimum: 0.1.2 + optionalDependencies: + '@expo/dom-webview': 57.0.1(expo@57.0.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + '@expo/metro-runtime': 57.0.14(@expo/log-box@57.0.4)(expo@57.0.18)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + react-dom: 19.2.3(react@19.2.3) + react-native-webview: 13.16.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + transitivePeerDependencies: + - '@babel/core' + - bufferutil + - expo-router + - expo-widgets + - react-native-worklets + - react-server-dom-webpack + - supports-color + - typescript + - utf-8-validate + exponential-backoff@3.1.3: {} express-rate-limit@8.5.2(express@5.2.1): @@ -17867,20 +17282,26 @@ snapshots: heic-to@1.5.2: {} - hermes-compiler@250829098.0.10: {} - - hermes-estree@0.33.3: {} + hermes-compiler@250829098.0.17: {} hermes-estree@0.35.0: {} - hermes-parser@0.33.3: - dependencies: - hermes-estree: 0.33.3 + hermes-estree@0.36.0: {} + + hermes-estree@0.36.1: {} hermes-parser@0.35.0: dependencies: hermes-estree: 0.35.0 + hermes-parser@0.36.0: + dependencies: + hermes-estree: 0.36.0 + + hermes-parser@0.36.1: + dependencies: + hermes-estree: 0.36.1 + hoist-non-react-statics@3.3.2: dependencies: react-is: 16.13.1 @@ -17949,9 +17370,6 @@ snapshots: immediate@3.0.6: {} - indent-string@4.0.0: - optional: true - indent-string@5.0.0: {} inflight@1.0.6: @@ -18675,10 +18093,24 @@ snapshots: transitivePeerDependencies: - supports-color + metro-babel-transformer@0.84.5: + dependencies: + '@babel/core': 7.29.7 + flow-enums-runtime: 0.0.6 + hermes-parser: 0.35.0 + metro-cache-key: 0.84.5 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + metro-cache-key@0.84.4: dependencies: flow-enums-runtime: 0.0.6 + metro-cache-key@0.84.5: + dependencies: + flow-enums-runtime: 0.0.6 + metro-cache@0.84.4: dependencies: exponential-backoff: 3.1.3 @@ -18688,6 +18120,15 @@ snapshots: transitivePeerDependencies: - supports-color + metro-cache@0.84.5: + dependencies: + exponential-backoff: 3.1.3 + flow-enums-runtime: 0.0.6 + https-proxy-agent: 7.0.6 + metro-core: 0.84.5 + transitivePeerDependencies: + - supports-color + metro-config@0.84.4(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: connect: 3.7.0 @@ -18703,12 +18144,33 @@ snapshots: - supports-color - utf-8-validate + metro-config@0.84.5(bufferutil@4.1.0)(utf-8-validate@6.0.6): + dependencies: + connect: 3.7.0 + flow-enums-runtime: 0.0.6 + jest-validate: 29.7.0 + metro: 0.84.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) + metro-cache: 0.84.5 + metro-core: 0.84.5 + metro-runtime: 0.84.5 + yaml: 2.9.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + metro-core@0.84.4: dependencies: flow-enums-runtime: 0.0.6 lodash.throttle: 4.1.1 metro-resolver: 0.84.4 + metro-core@0.84.5: + dependencies: + flow-enums-runtime: 0.0.6 + lodash.throttle: 4.1.1 + metro-resolver: 0.84.5 + metro-file-map@0.84.4: dependencies: debug: 4.4.3 @@ -18723,20 +18185,48 @@ snapshots: transitivePeerDependencies: - supports-color + metro-file-map@0.84.5: + dependencies: + debug: 4.4.3 + fb-watchman: 2.0.2 + flow-enums-runtime: 0.0.6 + graceful-fs: 4.2.11 + invariant: 2.2.4 + jest-worker: 29.7.0 + micromatch: 4.0.8 + nullthrows: 1.1.1 + walker: 1.0.8 + transitivePeerDependencies: + - supports-color + metro-minify-terser@0.84.4: dependencies: flow-enums-runtime: 0.0.6 terser: 5.48.0 + metro-minify-terser@0.84.5: + dependencies: + flow-enums-runtime: 0.0.6 + terser: 5.48.0 + metro-resolver@0.84.4: dependencies: flow-enums-runtime: 0.0.6 + metro-resolver@0.84.5: + dependencies: + flow-enums-runtime: 0.0.6 + metro-runtime@0.84.4: dependencies: '@babel/runtime': 7.29.7 flow-enums-runtime: 0.0.6 + metro-runtime@0.84.5: + dependencies: + '@babel/runtime': 7.29.7 + flow-enums-runtime: 0.0.6 + metro-source-map@0.84.4: dependencies: '@babel/traverse': 7.29.7 @@ -18751,6 +18241,20 @@ snapshots: transitivePeerDependencies: - supports-color + metro-source-map@0.84.5: + dependencies: + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-symbolicate: 0.84.5 + nullthrows: 1.1.1 + ob1: 0.84.5 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + metro-symbolicate@0.84.4: dependencies: flow-enums-runtime: 0.0.6 @@ -18762,6 +18266,17 @@ snapshots: transitivePeerDependencies: - supports-color + metro-symbolicate@0.84.5: + dependencies: + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-source-map: 0.84.5 + nullthrows: 1.1.1 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + metro-transform-plugins@0.84.4: dependencies: '@babel/core': 7.29.7 @@ -18773,6 +18288,17 @@ snapshots: transitivePeerDependencies: - supports-color + metro-transform-plugins@0.84.5: + dependencies: + '@babel/core': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + flow-enums-runtime: 0.0.6 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + metro-transform-worker@0.84.4(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: '@babel/core': 7.29.7 @@ -18793,6 +18319,26 @@ snapshots: - supports-color - utf-8-validate + metro-transform-worker@0.84.5(bufferutil@4.1.0)(utf-8-validate@6.0.6): + dependencies: + '@babel/core': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + flow-enums-runtime: 0.0.6 + metro: 0.84.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) + metro-babel-transformer: 0.84.5 + metro-cache: 0.84.5 + metro-cache-key: 0.84.5 + metro-minify-terser: 0.84.5 + metro-source-map: 0.84.5 + metro-transform-plugins: 0.84.5 + nullthrows: 1.1.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + metro@0.84.4(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: '@babel/code-frame': 7.29.7 @@ -18839,6 +18385,51 @@ snapshots: - supports-color - utf-8-validate + metro@0.84.5(bufferutil@4.1.0)(utf-8-validate@6.0.6): + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/core': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + accepts: 2.0.0 + ci-info: 2.0.0 + connect: 3.7.0 + debug: 4.4.3 + error-stack-parser: 2.1.4 + flow-enums-runtime: 0.0.6 + graceful-fs: 4.2.11 + hermes-parser: 0.35.0 + invariant: 2.2.4 + jest-worker: 29.7.0 + jsc-safe-url: 0.2.4 + lodash.throttle: 4.1.1 + metro-babel-transformer: 0.84.5 + metro-cache: 0.84.5 + metro-cache-key: 0.84.5 + metro-config: 0.84.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) + metro-core: 0.84.5 + metro-file-map: 0.84.5 + metro-resolver: 0.84.5 + metro-runtime: 0.84.5 + metro-source-map: 0.84.5 + metro-symbolicate: 0.84.5 + metro-transform-plugins: 0.84.5 + metro-transform-worker: 0.84.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) + mime-types: 3.0.2 + nullthrows: 1.1.1 + serialize-error: 2.1.0 + source-map: 0.5.7 + throat: 5.0.0 + ws: 7.5.11(bufferutil@4.1.0)(utf-8-validate@6.0.6) + yargs: 17.7.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + micromark-core-commonmark@2.0.3: dependencies: decode-named-character-reference: 1.3.0 @@ -19065,9 +18656,6 @@ snapshots: mimic-response@3.1.0: {} - min-indent@1.0.1: - optional: true - minimatch@10.2.5: dependencies: brace-expansion: 5.0.6 @@ -19161,7 +18749,7 @@ snapshots: multipasta@0.2.8: {} - multitars@1.0.0: {} + multitars@1.0.2: {} mute-stream@2.0.0: {} @@ -19307,6 +18895,10 @@ snapshots: dependencies: flow-enums-runtime: 0.0.6 + ob1@0.84.5: + dependencies: + flow-enums-runtime: 0.0.6 + object-assign@4.1.1: {} object-inspect@1.13.4: {} @@ -19811,18 +19403,10 @@ snapshots: dependencies: react: 19.2.6 - react-fast-compare@3.2.2: - optional: true - react-freeze@1.0.4(react@19.2.3): dependencies: react: 19.2.3 - react-freeze@1.0.4(react@19.2.6): - dependencies: - react: 19.2.6 - optional: true - react-grab@0.1.44(react@19.2.6): dependencies: '@react-grab/cli': 0.1.44 @@ -19856,159 +19440,100 @@ snapshots: transitivePeerDependencies: - supports-color - react-native-drawer-layout@4.2.4(05364bd849de538917a7364cc7dee3f5): - dependencies: - color: 4.2.3 - react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - react-native-gesture-handler: 2.31.2(patch_hash=808eb26f9e57cf4945efd3985af4d9c764da6f91f4c9764433cc868602bbf4d3)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - react-native-reanimated: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - use-latest-callback: 0.2.6(react@19.2.3) - optional: true - - react-native-drawer-layout@4.2.4(de9b2f2dc96a3557fdc0df187a8417ee): - dependencies: - color: 4.2.3 - react: 19.2.6 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) - react-native-gesture-handler: 2.31.2(patch_hash=808eb26f9e57cf4945efd3985af4d9c764da6f91f4c9764433cc868602bbf4d3)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) - react-native-reanimated: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) - use-latest-callback: 0.2.6(react@19.2.6) - optional: true - - react-native-gesture-handler@2.31.2(patch_hash=808eb26f9e57cf4945efd3985af4d9c764da6f91f4c9764433cc868602bbf4d3)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + react-native-gesture-handler@2.32.0(patch_hash=808eb26f9e57cf4945efd3985af4d9c764da6f91f4c9764433cc868602bbf4d3)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: '@egjs/hammerjs': 2.0.17 '@types/react-test-renderer': 19.1.0 hoist-non-react-statics: 3.3.2 invariant: 2.2.4 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - react-native-gesture-handler@2.31.2(patch_hash=808eb26f9e57cf4945efd3985af4d9c764da6f91f4c9764433cc868602bbf4d3)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6): - 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.6 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) - optional: true - - react-native-image-viewing@0.2.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + react-native-image-viewing@0.2.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - react-native-is-edge-to-edge@1.3.1(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + react-native-is-edge-to-edge@1.3.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - - react-native-is-edge-to-edge@1.3.1(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6): - dependencies: - react: 19.2.6 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) - optional: true + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - react-native-keyboard-controller@1.21.13(patch_hash=20be72c84d74253acdcfefbc6defe36dc396944f1a44cab2bdd0e3cd572ae008)(react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + react-native-keyboard-controller@1.21.13(patch_hash=20be72c84d74253acdcfefbc6defe36dc396944f1a44cab2bdd0e3cd572ae008)(react-native-reanimated@4.5.1(react-native-worklets@0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - react-native-is-edge-to-edge: 1.3.1(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - react-native-reanimated: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native-is-edge-to-edge: 1.3.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + react-native-reanimated: 4.5.1(react-native-worklets@0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - react-native-nitro-markdown@0.5.8(react-native-nitro-modules@0.35.9(patch_hash=825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + react-native-nitro-markdown@0.5.8(react-native-nitro-modules@0.35.9(patch_hash=825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - react-native-nitro-modules: 0.35.9(patch_hash=825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native-nitro-modules: 0.35.9(patch_hash=825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) optionalDependencies: - react-native-svg: 15.15.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + react-native-svg: 15.15.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - react-native-nitro-modules@0.35.9(patch_hash=825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + react-native-nitro-modules@0.35.9(patch_hash=825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + react-native-reanimated@4.5.1(react-native-worklets@0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - react-native-is-edge-to-edge: 1.3.1(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) - react-native-worklets: 0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native-is-edge-to-edge: 1.3.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + react-native-worklets: 0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) semver: 7.8.5 - react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6): - dependencies: - react: 19.2.6 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) - react-native-is-edge-to-edge: 1.3.1(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) - react-native-worklets: 0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) - semver: 7.8.5 - optional: true - - react-native-safe-area-context@5.7.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + react-native-safe-area-context@5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - - react-native-safe-area-context@5.7.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6): - dependencies: - react: 19.2.6 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) - optional: true + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - react-native-screens@4.25.2(patch_hash=7474c207dfb4c474b90901a53afa13a8c869a185518d6fbe907686dc4439056e)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + react-native-screens@4.26.2(patch_hash=11566900d0c90514867ede5a2333ba412ab3b5a532ba1955e6306fff8b12de1a)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: react: 19.2.3 react-freeze: 1.0.4(react@19.2.3) - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) warn-once: 0.1.1 - react-native-screens@4.25.2(patch_hash=7474c207dfb4c474b90901a53afa13a8c869a185518d6fbe907686dc4439056e)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6): - dependencies: - react: 19.2.6 - react-freeze: 1.0.4(react@19.2.6) - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) - warn-once: 0.1.1 - optional: true - - react-native-shiki-engine@0.3.12(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + react-native-shiki-engine@0.3.12(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: '@shikijs/types': 4.3.0 '@shikijs/vscode-textmate': 10.0.2 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + react-native-svg@15.15.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: css-select: 5.2.2 css-tree: 1.1.3 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) warn-once: 0.1.1 - react-native-url-polyfill@4.0.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)): + react-native-url-polyfill@4.0.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)): dependencies: - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - react-native-webview@13.16.1(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + react-native-webview@13.16.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: escape-string-regexp: 4.0.0 invariant: 2.2.4 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) - react-native-webview@13.16.1(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6): + react-native-webview@13.16.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6): dependencies: escape-string-regexp: 4.0.0 invariant: 2.2.4 react: 19.2.6 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) optional: true - react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): + react-native-worklets@0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3): dependencies: '@babel/core': 7.29.7 '@babel/plugin-transform-arrow-functions': 7.29.7(@babel/core@7.29.7) @@ -20020,15 +19545,16 @@ snapshots: '@babel/plugin-transform-template-literals': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-unicode-regex': 7.29.7(@babel/core@7.29.7) '@babel/preset-typescript': 7.29.7(@babel/core@7.29.7) - '@react-native/metro-config': 0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6) + '@babel/types': 7.29.7 + '@react-native/metro-config': 0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6) convert-source-map: 2.0.0 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) semver: 7.8.5 transitivePeerDependencies: - supports-color - react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6): + react-native-worklets@0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6): dependencies: '@babel/core': 7.29.7 '@babel/plugin-transform-arrow-functions': 7.29.7(@babel/core@7.29.7) @@ -20040,32 +19566,33 @@ snapshots: '@babel/plugin-transform-template-literals': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-unicode-regex': 7.29.7(@babel/core@7.29.7) '@babel/preset-typescript': 7.29.7(@babel/core@7.29.7) - '@react-native/metro-config': 0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6) + '@babel/types': 7.29.7 + '@react-native/metro-config': 0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6) convert-source-map: 2.0.0 react: 19.2.6 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6) semver: 7.8.5 transitivePeerDependencies: - supports-color optional: true - react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6): + react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6): dependencies: - '@react-native/assets-registry': 0.85.3 - '@react-native/codegen': 0.85.3(@babel/core@7.29.7) - '@react-native/community-cli-plugin': 0.85.3(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(bufferutil@4.1.0)(utf-8-validate@6.0.6) - '@react-native/gradle-plugin': 0.85.3(patch_hash=c1b594a16e682d621b6a960926f8ce13fc92edfb397884cfe7fcb0518996a784) - '@react-native/js-polyfills': 0.85.3 - '@react-native/normalize-colors': 0.85.3 - '@react-native/virtualized-lists': 0.85.3(@types/react@19.2.16)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) + '@react-native/assets-registry': 0.86.3 + '@react-native/codegen': 0.86.3(@babel/core@7.29.7) + '@react-native/community-cli-plugin': 0.86.3(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(bufferutil@4.1.0)(utf-8-validate@6.0.6) + '@react-native/gradle-plugin': 0.86.3 + '@react-native/js-polyfills': 0.86.3 + '@react-native/normalize-colors': 0.86.3 + '@react-native/virtualized-lists': 0.86.3(@types/react@19.2.16)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 - babel-plugin-syntax-hermes-parser: 0.33.3 + babel-plugin-syntax-hermes-parser: 0.36.0 base64-js: 1.5.1 commander: 12.1.0 flow-enums-runtime: 0.0.6 - hermes-compiler: 250829098.0.10 + hermes-compiler: 250829098.0.17 invariant: 2.2.4 memoize-one: 5.2.1 metro-runtime: 0.84.4 @@ -20094,23 +19621,23 @@ snapshots: - supports-color - utf-8-validate - react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6): + react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6): dependencies: - '@react-native/assets-registry': 0.85.3 - '@react-native/codegen': 0.85.3(@babel/core@7.29.7) - '@react-native/community-cli-plugin': 0.85.3(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(bufferutil@4.1.0)(utf-8-validate@6.0.6) - '@react-native/gradle-plugin': 0.85.3(patch_hash=c1b594a16e682d621b6a960926f8ce13fc92edfb397884cfe7fcb0518996a784) - '@react-native/js-polyfills': 0.85.3 - '@react-native/normalize-colors': 0.85.3 - '@react-native/virtualized-lists': 0.85.3(@types/react@19.2.16)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) + '@react-native/assets-registry': 0.86.3 + '@react-native/codegen': 0.86.3(@babel/core@7.29.7) + '@react-native/community-cli-plugin': 0.86.3(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(bufferutil@4.1.0)(utf-8-validate@6.0.6) + '@react-native/gradle-plugin': 0.86.3 + '@react-native/js-polyfills': 0.86.3 + '@react-native/normalize-colors': 0.86.3 + '@react-native/virtualized-lists': 0.86.3(@types/react@19.2.16)(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 - babel-plugin-syntax-hermes-parser: 0.33.3 + babel-plugin-syntax-hermes-parser: 0.36.0 base64-js: 1.5.1 commander: 12.1.0 flow-enums-runtime: 0.0.6 - hermes-compiler: 250829098.0.10 + hermes-compiler: 250829098.0.17 invariant: 2.2.4 memoize-one: 5.2.1 metro-runtime: 0.84.4 @@ -20155,15 +19682,6 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 - react-remove-scroll-bar@2.3.8(@types/react@19.2.16)(react@19.2.6): - dependencies: - react: 19.2.6 - react-style-singleton: 2.2.3(@types/react@19.2.16)(react@19.2.6) - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.2.16 - optional: true - react-remove-scroll@2.7.2(@types/react@19.2.16)(react@19.2.3): dependencies: react: 19.2.3 @@ -20175,18 +19693,6 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 - react-remove-scroll@2.7.2(@types/react@19.2.16)(react@19.2.6): - dependencies: - react: 19.2.6 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.16)(react@19.2.6) - react-style-singleton: 2.2.3(@types/react@19.2.16)(react@19.2.6) - tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.16)(react@19.2.6) - use-sidecar: 1.1.3(@types/react@19.2.16)(react@19.2.6) - optionalDependencies: - '@types/react': 19.2.16 - optional: true - react-style-singleton@2.2.3(@types/react@19.2.16)(react@19.2.3): dependencies: get-nonce: 1.0.1 @@ -20195,15 +19701,6 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 - react-style-singleton@2.2.3(@types/react@19.2.16)(react@19.2.6): - dependencies: - get-nonce: 1.0.1 - react: 19.2.6 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.2.16 - optional: true - react@19.2.3: {} react@19.2.6: {} @@ -20228,12 +19725,6 @@ snapshots: readdirp@5.0.0: {} - redent@3.0.0: - dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - optional: true - redis-errors@1.2.0: {} redis-parser@3.0.0: @@ -20544,6 +20035,8 @@ snapshots: safer-buffer@2.1.2: {} + sandbox-cli-detector@0.2.0: {} + sanitize-filename@1.6.4: dependencies: truncate-utf8-bytes: 1.0.2 @@ -20652,18 +20145,12 @@ snapshots: transitivePeerDependencies: - supports-color - server-only@0.0.1: - optional: true - setimmediate@1.0.5: {} setprototypeof@1.2.0: {} sf-symbols-typescript@2.2.0: {} - shallowequal@1.1.0: - optional: true - sharp@0.34.5: dependencies: '@img/colour': 1.1.0 @@ -20846,9 +20333,6 @@ snapshots: standard-as-callback@2.1.0: {} - standard-navigation@0.0.5: - optional: true - standard-navigation@0.0.7: {} standardwebhooks@1.0.0: @@ -20910,11 +20394,6 @@ snapshots: dependencies: ansi-regex: 6.2.2 - strip-indent@3.0.0: - dependencies: - min-indent: 1.0.1 - optional: true - strnum@2.3.0: {} structured-headers@0.4.1: {} @@ -21223,14 +20702,14 @@ snapshots: universalify@2.0.1: {} - uniwind@1.7.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(tailwindcss@4.3.0): + uniwind@1.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(tailwindcss@4.3.0): dependencies: '@tailwindcss/node': 4.2.1 '@tailwindcss/oxide': 4.2.1 culori: 4.0.2 lightningcss: 1.30.1 react: 19.2.3 - react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6) tailwindcss: 4.3.0 unpipe@1.0.0: {} @@ -21289,23 +20768,10 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 - use-callback-ref@1.3.3(@types/react@19.2.16)(react@19.2.6): - dependencies: - react: 19.2.6 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.2.16 - optional: true - use-latest-callback@0.2.6(react@19.2.3): dependencies: react: 19.2.3 - use-latest-callback@0.2.6(react@19.2.6): - dependencies: - react: 19.2.6 - optional: true - use-sidecar@1.1.3(@types/react@19.2.16)(react@19.2.3): dependencies: detect-node-es: 1.1.0 @@ -21314,15 +20780,6 @@ snapshots: optionalDependencies: '@types/react': 19.2.16 - use-sidecar@1.1.3(@types/react@19.2.16)(react@19.2.6): - dependencies: - detect-node-es: 1.1.0 - react: 19.2.6 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.2.16 - optional: true - use-sync-external-store@1.6.0(react@19.2.3): dependencies: react: 19.2.3 @@ -21359,16 +20816,6 @@ snapshots: - '@types/react' - '@types/react-dom' - vaul@1.1.2(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6): - dependencies: - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - optional: true - vfile-location@5.0.3: dependencies: '@types/unist': 3.0.3 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 5d13e60a04763f7b09cb6a9b2198e63fc9bdd9f5..65a16b45b73bacf7fa386363e48aea9746f4c17e 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -76,6 +76,15 @@ minimumReleaseAgeExclude: - alchemy@2.0.0-beta.65 - effect@4.0.0-beta.103 - "@legendapp/list@3.3.5" + - "@expo/cli@57.0.20" + - "@expo/env@2.4.3" + - "@expo/fingerprint@0.20.11" + - "@expo/metro-config@57.0.12" + - expo-constants@57.0.16 + - expo-font@57.0.2 + - expo-updates@57.0.19 + - expo@57.0.18 + - expo-widgets@57.0.15 overrides: # The SDK always receives the user's Claude executable, so its bundled binaries are unused. @@ -108,20 +117,22 @@ overrides: "@effect/sql-sqlite-bun": "catalog:" "@effect/vitest": "catalog:" "@effect/vitest>vitest": "-" - "@expo/metro-config": 56.0.14 + "@expo/dom-webview": 57.0.1 + "@expo/metro-config": 57.0.12 + expo-constants: 57.0.16 "@pierre/diffs>@shikijs/transformers": ^4.2.0 "@types/node": "catalog:" effect: "catalog:" - expo-modules-jsi: 56.0.10 - "expo-sharing>@expo/config-plugins": 56.0.9 - "expo-sharing>@expo/config-types": 56.0.6 + expo-router: 57.0.17 + "expo-sharing>@expo/config-plugins": 57.0.9 + "expo-sharing>@expo/config-types": 57.0.2 vite: "catalog:" yaml: "catalog:" packageExtensions: "@clerk/expo@*": dependencies: - "@expo/config-plugins": 56.0.9 + "@expo/config-plugins": 57.0.9 "@effect/vitest@*": dependencies: vite-plus: "catalog:" @@ -135,19 +146,17 @@ packageExtensions: patchedDependencies: "@clerk/expo@4.2.0": patches/@clerk__expo@4.2.0.patch "@effect/vitest@4.0.0-beta.103": patches/@effect__vitest@4.0.0-beta.103.patch - "@expo/metro-config@56.0.14": patches/@expo%2Fmetro-config@56.0.14.patch + "@expo/metro-config@57.0.12": patches/@expo__metro-config@57.0.12.patch "@ff-labs/fff-node@0.9.4": patches/@ff-labs__fff-node@0.9.4.patch "@legendapp/list@3.3.5": patches/@legendapp__list@3.3.5.patch "@pierre/diffs@1.3.0-beta.10": patches/@pierre%2Fdiffs@1.3.0-beta.10.patch "@react-native-menu/menu@2.0.0": patches/@react-native-menu__menu@2.0.0.patch - "@react-native/gradle-plugin@0.85.3": patches/@react-native__gradle-plugin@0.85.3.patch "@react-navigation/native-stack@7.17.6": patches/@react-navigation%2Fnative-stack@7.17.6.patch effect@4.0.0-beta.103: patches/effect@4.0.0-beta.103.patch - expo-modules-jsi@56.0.10: patches/expo-modules-jsi@56.0.10.patch - react-native-gesture-handler@2.31.2: patches/react-native-gesture-handler@2.31.2.patch + react-native-gesture-handler@2.32.0: patches/react-native-gesture-handler@2.32.0.patch react-native-keyboard-controller@1.21.13: patches/react-native-keyboard-controller@1.21.13.patch react-native-nitro-modules@0.35.9: patches/react-native-nitro-modules@0.35.9.patch - react-native-screens@4.25.2: patches/react-native-screens@4.25.2.patch + react-native-screens@4.26.2: patches/react-native-screens@4.26.2.patch peerDependencyRules: allowAny: